(klasa bazowa SpaceOffsetRulesManager.AecBoundingObjectRule)
Reguła obiektu ograniczającego pozwala, by obiekty, które otaczają profil bazowy, na przykład elementy konstrukcyjne, były oznaczone jako obiekty nieograniczające i w efekcie nie były przetwarzane podczas tworzenia profilu odsunięcia. W każdej normie można zdefiniować i zastosować wiele reguł obiektów ograniczających dla każdego typu odsunięcia obwiedni.
Aby zaimplementować niestandardową regułę obiektu ograniczającego, trzeba dodać nową klasę pochodzącą od klasy bazowej SpaceOffsetRulesManager.AecBoundingObjectRule. Nowa klasa musi implementować interfejs Apply klasy bazowej i musi się zarejestrować dla typów obiektów, dla których będzie wywoływana, w konstruktorze przy użyciu wywołania metody AecSpaceOffsetRuleBase.RegisterType() klasy bazowej. Metoda Apply tego typu reguły ma następującą składnię:
public abstract bool Apply(Autodesk.AutoCAD.DatabaseServices.ObjectId idSpace, Autodesk.AutoCAD.DatabaseServices.ObjectId idObject);
Pierwszym argumentem jest bieżące pomieszczenie, dla którego ma być obliczony profil obwiedni odsunięcia. Drugi argument, idObject, jest właściwością Object ID obiektu, który ogranicza pomieszczenie. W ramach metody Apply można teraz otworzyć obiekt pomieszczenia oraz obiekt ograniczający i wykonać zapytanie o niektóre właściwości, aby zdecydować, czy tej obiekt powinien być uwzględniony w generowanym profilu. Jeżeli wynikiem metody będzie wartość Fałsz, obwiednie obiektu zostaną usunięte z profilu odsunięcia. Powoduje to, że obiekt nie zostanie więcej uwzględniony podczas stosowania reguł odsunięcia. W poniższym przykładzie pokazano składnię nowej klasy reguły dotyczącej pomieszczeń o nazwie 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}
W poniższym przykładzie przedstawiono implementowanie reguły obiektu ograniczającego używanej w profilu brutto w projekcie przykładowym. Ta reguła powoduje usunięcie z profilu wszystkich segmentów, które są otoczone elementem konstrukcyjnym. Jest to powszechny przypadek definiowania powierzchni brutto pomieszczenia, gdzie elementy konstrukcyjne nie są brane pod uwagę, nawet jeśli otaczają profil bazowy w pomieszczeniu.
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; }}
Na rysunku poniżej pokazano przykład zastosowania tej reguły, gdzie obwiednia netto (kolor zielony) obejmuje kolumny, natomiast obwiednia brutto (kolor niebieski) je pomija.