(базовый класс SpaceOffsetRulesManager.AecBoundingOpeningRule)
Правило ограничивающих проемов можно использовать для определения смещения в проемах стен, ограничивающих пространства, например, дверях и окнах. Например, профиль смещения границ в чистоте нельзя определить с помощью смещения профиля только по ограничивающим стенам. Как правило, стена также обрезается у дверей и окон. Этот тип правила можно использовать для описания стены в профиле смещения, рассчитанного по стандарту расчета площади.
Для реализации правила ограничивающих проемов необходимо добавить новый класс, полученный из базового класса SpaceOffsetRulesManager.AecBoundingOpeningRule. Новый класс должен реализовывать интерфейс Applyбазового класса и регистрировать себя для типов объекта, необходимых конструктору при вызове базового метода AecSpaceOffsetRuleBase.RegisterType. Обратите внимание, что это правило может применяться только к следующим классам:
Регистрация этого правила для других типов объектов не дает никаких результатов. Метод Apply этого класса, который должно реализовывать каждое правило, имеет следующий синтаксис в AecBoundingOpeningRule:
public abstract AecSpaceOffsetOpeningInfo* Apply(Autodesk.AutoCAD.DatabaseServices.ObjectId idSpace, Autodesk.AutoCAD.DatabaseServices.ObjectId idAdjSpace, Autodesk.AutoCAD.DatabaseServices.ObjectId idObject, Autodesk.AutoCAD.DatabaseServices.ObjectId idOpening);
Первый аргумент представляет собой ObjectId текущее пространство, для которого рассчитывается контур границы смещения Третий аргумент представляет собой ObjectId смежного пространства. Если смежных пространств нет, как в случае наружных стен, величина этого аргумента будет ObjectId.Null. Третий аргумент ObjectId является объектом с прикрепленным проемом. Как правило, это стена, ограничивающая пространство и имеющая проем. Четвертый параметрObjectId представляет собой собственно исследуемый проем. В следующем примере показан фрагмент кода для нового правила проема BoundingOpeningRuleNet:
namespace AecSpaceOffsetStandardSample
{
public class BoundingOpeningRuleNet : AecBoundingOpeningRule
{
public BoundingOpeningRuleNet ()
{
RegisterType(typeof(Door));
} public override AecSpaceOffsetInfo* Apply(ObjectId idSpace, ObjectId idAdjSpace, ObjectId idObject, ObjectId idOpening) { }
}
}
В следующем примере показано простое правило ограничивающих проемов, где определяется смещение для дверей. Чтобы правило не применялось к окнам, оно регистрируется только для объекта двери, поэтому AutoCAD Architecture 2022 toolset не вызывает его для всех других проемов. Это правило используется в примере проекта AecSpaceOffsetStandardSample. Смещение определяется как заходящее внутрь дверной панели.
namespace AecSpaceOffsetStandardSample
{
public class BoundingOpeningRuleNet : AecBoundingOpeningRule
{
public BoundingOpeningRuleNet()
{
RegisterType(typeof(Door));
}
public override AecSpaceOffsetOpeningInfo* Apply(ObjectId idSpace, ObjectId idAdjSpace, ObjectId idObject, ObjectId idOpening)
{
return new AecSpaceOffsetOpeningInfo(AecSpaceOffsetOpeningType.PanelAdjacent);
} return new AecSpaceOffsetInfo(AecSpaceOffsetType.NoChange); }
}
}

Граница в чистоте и чистая штриховка смещены к центру двери и не смещаются к проему в стене