我们在使用EC方式给元素添加属性时,元素属性对话框中元素的名称会被EC属性所属的ECClass的名称覆盖掉,如下图所示:
大多数情况下我们是不想覆盖掉元素原有的名称的,我们可以通过给ECClass添加一个定制化属性(CustomAttribute)来关闭这个效果。这个定制化属性就是位于"C:\Program Files\Bentley\MicroStation CONNECT Edition\MicroStation\ECSchemas\Dgn\DgnCustomAttributes.01.00.ecschema.xml"中的定制化属性ECClass“CustomAttributeClass”,如下图所示:
如下链接是测试代码:
communities.bentley.com/.../DisableECName.7z
编译后在Mstn中加载我们的插件程序,然后通过选择集工具选中一个元素后,执行keyin命令“disableecname test”。此时在元素属性对话框中查看到的元素属性如下图所示:
可以看到虽然添加了我们自定的EC属性,但是元素名称仍然是元素原有的名称。实现这个效果的关键代码就在KeyinCommands.CreateECSchema这个函数中,此函数的代码如下所示:
public static ECSchema CreateECSchema() { ECSchema ecSchema = new ECSchema(NameECSchema, 1, 0, "Sample"); IECClass ecClass = ecSchema.AddClass(NameECClass); IECProperty ecprop = ecClass.AddProperty(NameProp, ECObjects.StringType); int verMaj = 1, verMin = 0; FindInstancesScope scopeTemp = FindInstancesScope.CreateScope(Session.Instance.GetActiveDgnFile(), new FindInstancesScopeOption()); IECSchema schemaCustomAtt = DgnECManager.Manager.LocateSchemaInScope(scopeTemp, "DgnCustomAttributes", verMaj, verMin, SchemaMatchType.LatestCompatible); if (schemaCustomAtt != null) { IECClass ecClassCate = schemaCustomAtt.GetClass("ItemIdentifiesHost"); IECInstance ecInsCate = ecClassCate.CreateInstance(); ecInsCate.SetBoolean("ShouldIdentifyHost", false); ecClass.SetCustomAttribute(ecInsCate); } return ecSchema; }
在这个函数中我们创建了自定义属性所属的ECSchema和ECClass,并获取了“DgnCustomAttributes”中的“ItemIdentifiesHost”定制化类添加给了我们的ECClass,从而实现了我们想要的效果。