(klasa bazowa SpaceOffsetRulesManager.AecBoundingAdjacencyRule)
Reguły przylegania obwiedni definiują odsunięcie segmentów profilu bazowego zależnie od pomieszczenia przylegającego do tego segmentu. Profile odsunięcia brutto są powszechnie używane, kiedy reguły przylegania obwiedni określają, że obwiednia powinna być odsunięta do środka obiektu ograniczającego przy ścianach wewnętrznych oraz na zewnątrz od obiektu ograniczającego przy ścianach zewnętrznych.
Aby zaimplementować regułę przylegania obwiedni, trzeba dodać nową klasę uzyskaną z reguły SpaceOffsetRulesManager.AecBoundingAdjacencyRule. Podobnie jak we wszystkich opisanych wcześniej typach odsunięcia, nowa klasa musi zaimplementować interfejs Apply klasy bazowej i zarejestrować się dla tych typów obiektów, które będą ją wywoływać, w konstruktorze poprzez wywołanie metody bazowej AecSpaceOffsetRuleBase.RegisterType(). Metoda Apply, którą musi zaimplementować każda reguła, ma w regule AecBoundingAdjacencyRule następującą formę:
public abstract bool Apply(Autodesk.AutoCAD.DatabaseServices.ObjectId idSpace, Autodesk.AutoCAD.DatabaseServices.ObjectId idObject, Autodesk.AutoCAD.DatabaseServices.ObjectId idAdjSpace);
Pierwszym argumentem ObjectId jest bieżące pomieszczenie, dla którego ma być obliczony profil obwiedni odsunięcia. Drugi ObjectId jest obiektem ograniczającym między pomieszczeniem z pierwszego argumentu i pomieszczeniem przylegającym. Trzecim argumentem jest ObjectId przylegającego pomieszczenia. Gdy nie ma sąsiedniego pomieszczenia, czyli np. w przypadku ściany zewnętrznej, argument przybiera wartość ObjectId.Null. W poniższym przykładzie przedstawiono szkielet nowej klasy reguły pomieszczenia o nazwie BoundingAdjacencyRuleGross:
namespace AecSpaceOffsetStandardSample {public class BoundingAdjacencyRuleGross : AecBoundingAdjacencyRule {}public BoundingAdjacencyRuleGross() { } public override AecSpaceOffsetInfo Apply(ObjectId idSpace, ObjectId idObject, ObjectId idAdjSpace) {}//}
W poniższym przykładzie pokazano implementację reguły przylegania obwiedni, która została użyta w przykładowym projekcie: Zdefiniowano w niej odsunięcie w kierunku środka obiektu ograniczającego w 2 pomieszczeniach przy ścianach wewnętrznych oraz odsunięcie w kierunku zewnętrznej strony ściany, jeśli nie ma pomieszczenia przylegającego.
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);}