(Clase base SpaceOffsetRulesManager.AecBoundingObjectRule)
Las reglas de objetos delimitadores permiten marcar objetos que delimitan con el perfil base del espacio, como elementos estructurales, como no-delimitadores, de manera que no se procesan al crear el perfil de desfase. Cada norma puede definir y aplicarse a varias reglas de objetos delimitadores para cada tipo de desfase de contorno.
Para implementar una regla de objeto delimitador personalizada, es necesario añadir una nueva clase derivada de la clase base SpaceOffsetRulesManager.AecSpaceRule. La nueva clase debe implementar la interfaz Apply de la clase base y registrarse para los tipos de objetos para los que debe llamarse en el constructor llamando al método base AecSpaceOffsetRuleBase.RegisterType(). El método Apply de este tipo de regla tiene la siguiente sintaxis:
public abstract bool Apply(Autodesk.AutoCAD.DatabaseServices.ObjectId idSpace, Autodesk.AutoCAD.DatabaseServices.ObjectId idObject);
El primer argumento es el espacio actual para el que se calculará el perfil de contorno de desfase. El segundo argumento idObject es el ID del objeto que delimita el espacio. Dentro del método Apply, el objeto de espacio, así como el objeto delimitador, pueden abrirse y realizar consultas sobre determinadas propiedades para determinar si este objeto debe contribuir al perfil generado. Si la respuesta del método es False, los contornos del objeto se eliminan del perfil de desfase. Esto implica que el objeto ya no se tendrá en cuenta al aplicar las reglas de desfase. En el siguiente ejemplo se muestra la estructura de una regla de espacio nueva llamada 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}
En el siguiente ejemplo se muestra la implementación de regla de objeto delimitador usada para el perfil bruto del proyecto de muestra. Esta regla elimina todos los segmentos del perfil que estén delimitados por un elemento estructural. Éste es un caso común para definir el área bruta de un espacio, cuando no se consideran los elementos estructurales, incluso si delimitan el perfil base del espacio.
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; }}
En la figura siguiente se muestra un ejemplo de aplicación de esta regla, en la que el contorno neto (verde) incluye los pilares, mientras que el contorno bruto (azul) los omite.