




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
。UG二次开发模板目 录第一章 技巧规则(2) 第二章 函数模板(4)第三章 功能模板(11)第四章 udop(24)注:连接: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 = new doublecount3;deletepoint;/正确的用法/*delete point;/错误的用法delete point0*/3, UF_MODL_update();/使用UF_MODL_edit时用来刷新4UF_UI_ONT_refresh ();/刷新导航器头文件#include UF_DISP_refresh();/去除临时文件#include 5 调试工具 1)uc1601 /显示消息对话框头文件:#include 用法1: char inf100;sprintf(inf, %f,);uc1601(inf,1);用法2:uc1601(,1);2)UF_UI_write_listing_window /显示文本框头文件:#include char inf100;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 int res = 0;int len = 0;char string100=;res = uc1600( ,string , &len );/string:Input / Outputif ( res = 5 | ( res= 3 & len 0 ) )else2, uc1603 /头文件:#include 用法1: char title 100 = 菜单;char items 3 38 = 选项1,选项2,选项3;choice = uc1603(title, 0, items, 3);if (choice = 1 | choice = 2) UF_terminate(); elseif (choice = ) 用法2: char items 3 38 = 选项1,选项2,选项3;response = uc1603( 菜单, 0, items, 3 );switch ( response ) case 1:case 2:break;case 4:case 5:3,选择对话框头文件头文件1: init_proc_facestatic int init_proc_face( UF_UI_selection_p_t select, void* user_data ) int nums = 1; UF_UI_mask_t masks = 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_bodystatic int init_proc_body(UF_UI_selection_p_t select, void* user_data) int num_triples = 1; UF_UI_mask_t mask_triples = UF_solid_type, 0, UF_UI_SEL_FEATURE_BODY; /* enable only lines and edges */ 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 char title=;char cue = ;int response=0;double cursor 3;tag_t face = NULL;tag_t view = NULL;if(!UF_CALL(UF_UI_select_with_single_dialog( cue, title, UF_UI_SEL_SCOPE_NO_CHANGE,init_proc_face, NULL, &response,&face,cursor ,&view)if (response = UF_UI_OBJECT_SELECTED |response = UF_UI_OBJECT_SELECTED_BY_NAME)printf(object tag = %dn, face);UF_DISP_set_highlight(face, 0);/关高亮5,UF_UI_select_with_class_dialog头文件:#include void class_sel_dlg(int *count,tag_p_t *objects)char cue = ;char title = ;int response, sel_count, i;tag_p_t sel_objects;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(object count = %dn,sel_count);if (response = UF_UI_OK & sel_count 0) *objects=sel_objects;*count=sel_count;for (i=0; isel_count; i+)printf(object tag = %dn, sel_objectsi);UF_DISP_set_highlight(sel_objectsi, 0);UF_free(objects);6,UF_MODL_delete_object_parms/消参头文件:#include #include uf_list_p_t obj_list; UF_CALL(UF_MODL_create_list(&obj_list);UF_CALL(UF_MODL_put_list_item(obj_list, );UF_CALL(UF_MODL_put_list_item(obj_list, );UF_MODL_delete_object_parms(obj_list);UF_MODL_delete_list(&obj_list);UF_OBJ_delete_object();7,UF_CURVE_create_arc/通过圆心,半径画圆头文件:#include #include tag_t arc, wcs_tag;UF_CSYS_ask_wcs(&wcs_tag);UF_CURVE_arc_t arc_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_center0 = center0;/arc_coords.arc_center1 = center1;/arc_coords.arc_center2 = center2;/arc_coords.radius = 500; UF_CURVE_create_arc(&arc_coords,&arc_id);8,UF_OBJ_set_name(tag,name); /设置名字头文件#include 9,name开关 int name_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); /设置层头文件#include 12,UF_CALL头文件#include int UF_CALL ( int errorCode )if ( errorCode )char message 133 = ;UF_get_fail_message( errorCode, message );uc1601 ( message, 1);return (errorCode);13, UF_PART_ask_display_part头文件#include tag_t part = UF_PART_ask_display_part ( );if ( NULL = part )uc1601( , 1 );return;14, UF_OPER_create头文件#include tag_t Oper_id = NULL;UF_OPER_create ( mill_contour, ZLEVEL_PROFILE_YBC, &GZM_Oper_id );15,UF_MODL_ask_face_data/查询面的信息头文件#include tag_t face;/面的IDint type;/面的类型 double box6;/x,y,z向最大,最小值double radius;double rad_data;int norm_dir ;/法向UF_MODL_ask_face_data(face,&type,center,dir,box,&radius,&rad_data,&norm_dir);16,UF_MODL_ask_minimum_dist_2/查询两物体间距离double dis,accuracy;/ accuracy:准确度double point1 3 =0;double point2 3 =0;UF_CALL(UF_MODL_ask_minimum_dist_2 ( obj1, obj2, 0, NULL, 0, NULL, & dis, point1, point1, &accuracy );第三章 功能模板1,制作对话框1)进入User Interface Styler,设计好对话框,将Launch Dialog From改为Callback保存2)将生成的对话框文件放在模板文件夹下,以记事本格式打开XX. _template.C文件,将extern int ( int *response )改为extern int XXX ( int *response )后保存。3)打开VC的Templet,依次点击Tools-options-directories,将XX.h所在的文件夹包含进去。4)在Templet.cpp中加入#include XX_template.c#include XX.h5)在程序内写入int response; XXX (&response);点击F7,编译成功。2,对话框求值,设值UF_STYLER_item_value_type_t value;value.item_attr=UF_STYLER_VALUE;value.item_id=XXX; /在.h文件中定义的IDUF_STYLER_ask_value(dialog_id,&value);/读值/*赋值到变量中,变量在.h文件中定义,根据对话框定义不同类型:real,string,strings, integer , integers , real, reals*/XXX =value.value.real;/赋值value.item_id=XXX; /在.h文件中定义的IDvalue.count1;/拉伸条移动UF_STYLER_set_value(dialog_id,&value);/设值UF_STYLER_free_value(&value); /释放空间3,1),设置控件的激活状态UF_STYLER_item_value_type_t value;value.item_attr=UF_STYLER_SENSITIVITY; /指定设置控件的激活状态value.item_id= XXX ; /在.h文件中定义的IDeger=FALSE; / FALSE为不激活,TRUE为激活UF_STYLER_set_value(dialog_id,&value);2),设置对话框是否能选择物体UF_UI_mask_t all_mask = UF_circle_type, 0, 0,UF_cylinder_type, 0, 0,UF_line_type, 0, 0;UF_STYLER_item_value_type_t value;value.item_attr=UF_STYLER_SELECTION; value.item_id=UF_STYLER_DIALOG_INDEX;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_SELECTION 能选择/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_t value;value.item_attr=UF_STYLER_SELECTION;value.item_id=UF_STYLER_DIALOG_INDEX;UF_STYLER_ask_value(dialog_id0,&value); UF_UI_ask_sel_object_list(value.value.selection,&count,&objects);4,求三面交点头文件void change ( double AB 34, int line);void row_change ( double AB 34, int row); double xyz3;/交点坐标 double AB 34 = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;double dot_product;UF_VEC3_dot ( dir, center, &dot_product);AB 00 = dir0; AB 01 = dir1; AB 02 = dir2; AB 03 = dot_product;double dot_product1;UF_VEC3_dot ( dir1, center1, &dot_product1);AB 10 = dir10; AB 11 = dir11; AB 12 = dir12; AB 13 = dot_product1;double dot_product2;UF_VEC3_dot ( dir2, floor_center, &dot_product2);AB 20 = dir20; AB 21 = dir21; AB 22 = dir22; AB 23 = dot_product2;for ( int j = 0; j 3; j+)change ( AB, j);row_change ( AB, j);xyz 2 = AB 23;xyz 1 = AB 13 - AB 12 * xyz 2;xyz 0 = AB 03 - AB 02 * xyz 2 - AB 01 * xyz 1;子函数:void change ( double AB 34, int line)double max = 0;double buffer = 0;int bj = -1;double max_x = 0;for ( int i = line; i max)max = max_x;bj = i;for ( int j = 0; j 4; j+)buffer = AB bjj;AB bjj = AB linej;AB linej = buffer;/初等行变换void row_change ( double AB 34, int row)for ( int j = row; j 3 ; j+)double divisor = AB jrow;if ( 0 != divisor)for ( int i = row; i 4; i+)AB ji = AB ji / divisor;for ( int k = ( row + 1); k 3; k+)if ( 0 != AB krow)for ( int l = 0; l 4; l+)AB kl = AB kl - AB rowl;5,筛选边界uf_loop_p_t loops_list=NULL; /回环IDUF_MODL_ask_face_loops(face, &loops_list );/查询回环int loops_count=0;/回环数量UF_MODL_ask_loop_list_count(loops_list,&loops_count);/查询回环数量for (int l_i=0; l_iloops_count; l_i+)int loops_type=0;/回环类型uf_list_p_t edge_list=NULL;/边缘菜单指针ID UF_MODL_ask_loop_list_item(loops_list,l_i,&loops_type,&edge_list);if (1=loops_type)/ 边界=1, 洞=2, 其他=3 int edge_count=0;/边缘数量UF_MODL_ask_list_count ( edge_list, &edge_count );tag_t edge_id=NULL;/边缘IDfor(int edge_i=0; edge_iedge_count;edge_i+)UF_MODL_ask_list_item( edge_list,edge_i,&edge_id);UF_MODL_create_curve_from_edge(edge_id,&edge_id);6,transform转移#include 1)平移uf59432)缩放uf59443)旋转uf5945double matrix 16 ; int status; double angle=0;/旋转角度uf5945(center,dir,&angle,matrix,&status);/center物体中心,dir法向const int objects=1;/数量const int move=1; / 1 :复制 2 :粘贴const int layer=-1; /0:最初层; -1: 工作层; 1 - 256 : 指定层const int trace_curves=2; /轨迹状态, 1 开, 2 关uf5947(matrix,&obj_tag,&n_objects,&move,&layer,&trace_curves,NULL,NULL,&status);4)投影uf5946double matrix 16 ; int status; uf5946(object,matrix,&status);/object:投影面或线,dir法向 const int objects=1;/数量const int move=1; / 1 :复制 2 :粘贴const int layer=-1; /0:最初层; -1: 工作层; 1 - 256 : 指定层const int trace_curves=2; /轨迹状态, 1 开, 2 关uf5947(matrix,&obj_tag,&n_objects,&move,&layer,&trace_curves,NULL,NULL,&status);5)偏移相加 uf59427,裁剪片体tag_t *trim_objects;trim_objects =new tag_tcount;trim_objectsi =bound_id;void trim_sheet()UF_MODL_vector_t projection_method ;projection_method.reverse_vector=0;projection_method.vector_type=UF_MODL_VECTOR_DIRECTION;UF_MODL_vector_defined_by_union_t dir1;UF_MODL_vector_direction_t dir2;dir2.xyz 0=dir0;dir2.xyz 1=dir1;dir2.xyz 2=dir2;dir1.direction=dir2;projection_method.defined_by=dir1;double point_coords3 ;point_coords0=center0;point_coords1=center1;point_coords2=center2;int gap_point_count ;double *gap_points; tag_t feature_obj_eid; UF_MODL_create_trimmed_sheet(sel_sheet,edge_count,trim_objects,&projection_method, 0,1,point_coords,0.1,&gap_point_count,&gap_points,&feature_obj_eid);8,offset偏移char distance_str = 10.0;/偏移的距离int num_curves;tag_t * offset_curves;UF_CURVE_offset_distance_data_t offset_distance;offset_distance.distance = distance_str;offset_distance.rough_type=1;UF_STRING_t input_string;input_string.idi=curve_id;/加入想要偏移的线input_string.num =1; /偏移矢量方向数量input_string.string=&string_count;/偏移线的数量int string_dir=UF_MODL_CURVE_START_FROM_END;input_string.dir=&string_dir;UF_CURVE_offset_data_t offset_data;offset_data.offset_def.distance_type1 = &offset_distance;offset_data.input_curves = &input_string;offset_data.approximation_tolerance = 0.01;offset_data.string_tolerance=0.001;offset_data.offset_def.distance_type1 = &offset_distance;offset_data.offset_type = UF_CURVE_OFFSET_DISTANCE_TANGENT;UF_CALL(UF_CURVE_create_offset_curve(&offset_data,&num_curves,&offset_curves);9,创建平面UF_STRING_t generator;UF_STRING_p_t ge = &generator; UF_MODL_init_string_list(ge);UF_MODL_create_string_list(1,12,ge); ge-string0 = 1;ge-dir0 = 1;/指定线从开始到结束ge-id0 = arc_id;/指定边界的iddouble tol3;tol0 = .001;/直线公差tol1 = .5 * (PI/180);/圆弧公差tol2 = .02;/不起作用UF_CALL(UF_MODL_create_bplane(ge,tol,&bplane);10,选择1),点选择tag_t point_tag;double point3; UF_UI_POINT_base_method_t base_method=UF_UI_POINT_INFERRED ; int point_res; UF_CALL(UF_UI_point_construct(选择起点,&base_method,&point_tag,point,&point_res);if(point_res=UF_UI_OK&NULL_TAG!=point_tag)2),向量选择int mode = UF_UI_INFERRED ;int disp_flag = UF_UI_DISP_TEMP_VECTOR;double vec3;double vec_pnt3;int res_vec = 0;UF_initialize();ifail = UF_UI_specify_vector( Choose a Vector,&mode,disp_flag,vec,vec_pnt,&res_vec );if ( ifail != 0 | res_vec!= UF_UI_OK )UF_UI_ONT_refresh ();printf( No vector selected n );else printf( Vect base (%f, %f, %f), direction (%f, %f, %f) n,vec_pnt0, vec_pnt1, vec_pnt2, vec0, vec1, vec2 );3),平面选择tag_t plane_eid=NULL_TAG;double orientation9 = 0,0,0,0,0,0,0,0,0; double origin3 = 0,0,0; double pts6 = 0,0,0,0,0,0; int i, error_code = 0; int mode, display, response; mode = 1; display = 0; UF_initialize(); error_code = UF_UI_specify_plane( Select Plane, &mode, display, &response, orientation, origin, &plane_eid); if ( !error_code & response != 1 & response != 2) for (i=0; i3; i+) ptsi = origini + orientationi; for (i=3; i6; i+) ptsi = origini-3 + orientationi; FTN(uf5374)(origin,pts,&pts3,&plane_eid); 11,临时点,线void display_temporary_point_line ( double point13, double point23)UF_DISP_view_type_t which_views = UF_DISP_USE_WORK_VIEW;UF_OBJ_disp_props_t color;color.layer = 201; color.color = 186; color.blank_status = UF_OBJ_NOT_BLANKED; color.line_width = UF_OBJ_WIDTH_NORMAL; color.font =0;color.highlight_status = FALSE;UF_DISP_poly_marker_t marker_type = UF_DISP_POINT; UF_DISP_display_temporary_point ( NULL, which_views, point1, &color, marker_type); UF_DISP_display_temporary_point ( NULL, which_views, point2, &color, marker_type); UF_DISP_display_temporary_line ( NULL, which_views, point1, point2, &color); 12,WCS与绝对坐标转换void cycs_wcs(double point)tag_t wcs_id,matrix_id; double matrix 9 ;/wcs_origin:工作坐标系原点,vec:工作坐标系轴向量,point_origin:点到原点的矢量double wcs_origin 3, vec33,point_origin3;/1,得到工作坐标系UF_CSYS_ask_wcs(&wcs_id);UF_CSYS_ask_csys_info(wcs_id,&matrix_id,wcs_origin); UF_CSYS_ask_matrix_values(matrix_id,matrix);/2,得到工作坐标系轴向量UF_MTX3_x_vec (matrix, vec0);UF_MTX3_y_vec (matrix, vec1);UF_MTX3_z_vec (matrix, vec2);for(int i=0;i3;i+)double tol; /3,得到点到工作坐标系原点矢量UF_VEC3_unitize(veci,0.000001,&tol,veci);/4,得到点到工作坐标系原点矢量point_origini=pointi-wcs_origini;for(int j=0;j3;j+)UF_VEC3_dot(point_origin,vecj,&pointj);13,三点求圆心#include #include int main() int x1,y1,x3,y3; double a,b,c,d,e,f; double r,k1,k2,x,y,x2,y2; cout请输入x1,y1,x2,y2,x3,y3x1y1x2y2x3y3; if(y1=y2)&(y2=y3) cout三点不构成圆!endl; return 0; if(y1!=y2)&(y2!=y3) k1=(x2-x1)/(y2-y1); k2=(x3-x2)/(y3-y2); if(k1=k2) cout三点不构成圆!endl; return 0; a=2*(x2-x1); b=2*(y2-y1)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 马的解剖生理课件
- 2025届新疆维吾尔巴音郭楞蒙古自治州和静县三年级数学第一学期期末学业水平测试试题含解析
- 股权管理学课件
- 工程项目的多维度评估试题及答案
- 水利水电工程前沿动态试题及答案
- 2025年市政工程绩效评价试题及答案
- 2025年经济师行业前景展望试题及答案
- 工程项目管理法规试题及答案
- 通信行业客户服务手册
- 2025年市政工程公共事务试题及答案
- 创新工程实践智慧树知到期末考试答案章节答案2024年北京大学等跨校共建
- 安装调试培训及验收方案
- 劳动合同法培训ppt课件
- 现场跟踪审计工作要点
- 公制螺纹公差速查表
- 交通运输水运工程造价定额中心
- 《山东省消防条例》(2022年最新版)[1]
- 鹊桥仙(公开课课件)(苍柏书屋)
- T∕CVIA 73-2019 视觉疲劳测试与评价方法 第2部分:量表评价方法
- 物流地理第八章商业布局和物流地理
- GB T 197-2018 普通螺纹 公差(高清版)
评论
0/150
提交评论