NX二次开发习题及源码

合集下载

ug二次开发与实例精解(pdf+源代码)

ug二次开发与实例精解(pdf+源代码)

ug二次开发与实例精解(pdf+源代码)UG二次开发是指在已有的UG软件的基础上,通过编写一定的程序代码,扩展UG软件的功能,满足用户的特定需求,提高UG软件的应用价值和使用效率。

UG二次开发可以通过以下方式进行:1. 应用程序编程接口(API)开发:UG软件提供了API,用户可以通过编写代码调用API,实现所需功能。

2. 用户自定义特征(UDF)开发:用户可以通过UDF功能,自定义UG软件的一些特殊功能。

3. 脚本编程:用户可以通过编写脚本,对UG软件进行操作,实现所需功能。

UG二次开发的实例有很多种,以下是其中几种常见的实例:1. 零件加工路径优化:UG软件默认的加工路径可能不是最优的,用户可以通过二次开发,在加工路径规划中添加一些优化算法,使加工路径更加高效。

2. 自动化设计验证:UG软件提供了一些设计验证功能,但是这些功能需要手动进行操作,用户可以通过二次开发,自动化进行设计验证,提高设计效率。

3. 机器人编程辅助:机器人编程比较复杂,可以通过二次开发,实现对机器人的路径规划和动作指令的自动化生成,提高编程效率。

4. 绘图标准化:UG软件默认的绘图标准可能不符合公司的要求,用户可以通过二次开发,实现自定义标准,使绘图规范化和标准化。

以上仅是UG二次开发的部分实例,随着工业技术的发展和企业的需求,UG二次开发的应用场景会越来越广泛,提高企业的数字化程度和竞争力。

UG二次开发的源代码主要是针对用户自定义功能进行编写,具体编写过程如下:1. 编写需求文档:用户需要明确自己的需求,将需求写成文档形式,明确功能的作用、输入输出等信息。

文档还需要包括程序的安装方式和使用说明等。

2. 选择编程语言:UG二次开发可以用多种编程语言实现,包括C++、C#、和Java等。

选择编程语言时需要考虑编程语言的适用场景和编程人员的编程水平。

3. 编写代码:依据需求文档,使用选择的编程语言编写代码。

在编写代码时需要注意代码的可读性和可维护性,避免代码臃肿、难以理解。

NX二次开发(非常有用)

NX二次开发(非常有用)
#include<uf.h>/*包含UF_initialize()和UF_terminate()函数原型的头文件*/
#include<uf_ui.h>/*包含uc1601()函数原型的头文件*/
externvoidufusr(char*param,int*retcod,intparam_len)
{
/*获取UG/OPEN API的执行权限*/
if(UF_initialize()!=0)
return;
/*弹出消息窗口,显示“Hello,UG!”*/
uc1601("Hello,Uห้องสมุดไป่ตู้!",1);
/*释放UG/OPEN API的执行权限*/
UF_terminate();
}
三、实验步骤
1
为便于了解UG/Open API的使用,下面将创建一个简单的应用开发程序,其功能是在UG环境中显示一个消息对话框“Hello,UG!”。运行平台为WindowsXP,开发平台为Visual 和UG/NX4。
图1-7
图1-8
1
在UG界面中选择菜单File→Execute→NX Open,在系统弹出的一个文件选择对话框中选择应用程序“Hello UG.dll”。如图1-9、图1-10所示。
图1-9
图1-10
图1-11
2
应用开发程序框架还可以采用Win32 DLL向导创建。Win32 DLL向导创建Windows常规DLL,它只能导出C样式函数,不能导出C++类、成员函数和重载函数,同UG/OpenAppWizard向导创建工程项目一样不支持 MFC。利用Win32应用程序向导创建工程项目,包括两个步骤:新建项目和设置项目属性。

ugnx练习题

ugnx练习题

