creo toolkit二次开发学习之获取任意选择模型作为元件,并进行获取约束等
获取任意选择模型作为元件进行操作前,先了解组件路径和程序集的构成:creo toolkit二次开发学习之程序集(ProAsmcomp)和装配体组件路径对象(ProAsmcomppath)-CSDN博客
代码如下
ProError test1()
{
ProError status;
ProSelection* sels = NULL; //ProSelection 结构数组指针,用于存放选择的模型
int n_sels; //选择集的数量
status = ProSelect("prt_or_asm", 1, NULL, NULL, NULL, NULL, &sels, &n_sels); //选择模型
if (status != PRO_TK_NO_ERROR || sels == NULL) return PRO_TK_GENERAL_ERROR; //如果获取失败或没有选择,则返回错误码
ProModelitem item; //模型项
ProSelectionModelitemGet(sels[0], &item); //获取选择的模型项
ProAsmcomppath p_cmp_path; //组件路径
status = ProSelectionAsmcomppathGet(sels[0], &p_cmp_path); //从选择对象获取组件路径
ProAsmcomp asmcomp;
asmcomp.type = PRO_FEATURE; //定义为特征类型
asmcomp.id = p_cmp_path.comp_id_table[p_cmp_path.table_num - 1]; //获取选择的模型的id
ProAsmcomppath cmp_path_new= p_cmp_path; // 声明一个新的组件路径,复制原来的组件路径
cmp_path_new.table_num -= 1; //修改标识符数量
ProAsmcomppathMdlGet(&cmp_path_new, &asmcomp.owner); //获取组件路径的模型对象,即选择的模型对象的父对象
ProAsmcompconstraint* pp_constraints; // 声明约束数组
status = ProAsmcompConstraintsWithComppathGet(&asmcomp, &p_cmp_path, &pp_constraints); // 获取选择模型的约束数组
//status = ProAsmcompConstraintsWithDtmOrientGet(&p_mdl_item, &pp_constraints); // 获取选择模型的约束数组
return PRO_TK_NO_ERROR;
}
上述代码中关键点在于理解组件路径是如何构成的,对于子装配体作为元件来说,新构建的ProAsmcomp程序集必须类型为PRO_FEATURE,id设置为选择模型的id,而onwer则为选择模型的父对象,这样选择的模型才算做元件