Создание класса стандартов пространств

Необходимо определить класс, основанный на AecSpaceOffsetStandard. Этот класс будет основой, управляющей отдельными правилами и точкой входа, к которой обращается AutoCAD Architecture 2022 toolset при загрузке и применении стандарта.

  1. Если создан новый проект, он содержит один исходный файл, похожий на следующий:
    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace AecSpaceOffsetStandardSample
    {
    
    public class Class1
    {
    }
    
    }

    Добавьте класс стандарта, основанный на абстрактном базовом классе Autodesk.Aec.SpaceOffsetRulesManager.AecSpaceOffsetStandard.

    Прим.: Пространство имен Autodesk.Aec.SpaceOffsetRulesManager доступно только в том случае, если правильно настроена ссылка на AecSpaceOffsetRuleManager.dll.
  2. Для упрощения создания подключаемого модуля стандарта расчета площади рекомендуется ко всем необходимым классам добавить пространство имен. Добавьте в исходный файл следующую строку кода:
    using Autodesk.Aec.SpaceOffsetRulesManager;
    
  3. Переименуйте Class1 в имя, описывающее стандарт (например, AecSpaceOffsetStandardMyStandard), и сделайте его производным от абстрактного базового класса AecSpaceOffsetStandard.
  4. Добавьте к классу, необходимому в следующих этапах, конструктор по умолчанию, не имеющий параметров:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Autodesk.Aec.SpaceOffsetRulesManager;
    namespace AecSpaceOffsetStandardSample
    {
    
    public class AecSpaceOffsetStandardSample : AecSpaceOffsetStandard
    {
    
    public AecSpaceOffsetStandardSample()
    {
    }
    
    }
    }
  5. Если новый класс правильно настроен в исходном файле, можно приступить к реализации некоторых методов, которые предоставляются базовым классом AecSpaceOffsetStandard и вызываются из AutoCAD Architecture 2022 toolset.
  6. Добавьте вызов в метод AecSpaceOffsetStandard.SetName(имя строки).

    Метод AecSpaceOffsetStandard.SetName() реализуется в базовом классе, перезаписать его невозможно. Метод необходимо вызвать для регистрации имени стандарта в конструкторе класса. Это имя отображается в списке доступных стандартов расчета площади в AutoCAD Architecture 2022 toolset.

  7. Добавьте вызов метода SetName() в конструктор класса.

    В следующем примере показан вызов для примера проекта AecSpaceOffsetStandardSample, который регистрируется в программе как стандарт расчета площади "Базовый".

    public class AecSpaceOffsetStandardSample : AecSpaceOffsetStandard
    {
    
    public AecSpaceOffsetStandardSample ()
    {
    
    SetName("Basic");
    
    }
    }
  8. После регистрации имени подключаемого модуля стандарта расчета площади, к классу необходимо добавить новый метод AecSpaceOffsetStandardSample.InitRules(). Метод перезаписывает абстрактный интерфейс AecSpaceOffsetStandard.InitRules(). AutoCAD Architecture 2022 toolset вызывает интерфейс для регистрации всех отдельных правил смещения, которые планируется реализовать. Так как метод является абстрактным, его необходимо реализовать с помощью пользовательского класса стандартов. Указания см. в следующем примере:
    public class AecSpaceOffsetStandardSample : AecSpaceOffsetStandard
    {
    
    public AecSpaceOffsetStandardSample ()
    {
    
    SetName("Basic");
    
    } protected override void InitRules() {
    // register rules
    
    }
    }
  9. Объекты правил стандарта должны регистрироваться с 3 различными границами смещений (в чистоте, полезная и общая). Базовый класс AecSpaceOffsetStandard содержит 3 контейнера для этих наборов правил, к которым производный класс может добавить новые экземпляры правил. На эти контейнеры можно ссылаться с помощью следующих методов:
    • AecSpaceOffsetStandard.NetRules()
    • AecSpaceOffsetStandard.UsableRules()
    • AecSpaceOffsetStandard.GrossRules()

    Каждый из этих вызовов возвращает ссылку на объект класса Autodesk.Aec.SpaceOffsetRulesManager.AecSpaceOffsetRuleCollection, обрабатывающего функцию регистрации различных типов правил. Эти объекты сохраняются и используются в AutoCAD Architecture 2022 toolset. В следующем примере показано, как зарегистрировать правила с 3 различными типами смещений:

    public class AecSpaceOffsetStandardSample : AecSpaceOffsetStandard
    {
    
    public AecSpaceOffsetStandardSample ()
    {
    
    SetName("Basic");
    
    } protected override void InitRules() {
    // Register the rules with this standard, so the
    // offset calculation algorithm can call them
    // for the according boundary type
    NetRules().AppendBoundingOpeningRule(new BoundingOpeningRuleNet());
    // no usable boundary
    UsableRules().SetSpaceRule(new NullSpace());
    GrossRules().AppendBoundingObjectRule(new BoundingObjectRuleGross());
    GrossRules().AppendBoundingAdjacencyRule(new BoundingAdjacencyRuleGross());
    
    }
    }
  10. (Дополнительно) Класс AecSpaceOffsetStandard предоставляет другой виртуальный метод, который может быть реализован в собственном стандарте: AecSpaceOffsetStandard.InitCurrentDatabase(). Так как это не абстрактный метод базового класса, его можно реализовать, но, в отличие от метода InitRules() не в обязательном порядке. Можно воспользоваться стандартом расчета площади для инициализации текущего чертежа с дополнительными данными, для которых могут потребоваться эти правила, - например, определения классификации или стили зоны. Если метод реализован, AutoCAD Architecture 2022 toolset вызывает его каждый раз при назначении чертежу стандарта.
    public class AecSpaceOffsetStandardSample : AecSpaceOffsetStandard
    {
    
    public AecSpaceOffsetStandardSample ()
    {
    
    // set the name of the standard
    SetName("Basic");
    
    } // must be overriden protected override void InitRules() { } // can be overriden protected override void InitDatabase(Database* database) {
    // ...init database with classification definitions or zone styles, etc...
    
    }
    }