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);
}
}
}