如何在mex文件中创建结构?

时间:2016-04-27 14:37:06

标签: matlab struct mex

我有这个C结构:

struct position
{
    float x, y, z;
};

struct orientation
{
    float x, y, z;
};

struct robot
{
    position pose;
    orientation or;
};

主要是我使用

  

struct robot data

问题是如何在mex函数中创建该结构? 感谢

编辑1: 我想在.mat文件中实现的目的是:

robot <1x5 struct>
  robot(1,1) <1x1 struct>
     robot(1,1).position <1x1 struct> 
        x
        y
        z
     robot(1,1).orientation <1x1 struct> with x,y and z fields
        x
        y
        z
  robot(1,2) <1x1 struct>
     robot(1,2).position <1x1 struct> with x,y and z fields
        x
        y
        z
     robot(1,2).orientation <1x1 struct> with x,y and z fields
        x
        y
        z
                  .
                  .
                  .
  robot(1,5) <1x1 struct>
     robot(1,5).position <1x1 struct> with x,y and z fields
        x
        y
        z
     robot(1,5).orientation <1x1 struct> with x,y and z fields
        x
        y
        z

我能够得到我需要的结构:

double values[5] = {1,2,3,4}; //Just for testing.
const char *field_robot[] = {"pos", "or"};
const char *field_coordinates[] = {"x", "y", "z"};
mxPos = mxCreateStructMatrix(1,1,3, field_coordinates);
mxOr = mxCreateStructMatrix(1,1,3, field_coordinates);
mxRobot = mxCreateStructMatrix(1,1,5, field_robot);

for(i=0; i<5; i++)
{
    mxSetFieldByNumber(mxPos, 0, 0, mxCreateDoubleScalar(values[i]));
    mxSetFieldByNumber(mxRobot, i, 0, mxPos);
}

我可以在matlab中看到它是我想要的,但在robot.pos.x中我只有4个所有的值。它只保存最后一个值。

1 个答案:

答案 0 :(得分:1)

下面的代码来自MATLAB内置示例“phonebook.c”,并显示了如何在MeX文件中创建MATLAB结构数组的示例。您可以使用以下命令在MATLAB中查看整个源文件:

(lldb) p (BOOL)[test[@"test_3"] boolValue]
(BOOL) $1 = NO

您可以在mathworks网站上找到在线文档:

http://www.mathworks.com/help/matlab/matlab_external/passing-structures-and-cell-arrays.html?refresh=true#zmw57dd0e20943

edit([matlabroot '/extern/examples/refbook/phonebook.c']);