最新NXOpenUG二次开发架构

合集下载

UG的二次开发工具

UG的二次开发工具

5、UG/OPEN UIStyler模块
UlStyler是开发UG对话框的可视化编辑器,生成的对话框能与UG集成,让 用户更方便、更高效地与UG进行交互操作。利用这个工具可以避免复杂的图形用 户接口GUI的编程,直接进行对话框控件的选择和布局,从而创建能满足不同功 能需求的UG风格对话框。 当对话框创建完成后,会在存放的目录下自动生成3个文件.dlg文件, template文件和.h文件。其中:dlg文件是对话框资源文件,定义了对话框样式 及控件事件的响应函数名称,存放在用户创建的二次开发目录下面的 application文件夹内,供用户菜单调用;template文件是C语言源文件模板,它 包含了对话框所有回调函数的定义,提供了一个对话框应用的程序框架,该程序 框架通过调用UG/OPEN API函数,实现最初的对话框界面功能,在程序标明的位 置添加程序代码,编写回调函数就可以实现预先设定的功能;.h文件是对话框头 文件,它包含了对话框控件标识的定义以及控件事件响应函数原型的声明,供 VC++编写应用程序时使用。
UG/OPEN API函数采用标准的名称约定,其一般格式为:UF_<area>一 <name>,其中UF表示User Function;<area>表示函数的应用范围,通常是应 用范围名称的英文单词缩写。例如:MODL和ASSEM分别是Modeling建模模块和 Assembly装配模块的名称缩写,DISP则是DispIay功能的名称缩写:<name>表 示其实现功能的语言描述,一般由下划线分开的动词和名词组成。例: UF_MODL create—block0表示在modeling模块中创建立方体函数UF_DISP set highlight()是高亮显示对象的函数UF_PART_ask_part_name0是获取部件文件 名的函数,其他常用的动词还有edit(编辑)、delete(删除)。所有的API函数 及其相应的参数可以在UG的帮助文档里找到。

UG-NX二次开发基础-OpenAPI

UG-NX二次开发基础-OpenAPI

22.1.1 概述
作为 UG NX 5.0 与外部应用程序之间的接口,UG/Open API 是一系列函数的集合。通过 UG/ Open API 的编程,用户几乎能够实现所有的 UG NX 5.0 功能。开发者可以通过用 C++语言编程来调 用这些函数,从而实现用户的需求。
(1)对 UG part 文件及相应模型进行操作,包括建立 UG NX 5.0 模型、查询模型对象、建立并 遍历装配体及创建工程图等。
22
CHAPTER
UG NX 5.0 二次开发基础
内容提要 ➢ UG/Open API 基础概念和语法知识 ➢ UG/Open API 常用对话框及其应用 ➢ 提示消息的发布与获取 Open/API(用户函数)是一个程序集合,使得程序员能够访问和操作 NX 对象模型。除此之外, Open/API 还提供了工具用来编辑和连接与 UG NX 5.0 风格一致的程序。UG/Open 二次开发模块是 UG NX 5.0 软件的二次开发工具集,可用于各种二次开发工作。利用该模块可对 UG NX 5.0 系统进 行用户化剪裁和开发,满足用户的开发需求。使用 UG NX 5.0 的二次开发时,用户需要具有一定的 C 语言基础。 UG/Open 包括以下几个部分。 (1)UG/Open API 开发工具:提供 UG NX 5.0 软件直接编程接口,支持 C、C++、Fortran 和 Java 等主要高级语言。 (2)UG/Open UIStyle 开发工具:是一个可视化编辑器,用于创建类似于 UG NX 5.0 的交互界面。 利用该工具,用户可为 UG/Open 应用程序开发独立于硬件平台的交互界面。 (3)UG/Open Menuscript 开发工具:对 UG NX 5.0 软件操作界面进行用户化开发,使得用户无 须编程即可对 UG NX 5.0 标准菜单进行添加、重组、剪裁或在 UG NX 5.0 中集成自己开发的软件功 能。 (4)UG/Open GRIP 开发工具:是一个类似于 APT 的 UG NX 5.0 内部开发语言,用户可利用该 工具生成 NC 自动化或自动建模等特殊应用。

UG二次开发之Open和NXOpen

UG二次开发之Open和NXOpen

UG二次开发之Open和NXOpenUG的二次开发有两套系统,一套叫Open,一套叫NXOpen。

