NX二次开发——设置对象的密度(UF_MODL_set_body_density)
在前几篇博客中我们已经探讨了如何设置实体的密度。在装配环境中,同样可以为组件设置密度。虽然不能直接对组件进行密度设置,但可以通过一种间接方式实现:在装配环境下,利用
UF_ASSEM_set_work_part_quietly()
函数以静默方式将组件设为工作部件,然后对该组件中的实体设置密度,从而间接完成装配环境中组件密度的设置。
具体代码及注释如下所示(注意单位转化)
//设置对象密度
void NXopen_AssignmentQuality::SetObjectDensity(int type)
{try{vector<NXOpen::TaggedObject *> ObjectTags = bodySelect0->GetProperties()->GetTaggedObjectVector("SelectedObjects");for (int i = 0; i < (int)ObjectTags.size(); i++){bool is_occ;//判断是否为组件tag_t body = ObjectTags[i]->Tag();//用来存储选择对象的TAGtag_t owning_part, part = UF_PART_ask_display_part();// 判断是否为装配体中的实例对象is_occ = (UF_ASSEM_is_occurrence(body) && !UF_OBJ_is_object_a_promotion(body));if (is_occ){body = UF_ASSEM_ask_prototype_of_occ(body);//输入对象的事例occurrence,返回对象的原型。如果输入的是未加载的部件则返回NULL_TAG。UF_OBJ_ask_owning_part(body, &owning_part);//获得对象所在部件的PartTagUF_ASSEM_set_work_part_quietly(owning_part, &part);//再不打开窗口,静默下,将组件中的对象设置为工作部件进行修改,因为密度修改只能该实体的密度,组件其实实体链接到装配环境中,就像不能修改装配体名字,只能修改实体零件名字,该链接到组件中完成名字修改UF_MODL_density_units_t units; //units:磅/英寸=UF_MODL_pounds_inches;磅/英尺 = UF_MODL_pounds_feet;克/厘米 = UF_MODL_grams_centimeters;千克/米 = UF_MODL_kilograms_metersif (type == 1){units = UF_MODL_pounds_inches;}else if (type == 2){units = UF_MODL_pounds_feet;}else if (type == 3){units = UF_MODL_grams_centimeters;}else if (type == 4){units = UF_MODL_kilograms_meters;}double Volum = GetBodyVolum(body); //克/mm^3 double Quality = double0->GetProperties()->GetDouble("Value");double density = (Quality / Volum) * 1000000;//kg/mm^3转化为g/cm^3UF_MODL_set_body_density(body, units, density);UF_ASSEM_set_work_part_quietly(part, &owning_part);}else{UF_MODL_density_units_t units; //units:磅/英寸=UF_MODL_pounds_inches;磅/英尺 = UF_MODL_pounds_feet;克/厘米 = UF_MODL_grams_centimeters;千克/米 = UF_MODL_kilograms_metersif (type == 1){units = UF_MODL_pounds_inches;}else if (type == 2){units = UF_MODL_pounds_feet;}else if (type == 3){units = UF_MODL_grams_centimeters;}else if (type == 4){units = UF_MODL_kilograms_meters;}double Volum = GetBodyVolum(body);double Quality = double0->GetProperties()->GetDouble("Value");double density = (Quality / Volum) * 1000000;//kg/mm^3转化为g/cm^3UF_MODL_set_body_density(body, units, density);}}}catch (exception& ex){//---- Enter your exception handling code here -----NXopen_AssignmentQuality::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());}}
关于实体设置密度的方式参考一下博客:
NX二次开发——设置体的密度(UF_MODL_set_body_density)-CSDN博客