//遍历当前显示部件所有体
std::vector<tag_t> SolidVector;
tag_t ObjectTag = NULL_TAG;
int Type, SubType, Body_Type;
int Count = 0;
char msg[256];
UF_OBJ_cycle_objs_in_part(UF_PART_ask_display_part(), UF_solid_type, &ObjectTag);
while (ObjectTag != NULL_TAG)
{
UF_OBJ_ask_type_and_subtype(ObjectTag, &Type, &SubType);
if (SubType == UF_solid_body_subtype)
{
UF_MODL_ask_body_type(ObjectTag, &Body_Type);
if (Body_Type == UF_MODL_SOLID_BODY)
{
UF_OBJ_set_color(ObjectTag, 186);
SolidVector.push_back(ObjectTag);
Count++;
}
}
UF_OBJ_cycle_objs_in_part(UF_PART_ask_display_part(), UF_solid_type, &ObjectTag);
}
//求所有体的最大边界
double MaxBox[6] = { 10000, 10000, 10000, -10000, -10000, -10000 };
for (int i = 0; i < Count; i++)
{
double Box[6];
UF_MODL_ask_bounding_box(SolidVector[i], Box);
MaxBox[0] = MaxBox[0] < Box[0] ? MaxBox[0] : Box[0];
MaxBox[1] = MaxBox[1] < Box[1] ? MaxBox[1] : Box[1];
MaxBox[2] = MaxBox[2] < Box[2] ? MaxBox[2] : Box[2];
MaxBox[3] = MaxBox[3] > Box[3] ? MaxBox[3] : Box[3];
MaxBox[4] = MaxBox[4] > Box[4] ? MaxBox[4] : Box[4];
MaxBox[5] = MaxBox[5] > Box[5] ? MaxBox[5] : Box[5];
}
//转换
char Length[200], Width[200], Height[200];
sprintf(Length, "%f", MaxBox[3] - MaxBox[0]);
sprintf(Width, "%f", MaxBox[4] - MaxBox[1]);
sprintf(Height, "%f", MaxBox[5] - MaxBox[2]);
char* Len[3];
Len[0] = Length;
Len[1] = Width;
Len[2] = Height;
//创建块
double Ori[3] = { MaxBox[0], MaxBox[1], MaxBox[2] };
tag_t BlkTag = NULL_TAG;
UF_MODL_create_block1(UF_NULLSIGN, Ori, Len, &BlkTag);
//特征找体
tag_t BodyTag = NULL_TAG;
UF_MODL_ask_feat_body(BlkTag, &BodyTag);
//设置透明度
UF_OBJ_set_translucency(BodyTag, 50);
UF_terminate();
————————————————