Open主要是造型方面的功能,NXOpen比较全面。

Open原来支持的是C/C++,.net的NXOpen.UF命名空间支持。

NXOpen 支持C++和.net等。

Open系统,支持C的原来叫UFun,或者API,用的人最多。

后来出现了Open C++。

但是Open C++支持编辑等属性行为,不能创建。

所以,一般是通过API创建特征,比如实体,通过C++的类查询和修改。

NXOpen系统,是完全面向对象的,所以可以创建和修改特征。

当然,NXOpen几乎支持UG所有的功能。

所以,目前开来,如果使用C/C++方式,可以使用Open C和C++结合的方式,利用C来创建特征,使用C++来管理。

如果使用.net可以直接使用NXOpen。

对于不熟悉NXOpen的人可以按照Open C的知识上手NXOpen.UF。

下面将通过各个例子说明上述系统的使用,因为.net平台是通用的,我只举了C#的例子,VB等也是一样的的。

而java我不懂,见谅了。

一、Open C1、遍历的例子#include <uf_object_types.h>#include <uf_part.h>#include <uf_obj.h>#include <uf_modl.h>#include <string>#include <sstream>using std::string;using std::stringstream;//下面是程序片段UgSession session( true );try{/* TODO: Add your application code here */uf_list_p_t lpObj;UF_MODL_create_list(&lpObj);tag_t prt = UF_PART_ask_display_part();tag_t Next_tag=NULL_TAG;do{UF_OBJ_cycle_objs_in_part(prt,UF_solid_type,&Next_tag);if(Next_tag==NULL_TAG) break;int t,subtype;UF_OBJ_ask_type_and_subtype(Next_tag,&t,&subtype);if(subtype==UF_solid_body_subtype)UF_MODL_put_list_item(lpObj,Next_tag);} while(1);logical is_open;UF_UI_is_listing_window_open(&is_open);if(!is_open) UF_UI_open_listing_window();int sum;UF_MODL_ask_list_count(lpObj,&sum);for (int i=0;i<sum;i++){tag_t t;UF_MODL_ask_list_item(lpObj,i,&t);stringstream s;s<<(int)t;string str;str = s.str();UF_UI_write_listing_window(str.c_str());UF_UI_write_listing_window("\n");}// UF_UI_exit_listing_window();UF_MODL_delete_list(&lpObj);}/* Handle errors */catch ( const UgException &exception ){processException( exception );}2,创建block的例子#include <uf.h>#include <uf_ui.h>#include <uf_exit.h>#include <uf_modl.h>//下面是程序片段/* Initialize the API environment */if( UF_CALL(UF_initialize()) ){/* Failed to initialize */return;}/* TODO: Add your application code here */double corner[3] ={0,0,0};char* edge[3] = {"10","5","20"};tag_t tag;UF_MODL_create_block(UF_NULLSIGN,NULL_TAG,corner,edge,&tag);/* Terminate the API environment */UF_CALL(UF_terminate());二、Open C++1、遍历的例子#include <ug_typed.hxx>#include <ug_part.hxx>#include <ug_body.hxx>#include <ug_string.hxx>using std::string;//下面是程序片段UgSession session( true );try{/* TODO: Add your application code here */UgPart *pWorkPart = UgSession::getWorkPart();UgTypedObject *pObj;ostrstream buffer;for ( pObj = pWorkPart->iterateFirst ( );pObj;pObj = pWorkPart->iterateNext ( pObj ) ){std::string name = pObj->getName ( );UgBody *pBody = dynamic_cast<UgBody*>(pObj);if (pBody){buffer<<(int)pBody->getTag()<<"\n";}}UgInfoWindow::open();UgInfoWindow::write(string(buffer.str()));delete buffer.str();}/* Handle errors */catch ( const UgException &exception ){processException( exception );}2、通过模板搜索的例子#include <ug_body.hxx>#include <ug_iterator.hxx>#include <ug_string.hxx>//下面是程序片段UgSession session( true );try{/* TODO: Add your application code here */ostrstream buffer;// Construct an iterator for NX face objectsUgIterator < UgBody > pObj;//workpart 可以通过其他方式指定//UgIterator < UgFace *> curFace;//// Loop through all faces//while ( !curFace.isFinished ( ) )//{// // Get the name of the current face// std::string faceName = (*(*curFace))->getName ( );// curFace.findNext ( );//}// Loop through all faceswhile ( !pObj.isFinished ( ) ){// Get the name of the current facestd::string faceName = (*pObj)->getName ( );buffer<<(int)(*pObj)->getTag()<<endl;pObj.findNext ( );}UgInfoWindow::open();UgInfoWindow::write( std::string( buffer.str() ));delete buffer.str();}/* Handle errors */catch ( const UgException &exception ){processException( exception );}三、NXOpen C++1、创建block的例子#include <NXOpen/Session.hxx>#include <NXOpen/Part.hxx>#include <NXOpen/Features_BlockFeatureBuilder.hxx>#include <NXOpen/Features_Block.hxx>#include <NXOpen/PartCollection.hxx>#include <NXOpen/Features_FeatureCollection.hxx>#include <NXOpen/UI.hxx>#include <NXOpen/NXMessageBox.hxx>using namespace NXOpen;//下面是程序片段NXOpen::Session *theSession = NXOpen::Session::GetSession();try{/* TODO: Add your application code here */Part* thePart = theSession->Parts()->Work();NXOpen::Features::Feature* block = NULL;NXOpen::Features::BlockFeatureBuilder* theBuilder = thePart->Features()->CreateBlockFeatureBuilder(block);NXOpen::Point3d basePoint(100, 100, 100);theBuilder->SetOriginAndLengths(basePoint, "100", "200", "300");// NXOpen.Body theBody = null;//theBuilder.SetBooleanOperationAndTarget(NXOpen.Features.Feature.BooleanType.Create, theBody);theBuilder->Commit();//theBuilder->CommitFeature();NXOpen::UI::GetUI()->NXMessageBox()->Show("",NXMessageBox::DialogType::DialogTypeInformation, "OK!");// UI->GetUI()->NXMessageBox.Show("", rmation, "OK!");}/* Handle errors */catch ( const UgException &exception ){processException( exception );}2、遍历特征的例子#include <NXOpen/Session.hxx>#include <NXOpen/Part.hxx>#include <NXOpen/Features_BlockFeatureBuilder.hxx>#include <NXOpen/Features_Block.hxx>#include <NXOpen/PartCollection.hxx>#include <NXOpen/Features_FeatureCollection.hxx>#include <NXOpen/UI.hxx>#include <NXOpen/NXMessageBox.hxx>#include <NXOpen/ListingWindow.hxx>using namespace NXOpen;//下面是程序片段NXOpen::Session *theSession = NXOpen::Session::GetSession();try{/* TODO: Add your application code here */Part* thePart = theSession->Parts()->Work();theSession->ListingWindow()->Open();NXOpen::Features::FeatureCollection::iterator i;for (i=thePart->Features()->begin();i!=thePart->Features()->end();i++){theSession->ListingWindow()->WriteLine((*i)->Name()+"--"+(*i)->GetJournalIdentifier());}NXOpen::UI::GetUI()->NXMessageBox()->Show("",NXMessageBox::DialogType::DialogTypeInformation, "OK!");// UI->GetUI()->NXMessageBox.Show("", rmation, "OK!");}/* Handle errors */catch ( const UgException &exception ){processException( exception );}四、NXOpen C#1、创建blcok的例子using NXOpen;using NXOpen.Utilities;using NXOpen.UF;using NXOpenUI;//下面是程序片段Session theSession = Session.GetSession();try{Part thePart = theSession.Parts.Work;NXOpen.Features.Feature block = null;NXOpen.Features.BlockFeatureBuilder theBuilder = thePart.Features.CreateBlockFeatureBuilder(block);NXOpen.Point3d basePoint = new Point3d(100f, 100f, 100f);theBuilder.SetOriginAndLengths(basePoint, "100", "200", "300");mit();//mitFeature();UI.GetUI().NXMessageBox.Show("", rmation, "OK!");}catch(NXException ex){UI.GetUI().NXMessageBox.Show("error!", NXMessageBox.DialogType.Error, ex.Message);}2、遍历特征的例子using NXOpen;using NXOpen.Utilities;using NXOpen.UF;using NXOpenUI;//下面是程序片段Session theSession = Session.GetSession();theSession.ListingWindow.Open();try{Part thePart = theSession.Parts.Work;foreach (NXOpen.Features.Feature c in thePart.Features){//NXOpen.Features.Block t = c as NXOpen.Features.Block;//if(t!=null)//{// theSession.ListingWindow.WriteLine(t.ToString());//}theSession.ListingWindow.WriteLine(+"--"+c.ToString());}UI.GetUI().NXMessageBox.Show("", rmation, "OK!");}catch (NXException ex){UI.GetUI().NXMessageBox.Show("error!", NXMessageBox.DialogType.Error, ex.Message);}五、NXOpen.UF1、仿照Open C中的例1子实现using NXOpen;using NXOpen.Utilities;using NXOpen.UF;using NXOpenUI;NXOpen.UF.UFSession theUFSession = NXOpen.UF.UFSession.GetUFSession();try{double[] corner ={ 0, 0, 0 };string[] edge = { "10", "5", "20" };Tag tag;theUFSession.Modl.CreateBlock1(FeatureSigns.Nullsign, corner, edge, out tag);}catch (NXException ex){UI.GetUI().NXMessageBox.Show("error!", NXMessageBox.DialogType.Error, ex.Message);}2、仿照Open C中的例子2实现using NXOpen;using NXOpen.Utilities;using NXOpen.UF;using NXOpenUI;NXOpen.UF.UFSession theUFSession = NXOpen.UF.UFSession.GetUFSession();try{Tag[] list=null;Tag thePart = theUFSession.Part.AskDisplayPart();theUFSession.Modl.CreateList(out list);Tag Next_tag=Tag.Null;do{theUFSession.Obj.CycleObjsInPart(thePart,70/* UF_solid_type*/,ref Next_tag);if (Next_tag == Tag.Null) break;int t, subType;theUFSession.Obj.AskTypeAndSubtype(Next_tag,out t, out subType);if (subType == 0/*UF_solid_body_subtype*/)theUFSession.Modl.PutListItem(list, Next_tag);} while (true);bool isOpen;theUFSession.Ui.IsListingWindowOpen(out isOpen);if (!isOpen) theUFSession.Ui.OpenListingWindow();int sum;theUFSession.Modl.AskListCount(list,out sum);for (int i = 0; i < sum;i++ ){Tag t;theUFSession.Modl.AskListItem(list, i, out t);theUFSession.Ui.WriteListingWindow(t.ToString());}/*Treat all the arguments with the"Output to be freed " annotation as an output parameter.* The system takes care of freeing memory.*/}catch (NXException ex){UI.GetUI().NXMessageBox.Show("error!", NXMessageBox.DialogType.Error, ex.Message);。

