Creo二次开发:查找文件件下具有某种几何特征的模型

原创 2016年08月16日 13:34:37
vector<ProGeomitem> Geomitem;
ProSrftype type;
ProError UserGeomitemVisitAct(ProGeomitem* geomitem,ProError status,ProAppData data)
{
    ProSurface surface;
    ProSrftype surf_type;
    status=ProGeomitemToSurface(geomitem,&surface);
    status=ProSurfaceTypeGet(surface,&surf_type);
    if (type==surf_type)
    {
        vector<ProGeomitem>* pf=(vector<ProGeomitem>*)data;
        pf->push_back(*geomitem);
    }
    return PRO_TK_NO_ERROR;
}
ProError UserFeatureVisitAct(ProFeature* p_feature,ProError status,ProAppData data)
{
    //遍历特征下的几何项
    status=ProFeatureGeomitemVisit(p_feature,PRO_TYPE_UNUSED,(ProGeomitemAction)UserGeomitemVisitAct,NULL,&Geomitem);
    if (PRO_TK_NO_ERROR!=status)
    {
        return status;
    }
    return PRO_TK_NO_ERROR;
}

void CSearchMdl::OnBnClickedBtnSearchMdlByGeomItem()
{
    // TODO: 在此添加控件通知处理程序代码
    ProError status;
    ProName name;
    ProStringToWstring(name,"D:\\demo\\test");
    ProPath *file_list,*dir_list;
    status=ProArrayAlloc(0,sizeof(ProPath),1,(ProArray*)&file_list);
    status=ProArrayAlloc(0,sizeof(ProPath),1,(ProArray*)&dir_list);
    status=ProFilesList(name,L"*.prt",PRO_FILE_LIST_LATEST,&file_list,&dir_list);
    if (PRO_TK_NO_ERROR!=status)
    {
        return;
    }
    int size=0;
    status=ProArraySizeGet((ProArray)file_list,&size);
    
    CString strWeb;
    int nSel;
    //获取组合框控件的列表中选项索引
    nSel=m_comboWeb.GetCurSel();
    //根据选中项索引获取该字符串
    m_comboWeb.GetLBText(nSel,strWeb);
    if (_T("圆柱面")==strWeb)
        type=PRO_SRF_CYL;
    else if(_T("旋转面")==strWeb)
        type=PRO_SRF_SPL;
    else
        type=PRO_SRF_PLANE;
    //清空列表控件
    m_GeomMdlList.DeleteAllItems();

    ProMdl mdl;
    ProName mdl_name;
    vector<ProFeature> p_feat;
    for (int i=0;i<size;i++)
    {
        //清空向量
        Geomitem.clear();
        ProMdlLoad(file_list[i],PRO_MDL_PART,PRO_B_FALSE,&mdl);
        ProMdlDisplay(mdl);     
        //遍历指定实体的所有特征
        status=ProSolidFeatVisit((ProSolid)mdl,(ProFeatureVisitAction)UserFeatureVisitAct,NULL,(ProAppData)&p_feat);
        if (Geomitem.size()!=0)
        {
            status=ProMdlNameGet(mdl,mdl_name);
            m_GeomMdlList.InsertItem(0,mdl_name);
        }
    }

}

运行结果:

     

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

头文件中添加如下变量声明:     HTREEITEM hRoot;     HTREEITEM hPrt;     HTREEITEM hFea; //动作函数 ProError Us...

Creo二次开发:查找和替换指定文件夹下所有工程图中的符号

类似之前的注释的查找和替换,主要是对符号的遍历,使用函数ProDrawingDtlsyminstVisit,代码如下: ProError UserSymbolVisitAct(ProDtlitem ...

Creo二次开发:根据参数在指定文件夹中查找模型

通过参数遍历函数ProParameterVisit获取模型的所有参数,然后将编辑框中输入的参数与之比较,相等则找到对应模型,显示到列表控件中。 代码如下: //动作函数 ProError Use...

CAA二次开发 CGM模型四种操作方式 数学操作 几何操作 拓扑操作 特征操作

CGM模块中的操作CGM模块中的操作有细分、几何、拓扑、数学,本文主要讲基本几何操作。 1. 概要以下为个人体会,希望能给初学者带来帮助。 在通过CAA 对CATIA 进行二次开发过程中经常会使用...

Creo二次开发:批量生成工程图

具有如下功能: 1)在列表中列出装配体下所有的零件,选择多个需要生成工程图的零件 2)然后对选中的零件生成工程图 3)在每一个工程图中添加表,列出工程图对应模型的参数信息(名称,类型,值等)...

Creo二次开发:创建工程图,生成球标和明细表

首先需要在Creo中创建一个自己的工程图模板,在模板中插入表格,并且设置表格的重复区域。创建工程图时就自动生成明细表了。 代码如下: //创建工程图 int CPart2DDlg::UserDr...

Creo/Proe 二次开发中使用 QT 编程流程

Creo/Proe 二次开发中使用 QT 编程流程

Creo二次开发:参数化设计

以创建一个矿泉水瓶组件为例,实现参数化设计,包括瓶身和瓶盖两部分,其中参数和关系在Creo中已经定义好了。代码如下: //自定义函数 ProError action(ProParameter *p...

Creo二次开发:坐标系自动装配

在瓶底可以点选放置一个时间标签(标签可以是零件) 代码如下: //创建坐标系UDF void putcsys(ProMdl mdl,double x,double y,double z) { ...

Creo二次开发--实例(1)

实例一参数化设计实例 一、程序的目的 程序的目的是通过对话框实现对尺寸的修改,并对模型进行再生,实现零件的参数化设计。所用到的Toolkit函数包括菜单类函数、尺寸遍历函数、尺寸修改函数、模型操作...
  • jh2005
  • jh2005
  • 2013年02月07日 21:36
  • 7685
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Creo二次开发:查找文件件下具有某种几何特征的模型
举报原因:
原因补充:

(最多只允许输入30个字)