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

在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;
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值