UG NX 练习题一、基础操作1. 如何在UG NX中新建一个零件文件?2. 如何在UG NX中打开一个已存在的零件文件?3. 如何在UG NX中保存当前编辑的零件文件?4. 如何在UG NX中撤销上一步操作?5. 如何在UG NX中重做上一步撤销的操作?6. 如何在UG NX中设置工作坐标系?7. 如何在UG NX中创建一个点?8. 如何在UG NX中创建一条直线?9. 如何在UG NX中创建一个圆?10. 如何在UG NX中创建一个矩形?二、草图绘制1. 如何在UG NX中创建一个草图平面?2. 如何在UG NX中绘制直线、圆、矩形等基本图形?3. 如何在UG NX中设置草图约束?4. 如何在UG NX中编辑草图几何体?5. 如何在UG NX中创建草图圆弧?6. 如何在UG NX中创建草图椭圆?7. 如何在UG NX中创建草图多边形?8. 如何在UG NX中创建草图文本?9. 如何在UG NX中创建草图尺寸标注?10. 如何在UG NX中创建草图几何关系?三、特征建模1. 如何在UG NX中创建拉伸特征?2. 如何在UG NX中创建旋转特征?3. 如何在UG NX中创建扫描特征?4. 如何在UG NX中创建混合特征?5. 如何在UG NX中创建孔特征?6. 如何在UG NX中创建倒角特征?7. 如何在UG NX中创建圆角特征?8. 如何在UG NX中创建拔模特征?9. 如何在UG NX中创建壳特征?10. 如何在UG NX中创建筋特征?四、装配设计1. 如何在UG NX中创建装配环境?2. 如何在UG NX中添加组件到装配体?3. 如何在UG NX中编辑组件的装配关系?4. 如何在UG NX中测量组件间的距离?5. 如何在UG NX中创建组件的装配约束?6. 如何在UG NX中编辑组件的装配位置?7. 如何在UG NX中创建组件的装配实例?8. 如何在UG NX中编辑组件的装配实例?9. 如何在UG NX中创建组件的装配阵列?10. 如何在UG NX中编辑组件的装配阵列?五、工程图绘制1. 如何在UG NX中创建工程图环境?2. 如何在UG NX中创建工程图视图?3. 如何在UG NX中设置工程图视图比例?4. 如何在UG NX中创建工程图尺寸标注?5. 如何在UG NX中创建工程图几何关系?6. 如何在UG NX中创建工程图文本标注?7. 如何在UG NX中创建工程图符号标注?8. 如何在UG NX中创建工程图表面粗糙度标注?9. 如何在UG NX中创建工程图公差标注?10. 如何在UG NX中创建工程图注释标注?六、高级功能1. 如何在UG NX中创建参数化设计?2. 如何在UG NX中创建关联设计?3. 如何在UG NX中创建曲面建模?4. 如何在UG NX中创建曲面分析?5. 如何在UG NX中创建曲面修整?6. 如何在UG NX中创建曲面过渡?7. 如何在UG NX中创建曲面倒圆角?8. 如何在UG NX中创建曲面倒角?9. 如何在UG NX中创建曲面拔模?10. 如何在UG NX中创建曲面分割?UG NX 练习题(续)七、曲面建模进阶1. 如何在UG NX中创建N边曲面?2. 如何在UG NX中创建边界曲面?3. 如何在UG NX中创建通过曲线的曲面?4. 如何在UG NX中创建通过点的曲面?5. 如何在UG NX中创建通过曲线和点的曲面?6. 如何在UG NX中创建曲面网格编辑?7. 如何在UG NX中创建曲面修剪?8. 如何在UG NX中创建曲面延伸?9. 如何在UG NX中创建曲面偏移?10. 如何在UG NX中创建曲面偏移复制?八、仿真分析1. 如何在UG NX中创建有限元分析(FEA)?2. 如何在UG NX中定义材料属性?3. 如何在UG NX中创建边界条件?4. 如何在UG NX中创建载荷条件?5. 如何在UG NX中创建约束条件?6. 如何在UG NX中设置分析求解器?7. 如何在UG NX中查看分析结果?8. 如何在UG NX中创建应力分析?9. 如何在UG NX中创建变形分析?10. 如何在UG NX中创建疲劳分析?九、数控编程1. 如何在UG NX中创建刀具路径?2. 如何在UG NX中设置刀具参数?3. 如何在UG NX中创建刀具路径模拟?4. 如何在UG NX中创建多轴加工刀具路径?5. 如何在UG NX中创建曲面加工刀具路径?6. 如何在UG NX中创建轮廓加工刀具路径?7. 如何在UG NX中创建孔加工刀具路径?8. 如何在UG NX中创建粗加工刀具路径?9. 如何在UG NX中创建精加工刀具路径?10. 如何在UG NX中创建多任务加工刀具路径?十、高级装配与仿真1. 如何在UG NX中创建虚拟装配?2. 如何在UG NX中创建装配干涉检查?3. 如何在UG NX中创建运动仿真?4. 如何在UG NX中创建动力学仿真?5. 如何在UG NX中创建热分析?6. 如何在UG NX中创建流体动力学分析?7. 如何在UG NX中创建电磁场分析?8. 如何在UG NX中创建声学分析?9. 如何在UG NX中创建疲劳寿命分析?10. 如何在UG NX中创建复合材料分析?十一、数据管理和协作1. 如何在UG NX中导入和导出CAD文件?2. 如何在UG NX中管理设计变更?3. 如何在UG NX中创建和编辑设计历史?4. 如何在UG NX中创建设计版本?5. 如何在UG NX中协同工作?6. 如何在UG NX中设置权限和访问控制?7. 如何在UG NX中创建和编辑项目?8. 如何在UG NX中创建和编辑任务?9. 如何在UG NX中创建和编辑文档?10. 如何在UG NX中创建和编辑报告?UG NX 练习题(续)十二、用户界面与定制1. 如何在UG NX中自定义工具栏?2. 如何在UG NX中设置快捷键?3. 如何在UG NX中配置用户界面布局?4. 如何在UG NX中设置系统选项?5. 如何在UG NX中管理用户设置?6. 如何在UG NX中创建自定义模板?7. 如何在UG NX中导入和导出自定义设置?8. 如何在UG NX中创建和编辑宏?9. 如何在UG NX中录制和回放宏?10. 如何在UG NX中设置宏运行环境?十三、数据交换与集成1. 如何在UG NX中导入STL文件?2. 如何在UG NX中导入IGES文件?3. 如何在UG NX中导入 Parasolid 文件?4. 如何在UG NX中导入STEP文件?5. 如何在UG NX中导入DXF/DWG文件?6. 如何在UG NX中导入CATIA V5文件?7. 如何在UG NX中导入Pro/ENGINEER文件?8. 如何在UG NX中导入SolidWorks文件?9. 如何在UG NX中集成第三方插件?10. 如何在UG NX中与其他CAD/CAM/CAE软件进行数据交换?十四、高级曲面设计1. 如何在UG NX中创建自由曲面?2. 如何在UG NX中创建扫描曲面?3. 如何在UG NX中创建混合曲面?4. 如何在UG NX中创建边界曲面网格?5. 如何在UG NX中创建曲面倒圆角?6. 如何在UG NX中创建曲面倒角?7. 如何在UG NX中创建曲面偏移?8. 如何在UG NX中创建曲面修剪?9. 如何在UG NX中创建曲面延伸?10. 如何在UG NX中创建曲面分割?十五、高级加工技术1. 如何在UG NX中创建多轴加工路径?2. 如何在UG NX中创建曲面加工路径?3. 如何在UG NX中创建轮廓加工路径?4. 如何在UG NX中创建孔加工路径?5. 如何在UG NX中创建粗加工路径?6. 如何在UG NX中创建精加工路径?7. 如何在UG NX中创建多任务加工路径?8. 如何在UG NX中创建刀具路径优化?9. 如何在UG NX中创建刀具路径模拟?10. 如何在UG NX中创建刀具路径后处理?十六、高级仿真与测试1. 如何在UG NX中创建动态仿真?2. 如何在UG NX中创建运动仿真?3. 如何在UG NX中创建疲劳寿命仿真?4. 如何在UG NX中创建热仿真?5. 如何在UG NX中创建流体动力学仿真?6. 如何在UG NX中创建声学仿真?7. 如何在UG NX中创建电磁场仿真?8. 如何在UG NX中创建复合材料仿真?9. 如何在UG NX中创建测试脚本?10. 如何在UG NX中分析仿真结果?UG NX 练习题(续)十七、高级编程与自动化1. 如何在UG NX中使用Python进行宏编程?2. 如何在UG NX中使用UGScript进行编程?3. 如何在UG NX中创建自定义函数库?4. 如何在UG NX中编写自动化脚本?5. 如何在UG NX中调用外部程序?6. 如何在UG NX中集成API进行二次开发?7. 如何在UG NX中创建自定义工具和菜单?8. 如何在UG NX中自动化设计流程?9. 如何在UG NX中创建批量处理脚本?10. 如何在UG NX中优化宏执行效率?十八、高级项目管理1. 如何在UG NX中创建项目模板?2. 如何在UG NX中分配项目任务?3. 如何在UG NX中跟踪项目进度?4. 如何在UG NX中管理项目文档?5. 如何在UG NX中设置项目权限和访问控制?6. 如何在UG NX中创建项目报告?7. 如何在UG NX中集成项目管理工具?8. 如何在UG NX中协调跨部门项目?9. 如何在UG NX中评估项目风险?10. 如何在UG NX中优化项目资源分配?十九、高级用户支持与培训1. 如何在UG NX中提供用户支持?2. 如何在UG NX中编写用户手册和教程?3. 如何在UG NX中创建在线培训课程?4. 如何在UG NX中评估用户培训需求?5. 如何在UG NX中设计培训课程内容?6. 如何在UG NX中组织培训研讨会?7. 如何在UG NX中评估培训效果?8. 如何在UG NX中提供远程技术支持?9. 如何在UG NX中创建知识库?10. 如何在UG NX中管理用户反馈?二十、高级曲面修复与优化1. 如何在UG NX中修复曲面缺陷?2. 如何在UG NX中优化曲面质量?3. 如何在UG NX中平滑曲面过渡?4. 如何在UG NX中去除曲面噪声?5. 如何在UG NX中修复曲面间隙?6. 如何在UG NX中修复曲面孔洞?7. 如何在UG NX中修复曲面裂缝?8. 如何在UG NX中优化曲面网格?9. 如何在UG NX中调整曲面参数?10. 如何在UG NX中创建高质量曲面模型?答案:一、基础操作1. 在UG NX中,通过菜单栏的“文件”>“新建”或使用快捷键Ctrl+N来创建一个零件文件。

