Tribon用户自定义属性在Tribon中称作user-defined attributes或者Customer Defined Attributes,用户可以定义属性模板(attribute template)并给模板赋值绑定到模型上。最早我在国内看到有人将用户自定义属性用于Tribon二次开发的是广船国际红帆电脑公司的江峰,他的一篇论文《基于Tribon M3的舾装设计出图系统的实现》中提到了使用用户自定义属性保存模型信息。我有幸曾在镇江的船舶CAD年会上与他有一面之缘,江峰在论文中提出使用用户自定义属性以及.NET结合Python进行Tribon二次开发的思路,后来深刻影响了我们的开发方向。又过了一段时间,听外高桥张世超说NeilSoft也是使用用户自定义属性来记录模型信息,当时外高桥正在和NeilSoft谈Cabin模块的合作。NeilSoft是我认为最优秀的Tribon Vitesse二次开发公司,该公司有人直接参与了Tribon的开发工作。我相信NeilSoft应该更早将用户自定义属性用于Tribon二次开发。目前,我们参数化建模程序都是用用户自定义属性来保存模型信息,数据用于后期统计。
其实用户自定义属性应用到实际开发中已经有很长一段时间了,早在07年我在龙船论坛里面推荐过(论坛帖子链接),还发布了封装Vitesse操作的类代码。近期又有朋友问起来,我才想总结一下。
1. 创建模板
创建模板的方法请参见Tribon M3–User's Guides中Toolkit Preference -> Attribute Templates章节,这里我们在本地工程中使用New Category创建Structure分类,并在Structure上右键New Template输入PipeSupport创建管支架模板。在模板上New Data创建两个属性:ChineseName和Weight,数据类型分别为String和Integer。OK保存。如图所示:

2. 使用SodrAttribute.py给模板赋值绑定模型
pipeSupportName = "SPT_SUPP_LAB_8090"
model = KcsModel.Model("struct", pipeSupportName)
sa = SodrAttribute.SodrAttribute(model, 'Structure', 'PipeSupport')
attDict = {
'ChineseName': "管支架",
'Weight': 100
}
sa.SetAtt(attDict)
kcs_ui.message_noconfirm(sa.GetAtt())
实例化一个管支架模型的Model,传入SodrAttribute,调用SetAtt方法将属性字典里面的值赋给模板,使用GetAtt方法可读取属性,返回属性字典。
3. COM数据抽取
如果要在Tribon外部提取用户自定义属性的数据,就要使用Data Extraction。数据抽取的关键字为:.USER_ATT[RIBUTE](i)
4. 工程迁徙
在某个Tribon工程里面设置好的模板保存在SB_SETTINGS_DB库中,如果有模板工程,在每次新建工程将Setting库拷贝到新工程下即可。如果工程配置有变化,也可以将用户自定义属性保存到.sbd文件中,在新建工程里面使用Database Utility导入。用户自定义属性是用TEMPLATE开头-后面N个数字,下面是摘自Tribon文档中的一段话:
Recreate template database
This function must be used when attribute template objects have been copied from another project.
To copy all attribute templates from one project into another use a Tribon Database Utility and copy all objects named TEMPLATE-nnnnn from the settings database in the other project into the SB_SETTINGS_DB database. After the copy, recreate the template database using this function.
5. 快捷方式
用户自定义属性可在Tribon菜单Tools -> Data Management -> Attributes查看,也可以添加快捷方式,用户自定义属性的Function ID是33982,在Trigger里面的代码如下:
kcs_gui.toolbar_button_std_add(sdr_toolbar, 7, 33982, "attribute.ico", "Attribute")
如果有能力,可针对不同的模板,编写界面操作属性数据,例如我们针对直梯开发的属性修改界面:
