1.打开信息窗口并写入
UC1601是将想显示的内容显示在一个UI消息框中,或者是状态栏,如果内容很多的时候,就不适合使用UC1601
使用信息窗口,相关命令:信息->.......
要实现这个功能具有的逻辑,先是要打开信息窗口,在写内容,如果只打开,不写,打开就是一个空的
先添加头文件
#include<uf_ui_ugopen.h>
在do_it()函数里添加
UF_initialize();
UF_UI_open_listing_window();
UF_UI_write_listing_window("UG二次开发");
UF_terminate();
生成解决方案,打开NX,Ctrl+U,选择生成的.dll文件打开
运行结果:
2.tag_t数据类型的用法
在NX中,tag_t是 NX对象法人句柄,即任何确定存在的NX对象的唯一标识。它是一种不重复的无符号整型数值,主要用于标识应用程序中的对象,如部件、特征、草图、曲线、属性、表达式等。NX应用程序只能访问句柄,而不能直接访问句柄所指示的实际对象。应用程序一般通过调用API函数获取句柄,并且在其它API函数中使用这个句柄,以引用它指示的对象。在此过程中,句柄的实际值对程序来说是无关紧要的。NULL_AG是用来表示暂时不标识任何对象的TAG,相当于初值为0,此外tag_g_t是指tag_t数据类型的指针。
在安装NX的目录下,打开UGII下的ugii_env_ug.data文件里的最后加上UGII_DISPLAY_DEBUG=1
打开NX在菜单—帮助—调试,多了一个调试
创建项目,添加头文件,在do_it()函数里添加代码
#include<uf_part.h>
UF_initialize();
tag_t partTAG=NULL_TAG;
UF_PART_new("c:\\abcd.prt", 1,&partTAG );//新建一个文件
char msg[256];
sprintf(msg, "当前创建prt的tag:%d", partTAG);
uc1601(msg, 1);
UF_terminate();
生成解决方案,打开NX,Ctrl+U,选择生成的.dll文件打开
在调试—调试工具—移刀可以看到tag,与代码输出的相同
3.创建一个立方体(数组的用法)
在NXOPEN C里面创建立方体有两个函数
UF_MODL Function UF_MODL_create_block UF_MODL Function UF_MODL_create_block1
一般情况下,最好使用1结尾的,它比之前一个要新,更新的功能会多一些
创建项目,添加头文件
#include<uf_modl_primitives.h>
UF_initialize();
UF_FEATURE_SIGN sign = UF_NULLSIGN;
double corner[3] = {0.0,0.0,0.0};
char *edge[3] = { "100","100","100" };//长宽高
tag_t fTAG = NULL_TAG;
UF_MODL_create_block1(sign,corner,edge,&fTAG);
UF_terminate();
生成解决方案,打开NX,Ctrl+U,选择生成的.dll文件
运行结果:
4.底座零件的开发
底座零件是由一个长方体和两个圆柱组成
创建项目,添加头文件
#include<uf_modl_primitives.h>
UF_initialize();
//创建第一个块
UF_FEATURE_SIGN a1 = UF_NULLSIGN;
double point1[3] = { 0.0,0.0,0.0 };//坐标
char *LWD1[3] = { "60","70","20" };//长宽高
tag_t block1TAG = NULL_TAG;
UF_MODL_create_block1(a1, point1, LWD1, &block1TAG);
//创建第二个块并求和
UF_FEATURE_SIGN a2 = UF_POSITIVE;//求和
double point2[3] = { 0.0,20.0,0.0 };//坐标
char *LWD2[3] = { "60","30","70" };
tag_t block2TAG = NULL_TAG;
UF_MODL_create_block1(a2, point2, LWD2, &block2TAG);
//创建圆柱1
UF_FEATURE_SIGN cy1 = UF_POSITIVE;
double origin1[3] = { 30.0,20.0,70.0 };
char *H1 = "30";//高度
char *D1 = "60";//直径
double v1[3] = { 0.0,1.0,0.0 };//方向
tag_t cy1TAG = NULL_TAG;
UF_MODL_create_cyl1(cy1, origin1, H1, D1, v1, &cy1TAG);
//创建圆柱2
UF_FEATURE_SIGN cy2 = UF_NEGATIVE;//求差
double origin2[3] = { 30.0,20.0,70.0 };
char *H2 = "30";
char *D2 = "30";
double v2[3] = { 0.0,1.0,0.0 };
tag_t cy2TAG = NULL_TAG;
UF_MODL_create_cyl1(cy2, origin2, H2, D2, v2, &cy1TAG);
UF_terminate();
运行结果:
5.点与直线的创建方式
创建项目,添加头文件
#include<uf_curve.h>
UF_initialize();
//第一个点
double point1[3] = { 10.0,20.0,30.0 };//点坐标
tag_t point1TAG = NULL_TAG;
UF_CURVE_create_point(point1, &point1TAG);
//第二个点
double point2[3] = { 100.0,50.0,80.0 };//点坐标
tag_t point2TAG = NULL_TAG;
UF_CURVE_create_point(point2, &point2TAG);
//创建一条直线
UF_CURVE_line_t line1;
line1.start_point[0] = 20;
line1.start_point[1] = 30;
line1.start_point[2] = 50;
line1.end_point[0] = 100;
line1.end_point[1] = 200;
line1.end_point[2] = 300;
tag_t line3TAG = NULL_TAG;
UF_CURVE_create_line(&line1, &line3TAG);
UF_terminate();
运行结果:
6.分配内存与重新分配内存
指针格式:
_t*或者_p_t
看到这两种格式,一般不用定义成这样,在定义的时候,是直接把*或者p给去掉,然后在后面引用的时候用取址&符号就可以
但是,有些情况下,可能是避免不了使用指针,比如双指针,或者更多指针时
_t** _p_t*
这种情况一般都要分配内存
_t* name=NULL;
name=(_t*)UF_allocate_memory(N*sizeof(_t),&error);//分配内存
name=(_t*)UF_reallocate_memory(name,(N+1)*sizeof(_t),&error);//重新分配
UF_free(name);//释放内存
UF_CURVE_line_t *point1=NULL;
int erro=0;
//分配内存
point1=(UF_CURVE_line_t *)UF_allocate_memory(200*sizeof(UF_CURVE_line_t),&erro);
//重新分配内存
point1=(UF_CURVE_line_t *)UF_reallocate_memory(point1,300*sizeof(UF_CURVE_line_t),&erro);
//释放内存
UF_free(point1);
7.输出工作图层
头文件:
#include<uf_layer.h>
UF_initialize();
int N;
UF_LAYER_ask_work_layer(&N);
char msg[256];
sprintf(msg, "当前的工作图层:%d", N);
uc1601(msg, 1);
UF_terminate();
运行结果: