您的位置:首页 > 其它

Pro/TOOLKIT示例程序(八)获取几何元素:面

2018-01-14 15:59 232 查看
在Pro/TOOLKIT中,类型ProSurface表示面。ProSurface和ProGeomitem之间可以相互转换:

ProSurface -> ProGeomitem:ProSurfaceToGeomitem

ProGeomitem -> ProSurface:ProGeomitemToSurface

ProSurfaceTypeGet用于获取面的类型,面的类型有以下几种:

PRO_SRF_PLANE:平面。

PRO_SRF_CYL:圆柱面。

PRO_SRF_CONE:圆锥面

PRO_SRF_TORUS:圆环面

...等等

函数ProGeomitemdataGet用于获取面的数据,注意在用完之后要调用ProGeomitemdataFree来释放数据。

ProGeomitemdata下的ProSurfacedata用于存储面的数据,而其下 ProSurfaceshapedata srf_shape 则用于表达不同类型面的具体数据。

typedef struct geom_item_data_struct
{
ProType     obj_type;
union
{
ProCurvedata     *p_curve_data;
ProSurfacedata   *p_surface_data;
ProCsysdata      *p_csys_data;
} data;
} ProGeomitemdata;

typedef struct ptc_surf
{
......
ProSurfaceshapedata srf_shape;
......
} ProSurfacedata;

typedef union ptc_srfshape
{
ProPlanedata      plane;     // 平面
ProCylinderdata   cylinder;  // 圆柱面
ProConedata       cone;      // 圆锥面
ProTorusdata      torus;     // 圆环面
ProSrfrevdata     srfrev;
......
} ProSurfaceshapedata;


示例代码:

// 获取面的数据
int TestGetSurfaceData(uiCmdCmdId  command,
uiCmdValue *p_value,
void       *p_push_command_data)
{
ProError err;

// 选择面
ProSelection *sels;
int nSel = 0;
err = ProSelect("surface,datum", 1, NULL, NULL, NULL, NULL, &sels, &nSel);
if (PRO_TK_NO_ERROR != err || 1 != nSel)
{
return -1;
}

// 获取选择的面
ProGeomitem geomSurface;
err = ProSelectionModelitemGet(sels[0], &geomSurface);
ProSurface surface;
err = ProGeomitemToSurface(&geomSurface, &surface);
ProSrftype srfType;
err = ProSurfaceTypeGet(surface, &srfType);

// 获取面的数据
ProGeomitemdata* geomdata;
err = ProGeomitemdataGet(&geomSurface, &geomdata);

// 根据面的类型获取具体的数据
CStringW cstrInfo;
switch (srfType)
{
case PRO_SRF_PLANE:
{
cstrInfo = L"面的类型: 平面\n";
CStringW cstrPlaneNormalVector;
cstrPlaneNormalVector.Format(L"平面的法向量: (%.2f, %.2f, %.2f)",
geomdata->data.p_surface_data->srf_shape.plane.e3[0],
geomdata->data.p_surface_data->srf_shape.plane.e3[1],
geomdata->data.p_surface_data->srf_shape.plane.e3[2]);
cstrInfo += cstrPlaneNormalVector;
}
break;

case PRO_SRF_CYL:
{
cstrInfo = L"面的类型: 圆柱面\n";
CStringW cstrRadius;
cstrRadius.Format(L"圆柱面的半径为: %.2f", geomdata->data.p_surface_data->srf_shape.cylinder.radius);
cstrInfo += cstrRadius;
}
break;

default:
cstrInfo = L"面的数据:亲,试试自己完成!";
break;
}
MessageBoxW(NULL, cstrInfo, L"icaxdev: Sample004", MB_OK);

// 释放数据
err = ProGeomitemdataFree(&geomdata);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息