NX二次开发(非常有用)

NX二次开发(非常有用)
图2-1UIStyler可视化界面
1.2对话框设计
UIStyler可视化界面包括基本对话框、对象浏览器、属性编辑器、控件栏和控件编辑工具五部分。用户在控件栏中选择控件后放置在基本对话框中,通过对象浏览器查看在基本对话框中设置的控件对象信息、利用控件编辑工具调整控件布局,通过属性编辑器编辑对话框及指定控件的属性。
二、实验内容
分别使用UG/OpenAppWizard向导和Win32应用程序向导(DLL)的方法创建UG二次开发工程项目,并利用Visual Studio 2005集成环境来编辑、编译并运行下面简单UG二次开发程序:
#include<uf.h>/*包含UF_initialize()和UF_terminate()函数原型的头文件*/
图1-5编译链接项目
1.4调试程序
方法一:在程序编译之后,首先在程序中设置断点,点击主菜单“调试→启动”,如图1-6所示,启动NX系统。在NX系统中激活.dll程序,程序进入调试状态,F11是逐语句调试,F10是逐过程调试(注意,在调试程序之前,一定对项目属性的调试进行设置)。
图1-6调试程序
方法二:在程序编译、代码中设置断点后,启动UG NX4;回到Visual 集成开发环境,点击主菜单“工具→调试进程”,系统打开“进程”对话框,如图1-7所示,双击“可用进程”列表中“ugraf.exe”,系统打开“附加进程”对话框,如图1-8所示,选择要调试程序类型为“Native”,单击“确定”按钮,系统进入程序调试状态,按“F11”或“F10”进行逐语句或逐过程调试。
图1-14解决方案资源管理器图
步骤二:设置项目属性
选择项目菜单下的属性项,将显示如图1-15所示的UFSolution属性页。
图1-15项目属性页-常规

NX二次开发资料

NX二次开发资料

手把手教你做UG二次开发1。

建立两个目录。

建立第一个目录 E:\my_first_UG,在这个目录下建立两个新的目录:E:\my_first_UG\application和E:\my_first_UG\startup。

建立第二个目录E:\my_source,用存放你的源代码。

2。

设置环境变量。

再Windows中设置一个新的环境变量:UGII_USER_DIR=E:\my_first_UG。

3。

打开UG,进入UIStyler应用(在Application菜单的最后)。

4。

设计一个对话框。

1)在"Dialog Title"一栏填入:First Dialog,按Apply(每次输入完成后,都要按Apply,为避免啰嗦,以后不再提及)。

2)在"Cue"一栏输入:%……%¥%¥¥##*%*(*(*—*—((,什么都行,呵呵。

3)在"Prefix Name"中,把CHANGE改为MY。

4)加入四个控件。

String,Push Button,Label和Single Select List编辑对话框的各个控件。

1)改变String控件的标题,标识和长度。

Label “String” -> “Input an item”.Identifier "STR_0" -> "ITEM"Width in... 0 -> 202) 改变Push Button控件的标题,标识和回调函数的名字。

Label "Push Button" -> "Import"Identifier "ACTION_1" -> "IMPORT"callbacks "action_1_act_cb" -> import_cb把"Creates Dialog"激活。

NX二次开发(非常有用)

NX二次开发(非常有用)

盐城工学院优集学院目录实验一熟悉Visual Studio 2005开发环境及UG二次开发工程项目创建的方法 (2)实验二 UIStyler、Menuscript创建用户界面、菜单和工具条.. 16实验三外部数据库访问 (24)实验四零件设计 (40)实验五工程图设计 (48)实验六装配设计 (61)实验一熟悉Visual Studio 2005开发环境及UG二次开发工程项目创建的方法一、实验目的1、了解和使用Visual Studio2005集成开发环境;2、熟悉Visual Studio2005环境的基本命令和功能键;3、掌握UG二次开发工程项目创建过程和方法;4、理解简单的UG二次开发程序结构。

二、实验内容分别使用UG/Open AppWizard向导和Win32应用程序向导(DLL)的方法创建UG 二次开发工程项目,并利用Visual Studio 2005集成环境来编辑、编译并运行下面简单UG二次开发程序:#include <uf.h> /* 包含UF_initialize()和UF_terminate()函数原型的头文件*/#include <uf_ui.h> /* 包含uc1601()函数原型的头文件*/extern void ufusr( char *param, int *retcod, int param_len ){/* 获取UG/OPEN API的执行权限 */if(UF_initialize()!=0)return;/* 弹出消息窗口,显示“Hello,UG!” */uc1601("Hello,UG!",1);/* 释放UG/OPEN API的执行权限*/UF_terminate();}三、实验步骤1利用UG/Open AppWizard向导为便于了解UG/Open API的使用,下面将创建一个简单的应用开发程序,其功能是在UG环境中显示一个消息对话框“Hello,UG!”。

NX二次开发习题及源码

NX二次开发习题及源码

1、创建NXhello界面代码:#include <uf_ui.h>//包含UF_initialize()和UF_terminate()函数原型的头文件#include <uf.h>//包含uc1601()函数原型的头文件extern void ufusr(char *param, int *retcode, int param_len){if (UF_initialize()!=0)//获取NX openapi的执行权限{return;uc1601("Hello NX",1);//弹出消息窗口,显示“Hello NX”UF_terminate();//释放NX OPEN API的执行权限}}运行结果截图:2、创建一个模型,并在信息窗口显示模型的tag值。

代码:#include <stdio.h>#include <uf.h>#include <uf_modl.h>#include < uf_ui_ugopen.h>#include <uf_part.h>#include <uf_ui.h>static void do_ugopen_api(void){ typedef unsigned int tag_t;UF_FEATURE_SIGN sign = UF_NULLSIGN;//无布尔运算double cyl_orig[3] = {0,0,0};//圆柱的圆心坐标char *cyl_height="100";char *cyl_diam="40";double direction[3]={0,0,1};//延Z轴正方向tag_t obj=NULL_TAG;UF_MODL_create_cyl1(sign, cyl_orig,cyl_height,cyl_diam,direction, &obj);UF_UI_open_listing_window(); //显示信息框:tag/*Returns the tag of the current display part. In a non-assembly part, this is the same as the work part. If there currently isn't a displayed part, a NULL_TAG is returned. */obj=UF_PART_ask_display_part();if(obj == NULL_TAG) //没有部件的时候显示的信息提示框{uc1601 ( "当前没有任何文件可供操作!",1);}else{char s[10];sprintf(s, "%d",obj); //sprinf()功能:把格式化的数据写入某个字符串UF_UI_write_listing_window(s);return;}}extern void ufusr( char *param, int *retcode, int rlen )//提供入口点{if((UF_initialize())!=0)return;do_ugopen_api ();UF_terminate();return;}extern int ufusr_ask_unload(void){return(UF_UNLOAD_IMMEDIATELY);}运行结果截图:(1)无部件时的输出(2)有部件时的输出结果3、open part 用户入口实例创建open part user exit在用户点击“open”时创建新部件,在其中创建sphere 详细说明user exit设置文件过程代码如下:#include < uf_assem.h>#include <uf_part.h>#include <uf_ui_ugopen.h>#include <stdio.h>#include <uf.h>#include <uf_modl.h>#include <uf_ui.h>#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))static int report( char *file, int line, char *call, int irc){if (irc){char messg[133];printf("%s, line %d: %s\n", file, line, call);(UF_get_fail_message(irc, messg)) ?printf(" returned a %d\n", irc) :printf(" returned error %d: %s\n", irc, messg);}return(irc);}static void do_ugopen_api(void){UF_FEATURE_SIGN sign = UF_NULLSIGN;tag_t part=null_tag;//如果没有赋值的话,直接就是"tag_t part",当你执行.dll文件时,就直接跑到建模环境了,没有信息提示框。

ugnx练习题

ugnx练习题

UGNX练习题一、基础操作类1.1 选择与过滤1. 请使用过滤器选择所有圆柱体特征。

2. 请使用选择球面工具选择所有球面特征。

3. 请使用选择边工具选择所有曲线边。

4. 请使用选择面工具选择所有平面。

1.2 基准特征1. 创建一个基准平面,使其平行于XY平面,距离原点10mm。

2. 创建一个基准轴,使其垂直于基准平面,通过原点。

3. 创建一个基准点,位于基准平面和基准轴的交点。

1.3 基础建模1. 创建一个长方体,长100mm,宽50mm,高20mm。

2. 创建一个圆柱体,直径30mm,高50mm,底面中心与长方体底面中心对齐。

3. 创建一个球体,直径40mm,球心位于圆柱体顶面中心。

4. 创建一个圆锥体,底面直径50mm,顶面直径20mm,高60mm,底面中心与长方体底面中心对齐。

二、特征操作类2.1 布尔操作1. 将圆柱体与长方体进行布尔求和操作。

2. 将球体从布尔求和后的实体中减去。

3. 将圆锥体与布尔求和后的实体进行布尔求和操作。

2.2 特征变换1. 对长方体进行镜像操作,以YOZ平面为镜像平面。

2. 对圆柱体进行旋转操作,旋转角度为45度,旋转中心为原点。

3. 对圆锥体进行平移操作,沿X轴方向平移50mm。

2.3 特征编辑1. 修改长方体的高度为30mm。

2. 修改圆柱体的直径为40mm。

3. 修改圆锥体的底面直径为60mm。

三、曲面建模类3.1 曲面创建1. 创建一个矩形平面,长200mm,宽100mm。

2. 创建一个圆形平面,直径100mm。

3. 创建一个N边曲面,边数为6,每边长度为50mm。

3.2 曲面操作1. 将矩形平面沿Z轴方向拉伸50mm。

2. 将圆形平面沿Z轴方向拉伸100mm。

3. 将N边曲面进行修剪,使其与矩形平面和圆形平面相切。

四、装配类4.1 零件装配1. 创建一个螺栓零件,直径10mm,长度50mm。

2. 创建一个螺母零件,直径15mm,厚度10mm。

3. 将螺栓与螺母进行装配,螺栓穿过长方体顶面,螺母位于长方体底面。

NX二次开发-获得NXOpen录制的点集里面的点坐标XYZ

NX二次开发-获得NXOpen录制的点集里面的点坐标XYZ

NX⼆次开发-获得NXOpen录制的点集⾥⾯的点坐标XYZ 刚才看到有群友问,就写了⼀下,做个笔记。

NX11+VS2013//NX11_NXOpenCPP_Wizard9// 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 <uf_defs.h>#include <NXOpen/NXException.hxx>#include <NXOpen/Session.hxx>#include <NXOpen/BasePart.hxx>#include <NXOpen/Builder.hxx>#include <NXOpen/CurveDumbRule.hxx>#include <NXOpen/DisplayableObject.hxx>#include <NXOpen/Expression.hxx>#include <NXOpen/ExpressionCollection.hxx>#include <NXOpen/Face.hxx>#include <NXOpen/Features_AssociativeLine.hxx>#include <NXOpen/Features_FeatureCollection.hxx>#include <NXOpen/Features_PointSetBuilder.hxx>#include <NXOpen/Features_PointSetFacePercentageBuilder.hxx>#include <NXOpen/Features_PointSetFacePercentageBuilderList.hxx>#include <NXOpen/IBaseCurve.hxx>#include <NXOpen/Line.hxx>#include <NXOpen/NXObject.hxx>#include <NXOpen/NXObjectList.hxx>#include <NXOpen/ObjectList.hxx>#include <NXOpen/Part.hxx>#include <NXOpen/PartCollection.hxx>#include <NXOpen/Point.hxx>#include <NXOpen/PointList.hxx>#include <NXOpen/ScCollector.hxx>#include <NXOpen/ScRuleFactory.hxx>#include <NXOpen/Section.hxx>#include <NXOpen/SelectDisplayableObjectList.hxx>#include <NXOpen/SelectFace.hxx>#include <NXOpen/SelectObject.hxx>#include <NXOpen/SelectionIntentRule.hxx>#include <NXOpen/Session.hxx>#include <NXOpen/TaggedObject.hxx>#include <NXOpen/Unit.hxx>#include <NXOpen/NXObjectManager.hxx>#include <NXOpen/Features_PointSet.hxx>// Std C++ Includes#include <iostream>#include <sstream>using namespace NXOpen;using std::string;using std::exception;using std::stringstream;using std::endl;using std::cout;using std::cerr;//------------------------------------------------------------------------------// NXOpen c++ test class//------------------------------------------------------------------------------class MyClass{// class memberspublic:static Session *theSession;static UI *theUI;MyClass();~MyClass();void do_it();void print(const NXString &);void print(const string &);void print(const char*);private:Part *workPart, *displayPart;NXMessageBox *mb;ListingWindow *lw;LogFile *lf;};//------------------------------------------------------------------------------// Initialize static variables//------------------------------------------------------------------------------Session *(MyClass::theSession) = NULL;UI *(MyClass::theUI) = NULL;//------------------------------------------------------------------------------// Constructor//------------------------------------------------------------------------------MyClass::MyClass(){// Initialize the NX Open C++ API environmentMyClass::theSession = NXOpen::Session::GetSession();MyClass::theUI = UI::GetUI();mb = theUI->NXMessageBox();lw = theSession->ListingWindow();lf = theSession->LogFile();workPart = theSession->Parts()->Work();displayPart = theSession->Parts()->Display();}//------------------------------------------------------------------------------// Destructor//------------------------------------------------------------------------------MyClass::~MyClass(){}//------------------------------------------------------------------------------// Print string to listing window or stdout//------------------------------------------------------------------------------void MyClass::print(const NXString &msg){if(! lw->IsOpen() ) lw->Open();lw->WriteLine(msg);}void MyClass::print(const string &msg){if(! lw->IsOpen() ) lw->Open();lw->WriteLine(msg);}void MyClass::print(const char * msg){if(! lw->IsOpen() ) lw->Open();lw->WriteLine(msg);}//------------------------------------------------------------------------------// Do something//------------------------------------------------------------------------------void MyClass::do_it(){// TODO: add your code here//录制创建点集(随便录得,这个不重要,使⽤者⾃⼰重新录)NXOpen::Features::PointSet *nullNXOpen_Features_PointSet(NULL);NXOpen::Features::PointSetBuilder *pointSetBuilder1;pointSetBuilder1 = workPart->Features()->CreatePointSetBuilder(nullNXOpen_Features_PointSet); std::vector<NXOpen::IBaseCurve *> curves1(1);NXOpen::Line *line1(dynamic_cast<NXOpen::Line *>(NXObjectManager::Get(44473)));//直线tagcurves1[0] = line1;NXOpen::CurveDumbRule *curveDumbRule1;curveDumbRule1 = workPart->ScRuleFactory()->CreateRuleBaseCurveDumb(curves1);pointSetBuilder1->SingleCurveOrEdgeCollector()->AllowSelfIntersection(true);std::vector<NXOpen::SelectionIntentRule *> rules1(1);rules1[0] = curveDumbRule1;NXOpen::NXObject *nullNXOpen_NXObject(NULL);NXOpen::Point3d helpPoint1(0, 0, 0);pointSetBuilder1->SingleCurveOrEdgeCollector()->AddToSection(rules1, line1, nullNXOpen_NXObject, nullNXOpen_NXObject, helpPoint1, NXOpen::Section::ModeCreate, false); pointSetBuilder1->NumberOfPointsExpression()->SetRightHandSide("20");NXOpen::NXObject *nXObject1;nXObject1 = pointSetBuilder1->Commit();pointSetBuilder1->Destroy();//转换NXOpen::Features::PointSet *pointSet1(dynamic_cast<NXOpen::Features::PointSet *>(NXOpen::NXObjectManager::Get(nXObject1->Tag())));std::vector<NXOpen::Point*> points = pointSet1->GetPoints();//打印点坐标theSession->ListingWindow()->Open();for (int i = 0; i < points.size(); i++){//打印tagchar msg[256];sprintf(msg, "点坐标:X=%f,Y=%f,Z=%f\n", points[i]->Coordinates().X, points[i]->Coordinates().Y, points[i]->Coordinates().Z);theSession->ListingWindow()->WriteLine(msg);}}//------------------------------------------------------------------------------// Entry point(s) for unmanaged internal NXOpen C/C++ programs//------------------------------------------------------------------------------// Explicit Executionextern"C" DllExport void ufusr( char *parm, int *returnCode, int rlen ){try{// Create NXOpen C++ class instanceMyClass *theMyClass;theMyClass = new MyClass();theMyClass->do_it();delete theMyClass;}catch (const NXException& e1){UI::GetUI()->NXMessageBox()->Show("NXException", NXOpen::NXMessageBox::DialogTypeError, e1.Message());}catch (const exception& e2){UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, e2.what());}catch (...){UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, "Unknown Exception.");}}//------------------------------------------------------------------------------// Unload Handler//------------------------------------------------------------------------------extern"C" DllExport int ufusr_ask_unload(){return (int)NXOpen::Session::LibraryUnloadOptionImmediately;}阿飞2021年9⽉9⽇阿飞2021年9⽉9⽇2021年9⽉11⽇补充NX11以下的低版本⾥是没有pointSet1->GetPoints()这个⽅法,要⽤别的⽅法去做。

