NX二次开发习题及源码Word格式文档下载.docx
- 文档编号:19809972
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:70
- 大小:1.45MB
NX二次开发习题及源码Word格式文档下载.docx
《NX二次开发习题及源码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《NX二次开发习题及源码Word格式文档下载.docx(70页珍藏版)》请在冰豆网上搜索。
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("
当前没有任何文件可供操作!
"
}
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)
do_ugopen_api();
externintufusr_ask_unload(void)
return(UF_UNLOAD_IMMEDIATELY);
(1)无部件时的输出
(2)有部件时的输出结果
3、openpart用户入口实例
创建openpartuserexit
在用户点击“open”时创建新部件,在其中创建sphere
详细说明userexit设置文件过程
代码如下:
uf_assem.h>
uf_ui_ugopen.h>
#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))?
returneda%d\n"
irc):
returnederror%d:
irc,messg);
return(irc);
tag_tpart=null_tag;
//如果没有赋值的话,直接就是"
tag_tpart"
,当你执行.dll文件时,就直接跑到建模环境了,没有信息提示框。
当然你可以多申明几个tag_t
charpart_name[13]="
F:
\\long.prt"
//设置part名字以及存储路径
doublecenter[3]={0,0,0};
//球心坐标
char*diam="
intunits=1;
创建直径为100的球"
UF_PART_new(part_name,units,&
part);
//在当前的会话框中创建新的part,并把其作为工作部件
//试比较下面两个函数
UF_MODL_create_sphere(sign,part,center,diam,&
part);
//UF_MODL_create_sphere1(sign,center,diam,&
externvoidufusr(char*param,int*retcode,intparamLen)
{if(!
UF_CALL(UF_initialize()))
do_ugopen_api();
UF_CALL(UF_terminate());
return(UF_UNLOAD_IMMEDIATELY);
4、创建一个block,并指定某一特定面高亮显示。
代码如下图:
#include<
uf_obj.h>
uf_disp.h>
printf("
UF_FEATURE_SIGNsign=UF_NULLSIGN;
tag_tobj=null_tag;
doublecenter[3]={0,0,0};
char*edge_len[3]={"
10"
"
};
tag_tblk_feat;
intunits=2;
//此行代码的赋值,经过调试,貌似只有1和2可以,它们的区别就是生成模型的默认大小不同,可以自己调调看。
charpart_name[13]="
\\long.part"
//此段代码有点小重要,注意一定要保证完整性,不完整的话,估计会出现好多问题,绕好多路。
创建一个正方体,并指定下表面高亮显示"
UF_PART_new(part_name,units,&
//UF_MODL_create_block(sign,obj,center,edge_len,&
blk_feat);
UF_MODL_create_block1(sign,center,edge_len,&
uf_list_p_tface_list;
//链表
UF_MODL_create_list(&
face_list);
//创建链表
UF_MODL_ask_feat_faces(blk_feat,&
//获取实体的个表面特征,并放入链表中
intcount=0;
UF_MODL_ask_list_count(face_list,&
count);
for(inti=0;
i<
count;
i++)
UF_MODL_ask_list_item(face_list,i,&
//从链表中取出对象
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*/
if(!
注:
和高亮显示还有一个类似的设置,就是给实体上色,所用到的函数是:
UF_OBJ_set_color(obj,186);
上面的这个函数是把对象显示成红色,如下图:
“186”是红色的代号。
这些数字可以在UG交互模式下的对象显示里查到,如下图:
5、用遍历的形式输出当前part所有面的tag至listingwindow
returnederror%d:
doublecenter[3]={0,0,0};
char*edge_len[3]={"
tag_tblk_feat=null_tag;
char*part_name="
\\long"
intunits=1;
tag_tpart=NULL_TAG;
创建一个block,并显示每个面的tag"
//在当前会话窗口中创建一个part,并使其成为工作部件
UF_CALL(UF_MODL_create_block1(sign,center,edge_len,&
blk_feat));
if(blk_feat==NULL_TAG)
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,&
while(obj!
=null_tag)
UF_OBJ_ask_type_and_subtype(obj,&
type,&
subtype);
//返回一个被标记的对象的对象类型和子类型
UF_OBJ_cycle_objs_in_part(display_part,UF_solid_type,&
//查询遍历对象
if(subtype==UF_solid_face_subtype)
{
chars[50];
sprintf(s,"
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)
intufusr_ask_unload(void)
运行结果截屏:
6、遍历当前part中所有features,输出其类型至listingwindow,UF_MODL_ask_feat_type()
\\NX"
创建直径为100的球,并显示其实体特征。
UF_MODL_create_sphere1(sign,center,diam,&
intcount=0;
char*solid_feature;
tag_tfound=NULL_TAG;
tag_tdisplay_part=UF_PART_ask_display_part();
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_OBJ_cycle_objs_in_part(display_part,UF_feature_type,&
found));
6、创建人机交互界面新建圆柱体,并可以随意选择原点和矢量方向。
uf_defs.h>
uf_exit.h>
uf_styler.h>
uf_mb.h>
#include"
cylinder.h"
#defineCHANGE_CB_COUNT(3+1)/*Add1fortheterminator*/
tag_tblk_tag=null_tag;
doubleblk_orig[]={0,0,0};
doubledirection[3];
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)
创建一个圆柱,并指明原点和矢量"
blk_tag);
intresponse=0;
interror_code=0;
if((UF_initialize())!
=0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NX 二次开发 习题 源码