在前几篇博客中我们已经探讨了如何设置实体的密度。在装配环境中,同样可以为组件设置密度。虽然不能直接对组件进行密度设置,但可以通过一种间接方式实现:在装配环境下,利用
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();//用来存储选择对象的TAG
tag_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);//获得对象所在部件的PartTag
UF_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_meters
if (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^3
UF_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_meters
if (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^3
UF_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());
}
}
关于实体设置密度的方式参考一下博客: