• NXOpen 创建体获取所有边、边端点信息,过虑竖边倒圆水平边倒角


    C++

    //用户头文件

    #include <NXOpen/Features_Block.hxx>
    #include <NXOpen/Features_ChamferBuilder.hxx>
    #include <NXOpen/Features_Feature.hxx>
    #include <NXOpen/Features_FeatureBuilder.hxx>
    #include <NXOpen/Features_FeatureCollection.hxx>
    #include <NXOpen/Builder.hxx>
    #include <NXOpen/DisplayManager.hxx>
    #include <NXOpen/DisplayModification.hxx>
    #include <NXOpen/DisplayableObject.hxx>
    #include <NXOpen/Features_BlockFeatureBuilder.hxx>
    #include <NXOpen/Edge.hxx>
    #include <NXOpen/EdgeDumbRule.hxx>
    #include <NXOpen/Features_EdgeBlendBuilder.hxx>
    #include <NXOpen/ScCollector.hxx>
    #include <NXOpen/ScCollectorCollection.hxx>
    #include <NXOpen/ScRuleFactory.hxx>
    #include <NXOpen/SelectionIntentRule.hxx>
    #include <NXOpen/NXObjectManager.hxx>
    #include <NXOpen/EdgeMultipleSeedTangentRule.hxx>

    //用户代码
    Session *theSession = Session::GetSession(); //获取绘画窗口
    Part *workPart = theSession->Parts()->Work();//获取工作部件
    Part *displayPart = theSession->Parts()->Display();//获取显示部件

    //创建空特征
    Features::Feature *nullNXOpen_Features_Feature(NULL);
    Features::BlockFeatureBuilder *blockFeatureBuilder1;
    blockFeatureBuilder1 = workPart->Features()->CreateBlockFeatureBuilder(nullNXOpen_Features_Feature);
    //设置block参数
    blockFeatureBuilder1->SetType(Features::BlockFeatureBuilder::TypesOriginAndEdgeLengths);
    Point3d originPoint1(0.0, 0.0, 0.0);
    blockFeatureBuilder1->SetOriginAndLengths(originPoint1, "30", "40", "50");
    //创建
    Features::Feature *feature1;
    feature1 = blockFeatureBuilder1->CommitFeature();

    blockFeatureBuilder1->Destroy(); //释放block

    //转换
    Features::Block *bodys(dynamic_cast<Features::Block*> (feature1)); //方体特征转换body

    vector<Body *> body1(1);//定义体容器
    vector<Edge *> edges ;//定义边容器
    vector<Face *> faces;//定义竖面容器
    vector<Edge *> vertacledge;//定义竖边容器
    vector<Edge *> horizontaledge;//定义水平边容器

    if(bodys != NULL)
    {
    body1 = bodys->GetBodies();
    edges = bodys->GetEdges();
    faces = bodys->GetFaces();
    }


    //输出边和边端点的信息

    Edge *edge1;
    NXOpen::Edge::EdgeType type;
    double len;
    char msg[60];
    NXOpen::Point3d p1;//端点1
    NXOpen::Point3d p2;//端点2

    theSession->ListingWindow()->Open(); //打开信息窗口
    for(int i=0;i < edges.size();i++ )
    {
    edge1 = edges[i];
    //edge1->Highlight(); //高亮所有邊
    type = edge1->SolidEdgeType(); //获取类型
    len = edge1->GetLength(); //获取长度
    edge1->GetVertices(&p1,&p2); //由边获取端点
    sprintf(msg,"类型:%d ",type);
    theSession->ListingWindow()->WriteLine(msg);
    sprintf(msg,"长:%.2f. ",len);
    theSession->ListingWindow()->WriteLine(msg);
    sprintf(msg,"x:%.2f.y:%.2f.z:%.2f. ",p1.X,p1.Y,p1.Z);
    theSession->ListingWindow()->WriteLine(msg);
    sprintf(msg,"x:%.2f.y:%.2f.z:%.2f. ",p2.X,p2.Y,p2.Z);
    theSession->ListingWindow()->WriteLine(msg);

    if ( len == 50 )
    {
    vertacledge.push_back(edges[i]); //通过边长判断把竖边塞到竖边容器
    }
    else
    {
    horizontaledge.push_back(edges[i]);//通过边长判断把水平边塞到水平边容器

    }


    }

    //创建倒圆
    Features::Feature *nullNXOpen_Features_Feature2(NULL); //创建空特征
    Features::EdgeBlendBuilder *edgeBlendBuilder1;
    edgeBlendBuilder1 = workPart->Features()->CreateEdgeBlendBuilder(nullNXOpen_Features_Feature2);

    //创建集合
    NXOpen::ScCollector *scCollector1;
    scCollector1 = workPart->ScCollectors()->CreateCollector();

    //边数组加到
    EdgeMultipleSeedTangentRule *edgeMultipleSeedTangentRule1;
    edgeMultipleSeedTangentRule1 = workPart->ScRuleFactory()->CreateRuleEdgeMultipleSeedTangent(vertacledge, 0.05, true);

    std::vector<SelectionIntentRule *> rules1(1);
    rules1[0] = edgeMultipleSeedTangentRule1;
    scCollector1->ReplaceRules(rules1, false);

    edgeBlendBuilder1->AddChainset(scCollector1, "3"); //设置半径
    Features::Feature *feature2 = edgeBlendBuilder1->CommitFeature(); //创建


    edgeBlendBuilder1->Destroy(); //释放倒圆

    //创建倒角
    Features::Feature *nullFeatures_Feature3(NULL); //创建空特征
    Features::ChamferBuilder *chamferBuilder1;
    chamferBuilder1 = workPart->Features()->CreateChamferBuilder(nullFeatures_Feature3);
    //设置倒角参数
    chamferBuilder1->FirstOffsetExp()->SetRightHandSide("3");
    chamferBuilder1->SecondOffsetExp()->SetRightHandSide("3");
    chamferBuilder1->AngleExp()->SetRightHandSide("45");
    chamferBuilder1->SetOption(Features::ChamferBuilder::ChamferOptionSymmetricOffsets);
    chamferBuilder1->SetMethod(Features::ChamferBuilder::OffsetMethodEdgesAlongFaces);
    chamferBuilder1->SetFirstOffset("3");
    chamferBuilder1->SetSecondOffset("3");
    chamferBuilder1->SetAngle("45");
    chamferBuilder1->SetTolerance(0.001);

    //创建集合
    NXOpen::ScCollector *scCollector2;
    scCollector2 = workPart->ScCollectors()->CreateCollector();
    //线数组加到
    EdgeMultipleSeedTangentRule *edgeMultipleSeedTangentRule2;
    edgeMultipleSeedTangentRule2 = workPart->ScRuleFactory()->CreateRuleEdgeMultipleSeedTangent(horizontaledge, 0.05, true);

    std::vector<SelectionIntentRule *> rules2(1);
    rules2[0] = edgeMultipleSeedTangentRule2;
    scCollector2->ReplaceRules(rules2, false);

    chamferBuilder1->SetSmartCollector(scCollector2);

    Features::Feature *feature3 = chamferBuilder1->CommitFeature(); //创建

    chamferBuilder1->Destroy(); //释放倒角

    怡宁塑胶模具设计
  • 相关阅读:
    【AS3代码】类的分包
    语句include和require的区别是什么?
    php创建多级目录的函数
    【AS3代码】打砖块
    【AS3代码】弧度的转换
    【AS3代码】是男人就坚持30秒
    每天问女儿的四个问题
    PowerDesigner16生成SQL2005列注释
    做分析师=盖房子【转】
    用gephi自动分析网站链接方式
  • 原文地址:https://www.cnblogs.com/hqsalanhuang/p/14225460.html
Copyright © 2020-2023  润新知