UG二次开发之NX对象模型

合集下载

基于UGNX的二次开发方法及其实现

基于UGNX的二次开发方法及其实现

18科技咨询导报 Science and Technology Consulting Herald2007 NO.17Science and Technology Consulting Herald高 新 技 术1 引言UG (Unigraphics)软件起源于美国麦道飞机工业公司,从20世纪60年代起UG就一直代表着工程制造业CAD/CAM软件产品的最高水平。

20世纪90年代,UG进入中国市场,受到广大CAD/CAM用户的欢迎。

但是由于该软件大多是通用支撑软件,覆盖面较广,包含的内容也比较多,因此,用户引进UG软件后,需要进行不同程度的二次开发,以便使其在本企业中淋漓尽致地发挥作用。

2 UG/Open API二次开发工程的创建UG/Open API程序使用的是C或C++编程语言,基于Windows 2000操作系统的UG软件的开发可以在VC++6.0环境下进行。

因为编制UG/Open API程序牵涉到UG提供的头文件(*.h文件)、库文件(*.lib文件)和C语言编程环境,因此需要进行一定的设置。

在VC编译环境中创建一个UG的二次开发工程有3种方法,下面分别加以说明:(1)利用UG/Open AppWizard向导创建UG/Open API工程在¥{UGII_BASE_DIR}\ugopen目录下找到名为UgOpen_v19.awx和UgOpen_v19.hlp的文件,将其复制到VC工程向导目录,例如C:\ProgramFiles\Microsoft VisualStudio\Common\MSDev98\Template\目录下。

运行VC,利用如图1所示UnigraphicsNX AppWizard V1向导创建UG应用工程,在向导第二步中,指定UG/Open应用程序创建模式是内部(Internal)*.dll方式还是外部(External)*.exe方式,并指定语言类型是C++还是C。

如果选定内部方式采用C或C++语言,则在向导第三步中需要选择程序入口方式及卸载方式,然后向导自动生成工程模板。

NX二次开发-UFUN和NXOpen结合开发中Tag_t对象与TaggedObject对象转换方法

NX二次开发-UFUN和NXOpen结合开发中Tag_t对象与TaggedObject对象转换方法

NX⼆次开发-UFUN和NXOpen结合开发中Tag_t对象与TaggedObject对象转换⽅法1本⽂通过举四个例⼦来告诉⼤家在NX⼆次开发过程中会经常⽤到UFUN和NXOpen结合去开发,在UFUN中我们得到的是Tag_t对象,在NXOpen中得到的是TaggedObject对象,这两个是需要进⾏转换的。

本⽂主要知识点为:TaggedObject->tag_t() , NXOpen::NXObjectManager::Get(BodyTag1) , feature1->JournalIdentifier()的⽤法。

23 NX11+VS201345 #include <uf.h>6 #include <uf_modl.h>7 #include <uf_obj.h>8 #include <NXOpen\NXObjectManager.hxx>9 #include <NXOpen/Features_BlockFeatureBuilder.hxx>10 #include <NXOpen/Features_FeatureCollection.hxx>11 #include <NXOpen/NXException.hxx>12 #include <NXOpen/Body.hxx>13 #include <NXOpen/BodyCollection.hxx>14 #include <NXOpen/DisplayManager.hxx>15 #include <NXOpen/PartCollection.hxx>1617 NXOpen::Session *theSession = NXOpen::Session::GetSession();18 NXOpen::Part *workPart(theSession->Parts()->Work());19 NXOpen::Part *displayPart(theSession->Parts()->Display());2021 UF_initialize();2223//⽅法1:UFUN⽅式创建块,设置块颜⾊。

UGNX基本功能和二次开发

UGNX基本功能和二次开发

UGNX基本功能和二次开发
UGNX(Unigraphics NX)是一款集成的计算机辅助设计(CAD)和计算机辅助工程(CAE)软件,由Siemens PLM Software开发。

UGNX提供了一系列基本功能和二次开发的功能,以满足不同用户的需求。

UGNX的基本功能包括几何建模、装配设计、绘图和可视化、工程分析和模拟等。

其次,UGNX具有先进的装配设计功能。

用户可以在UGNX中创建装配模型,并对模型进行装配性分析和干涉检查。

UGNX还支持装配模型的动态仿真和碰撞检测,以帮助用户优化设计并确保装配的正确性。

除了几何建模和装配设计功能,UGNX还提供了绘图和可视化功能。

用户可以使用UGNX创建二维工程图和三维可视化图像,以便更好地展示和传达设计意图。

UGNX支持多种图像输出格式,如DWG、STEP和JPEG,使用户能够与其他CAD和CAE系统进行无缝集成。

此外,UGNX还具有强大的工程分析和模拟功能。

用户可以使用UGNX 进行结构分析、热分析、流体流动分析等工程分析。

UGNX还提供了内置的仿真工具,如有限元分析(FEA)和计算流体力学(CFD),以帮助用户评估设计的性能和可靠性。

总之,UGNX是一款功能强大的CAD和CAE软件,具有几何建模、装配设计、绘图和可视化、工程分析和模拟等基本功能。

同时,UGNX还支持二次开发,允许用户根据自己的需求进行定制和扩展。

UGNX的功能和二次开发使其成为广泛应用于各行各业的设计和工程领域的首选软件之一。

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);。

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环境下的大多数应用操作。

UGNX二次开发-建模-属性操作

UGNX二次开发-建模-属性操作

UGNX⼆次开发-建模-属性操作NXObject.SetUserAttribute()是⽤于设置NXObject对象的属性,包括了多种类型,如字符串属性、整型属性、实值属性等等。

