UG二次开发.docx

上传人:b****4 文档编号:5002175 上传时间:2022-12-12 格式:DOCX 页数:34 大小:68.24KB
下载 相关 举报
UG二次开发.docx_第1页
第1页 / 共34页
UG二次开发.docx_第2页
第2页 / 共34页
UG二次开发.docx_第3页
第3页 / 共34页
UG二次开发.docx_第4页
第4页 / 共34页
UG二次开发.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

UG二次开发.docx

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

UG二次开发.docx

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#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(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.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

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

当前位置:首页 > 经管营销 > 销售营销

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

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