
NX 自动计算出最大外围长宽高尺寸.docx
5页用户选择UG窗口的一个实体后,自动计算出最大外围长宽高尺寸的API代码示例演示 楼主(阅:3763/回:72)OPEN API选择一个实体,弹出所选实体最大外围长宽高的尺寸示例代码://先定义过滤器static int UF_UI_sel_init(UF_UI_selection_p_t select, void * user_data){ UF_UI_mask_t mask_triples[] = { UF_solid_type, 0, 0}; if (UF_CALL(UF_UI_set_sel_mask(select,UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,1,mask_triples))==0) { return (UF_UI_SEL_SUCCESS); } else { return (UF_UI_SEL_FAILURE); }}//主程序代码开始static void do_api(){ tag_t object,view; char cue[] = "易呈科技提醒:请选择一个实体"; int scope = UF_UI_SEL_SCOPE_WORK_PART; double x,y,z; int response; double boundingbox[6]; double cursor[3];L10://选择实体并计算长宽高核心代码开始被隐藏内容已经显示出来UF_UI_select_with_single_dialog(cue,"请选择一个实体",scope, UF_UI_sel_init, NULL, &response, &object, cursor, &view );if(response==UF_UI_BACK) goto L10; //如果点后退就跳转到L10if(response==UF_UI_CANCEL) return; //如果点取消就退出if(response==UF_UI_OK) return; //如果点OK就退出if (response == UF_UI_OBJECT_SELECTED || response == UF_UI_OBJECT_SELECTED_BY_NAME){UF_DISP_set_highlight(object,0);UF_MODL_ask_bounding_box(object,boundingbox);x = boundingbox[3]-boundingbox[0];y = boundingbox[4]-boundingbox[1];z = boundingbox[5]-boundingbox[2];char message[256];sprintf(message," X的尺寸 = %.3f\n Y的尺寸 = %.3f\n Z的尺寸 = %.3f\n",x,y,z);uc1601(message,1);goto L10; }else uc1601("易呈提醒:没有选定对象,请重新选择!",1);goto L10; }//入口程序代码extern DllExport void ufsta( char *param, int *returnCode, int rlen ){ if( UF_CALL(UF_initialize()) ) { return; } do_api(); UF_CALL(UF_terminate());}//代码结束,通过UG调用DLL执行后的结果如下图所示:maskArray[0] = Selection::MaskTriple( UF_solid_type, UF_solid_body_subtype, 0 ); // Bodies( v% ~+ [6 o2 l+ y2 J/*! O- Q4 e2 G1 L3 N/ VmaskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_FACE); // Faces7 |3 Z; \: C* H* i7 m% e9 Z4 EmaskArray[0] = Selection::MaskTriple( UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_ANY_EDGE); // Edges5 u& T, o0 p" H! F! }$ o; mmaskArray[0] = Selection::MaskTriple( UF_component_type, 0, 0 ); // Components7 b6 c: Y" a' G p6 CmaskArray[0] = Selection::MaskTriple( UF_line_type, 0, 0 ); // Lines/ S, U! w* S. `7 lmaskArray[0] = Selection::MaskTriple( UF_drafting_entity_type, 0, 0 ); // Drafting objects一、坐标系统有3种绝对坐标工作坐标极点坐标绝对坐标 指不可变的坐标是绝对的 不可变 指不可改变,如不可移动工作坐标 指实际坐标,是可变的坐标实际坐标 指模型位置跟着工作坐标走极点坐标 指最小坐标,是可变又不可变的坐标每一个对像都有且只有一个极点坐标 极点坐标一般用于二次开发为什么是最小的呢?因为极点坐标在对像最大外边的 最靠进xyc负半轴的那个点所以 极点坐标不一定在对象上为什么是可变又不可变的坐标呢?因为每个对象的极点坐标很可能是不不样又因为每个对象的极点坐标一定是最大外边最靠进xyc负半轴的那个点注意:极点是最接近 原点(0,0,0) 的点。
二、矢量方向 从原点到某一点 的方向为矢量方向系统计算矢量方向 两点最长距离为1被隐藏内容已经显示出来矢量方向 为 z轴正方向 矢量点为 0,0,1矢量方向 为 z轴负方向 矢量点为 0,0,-1其实 z轴正方向可以是 【0,0,正数】 如0,0,0.1 0,0,100等等其它 同理。