2_UG二次开发应用框架

2_UG二次开发应用框架

第2章二次开发应用框架2.1二次开发工程项目的创建二次开发工程的创建常用有3种:UG/Open AppWizard、Win32应用程序向导和MFC应用程序向导。

UG应用开发程序采用了动态链接库(DLL,Dynamic Link Library)技术,使用上述任何一种应用向导开发程序,最终生成的结果都是DLL 文件,提供UG进程加载。

UG内部应用程序开发规定以动态链接库方式对其进行功能扩展和应用开发。

动态链接库被映射到其他应用程序空间中执行,与链接它的应用程序可以看成是一体的。

在Visual 中将应用程序编译链接生成动态链接库文件(后缀名为.dll),UG启动时会自动加载动态链接库文件供用户调用,从而实现了应用开发程序与UG平台的无缝集成。

1、利用UG/Open AppWizard向导1.4节已经详细介绍了使用UG/Open APPwizard 创建一个简单的First Project程序。

该向导是UG软件本身提供的应用向导,随着UG版本和开发环境的升级而升级。

该向导操作简便,运行稳定,可以快速构建开发体系,但通常不支持MFC类库,因此常常应用于辅助工具的开发。

2、利用Win32应用程序向导(DLL)应用开发程序框架还可以采用Win32 DLL向导创建。

