您的位置:网站首页 > UG教程下载

UG NX5.0的工程图尺寸标识工具的开发

时间:2010-11-15 10:57:50 来源:

  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结论

  通过工作应用实践证明,本尺寸标识工具简洁而方便,大大提高了工程图绘制的效率,并提升了工程师在工程图设计中进行尺寸标识的意识。