Необходимо определить класс, основанный на AecSpaceOffsetStandard. Этот класс будет основой, управляющей отдельными правилами и точкой входа, к которой обращается AutoCAD Architecture 2022 toolset при загрузке и применении стандарта.
using System;
using System.Collections.Generic;
using System.Text;
namespace AecSpaceOffsetStandardSample
{
public class Class1
{
}
}
Добавьте класс стандарта, основанный на абстрактном базовом классе Autodesk.Aec.SpaceOffsetRulesManager.AecSpaceOffsetStandard.
using Autodesk.Aec.SpaceOffsetRulesManager;
using System;
using System.Collections.Generic;
using System.Text;
using Autodesk.Aec.SpaceOffsetRulesManager;
namespace AecSpaceOffsetStandardSample
{
public class AecSpaceOffsetStandardSample : AecSpaceOffsetStandard
{
public AecSpaceOffsetStandardSample()
{
}
}
}
Метод AecSpaceOffsetStandard.SetName() реализуется в базовом классе, перезаписать его невозможно. Метод необходимо вызвать для регистрации имени стандарта в конструкторе класса. Это имя отображается в списке доступных стандартов расчета площади в AutoCAD Architecture 2022 toolset.
В следующем примере показан вызов для примера проекта AecSpaceOffsetStandardSample, который регистрируется в программе как стандарт расчета площади "Базовый".
public class AecSpaceOffsetStandardSample : AecSpaceOffsetStandard
{
public AecSpaceOffsetStandardSample ()
{
SetName("Basic");
}
}

public class AecSpaceOffsetStandardSample : AecSpaceOffsetStandard
{
public AecSpaceOffsetStandardSample ()
{
SetName("Basic");
} protected override void InitRules() {
// register rules
}
}
Каждый из этих вызовов возвращает ссылку на объект класса 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());
}
}
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...
}
}