【ProToolkit范例之三】遍历模型下的所有Feature

Pro/E是完全基于Feature(特征)的三维软件。

在模型树上的每个项目都是特征。如下图所示

以下程序实现对ProE当前模型下Feature的遍历访问,附代码:

ProError _VisitSolidAllFeats_(ProFeature* p_feature,
                              ProError status,
                              ProAppData app_data)
{
    ProArrayObjectAdd((ProArray*)app_data, -1, 1, p_feature);
    return PRO_TK_NO_ERROR;
}


int Test(uiCmdCmdId  command,
         uiCmdValue *p_value,
         void       *p_push_command_data)
{
    ProError err;
    ProMdl mdl;

    // 获取当前模型句柄
    err = ProMdlCurrentGet(&mdl);
    if (PRO_TK_NO_ERROR != err)
        return -1;

    // 定义数组变量,用于记录后面遍历访问的所有ProFeature
    ProArray arr;
    ProArrayAlloc(0, sizeof(ProFeature), 10, &arr);

    // 变量访问当前模型下的所有Feature
    ProSolidFeatVisit((ProSolid)mdl, _VisitSolidAllFeats_, NULL, &arr);

    // 输出数组中的所有ProFeature的Id
    int nSize;
    ProArraySizeGet(arr, &nSize);
    CString cstr;
    cstr.Format(TEXT("共有%d个Feature"), nSize);
    AfxMessageBox(cstr);

    for (int i=0; i<nSize; ++i)
    {
        int id = ((ProFeature*)arr)[i].id;
        cstr.Format(TEXT("Feature Id = %d"), id);
        AfxMessageBox(cstr);
    }

    // 释放数组资源
    ProArrayFree(&arr);


    return 0;
}

源码下载 VS2005+Proe3.0
http://download.csdn.net/detail/wangyao1052/4945338

posted on 2012-12-30 22:41  wangyao1052  阅读(1550)  评论(0编辑  收藏  举报

导航