Creo protoolkit 二次开发(三) 遍历模型的特征

发布于:2024-07-31 ⋅ 阅读:(114) ⋅ 点赞:(0)

一、特征概念

        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软件二次开发

 以上内容为个人测试过程的记录,供大家参考。

内容如有错欢迎批评指正,谢谢!!!!


网站公告

今日签到

点亮在社区的每一天
去签到