1aggedObject[] taggedObjects = _FaceSelect.GetSelectedObjects();2Face face = (Face)taggedObjects[0];3//根据属性信息添加属性4NXObject.AttributeInformation attributeInformation = new NXObject.AttributeInformation();5attributeInformation.Type = NXObject.AttributeType.String;6attributeInformation.Title = "Attribute_Face_1";7attributeInformation.StringValue = "Attribute_1_string";8face.SetUserAttribute(attributeInformation,Update.Option.Now);910//添加int属性11string intTitle = "IntAttributeTitle";12int intValue = 1;13face.SetUserAttribute(intTitle,0,intValue,Update.Option.Now);1415//添加double属性16string doubleTitle = "DoubleAttributeTitle";17double doubleValue = 2.1;18face.SetUserAttribute(doubleTitle,0,doubleValue,Update.Option.Now);1920//添加字符串属性21string stringTitle = "StringAttributeTitle";22string stringValue = "stringValue";23face.SetUserAttribute(stringTitle,0,stringValue,Update.Option.Now);添加完成后,在⾯属性中可以看到如下:查看⼀个⾯的所有属性,⽤ NXObject.AttributeInformation[] attributeInformation1 = face.GetUserAttributes();1NXObject.AttributeInformation[] attributeInformation1 = face.GetUserAttributes();2UFUi theUFUi = theUFSession.Ui;3theUFUi.OpenListingWindow();4int i = 0;5foreach(var ai in attributeInformation1)6{7if (ai.Type == NXObject.AttributeType.String)8{9theUFUi.WriteListingWindow(i++.ToString() + " " + ai.Title + " "+ai.StringValue+"\n");10}11else if(ai.Type==NXObject.AttributeType.Integer)12{13theUFUi.WriteListingWindow(i++.ToString()+" "+ai.Title+" "+ai.IntegerValue.ToString()+" \n");14}15else if (ai.Type == NXObject.AttributeType.Real)16{17theUFUi.WriteListingWindow(i++.ToString() + " " + ai.Title + " " + ai.RealValue.ToString() + " \n");18}19}删除属性,NXObject.Delete***()12public void DeleteAllAttributesByType(AttributeType type);34public void DeleteAllAttributesByType(AttributeType type, Update.Option option);56public void DeleteAttributeByTypeAndTitle(AttributeType type, string title, Update.Option option);78public void DeleteAttributeByTypeAndTitle(AttributeType type, string title);910public void DeleteUserAttribute(AttributeType type, string title, bool deleteEntireArray, Update.Option option);1112public void DeleteUserAttributes(AttributeType type, Update.Option option);1314public void DeleteUserAttributes(AttributeIterator iterator, Update.Option option);。

UG二次开发教程

UG二次开发教程

UG二次开发教程UG是一种强大的三维建模软件,它提供了丰富的功能和工具,使用户能够创建复杂的三维模型。

除了它的基本功能外,UG还支持二次开发,使用户能够自定义程序来满足自己的特定需求。

本文将介绍UG二次开发的基本概念和一些常用的开发技巧。

1.增强功能:UG的基本功能通常无法满足所有用户的需求。

通过二次开发,用户可以根据自己的需求添加额外的功能,提高工作效率。

2.自定义工具:UG二次开发使用户能够创建自己的工具和工作流程。

这些工具可以根据用户的工作流程来设计,以提高工作效率。

3.自动化:UG二次开发可以通过编写脚本和宏来自动执行繁琐的任务,从而节省时间和劳动力。

4.与其他软件的集成:UG二次开发使用户能够将UG与其他软件集成,例如ERP系统、PLM系统等,实现数据的传递和共享。

下面是一些常用的UG二次开发技巧:1.学习编程语言:UG支持多种编程语言,开发人员应该选择其中一种来学习。

C++是UG开发的主要语言,因此建议开发人员首先学习C++语言。

2.掌握UGAPI:UG提供了一组API(应用程序接口),用于访问和操作UG的功能。

开发人员应该熟悉这些API,并在开发过程中灵活运用。

3.阅读开发文档:UG提供了详细的开发文档,包括API参考、示例代码等。

开发人员应该仔细阅读这些文档,并通过实践来理解其中的原理和用法。

5. 使用UG工具包:UG提供了一些工具包,用于二次开发。

例如,UG Open API Toolkit包含用于UG二次开发的示例代码和工具。

开发人员可以使用这些工具包来加快开发进度。

6.加入UG开发社区:UG有一个活跃的开发社区,开发人员可以在这里分享经验和技巧,获取帮助和支持。

下面是一个UG二次开发的简单实例,演示了如何创建一个自动生成椅子模型的工具:1.创建一个新的UG插件项目。

2.在插件项目中编写代码,实现椅子模型的生成算法。

代码可以利用UG的几何计算功能来创建椅子的各个部件,例如座位、背部和腿部。

UG NX软件概述及功能简介

UG NX软件概述及功能简介

UG 软件介绍1.1 UG 概述UG是Unigraphics Solutions 公司主要的CAD产品。

它主要是为机械制造企业提供包括从设计、分析到制造应用的软件,基于Windows的设计与制图产品Solid Edge,集团级产品数据管理系统MAN,产品可视为技术 ProductVision 以及被业界广泛使用的高精度边界表示的实体建模核心Parasolid 在内的全线产品。

自从UG软件出现以后,在航空航天、汽车、通用机械、工业设备、医疗器械以及其他高科技领域的机械设计和模具加工自动化的市场上得到了广泛的应用。

在美国的航空业中,大量的应用UG软件;在俄罗斯航空业,UG软件有90%以上的市场。

同时UG软件还在汽车、医疗器械、电子、高科技以及日用消费品等行业得到普遍应用。

自从1990年UG软件进入中国市场以来以其先进的理论、强大的工程背景、完善的功能模块,在中国的应用迅速推广,使中国成为其远东地区业务增长最快的国家。

该软件不仅具有强大的实体造型、曲面造型、虚拟装配和生成工程图等设计功能,而且在设计过程中可进行有限元分析、动力学分析和仿行模拟,提高设计的可靠性。

同时可用建立的三维模型直接生成数控代码,用于产品加工,处理程序支持多种类型数控机床。

另外,它所提供的二次开发语言UG/Open API,UG/Open GRIP简单易学,实现功能多,便于用户开发专用CAD系统。

