• NXOpen布尔加、布尔减、布尔交代码


    C++

    //用户头文件
    #include <uf_ui.h>
    #include <NXOpen/Body.hxx>
    #include <NXOpen/BodyCollection.hxx>
    #include <NXOpen/BodyDumbRule.hxx>
    #include <NXOpen/Builder.hxx>
    #include <NXOpen/DisplayableObject.hxx>
    #include <NXOpen/Features_BooleanBuilder.hxx>
    #include <NXOpen/Features_FeatureCollection.hxx>
    #include <NXOpen/GeometricUtilities_BooleanRegionSelect.hxx>
    #include <NXOpen/Part.hxx>
    #include <NXOpen/PartCollection.hxx>
    #include <NXOpen/DisplayableObject.hxx>
    #include <NXOpen/GeometricUtilities_BooleanRegionSelect.hxx>
    #include <NXOpen/ScCollectorCollection.hxx>
    #include <NXOpen/SelectBodyList.hxx>
    #include <NXOpen/ScRuleFactory.hxx>
    #include <NXOpen/NXObject.hxx>
    #include <NXOpen/NXObjectManager.hxx>


    //设置过虑(注释处改动即可使用)
    Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
    std::vector<Selection::MaskTriple> maskArray(1);
    maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype/*此处控制选择的类型,右键点转到
    定义查开类型*/, UF_UI_SEL_FEATURE_SOLID_BODY /*此处控制选择的类型,在头文件uf_ui_types.可以查到*/ ); // Bodies
    selection01/*此处blockID需按实际改*/->GetProperties()->SetSelectionFilter
    ("SelectionFilter",action,maskArray);
    selection02/*此处blockID需按实际改*/->GetProperties()->SetSelectionFilter
    ("SelectionFilter",action,maskArray);

    //用户代码
    //获取枚举UI界面值
    PropertyList *enum0Props = enum0->GetProperties();
    int EnumValue = enum0Props->GetEnum("Value");
    delete enum0Props;
    enum0Props = NULL;

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

    //布尔
    Features::BooleanFeature *nullFeatures_BooleanFeature(NULL);

    Features::BooleanBuilder *booleanBuilder1;
    booleanBuilder1 = workPart->Features()->CreateBooleanBuilderUsingCollector(nullFeatures_BooleanFeature);

    ScCollector *scCollector1;
    scCollector1 = booleanBuilder1->ToolBodyCollector();

    GeometricUtilities::BooleanRegionSelect *booleanRegionSelect1;
    booleanRegionSelect1 = booleanBuilder1->BooleanRegionSelect();

    booleanBuilder1->SetTolerance(0.001);

    //判断
    if ( EnumValue == 0 )
    {
    booleanBuilder1->SetOperation(Features::Feature::BooleanTypeUnite);//设置布尔加

    }
    else if ( EnumValue == 1 )
    {

    booleanBuilder1->SetOperation(Features::Feature::BooleanTypeSubtract);//设置布尔减
    }

    else if ( EnumValue == 2 )
    {

    booleanBuilder1->SetOperation(Features::Feature::BooleanTypeIntersect);//设置布尔交

    }

    //获取UI选择的第一个体
    PropertyList* selection01Props = selection01->GetProperties();
    std::vector<NXOpen::TaggedObject *> firstBody = selection01Props->GetTaggedObjectVector
    ("SelectedObjects");
    delete selection01Props;
    selection01Props = NULL;

    Body *body1(dynamic_cast<Body *>(NXObjectManager::Get(firstBody[0]->Tag())));
    bool added1;
    added1 = booleanBuilder1->Targets()->Add(body1);

    std::vector<TaggedObject *> targets1(1);
    targets1[0] = body1;
    booleanRegionSelect1->AssignTargets(targets1);

    ScCollector *scCollector2;
    scCollector2 = workPart->ScCollectors()->CreateCollector();

    //获取UI选择的第二个体
    PropertyList* selection02Props = selection02->GetProperties();
    std::vector<NXOpen::TaggedObject *> secondBody = selection02Props->GetTaggedObjectVector
    ("SelectedObjects");
    delete selection02Props;
    selection02Props = NULL;

    std::vector<Body *> bodies2(1);
    Body *body2(dynamic_cast<Body *>(NXObjectManager::Get(secondBody[0]->Tag())));

    bodies2[0] = body2;
    BodyDumbRule *bodyDumbRule1;
    bodyDumbRule1 = workPart->ScRuleFactory()->CreateRuleBodyDumb(bodies2);

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

    booleanBuilder1->SetToolBodyCollector(scCollector2);

    std::vector<TaggedObject *> targets2(1);
    targets2[0] = body1;
    booleanRegionSelect1->AssignTargets(targets2);

    NXObject *nXObject1;
    nXObject1 = booleanBuilder1->Commit();

    booleanBuilder1->Destroy();  //释放

    怡宁塑胶模具设计
  • 相关阅读:
    COGS 577 蝗灾 线段树+CDQ分治
    BZOJ 1305 二分+网络流
    BZOJ 1066 Dinic
    BZOJ 3544 treap (set)
    BZOJ 3940 AC自动机
    BZOJ 1503 treap
    BZOJ 3172 AC自动机
    BZOJ 2553 AC自动机+矩阵快速幂 (神题)
    BZOJ1901 ZOJ2112 线段树+treap (线段树套线段树)
    BZOJ 3196 线段树套平衡树
  • 原文地址:https://www.cnblogs.com/hqsalanhuang/p/14218155.html
Copyright © 2020-2023  润新知