(базовый класс 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); }
Граница в чистоте и чистая штриховка смещены к центру двери и не смещаются к проему в стене