Win32 DLL向导创建Windows常规DLL,它只能导出C样式函数,不能导出C++类、成员函数和重载函数,同UG/Open AppWizard向导创建工程项目一样不支持 MFC。

利用Win32应用程序向导创建工程项目,包括两个步骤:新建项目和设置项目属性。

步骤一:新建项目打开Visual ,选择新建项目菜单项,将显示如图2-5所示的新建项目对话框。

在项目类型框中选择Visual C++项目下的Win32选项,在模板框中选择Win32 项目选项,在名称框中输入项目名称,在位置框中设置合适的路径,单击确定按钮接受输入。

图2-5 新建项目对话框这时将显示如图2-6所示的Win32应用程序向导-UFSolution对话框,选择应用程序设置属性页,在其中选择Dll,直接单击完成按钮建立新项目。

UG软件二次开发基础2

UG软件二次开发基础2
extern int UF_CURVE_create_point(double point[3], tag_t* point);
在绝对坐标系中产生一个点。
30
标准命名法
一般函数开头的大写部分表示此函数所在 UG/Open API的库函数名称,如 UF_CURVE_create_point 即必须在头文件中加以声明,如 # include <uf_part.h> # include <uf_curve.h>
17
外部UF

优点
调用灵活,用途广泛 不必启动UG,属于后台运行,节约运行 时间。

