创建空间标准类的步骤

必须定义一个派生自 AecSpaceOffsetStandard 的新类。该类将作为一个框架来管理 AutoCAD Architecture 2022 toolset 在加载和应用标准时调用的各个规则和入口点。

  1. 如果您创建了新项目,该项目将包含一个源文件,内容类似于:
    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace AecSpaceOffsetStandardSample
    {
    
    public class Class1
    {
    }
    
    }

    添加一个派生自抽象基本类 Autodesk.Aec.SpaceOffsetRulesManager.AecSpaceOffsetStandard 的标准类。

    注: 只有当正确设置了对 AecSpaceOffsetRuleManager.dll 的引用时,Autodesk.Aec.SpaceOffsetRulesManager 名称空间才可用。
  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(string name) 方法的调用。

    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. 必须通过三种不同的偏移边界(净边界、可用边界和总边界)注册所用标准的规则对象。AecSpaceOffsetStandard 基类有三个用于存储这些规则集的容器,派生类可向其中添加新的规则实例。可使用下列方法引用这些容器:
    • AecSpaceOffsetStandard.NetRules()
    • AecSpaceOffsetStandard.UsableRules()
    • AecSpaceOffsetStandard.GrossRules()

    这些调用将返回对 Autodesk.Aec.SpaceOffsetRulesManager.AecSpaceOffsetRuleCollection 类的一个对象的引用,该类可公开函数以注册不同的规则类型。这些对象由 AutoCAD Architecture 2022 toolset 维护和使用。下例演示了如何使用三种不同的偏移类型来注册规则:

    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...
    
    }
    }