zoukankan      html  css  js  c++  java
  • NXOpen 遍历部件并把子部件设置成工作部件加属性后恢复到装配部件

    C++

    // Mandatory UF Includes
    #include <uf.h>
    #include <uf_object_types.h>

    // Internal Includes
    #include <NXOpen/ListingWindow.hxx>
    #include <NXOpen/NXMessageBox.hxx>
    #include <NXOpen/UI.hxx>

    // Internal+External Includes
    #include <NXOpen/Annotations.hxx>
    #include <NXOpen/Assemblies_Component.hxx>
    #include <NXOpen/Assemblies_ComponentAssembly.hxx>
    #include <NXOpen/Body.hxx>
    #include <NXOpen/BodyCollection.hxx>
    #include <NXOpen/Face.hxx>
    #include <NXOpen/Line.hxx>
    #include <NXOpen/NXException.hxx>
    #include <NXOpen/NXObject.hxx>
    #include <NXOpen/Part.hxx>
    #include <NXOpen/PartCollection.hxx>
    #include <NXOpen/Session.hxx>

    #include <NXOpen/BasePart.hxx>
    #include <NXOpen/AttributeManager.hxx>
    #include <NXOpen/AttributePropertiesBaseBuilder.hxx>
    #include <NXOpen/AttributePropertiesBuilder.hxx>
    #include <NXOpen/TaggedObject.hxx>
    #include <NXOpen/NXObjectManager.hxx>

    // Std C++ Includes
    #include <iostream>
    #include <sstream>

    using namespace NXOpen;
    using namespace std;

    void MyClass::do_it()
    {

    // TODO: add your code here

    //用户代码

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

    //BasePart *baseworkpart = theSession->Parts()->BaseWork();//定义baseworkpart
    BasePart *basedisplaypart = theSession->Parts()->BaseDisplay();//定义basedisplaypart
    //遍历
    Assemblies::ComponentAssembly *componentassembly = basedisplaypart->ComponentAssembly();//获取装配底层(BaseWork为当前工作装配,basedisplaypart为当前显示的装配 两种结果是不一样的)
    Assemblies::Component *rootcomponent = componentassembly->RootComponent();//获取rootcomponent
    if (rootcomponent==NULL)//判断rootcomponent是否为空,空即提示不是装配,是就执行遍历
    {
    //弹出消息框(四种消息框 错误:DialogTypeError 警告:DialogTypeWarning 提示:DialogTypeInformation 询问:DialogTypeQuestion
    theUI->NXMessageBox()->Show("提示", NXOpen::NXMessageBox::DialogTypeWarning, "当前没在装配环境!"); //弹出消息框提示
    }
    else//
    {

    getchildren(rootcomponent);

    }

    }


    void MyClass::getchildren(Assemblies::Component *root)
    {

    //用户代码

    std::vector<Assemblies::Component *> children = root->GetChildren();//获取第一层Component
    for (int i = 0 ; i<children.size();i++)

    {
    Assemblies::Component *component = children[i];//获取第一层第i个Component

    //把装配子部件设置成工作部件
    NXOpen::Assemblies::Component *component1(dynamic_cast<NXOpen::Assemblies::Component *>(NXOpen::NXObjectManager::Get(children[i]->Tag())));
    NXOpen::PartLoadStatus *partLoadStatus1;
    theSession->Parts()->SetWorkComponent(component1, NXOpen::PartCollection::RefsetOptionEntire, NXOpen::PartCollection::WorkComponentOptionVisible, &partLoadStatus1);
    workPart = theSession->Parts()->Work();
    delete partLoadStatus1;

    //NXOpen对当前工作部件加属性
    std::vector<NXObject *> objects1(1);
    objects1[0] = workPart;
    AttributePropertiesBuilder *attributePropertiesBuilder1;
    attributePropertiesBuilder1 = theSession->AttributeManager()->CreateAttributePropertiesBuilder(workPart, objects1, AttributePropertiesBuilder::OperationTypeNone);
    attributePropertiesBuilder1->SetTitle("PartNo");
    attributePropertiesBuilder1->SetStringValue(component->DisplayName()); //属性值为部件名字

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

    attributePropertiesBuilder1->SetTitle("PartName");
    attributePropertiesBuilder1->SetStringValue("后模仁");

    NXObject *nXObject2;
    nXObject2 = attributePropertiesBuilder1->Commit();

    attributePropertiesBuilder1->Destroy();

    //恢复到装配部件
    NXOpen::Assemblies::Component *nullNXOpen_Assemblies_Component(NULL);
    NXOpen::PartLoadStatus *partLoadStatus2;
    theSession->Parts()->SetWorkComponent(nullNXOpen_Assemblies_Component, NXOpen::PartCollection::RefsetOptionEntire, NXOpen::PartCollection::WorkComponentOptionVisible, &partLoadStatus2);
    workPart = theSession->Parts()->Work();
    delete partLoadStatus2;

    getchildren(component);

    }

    }

    怡宁塑胶模具设计
  • 相关阅读:
    jmeter测试接口--form表单提交请求(解决请求传参为空的问题)
    jmeter测试接口-打开很多TCP的连接数TIME_WAIT状态(Linux环境)导致报错的解决方法
    Jmeter 事务下的if控制器和无事务下的if控制器是否有不同 (业务实现3:2的补充)
    Jmeter if控制器的使用
    Jmeter 文件格式的参数化
    CentOS7学习笔记--tomcat9环境安装
    CentOS7学习笔记--PHP环境安装
    CentOS学习笔记—启动、ROOT密码
    虚拟机硬盘扩容
    win7如何设置某个软件不弹出用户账户控制
  • 原文地址:https://www.cnblogs.com/hqsalanhuang/p/14224428.html
Copyright © 2011-2022 走看看