找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 22|回复: 0

[求助] NXOPEN C++问题求助

[复制链接]

4

主题

12

回帖

960

积分

五级士官

积分
960
发表于 1 小时前 | 显示全部楼层 |阅读模式
以下是使用多个平面创建拆分体, 创建后我想获取拆分后的所有实体,
以下加粗代码①或者②处, 不加这些代码, 拆分体正常生成,加上①或者②, 都会报错,报错如图,哪位大神帮忙看看错在哪里?


        UF_initialize();

        UF_DISP_set_display(UF_DISP_SUPPRESS_DISPLAY);

        tag_t linetag = 44539;
        double start_point[3] = { 0.0 };
        double end_point[3] = { 0.0 };
        Ask_Point_By_Percent(linetag, 0.0, start_point);
        Ask_Point_By_Percent(linetag, 1.0, end_point);


        double p1[3] = { 0.0 };
        double p2[3] = { 0.0 };
        int direction = 0.;
        if (start_point[2] < end_point[2])
        {
                direction = 1;
                p1[0] = start_point[0];
                p1[1] = start_point[1];
                p1[2] = start_point[2];
                p2[0] = end_point[0];
                p2[1] = end_point[1];
                p2[2] = end_point[2];
        }
        else
        {
                direction = -1;
                p1[0] = end_point[0];
                p1[1] = end_point[1];
                p1[2] = end_point[2];
                p2[0] = start_point[0];
                p2[1] = start_point[1];
                p2[2] = start_point[2];


        }


        double dis = 100;
        double curve_len = 0.0;
        int num = 0;
        Ask_Curve_Length(linetag, &curve_len);
        num = (int)ceil(curve_len / dis);
        dis = curve_len / num;


        vector<oint3d>points;
        Point3d temp;
        double output_point[3] = { 0.0 };
        for (size_t i = 0; i < num; i++)
        {
                if (i != num - 1)
                {
                        Ask_Point_By_Arc_Length(p1, &direction, linetag, dis*(i + 1), output_point);
                        temp.X = output_point[0];
                        temp.Y = output_point[1];
                        temp.Z = output_point[2];
                        points.push_back(temp);
                }
                else
                {
                        temp.X = p2[0];
                        temp.Y = p2[1];
                        temp.Z = p2[2];
                        points.push_back(temp);


                }
        }



        //创建平面
        double plane_normal[3] = { 0.0,0.0,1.0 };
        vector<tag_t>planes;
        tag_t planetag = NULL_TAG;
        double temppoint[3] = { 0.0 };
        for (size_t i = 0; i < points.size(); i++)
        {
                temppoint[0] = points.X;
                temppoint[1] = points.Y;
                temppoint[2] = points.Z;
                UF_MODL_create_fixed_dplane(temppoint, plane_normal, &planetag);
                planes.push_back(planetag);
        }


        //拆分体
        //复制体
        tag_t body = 44359;
        tag_t bodyTag = NULL_TAG;
        uf6511(&body, &bodyTag);
        vector<tag_t>bodies;
        vector<double>v_bodies;


        typedef struct vol
        {
                tag_t bodytag;
                double v;
                double p[3];
        }vol;


        Part *mypart = theSession->arts()->Work();




        NXOpen::Features::SplitBody *nullNXOpen_Features_SplitBody(NULL);
        NXOpen::Features::SplitBodyBuilder *splitBodyBuilder1;
        splitBodyBuilder1 = mypart->Features()->CreateSplitBodyBuilderUsingCollector(nullNXOpen_Features_SplitBody);


        std::vector<NXOpen::Body *> bodies1(1);
        NXOpen::Body *body1 = dynamic_cast<NXOpen::Body *>(NXObjectManager::Get(bodyTag));
        bodies1[0] = body1;
        NXOpen::BodyDumbRule *bodyDumbRule1;
        bodyDumbRule1 = mypart->ScRuleFactory()->CreateRuleBodyDumb(bodies1, true);


        NXOpen::ScCollector *scCollector1;
        scCollector1 = mypart->ScCollectors()->CreateCollector();
        std::vector<NXOpen::SelectionIntentRule *> rules1(1);
        rules1[0] = bodyDumbRule1;
        scCollector1->ReplaceRules(rules1, false);
        splitBodyBuilder1->SetTargetBodyCollector(scCollector1);


        //
        std::vector<NXOpen:atumPlane *> faces1;
        DatumPlane *datumPlane1;
        for (size_t i = 0; i < planes.size() -2; i++)
        {
                datumPlane1 = dynamic_cast<NXOpen:atumPlane *>(NXObjectManager::Get(planes));
                faces1.push_back(datumPlane1);
        }


        NXOpen::FaceDumbRule *faceDumbRule1;
        faceDumbRule1 = mypart->ScRuleFactory()->CreateRuleFaceDatum(faces1);


        std::vector<NXOpen::SelectionIntentRule *> rules2(1);
        rules2[0] = faceDumbRule1;
        splitBodyBuilder1->BooleanTool()->FacePlaneTool()->ToolFaces()->FaceCollector()->ReplaceRules(rules2, false);


        Features::Feature *nXObject1;
        nXObject1 = splitBodyBuilder1->CommitFeature();


        splitBodyBuilder1->Destroy();








         //①
       
        BodyCollection * objss = mypart->Bodies();
        vector<Body *> bbodys;
        for (BodyCollection::iterator it = objss->begin(); it != objss->end();it++)
        {
                bbodys.push_back(*it);
        }


        //②
       vector <Body *> Ibody = nXObject1->GetBodies();



       
        UF_DISP_set_display(UF_DISP_UNSUPPRESS_DISPLAY);
        UF_DISP_regenerate_display();


        UF_terminate();
       

Error.png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

咨询QQ:1359218528|发帖须知!|Archiver|手机版|小黑屋|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2026-5-5 18:24

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表