bject ARX中的实体有扩展属性,即实体可以添加一些在定义的数据,在Revit中也有类似的特性。
上篇Revit二次开发(3):Revit动态模型更新(DMU: Dynamic Model Update)功能实例中,就是用了这一特性记录初始化的数据,在实例修改之后新数据和旧的数据对比计算。
在例子的UpdateInitialParameters函数中有详细用法,
Transaction t = new Transaction(doc, "Update parameters");
t.Start();
// 创建可扩展的存储框架模式
SchemaBuilder builder = new SchemaBuilder(m_schemaId); //(new Guid("{4DE4BE80-0857-4785-A7DF-8A8918851CB2}"));
builder.AddSimpleField("Position", typeof(XYZ)).SetUnitType(UnitType.UT_Length);
builder.AddSimpleField("Orientation", typeof(XYZ)).SetUnitType(UnitType.UT_Length);
builder.SetSchemaName("WallPositionData");
builder.SetDocumentation("Two points in a Window element that assist in placing a section view.");
builder.SetVendorId("adsk");
builder.SetApplicationGUID(doc.Application.ActiveAddInId.GetGUID());
m_schema = builder.Finish();
t.Commit();
t.Start();
// 获得扩展字段
Field fieldPosition = m_schema.GetField("Position");
Field fieldOrientation = m_schema.GetField("Orientation");
FamilyInstance window = doc.GetElement(m_windowId) as FamilyInstance;
Entity storageEntity = new Entity(m_schema);
LocationPoint lp = window.Location as LocationPoint;
XYZ location = lp.Point;
// 设置扩展字段的值
storageEntity.Set(fieldPosition, location, DisplayUnitType.DUT_FEET_FRACTIONAL_INCHES);
XYZ orientation = window.FacingOrientation;
storageEntity.Set(fieldOrientation, orientation, DisplayUnitType.DUT_FEET_FRACTIONAL_INCHES);
window.SetEntity(storageEntity);
t.Commit();
转载请标明作者和出处
作者:田腾