1 基于UG的工程图尺寸标识工具简介
UG(Unigraphics)软件起源于美国麦道(MD)公司,六十年代起成为商业软件。1991年并入EDS 公司,成为世界一流的集成化机械CAD/CAE/CAM 软件,通用汽车公司是UGⅡ的最大用户(拥有2400 套UGⅡ系统)。UG 于1990 年初进入中国市场,广泛用于国内的航空航天、汽车、通用机械及模具等各个领域。
UG 是一个功能强大的CAD/CAM 软件,针对于整个产品开发的全过程,从产品的概念设计直到产品建模、分析和制造过程。作为一个业界最完整的一流产品,Unigraphics 提供了全系列的工具,包括针对计算机辅助工业设计(CAID)艺术级工具,并与功能强大的CAD/CAM/CAE 解决方案紧密集成。UG 具有独特的知识驱动自动化(KDA)的功能,使产品和过程的知识能够集成在一个系统里,Unigraphics 大大提高了许多世界知名公司的生产力。
基于UG的工程图尺寸标识工具是在UG强大的工程图模块和完善的二次开发模块基础上结合VC 6.0为编程工具开发出来尺寸标识工具集,是UG相关功能的一种整合和显化,主要应用于工程图中重要尺寸、参考尺寸和基本尺寸的标识和标识去除,从而使尺寸的标识更快速方便。
2 尺寸标识工具的设计与实现
2.1 开发与运行环境选型和设置
本文选择了UG NX5.0为CAD软件平台和Visual C 6.0 为系统开发的编程工具,UG系统提供了具有开方式架构体系的二次开发环境UG/Open,支持对UG 资源的调用,包括UG/Open MenuScript(用户菜单)、UG/Open UIStyler(用户对话框)、UG/Open API(与UG 系统资源的直接交互接口),结合UG二次开发环境UG/Open的结构框架进行如下设置:
2.1.1 工程目录结构设置
建立D: Ug_stdsDIM_ID工程文件夹,在其下建立以下四个文件夹目录(图1):
1)、startup 目录存放UG启动时需要加载的动态连接库文件(*.dll)、菜单脚本文件(*.men)和工具栏脚本文件(*.tbr);
2)、application 目录存放尺寸标识工具的功能扩展程序文件,如UIStyler对话框文件(*.dlg),工具图标文件(*.bmp);
3)、code 目录存放尺寸标识工具的程序源代码(该目录在新建工程时创建);
4)、doc 目录存放尺寸标识工具的使用说明。
2.1.2 设置系统环境变量
在控制面板中点击系统→高级→环境变量,增加环境变量UGII_USER_DIR,使其指向
D: Ug_stdsDIM_ID。本文首先阐述了工程图样尺寸标识的分类,进而为达到快速而方便的进行尺寸标识,结合UGNX5.0强大的工程图模块和完善的二次开发模块,同时运用VC 6.0为编程工具,开发出与UG软件完全融为一体的尺寸标识工具。
2.2 编写尺寸标识工具的菜单
应用UG/OPEN MenuScript所提供了一套用于定义Unigraphics菜单的脚本语言,运用记事本工具按照MenuScript脚本语言语法可定义DIM.men文件,将该文件保存在D: Ug_stdsDIM_IDstartup文件夹中,DIM.men具体内容如下:
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
BEFORE UG_HELP
CASCADE_BUTTON DIM_ID
LABEL 尺寸标识
END_OF_BEFORE
MENU DIM_ID
BUTTON IMP_DIM
LABEL 重要尺寸
ACTIONS IMP_DIM
END_OF_MENU
MENU DIM_ID
BUTTON REF_DIM
LABEL 参考尺寸
ACTIONS REF_DIM
END_OF_MENU
MENU DIM_ID
BUTTON BASIC_DIM
LABEL 基本尺寸
ACTIONS BASIC_DIM
END_OF_MENU
运行UG NX后在主界面上生成的尺寸标识工具菜单如图2所示:
2.3 建立尺寸标识工具的工具条
编写工具条(Toolbar)为方便快速的使用尺寸标识工具,实现方法是制作或编写工具图标文件(BMP文件)与工具条文件,工具条是以.tbr为扩展名的文本文件。
首先在application文件夹中创建工具图标文件,分别命名为basic_dim.bmp 、imp_dim.bmp和ref_dim.bmp,每个图标的标准大小为24X24(像素X像素),然后在startup文件夹中创建工具条脚本文件DIM.tbr,并输入如下代码:
TITLE 尺寸标识
VERSION 170
DOCK TOP
BUTTON IMP_DIM
LABEL 重要尺寸
BITMAP imp_dim.bmp
BUTTON REF_DIM
LABEL 参考尺寸
BITMAP ref_dim.bmp
BUTTON BASIC_DIM
LABEL 基本尺寸
BITMAP basic_dim.bmp
运行UG NX后在主界面上生成的尺寸标识工具的工具条如图3所示:
2.4 创建尺寸标识工具的交互接口界面
UG/OPEN UIStyler提供了快速生成Unigraphics对话框的功能,产生的对话框可以在MenuScript文件中被调用。
1)、在Unigraphics Gateway状态下,选择Start→All Applicatoins→User Interface styler…,进入UIStyler;
2)、利用UIStyler提供的控件分别创建重要尺寸,参考尺寸和基本尺寸的对话框,设置成添加和去除尺寸标识按钮,图4所示为重要尺寸的对话框:
3)、将三类尺寸标识的对话框文件(*.dlg文件)保存至applicatoin文件夹中,UIStyler针对每一个*.dlg文件自动创建对应的*.h文件和*.c文件,自动保存至applicatoin文件夹中。
运行UG NX后在主界面上点击重要尺寸标识按钮时出现的对话框,如图5所示:
本文首先阐述了工程图样尺寸标识的分类,进而为达到快速而方便的进行尺寸标识,结合UGNX5.0强大的工程图模块和完善的二次开发模块,同时运用VC 6.0为编程工具,开发出与UG软件完全融为一体的尺寸标识工具。
2.5 创建尺寸标识工具的动态链接库文件
动态链接库(DLL)文件适用于对UG/OPEN API的内部模式,程序只能在Unigraphics的界面环境中运行。重要尺寸标识功能所对应的动态链接库文件(Imp_Code.dll)的创建过程如下:
2.5.1 在Visual C 中使用MFC应用向导新建工程项目Imp_Code.dsw,如图6所示;
2.5.2 设置UG应用开发环境
1)、工程设置
选择菜单命令Project→Setting,弹出Project Setting对话框,选择Link选项卡,在Output file name文本框中输入D:Ug_stdsDIM_IDstartupImp_Code.dll,并在Object/library modules文本框中输入UG库文件kernel32.lib、user32.lib、gdi32.lib、winspool.lib、comdlg32.lib advapi32.lib、shell32.lib、ole32.lib、oleaut32.lib、uuid.lib、odbc32.lib、odbccp32.lib、libufun.lib、libugopenint.lib,如图7所示:
2)、配置路径选项
选择菜单命令Tools→Option,弹出Options对话框。选择Directories选项卡,设置如图8所示:
2.5.3 编写消息映射代码
1)、建立用户文件
在VC中选择菜单命令Project→Add To Project→New,添加新文件Main.h和Main.cpp
到工程中,并将这两个文件作为重要尺寸标识工具的工程主文件。添加新文件APP.h和APP.cpp到工程中,并将这两个文件作为重要尺寸标识工具的工程应用文件,如图9所示:
本文首先阐述了工程图样尺寸标识的分类,进而为达到快速而方便的进行尺寸标识,结合UGNX5.0强大的工程图模块和完善的二次开发模块,同时运用VC 6.0为编程工具,开发出与UG软件完全融为一体的尺寸标识工具。
2)、编写文件代码
在新建的工程文件中添加以下代码(由于篇幅有限,这里只例举了重要尺寸标识工具的主要代码imp.cpp):
#include "stdafx.h"
#include "Main.h"
/*-------------------------------------------------------------------------*/
/*---------------------- UIStyler Callback Functions ----------------------*/
/*-------------------------------------------------------------------------*/
/* -------------------------------------------------------------------------
* Callback Name: IMP_DIM_IMP_DIM_choose
* This is a callback function associated with an action taken from a
* UIStyler object.
*
* Input: dialog_id - The dialog id indicate which dialog this callback
* is associated with. The dialog id is a dynamic,
* unique id and should not be stored. It is
* strictly for the use in the NX Open API:
* UF_STYLER_ask_value(s)
* UF_STYLER_set_value
* client_data - Client data is user defined data associated
* with your dialog. Client data may be bound
* to your dialog with UF_MB_add_styler_actions
* or UF_STYLER_create_dialog.
* callback_data - This structure pointer contains information
* specific to the UIStyler Object type that
* invoked this callback and the callback type.
* -----------------------------------------------------------------------*/
static int init_proc(UF_UI_selection_p_t select,void* user_data)
{
int num_triples = 1;
UF_UI_mask_t mask_triples[]={UF_dimension_type, UF_all_subtype, 0};
if(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);
}
int IMP_DIM_IMP_DIM_choose ( int dialog_id,
void * client_data,
UF_STYLER_item_value_type_p_t callback_data)
{
/* Make sure User Function is available. */
int response;
tag_t dim_tag,view_tag;
double cursor[3];
UF_DRF_inspection_type_t dim_inspection_type;
if ( UF_initialize() != 0)
return ( UF_UI_CB_CONTINUE_DIALOG );
/* ---- Enter your callback code here ----- */
UF_UI_select_with_single_dialog("选择一个尺寸","选择工程图尺寸",
UF_UI_SEL_SCOPE_WORK_PART, init_proc, NULL,
&response, &dim_tag, cursor, &view_tag);
if (response == UF_UI_OBJECT_SELECTED ||
response == UF_UI_OBJECT_SELECTED_BY_NAME)
{
UF_DISP_set_highlight(dim_tag,0);
UF_DRF_ask_dim_inspection_type(dim_tag,&dim_inspection_type);
if(dim_inspection_type==UF_DRF_NO_INSPECTION)
{
dim_inspection_type=UF_DRF_WITH_INSPECTION;
UF_DRF_set_dim_inspection_type(dim_tag,dim_inspection_type);
}
else
{
uc1601("此尺寸已标识,请去除标识!",1);
}
}
UF_terminate ();
/* Callback acknowledged, do not terminate dialog */
return (UF_UI_CB_CONTINUE_DIALOG);
/* or Callback acknowledged, terminate dialog. */
/* return ( UF_UI_CB_EXIT_DIALOG ); */
}
/* -------------------------------------------------------------------------
* Callback Name: IMP_DIM_IMP_DIM_remove
* This is a callback function associated with an action taken from a
* UIStyler object.
*
* Input: dialog_id - The dialog id indicate which dialog this callback
* is associated with. The dialog id is a dynamic,
* unique id and should not be stored. It is
* strictly for the use in the NX Open API:
* UF_STYLER_ask_value(s)
* UF_STYLER_set_value
* client_data - Client data is user defined data associated
* with your dialog. Client data may be bound
* to your dialog with UF_MB_add_styler_actions
* or UF_STYLER_create_dialog.
* callback_data - This structure pointer contains information
* specific to the UIStyler Object type that
* invoked this callback and the callback type.
* -----------------------------------------------------------------------*/
int IMP_DIM_IMP_DIM_remove ( int dialog_id,
void * client_data,
UF_STYLER_item_value_type_p_t callback_data)
{
/* Make sure User Function is available. */
int response;
tag_t dim_tag,view_tag;
double cursor[3];
UF_DRF_inspection_type_t dim_inspection_type;
if ( UF_initialize() != 0)
return ( UF_UI_CB_CONTINUE_DIALOG );
/* ---- Enter your callback code here ----- */
UF_UI_select_with_single_dialog("选择一个尺寸","选择工程图尺寸",
UF_UI_SEL_SCOPE_WORK_PART, init_proc, NULL,
&response, &dim_tag, cursor, &view_tag);
if (response == UF_UI_OBJECT_SELECTED ||
response == UF_UI_OBJECT_SELECTED_BY_NAME)
{
UF_DISP_set_highlight(dim_tag,0);
UF_DRF_ask_dim_inspection_type(dim_tag,&dim_inspection_type);
if(dim_inspection_type==UF_DRF_WITH_INSPECTION)
{
dim_inspection_type=UF_DRF_NO_INSPECTION;
UF_DRF_set_dim_inspection_type(dim_tag,dim_inspection_type);
}
else
{
uc1601("此尺寸非重要尺寸!",1);
}
}
UF_terminate ();
/* Callback acknowledged, do not terminate dialog */
return (UF_UI_CB_CONTINUE_DIALOG);
/* or Callback acknowledged, terminate dialog. */
/* return ( UF_UI_CB_EXIT_DIALOG ); */
}
2.5.4 编译和运行程序
选择菜单命令Build→Rebuild All,编译程序后打开UG工程图模块,点击尺寸标识工具条上的重要尺寸,显示图10对话框,选取重要尺寸按钮,并选取一尺寸进行标识,或选取去除重要尺寸按钮进行去除,如图11所示。
有关参考尺寸和基本尺寸的标识工具开发过程同上,这里不再累述,图12所示为三类标识的具体应用:
3结论
通过工作应用实践证明,本尺寸标识工具简洁而方便,大大提高了工程图绘制的效率,并提升了工程师在工程图设计中进行尺寸标识的意识。