(SpaceOffsetRulesManager.AecBoundingAdjacencyRule 基类)
边界相邻规则可根据线段相邻空间来定义空间基本轮廓线段的偏移。关于总偏移轮廓的一个常见用例是,边界相邻规则定义边界在内墙应该偏移到边界对象的中心,而在外墙应该偏移到边界对象的外侧。
若要实施边界相邻规则,必须添加一个派生自 SpaceOffsetRulesManager.AecBoundingAdjacencyRule 的新类。与上述所有偏移类型一样,该新类必须实施此基类的 Apply 接口,并通过调用基本方法 AecSpaceOffsetRuleBase.RegisterType() 来向应在构造函数中调用该类的对象类型自行注册。每个规则需要实施的 Apply 方法在 AecBoundingAdjacencyRule 中具有以下形式:
public abstract bool Apply(Autodesk.AutoCAD.DatabaseServices.ObjectId idSpace, Autodesk.AutoCAD.DatabaseServices.ObjectId idObject, Autodesk.AutoCAD.DatabaseServices.ObjectId idAdjSpace);
第一个 ObjectId 参数是要计算其偏移边界的当前空间。第二个 ObjectId 是第一个参数指定的空间与相邻空间之间的边界对象。第三个参数是相邻空间的 ObjectId。如果没有相邻空间(例如外墙),则该参数的值将为 ObjectId.Null。下例显示了新空间规则 BoundingAdjacencyRuleGross 的框架:
namespace AecSpaceOffsetStandardSample {public class BoundingAdjacencyRuleGross : AecBoundingAdjacencyRule {}public BoundingAdjacencyRuleGross() { } public override AecSpaceOffsetInfo Apply(ObjectId idSpace, ObjectId idObject, ObjectId idAdjSpace) {}//}
下例演示了样例项目中使用的边界相邻规则的实施。该规则为两个空间定义了距内墙边界对象中心的偏移,以及到墙外侧的偏移(如果没有相邻空间)。
public class BoundingAdjacencyRuleGross : AecBoundingAdjacencyRule {public BoundingAdjacencyRuleGross() { } public override AecSpaceOffsetInfo Apply(ObjectId idSpace, ObjectId idObject, ObjectId idAdjSpace) {}if (idAdjSpace.IsNull) {}// If there is no adjacent space (exterior wall), keep the 'Opposite' offset return new AecSpaceOffsetInfo(AecSpaceOffsetType.Opposite);} else {// If there is an adjacent space (interior wall), its center return new AecSpaceOffsetInfo(AecSpaceOffsetType.Center);}