• NX二次开发-UFUN和NXOpen结合开发中Tag_t对象与TaggedObject对象转换方法


      1 本文通过举四个例子来告诉大家在NX二次开发过程中会经常用到UFUN和NXOpen结合去开发,在UFUN中我们得到的是Tag_t对象,在NXOpen中得到的是TaggedObject对象,这两个是需要进行转换的。本文主要知识点为:TaggedObject->tag_t() , NXOpen::NXObjectManager::Get(BodyTag1) , feature1->JournalIdentifier()的用法。
      2 
      3     NX11+VS2013
      4             
      5     #include <uf.h>
      6     #include <uf_modl.h>
      7     #include <uf_obj.h>
      8     #include <NXOpenNXObjectManager.hxx>
      9     #include <NXOpen/Features_BlockFeatureBuilder.hxx>
     10     #include <NXOpen/Features_FeatureCollection.hxx>
     11     #include <NXOpen/NXException.hxx>
     12     #include <NXOpen/Body.hxx>
     13     #include <NXOpen/BodyCollection.hxx>
     14     #include <NXOpen/DisplayManager.hxx>
     15     #include <NXOpen/PartCollection.hxx>
     16 
     17     NXOpen::Session *theSession = NXOpen::Session::GetSession();
     18     NXOpen::Part *workPart(theSession->Parts()->Work());
     19     NXOpen::Part *displayPart(theSession->Parts()->Display());
     20 
     21     UF_initialize();
     22     
     23     //方法1:UFUN方式创建块,设置块颜色。
     24     //UFUN方式创建块
     25     UF_FEATURE_SIGN Sign = UF_NULLSIGN;
     26     double Corner_pt[3] = { 0.0, 0.0, 0.0 };
     27     char *Edge_len[3] = { "100", "100", "100" };
     28     tag_t BlkTag = NULL_TAG;
     29     UF_MODL_create_block1(Sign, Corner_pt, Edge_len, &BlkTag);
     30 
     31     //UFUN方式特征找体
     32     tag_t BodyTag = NULL_TAG;
     33     UF_MODL_ask_feat_body(BlkTag, &BodyTag);
     34 
     35     //UFUN方式设置颜色
     36     UF_OBJ_set_color(BodyTag, 186);
     37 
     38 
     39 
     40 
     41 
     42     //方法2:NXOpen方式创建块,设置块颜色。
     43     //NXOpen方式创建块
     44     NXOpen::Features::Feature *nullNXOpen_Features_Feature(NULL);
     45     NXOpen::Features::BlockFeatureBuilder *blockFeatureBuilder1;
     46     blockFeatureBuilder1 = workPart->Features()->CreateBlockFeatureBuilder(nullNXOpen_Features_Feature);
     47 
     48     std::vector<NXOpen::Body *> targetBodies1(1);
     49     NXOpen::Body *nullNXOpen_Body(NULL);
     50     targetBodies1[0] = nullNXOpen_Body;
     51     blockFeatureBuilder1->BooleanOption()->SetTargetBodies(targetBodies1);
     52 
     53     blockFeatureBuilder1->SetType(NXOpen::Features::BlockFeatureBuilder::TypesOriginAndEdgeLengths);//设置创建类型
     54 
     55     NXOpen::Point3d originPoint1(100.0, 100.0, 100.0);
     56     blockFeatureBuilder1->SetOriginAndLengths(originPoint1, "100", "100", "100");//设置原点
     57 
     58     blockFeatureBuilder1->SetBooleanOperationAndTarget(NXOpen::Features::Feature::BooleanTypeCreate, nullNXOpen_Body);//设置布尔
     59 
     60     NXOpen::Features::Feature *feature1;
     61     feature1 = blockFeatureBuilder1->CommitFeature();
     62     
     63     //NXOpen方式设置颜色
     64     NXOpen::DisplayModification *displayModification1;
     65     displayModification1 = theSession->DisplayManager()->NewDisplayModification();
     66 
     67     displayModification1->SetNewColor(108);//设置颜色
     68 
     69     std::vector<NXOpen::DisplayableObject *> objects1(1);
     70     NXOpen::Body *body1(dynamic_cast<NXOpen::Body *>(workPart->Bodies()->FindObject(feature1->JournalIdentifier())));
     71     objects1[0] = body1;
     72     displayModification1->Apply(objects1);
     73 
     74 
     75 
     76 
     77 
     78     //方法3:UFUN创建块,NXOpen设置颜色
     79     //UFUN方式创建块
     80     UF_FEATURE_SIGN Sign1 = UF_NULLSIGN;
     81     double Corner_pt1[3] = { 200.0, 200.0, 200.0 };
     82     char *Edge_len1[3] = { "100", "100", "100" };
     83     tag_t BlkTag1 = NULL_TAG;
     84     UF_MODL_create_block1(Sign1, Corner_pt1, Edge_len1, &BlkTag1);
     85 
     86     //UFUN方式特征找体
     87     tag_t BodyTag1 = NULL_TAG;
     88     UF_MODL_ask_feat_body(BlkTag1, &BodyTag1);
     89 
     90     //NXOpen方式设置颜色
     91     NXOpen::DisplayModification *displayModification2;
     92     displayModification2 = theSession->DisplayManager()->NewDisplayModification();
     93 
     94     displayModification2->SetNewColor(128);//设置颜色
     95 
     96     std::vector<NXOpen::DisplayableObject *> objects2(1);
     97     NXOpen::Body *body2(dynamic_cast<NXOpen::Body *>(NXOpen::NXObjectManager::Get(BodyTag1)));
     98     objects2[0] = body2;
     99     displayModification2->Apply(objects2);
    100 
    101 
    102 
    103 
    104 
    105     //方法4:NXOpen创建块,UFUN设置颜色
    106     //NXOpen方式创建块
    107     NXOpen::Features::Feature *nullNXOpen_Features_Feature1(NULL);
    108     NXOpen::Features::BlockFeatureBuilder *blockFeatureBuilder2;
    109     blockFeatureBuilder2 = workPart->Features()->CreateBlockFeatureBuilder(nullNXOpen_Features_Feature1);
    110 
    111     std::vector<NXOpen::Body *> targetBodies2(1);
    112     NXOpen::Body *nullNXOpen_Body1(NULL);
    113     targetBodies2[0] = nullNXOpen_Body1;
    114     blockFeatureBuilder2->BooleanOption()->SetTargetBodies(targetBodies2);
    115 
    116     blockFeatureBuilder2->SetType(NXOpen::Features::BlockFeatureBuilder::TypesOriginAndEdgeLengths);//设置创建类型
    117 
    118     NXOpen::Point3d originPoint2(300.0, 300.0, 300.0);
    119     blockFeatureBuilder2->SetOriginAndLengths(originPoint2, "100", "100", "100");//设置原点
    120 
    121     blockFeatureBuilder2->SetBooleanOperationAndTarget(NXOpen::Features::Feature::BooleanTypeCreate, nullNXOpen_Body1);//设置布尔
    122 
    123     NXOpen::Features::Feature *feature2;
    124     feature2 = blockFeatureBuilder2->CommitFeature();
    125 
    126     //UFUN方式特征找体
    127     tag_t BodyTag2 = NULL_TAG;
    128     UF_MODL_ask_feat_body(feature2->Tag(), &BodyTag2);
    129 
    130     //UFUN方式设置颜色
    131     UF_OBJ_set_color(BodyTag2, 125);
    132 
    133 
    134     UF_terminate();

  • 相关阅读:
    【老孙随笔】关羽和吕蒙——天才的失败
    【老孙随笔】项目经理要向唐骏学习
    WebService里奇怪的参数值偏移现象?
    [原创]让您的服务器不再有被挂马的烦恼文件安全卫士
    C#里也可以用上Eval函数了:)
    使用HTTP_X_FORWARDED_FOR获取客户端IP的严重后果
    支持算术运算、逻辑运算、位运算的表达式求值
    在Lambda表达式中进行递归调用
    认识Lambda表达式
    将你的QQ唠叨或QQ签名数据加入到博客上:)
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/10957445.html
Copyright © 2020-2023  润新知