一、特征概念
Creo是基于特征的参数化建模,在模型树上的每个项目都是特征。
模型主要由各类特征构成。以零件模型为例,其基本特征包括基准特征、拉伸特征、孔特征、倒圆角特征、旋转特征、曲面特征、切口特征、阵列特征和扫描特征等。这些特征的叠加形成一个完整的三维零件模型。
在装配件中,元件则是其构成特征,通常由零件或子装配件组成。元件相对于装配件的特性而言,在装配件中起到关键作用。而如果元件本身是零件模型,则其内部又由构成零件模型的基本特征组成。因此,在装配件中,特征构成呈现出层次结构。
二、特征的定义
特征对象结构。
typedef struct pro_model_item
{
ProType type;
int id;
ProMdl owner;
}ProModelitem, ProGeomitem, ProExtobj, ProFeature
其中:
- type:值为PRO_FEATURE;
- id:特征ID;
- owner:特征所属的模型;
三、遍历模型下的特征
要访问组件,可以用【ProSolidFeatVisit】进行访问 ,并使用函数ProFeatureTypeGet()查找类型为PRO_FEAT_COMPONENT的特征。
实例代码。
void VisitAllFeatrues()
{
//分配一个数组存特征id
ProError status;
ProArray id_array = NULL;
status = ProArrayAlloc(0, sizeof(int), 1, (ProArray*)&id_array);
if (status != PRO_TK_NO_ERROR)
{
AfxMessageBox(_T("ProArrayAlloc error"));
return;
}
//获取当前模型,遍历特征
ProMdl mdl;
ProMdlCurrentGet(&mdl);
ProSolidFeatVisit((ProSolid)mdl,
(ProFeatureVisitAction)UserFeatVisitAct,
(ProFeatureFilterAction)VisitFilter,
(ProAppData)&id_array);
int array_size;
ProArraySizeGet((ProArray)id_array, &array_size);
ProArrayFree((ProArray*)&id_array);
}
其中,关于访问函数。
// 实体模型特征访问函数
ProError SolidFeatVisitFunc(ProFeature* p_feature,
ProError status,
ProAppData app_data)
{
ProArrayObjectAdd((ProArray*)app_data, -1, 1, p_feature);
return PRO_TK_NO_ERROR;
}
关于过滤函数。
ProError VisitFilter(ProFeature* feature,ProError status,ProAppData appdate)
{
ProError status;
ProFeattype ftype;
status = ProFeatureTypeGet(feature, &ftype);
if (ftype == PRO_FEAT_COMPONENT)
return (PRO_TK_NO_ERROR);
return (PRO_TK_CONTINUE);
}
更多学习内容,可关注公众号:CAD软件二次开发
以上内容为个人测试过程的记录,供大家参考。
内容如有错欢迎批评指正,谢谢!!!!