NX二次开发习题及源码.docx

上传人:b****5 文档编号:6789509 上传时间:2023-01-10 格式:DOCX 页数:70 大小:1.45MB
下载 相关 举报
NX二次开发习题及源码.docx_第1页
第1页 / 共70页
NX二次开发习题及源码.docx_第2页
第2页 / 共70页
NX二次开发习题及源码.docx_第3页
第3页 / 共70页
NX二次开发习题及源码.docx_第4页
第4页 / 共70页
NX二次开发习题及源码.docx_第5页
第5页 / 共70页
点击查看更多>>
下载资源
资源描述

NX二次开发习题及源码.docx

《NX二次开发习题及源码.docx》由会员分享,可在线阅读,更多相关《NX二次开发习题及源码.docx(70页珍藏版)》请在冰豆网上搜索。

NX二次开发习题及源码.docx

NX二次开发习题及源码

1、创建NXhello界面

代码:

#include//包含UF_initialize()和UF_terminate()函数原型的头文件

#include//包含uc1601()函数原型的头文件

externvoidufusr(char*param,int*retcode,intparam_len)

{

if(UF_initialize()!

=0)//获取NXopenapi的执行权限

{

return;

uc1601("HelloNX",1);//弹出消息窗口,显示“HelloNX”

UF_terminate();//释放NXOPENAPI的执行权限

}

}

运行结果截图:

2、创建一个模型,并在信息窗口显示模型的tag值。

代码:

#include

#include

#include

#include

#include

#include

staticvoiddo_ugopen_api(void)

