NX二次开发-创建多个体的最小方块


            

//遍历当前显示部件所有体
            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();
————————————————

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值