具体来说,该软件具有以下特点:(1)具有统一的数据库,真正实现了CAD、CAM、CAE等各种模块之间的无数据交换的自由切换,可实施并行工程;(2)采用复合建模技术,可将实体建模、曲面建模、线框建模、显示几何建模与参数化建模为一体;(3)用造型来设计零部件,实现了设计思想的直观描述;(4)充分的设计柔性,使概念设计成为可能;(5)提供了辅助设计与辅助分析的完整解决方案;(6)图形和数据的绝对一致及工程数据的自动更新。

使用UG对公司而言,主要优点:通过优化设计,节约了材料和加工时间,降低了成本。

UG二次开发之NX_Open编程指南

UG二次开发之NX_Open编程指南

简介编程指南概述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二次开发NXOpen

UG二次开发NXOpen

UG二次开发NXOpen有人说python是脚本语言,在进行NX的二次开发时,不能像C++、.Net、Java那样能编译成dll文件,也就是说自己的代码实现完全暴露在外面,所以NXOpen-python没有什么价值,仅能用于学习及爱好其实也不完全是这样,用python进行NXOpen二次开发一是为了学习,二是python用起来确实方便,而且掌握NXOpen二次开发的关键不在于语言,而在于对NX软件的使用熟练度,至于一定的源码保护,python也可以实现,NX中也能使用,需要用到的模块:easycython,举个简单的例子import NXOpendef testPYD():#打印“testPYD”,你可以实现其它任意不想给别人看见的功能theSession: NXOpen.Session = NXOpen.Session.GetSession() lw: NXOpen.ListingWindow = theSession.ListingWindowlw.Open()lw.WriteLine('testPYD!!')比如说我们想实现一个功能,具体的实现不想给别人看见,我们将以上代码保存为pydtest.pyx,然后直接在命令行输入:easycython pydtest.pyx,得到pydtest.cp36-win_amd64.pyd文件,将“cp36-win_amd64”去掉,文件名变成pydtest.pyd,为了验证效果,我们再新建一个runTestPyd.py文件,文件内容如下:from pydtest import testPYDdef main():testPYD()if __name__ == '__main__':main()将该文件与上面的pydtest.pyd放到同一文件夹,然后在NX中ALT+F8,运行runT estPyd.py可以看到,NX中能正常运行,pyd文件是不好进行反编译的,也就是说你NX二次开发的实现代码别人是看不见的。

NX二次开发资料

NX二次开发资料

NX二次开发资料N某UG二次开发手把手教你做UG二次开发1。

建立两个目录。

建立第一个目录E:\my_firt_UG,在这个目录下建立两个新的目录:E:\my_firt_UG\application和E:\my_firt_UG\tartup。

建立第二个目录E:\my_ource,用存放你的源代码。

2。

设置环境变量。

再Window中设置一个新的环境变量:UGII_USER_DIR=E:\my_firt_UG。

3。

打开UG,进入UIStyler应用(在Application菜单的最后)。

4。

设计一个对话框。

1)在"DialogTitle"一栏填入:FirtDialog,按Apply(每次输入完成后,都要按Apply,为避免啰嗦,以后不再提及)。

2)在"Cue"一栏输入:%%¥%¥¥##某%某(某(某—某—((,什么都行,呵呵。

3)在"Prefi某Name"中,把CHANGE改为MY。

4)加入四个控件。

String,PuhButton,Label和SingleSelectLit编辑对话框的各个控件。

1)改变String控件的标题,标识和长度。

Label“String”->“Inputanitem”.Identifier"STR_0"->"ITEM"Widthin...0->202)改变PuhButton控件的标题,标识和回调函数的名字。

Label"PuhButton"->"Import"Identifier"ACTION_1"->"IMPORT"callback"action_1_act_cb"->import_cb把"CreateDialog"激活。

NXUG二次开发—UI—内部UI的使用

NXUG二次开发—UI—内部UI的使用

NXUG二次开发—UI—内部UI的使用NXUG二次开发是指在NXUG软件的基础上进行二次开发,以满足用户特定的需求。

在二次开发中,UI设计是一个非常重要的环节。

本文将介绍NXUG二次开发中内部UI的使用,包括如何使用内部UI来美化界面,提高用户体验等。

首先,内部UI是指在NXUG中已经预先设计好的界面元素,开发者可以直接调用这些界面元素来搭建自己的界面。

内部UI可以分为两类,一类是系统自带的内部UI,另一类是用户自定义的内部UI。

系统自带的内部UI是在NXUG软件中提供的,用户可以直接使用。

用户自定义的内部UI是指用户根据自己的需求在NXUG中设计的界面元素。

在利用内部UI进行界面设计时,我们可以通过以下几个方面来进行优化:1.界面风格的选择:在界面设计中,我们可以选择不同的界面风格来满足用户的需求。

比如,选择简约风格的UI,可以使界面简洁明了,给用户带来舒适的体验;选择扁平化风格的UI可以使界面看起来现代化,更符合时下的设计潮流。

2.颜色的搭配:在界面设计中,我们可以根据不同的功能模块选择不同的颜色搭配,以便用户能够更清晰地识别不同的功能。

同时,颜色的搭配也要遵循一定的原则,比如不同颜色之间的对比度要适中,色彩要和谐统一等。

3.字体的选择:在界面设计中,字体的选择也非常重要。

合适的字体可以使界面更加美观,同时也要注意字体大小和样式的选择,以便用户能够更方便地阅读信息。

4.布局的优化:在界面设计中,布局的优化也是至关重要的一环。

合理的布局可以使界面更加美观,同时也要考虑到用户的习惯和使用习惯,使界面更加易用。

通过上述的优化措施,我们可以使界面更加美观,提高用户体验,使用户更加喜欢使用我们的软件。

总结起来,NXUG二次开发中内部UI的使用是非常重要的,通过合理的界面设计和优化,可以提高用户体验,增加用户的粘性。

在使用内部UI时,我们可以根据不同的需求选择不同的界面风格、颜色搭配、字体和布局等。

通过这些优化措施,我们可以使界面更加美观,提高用户的使用体验,从而更好地满足用户的需求。

NXOpenUG二次开发架构

NXOpenUG二次开发架构