18
外部UF

缺点
不能和UG Gateway发生联系,因而不 能利用UG的显示窗口动态反馈操作结果, 同时也不能实现一些须由用户完成的交互 操作 。
19
外部UF

外部UF用途
一般多用于Part文件的大量创建、存
指向该数据结构的指针类型
结构类型
_u_t
_u_p_t _f_t
联合类型
指向联合的指针 指向函数的指针
37
最常用的UF数据类型

tag_t 它是任何确定存在的UG对象的唯一
标识,这里对象是指UG的Part、Object、
Feature、Expression等
38
tag_t 定义
typedef unsigned int tag_t, *tag_p_t;
15
外部UF和内部UF
程序运行环境不同,
外部UF UF程序 内部UF
16
外部UF和内部UF

外部UF程序
独立于UG之外的普通C程序,是可执 行程序(*.EXE),通过UG的运行库 调用API的功能。

ug二次开发介绍

ug二次开发介绍

ug二次开发介绍————————————————————————————————作者:————————————————————————————————日期:UG二次开发功能简介Unigraphics(UG)是美国UGS公司的集CAD/CAM/CAE于一体的软件集成系统,功能覆盖整个产品的开发过程:从概念设计、功能工程、功能分析到制造,在航空航天、汽车、机械、模具和家用电器等工业领域的应用非常广泛。

UG软件提供了功能强大的二次开发(应用开发)模块,利用该模块可对UG系统进行用户化裁减和开发。

UG/Open是一系列UG开发工具的总称,主要由UG/Open API、UG/Open GRIP、UG/Open MenuScript和UG/Open UIStyler四部分组成。

UG/Open API (又称User Function ),是一个允许程序访问并改变UG对象模型的程序集。

UG/Open API 封装了近2000个UG操作的函数,它可以对UG的图形终端、文件管理系统和数据库进行操作,几乎所有能在UG界面上的操作都可以用UG/Open API 函数实现。

UG/Open API程序按其连接方式分为两种,内部模式(Internal环境) 和外部模式(External 环境)。

采用内部模式开发的程序只能在UG 的界面环境(Session)下运行,其优点是可以连接的更快且程序更小并能与用户交互;采用外部模式开发的程序能在操作系统中独立执行,其缺点是无法实时显示图形与用户交互,值得注意的是部分函数只能在内部模式下执行。

UG/Open API 程序使用的是C 或C + + 编程语言。

基于Windows操作系统的UG二次开发可以在VC + + 6.0或环境下进行,VC提供的各类库函数和丰富的编程资源进一步提升了UG/Open API的功能,同时也为集成企业原有的C/C++语言程序提供了方便。

UG/Open GRIP ( Graphics Interactive Programming) 是一种专用的图形交互编程语言,与UG系统集成,可以实现UG环境下的大多数应用操作。

ug二次开发介绍

ug二次开发介绍

ug二次开发介绍————————————————————————————————作者:————————————————————————————————日期:UG二次开发功能简介Unigraphics(UG)是美国UGS公司的集CAD/CAM/CAE于一体的软件集成系统,功能覆盖整个产品的开发过程:从概念设计、功能工程、功能分析到制造,在航空航天、汽车、机械、模具和家用电器等工业领域的应用非常广泛。

UG软件提供了功能强大的二次开发(应用开发)模块,利用该模块可对UG系统进行用户化裁减和开发。

UG/Open是一系列UG开发工具的总称,主要由UG/Open API、UG/Open GRIP、UG/Open MenuScript和UG/Open UIStyler四部分组成。

