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

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

    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     {
        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);
}

运行结果:

Creo二次开发:导出模型清单,包含序号、模型名称_第1张图片

Creo二次开发:导出模型清单,包含序号、模型名称_第2张图片

你可能感兴趣的:(Creo二次开发:导出模型清单,包含序号、模型名称)