Creo二次开发:导出模型清单,包含序号、模型名称

    xiaoxiao2026-05-04  6

    头文件中添加如下变量声明:

        HTREEITEM hRoot;     HTREEITEM hPrt;     HTREEITEM hFea;

    //动作函数

    ProError UserFeatVisitAct(ProFeature* p_feature,ProError status,ProAppData data) {     //向数组的特定位置或尾部添加对象     ProArrayObjectAdd((ProArray*)data,PRO_VALUE_UNUSED/*在数组尾部添加对象*/,1/*添加至数组中对象的个数*/,p_feature);     return PRO_TK_NO_ERROR; } //过滤函数 ProError UserFeatVisitFilt(ProFeature* p_feature,ProAppData data) {     if (p_feature->id>=0)     {         return PRO_TK_NO_ERROR;     }     else{         return PRO_TK_CONTINUE/*跳过此特征,访问下一个*/;     } } void CPart3DDlg::UserLoadAllFeatureInPart(ProMdl mdl,HTREEITEM hitem) {     ProError status;     ProArray id_array;     ProModelitem mdlitem;     //分配一个对象数组     status=ProArrayAlloc(0/*数组中初始对象的个数*/,sizeof(ProFeature)/*数组中每个对象的大小*/,1/*对象最小个数*/,&id_array/*输出分配的数组*/);     if (PRO_TK_NO_ERROR!=status)     {         AfxMessageBox(_T("内存错误"));         return ;     }     //遍历指定实体的所有特征(包括内部特征)     status=ProSolidFeatVisit((ProSolid)mdl,(ProFeatureVisitAction)UserFeatVisitAct,         (ProFeatureFilterAction)UserFeatVisitFilt,(ProAppData)&id_array);     if (PRO_TK_NO_ERROR!=status)     {         AfxMessageBox(_T("遍历失败!"));         return;     }     int array_size;     //获取数组大小,存入变量array_size     ProArraySizeGet(id_array,&array_size);     if (0==array_size)     {         AfxMessageBox(_T("No FeatID was found!"));         return;     }     //通过循环将遍历到的特征写入树型控件中     for (int i=0;i<array_size;i++)     {         ProFeature feature;         feature=((ProFeature*)id_array)[i];         int temp=feature.id;         ProName name;         ProLine line;         char value[20]={0};         ProMdl mdl_prt;                  ProFeattype p_type;         //获取特征的类型         ProFeatureTypeGet(&feature,&p_type);         if (1000==p_type)         {             status=ProAsmcompMdlGet((ProAsmcomp*)&feature,&mdl_prt);             status=ProMdlNameGet(mdl_prt,name);             sprintf_s(value/*输出项*/,"|%d",temp);             ProStringToWstring(line,value);             //字符串连接             wcscat_s(name,line);             hPrt=m_tree.InsertItem(name/*插入节点的字符串*/,NULL/*图标索引*/,NULL/*图标索引*/,hRoot/*插入节点的父节点句柄*/,TVI_LAST/*插入到树型控件的最后面*/);             UserLoadAllFeatureInPart(mdl_prt,hPrt);         }         else{             status=ProModelitemNameGet(&feature,name);             sprintf_s(value,"|%d",temp);             ProStringToWstring(line,value);             wcscat_s(name,line);             ProMdlToModelitem(mdl,&mdlitem);             if (mdlitem.type==PRO_ASSEMBLY)             {                 hFea=m_tree.InsertItem(name,NULL,NULL,hRoot,TVI_LAST);             }             else{                 hFea=m_tree.InsertItem(name,NULL,NULL,hPrt,TVI_LAST);             }         }     }     ProArrayFree(&id_array);

    }

    void CPart3DDlg::OnBnClickedBtnModelLayer() {     // TODO: 在此添加控件通知处理程序代码     ProMdl mdl;     ProName name;     ProMdlCurrentGet(&mdl);     ProMdlNameGet(mdl,name);     hRoot=m_tree.InsertItem(name,NULL,NULL);     UserLoadAllFeatureInPart(mdl,hPrt); }

    运行结果:

    转载请注明原文地址: https://ju.6miu.com/read-1309337.html
    最新回复(0)