점을 작성하고, 점 그룹에 점을 추가하고, 점 그룹에서 지표면을 작성하기 위해 Civil 3D용 Autodesk Dynamo에서 새 노드를 작성합니다.
샘플 Dynamo 스크립트: CoGoPoints.dyn
샘플 프로젝트: CoGoPoints.dwg
CoGoPoints.dll을 가져올 때 작성된 노드는 다음 그림과 같이 표시됩니다.
COGO 점은 도면에 작성되며 점 그룹에 추가되고, 지표면은 점 그룹에서 작성됩니다.
![]() |
![]() |
Dynamo에서는 추적 메커니즘을 실현하기 위해 두 가지 방법을 제공합니다. 한 가지 방법은 새 노드를 작성할 때 기존 방법(CommonConstruct)을 사용하는 것입니다. 다른 한 가지 방법은 템플릿으로 추적 코드를 작성하는 것입니다.
새 노드에 대한 추적 메커니즘을 실현하려면 Autodesk.AutoCAD.DynamoNodes.ObjectBase 또는 Autodesk.AutoCAD.DynamoNodes.Object에서 클래스가 파생되어야 합니다. 추적이 유효하도록 하려면 추적된 노드에 작성된 노드 클래스의 출력이 있어야 합니다.
이 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.PointGroupTObject는 Autodesk.AutoCAD.DatabaseServices.DBObject를 상속하는 데 필요한 AutoCAD 객체의 유형입니다.
TObject = Autodesk.Civil.DatabaseServices.PointGroupobjectCreator 함수가 객체를 작성합니다. 이 예에서 이는 새 점 그룹의 작성으로 정의됩니다.
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를 사용하면 데이터베이스에 대한 읽기/쓰기 액세스를 할 때 및 데이터 객체를 열기 위한 트랜잭션을 수행할 때 문서가 잠깁니다. 데이터베이스 객체를 읽거나 쓰려는 모든 노드는 위 방법을 사용해야 합니다.