最新NXOpenUG二次开发架构
- 格式:ppt
- 大小:1.16 MB
- 文档页数:6
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章二次开发应用框架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二次开发介绍————————————————————————————————作者:————————————————————————————————日期: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二次开发功能简介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环境下的大多数应用操作。
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;}。
NX⼆次开发-装配篇详解(UFUNC,NXOPENC++,C#API介绍)【更新⽇期202。
这篇⽂章的内容涉及⽐较多,我⼀次写不完,要分⼏次去更新。
相信很多⼈在刚开始学NX装配相关⼆次开发的时候,都会有点搞不清楚,什么是实例,什么是原型这些专业术语等等。
我在刚接触的时候,也是很懵逼的。
今天我整理了⼀下,做个装配篇特辑。
------------------------------------------------------------------------Assembly装配的常⽤术语在装配环境中总保持只有⼀个部件是当前活动的,它叫⼯作部件(workpart)。
⽤户创建的所有UF对象、表达式等都是在⼯作部件中创建。
此外,还有⼀个叫当前显⽰部件(displaypart)的概念。
在UG的某些应⽤(如Modeling)时,当前显⽰部件和⼯作部件可以不同。
装配图是⼀类特殊的Part,它本⾝由多个Part所组成。
装配图中的各个⼦图称为组件,组件本⾝也可以是装配图。
装配图中并不包含⼦图,⽽是⼦图的再现。
⼦图的所有再现都来⾃⼦图的原型,⼦图的每个再现都叫做⼦图的实例。
Prototype Tag:Part或Object在原本⽂件中的tag。
Instance Tag:⼦Part被装配到⽗档中作为Instance的tag,是指⽤户绝对装配次数。
Occurrence Tag:⼦Part或Object装配到主⽂档中作为Occurrence的tag。
它只是⼀种映像,当同⼀个⼦Part或Object在主⽂档中被装配多次,它们的Occurrence Tag是不同的,分别表明了装配的先后次序以及在主⽂档中不同的映像。
装配树的结构UG装配是以树型结构组织装配中的部件,⼀个部件⽂件中只能有⼀棵装配树,即只能存在⼀个装配根节点。
装配中的节点由部件原型、部件事件与部件实例3种对象进⾏描述。
部件事件(partoccurrence)是装配环境下对实际存在的部件模型(即部件原型)的⼀种引⽤,部件事件也可以理解为指向部件原型的指针。
3_UG二次开发实用教程第三章
UG(Unigraphics)是Siemens PLM Software公司的一款三维产品开
发软件,用于产品设计和建模。
UG二次开发指的是在UG软件的基础上,
根据用户需求进行定制开发,以满足特定的设计和建模需求。
UG二次开
发可以提供更加强大和便捷的功能和工具,提高效率和产品质量。
第三章主要介绍UG二次开发的实用教程,涵盖了以下内容:
1.UG的二次开发方式:介绍了UG二次开发的两种方式,即通过UG
自带的API进行开发和使用外部编程语言进行开发。
通过API开发可以更
好地利用UG的内置功能和工具,而外部编程语言开发可以实现更加复杂
和个性化的功能。
2.UG二次开发的基本原理:讲解了UG二次开发的基本原理,包括UG
的对象模型和数据结构,以及如何通过API或外部编程语言进行访问和操作。
通过学习本章的内容,读者可以了解UG二次开发的基本原理和方法,掌握常用的UG二次开发工具和技巧,以及应用UG二次开发实现常见设计
和建模任务的能力。
同时,本章还为读者提供了进一步深入学习和实践的
参考资料和案例。
3.1.1 UG 二次开发工具的选择UG/Open 是一系列UG 开发工具的总称, 主要由UG/Open API, UG/Open GRIP, UG/Open MenuScript 和UG/Open UIStyler 四部分组成。
( 1) 选用UG/Open API 作为开发工具。
它是一个允许程序访问并改变UG 对象模型的程序集, 它封装了近2000 个UG 操作的函数, 可以对UG 的图形终端、文件管理系统和数据库进行操作, 几乎所有能在UG 界面上的操作都可以用UG/Open API 函数实现, 该程序使用C 或C++编程语言。
( 2) 选用MFC 开发UG 对话框界面。
作为当前广泛应用的MFC 应用向导( MFC APP2Wizard) 除提供了UG/Open UIStyler 所涉及的控件之外, 还提供了ListView、TreeView、进度条等更为丰富的控件,是一种可视化的编程工具,使用方便,还可以充分利用Windows 的消息机制,编写出完美的应用程序,大大方便了开发人员的编程工作。
( 3) 选用UG/Open MenuScript 创建用户化菜单。
支持UG 主菜单和快速弹出式菜单的设计和修改, 可以改变UG 菜单的布局, 添加新的菜单项以执行用户应用开发程序, 最后生成一个菜单脚本文件( *.men) , 供UG 系统调用以触发应用程序。
3.1.2 配置开发环境及工程路径( 1) 建立工程目录结构。
新建工程目录E:\ug_develop,并在该路径下新建文件夹Startup( 用于存放*.men 文件,即菜单脚本文件) 、Application( 用于存放具体的功能扩展程序文件) 。
在用户路径文件custom- dirs.dat 中输入上述工程路径。
UG 启动时根据用户注册的工程路径读取菜单脚本文件。
( 2) 以VC6.0 提供的MFC AppWizard( dll) 建立工程项目, 创建一个静态链接MFC 方式的DLL。
简介编程指南概述NX编程指南目的是介绍”NX Open Application Programming Interface(API)工具包”。
NX编程指南为每一位新NX Open程序猿介绍使用”NX Open工具包”开发NX自动化解决方案时经常遇到的所有问题。
编程指南不提供”NX Open APIs”的完整定义。
完整的API定义可以在” NX Open Reference help”中找到,对每一个支持NX Open的特定语言,都提供一份参考帮助文档(例如NX Open for Java Reference Guide)。
NX提供了一套全面的自动化工具集,包括知识融合和UI Styler。
这些和其他自动化工具的用户文档可以在NX帮助图书馆的自动化章节找到。
本指南只提供了NX Open如何与其他工具工作的概述。
NX自动化视觉继承自设计理念的开放特性,NX提供了一套全面的工具包,可以让您在产品的生命周期中捕获和保存领域知识(domain knowledge)。
开放自动化视觉中心围绕着以下能力:提供灵活的解决方案来捕获工作流程知识的能力,自动化能力和定义用户与NX环境交互的能力,开放式自动化视觉中心。
Siemens PLM Software公司致力于提供能够在异构网络环境下优秀工作的解决方案,并努力支持广泛的语言,平台和出现的新技术。
从简单的自定义实用程序,到先进的编程工具包,”NX Open”产品套件提供了广泛而灵活的环境来自动化和定制NX。
Siemens PLM Software公司将努力提供以下”NX Open”特点:•在所有语言下(包括知识融合),一个统一的对象模型•结合流行的现代编程语言•支持所有的语言和平台的日志记录和回放•完整的日志记录和自动化覆盖率•与高端开发环境集成•利用Teamcenter管理日志和方案“NX Open”提供了以下好处:•定制NX以满足您的特定行业和流程的需求•通过自动执行复杂的重复性任务减少产品上市时间•通过捕捉和重用的公司和行业最佳实践减少返工•保持NX的外观和感觉,以减少使用者训练时间Siemens PLM Software公司将努力确保NX版本之间的高度兼容性,以维持你的自动化投资。
UG二次开发模板UG软件是由德国西门子公司开发的,是一款面向PLC编程的工程软件。
UG软件具有强大的PLC编程功能,可以满足不同行业和应用的需求。
UG软件支持二次开发,用户可以根据自己的需求进行自定义编程和功能扩展。
本文将介绍UG软件的二次开发模板。
UG软件的二次开发主要包括两部分:PLC程序编程和界面开发。
PLC程序编程是UG软件的核心功能,用户可以通过编写PLC程序来控制设备的运行。
UG软件提供了多种编程语言的支持,包括Ladder Diagram (LD)、Instruction List(IL)、Structured Text(ST)等。
用户可以根据自己的编程习惯和需求选择合适的编程语言。
UG软件的界面开发可以通过组态工具实现。
组态工具提供了丰富的控件库,用户可以通过拖拽控件和设置属性来设计界面。
UG软件还支持界面与PLC程序的绑定,用户可以通过界面操作来控制PLC程序的执行。
以下是UG软件二次开发的模板代码:1.PLC程序编程:```Structured TextPROGRAM MainVARx:BOOL;END_VARNETWORK1:x:=TRUE;END_NETWORK```以上代码是一个简单的PLC程序,它定义了一个变量x,并将其赋值为TRUE。
2.界面开发:```xmlTitle="UG界面" Height="350" Width="525"><Grid><Button Content="Start" Width="100" Height="50"Click="Button_Click"/></Grid></Window>```以上代码是一个简单的界面,它包含一个按钮,当按钮被点击时触发Button_Click事件。
UG二次开发实用教程UG(Unigraphics)二次开发是指在UG基础上进行功能扩展和定制开发,以满足特定需求。
UG二次开发可以帮助用户提高工作效率、简化操作流程并增强软件功能。
本文将介绍UG二次开发的基本原则、常用技术和实用案例。
一、UG二次开发的基本原则1.熟悉UG软件架构:UG软件由多个模块组成,包括界面模块、内核模块、数据库模块等。
在进行二次开发前,需要熟悉UG软件的架构和各个模块的功能,了解开发的具体目标和需求。
2.选择合适的开发语言和工具:UG二次开发可以使用多种开发语言和工具,如C++、VB、C#等。
选择合适的开发语言和工具有助于提高开发效率和开发质量。
3.合理规划开发流程:UG二次开发需要进行合理的开发流程规划,包括需求分析、设计、编码、测试和部署等阶段。
合理规划开发流程可以提高开发效率和软件质量。
二、常用的UG二次开发技术1.基于UGOpen进行二次开发:UGOpen是UG软件的二次开发接口,可以实现UG软件的功能扩展和定制开发。
UGOpen提供了丰富的API和类库,可以方便地进行功能扩展和定制开发。
2.使用C++进行开发:C++是一种高效、灵活的编程语言,适合进行UG二次开发。
C++可以通过UGOpen接口与UG软件进行交互,实现自定义功能的开发。
3.使用VB进行开发:VB是一种易学易用的编程语言,适合进行简单的界面和脚本开发。
VB可以通过UGOpen接口与UG软件进行交互,实现自定义界面和工具的开发。
4.使用C#进行开发:C#是一种面向对象的编程语言,具有强大的开发功能和良好的可移植性。
C#可以通过UGOpen接口与UG软件进行交互,实现自定义功能的开发。
三、UG二次开发的实用案例1.增加自定义功能:UG二次开发可以增加一些常用的自定义功能,例如自动化建模、批量处理、数据导入导出等。
通过二次开发,可以提高工作效率,简化操作流程。
2.定制界面和工具:UG二次开发可以定制界面和工具,使其更加符合用户需求。
一种U G 二次开发的新方法3宋玉杰(大庆石油学院机械科学与工程学院)石景文(大庆油田试油试采公司) 摘要:通过对U G 提供的各种二次开发工具的研究和比较,提出了U G/Open GRIP 与VB 1net 相结合的二次开发方法,描述了实现这种新方法的关键步骤,并给出了这种二次开发新方法的应用实例。
在实际应用中验证了这种新方法的可行性,并且在结论中给出了拓宽这种方法应用范围的途径。
关键词:二次开发;U G/Open GRIP ;CAD ;U G基金论文:黑龙江省自然科学基金资助项目“螺杆泵举升性能评价技术研究”(E2004-30)1 引言U G N X410提供的二次开发方法主要有四种:NX Open for C/C ++、N X Open for java 、NX Open for 1net 和NX Open for GRIP [1]。
这四种二次开发接口都是继承自U G 的一组通用A PI 函数。
N X Open for C/C ++其实包括两种开发方法:一种是NX Open for C ;另一种是NX Open for C ++。
NX Open for C 使用的是一组A PI 函数对U G 进行二次开发,它的功能是最强的,可以实现所有在U G 界面中能实现的功能。
NX Open for C ++是一组面向对象的接口,支持继承、封装、多态这些面向对象特性。
它的功能和NX Open for C 是完全相同的。
虽然NX Open for C/C ++的功能是最强的,但是使用它进行二次开发对于大多数机械工程师来说难度太大。
NX Open for java 是用于J ava 平台的二次开发接口,只适用于必须使用J ava 开发平台的用户。
NX Open for 1net 是针对微软的1net 框架提供的二次开发接口,可以使用VB 1net 和C #进行开发。
虽然VB 1net 及C #简单易学,但是据作者实际开发经验来看,NX Open for 1net 类库中提供的函数比NX Open for C/C ++少,功能不强。