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//显示消息对话框
头文件:
用法1:
charinf[100];
sprintf(inf,"%f",);
uc1601(inf,1);
用法2:
uc1601("",1);
2)UF_UI_write_listing_window//显示文本框
UF_UI_open_listing_window();
sprintf(inf,"%",);
UF_UI_write_listing_window(inf);
6,隐藏中间过程
UF_DISP_set_display(UF_DISP_SUPPRESS_DISPLAY)/;/打开隐藏
UF_DISP_set_display(UF_DISP_UNSUPPRESS_DISPLAY)/;/关闭隐藏
1,uc1600//获取字符串
intres=0;
intlen=0;
//string:
Input/Output
charstring[100]="";
res=uc1600("",string,&len);
if(res==5||(res==3&&len>0))
{
}
else
2,uc1603//
用法1:
chartitle[100]="菜单";
charitems[3][38]={"选项1","选项2","选项3"};
choice=uc1603(title,0,items,3);
if(choice==1||choice==2)
UF_terminate();
if(choice==)
"选项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);
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,
num_triples,mask_triples)))==0)
return(UF_UI_SEL_FAILURE);
4,UF_UI_select_with_single_dialog
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
voidclass_sel_dlg(int*count,tag_p_t*objects)
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#includeuf_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#includetag_tarc,wcs_tagUF_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;}elsename_status=UF_DISP_NAME_DISPLAY_OFF;UF_DISP_set_name_display_status(name_status);10,UF_OBJ_set_color(tag,color);//设置颜色头文件#include11,UF_OBJ_set_layer(tag,layer);//设置层12,UF_CALL头文件#includeintUF_CALL(interrorCode){if(errorCode){charmessage[133]="";UF_get_fail_message(errorCode,message);uc1601(message,1);}return(errorCode);}13,UF_PART_ask_display_part头文件#includetag_tpart=UF_PART_ask_display_part();if(NULL==part)uc1601("",1);return;}14,UF_OPER_create头文件#ineludetag_tOper_id=NULL;UF_OPER_create("mill_contour","ZLEVEL_PROFILE_YBC",&GZM_Oper_id);15,UF_MODL_ask_face_data/查询面的信息头文件#includetag_tface;//面的IDinttype;//面的类型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(int*response)改为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文件中定义的IDUF_STYLER_ask_value(dialog_id,&value);//读值/*赋值到变量中,变量在.h文件中定义,根据对话框定义不同类型:real,string,strings,integer,integers,real,reals*/XXX=value.value.real;//赋值value.item」d=XXX;//在.h文件中定义的IDvalue.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_POSITIONif((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
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
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#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;
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
intUF_CALL(interrorCode)
if(errorCode)
charmessage[133]="";
UF_get_fail_message(errorCode,message);
uc1601(message,1);
return(errorCode);
13,UF_PART_ask_display_part
tag_tpart=UF_PART_ask_display_part();
if(NULL==part)
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(int*response)改为
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.count=1;//拉伸条移动
UF_STYLER_set_value(dialog_id,&value);//设值
3,
1),设置控件的激活状态
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
};
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,查询选择物体
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++)
=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
intloops_type=0;//回环类型
uf_list_p_tedge_list=NULL;//边缘菜单指针ID
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1