设置UG应用开发环境
选择菜单命令 Tools→Options ,弹出Options 对话框。选择 Directories 选项卡,分别在 Show directories for 下拉菜单的两Байду номын сангаас 选项Include files 和 Libray files 中添加UG UFopen 文件夹的路径。
? BEFORE UG_FILE_OPTIONS
? CASCADE_BUTTON
UG_UCDCS
? LABEL &UCDCS
? END_OF_BEFORE
? MENU UG_UCDCS
? BUTTON ? LABEL ? ACTIONS
UG_UCDCS_NEW &production design Application
使用MFC应用向导
。 的式方 接 链态静建创:三骤步
使用MFC应用向导
MFC
DLL
序程源始 初到得 :四骤步
使用MFC应用应用开发环境
---
可 置设 置设程工:五骤步
件文行执
设置UG应用开发环境
ugraf.exe --UG
。径路全的
编写消息映射代码
? 这一步的作用是通过编写VC程序,使菜单 脚本文件和工具栏脚本文件的内容映射在 UG中。在本例中在UG界面下的到如下菜 单。
创建UG风格的对话框
? 首先应用UIStyler设计UG风格的对话框 ? 编写文件代码 ? 编译和运行应用程序
创建用户菜单和工具图标
? 创建菜单脚本文件 ? 创建工具栏脚本文件 ? 注册工程路径
菜单脚本文件
? 在startup文件夹中创建菜单脚本文件Startup、FileNew.men,具体方 法是在记事本中输入如下代码,保存后改名为.men文件。

基于UGNX的二次开发方法及其实现

基于UGNX的二次开发方法及其实现

18科技咨询导报 Science and Technology Consulting Herald2007 NO.17Science and Technology Consulting Herald高 新 技 术1 引言UG (Unigraphics)软件起源于美国麦道飞机工业公司,从20世纪60年代起UG就一直代表着工程制造业CAD/CAM软件产品的最高水平。

20世纪90年代,UG进入中国市场,受到广大CAD/CAM用户的欢迎。

但是由于该软件大多是通用支撑软件,覆盖面较广,包含的内容也比较多,因此,用户引进UG软件后,需要进行不同程度的二次开发,以便使其在本企业中淋漓尽致地发挥作用。

2 UG/Open API二次开发工程的创建UG/Open API程序使用的是C或C++编程语言,基于Windows 2000操作系统的UG软件的开发可以在VC++6.0环境下进行。

因为编制UG/Open API程序牵涉到UG提供的头文件(*.h文件)、库文件(*.lib文件)和C语言编程环境,因此需要进行一定的设置。

在VC编译环境中创建一个UG的二次开发工程有3种方法,下面分别加以说明:(1)利用UG/Open AppWizard向导创建UG/Open API工程在¥{UGII_BASE_DIR}\ugopen目录下找到名为UgOpen_v19.awx和UgOpen_v19.hlp的文件,将其复制到VC工程向导目录,例如C:\ProgramFiles\Microsoft VisualStudio\Common\MSDev98\Template\目录下。

运行VC,利用如图1所示UnigraphicsNX AppWizard V1向导创建UG应用工程,在向导第二步中,指定UG/Open应用程序创建模式是内部(Internal)*.dll方式还是外部(External)*.exe方式,并指定语言类型是C++还是C。

如果选定内部方式采用C或C++语言,则在向导第三步中需要选择程序入口方式及卸载方式,然后向导自动生成工程模板。

UG二次开发实用入门教程_UG对象类型及操作

UG二次开发实用入门教程_UG对象类型及操作

UG⼆次开发实⽤⼊门教程_UG对象类型及操作UG⼆次开发实⽤⼊门教程_UG 对象类型及操作(1)_Parts2014年03⽉29⽇? UG API(UFUN) ?共2924字?暂⽆评论?被围观127 阅读+ 所有的UG对象类型都通过它们唯⼀的标识tag来引⽤,这些UG对象分类如下:PartsUF objects(uf_object_types.h中说明的)Expressions(表达式)对每⼀类对象,都有UG/OPEN API中明确的函数对它们进⾏操作。

Parts对每⼀个加载到UG环境中的part⽂件,都有⼀个关联的part object代表它,也为每⼀个part object分配⼀个tag(标记符)。

⼀个UG part ⽂件(以.prt扩展名的⼆进制⽂件) 是UF objects, expressions, and Parasolid objects永久保存之地。

另外UG part ⽂件还包含下列内容:创建part的计算机类型保存part的UG版本part的历史(i.e. a log of when the part was saved, by what program, etc.)状态、描述和⽤户区的可永久保存在part⽂件中的信息。

在part中查询objects。

对Parts操作的函数UF_OBJ_cycle_objs_in_part访问part的属性。

UF_ATTR_ask_part_attrs关闭和再打开part。

UF_PART_close 和UF_PART_reopen获取part的⽂件名。

UF_PART_ask_part_name查询其它信息。

UF_PART_ask_customer_area, UF_PART_ask_description, UF_PART_ask_status设置状态、描述等信息。

UF_PART_set_customer_area, UF_PART_set_description, UF_PART_set_status查询part的历史。

今日福利:最全最经典的UG二次开发教程

今日福利:最全最经典的UG二次开发教程

今日福利:最全最经典的UG二次开发教程方法获取教程方法说明
第01章-二次开发简介
第02章-菜单条制作(Menuscript)与工具条制作(Toolbar)
第03章-UI界面制作(Pre-NX 6 UI Styler)
第04章-UI界面制作(Block UI Styler)
第05章-NX二次开发应用框架
第06章-NXOpen C(UFUN)编程基础
第07章-NXOpen 与用户界面结合
第08章111NXOpenCUFUN进阶
第09章NXOpenC属性操作专题UFUN与NXOpen结合
第10章NXOpenC部件与文件操作专题UFUN与NXOpen结合
第11章NXOpenC布局操作专题UFUN与NXOpen结合
第12章110网络流行NX工具解析专题UFUN与NXOpen结合
第13章NXOpenC草图操作专题UFUN与NXOpen结合
第14章NXOpenC装配操作专题UFUN与NXOpen结合
第15章NXOpenC其它操作UFUN与NXOpen结合
第16章132NXOpeCUFUN学员答疑
第17章NXOpenC制图模块操作专题UFUN与NXOpen结合
第18章128NXOpenC综合案例UFUN与NXOpen结合
第19章NXOpenC++基本介绍此章开始讲用NXOpen方式二次开发
第20章NXOpenC++其它UI控件的相关用法
第21章-NXOpenC++预览功能专题讲座
NX二次开发视频课件代码(资料文档)。