UG/Open API (又称User Function ),是一个允许程序访问并改变UG对象模型的程序集。

UG/Open API 封装了近2000个UG操作的函数,它可以对UG的图形终端、文件管理系统和数据库进行操作,几乎所有能在UG界面上的操作都可以用UG/Open API 函数实现。

UG/Open API程序按其连接方式分为两种,内部模式(Internal环境) 和外部模式(External 环境)。

采用内部模式开发的程序只能在UG 的界面环境(Session)下运行,其优点是可以连接的更快且程序更小并能与用户交互;采用外部模式开发的程序能在操作系统中独立执行,其缺点是无法实时显示图形与用户交互,值得注意的是部分函数只能在内部模式下执行。

UG/Open API 程序使用的是C 或C + + 编程语言。

基于Windows操作系统的UG二次开发可以在VC + + 6.0或环境下进行,VC提供的各类库函数和丰富的编程资源进一步提升了UG/Open API的功能,同时也为集成企业原有的C/C++语言程序提供了方便。

UG/Open GRIP ( Graphics Interactive Programming) 是一种专用的图形交互编程语言,与UG系统集成,可以实现UG环境下的大多数应用操作。

UG二次开发之Open和NXOpen

UG二次开发之Open和NXOpen

Open C、Open C++和NXOpen C++混合开发作者:白途思ID:begtostudy三者的关系我在以前的文章中讲过了。

但是他们都不是孤立的,互相可以使用。

下面举了个不同部分用不同的代码,函数形式的是Open C,也就是API了类形式不带NXOpen的是Open C++,否则是NXOpen C++了。

Tag是所有之间的桥梁。

