using System.Collections.Generic; using Bentley.DgnPlatformNET; using Bentley.DgnPlatformNET.DgnEC; using Bentley.DgnPlatformNET.Elements; using Bentley.ECObjects.Instance; using Bentley.MstnPlatformNET; namespace Mstn.Toolkit.Helpers { public class ItemTypesHelper { /// /// ItemTypeLibrary的获取或创建,表现为一个分组的集合 /// /// /// public static ItemTypeLibrary GetOrCreateItemTypeLibrary(string libName) { var dgnFile = Session.Instance.GetActiveDgnFile(); ItemTypeLibrary itemTypeLibrary = ItemTypeLibrary.FindByName(libName, dgnFile); if (itemTypeLibrary != null) { return itemTypeLibrary; } return ItemTypeLibrary.Create(libName, dgnFile); } /// /// 通过名称获取ItemTypes /// /// /// public static IEnumerable GetItemTypes(string libName) { ItemTypeLibrary itemTypeLibrary = GetOrCreateItemTypeLibrary(libName); return itemTypeLibrary.ItemTypes; } /// /// 获取当前DGN文件中的所有ItemTypeLibrary /// /// public static IList GetItemTypeLibraries() { DgnFile dgnFile = Session.Instance.GetActiveDgnFile(); if (dgnFile != null) { return ItemTypeLibrary.PopulateListFromFile(dgnFile); } return null; } /// /// 获取ItemType,包含多个CustomProperty,表现为属性分组 /// /// /// /// public static ItemType GetOrCreateItemType(string itemLibName, string itemTypeName) { ItemTypeLibrary itemTypeLibrary = GetOrCreateItemTypeLibrary(itemLibName); ItemType itemType = itemTypeLibrary.GetItemTypeByName(itemTypeName); if (itemType != null) { return itemType; } return itemTypeLibrary.AddItemType(itemTypeName); } public static bool AddPropertyToItemType(ItemType itemType, string propertyName, CustomProperty.TypeKind kind, WorkingUnit unit, object defaultValue) { CustomProperty property = itemType.AddProperty(propertyName); property.Type = kind; property.DefaultValue = defaultValue; if (property.SupportsUnits) { property.Units = new DgnECUnit(unit); // 可以根据需要设置单位 } return itemType.Library.Write(); // 确保更改被写入到库中 } /// /// 获取ItemType的所有CustomProperty /// /// /// public static List GetProperties(ItemType itemType) { List properties = new List(); var props = itemType.GetEnumerator(); while (props.MoveNext()) { CustomProperty prop = props.Current; if (prop != null) { properties.Add(prop); } } return properties; } /// /// 添加ItemType到Model /// /// /// public static void AttachItemTypeToModel(string itemLibName, string itemTypeName) { DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获取当前活动的模型 CustomItemHost host = new CustomItemHost(dgnModel);//声明元素的CustomItemHost DgnFile dgnFile = Session.Instance.GetActiveDgnFile(); ItemTypeLibrary ITL = ItemTypeLibrary.FindByName(itemLibName, dgnFile); ItemType itemtype = ITL.GetItemTypeByName(itemTypeName); IDgnECInstance ecIns = host.GetCustomItem(itemLibName, itemTypeName); if (null == ecIns) ecIns = host.ApplyCustomItem(itemtype, true); //对CustomItemHost应用ItemType得到EC实例 CustomProperty myProp = itemtype.GetPropertyByName("项目名称"); ecIns.SetString(myProp.InternalName, "属性值"); var s = ecIns.WriteChanges(); } /// /// 挂接ItemType到元素 /// /// /// /// public static void AttachItemTypeToElement(Element elem, string itemLibName, string itemTypeName) { DgnFile dgnFile = Session.Instance.GetActiveDgnFile();//获得当前激活的文件 DgnModel dgnModel = Session.Instance.GetActiveDgnModel(); //根据声明名称获取对应的ItemType ItemType itemType = GetOrCreateItemType(itemLibName, itemTypeName); CustomItemHost host = new CustomItemHost(elem, true);//声明元素的CustomItemHost //实例化 IDgnECInstance item = host.ApplyCustomItem(itemType, true);//对CustomItemHost添加ItemType得到EC实例 //EditParameterDefinitions defs = EditParameterDefinitions.GetForModel(dgnModel);//获得模型中的参数定义 //DgnECInstanceEnabler enabler = DgnECManager.Manager.ObtainInstanceEnabler(dgnFile, itemType.ECClass);//获得文件中使用指定EC类的EC实例 //if (null != enabler && enabler.SupportsCreateInstanceOnElement)//判断是否是否支持对元素挂接EC实例 // defs.SetDomainParameters(enabler.SharedWipInstance);//对参数定义设置域参数 item.ScheduleChanges(elem);//对元素更新ItemType信息 elem.ReplaceInModel(elem); } } }