关于边界相邻规则

(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)
{
//
}
}
}

样例边界相邻规则 BoundingAdjacencyRuleGross

下例演示了样例项目中使用的边界相邻规则的实施。该规则为两个空间定义了距内墙边界对象中心的偏移,以及到墙外侧的偏移(如果没有相邻空间)。

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