UG二次开发之NX对象模型

UG二次开发之NX对象模型

NX对象模型对NX的对象,根据对象的目的和对象与其他对象之间的关系,NX用不同方式来操作它们.对象可能是面向设计的(如孔特征),面向草图的(如尺寸),面向分析的(如一个节点),或面向制造的(如刀具轨迹toolpath).这一章界定了围绕NX对象模型的一些概念,来帮助开发者访问,修改NX零件中的对象.Tags标签每一个NX对象都通过一个tag(术语*实体标识符*,或EID是tag以前的称呼)来引用.一个tag 的在内存中的实际物理表示是一个无符号整数.在头文件uf_defs.h中,Tags被C语言通过typedef定义为tag_t.当NX零件被加载进内存中时,tags是零件中每一个对象独一无二的标识符,用以识别每个零件.有一个特殊的tag值NULL_TAG,不会赋给任何NX对象, NULL_TAG也在uf_def.h中定义. 虽然目前NULL_TAG被赋值为0,但是你不应该假定0就等同于NULL_TAG, 而应该使用常量符号NULL_TAG.NULL_TAG被使用在很多场合,最常用的场合是:●验证对象是否创建:习惯上, 创建对象的程序会返回新建对象的tag.如果因为某些原因(如输入参数不合适)创建失败,那么NULL_TAG就会返回.●通知循环程序的开始和结束在一个NX会话session中,每一个加载的对象都有他独一无二的tag. 然而,当跨多个NX会话时, 分配给一个对象的Tag并不是持久的,并且在相同NX会话中,当一个零件多次使用时tag也不是持久的. 而且tags可以在一个单独的Session中重用.例如,如果一个几何特征被创建,随后被删除,那么创建几何特征时分配的tag可以在随后时间分配给相同会话中创建的新的几何特征.通常,如果一个零件在会话中关闭,和关闭零件相关联的所有tags可以在随后分配给会话中未关闭的零件或新加载的零件.理解tag最重要的事就是:一个对象的tag在不同会话中有不同值,在同一个会话中,关闭并重新加载零件,关联到对象上的tag不是持久的.( UG文档中此处为persistent,但根据上下文,此处应该为非持久的).Classes of Objects对象的类所有的NX对象都通过独特的标识符(如tag)来引用.这些NX对象可以分类如下:●UFobjects(定义在uf_object_typed.h中的类型)●Expressions●Parts对大多数零件,有不同的函数对应于不同类的对象.有一个额外的对象的类可以通过OpenC和C++访问:Parasolid对象.Parasolid是NX内部使用的几何建模器.Parasolid对象也是用一个tag来标识,但是Parasolid的tag和NXtag是不兼容的. Parasolid的tag只在头文件uf_ps.h里的函数中使用.虽然我们不鼓励混合使用OpenCAPI和Parasolid函数,但是uf_ps.h里的函数可以让你直接访问嵌入在NX模型里的Parasolid基对象,或者向NX模型里添加新的Parasolid对象.UFObjectsUF对象到目前为止,NX中的最常见对象都是在头文件uf_object_types.h中定义的对象.这些对象具有某些共享信息和共享函数.但是这些对象的一个特殊子类,用以控制对象的显示的类,有额外的函数和共享信息.在UF对象间共享信息和函数所有的UF对象具有随下共享信息:● A type类型—所有的类型都在uf_object_types.h中列出并在很多函数中都会用到. 一个对象的类型可以通过UF_OBJ_ask_type_and_subtype来获得.● A subtype子类型—所有的子类型都在uf_object_types.h中列出并在很多函数中都会用到.虽然所有的对象都有能力使用子类型来更好的描述实际对象,但是不是所有的对象都使用了子类型. 一个对象的子类型也可以通过UF_OBJ_ask_type_and_subtype来获得.●Astatus状态—状态可以通过UF_OBJ_ask_status来获得.状态可以是如下的一种:1.UF_OBJ_DELETED—这个状态表明输入的tag曾被使用但是对象已经被删除.但是你不应该依赖这个来确定对象是否被删除.就像前文提到的,在一个会话中tag可以被重用,所以原来用来标记一个对象的tag可能被用来标记另外一个新的对象了.例如,你在静态变量里保存了一个对象的tag,这个对象随后被删除了,但是当你查询这个tag对用对象的状态时,可能会报告删除,或者也可能报告仍存活,此时这个独一无二的tag被用来标识一个不同的对象—这取决于tag是否被重用了.2.UF_OBJ_TEMPORARY—这个状态表明这个对象是瞬时的,并没有存到文件里.例如用UF_CSYS_create_temp_csys创建一个临时坐标系.3.UF_OBJ_CONDEMNED—这个状态表明一个对象由于关联到其他对象,仍然存在文件中.通常,这是一个对象删除的结果,但是由于这个对象被其他对象引用,又暂时不能立刻删除.当最后一个引用被移除,这个对象也就从模型中删除了.Condemned objects从不显示,但是可以安全查询. 例如矩阵,当所有依赖于这个矩阵来定位方向的对象,当这些对象的定位依赖于其他矩阵时,这个矩阵就被移除出了文件.4.UF_OBJ_ALIVE—这个状态表示这个对象仍然存活在所有UF对象中通用的方法:●naming (使用函数UF_OBJ_set_name, UF_OBJ_ask_name, andUF_OBJ_delete_name)这些函数允许访问和分配每一个单独对象的名字.●cycling (使用函数UF_OBJ_cycle_objs_in_part, UF_OBJ_cycle_all, andUF_OBJ_cycle_by_name)为了理解cycling,最好首先理解这些对象如何在内存中存储.下图1概念性的解释了这些对象怎么存储.Figure 1UFObjects这张图显示一个包含点和线但不包含圆的零件.当我们脑海中有了对象内存存储的概念后,我们现在可以从语义学上定义cycling:cycling指的是遍历这些对象并返回一个tag的过程.程序UF_OBJ_cycle_objs_in_part提供了一个过滤器来过滤它循环的对象.并且这个函数接受一个参数来限制循环对象的类型.另外这个函数只返回状态为UF_OBJ_ALIVE的对象.程序UF_OBJ_cycle_all不做任何过滤.这个循环从第一个对象开始,然后持续知道最后一个对象.当查询状态不是alive的对象时,你只能使用这个函数.例如如果你想查询矩阵(这个总是condemned),你必须使用这个程序.程序UF_OBJ_cycle_by_name通过名字过滤对象.就像UF_OBJ_cycle_all,这个循环从第一个对象开始,直到最后一个对象结束.只不过返回的对象的名字都符合指定的名字.在所有的三个函数使用场景中,cycling函数第一次调用需要使用NULL_TAG作为参数.cycling随后的调用应该使用上次调用返回的tag作为参数.当所有的对象都被返回,NX用NULL_TAG来终止循环.警告:返回的对象是无序的,对返回对象的顺序没有任何保证或暗指.所以你不应该从返回对象中假定或推测任何事情.注释:由于对象在NX中存储的方式, UF_OBJ_cycle_objs_in_part比UF_OBJ_cycle_all or UF_OBJ_cycle_by_name有效的多.所以我们推荐你在任何可能的情况下使用UF_OBJ_cycle_objs_in_part 来代替UF_OBJ_cycle_all and UF_OBJ_cycle_by_name.设置和访问属性attribute(使用uf_attr.h里的程序)每一个对象都可以分配一个或多个可用属性.属性由两个部分组成:标题title和值value.属性标题的长度限制在UF_ATTR_MAX_TITLE_LEN.和标题关联的值反应了属性的类型.例如,如果你分配了一个类型字符串属性给一个对象,属性的值必须是类型字符串.属性必须属于如下六种类型:1.根据UF_ATTR_time的属性格式,上述示例代表1996年十二月5号16:42.这是一个NX计算日期/时间的示例.一个计算日期/时间是由一个有两个整数组成的数组.第一个整数是日期.日期是通过计算今天到1970年1月1号差了多少天来获得的.程序uc4583(在uf_cfi.h中)接受一个参数作为日期计算到现在的时间差.第二个整数是时刻.程序uc4583也计算时刻.程序uc4582(在uf_cfi.h)转换NX计算日期/时间为一个代表当前日期和时间的字符串.2.对上述引用值,当表达式P1改变时,引用属性也会改变.引用值对应的字符串格式如下:<(x|X)m(.|,)n@exp_name>这里"<(x|X)" –介绍了表达式引用.大写或小写的x都可以."m(.|,)n" –m表明字段的宽度,n是精度.它模仿了了C语言里实数的格式描述符."." or "," 都可以使用,但它们会在属性值显示时被反应出来.@exp_name –表明这是一个表达式的名字.">"- 终止引用.如上述示例,如果表达式P1求值为13.579,那么属性值就为13.58.可显示的UF对象除了上文提到的信息和函数,可显示的UF对象有特有的信息和函数.为了确定一个对象是否是可显示对象,在确定了对象的类型后,可以用程序UF_OBJ_is_type_displayable判断.注释:即使一个对象拥有可显示的属性,也不意味着它会在NX窗口里显示出来.一些对象拥有可显示属性是为了和NX信息交换.可显示对象特有的信息和函数除了UF对象通用的共享信息和函数外,所有的可显示UF对象还拥有如下信息:●层layer —对象目前所在的层.可用层为1到256.●颜色color —对象当前颜色.由如下15个可用颜色额:1.UF_OBJ_BLUE2.UF_OBJ_GREEN3.UF_OBJ_CYAN4.UF_OBJ_RED5.UF_OBJ_MAGENTA6.UF_OBJ_YELLOW7.UF_OBJ_WHITE8.UF_OBJ_OLIVE9.UF_OBJ_PINK10.UF_OBJ_BROWN11.UF_OBJ_ORANGE12.UF_OBJ_PURPLE13.UF_OBJ_DARK_RED14.UF_OBJ_AQUAMARINE15.UF_OBJ_GRAY●空白状态blank status —对象目前的空白状态: UF_OBJ_BLANKED 或者UF_OBJ_NOT_BLANKED●线宽line width (也称为线密度line density) — the current width assigned to the object.The possible values are UF_OBJ_WIDTH_NORMAL, UF_OBJ_WIDTH_THICK, and UF_OBJ_WIDTH_THIN.●字体font — the current font assigned to the object. Available fonts range from 1 to 7.●高亮状态highlight status —the current highlight status of the object. This is alogical to say whether the object is highlighted or not.所有的这些信息都可以通过一个结构体UF_OBJ_disp_props_t来获得,通过访问程序UF_OBJ_ask_display_properties来获得这个结构体.可用于可显示对象的方法还包括:●设置显示属性(使用函数UF_OBJ_set_layer, UF_OBJ_set_color,UF_OBJ_set_blank_status, UF_OBJ_set_line_width, UF_OBJ_set_font, and UF_DISP_set_highlight)这些函数设置单独对象的显示属性,除了高亮状态表示异常意外,其他的属性都会存在part零件里.当文件保存时,高亮状态会自动关闭.所以UF_DISP_set_highlight只影响对象目前的显示状态.●显示对象(使用函数UF_DISP_add_item_to_display)This routine adds a new object (or updates an already existing object) to NX' display.●额外的cycling设置(使用函数UF_LAYER_cycle_by_layer)This routine cycles a part filtering the objects it returns by the layer the objects are assigned to.就像上文提到的,UF_OBJ_cycle_objs_in_part优先于其他cycling函数.这也适用于UF_LAYER_cycle_by_layer.●选择对象selecting objects (using the routines UF_UI_select_single,UF_UI_select_by_class, UF_UI_select_feature, or UF_UI_select_sketch)These routines allow selection of objects in the graphics window during an interactive NX session. UF_UI_select_by_class displays the class selection dialog that is used pervasively throughout interactive NX.装配上下文中的可显示UF对象略特殊的UF对象略。

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