NX二次开发-获取面的法向向量UF_MODL_ask_face_data

NX二次开发-获取面的法向向量UF_MODL_ask_face_data
大佬怎么遍历所机床视图所有的刀具然后在枚举控件上显示出来呀
NX二次开发 -获取面的法向向量 UF_MODL_ask_face_data
1 NX9+VS2012
2
3 #include <uf.h>
4 #include <uf_modl.h>
5 #include <uf_obj.h>
6 #include <uf_ui.h>
7
8
9 UF_initialize();
10
11 //创建圆柱
12 UF_FEATURE_SIGN Sign = UF_NULLSIGN;
13 double Origin[3] = {0.0, 0.0, 0.0};
14 char *Height = "100";
15 char *Diam = "50";
21 tag_t BodyTag = NULL_TAG;
22 UF_MODL_ask_feat_body(CylTag, &BodyTag);
23
24 //体找面
25 uf_list_p_t FaceList;
26 UF_MODL_ask_body_faces(BodyTag, &FaceList);
44 double Radiua[3];
46 int NormDir;
47 UF_MODL_ask_face_data(FaceTag, &Type, Point, Dir, Box, Radius, RadData, &NormDir);
48
49 //找圆柱侧面
16 double Direction[3] = {0.0, 0.0, 1.0};

NX二次开发(非常有用)

NX二次开发(非常有用)

盐城工学院优集学院目录实验一熟悉Visual Studio 2005开发环境及UG二次开发工程项目创建的方法 (2)实验二 UIStyler、Menuscript创建用户界面、菜单和工具条.. 16实验三外部数据库访问 (24)实验四零件设计 (40)实验五工程图设计 (48)实验六装配设计 (61)实验一熟悉Visual Studio 2005开发环境及UG二次开发工程项目创建的方法一、实验目的1、了解和使用Visual Studio2005集成开发环境;2、熟悉Visual Studio2005环境的基本命令和功能键;3、掌握UG二次开发工程项目创建过程和方法;4、理解简单的UG二次开发程序结构。

二、实验内容分别使用UG/Open AppWizard向导和Win32应用程序向导(DLL)的方法创建UG 二次开发工程项目,并利用Visual Studio 2005集成环境来编辑、编译并运行下面简单UG二次开发程序:#include <uf.h> /* 包含UF_initialize()和UF_terminate()函数原型的头文件*/#include <uf_ui.h> /* 包含uc1601()函数原型的头文件*/extern void ufusr( char *param, int *retcod, int param_len ){/* 获取UG/OPEN API的执行权限 */if(UF_initialize()!=0)return;/* 弹出消息窗口,显示“Hello,UG!” */uc1601("Hello,UG!",1);/* 释放UG/OPEN API的执行权限*/UF_terminate();}三、实验步骤1利用UG/Open AppWizard向导为便于了解UG/Open API的使用,下面将创建一个简单的应用开发程序,其功能是在UG环境中显示一个消息对话框“Hello,UG!”。

NX二次开发遍历工作部件所有体的显示属性(图层,颜色,隐藏状态,线宽,字体,高亮状态)

NX二次开发遍历工作部件所有体的显示属性(图层,颜色,隐藏状态,线宽,字体,高亮状态)

NX⼆次开发遍历⼯作部件所有体的显⽰属性(图层,颜⾊,隐藏状态,线宽,字体,⾼亮状态)VS2019 NX1946#include <NXOpen/Part.hxx>#include <NXOpen/PartCollection.hxx>#include <NXOpen/ListingWindow.hxx>#include <uf_layer.h>#include<uf_obj.h>UF_initialize();Part* workPart;//定义⼯作部件workPart = theSession->Parts()->Work();//获取⼯作部件char msg[256];std::vector<int> BodyTagVector;//对象TAG容器BodyTagVector.clear();//遍历⼯作部件所有体的显⽰属性BodyCollection* bodys = workPart->Bodies();for (BodyCollection::iterator ite = bodys->begin(); ite != bodys->end(); ite++){Body* bodys = (*ite);BodyTagVector.push_back(bodys->Tag());//获得对象信息UF_OBJ_disp_props_s dispprops;UF_OBJ_ask_display_properties(bodys->Tag(), &dispprops); //获取对象的显⽰属性(图层, 颜⾊, 隐藏状态, 线宽, 字体, ⾼亮状态)sprintf(msg, "体的TAG: %d", bodys->Tag());theSession->ListingWindow()->WriteLine(msg);sprintf(msg, "体的图层:%d", yer);theSession->ListingWindow()->WriteLine(msg);sprintf(msg, "体的颜⾊:%d", dispprops.color);theSession->ListingWindow()->WriteLine(msg);sprintf(msg, "体的隐藏状态:%d", dispprops.blank_status);theSession->ListingWindow()->WriteLine(msg);}UF_terminate();。

