关于边界对象规则

(SpaceOffsetRulesManager.AecBoundingObjectRule 基类)

边界对象规则允许将限制空间基本轮廓的对象(例如结构杆件)标记为非边界对象,使得创建偏移轮廓时不会处理这些对象。每个标准可为每个边界偏移类型定义和应用多个边界对象规则。

实施边界对象规则

若要实施自定义边界对象规则,必须添加一个派生自 SpaceOffsetRulesManager.AecBoundingObjectRule 基类的新类。这个新类必须实施基类的 Apply 接口,并通过调用基本方法 AecSpaceOffsetRuleBase.RegisterType() 来向应在构造函数中调用该类的对象类型自行注册。此规则类型的 Apply 方法使用以下语法:

public abstract bool Apply(Autodesk.AutoCAD.DatabaseServices.ObjectId idSpace,
Autodesk.AutoCAD.DatabaseServices.ObjectId idObject);

第一个参数是将计算其偏移边界轮廓的当前空间。第二个参数 idObject 是限制空间边界的对象的 ID。在 Apply 方法中,现在可打开空间对象以及边界对象,并可查询其特定特性,以判断该对象是否应该影响生成的轮廓。如果该方法返回 False,将会从偏移轮廓中删除对象边界。这意味着当应用偏移规则时不会再包括该对象。下例显示了新空间规则 BoundingObjectRuleGross 的框架:

namespace AecSpaceOffsetStandardSample
{
public class BoundingObjectRuleBasic: AecBoundingObjectRule
{
public BoundingObjectRuleGross()
{
RegisterType(typeof(kAllTypes));
} public override bool Apply(ObjectId idSpace, ObjectId idObject) {
//return false to mark object as non-contributing
}
}
}

样例边界对象规则 BoundingObjectRuleGross

下例演示了用于样例项目的总轮廓的边界对象规则实施。此规则将从由结构杆件所限制的轮廓中删除所有线段。这种情况对于定义空间总面积很常见,此时不会考虑结构杆件,即使它们限制空间的基本轮廓也是如此。

public class BoundingObjectRuleGross : AecBoundingObjectRule
{
public BoundingObjectRuleGross()
{
RegisterType(typeof(kAllTypes));
} public override bool Apply(ObjectId idSpace, ObjectId idObject) {
bool result=true;
Autodesk.AutoCAD.DatabaseServices.Database db =idObject.Database;
using (Autodesk.AutoCAD.DatabaseServices.Transaction transaction =db.TransactionManager.StartTransaction())
{
Member member = transaction.GetObject(idObject, OpenMode.ForRead) as Member;
if ( member == null )
{
MemberType memType = member.MemberType;
if ( memType == MemberType.Column )
{
result = false;
}
}
transaction.Commit(); } return result;
}
}

下图演示了应用此规则的一个示例,其中净边界(绿色)包括柱,而总边界(蓝色)忽略柱