版本NX9+VS2012
NX对象属性(Attribute)是NX中的一个重要概念,是用户附加到NX对象上的字符串、
整形数值、实型数字的字段,用于对NX对象的解析或说明,广泛应用于实际的设计制造过程中。
NXOpen API通过基类NXObject来实现所有NX对象的Attribute操作。NXAttribute按照属性值类型
可以分为Integer,Real,String,Null,Time,Regerence六类,对应的NXOpen API枚举变量定义为。
通过NXObject对象,开发人员可以实现以下Attribute相关操作。
-设置NX对象属性
-遍历NX对象上某个类型的所有属性
-删除NX对象上某个类型名字的属性
-删除NX对象上某个类型的所有属性
-通过指定属性名称获得NX对象上的属性值
- 设置属性值
NXObject类通过成员函数重载的方式实现对NX对象属性的设置,这些成员函数的定义方式如下:
NX9+VS2012 #include <uf_defs.h> #include <NXOpen/NXException.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/AttributeManager.hxx> #include <NXOpen/AttributePropertiesBaseBuilder.hxx> #include <NXOpen/AttributePropertiesBuilder.hxx> #include <NXOpen/BasePart.hxx> #include <NXOpen/Builder.hxx> #include <NXOpen/DateBuilder.hxx> #include <NXOpen/DateItemBuilder.hxx> #include <NXOpen/DateItemBuilderList.hxx> #include <NXOpen/Expression.hxx> #include <NXOpen/MassPropertiesBuilder.hxx> #include <NXOpen/NXObject.hxx> #include <NXOpen/PreviewPropertiesBuilder.hxx> #include <NXOpen/PropertiesManager.hxx> #include <NXOpen/SelectNXObjectList.hxx> #include <NXOpen/SelectObjectList.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/Update.hxx> #include <NXOpen/ExpressionCollection.hxx> #include <NXOpen/Features_BlockFeatureBuilder.hxx> #include <NXOpen/Features_Feature.hxx> #include <NXOpen/Features_FeatureBuilder.hxx> #include <NXOpen/Features_FeatureCollection.hxx> #include <NXOpen/GeometricUtilities_BooleanOperation.hxx> #include <NXOpen/Part.hxx> #include <NXOpen/PartCollection.hxx> #include <NXOpen/Point.hxx> #include <NXOpen/PointCollection.hxx> #include <NXOpen/Preferences_PartModeling.hxx> #include <NXOpen/Preferences_PartPreferences.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/Unit.hxx> #include <NXOpen/UnitCollection.hxx> using namespace NXOpen; extern "C" DllExport int ufusr_ask_unload() { return (int)Session::LibraryUnloadOptionImmediately; } extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen) { Session *theSession = Session::GetSession(); Part *workPart(theSession->Parts()->Work()); Part *displayPart(theSession->Parts()->Display()); //创建块 Features::Feature *nullFeatures_Feature(NULL); Features::BlockFeatureBuilder *blockFeatureBuilder1; blockFeatureBuilder1 = workPart->Features()->CreateBlockFeatureBuilder(nullFeatures_Feature); blockFeatureBuilder1->SetType(Features::BlockFeatureBuilder::TypesOriginAndEdgeLengths); Point3d originPoint1(0.0, 0.0, 0.0); blockFeatureBuilder1->SetOriginAndLengths(originPoint1, "100", "100", "100"); Features::Feature *feature1; feature1 = blockFeatureBuilder1->CommitFeature(); blockFeatureBuilder1->Destroy(); //创建或编辑一个Null属性 feature1->SetAttribute("AAA"); feature1->SetAttribute("BBB", Update::OptionLater); //创建或编辑一个String属性 feature1->SetAttribute("标题C", "值C"); feature1->SetAttribute("标题D", "值D", Update::OptionLater); //创建或编辑一个Real属性 feature1->SetAttribute("标题E", 1.55); feature1->SetAttribute("标题F", 2.66, Update::OptionLater); //创建或编辑一个Integer属性 feature1->SetAttribute("标题G", 4); feature1->SetAttribute("标题H", 5, Update::OptionLater); //创建或编辑一个Reference属性 feature1->SetReferenceAttribute("标题I", "值I"); feature1->SetReferenceAttribute("标题J", "值J", Update::OptionLater); //创建或编辑一个Time属性 feature1->SetTimeAttribute("标题K", "14-Jun-2021 00:00:00"); feature1->SetTimeAttribute("标题L", "15-Jun-2021 10:00:00", Update::OptionLater); //后退标记 Session::UndoMarkId myUndoMark; myUndoMark = theSession->SetUndoMark(Session::MarkVisibilityVisible, NULL); //调用Update对象的DoUpdate方法来一次性更新所有的Attribute设置 theSession->UpdateManager()->DoUpdate(myUndoMark); } 阿飞 2021年6月14日
在这些函数中,NXString类型的title输入参数是NX对象属性的属性名称;
NXOpen::Update::Option是一个枚举类型的参数,定义如下:
当开发人员需要设置一系列的Attribute时,建议使用包含该输入参数的重载函数,并
设置更新选项为NXOpen::Update::OptionLater,最后显示调用Update对象的DoUpdate方法
来一次性更新所有的Attribute设置。
- 遍历对象属性
NXOpen API提供了遍历NX对象上某个类型的所有属性的方法
NX9+VS2012 #include <uf_defs.h> #include <NXOpen/NXException.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/AttributeManager.hxx> #include <NXOpen/AttributePropertiesBaseBuilder.hxx> #include <NXOpen/AttributePropertiesBuilder.hxx> #include <NXOpen/BasePart.hxx> #include <NXOpen/Builder.hxx> #include <NXOpen/DateBuilder.hxx> #include <NXOpen/DateItemBuilder.hxx> #include <NXOpen/DateItemBuilderList.hxx> #include <NXOpen/Expression.hxx> #include <NXOpen/MassPropertiesBuilder.hxx> #include <NXOpen/NXObject.hxx> #include <NXOpen/PreviewPropertiesBuilder.hxx> #include <NXOpen/PropertiesManager.hxx> #include <NXOpen/SelectNXObjectList.hxx> #include <NXOpen/SelectObjectList.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/Update.hxx> #include <NXOpen/ExpressionCollection.hxx> #include <NXOpen/Features_BlockFeatureBuilder.hxx> #include <NXOpen/Features_Feature.hxx> #include <NXOpen/Features_FeatureBuilder.hxx> #include <NXOpen/Features_FeatureCollection.hxx> #include <NXOpen/GeometricUtilities_BooleanOperation.hxx> #include <NXOpen/Part.hxx> #include <NXOpen/PartCollection.hxx> #include <NXOpen/Point.hxx> #include <NXOpen/PointCollection.hxx> #include <NXOpen/Preferences_PartModeling.hxx> #include <NXOpen/Preferences_PartPreferences.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/Unit.hxx> #include <NXOpen/UnitCollection.hxx> #include <NXOpen/ListingWindow.hxx> using namespace NXOpen; extern "C" DllExport int ufusr_ask_unload() { return (int)Session::LibraryUnloadOptionImmediately; } extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen) { Session *theSession = Session::GetSession(); Part *workPart(theSession->Parts()->Work()); Part *displayPart(theSession->Parts()->Display()); //创建块 Features::Feature *nullFeatures_Feature(NULL); Features::BlockFeatureBuilder *blockFeatureBuilder1; blockFeatureBuilder1 = workPart->Features()->CreateBlockFeatureBuilder(nullFeatures_Feature); blockFeatureBuilder1->SetType(Features::BlockFeatureBuilder::TypesOriginAndEdgeLengths); Point3d originPoint1(0.0, 0.0, 0.0); blockFeatureBuilder1->SetOriginAndLengths(originPoint1, "100", "100", "100"); Features::Feature *feature1; feature1 = blockFeatureBuilder1->CommitFeature(); blockFeatureBuilder1->Destroy(); //创建或编辑一个Null属性 feature1->SetAttribute("AAA"); feature1->SetAttribute("BBB", Update::OptionLater); //创建或编辑一个String属性 feature1->SetAttribute("标题C", "值C"); feature1->SetAttribute("标题D", "值D", Update::OptionLater); //创建或编辑一个Real属性 feature1->SetAttribute("标题E", 1.55); feature1->SetAttribute("标题F", 2.66, Update::OptionLater); //创建或编辑一个Integer属性 feature1->SetAttribute("标题G", 4); feature1->SetAttribute("标题H", 5, Update::OptionLater); //创建或编辑一个Reference属性 feature1->SetReferenceAttribute("标题I", "值I"); feature1->SetReferenceAttribute("标题J", "值J", Update::OptionLater); //创建或编辑一个Time属性 feature1->SetTimeAttribute("标题K", "14-Jun-2021 00:00:00"); feature1->SetTimeAttribute("标题L", "15-Jun-2021 10:00:00", Update::OptionLater); //后退标记 Session::UndoMarkId myUndoMark; myUndoMark = theSession->SetUndoMark(Session::MarkVisibilityVisible, NULL); //调用Update对象的DoUpdate方法来一次性更新所有的Attribute设置 theSession->UpdateManager()->DoUpdate(myUndoMark); //遍历NX对象上某个类型的所有属性的方法 theSession->ListingWindow()->Open(); std::vector<NXObject::AttributeInformation> attr1 = feature1->GetAttributeTitlesByType(NXObject::AttributeTypeString); //遍历返回的NXObject::AttributeInformation结构体对象容器获得所有该类型属性的属性名称 for (int i = 0; i < attr1.size(); i++) { NXObject::AttributeType type1 = attr1[i].Type;//类型 NXString title1 = attr1[i].Title;//名称 //打印内容 theSession->ListingWindow()->WriteLine(title1.GetLocaleText()); } } 阿飞 2021年6月14日
- 删除对象属性
NXOpen API提供了两种删除对象属性的方法,通过指定对象属性类型和属性名称删除
一个属性,通过指定对象属性类型删除所有该类型的属性,其定义方式如下:
NX9+VS2012 // NX 9.0.3.4 // Journal created by Administrator on Mon Jun 14 14:14:23 2021 新西伯利亚标准时间 // #include <uf_defs.h> #include <NXOpen/NXException.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/AttributeManager.hxx> #include <NXOpen/AttributePropertiesBaseBuilder.hxx> #include <NXOpen/AttributePropertiesBuilder.hxx> #include <NXOpen/BasePart.hxx> #include <NXOpen/Builder.hxx> #include <NXOpen/DateBuilder.hxx> #include <NXOpen/DateItemBuilder.hxx> #include <NXOpen/DateItemBuilderList.hxx> #include <NXOpen/Expression.hxx> #include <NXOpen/MassPropertiesBuilder.hxx> #include <NXOpen/NXObject.hxx> #include <NXOpen/PreviewPropertiesBuilder.hxx> #include <NXOpen/PropertiesManager.hxx> #include <NXOpen/SelectNXObjectList.hxx> #include <NXOpen/SelectObjectList.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/Update.hxx> #include <NXOpen/ExpressionCollection.hxx> #include <NXOpen/Features_BlockFeatureBuilder.hxx> #include <NXOpen/Features_Feature.hxx> #include <NXOpen/Features_FeatureBuilder.hxx> #include <NXOpen/Features_FeatureCollection.hxx> #include <NXOpen/GeometricUtilities_BooleanOperation.hxx> #include <NXOpen/Part.hxx> #include <NXOpen/PartCollection.hxx> #include <NXOpen/Point.hxx> #include <NXOpen/PointCollection.hxx> #include <NXOpen/Preferences_PartModeling.hxx> #include <NXOpen/Preferences_PartPreferences.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/Unit.hxx> #include <NXOpen/UnitCollection.hxx> #include <NXOpen/ListingWindow.hxx> using namespace NXOpen; extern "C" DllExport int ufusr_ask_unload() { return (int)Session::LibraryUnloadOptionImmediately; } extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen) { Session *theSession = Session::GetSession(); Part *workPart(theSession->Parts()->Work()); Part *displayPart(theSession->Parts()->Display()); //创建块 Features::Feature *nullFeatures_Feature(NULL); Features::BlockFeatureBuilder *blockFeatureBuilder1; blockFeatureBuilder1 = workPart->Features()->CreateBlockFeatureBuilder(nullFeatures_Feature); blockFeatureBuilder1->SetType(Features::BlockFeatureBuilder::TypesOriginAndEdgeLengths); Point3d originPoint1(0.0, 0.0, 0.0); blockFeatureBuilder1->SetOriginAndLengths(originPoint1, "100", "100", "100"); Features::Feature *feature1; feature1 = blockFeatureBuilder1->CommitFeature(); blockFeatureBuilder1->Destroy(); //创建或编辑一个Null属性 feature1->SetAttribute("AAA"); feature1->SetAttribute("BBB", Update::OptionLater);//延迟更新 //创建或编辑一个String属性 feature1->SetAttribute("标题C", "值C"); feature1->SetAttribute("标题D", "值D", Update::OptionLater); //创建或编辑一个Real属性 feature1->SetAttribute("标题E", 1.55); feature1->SetAttribute("标题F", 2.66, Update::OptionLater); //创建或编辑一个Integer属性 feature1->SetAttribute("标题G", 4); feature1->SetAttribute("标题H", 5, Update::OptionLater); //创建或编辑一个Reference属性 feature1->SetReferenceAttribute("标题I", "值I"); feature1->SetReferenceAttribute("标题J", "值J", Update::OptionLater); //创建或编辑一个Time属性 feature1->SetTimeAttribute("标题K", "14-Jun-2021 00:00:00"); feature1->SetTimeAttribute("标题L", "15-Jun-2021 10:00:00", Update::OptionLater); //后退标记 Session::UndoMarkId myUndoMark; myUndoMark = theSession->SetUndoMark(Session::MarkVisibilityVisible, NULL); //调用Update对象的DoUpdate方法来一次性更新所有的Attribute设置 theSession->UpdateManager()->DoUpdate(myUndoMark); //通过指定属性类型和属性名称删除NX对象属性 feature1->DeleteAttributeByTypeAndTitle(NXObject::AttributeTypeString, "标题C"); feature1->DeleteAttributeByTypeAndTitle(NXObject::AttributeTypeTime, "标题K", Update::OptionNow);//立即更新 //通过指定属性类型删除NX对象上所有该类型属性 feature1->DeleteAllAttributesByType(NXObject::AttributeTypeInteger); feature1->DeleteAllAttributesByType(NXObject::AttributeTypeReal, Update::OptionNow); } 阿飞 2021年6月14日
- 获得属性对象值
NXOpen API为每种不同的对象属性类型提供了不同的对象属性值查询函数,开发人员根据
NX对象属性的类型,通过属性名称调用NXObject对象中不同的成员函数获得属性值,
这些函数的定义方式如下:
NX9+VS2012 #include <uf_defs.h> #include <NXOpen/NXException.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/AttributeManager.hxx> #include <NXOpen/AttributePropertiesBaseBuilder.hxx> #include <NXOpen/AttributePropertiesBuilder.hxx> #include <NXOpen/BasePart.hxx> #include <NXOpen/Builder.hxx> #include <NXOpen/DateBuilder.hxx> #include <NXOpen/DateItemBuilder.hxx> #include <NXOpen/DateItemBuilderList.hxx> #include <NXOpen/Expression.hxx> #include <NXOpen/MassPropertiesBuilder.hxx> #include <NXOpen/NXObject.hxx> #include <NXOpen/PreviewPropertiesBuilder.hxx> #include <NXOpen/PropertiesManager.hxx> #include <NXOpen/SelectNXObjectList.hxx> #include <NXOpen/SelectObjectList.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/Update.hxx> #include <NXOpen/ExpressionCollection.hxx> #include <NXOpen/Features_BlockFeatureBuilder.hxx> #include <NXOpen/Features_Feature.hxx> #include <NXOpen/Features_FeatureBuilder.hxx> #include <NXOpen/Features_FeatureCollection.hxx> #include <NXOpen/GeometricUtilities_BooleanOperation.hxx> #include <NXOpen/Part.hxx> #include <NXOpen/PartCollection.hxx> #include <NXOpen/Point.hxx> #include <NXOpen/PointCollection.hxx> #include <NXOpen/Preferences_PartModeling.hxx> #include <NXOpen/Preferences_PartPreferences.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/Unit.hxx> #include <NXOpen/UnitCollection.hxx> #include <NXOpen/ListingWindow.hxx> using namespace NXOpen; extern "C" DllExport int ufusr_ask_unload() { return (int)Session::LibraryUnloadOptionImmediately; } extern "C" DllExport void ufusr(char *param, int *retCode, int paramLen) { Session *theSession = Session::GetSession(); Part *workPart(theSession->Parts()->Work()); Part *displayPart(theSession->Parts()->Display()); //创建块 Features::Feature *nullFeatures_Feature(NULL); Features::BlockFeatureBuilder *blockFeatureBuilder1; blockFeatureBuilder1 = workPart->Features()->CreateBlockFeatureBuilder(nullFeatures_Feature); blockFeatureBuilder1->SetType(Features::BlockFeatureBuilder::TypesOriginAndEdgeLengths); Point3d originPoint1(0.0, 0.0, 0.0); blockFeatureBuilder1->SetOriginAndLengths(originPoint1, "100", "100", "100"); Features::Feature *feature1; feature1 = blockFeatureBuilder1->CommitFeature(); blockFeatureBuilder1->Destroy(); //创建或编辑一个Null属性 feature1->SetAttribute("AAA"); feature1->SetAttribute("BBB", Update::OptionLater);//延迟更新 //创建或编辑一个String属性 feature1->SetAttribute("标题C", "值C"); feature1->SetAttribute("标题D", "值D", Update::OptionLater); //创建或编辑一个Real属性 feature1->SetAttribute("标题E", 1.55); feature1->SetAttribute("标题F", 2.66, Update::OptionLater); //创建或编辑一个Integer属性 feature1->SetAttribute("标题G", 4); feature1->SetAttribute("标题H", 5, Update::OptionLater); //创建或编辑一个Reference属性 feature1->SetReferenceAttribute("标题I", "值I"); feature1->SetReferenceAttribute("标题J", "值J", Update::OptionLater); //创建或编辑一个Time属性 feature1->SetTimeAttribute("标题K", "14-Jun-2021 00:00:00"); feature1->SetTimeAttribute("标题L", "15-Jun-2021 10:00:00", Update::OptionLater); //后退标记 Session::UndoMarkId myUndoMark; myUndoMark = theSession->SetUndoMark(Session::MarkVisibilityVisible, NULL); //调用Update对象的DoUpdate方法来一次性更新所有的Attribute设置 theSession->UpdateManager()->DoUpdate(myUndoMark); //根据属性名称获得Integer属性值 int intatte1 = feature1->GetIntegerAttribute("标题G"); //根据属性名称获得Real属性值 double realattr1 = feature1->GetRealAttribute("标题E"); //根据属性名称获得String属性值 NXString stringattr1 = feature1->GetStringAttribute("标题I"); //根据属性名称和Time格式获得Time属性值 //DateAndTimeFormatNumeric/** 2004/04/28 22:06:15 */, //DateAndTimeFormatTextual/** 28-Apr-2004 22:06:15 */ NXString timeattr1 = feature1->GetTimeAttribute(NXObject::DateAndTimeFormatTextual, "标题K"); //根据属性名称获得Reference NXString refattr1 = feature1->GetReferenceAttribute("标题I"); theSession->ListingWindow()->Open(); char msg[256]; sprintf(msg, "标题G:%d 标题E:%f 标题I:%s 标题K:%s 标题I:%s", intatte1, realattr1, stringattr1.GetLocaleText(), timeattr1.GetLocaleText(), refattr1.GetLocaleText()); theSession->ListingWindow()->WriteLine(msg); } 阿飞 2021年6月14日
阿飞
2021年6月14日