185 lines
7.9 KiB
C#
185 lines
7.9 KiB
C#
|
|
using System.Collections.Generic;
|
|||
|
|
|
|||
|
|
using Bentley.DgnPlatformNET;
|
|||
|
|
using Bentley.DgnPlatformNET.DgnEC;
|
|||
|
|
using Bentley.DgnPlatformNET.Elements;
|
|||
|
|
using Bentley.ECObjects.Instance;
|
|||
|
|
using Bentley.MstnPlatformNET;
|
|||
|
|
|
|||
|
|
namespace QuickModeling
|
|||
|
|
{
|
|||
|
|
public class ItemTypesHelpers
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// ItemTypeLibrary的获取或创建,表现为一个分组的集合
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="libName"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
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);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 通过名称获取ItemTypes
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="libName"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static IEnumerable<ItemType> GetItemTypes(string libName)
|
|||
|
|
{
|
|||
|
|
ItemTypeLibrary itemTypeLibrary = GetOrCreateItemTypeLibrary(libName);
|
|||
|
|
return itemTypeLibrary.ItemTypes;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取当前DGN文件中的所有ItemTypeLibrary
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static IList<ItemTypeLibrary> GetItemTypeLibraries()
|
|||
|
|
{
|
|||
|
|
DgnFile dgnFile = Session.Instance.GetActiveDgnFile();
|
|||
|
|
if (dgnFile != null)
|
|||
|
|
{
|
|||
|
|
return ItemTypeLibrary.PopulateListFromFile(dgnFile);
|
|||
|
|
}
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取ItemType,包含多个CustomProperty,表现为属性分组
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="itemLibName"></param>
|
|||
|
|
/// <param name="itemTypeName"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
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);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取ItemType,包含多个CustomProperty,表现为属性分组
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="itemTypeLibrary"></param>
|
|||
|
|
/// <param name="itemTypeName"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static ItemType GetOrCreateItemType(ItemTypeLibrary itemTypeLibrary, string itemTypeName)
|
|||
|
|
{
|
|||
|
|
ItemType itemType = itemTypeLibrary.GetItemTypeByName(itemTypeName);
|
|||
|
|
if (itemType != null)
|
|||
|
|
{
|
|||
|
|
return itemType;
|
|||
|
|
}
|
|||
|
|
return itemTypeLibrary.AddItemType(itemTypeName);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 添加参数到ItemType
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="itemType"></param>
|
|||
|
|
/// <param name="propertyName"></param>
|
|||
|
|
/// <param name="kind"></param>
|
|||
|
|
/// <param name="unit"></param>
|
|||
|
|
/// <param name="defaultValue"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
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(); // 确保更改被写入到库中
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 添加参数到ItemType,不带单位
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="itemType"></param>
|
|||
|
|
/// <param name="propertyName"></param>
|
|||
|
|
/// <param name="kind"></param>
|
|||
|
|
/// <param name="defaultValue"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static bool AddPropertyToItemType(ItemType itemType, string propertyName, CustomProperty.TypeKind kind, object defaultValue)
|
|||
|
|
{
|
|||
|
|
CustomProperty property = itemType.AddProperty(propertyName);
|
|||
|
|
property.Type = kind;
|
|||
|
|
property.DefaultValue = defaultValue;
|
|||
|
|
return itemType.Library.Write(); // 确保更改被写入到库中
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取ItemType的所有CustomProperty
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="itemType"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static List<CustomProperty> GetProperties(ItemType itemType)
|
|||
|
|
{
|
|||
|
|
List<CustomProperty> properties = new List<CustomProperty>();
|
|||
|
|
var props = itemType.GetEnumerator();
|
|||
|
|
while (props.MoveNext())
|
|||
|
|
{
|
|||
|
|
CustomProperty prop = props.Current;
|
|||
|
|
if (prop != null)
|
|||
|
|
{
|
|||
|
|
properties.Add(prop);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return properties;
|
|||
|
|
}
|
|||
|
|
///// <summary>
|
|||
|
|
///// 添加ItemType到Model
|
|||
|
|
///// </summary>
|
|||
|
|
///// <param name="itemLibName"></param>
|
|||
|
|
///// <param name="itemTypeName"></param>
|
|||
|
|
//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();
|
|||
|
|
//}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 挂接ItemType到元素
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="elem"></param>
|
|||
|
|
/// <param name="itemLibName"></param>
|
|||
|
|
/// <param name="itemTypeName"></param>
|
|||
|
|
public static IDgnECInstance 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 ecIns = host.GetCustomItem(itemLibName, itemTypeName);
|
|||
|
|
if (null == ecIns)
|
|||
|
|
ecIns = 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);//对参数定义设置域参数
|
|||
|
|
ecIns.ScheduleChanges(elem);//对元素更新ItemType信息
|
|||
|
|
elem.ReplaceInModel(elem);
|
|||
|
|
|
|||
|
|
return ecIns;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|