RemoveUnneededFeaturesInRail()
{
ProError err;
// 1. 遍歷所有模腳,查找QUILT_CUT的UDF
// 2. 查看QUILT_CUT的父特徵
// 3. 如果其父特徵是PULL_BACK中的特徵,則刪除
int rail_num(0);
err = ProArraySizeGet(frt_moldbase.rail_mdls, &rail_num);
if (err != PRO_TK_NO_ERROR || rail_num < 1)
{
return PRO_TK_USER_ABORT;
}
char temp[PRO_NAME_SIZE];
for (int i = 0; i < rail_num; ++i)
{
ProGroup *udfs;
err = ProSolidGroupsCollect((ProSolid)frt_moldbase.rail_mdls[i], &udfs);
ProName udf_name;
ProName udf_instance;
int udf_num(0);
err = ProArraySizeGet(udfs, &udf_num);
if (err != PRO_TK_NO_ERROR || udf_num < 1)
{
continue;
}
for (int j = 0; j < udf_num; ++j)
{
bool is_unneeded_feat(false);
err = ProUdfNameGet(&udfs[j], udf_name, udf_instance);
ProWstringToString(temp, udf_name);
if (stricmp(temp, "QUILT_CUT"))
{
continue;
}
int udf_feat_num(0);
ProFeature *udf_feats;
err = ProGroupFeaturesCollect(&udfs[j], &udf_feats);
err = ProArraySizeGet(udf_feats, &udf_feat_num);
if (err != PRO_TK_NO_ERROR || udf_feat_num < 2)
{
continue;
}
// 第1個特徵是群組頭特徵,第2個特徵是CUTOUT特徵
int parent_num(0);
ProExtRefInfo *parent_infos = NULL;
err = ProFeatureExternParentsGet(&udf_feats[1], PRO_EXT_GEOM_REF, &parent_infos, &parent_num);
for (int k = 0; k < parent_num; ++k)
{
for (int m = 0; m < parent_infos[k].n_refs; ++m)
{
ProFeature ref_feat;
err = ProExtRefFeatGet(parent_infos[k].ext_refs[m], &ref_feat);
if (err != PRO_TK_NO_ERROR)
{
continue;
}
ProName ref_feat_owner_name;
err = ProMdlNameGet(ref_feat.owner, ref_feat_owner_name);
ProWstringToString(temp, ref_feat_owner_name);
if (strstr(strupr(temp), "PB") != NULL)
{
// 此特徵是PULL_BACK中的特徵
is_unneeded_feat = true;
break;
}
}
if (is_unneeded_feat)
{
break;
}
}
// 刪除不需要的特徵
if (is_unneeded_feat)
{
ProFeatureDeleteOptions deleteopt = PRO_FEAT_DELETE_CLIP;
err = ProFeatureDelete((ProSolid)frt_moldbase.rail_mdls[i], &udf_feats[1].id, 1, &deleteopt, 1);
}
err = ProArrayFree((ProArray*)&udf_feats);
}
err = ProArrayFree((ProArray*)&udfs);
}
return PRO_TK_NO_ERROR;
}
{
ProError err;
// 1. 遍歷所有模腳,查找QUILT_CUT的UDF
// 2. 查看QUILT_CUT的父特徵
// 3. 如果其父特徵是PULL_BACK中的特徵,則刪除
int rail_num(0);
err = ProArraySizeGet(frt_moldbase.rail_mdls, &rail_num);
if (err != PRO_TK_NO_ERROR || rail_num < 1)
{
return PRO_TK_USER_ABORT;
}
char temp[PRO_NAME_SIZE];
for (int i = 0; i < rail_num; ++i)
{
ProGroup *udfs;
err = ProSolidGroupsCollect((ProSolid)frt_moldbase.rail_mdls[i], &udfs);
ProName udf_name;
ProName udf_instance;
int udf_num(0);
err = ProArraySizeGet(udfs, &udf_num);
if (err != PRO_TK_NO_ERROR || udf_num < 1)
{
continue;
}
for (int j = 0; j < udf_num; ++j)
{
bool is_unneeded_feat(false);
err = ProUdfNameGet(&udfs[j], udf_name, udf_instance);
ProWstringToString(temp, udf_name);
if (stricmp(temp, "QUILT_CUT"))
{
continue;
}
int udf_feat_num(0);
ProFeature *udf_feats;
err = ProGroupFeaturesCollect(&udfs[j], &udf_feats);
err = ProArraySizeGet(udf_feats, &udf_feat_num);
if (err != PRO_TK_NO_ERROR || udf_feat_num < 2)
{
continue;
}
// 第1個特徵是群組頭特徵,第2個特徵是CUTOUT特徵
int parent_num(0);
ProExtRefInfo *parent_infos = NULL;
err = ProFeatureExternParentsGet(&udf_feats[1], PRO_EXT_GEOM_REF, &parent_infos, &parent_num);
for (int k = 0; k < parent_num; ++k)
{
for (int m = 0; m < parent_infos[k].n_refs; ++m)
{
ProFeature ref_feat;
err = ProExtRefFeatGet(parent_infos[k].ext_refs[m], &ref_feat);
if (err != PRO_TK_NO_ERROR)
{
continue;
}
ProName ref_feat_owner_name;
err = ProMdlNameGet(ref_feat.owner, ref_feat_owner_name);
ProWstringToString(temp, ref_feat_owner_name);
if (strstr(strupr(temp), "PB") != NULL)
{
// 此特徵是PULL_BACK中的特徵
is_unneeded_feat = true;
break;
}
}
if (is_unneeded_feat)
{
break;
}
}
// 刪除不需要的特徵
if (is_unneeded_feat)
{
ProFeatureDeleteOptions deleteopt = PRO_FEAT_DELETE_CLIP;
err = ProFeatureDelete((ProSolid)frt_moldbase.rail_mdls[i], &udf_feats[1].id, 1, &deleteopt, 1);
}
err = ProArrayFree((ProArray*)&udf_feats);
}
err = ProArrayFree((ProArray*)&udfs);
}
return PRO_TK_NO_ERROR;
}
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25306814/viewspace-702540/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25306814/viewspace-702540/