主要函数
ProSolidFeatVisit
//特征对象的结构
typedef struct pro_model_item
{
ProType type;
int id;
ProMdl owner;
} ProModelitem, ProGeomitem, ProExtobj, ProFeature,
代码过程
分配一个数组存特征id
获取当前模型,遍历特征
遍历显示特征的ID
void UserTestVisitAllFeatruesInPart()
{
//分配一个数组存特征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)UserFeatVisitFilt,
(ProAppData)&id_array);
int array_size;
ProArraySizeGet((ProArray)id_array, &array_size);
if (array_size == 0)
{
AfxMessageBox(_T("No id found"));
return;
}
//遍历特征的ID
char result[255] = {
0 };
strcpy(result, "the ids are : ");
for (int i = 0; i < array_size; i++)
{
char temp[20] = {
0 };
sprintf(temp, "%d | ", ((int*)id_array)[i]);
strcat(result, temp);
}
AfxMessageBox((CString)result);
ProArrayFree((ProArray*)&id_array);
}
ProSolidFeatVisit 参数中的过滤函数和动作函数
//过滤id小于1的特征
//把访问到的特征的id放置数据集数组里
//过滤id小于1的特征
ProError UserFeatVisitFilt(ProFeature* p_feature, ProAppData data)
{
if (p_feature->id < 1)
return PRO_TK_CONTINUE; // if id < 100, skip this feature.
else
return PRO_TK_NO_ERROR; // if id >= 100, pass it to 'UserFeatVisitAct'
}
//把访问到的特征的id放置数据集数组里
ProError UserFeatVisitAct(ProFeature* p_feature, ProError status, ProAppData data)
{
int value = p_feature->id;
status = ProArrayObjectAdd((ProArray*)data, PRO_VALUE_UNUSED, 1, &value);
return PRO_TK_NO_ERROR;
}