スペース標準クラスを作成するには

AecSpaceOffsetStandard から派生する新しいクラスを定義する必要があります。 このクラスは、個々の規則を管理するフレームワークとなり、この標準をロードして適用する際に AutoCAD Architecture が呼び出すエントリ ポイントとなります。

  1. 新しいプロジェクトを作成した場合、プロジェクトには以下のようなソース ファイルが 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 によって呼び出されるいくつかのメソッドの実装を開始することができます。
  6. AecSpaceOffsetStandard.SetName (文字列名)メソッドに呼び出しを追加します。

    AecSpaceOffsetStandard.SetName() メソッドは基本クラスで実装されており、変更することはできません。 このメソッドは、クラスのコンストラクタで標準の名前を登録するために呼び出します。 登録した名前は、AutoCAD Architecture で利用可能な面積計算標準の一覧に表示されます。

  7. クラスのコンストラクタに SetName() メソッドの呼び出しを追加します。

    次の例では、サンプル プロジェクト AecSpaceOffsetStandardSample の呼び出しを示します。この中で、Basic 面積計算標準としてそれ自体を登録します。

    public class AecSpaceOffsetStandardSample : AecSpaceOffsetStandard
    {
    
    public AecSpaceOffsetStandardSample ()
    {
    
    SetName("Basic");
    
    }
    }
  8. 面積計算標準プラグイン名を登録した後、新しい AecSpaceOffsetStandardSample.InitRules() メソッドをクラスに追加する必要があります。このメソッドによって、抽象インタフェース AecSpaceOffsetStandard.InitRules() を変更できます。 AutoCAD Architecture は、実装する個々のオフセット規則をすべて登録するためにこのインタフェースを呼び出します。このメソッドは抽象メソッドであるため、カスタム標準クラスで実装する必要があります。 次の例を参照してください。
    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 によって保持および使用されます。次の例では、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 には、もう 1 つの仮想メソッド AecSpaceOffsetStandard.InitCurrentDatabase() があり、作成する標準で実装することができます。 これは、基本クラスの抽象メソッドではないため、実装は可能ですが、InitRules() メソッドと違って必須ではありません。 これは、面積計算標準によって使用され、分類定義やゾーン スタイルなど、規則が必要とする追加データで、現在の図面を初期化します。このメソッドが実装されていると、AutoCAD Architecture は、標準が図面に割り当てられるたびにその実装を呼び出します。
    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...
    
    }
    }