NX二次开发-遍历当前part所有component,把装配子部件设置成工作部件

 1 NX11+VS2013
 2
 3 #include <uf.h>
 4 #include <uf_disp.h>
 5 #include <uf_modl.h>
 6 #include <uf_part.h>
 7 #include <uf_obj.h>
 8 #include <uf_assem.h>
 9 #include <uf_ui.h>
10 #include <string.h>
11 #include <NXOpen/NXObjectManager.hxx>
12 #include <NXOpen/NXException.hxx>
13 #include <NXOpen/Session.hxx>
14 #include <NXOpen/Assemblies_Component.hxx>
15 #include <NXOpen/Assemblies_ComponentAssembly.hxx>
16 #include <NXOpen/BasePart.hxx>
17 #include <NXOpen/MenuBar_ContextMenuProperties.hxx>
18 #include <NXOpen/Part.hxx>
19 #include <NXOpen/PartCollection.hxx>
20 #include <NXOpen/PartLoadStatus.hxx>
21 #include <NXOpen/Selection.hxx>
22 #include <NXOpen/Session.hxx>
23 #include <NXOpen/TaggedObject.hxx>
24 #include <algorithm>
25 #include <NXOpen/STLCreator.hxx>
26 #include <NXOpen/DexManager.hxx>
27 #include <iostream>
28 #include <string.h>
29 #include <algorithm>
30 #include <iterator>
31 #include <cctype>
32
33
34
35 void MyClass::CycleComponent()
36 {
37     //遍历当前part所有component
38     tag_t ComponentTag = NULL_TAG;
39     UF_OBJ_cycle_objs_in_part(UF_ASSEM_ask_work_part(), UF_component_type, &ComponentTag);
40     while (ComponentTag != NULL_TAG)
41     {
42         //获的显示的体
43         UF_OBJ_disp_props_t Componentdisp_props;
44         UF_OBJ_ask_display_properties(ComponentTag, &Componentdisp_props);
45         int ComponentBlank = Componentdisp_props.blank_status;
46         if (ComponentBlank == UF_OBJ_NOT_BLANKED)
47         {
48             //把装配子部件设置成工作部件
49             NXOpen::Assemblies::Component *component1(dynamic_cast<NXOpen::Assemblies::Component *>(NXOpen::NXObjectManager::Get(ComponentTag)));
50             NXOpen::PartLoadStatus *partLoadStatus1;
51             theSession->Parts()->SetWorkComponent(component1, NXOpen::PartCollection::RefsetOptionEntire, NXOpen::PartCollection::WorkComponentOptionVisible, &partLoadStatus1);
52             workPart = theSession->Parts()->Work();
53             delete partLoadStatus1;
54
55             //遍历工作部件里的体
56             CycleComponentBody();
57
58             //恢复到装配部件
59             NXOpen::Assemblies::Component *nullNXOpen_Assemblies_Component(NULL);
60             NXOpen::PartLoadStatus *partLoadStatus2;
61             theSession->Parts()->SetWorkComponent(nullNXOpen_Assemblies_Component, NXOpen::PartCollection::RefsetOptionEntire, NXOpen::PartCollection::WorkComponentOptionVisible, &partLoadStatus2);
62             workPart = theSession->Parts()->Work();
63             delete partLoadStatus2;
64         }
65
66
67         UF_OBJ_cycle_objs_in_part(UF_ASSEM_ask_work_part(), UF_component_type, &ComponentTag);
68     }
69
70 }

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

时间: 2024-11-07 14:42:51

NX二次开发-遍历当前part所有component,把装配子部件设置成工作部件的相关文章

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二次开发-基于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+VS写代码设断点调试技巧

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

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二次开发-移动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二次开发-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 <u