{typedefunsignedinttag_t;

UF_FEATURE_SIGNsign=UF_NULLSIGN;//无布尔运算

doublecyl_orig[3]={0,0,0};//圆柱的圆心坐标

char*cyl_height="100";

char*cyl_diam="40";

doubledirection[3]={0,0,1};//延Z轴正方向

tag_tobj=NULL_TAG;

UF_MODL_create_cyl1(sign,cyl_orig,cyl_height,cyl_diam,direction,&obj);

UF_UI_open_listing_window();//显示信息框:

tag

/*Returnsthetagofthecurrentdisplaypart.Inanon-assemblypart,thisisthe

sameastheworkpart.Iftherecurrentlyisn'tadisplayedpart,aNULL_TAGisreturned.*/

obj=UF_PART_ask_display_part();

if(obj==NULL_TAG)//没有部件的时候显示的信息提示框

{

uc1601("当前没有任何文件可供操作!

",1);

}

else

{

chars[10];

sprintf(s,"%d",obj);//sprinf()功能:

把格式化的数据写入某个字符串

UF_UI_write_listing_window(s);

return;

}

}

externvoidufusr(char*param,int*retcode,intrlen)//提供入口点

{

if((UF_initialize())!

=0)

return;

do_ugopen_api();

UF_terminate();

return;

}

externintufusr_ask_unload(void)

{

return(UF_UNLOAD_IMMEDIATELY);

}

运行结果截图:

(1)无部件时的输出

(2)有部件时的输出结果

3、openpart用户入口实例

创建openpartuserexit

在用户点击“open”时创建新部件,在其中创建sphere

详细说明userexit设置文件过程

代码如下:

#include

#include

#include

#include

#include

#include

#include

#defineUF_CALL(X)(report(__FILE__,__LINE__,#X,(X)))

staticintreport(char*file,intline,char*call,intirc)

{

if(irc)

{

charmessg[133];

printf("%s,line%d:

%s\n",file,line,call);

(UF_get_fail_message(irc,messg))?

printf("returneda%d\n",irc):

printf("returnederror%d:

%s\n",irc,messg);

}

return(irc);

}

staticvoiddo_ugopen_api(void)

{

UF_FEATURE_SIGNsign=UF_NULLSIGN;

tag_tpart=null_tag;//如果没有赋值的话,直接就是"tag_tpart",当你执行.dll文件时,就直接跑到建模环境了,没有信息提示框。

当然你可以多申明几个tag_t

charpart_name[13]="F:

\\long.prt";//设置part名字以及存储路径

doublecenter[3]={0,0,0};//球心坐标

char*diam="100";

intunits=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);

}

externvoidufusr(char*param,int*retcode,intparamLen)

{if(!

UF_CALL(UF_initialize()))

{

do_ugopen_api();

UF_CALL(UF_terminate());

}

}

externintufusr_ask_unload(void)

{

return(UF_UNLOAD_IMMEDIATELY);

}

运行结果截图:

4、创建一个block,并指定某一特定面高亮显示。

代码如下图:

#include

#include

#include

#include

#include

#include

#include

#defineUF_CALL(X)(report(__FILE__,__LINE__,#X,(X)))

staticintreport(char*file,intline,char*call,intirc)

{

if(irc)

{

charmessg[133];

printf("%s,line%d:

%s\n",file,line,call);

(UF_get_fail_message(irc,messg))?

printf("returneda%d\n",irc):

printf("returnederror%d:

%s\n",irc,messg);

}

return(irc);

}

staticvoiddo_ugopen_api(void)

{

UF_FEATURE_SIGNsign=UF_NULLSIGN;

tag_tobj=null_tag;

doublecenter[3]={0,0,0};

char*edge_len[3]={"10","10","10"};

tag_tblk_feat;

intunits=2;//此行代码的赋值,经过调试,貌似只有1和2可以,它们的区别就是生成模型的默认大小不同,可以自己调调看。

charpart_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_tface_list;//链表

UF_MODL_create_list(&face_list);//创建链表

UF_MODL_ask_feat_faces(blk_feat,&face_list);//获取实体的个表面特征,并放入链表中

intcount=0;

UF_MODL_ask_list_count(face_list,&count);

for(inti=0;i

{

UF_MODL_ask_list_item(face_list,i,&obj);//从链表中取出对象

inttype;

doublepoint[20];

doubledir[20];

doublebox[6];

doubleradius;

doublerad_data;

intnorm_dir;

UF_MODL_ask_face_data(obj,&type,point,dir,box,&radius,&rad_data,&norm_dir);//这个函数非常重要,可以说是本段代码中最核心的部分。

if(dir[0]==0&&dir[1]==0&&dir[2]==-1)//确定高亮显示的那个面的法向量

{

UF_DISP_set_highlight(obj,1);

//UF_OBJ_set_color(obj,186);

break;

}

}

}

/*ARGSUSED*/

externvoidufusr(char*param,int*retcode,intparamLen)

{

if(!

UF_CALL(UF_initialize()))

{

do_ugopen_api();

UF_CALL(UF_terminate());

}

}

externintufusr_ask_unload(void)

{

return(UF_UNLOAD_IMMEDIATELY);

}

运行结果截图:

注:

和高亮显示还有一个类似的设置,就是给实体上色,所用到的函数是:

UF_OBJ_set_color(obj,186);

上面的这个函数是把对象显示成红色,如下图:

“186”是红色的代号。

这些数字可以在UG交互模式下的对象显示里查到,如下图:

5、用遍历的形式输出当前part所有面的tag至listingwindow

代码如下:

#include

#include

#include

#include

#include

#include

#include

#include

#defineUF_CALL(X)(report(__FILE__,__LINE__,#X,(X)))

staticintreport(char*file,intline,char*call,intirc)

{

if(irc)

{

charmessg[133];

printf("%s,line%d:

%s\n",file,line,call);

(UF_get_fail_message(irc,messg))?

printf("returneda%d\n",irc):

printf("returnederror%d:

%s\n",irc,messg);

}

return(irc);

}

staticvoiddo_ugopen_api(void)

{

UF_FEATURE_SIGNsign=UF_NULLSIGN;

doublecenter[3]={0,0,0};

char*edge_len[3]={"100","100","100"};

tag_tblk_feat=null_tag;

char*part_name="F:

\\long";

intunits=1;

tag_tpart=NULL_TAG;

uc1601("创建一个block,并显示每个面的tag",1);

UF_PART_new(part_name,units,&part);//在当前会话窗口中创建一个part,并使其成为工作部件

UF_CALL(UF_MODL_create_block1(sign,center,edge_len,&blk_feat));

if(blk_feat==NULL_TAG)

{

uc1601("当前没有任何文件可供操作!

",1);

}

else

{

inttype=70;

intsubtype=2;

tag_tobj=null_tag;

tag_tdisplay_part=UF_PART_ask_display_part();

UF_OBJ_cycle_objs_in_part(display_part,70,&obj);

while(obj!

=null_tag)

{

UF_OBJ_ask_type_and_subtype(obj,&type,&subtype);//返回一个被标记的对象的对象类型和子类型

UF_OBJ_cycle_objs_in_part(display_part,UF_solid_type,&obj);//查询遍历对象

if(subtype==UF_solid_face_subtype)

{

chars[50];

sprintf(s,"%d",obj);

UF_CALL(UF_UI_open_listing_window());

UF_CALL(UF_UI_write_listing_window(s));

UF_CALL(UF_UI_write_listing_window("\n"));

}

}

}

}

voidufusr(char*param,int*retcode,intparamLen)

{

if(!

UF_CALL(UF_initialize()))

{

do_ugopen_api();

UF_CALL(UF_terminate());

}

}

intufusr_ask_unload(void)

{

return(UF_UNLOAD_IMMEDIATELY);

}

运行结果截屏:

6、遍历当前part中所有features,输出其类型至listingwindow,UF_MODL_ask_feat_type()

代码如下:

#include

#include

#include

#include

#include

#include

#defineUF_CALL(X)(report(__FILE__,__LINE__,#X,(X)))

staticintreport(char*file,intline,char*call,intirc)

{

if(irc)

{

charmessg[133];

printf("%s,line%d:

%s\n",file,line,call);

(UF_get_fail_message(irc,messg))?

printf("returneda%d\n",irc):

printf("returnederror%d:

%s\n",irc,messg);

}

return(irc);

}

staticvoiddo_ugopen_api(void)

{

char*part_name="F:

\\NX";

UF_FEATURE_SIGNsign=UF_NULLSIGN;

tag_tpart=null_tag;

doublecenter[3]={0,0,0};

char*diam="100";

intunits=1;

uc1601("创建直径为100的球,并显示其实体特征。

",1);

UF_PART_new(part_name,units,&part);//在当前的会话框中创建新的part,并把其作为工作部件

UF_MODL_create_sphere1(sign,center,diam,&part);

intcount=0;

char*solid_feature;

tag_tfound=NULL_TAG;

tag_tdisplay_part=UF_PART_ask_display_part();

UF_UI_open_listing_window();

UF_OBJ_cycle_objs_in_part(display_part,UF_feature_type,&found);

while(found!

=NULL_TAG)

{

count++;

UF_CALL(UF_MODL_ask_feat_type(found,&solid_feature));//获取输入的特征的类型

UF_CALL(UF_UI_write_listing_window("feature:

"));

UF_CALL(UF_UI_write_listing_window(solid_feature));

UF_CALL(UF_UI_write_listing_window("\n"));

UF_CALL(UF_OBJ_cycle_objs_in_part(display_part,UF_feature_type,&found));

}

}

externvoidufusr(char*param,int*retcode,intparamLen)

{

if(!

UF_CALL(UF_initialize()))

{

do_ugopen_api();

UF_CALL(UF_terminate());

}

}

externintufusr_ask_unload(void)

{

return(UF_UNLOAD_IMMEDIATELY);

}

运行结果截屏:

6、创建人机交互界面新建圆柱体,并可以随意选择原点和矢量方向。

代码如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include"cylinder.h"

#defineCHANGE_CB_COUNT(3+1)/*Add1fortheterminator*/

tag_tblk_tag=null_tag;

doubleblk_orig[]={0,0,0};

doubledirection[3];

char*part_name="F:

\\long";

intunits=1;

staticUF_STYLER_callback_info_tCHANGE_cbs[CHANGE_CB_COUNT]=

{

{UF_STYLER_DIALOG_INDEX,UF_STYLER_APPLY_CB,0,CHANGE_apply_cb},

{CHANGE_ACTION_2,UF_STYLER_ACTIVATE_CB,1,CHANGE_action_2_act_cb},

{CHANGE_ACTION_3,UF_STYLER_ACTIVATE_CB,1,CHANGE_action_3_act_cb},

{UF_STYLER_NULL_OBJECT,UF_STYLER_NO_CB,0,0}

};

 

staticUF_MB_styler_actions_tactions[]={

{"cylinder.dlg",NULL,CHANGE_cbs,UF_MB_STYLER_IS_NOT_TOP},

{NULL,NULL,NULL,0}/*ThisisaNULLterminatedlist*/

};

staticintinit_proc(UF_UI_selection_p_tselect,void*user_data);

externvoidufusr(char*param,int*retcode,intrlen)

{

uc1601("创建一个圆柱,并指明原点和矢量",1);

UF_PART_new(part_name,units,&blk_tag);

intresponse=0;

interror_code=0;

if((UF_initialize())!

=0)

return;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1