(classe de base SpaceOffsetRulesManager.AecBoundingObjectRule)
Les règles d'objet de contour permettent de marquer les objets délimitant le profil de base de l'espace comme n'étant pas des objets de contours. Ainsi, ils ne seront pas pris en compte lors de la création du profil de décalage. Chaque règle peut définir et appliquer plusieurs règles d'objet de contour pour chaque type de décalage de contour.
Pour implémenter une règle d'objet de contour personnalisée, ajoutez une classe dérivée de la classe de base SpaceOffsetRulesManager.AecBoundingObjectRule. La nouvelle classe doit implémenter l'interface Apply de la classe de base et s'enregistrer dans le constructeur pour les types d'objet auxquels elle est applicables, via l'appel de la méthode de base AecSpaceOffsetRuleBase.RegisterType(). La syntaxe de la méthode Apply de ce type de règle est la suivante :
public abstract bool Apply(Autodesk.AutoCAD.DatabaseServices.ObjectId idSpace, Autodesk.AutoCAD.DatabaseServices.ObjectId idObject);
Le premier argument correspond à l'espace actif, pour lequel le profil de contour de décalage doit être calculé. Le second argument idObject correspond à l'ID de l'objet qui délimite l'espace. Avec la méthode Apply, l'objet d'espace et l'objet de contour peuvent désormais être ouverts et leurs propriétés peuvent être consultées pour déterminer si l'objet doit contribuer au profil généré. Si la méthode renvoie la valeur False, les contours de l'objet sont supprimés du profil de décalage. Par conséquent, l'objet ne sera plus pris en compte lors de l'application des règles de décalage. L'exemple suivant illustre le cadre d'une nouvelle classe de règle d'espace appelée 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}
L'exemple suivant illustre l'implémentation de la règle d'objet de contour utilisée pour le profil brut de l'exemple de projet. Cette règle supprime tous les segments du profil qui sont liés par un élément de structure. Elle est souvent utilisée pour définir l'aire brute d'un espace : les éléments de structure ne sont pas pris en compte même s'ils délimitent le profil de base de l'espace.
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; }}
L'illustration ci-dessous présente un exemple d'application de cette règle où la limite nette (en vert) inclut les poteaux, tandis que la limite brute (en bleu) les ignore.