공간 표준 클래스를 작성하려면

AecSpaceOffsetStandard에서 파생된 새 클래스를 정의해야 합니다. 이 클래스는 개별 규칙을 관리하는 프레임워크인 동시에 AutoCAD Architecture에서 표준을 로드 및 적용할 때 호출되는 입력점이 됩니다.

  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(string name) 메서드에 호출을 추가합니다.

    AecSpaceOffsetStandard.SetName() 메서드는 기본 클래스에서 구현되며 재지정할 수 없습니다. 클래스의 생성자에서 표준의 이름을 등록하려면 이 메서드를 호출해야 합니다. 이 이름은 AutoCAD Architecture에서 사용 가능한 영역 계산 표준 리스트에 표시되는 이름입니다.

  7. 클래스의 생성자에서 SetName() 메서드에 호출을 추가합니다.

    다음 예에서는 소프트웨어에서 기본 영역 계산 표준으로 자체 등록하는 샘플 프로젝트인 AecSpaceOffsetStandardSample 호출을 보여 줍니다.

    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. 표준의 규칙 객체는 세 가지 간격띄우기 경계(순 경계, 사용 가능한 경계 및 총 경계)를 사용하여 등록해야 합니다. AecSpaceOffsetStandard 기본 클래스에는 이런 규칙 세트에 대해 파생된 클래스에서 새 규칙 인스턴스를 추가할 수 있는 세 개의 컨테이너가 있습니다. 이 컨테이너는 다음 메서드를 사용하여 참조할 수 있습니다.
    • AecSpaceOffsetStandard.NetRules()
    • AecSpaceOffsetStandard.UsableRules()
    • AecSpaceOffsetStandard.GrossRules()

    이러한 각각의 호출은 다른 규칙 유형을 등록하기 위해 함수를 노출하는 Autodesk.Aec.SpaceOffsetRulesManager.AecSpaceOffsetRuleCollection 클래스의 객체에 대한 참조를 반환합니다. 이 객체는 AutoCAD Architecture에서 유지 및 사용됩니다. 다음 예에서는 세 가지 간격띄우기 유형을 사용하여 규칙을 등록하는 방법을 보여줍니다.

    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에서는 표준이 도면에 할당될 때마다 구현을 호출합니다.
    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...
    
    }
    }