NX二次开发-NX连接MySQL数据库(增删改查)C++版

NX二次开发-NX连接MySQL数据库(增删改查)C++版

NX⼆次开发-NX连接MySQL数据库(增删改查)C++版版本:NX11+VS2013+MySQL5.6(x64)+SQLyog1.新建⼀个NX项⽬(多字节)2.设置VC++⽬录(调⽤MySQL的头⽂件,dll和lib库⽂件)3.设置番茄助⼿然后重启VS3.源代码(发布:程序运⾏时需要libmysql.dll,此DLL要随程序⼀同发布)1//DataBaseTest23// Mandatory UF Includes4 #include <uf.h>5 #include <uf_object_types.h>67// Internal Includes8 #include <NXOpen/ListingWindow.hxx>9 #include <NXOpen/NXMessageBox.hxx>10 #include <NXOpen/UI.hxx>1112// Internal+External Includes13 #include <NXOpen/Annotations.hxx>14 #include <NXOpen/Assemblies_Component.hxx>15 #include <NXOpen/Assemblies_ComponentAssembly.hxx>16 #include <NXOpen/Body.hxx>17 #include <NXOpen/BodyCollection.hxx>18 #include <NXOpen/Face.hxx>19 #include <NXOpen/Line.hxx>20 #include <NXOpen/NXException.hxx>21 #include <NXOpen/NXObject.hxx>22 #include <NXOpen/Part.hxx>23 #include <NXOpen/PartCollection.hxx>24 #include <NXOpen/Session.hxx>2526 #include <uf.h>27 #include <uf_ui.h>2829//头⽂件30 #include <stdio.h>31 #include <stdlib.h>32//MySQL support on Windows33 #include <WinSock2.h>34 #include <mysql.h>35#pragma comment(lib,"libmysql")36373839// Std C++ Includes40 #include <iostream>41 #include <sstream>4243using namespace NXOpen;44using std::string;45using std::exception;46using std::stringstream;47using std::endl;48using std::cout;49using std::cerr;505152//------------------------------------------------------------------------------53// NXOpen c++ test class54//------------------------------------------------------------------------------55class MyClass56{57// class members58public:59static Session *theSession;60static UI *theUI;6162 MyClass();63 ~MyClass();6465void do_it();66void print(const NXString &);67void print(const string &);68void print(const char*);6970private:71 Part *workPart, *displayPart;72 NXMessageBox *mb;73 ListingWindow *lw;74 LogFile *lf;75};7677//------------------------------------------------------------------------------ 78// Initialize static variables79//------------------------------------------------------------------------------80 Session *(MyClass::theSession) = NULL;81 UI *(MyClass::theUI) = NULL;8283//------------------------------------------------------------------------------ 84// Constructor85//------------------------------------------------------------------------------ 86MyClass::MyClass()87{8889// Initialize the NX Open C++ API environment90 MyClass::theSession = NXOpen::Session::GetSession();91 MyClass::theUI = UI::GetUI();92 mb = theUI->NXMessageBox();93 lw = theSession->ListingWindow();94 lf = theSession->LogFile();9596 workPart = theSession->Parts()->Work();97 displayPart = theSession->Parts()->Display();9899}100101//------------------------------------------------------------------------------102// Destructor103//------------------------------------------------------------------------------104 MyClass::~MyClass()105{106}107108//------------------------------------------------------------------------------109// Print string to listing window or stdout110//------------------------------------------------------------------------------111void MyClass::print(const NXString &msg)112{113if(! lw->IsOpen() ) lw->Open();114 lw->WriteLine(msg);115}116void MyClass::print(const string &msg)117{118if(! lw->IsOpen() ) lw->Open();119 lw->WriteLine(msg);120}121void MyClass::print(const char * msg)122{123if(! lw->IsOpen() ) lw->Open();124 lw->WriteLine(msg);125}126127128//------------------------------------------------------------------------------129// 定义结构体130//------------------------------------------------------------------------------131struct Student132{133int id;134char name[32];135char birthday[16];136char cellphone[12];137};138139140//------------------------------------------------------------------------------141// 接收界⾯输⼊参数,增加⼀条数据142//------------------------------------------------------------------------------143int do_insert(Student* stu)144{145 MYSQL conn;146 mysql_init(&conn);147148// 连接服务器149if (NULL == mysql_real_connect(&conn,150"127.0.0.1", "root", "123456", "example"151 , 0, NULL, 0))152 {153 printf("Failed to connect to database: %s\n",154 mysql_error(&conn));155return -1;156 }157158// 构造SQL语句159char sql[256];160 sprintf(sql,161" INSERT INTO `student` "162" (`id`, `name`, `birthday`, `cellphone`) "163" VALUES "164"('%d', '%s', '%s', '%s')"165 , stu->id166 , stu->name167 , stu->birthday168 , stu->cellphone169 );170171// 执⾏SQL语句172int ret = mysql_query(&conn, sql);173if (ret != 0)174 {175 printf("error: %s \n", mysql_error(&conn));176 }177else178 {179 my_ulonglong affected_rows = mysql_affected_rows(&conn); // a 64-bit large number 180 printf("%d rows affected. \n", (int)affected_rows); // cast to int181 }182183// 关闭连接184 mysql_close(&conn);185186return0;187}188189190//------------------------------------------------------------------------------191// 增加⼀条数据192//------------------------------------------------------------------------------193int my_insert(MYSQL* conn)194{195//SQL语句的末尾不要加分号196const char* sql =197" INSERT INTO `student` "198" (`id`, `name`, `birthday`, `cellphone`) "199" VALUES "200"('17', 'qian22', '1992-12-2', '186********')"201 ;202203int ret = mysql_query(conn, sql);//执⾏SQL语句204char msg[256];205if (ret != 0)206 {207 sprintf_s(msg, "error: %s\n", conn, sql);208 uc1601(msg, 1);209return -1;210 }211 my_ulonglong affected_rows = mysql_affected_rows(conn);//获得受影响的⾏数212 sprintf_s(msg, "%d rows affected\n", (int)affected_rows);213 uc1601(msg, 1);214215return0;216}217218219//------------------------------------------------------------------------------220// 查找数据221//------------------------------------------------------------------------------222int my_select(MYSQL* conn)223{224// SQL语句,末尾不加分号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、创建NXhello界面代码:#include <uf_ui.h>//包含UF_initialize()和UF_terminate()函数原型的头文件#include <uf.h>//包含uc1601()函数原型的头文件extern void ufusr(char *param, int *retcode, int param_len){if (UF_initialize()!=0)//获取NX openapi的执行权限{return;uc1601("Hello NX",1);//弹出消息窗口,显示“Hello NX”UF_terminate();//释放NX OPEN API的执行权限}}运行结果截图:2、创建一个模型,并在信息窗口显示模型的tag值。

