API 스크립트 예: COGO 점 생성

점을 작성하고, 점 그룹에 점을 추가하고, 점 그룹에서 지표면을 작성하기 위해 Civil 3D용 Autodesk Dynamo에서 새 노드를 작성합니다.

샘플 Dynamo 스크립트: CoGoPoints.dyn

샘플 프로젝트: CoGoPoints.dwg

  1. .NET Framework 4.7로 CoGoPoints 클래스 라이브러리(.Net Framework)라고 하는 새 C# 프로젝트를 작성합니다.
  2. 파일 추가: Point.cs, PointGroup.cs 및 Surface.cs를 프로젝트에 추가합니다.
  3. Civil 3D 설치기 경로에서 AeccDbMgd.dll 등의 파일에 참조를 추가합니다.
  4. 솔루션을 구축한 다음 CoGoPoints.dll을 생성합니다.
  5. Civil 3D를 실행하고 CoGoPoints.dwg를 엽니다.
  6. 관리 탭 시각적 프로그래밍 패널 Dynamo 를 클릭합니다.
  7. 파일 라이브러리 가져오기를 선택하고 CoGoPoints.dll을 선택합니다.

    CoGoPoints.dll을 가져올 때 작성된 노드는 다음 그림과 같이 표시됩니다.

  8. CoGoPoints.dyn 스크립트를 열고 실행합니다.

    COGO 점은 도면에 작성되며 점 그룹에 추가되고, 지표면은 점 그룹에서 작성됩니다.

새 노드를 작성하고 추적 메커니즘을 새 노드에 추가하기 위해 Dynamo에서 두 개의 클래스가 제공됩니다.
  1. Autodesk.AutoCAD.DynamoNodes.ObjectBase: Autodesk.AutoCAD.DatabaseServices.DBObject의 캡슐화 제공
  2. Autodesk.AutoCAD.DynamoNodes.Object: Autodesk.AutoCAD.DatabaseServices.Object에 따라 특성 또는 함수를 확장하도록 Autodesk.AutoCAD.DynamoNodes.ObjectBase에서 파생됨

Dynamo에서는 추적 메커니즘을 실현하기 위해 두 가지 방법을 제공합니다. 한 가지 방법은 새 노드를 작성할 때 기존 방법(CommonConstruct)을 사용하는 것입니다. 다른 한 가지 방법은 템플릿으로 추적 코드를 작성하는 것입니다.

새 노드에 대한 추적 메커니즘을 실현하려면 Autodesk.AutoCAD.DynamoNodes.ObjectBase 또는 Autodesk.AutoCAD.DynamoNodes.Object에서 클래스가 파생되어야 합니다. 추적이 유효하도록 하려면 추적된 노드에 작성된 노드 클래스의 출력이 있어야 합니다.

추적 방법(CommonConstruct) 사용

이 CommonConstruct 함수는 Autodesk.AutoCAD.DynamoNodes.ObjectBase 및 Autodesk.AutoCAD.DynamoNodes.Object 둘 다에서 작성됩니다.

Autodesk.AutoCAD.DynamoNodes.ObjectBase Autodesk.AutoCAD.DynamoNodes.Object

Autodesk.AutoCAD.DynamoNodes.ObjectBase 또는 Autodesk.AutoCAD.DynamoNodes.Object 중 하나를 상속하도록 클래스를 작성할 수 있습니다. 상속된 관계에 따라 새 노드를 작성할 때 위의 방법을 호출할 수 있습니다. 예를 들어, 다음 노드인 PointGroup.CreateFromPoints를 확인합니다.

노드는 점 리스트의 Civil 3D에서 점 그룹을 작성합니다.

Autodesk.Civil.DatabaseServices.PointGroup은 Autodesk.AutoCAD.DatabaseServices.Object에서 파생된 Civil 3D에서 점 그룹을 정의합니다. Civil 3D 점 그룹 유형을 캡슐화하려면 Autodesk.AutoCAD.DynamoNodes.Objectbase에서 파생된 PointGroup이라는 새 클래스를 작성해야 합니다. 추적 메커니즘을 실현하기 위해 DynamoServices.RegisterForTrace 속성을 PointGroup 클래스에 추가할 수 있습니다. 이는 기본적으로 Dynamo에서 지원하기 때문에 필수는 아니지만 좋은 코딩 규약입니다.

이제 PointGroup에서 CreateFromPoints 노드를 정의할 수 있습니다. 내재된 관계 때문에 Autodesk.AutoCAD.DynamoNodes.ObjectBase에서 CommonConstruct를 호출할 수 있습니다.

TNode 방법은 노드의 유형이며 Autodesk.AutoCAD.DynamoNodes.ObjectBase를 상속하는 데 필요합니다.

이 예제에서는 다음과 같이 정의됩니다.
TNode = CogoPoints.PointGroup
TObject는 Autodesk.AutoCAD.DatabaseServices.DBObject를 상속하는 데 필요한 AutoCAD 객체의 유형입니다.
이 예제에서는 다음과 같이 정의됩니다.
TObject = Autodesk.Civil.DatabaseServices.PointGroup
objectCreator 함수가 객체를 작성합니다. 이 예에서 이는 새 점 그룹의 작성으로 정의됩니다.

objectUpdater 함수가 객체를 업데이트합니다. 이 예에서 이는 기존 점 그룹의 업데이트로 정의됩니다.

CommonConstruct 함수는 추적된 핸들에서 기존 객체를 찾으려고 시도합니다. 기존 객체를 찾으면 isExisting==true와 objectUpdater 호출을 통해 업데이트됩니다. 업데이트에 실패하면 objectCreator 호출로 새 객체가 만들어진 다음, objectUpdater에서 isExisting==false를 호출합니다.

CommonConstruct 함수가 동일하게 추적된 핸들 값을 사용하여 데이터베이스에서 기존 객체를 업데이트하려고 시도합니다. 실패하면 새 객체를 작성합니다. 객체가 업데이트를 지원하지 않는 경우 isExisting==false를 반환할 수 있습니다. 즉, 새 객체를 만들고 이전 객체를 삭제하게 됩니다. 이 경우 CommonConstruct는 여전히 동일한 핸들 값을 유지하려고 시도합니다.

전체 샘플 코드는 PointGroup.cs에 표시되고 Autodesk.AutoCAD.DynamoNodes.Object의 CommonConstruct 방법은 위에 설명된 바와 같습니다.

추적 코드 템플릿 사용

다음 템플릿으로 추적 코드를 작성할 수 있습니다. 그러나 새 노드의 클래스는 여전히 Autodesk.AutoCAD.DynamoNodes.Object 또는 Autodesk.AutoCAD.DynamoNodes.Entity를 상속해야 합니다.

위의 템플릿에서 추적 코드를 실현하기 위해 작성 및 업데이트 코드를 모두 입력할 수 있습니다.

DocumentContext 정보

DocumentContext를 사용하면 데이터베이스에 대한 읽기/쓰기 액세스를 할 때 및 데이터 객체를 열기 위한 트랜잭션을 수행할 때 문서가 잠깁니다. 데이터베이스 객체를 읽거나 쓰려는 모든 노드는 위 방법을 사용해야 합니다.