UG二次开发.docx
- 文档编号:5002175
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:34
- 大小:68.24KB
UG二次开发.docx
《UG二次开发.docx》由会员分享,可在线阅读,更多相关《UG二次开发.docx(34页珍藏版)》请在冰豆网上搜索。
UG二次开发
UG二次开发模板
(24)1
第一章技巧规则
第二章函数模板
第三章功能模板
第四章udop
注:
连接:
Ctrl+单击鼠标左键
第一章技巧规则
1,内存原则:
【规则1】用malloc或new申请内存之后,应该立即检查指针值是否为NULL
防止使用指针值为NULL的内存
【规则2】不要忘记为数组和动态内存赋初值。
防止将未被初始化的内存作为右
值使用。
【规则3】避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”
操作。
【规则4】动态内存的申请与释放必须配对,防止内存泄漏。
【规则5】用free或delete释放了内存之后,立即将指针设置为NULL防止产
生“野指针”。
2,
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。
数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。
指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。
指针远比数组灵活,但也更危险。
注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘
汰出局呢?
这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。
2,分配空间
double(*point)[3];
point=newdouble[count][3];
delete[]point;//正确的用法
3,
UF_MODL_update();〃使用UF_MODL_edit时用来刷新
4UF_UI_ONT_refresh();//刷新导航器
头文件#include
UF_DISP_refresh();//去除临时文件
#include
5调试工具
1)uc1601//显示消息对话框
头文件:
#include
用法1:
charinf[100];
sprintf(inf,"%f",);
uc1601(inf,1);
用法2:
uc1601("",1);
2)UF_UI_write_listing_window//显示文本框
头文件:
#include
charinf[100];
UF_UI_open_listing_window();
sprintf(inf,"%",);
UF_UI_write_listing_window(inf);
6,隐藏中间过程
#include
UF_DISP_set_display(UF_DISP_SUPPRESS_DISPLAY)/;/打开隐藏
UF_DISP_set_display(UF_DISP_UNSUPPRESS_DISPLAY)/;/关闭隐藏
第二章函数模板
1,uc1600//获取字符串
头文件:
#include
intres=0;
intlen=0;
//string:
Input/Output
charstring[100]="";
res=uc1600("",string,&len);
if(res==5||(res==3&&len>0))
{
}
else
{
}
2,uc1603//
头文件:
#include
用法1:
chartitle[100]="菜单";
charitems[3][38]={"选项1","选项2","选项3"};
choice=uc1603(title,0,items,3);
if(choice==1||choice==2)
{
UF_terminate();
else
{
if(choice==)
{
}
}
用法2:
"选项3"};
charitems[3][38]={"选项1","选项2"
response=uc1603("菜单",0,items,3);
switch(response)
{
case1:
case2:
break;
case4:
case5:
3,选择对话框头文件
头文件1:
init_proc_face
staticintinit_proc_face(UF_UI_selection_p_tselect,void*user_data)
{
intnums=1;
UF_UI_mask_tmasks[]={
UF_solid_type,0,UF_UI_SEL_FEATURE_ANY_FACE};
if((UF_UI_set_sel_mask(select,
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
nums,masks))==0)
{
return(UF_UI_SEL_SUCCESS);
}
else
return(UF_UI_SEL_FAILURE)
}
头文件2:
init_proc_body
staticintinit_proc_body(UF_UI_selection_p_tselect,void*user_data)
{
intnum_triples=1;
0,
UF_UI_mask_tmask_triples[]={UF_solid_type,
UF_UI_SEL_FEATURE_BODY};
/*enableonlylinesandedges*/if((UF_CALL(UF_UI_set_sel_mask(select,
UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
num_triples,mask_triples)))==0)
{
return(UF_UI_SEL_SUCCESS);
else
{
return(UF_UI_SEL_FAILURE);
}
}
4,UF_UI_select_with_single_dialog
头文件:
#include
chartitle[]="";
charcue[]="";
intresponse=0;
doublecursor[3];
tag_tface=NULL;
tag_tview=NULL;
title,
if(!
UF_CALL(UF_UI_select_with_single_dialog(cue,
UF_UI_SEL_SCOPE_NO_CHANGEin,it_proc_face,NULL,
&response,&face,cursor,&view)))
if(response==UF_UI_OBJECT_SELECTED||
response==UF_UI_OBJECT_SELECTED_BY_NAME)
{
printf("objecttag=%d\n",face);
}
UF_DISP_set_highlight(face,0);//关高亮
}
5,UF_UI_select_with_class_dialog
头文件:
#include
voidclass_sel_dlg(int*count,tag_p_t*objects)
{
charcue[]="";
chartitle[]="";
intresponse,sel_count,i;
if((UF_CALL(UF_UI_select_with_class_dialog(
cue,title,UF_UI_SEL_SCOPE_NO_CHANGE,
init_proc_face,NULL,&response,&sel_count,&sel_objects)))==
0)
{
printf("objectcount=%d\n",sel_count);
if(response==UF_UI_OK&&sel_count>0)
{
*objects=sel_objects;
*count=sel_count;
for(i=0;i { printf("objecttag=%d\n",sel_objects[i]); UF_DISP_set_highlight(sel_objects[i],0); } UF_free(objects); } } 6,UF_MODL_delete_object_parms//消参 头文件: #inelude #include uf_list_p_tobj」ist; UF_CALL(UF_MODL_create」ist(&obj_list)); UF_CALL(UF_MODL_put_list_item(obj_list,)); UF_CALL(UF_MODL_put_list_item(obj」st,)); UF_MODL_delete_object_parms(obj」ist); UF_MODL_delete_list(&obj_list); UF_OBJ_delete_object(); 7,UF_CURVE_create_arc/通过圆心,半径画圆 头文件: #include tag_tarc,wcs_tag UF_CSYS_ask_wcs(&wcs_tag); UF_CURVE_arc_tarc_coords; UF_CSYS_ask_matrix_of_object(wcs_tag,&wcs_tag); arc_coords.matrix_tag=wcs_tag; arc_coords.start_angle=0.0; arc_coords.end_angle=360.0*DEGRA; arc_coords.arc_center[0]=center[0];// arc_coords.arc_center[1]=center[1];// arc_coords.arc_center[2]=center[2];// arc_coords.radius=500; UF_CURVE_create_arc(&arc_coords,&arc_id)8,UF_OBJ_set_name(tag,name);//设置名字 9,name幵关 intname_status; UF_DISP_ask_name_display_status(&name_status);if(name_status==UF_DISP_NAME_DISPLAY_OFF){ name_status=UF_DISP_NAME_DISPLAY_ON; } else name_status=UF_DISP_NAME_DISPLAY_OFF; UF_DISP_set_name_display_status(name_status); 10,UF_OBJ_set_color(tag,color);//设置颜色头文件#include 11,UF_OBJ_set_layer(tag,layer);//设置层 12,UF_CALL 头文件#include intUF_CALL(interrorCode) { if(errorCode) { charmessage[133]=""; UF_get_fail_message(errorCode,message); uc1601(message,1); } return(errorCode); } 13,UF_PART_ask_display_part 头文件#include tag_tpart=UF_PART_ask_display_part(); if(NULL==part) uc1601("",1); return; } 14,UF_OPER_create 头文件#inelude tag_tOper_id=NULL; UF_OPER_create("mill_contour","ZLEVEL_PROFILE_YBC",&GZM_Oper_id); 15,UF_MODL_ask_face_data/查询面的信息头文件#include tag_tface;//面的ID inttype;//面的类型 doublebox[6];//x,y,z向最大,最小值 doubleradius; doublerad_data; intnorm_dir;//法向 UF_MODL_ask_face_data(face,&type,center, dir,box,&radius,&rad_data,&norm_dir); 16,UF_MODL_ask_minimum_dist_2//查询两物体间距离 doubledis,accuracy;//accuracy: 准确度 doublepoint1[3]={0}; doublepoint2[3]={0}; UF_CALL(UF_MODL_ask_minimum_dist_2(obj1,obj2,0,NULL,0,NULL, &dis,point1,point1,&accuracy)); 第三章功能模板 1,制作对话框 1)进入UserInterfaceStyler,设计好对话框,将LaunchDialogFrom改为Callback 保存 2)将生成的对话框文件放在模板文件夹下,以记事本格式打开XX._template.C文 件,将externint externintXXX(int*response)后保存。 3)打幵VC的Templet,依次点击Tools->options-'directories,将XX.h所在的文件 夹包含进去。 4)在Templet.cpp中加入#include"XX_template.c" #include"XX.h" 5)在程序内写入intresponse; XXX(&response);点击F7,编译成功。 2,对话框求值,设值 UF_STYLER_item_value_type_tvalue; value.item_attr=UF_STYLER_VALUE; value.item」d=XXX;//在.h文件中定义的ID UF_STYLER_ask_value(dialog_id,&value);//读值 /*赋值到变量中,变量在.h文件中定义,根据对话框定义不同类型: real,string, strings,integer,integers,real,reals*/ XXX=value.value.real;//赋值 value.item」d=XXX;//在.h文件中定义的ID value.count=1;//拉伸条移动 UF_STYLER_set_value(dialog_id,&value);//设值 3, 1),设置控件的激活状态 UF_STYLER_item_value_type_tvalue; value.item_attr二UF_STYLER_SENSITIVITY;//指定设置控件的激活状态 value.item」d=XXX;//在.h文件中定义的ID—■ 逗回S录-value.value.integer二FALSE;//FALSE为不激活,TRUE为激活 UF_STYLER_set_value(dialog」d,&value); 2),设置对话框是否能选择物体 UF_UI_mask_tall_mask[]={ UF_circle_type,0,0, UF_cylinder_type,0,0, UF_line_type,0,0 }; UF_STYLER_item_value_type_tvalue; value.item_attr=UF_STYLER_SELECTION; UF_STYLER_ask_value(dialog_id0,&value); UF_UI_set_sel_type(value.value.selection, UF_UI_SEL_TYPE_INACTIVE_SELECTION/);不能选择 //UF_UI_SEL_TYPE_SINGLE_SELECTION //UF_UI_SEL_TYPE_SINGLE_DESELECTION //UF_UI_SEL_TYPE_ROBUST_SELECTlON选择 //UF_UI_SEL_TYPE_SINGLE_POSITION //UF_UI_SEL_TYPE_RECTANGLE_POSITION if((UF_UI_set_sel_mask(value.value.selection, UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,2,all_mask))) { return(UF_UI_CB_CONTINUE_DIALOG); } 2,查询选择物体 UF_STYLER_item_value_type_tvalue; value.item_attr=UF_STYLER_SELECTION; value.item」d=UF_STYLER_DIALOG」NDEX; UF_STYLER_ask_value(dialog_idO,&value); UF_UI_ask_sel_object_list(value.value.selection,&count,&objects); 4,求三面交点 头文件 返回目录- voidchange(doubleAB[3][4],intline); voidrow_change(doubleAB[3][4],introw); doublexyz[3];/〃交点坐标 doubleAB[3][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0}}; doubledot_product; UF_VEC3_dot(dir,center,&dot_product); AB[0][0]=dir[0];AB[0][1]=dir[1]; AB[0][2]=dir[2];AB[0][3]=dot_product; doubledot_product1; UF_VEC3_dot(dir1,center1,&dot_product1); AB[1][0]=dir1[0];AB[1][1]=dir1[1]; AB[1][2]=dir1[2];AB[1][3]=dot_product1; doubledot_product2; UF_VEC3_dot(dir2,floor_center,&dot_product2); AB[2][0]=dir2[0];AB[2][1]=dir2[1]; AB[2][2]=dir2[2];AB[2][3]=dot_product2; for(intj=0;j<3;j++) { change(AB,j); row_change(AB,j); } xyz[2]=AB[2][3]; xyz[1]=AB[1][3]-AB[1][2]*xyz[2]; xyz[0]=AB[0][3]-AB[0][2]*xyz[2]-AB[0][1]*xyz[1]; 子函数 voidchange(doubleAB[3][4],intline) doublemax=0; doublebuffer=0; intbj=-1; doublemax_x=0; for(inti=line;i<3;i++) { max_x=fabs(AB[i][line]); if(max_x>max) { max=max_x; bj=i; } } for(intj=0;j<4;j++) buffer=AB[bj][j]; AB[bj][j]=AB[line][j]; AB[line][j]=buffer; } } //初等行变换 voidrow_change(doubleAB[3][4],introw) { for(intj=row;j<3;j++) { doubledivisor=AB[j][row]; if(0! =divisor) { for(inti=row;i<4;i++) { AB[j][i]=AB[j][i]/divisor; for(intk=(row+1);k<3;k++) { if(0! =AB[k][row]) { for(intl=0;l<4;l++) { AB[k][l]=AB[k][l]-AB[row][l]; } } } } 5,筛选边界 UF_MODL_ask_face_loops(face,&loops_list);//查询回环 intloops_count=0;//回环数量 UF_MODL_ask_loop_list_count(loops_list,&loops_count);//查询回环数量 for(intl_i=0;l_i { intloops_type=0;//回环类型 uf_list_p_tedge_list=NULL;//边缘菜单指针ID
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UG 二次开发