Правила ограничивающих смежностей

(базовый класс 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)
{
//
}
}
}

Пример правила ограничивающих смежностей BoundingAdjacencyRuleGross

В следующем примере показана реализация правила ограничивающих смежностей, используемое в примере проекта. Правило определяет смещение к центру ограничивающего объекта для 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);
}
}
}