NX对象模型对NX的对象,根据对象的目的和对象与其他对象之间的关系,NX用不同方式来操作它们.对象可能是面向设计的(如孔特征),面向草图的(如尺寸),面向分析的(如一个节点),或面向制造的(如刀具轨迹toolpath).这一章界定了围绕NX对象模型的一些概念,来帮助开发者访问,修改NX零件中的对象.Tags标签每一个NX对象都通过一个tag(术语*实体标识符*,或EID是tag以前的称呼)来引用.一个tag 的在内存中的实际物理表示是一个无符号整数.在头文件uf_defs.h中,Tags被C语言通过typedef定义为tag_t.当NX零件被加载进内存中时,tags是零件中每一个对象独一无二的标识符,用以识别每个零件.有一个特殊的tag值NULL_TAG,不会赋给任何NX对象, NULL_TAG也在uf_def.h中定义. 虽然目前NULL_TAG被赋值为0,但是你不应该假定0就等同于NULL_TAG, 而应该使用常量符号NULL_TAG.NULL_TAG被使用在很多场合,最常用的场合是:●验证对象是否创建:习惯上, 创建对象的程序会返回新建对象的tag.如果因为某些原因(如输入参数不合适)创建失败,那么NULL_TAG就会返回.●通知循环程序的开始和结束在一个NX会话session中,每一个加载的对象都有他独一无二的tag. 然而,当跨多个NX会话时, 分配给一个对象的Tag并不是持久的,并且在相同NX会话中,当一个零件多次使用时tag也不是持久的. 而且tags可以在一个单独的Session中重用.例如,如果一个几何特征被创建,随后被删除,那么创建几何特征时分配的tag可以在随后时间分配给相同会话中创建的新的几何特征.通常,如果一个零件在会话中关闭,和关闭零件相关联的所有tags可以在随后分配给会话中未关闭的零件或新加载的零件.理解tag最重要的事就是:一个对象的tag在不同会话中有不同值,在同一个会话中,关闭并重新加载零件,关联到对象上的tag不是持久的.( UG文档中此处为persistent,但根据上下文,此处应该为非持久的).Classes of Objects对象的类所有的NX对象都通过独特的标识符(如tag)来引用.这些NX对象可以分类如下:●UFobjects(定义在uf_object_typed.h中的类型)●Expressions●Parts对大多数零件,有不同的函数对应于不同类的对象.有一个额外的对象的类可以通过OpenC和C++访问:Parasolid对象.Parasolid是NX内部使用的几何建模器.Parasolid对象也是用一个tag来标识,但是Parasolid的tag和NXtag是不兼容的. Parasolid的tag只在头文件uf_ps.h里的函数中使用.虽然我们不鼓励混合使用OpenCAPI和Parasolid函数,但是uf_ps.h里的函数可以让你直接访问嵌入在NX模型里的Parasolid基对象,或者向NX模型里添加新的Parasolid对象.UFObjectsUF对象到目前为止,NX中的最常见对象都是在头文件uf_object_types.h中定义的对象.这些对象具有某些共享信息和共享函数.但是这些对象的一个特殊子类,用以控制对象的显示的类,有额外的函数和共享信息.在UF对象间共享信息和函数所有的UF对象具有随下共享信息:● A type类型—所有的类型都在uf_object_types.h中列出并在很多函数中都会用到. 一个对象的类型可以通过UF_OBJ_ask_type_and_subtype来获得.● A subtype子类型—所有的子类型都在uf_object_types.h中列出并在很多函数中都会用到.虽然所有的对象都有能力使用子类型来更好的描述实际对象,但是不是所有的对象都使用了子类型. 一个对象的子类型也可以通过UF_OBJ_ask_type_and_subtype来获得.●Astatus状态—状态可以通过UF_OBJ_ask_status来获得.状态可以是如下的一种:1.UF_OBJ_DELETED—这个状态表明输入的tag曾被使用但是对象已经被删除.但是你不应该依赖这个来确定对象是否被删除.就像前文提到的,在一个会话中tag可以被重用,所以原来用来标记一个对象的tag可能被用来标记另外一个新的对象了.例如,你在静态变量里保存了一个对象的tag,这个对象随后被删除了,但是当你查询这个tag对用对象的状态时,可能会报告删除,或者也可能报告仍存活,此时这个独一无二的tag被用来标识一个不同的对象—这取决于tag是否被重用了.2.UF_OBJ_TEMPORARY—这个状态表明这个对象是瞬时的,并没有存到文件里.例如用UF_CSYS_create_temp_csys创建一个临时坐标系.3.UF_OBJ_CONDEMNED—这个状态表明一个对象由于关联到其他对象,仍然存在文件中.通常,这是一个对象删除的结果,但是由于这个对象被其他对象引用,又暂时不能立刻删除.当最后一个引用被移除,这个对象也就从模型中删除了.Condemned objects从不显示,但是可以安全查询. 例如矩阵,当所有依赖于这个矩阵来定位方向的对象,当这些对象的定位依赖于其他矩阵时,这个矩阵就被移除出了文件.4.UF_OBJ_ALIVE—这个状态表示这个对象仍然存活在所有UF对象中通用的方法:●naming (使用函数UF_OBJ_set_name, UF_OBJ_ask_name, andUF_OBJ_delete_name)这些函数允许访问和分配每一个单独对象的名字.●cycling (使用函数UF_OBJ_cycle_objs_in_part, UF_OBJ_cycle_all, andUF_OBJ_cycle_by_name)为了理解cycling,最好首先理解这些对象如何在内存中存储.下图1概念性的解释了这些对象怎么存储.Figure 1UFObjects这张图显示一个包含点和线但不包含圆的零件.当我们脑海中有了对象内存存储的概念后,我们现在可以从语义学上定义cycling:cycling指的是遍历这些对象并返回一个tag的过程.程序UF_OBJ_cycle_objs_in_part提供了一个过滤器来过滤它循环的对象.并且这个函数接受一个参数来限制循环对象的类型.另外这个函数只返回状态为UF_OBJ_ALIVE的对象.程序UF_OBJ_cycle_all不做任何过滤.这个循环从第一个对象开始,然后持续知道最后一个对象.当查询状态不是alive的对象时,你只能使用这个函数.例如如果你想查询矩阵(这个总是condemned),你必须使用这个程序.程序UF_OBJ_cycle_by_name通过名字过滤对象.就像UF_OBJ_cycle_all,这个循环从第一个对象开始,直到最后一个对象结束.只不过返回的对象的名字都符合指定的名字.在所有的三个函数使用场景中,cycling函数第一次调用需要使用NULL_TAG作为参数.cycling随后的调用应该使用上次调用返回的tag作为参数.当所有的对象都被返回,NX用NULL_TAG来终止循环.警告:返回的对象是无序的,对返回对象的顺序没有任何保证或暗指.所以你不应该从返回对象中假定或推测任何事情.注释:由于对象在NX中存储的方式, UF_OBJ_cycle_objs_in_part比UF_OBJ_cycle_all or UF_OBJ_cycle_by_name有效的多.所以我们推荐你在任何可能的情况下使用UF_OBJ_cycle_objs_in_part 来代替UF_OBJ_cycle_all and UF_OBJ_cycle_by_name.设置和访问属性attribute(使用uf_attr.h里的程序)每一个对象都可以分配一个或多个可用属性.属性由两个部分组成:标题title和值value.属性标题的长度限制在UF_ATTR_MAX_TITLE_LEN.和标题关联的值反应了属性的类型.例如,如果你分配了一个类型字符串属性给一个对象,属性的值必须是类型字符串.属性必须属于如下六种类型:1.根据UF_ATTR_time的属性格式,上述示例代表1996年十二月5号16:42.这是一个NX计算日期/时间的示例.一个计算日期/时间是由一个有两个整数组成的数组.第一个整数是日期.日期是通过计算今天到1970年1月1号差了多少天来获得的.程序uc4583(在uf_cfi.h中)接受一个参数作为日期计算到现在的时间差.第二个整数是时刻.程序uc4583也计算时刻.程序uc4582(在uf_cfi.h)转换NX计算日期/时间为一个代表当前日期和时间的字符串.2.对上述引用值,当表达式P1改变时,引用属性也会改变.引用值对应的字符串格式如下:<(x|X)m(.|,)n@exp_name>这里"<(x|X)" –介绍了表达式引用.大写或小写的x都可以."m(.|,)n" –m表明字段的宽度,n是精度.它模仿了了C语言里实数的格式描述符."." or "," 都可以使用,但它们会在属性值显示时被反应出来.@exp_name –表明这是一个表达式的名字.">"- 终止引用.如上述示例,如果表达式P1求值为13.579,那么属性值就为13.58.可显示的UF对象除了上文提到的信息和函数,可显示的UF对象有特有的信息和函数.为了确定一个对象是否是可显示对象,在确定了对象的类型后,可以用程序UF_OBJ_is_type_displayable判断.注释:即使一个对象拥有可显示的属性,也不意味着它会在NX窗口里显示出来.一些对象拥有可显示属性是为了和NX信息交换.可显示对象特有的信息和函数除了UF对象通用的共享信息和函数外,所有的可显示UF对象还拥有如下信息:●层layer —对象目前所在的层.可用层为1到256.●颜色color —对象当前颜色.由如下15个可用颜色额:1.UF_OBJ_BLUE2.UF_OBJ_GREEN3.UF_OBJ_CYAN4.UF_OBJ_RED5.UF_OBJ_MAGENTA6.UF_OBJ_YELLOW7.UF_OBJ_WHITE8.UF_OBJ_OLIVE9.UF_OBJ_PINK10.UF_OBJ_BROWN11.UF_OBJ_ORANGE12.UF_OBJ_PURPLE13.UF_OBJ_DARK_RED14.UF_OBJ_AQUAMARINE15.UF_OBJ_GRAY●空白状态blank status —对象目前的空白状态: UF_OBJ_BLANKED 或者UF_OBJ_NOT_BLANKED●线宽line width (也称为线密度line density) — the current width assigned to the object.The possible values are UF_OBJ_WIDTH_NORMAL, UF_OBJ_WIDTH_THICK, and UF_OBJ_WIDTH_THIN.●字体font — the current font assigned to the object. Available fonts range from 1 to 7.●高亮状态highlight status —the current highlight status of the object. This is alogical to say whether the object is highlighted or not.所有的这些信息都可以通过一个结构体UF_OBJ_disp_props_t来获得,通过访问程序UF_OBJ_ask_display_properties来获得这个结构体.可用于可显示对象的方法还包括:●设置显示属性(使用函数UF_OBJ_set_layer, UF_OBJ_set_color,UF_OBJ_set_blank_status, UF_OBJ_set_line_width, UF_OBJ_set_font, and UF_DISP_set_highlight)这些函数设置单独对象的显示属性,除了高亮状态表示异常意外,其他的属性都会存在part零件里.当文件保存时,高亮状态会自动关闭.所以UF_DISP_set_highlight只影响对象目前的显示状态.●显示对象(使用函数UF_DISP_add_item_to_display)This routine adds a new object (or updates an already existing object) to NX' display.●额外的cycling设置(使用函数UF_LAYER_cycle_by_layer)This routine cycles a part filtering the objects it returns by the layer the objects are assigned to.就像上文提到的,UF_OBJ_cycle_objs_in_part优先于其他cycling函数.这也适用于UF_LAYER_cycle_by_layer.●选择对象selecting objects (using the routines UF_UI_select_single,UF_UI_select_by_class, UF_UI_select_feature, or UF_UI_select_sketch)These routines allow selection of objects in the graphics window during an interactive NX session. UF_UI_select_by_class displays the class selection dialog that is used pervasively throughout interactive NX.装配上下文中的可显示UF对象略特殊的UF对象略。

相关文档
最新文档