(базовый класс SpaceOffsetRulesManager.AecBoundingAdjacencyRule)
Правила ограничивающих смежностей определяют смещение сегментов базового профиля пространства в зависимости от пространств, соседнего с этими сегментами. Наиболее часто профили общего смещения используются для определения по правилам ограничивающихся смежностей смещения границ к центру ограничивающего объекта на внутренних стенах и к наружной поверхности ограничивающего объекта на наружных стенах.
Для реализации правила ограничивающих смежностей необходимо добавить новый класс, полученный из базового класса SpaceOffsetRulesManager.AecBoundingAdjacencyRule. Как и для всех ранее описанных типов смещения, новый класс должен реализовывать интерфейс Apply этого базового класса и регистрировать себя для типов объектов, необходимых конструктору при вызове базового метода AecSpaceOffsetRuleBase.RegisterType(). Метод Apply каждого правила, необходимый для реализации, имеет следующий вид в AecBoundingAdjacencyRule:
public abstract bool Apply(Autodesk.AutoCAD.DatabaseServices.ObjectId idSpace, Autodesk.AutoCAD.DatabaseServices.ObjectId idObject, Autodesk.AutoCAD.DatabaseServices.ObjectId idAdjSpace);
Первый аргумент ObjectId представляет собой текущее пространство, для которого рассчитывается граница смещения. Второй аргумент ObjectId является ограничивающим объектом между пространством из первого аргумента и соседним пространством. Третий аргумент представляет собой ObjectId соседнего пространства. Если смежных пространств нет, как в случае наружных стен, величина аргумента будет равнаObjectId.Null. В следующем примере показан фрагмент кода для нового правила пространства BoundingAdjacencyRuleGross:
namespace AecSpaceOffsetStandardSample {public class BoundingAdjacencyRuleGross : AecBoundingAdjacencyRule {}public BoundingAdjacencyRuleGross() { } public override AecSpaceOffsetInfo Apply(ObjectId idSpace, ObjectId idObject, ObjectId idAdjSpace) {}//}
В следующем примере показана реализация правила ограничивающих смежностей, используемое в примере проекта. Правило определяет смещение к центру ограничивающего объекта для 2 пространств у внутренних стен и смещение к наружной поверхности стены при отсутствии соседнего пространства.
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);}