(Basisklasse SpaceOffsetRulesManager.AecBoundingObjectRule)
Mit Versatzobjektregeln können umgrenzende Objekte im Basisprofil des Raums (beispielsweise Tragwerke) als nicht umgrenzend markiert werden, sodass sie bei der Erstellung eines Versatzprofils nicht verarbeitet werden. Jeder Standard kann mehrere Regeln für umgrenzende Objekte für jeden Umgrenzungsversatztyp definieren und anwenden.
Um eine benutzerdefinierte Regel für ein umgrenzendes Objekt zu implementieren, müssen Sie eine neue Klasse hinzufügen, die aus der Basisklasse SpaceOffsetRulesManager.AecBoundingObjectRule abgeleitet ist. Die neue Klasse muss die Apply-Schnittstelle der Basisklasse implementieren und sich für die Objekttypen, für die sie im Konstruktor abgerufen werden soll, registrieren, indem die Basismethode AecSpaceOffsetRuleBase.RegisterType() aufgerufen wird. Die Apply-Methode dieses Regeltyps hat die folgende Syntax:
public abstract bool Apply(Autodesk.AutoCAD.DatabaseServices.ObjectId idSpace, Autodesk.AutoCAD.DatabaseServices.ObjectId idObject);
Das erste Argument ist der aktuelle Raum, für den das Versatzumgrenzungsprofil berechnet werden soll. Das zweite Argument, idObject, ist die Objekt-ID des Objekts, das den Raum umgrenzt. In der Apply-Methode können sowohl das Raumobjekt als auch das umgrenzende Objekt geöffnet und nach bestimmten Eigenschaften abgefragt werden, um zu entscheiden, ob dieses Objekt zur Profilerzeugung beitragen soll. Wenn die Methode False zurückgibt, werden die Umgrenzungen des Objekts aus dem Versatzprofil entfernt. Dies bedeutet, dass das Objekt bei der Anwendung von Versatzregeln nicht mehr berücksichtigt wird. Das folgende Beispiel zeigt den Rahmen für eine neue Raumregel mit dem Namen 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}
Das folgende Beispiel zeigt die Implementierung der Regel für umgrenzende Objekte, die für das Bruttoprofil des Beispielprojekts verwendet wird. Diese Regel entfernt alle Segmente aus dem Profil, die von einem Tragwerk umgrenzt werden. Dies wird häufig zur Definition der Bruttofläche eines Raums angewendet, wobei Tragwerke nicht berücksichtigt werden, auch wenn sie das Basisprofil des Raums umgrenzen.
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; }}
Die folgende Abbildung zeigt ein Beispiel für die Anwendung dieser Regel, bei der die Nettoumgrenzung (grün) die Stützen einbezieht, die Bruttoumgrenzung (blau) jedoch nicht.