(Basisklasse SpaceOffsetRulesManager.AecBoundingAdjacencyRule)
Umgrenzungsnachbarschafts-Regeln definieren einen Versatz für Segmente des Raumbasisprofils abhängig von dem Raum, der an dieses Segment angrenzt. Umgrenzungsnachbarschafts-Regeln werden häufig für Bruttoversatzprofile verwendet, um festzulegen, dass Innenwände zur Mitte des umgrenzenden Objekts und Außenwänden zur Außenseite des umgrenzenden Objekts versetzt werden.
Um eine Umgrenzungsnachbarschafts-Regel zu implementieren, müssen Sie eine neue aus SpaceOffsetRulesManager.AecBoundingAdjacencyRule abgeleitete Klasse hinzufügen. Wie bei allen zuvor beschriebenen Versatztypen muss die neue Klasse die Apply-Schnittstelle dieser Basisklasse implementieren und sich für die Objekttypen, für die sie im Konstruktor aufgerufen werden soll, registrieren, indem die Basismethode AecSpaceOffsetRuleBase.RegisterType() aufgerufen wird. Die Apply-Methode, die von jeder Regel implementiert werden muss, hat folgende Syntax in AecBoundingAdjacencyRule:
public abstract bool Apply(Autodesk.AutoCAD.DatabaseServices.ObjectId idSpace, Autodesk.AutoCAD.DatabaseServices.ObjectId idObject, Autodesk.AutoCAD.DatabaseServices.ObjectId idAdjSpace);
Das erste ObjectId-Argument ist der aktuelle Raum, für den die Versatzumgrenzung berechnet werden soll. Die zweite ObjectId ist das umgrenzende Objekt zwischen dem Raum des ersten Arguments und dem angrenzenden Raum. Das dritte Argument ist die ObjectId des angrenzenden Raums. Gibt es keinen angrenzenden Raum, wie bei Außenwänden, beträgt der Wert dieses Arguments ObjectId.Null. Im folgenden Beispiel wird der Rahmen für eine neue Raumregel mit dem Namen BoundingAdjacencyRuleGross gezeigt:
namespace AecSpaceOffsetStandardSample {public class BoundingAdjacencyRuleGross : AecBoundingAdjacencyRule {}public BoundingAdjacencyRuleGross() { } public override AecSpaceOffsetInfo Apply(ObjectId idSpace, ObjectId idObject, ObjectId idAdjSpace) {}//}
Das folgende Beispiel zeigt die Implementierung einer Umgrenzungsnachbarschafts-Regel, die im Beispielprojekt verwendet wird. Sie definiert, dass zwei Räume mit Innenwänden zur Mitte des umgrenzenden Objekts versetzt werden. Wenn kein angrenzender Raum vorhanden ist, wird der Versatz zur Außenseite der Wand gemessen.
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);}