(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}
下例演示了用于样例项目的总轮廓的边界对象规则实施。此规则将从由结构杆件所限制的轮廓中删除所有线段。这种情况对于定义空间总面积很常见,此时不会考虑结构杆件,即使它们限制空间的基本轮廓也是如此。
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 ) {transaction.Commit(); } return result;MemberType memType = member.MemberType; if ( memType == MemberType.Column ) { result = false; }}
下图演示了应用此规则的一个示例,其中净边界(绿色)包括柱,而总边界(蓝色)忽略柱