NXOpen:对象属性操作

发布于:2018-05-04 | 分类:CAD/CAE integration


在NXOpen开发过程中,有时需要自定义与对象相关的属性并存储起来,以便进行一些初始化和计算工作。本篇记录NXOoen C++属性操作相关函数。

NXObject类成员函数SetAttribute

继承自NXObject类的对象可以直接设置自定义属性:

SetAttribute(const NXString &title, T value);

其中,

  • 属性名称title具有唯一性,不存在时新建属性,否则覆盖已存在的属性即编辑属性

  • value参数的类型决定了该属性的类型:integer, number, string

根据属性的类型可以使用以下函数获取属性值:

  • GetIntegerAttribute(title)获取整数类型属性
  • GetRealAttribute(title)获取浮点数类型属性
  • GetStringAttribute(title)获取字符串类型属性

注意

SetAttribute()方法自NX8起已不被推荐使用,而是使用SetUserAttribute()替代之。

NXObject类成员函数SetUserAttribute

// Creates or modifies an integer attribute with the option to update or not.
SetUserAttribute (const NXString &title, int index, T value, NXOpen::Update::Option option);

// get attributes
GetIntegerUserAttribute (const NXString &title, int index);
GetRealUserAttribute (const NXString &title, int index);
GetStringUserAttribute (const NXString &title, int index);

此方法创建/修改/获取属性的性质类似于SetAttribute()方法,其更强大之处在于可以设置多值属性,即通过以上index参数实现。

  • index=-1表示该属性仅对应一个值,并非多值属性
  • index=0,1,2...分别设置多值属性的各个元素值
  • 获取属性时的index作用同理

属性管理器

使用Session对象的属性管理器亦可管理对象属性,除了可以如SetUserAttribute()一般设置多值属性,还可以设置Category,便于分类管理相关属性。

// get Builder
NXOpen::AttributePropertiesBuilder *builder = 
theSession->AttributeManager()->CreateAttributePropertiesBuilder(
    NXOpen::BasePart *part, 
    const std::vector<NXOpen::NXObject*> &objects, 
    NXOpen::AttributePropertiesBuilder::OperationType operationType
);
// set categoty
builder->SetCategory (const NXString &category);
// set title
builder->SetTitle(const NXString &title);
// set array index if necessary
builder->SetArray (bool isArray); // have more than one value if true 
builder->SetArrayIndex (int arrayIndex);

// ----------以上确定具体的属性,接下来设置/获取值----------

// set value
builder->SetIntegerValue (int integerValue);
builder->SetNumberValue (double numberValue);
builder->SetStringValue (const NXString &stringValue);

// get value
builder->IntegerValue ();
builder->NumberValue ();
builder->StringValue ();
  • titleindex唯一确定属性,不存在时新建,否则覆盖即编辑属性

  • 获取属性时,SetTitle确定属性,如果是多值属性,还需要SetArrayIndex确定元素位置,最终使用相应函数获取属性值。

总结

  • SetAttribute()将被弃用,推荐SetUserAttribute()
  • SetUserAttribute()可以创建多值即数组形式的属性
  • AttributePropertiesBuilder不仅可以创建多值属性,还可以分组管理属性
  • 以上方法创建的属性统一于相应对象,即完全可以交叉获取和修改