//NXOpen header files#include <NXOpen/Session.hxx>#include <NXOpen/Part.hxx>#include <NXOpen/PartCollection.hxx>//#include <NXOpen/Point.hxx>#include <NXOpen/Line.hxx>#include <NXOpen/CurveCollection.hxx>#include <NXOpen/Arc.hxx>#include <NXOpen/NXObjectManager.hxx>//#include <NXOpen/NXString.hxx>//UFunc Headers#include <uf_curve.h>#include <uf.h>#include <uf_csys.h>#include <uf_part.h>// UGOpen headers#include <ug_session.hxx>#include <ug_part.hxx>#include <ug_line.hxx>#include <ug_arc.hxx>#include <ug_coord_sys.hxx>#include <coord_sys.hxx>int main(int argc, char* argv[])...{int errorCode;/**//* Here, we can initialize session using :1. Open C API environment2. Open C++ API environment3. NX Open C++ APIs.User has to initialize, UG Session using Open C++ as well as NX Open C++, session also.*//**//* Using Open C API, we can initialize UGSession as follows *//**//*errorCode = UF_initialize();if ( 0 != errorCode ){return errorCode;}*/NXOpen::Part *part1;/**//* Using Open C++ API, we can initialize UGSession as follows */ UgSession::initialize();/**//* Using NX Open C++ API, we can initialize UGSession as follows */ NXOpen::Session *theSession = NXOpen::Session::GetSession();/**//* Create a new part.To create new part one can use :1. Open C API environment2. Open C++ API environment3. NX Open C++ APIs.*/char* partName = "InteropWithOpenCOpenCPPAndNXOpenCPP.prt";/**//* Using Open C API, we can create new part as follows *//**//*tag_t UF_partTag;UF_PART_new(partName,2,&UF_partTag);*//**//* Using Open C++ API, we can create new part as follows */UgPart *UGPart = UgPart::create(partName, Inches );/**//* Using NX Open C++ API, we can create new part as follows *//**//*NXOpen::NXString partName = "InteropWithOpenCOpenCPPAndNXOpenCPP.prt"; part1 = theSession->GetParts()->NewDisplay(partName, NXOpen::Part::UnitsInches); *///--------------------------------------------------------------------------// Interop between NX Open C++ APIs and Open C/**//* Create a line using NX Open C++ APIs*/NXOpen::Point3d point3d1(-2.17019791346668, 1.13935390457001, 0);NXOpen::Point3d point3d2(-0.714356813182783, 1.13935390457001, 0);NXOpen::Line *line1;line1 = theSession->GetParts()->GetWork()->GetCurves()->CreateLine(point3d1, point3d2);/**//* Retrieve line coordinates using Open C API */tag_t line_tag=line1->GetTag();UF_CURVE_line_t line_coords;UF_CURVE_ask_line_data(line_tag, &line_coords);//--------------------------------------------------------------------------// Interop between Open C++ and NX Open C++ APIsPoint3 UGPt1(line_coords.start_point[0]+5,line_coords.start_point[1]+5, line_coords.start_point[2]+5);Point3 UGPt2(line_coords.end_point[0]+5,line_coords.end_point[1], line_coords.end_point[2]);UgLine* UGLine;UGLine = UgLine::create(UGPt1, UGPt2);UgCoordSys *UGCoordsys;UGCoordsys = UgSession::getWCS();CoordSys Sys = UGCoordsys->getCoordSys();// Creating ArcUgArc* OpenCPPArc = UgArc::create(5.0, 0.25, 3.14, Sys);tag_t arc_tag = OpenCPPArc->getTag();NXOpen::Arc *nxArc = (NXOpen::Arc*)NXOpen::NXObjectManager::Get(arc_tag);double nxArc_radius = nxArc->GetRadius();double nxArc_start_angle = nxArc->GetStartAngle();double nxArc_end_angle = nxArc->GetEndAngle();//------------------------------------------------------------------------------------/**//* Save this work part.To save this work part one can use :1. Open C API environment2. Open C++ API environment3. NX Open C++ APIs.*//**//* Using Open C API, we can save this part as follows *//**//*UF_PART_save();*//**//* Using Open C++ API, we can save this part as follows *//**//*UGPart->save();*//**//* Using NX Open C++ API, we can save this part as follows *//**//* To get the part from the Part tag */part1 = (NXOpen::Part*)NXOpen::NXObjectManager::Get(UGPart->getT ag());/**//* To save work part using NXOpen automation APIs */NXOpen::PartSaveStatus *partSaveStatus;part1->Save(NXOpen::Part::SaveComponentsTrue, NXOpen::Part::CloseAfterSaveTrue, &partSaveStatus);/**//* To close all parts using NXOpen automation APIs */theSession->GetParts()->CloseAll(NXOpen::Part::CloseModifiedCloseModified, NULL);/**//* Terminate the session using Open C API */errorCode = UF_terminate();return 0;}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• BEFORE UG_FILE_OPTIONS
• CASCADBEL &UCDCS
• END_OF_BEFORE
• MENU UG_UCDCS
• BUTTON • LABEL • ACTIONS
UG_UCDCS_NEW &production design Application
编写消息映射代码
• 这一步的作用是通过编写VC程序,使菜单 脚本文件和工具栏脚本文件的内容映射在 UG中。在本例中在UG界面下的到如下菜 单。
创建UG风格的对话框
• 首先应用UIStyler设计UG风格的对话框 • 编写文件代码 • 编译和运行应用程序
• BUTTON • LABEL • ACTIONS
UG_UCDCS_database &database
Application
创建工具栏脚本文件
• 在文件夹Application中创建一个位图文件New.bmp作为工具图 标,位图标准大小为24x24像素。在startup文件夹中创建工具栏 脚本文件FileNew.tbr。创建方法与创建菜单脚本文件相同。代 码如下。
注册工程路径
• 在用户路径文件custom_dirs.dat中输入工 程路径F:\UCSDCS\FileNew,该文件通 常位于UG根目录下的UGⅡ\menus文件夹 中。注意,语句不能被“#”注释掉。由于程 序未编写消息映射代码,此时选择 production design无效。
注册工程路径
• 运行VC程序,打开UG,在文件菜单下会显 示如下菜单栏。
• TITLE 实用工具
• VERSION 170 • DOCK TOP
• BUTTON UG_UCDCS_database • LABEL &database • BITMAP new.bmp
• BUTTON UG_UCDCS_New • LABEL &production design • BITMAP new.bmp
NXOpenUG二次开发架构
MFC
使用MFC应用向导
接步 骤 三
方: 式创 的建
静 态 。链
DLL
菜单脚本文件
• 在startup文件夹中创建菜单脚本文件Startup、FileNew.men,具体方 法是在记事本中输入如下代码,保存后改名为.men文件。
• VERSION 139
• EDIT UG_GATEWAY_MAIN_MENUBAR
相关文档
最新文档