代码:#include <stdio.h>#include <uf.h>#include <uf_modl.h>#include < uf_ui_ugopen.h>#include <uf_part.h>#include <uf_ui.h>static void do_ugopen_api(void){ typedef unsigned int tag_t;UF_FEATURE_SIGN sign = UF_NULLSIGN;//无布尔运算double cyl_orig[3] = {0,0,0};//圆柱的圆心坐标char *cyl_height="100";char *cyl_diam="40";double direction[3]={0,0,1};//延Z轴正方向tag_t obj=NULL_TAG;UF_MODL_create_cyl1(sign, cyl_orig,cyl_height,cyl_diam,direction, &obj);UF_UI_open_listing_window(); //显示信息框:tag/*Returns the tag of the current display part. In a non-assembly part, this is the same as the work part. If there currently isn't a displayed part, a NULL_TAG is returned. */obj=UF_PART_ask_display_part();if(obj == NULL_TAG) //没有部件的时候显示的信息提示框{uc1601 ( "当前没有任何文件可供操作!",1);}else{char s[10];sprintf(s, "%d",obj); //sprinf()功能:把格式化的数据写入某个字符串UF_UI_write_listing_window(s);return;}}extern void ufusr( char *param, int *retcode, int rlen )//提供入口点{if((UF_initialize())!=0)return;do_ugopen_api ();UF_terminate();return;}extern int ufusr_ask_unload(void){return(UF_UNLOAD_IMMEDIATELY);}运行结果截图:(1)无部件时的输出(2)有部件时的输出结果3、open part 用户入口实例创建open part user exit在用户点击“open”时创建新部件,在其中创建sphere 详细说明user exit设置文件过程代码如下:#include < uf_assem.h>#include <uf_part.h>#include <uf_ui_ugopen.h>#include <stdio.h>#include <uf.h>#include <uf_modl.h>#include <uf_ui.h>#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))static int report( char *file, int line, char *call, int irc){if (irc){char messg[133];printf("%s, line %d: %s\n", file, line, call);(UF_get_fail_message(irc, messg)) ?printf(" returned a %d\n", irc) :printf(" returned error %d: %s\n", irc, messg);}return(irc);}static void do_ugopen_api(void){UF_FEATURE_SIGN sign = UF_NULLSIGN;tag_t part=null_tag;//如果没有赋值的话,直接就是"tag_t part",当你执行.dll文件时,就直接跑到建模环境了,没有信息提示框。

当然你可以多申明几个tag_tchar part_name[13] = "F:\\long.prt";//设置part名字以及存储路径double center [ 3 ]={0,0,0};//球心坐标char * diam="100";int units =1;uc1601("创建直径为100的球",1);UF_PART_new (part_name, units, &part);//在当前的会话框中创建新的part,并把其作为工作部件//试比较下面两个函数UF_MODL_create_sphere(sign,part,center,diam, &part );//UF_MODL_create_sphere1(sign,center,diam, &part);}extern void ufusr(char *param, int *retcode, int paramLen){ if (!UF_CALL(UF_initialize())){do_ugopen_api();UF_CALL(UF_terminate());}}extern int ufusr_ask_unload(void){return (UF_UNLOAD_IMMEDIATELY);}运行结果截图:4、创建一个block,并指定某一特定面高亮显示。

代码如下图:#include <stdio.h>#include <uf.h>#include <uf_modl.h>#include<uf_part.h>#include<uf_ui.h>#include<uf_obj.h>#include<uf_disp.h>#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))static int report( char *file, int line, char *call, int irc){if (irc){char messg[133];printf("%s, line %d: %s\n", file, line, call);(UF_get_fail_message(irc, messg)) ?printf(" returned a %d\n", irc) :printf(" returned error %d: %s\n", irc, messg);}return(irc);}static void do_ugopen_api(void){UF_FEATURE_SIGN sign=UF_NULLSIGN;tag_t obj=null_tag;double center [3]={0,0,0} ;char *edge_len[3]={"10","10","10"};tag_t blk_feat;int units=2;//此行代码的赋值,经过调试,貌似只有1和2可以,它们的区别就是生成模型的默认大小不同,可以自己调调看。

char part_name[13]="F:\\long.part";//此段代码有点小重要,注意一定要保证完整性,不完整的话,估计会出现好多问题,绕好多路。

uc1601("创建一个正方体,并指定下表面高亮显示",1);UF_PART_new(part_name,units,&obj);//UF_MODL_create_block(sign,obj,center,edge_len,&blk_feat);UF_MODL_create_block1(sign,center,edge_len,&blk_feat);uf_list_p_t face_list;//链表UF_MODL_create_list(&face_list);//创建链表UF_MODL_ask_feat_faces(blk_feat,&face_list);//获取实体的个表面特征,并放入链表中int count=0;UF_MODL_ask_list_count(face_list,&count);for(int i=0;i<count;i++){UF_MODL_ask_list_item(face_list,i,&obj);//从链表中取出对象int type;double point [20] ;double dir [20] ;double box [6];double radius;double rad_data;int norm_dir;UF_MODL_ask_face_data(obj,&type,point,dir,box,&radius,&rad_data,&norm_dir);//这个函数非常重要,可以说是本段代码中最核心的部分。

相关文档
最新文档