(classe base SpaceOffsetRulesManager.AecBoundingObjectRule)
Le regole oggetto di delimitazione consentono di contrassegnare oggetti di delimitazione del profilo del vano, quali gli elementi strutturali, come oggetti di non di delimitazione. In tal modo non verranno inclusi nell'elaborazione durante la creazione del profilo dell'offset. Ogni standard può definire e applicare più regole oggetto di delimitazione per ogni tipo di offset contorno.
Per implementare una regola oggetto di delimitazione personalizzata, è necessario aggiungere una nuova classe derivata dalla casse base SpaceOffsetRulesManager.AecBoundingObjectRule. È necessario che la nuova classe implementi l'interfaccia Apply della classe base e venga registrata per i tipi di oggetto per cui verrà richiamata nel costruttore mediante la chiamata del metodo AecSpaceOffsetRuleBase.RegisterType(). Il metodo Apply di questo tipo di regola presenta la sintassi seguente:
public abstract bool Apply(Autodesk.AutoCAD.DatabaseServices.ObjectId idSpace, Autodesk.AutoCAD.DatabaseServices.ObjectId idObject);
Il primo argomento rappresenta il vano corrente per il quale viene calcolato il profilo dell'offset contorno. Il secondo argomento idObject rappresenta l'ID dell'oggetto che delimita lo spazio. Mediante il metodo Apply l'oggetto vano e l'oggetto di delimitazione possono essere aperti ed è possibile eseguire una query per determinate proprietà, in modo da decidere se l'oggetto deve essere contenuto nel profilo generato. Se il metodo restituisce False, i contorni dell'oggetto vengono rimossi dal profilo dell'offset. Ciò significa che l'oggetto non verrà considerato durante l'applicazione delle regole di offset. Nell'esempio seguente viene illustrato lo schema di una nuova regola vano denominata 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}
Nell'esempio seguente è riportata l'implementazione della regola oggetto di delimitazione utilizzata per il profilo lordo nel progetto di esempio. Tale regola consente di rimuovere tutti i segmenti dal profilo associati ad un elemento strutturale. Si tratta di un caso frequente per la definizione dell'area lorda di un vano, in cui gli elementi strutturali non vengono considerati anche se delimitano il profilo di base del vano.
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; }}
Nella figura sottostante viene illustrato un esempio di applicazione della regola in cui il contorno netto (in verde) include le colonne, che vengono invece ignorate nel contorno lordo (in azzurro).