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 <NXOpen\NXObjectManager.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();

原文地址:https://www.cnblogs.com/nxopen2018/p/10957445.html

时间: 2024-11-10 15:45:16

NX二次开发-UFUN和NXOpen结合开发中Tag_t对象与TaggedObject对象转换方法的相关文章

NX二次开发-Block UI C++界面关于 在Block UI中UF_initialize();和UF_terminate();的使用

关于 在Block UI中UF_initialize();和UF_terminate();的使用 1 用Block UI作NX二次开发的时候,不需要在使用UFUN函数的时候加UF_initialize();和UF_terminate();. 2 可以直接加在CPP里这个位置: 3 4 extern "C" DllExport void ufusr(char *param, int *retcod, int param_len) 5 { 6 TwoPointCyl *theTwoPoin

NX二次开发-NX+VS写代码设断点调试技巧

在做NX二次开发的时候写完代码,编译可以通过,但是执行的时候却没有反应,或者得到的结果不对,说明肯定有地方传值出错了.我在查找代码错误的时候有几种方法:1.uc1601打印函数输入和输出的值看对不对.2.VS设断点-添加进程调试,来看输入输出值对不对3.UF_CALL也就是UF_get_fail_message这个函数,来看函数自己用的对不对.4.查看NX-Help-LogFile(日志),拖到最后看提示了哪些错误. 我一般用的比较多的是设断点调试,这里先说设断点调试.其他方法改天再写. 写举一

NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))

NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等.这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的方法,无论C++还是C#还是VB方式思路都是一样的.先介绍用MFC去做,然后在写一篇博客介绍怎么在NX的二次开发的向导模板里去做.NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))https://ufun-nxopen.blog.csdn.net/article

Visual Stadio 与NX二次开发的环境配置(以VS2010、NX10.0为例)

问题描述: 许多博文发布了关于Visual Stadio 与NX二次开发的环境配置,这些博文的提示事修改了文件NX10_Open.vsz中的引擎为10.0,但实际结果是创建C++引导失败. 问题解决概述: 创建正确引导应该同时修改NX10_Open.vsz与NX10_NXOpenCPP.vsz两个文件的引擎版本号. 解决步骤: 将NX10.0 UGOPEN目录下的所有文件夹(VB.VC.VC#)复制,并粘贴到Visual Stadio 2010安装目录下与对应的文件夹合并即可(覆盖). 例如,将

NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))

在看这个博客前,请读者先去完整看完:NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))https://ufun-nxopen.blog.csdn.net/article/details/88922030 这篇博客,要不然你听不懂我下面在说什么. 版本NX11+VS2013+office2016 首先我们通过NX开发向导创建了一个模板. 先把项目属性改成多字节.下面我们把前面做的MFC项目里的几个EXCAL头文件和stdafx一块拷过来,加到NX的项目里. 在NX的

NX二次开发-移动WCS坐标系

说明:移动WCS坐标系 用法: #include <uf.h> #include <uf_csys.h> extern DllExport void ufusr(char *param, int *returnCode, int rlen) { UF_initialize(); //移动WCS,到点 couCsysOrigin2 double couCsysOrigin2[3] = { 10,10,10 }; //获取当前WCS标识 tag_t tagWCS = NULL_TAG;

NX二次开发-获取指定矩阵标识的矩阵值

函数:UF_CSYS_ask_matrix_values () 函数说明:获取指定矩阵标识的矩阵值. 用法: #include <uf.h> #include <uf_csys.h> extern DllExport void ufusr(char *param, int *returnCode, int rlen) { UF_initialize(); //获取WCS标识 tag_t tagWCS = NULL_TAG; UF_CSYS_ask_wcs(&tagWCS);

NX二次开发-通过3x3矩阵获取XYZ轴矢量

函数:UF_CSYS_ask_wcs() 函数说明:通过3x3矩阵获取XYZ轴矢量 用法: 1 #include <uf.h> 2 #include <uf_mtx.h> 3 extern DllExport void ufusr(char *param, int *returnCode, int rlen) 4 { 5 UF_initialize(); 6 7 double douMatrixValues[9] = {1,0,0,0,1,0,0,0,1}; 8 double dV

【NX二次开发】NX对象类型及基本操作

说明:NX中的所有对象都是通过唯一的tag_t值进行标识的,这些对象大致可以分为部件对象.UF对象.表达式.链表对象和属性对象等. 部件对象的操作: 基本操作函数: 1.UF_PART_new()  新建部件 2.UF_PART_open()  打开部件 3.UF_PART_close_all()  关闭所有部件 4.UF_PART_save()  保存部件 5.UF_PART_close()  关闭部件 部件对象查询函数: 1.UF_OBJ_cycle_objs_in_part()  在部件中