사용자 노드는 개념상 컨테이너로 간주할 수 있는 "Dynamo 사용자 노드" 내에 다른 노드 및 사용자 노드를 중첩하여 생성됩니다. 이 컨테이너 노드가 그래프에서 실행되면 해당 컨테이너 노드 내의 모든 항목이 실행되어 유용한 노드 조합을 재사용하고 공유할 수 있게 됩니다.
그래프에 여러 개의 사용자 노드 사본이 있는 경우 기본 사용자 노드를 편집하여 모든 사본을 업데이트할 수 있습니다. 이렇게 하면 워크플로우나 설계에서 발생할 수 있는 변경 사항에 맞게 조정하는 방식으로 그래프를 원활하게 업데이트할 수 있습니다.
사용자 노드의 가장 좋은 기능은 작업 공유 기능입니다. "파워 유저"가 복잡한 Dynamo 그래프를 만들고 Dynamo를 처음 접하는 설계자에게 전달하는 경우 그래프를 설계 상호작용을 위한 필수 요소로 압축할 수 있습니다. 사용자 노드를 열어 내부 그래프를 편집할 수 있지만 "컨테이너"는 단순하게 유지할 수 있습니다. 이 프로세스에서 사용자 노드를 사용하면 Dynamo 사용자가 깔끔하고 직관적인 그래프를 설계할 수 있습니다.
Dynamo에서 사용자 노드를 작성하는 방법에는 여러 가지가 있습니다. 이 장의 예에서는 Dynamo UI에서 직접 사용자 노드를 작성해 보겠습니다. 자신이 프로그래머이며 C# 또는 Zero-Touch 형식에 관심이 있는 경우 Dynamo Wiki에서 이 페이지를 참조하여 더 자세히 알아볼 수 있습니다.
사용자 노드 환경으로 이동하여 백분율을 계산하는 단순 노드를 만들어 보겠습니다. 사용자 노드 환경은 Dynamo 그래프 환경과 다르지만, 기본적으로 상호작용은 동일합니다. 언급한 김에 바로 첫 번째 사용자 노드를 작성해 보겠습니다.
사용자 노드를 처음부터 새로 작성하려면 Dynamo를 시작하고 사용자 노드를 선택하거나 캔버스에서 Ctrl+Shift+N을 누릅니다.
사용자 노드 특성 대화상자에서 이름, 설명 및 카테고리를 지정합니다.
이름: Percentage
설명: 값 하나의 다른 값 대비 백분율을 계산합니다.
카테고리: Math.Functions
지정하면 노란색 배경의 캔버스가 열립니다. 이는 사용자 노드 내에서 작업하고 있음을 나타냅니다. 이 캔버스에서는 모든 코어 Dynamo 노드와 함께 사용자 노드에서 들어오고 나가는 데이터에 레이블을 지정하는 입력 및 출력 노드에 액세스할 수 있습니다. 입력>기본에서 찾을 수 있습니다.
입력: 입력 노드는 사용자 노드에 입력 포트를 작성합니다. 입력 노드의 구문은 input_name : datatype = default_value(선택 사항) 입니다.
출력: 입력과 유사하지만, 이러한 노드는 사용자 노드에서 출력 포트를 만들고 이름을 지정합니다. 입력 및 출력 유형에 힌트를 제공하는 사용자 주석을 입력 및 출력 포트에 추가해 보십시오. 이는 사용자 노드 작성 섹션에 자세히 설명되어 있습니다.
이 사용자 노드를 .dyf(표준 .dyn와는 다름) 파일로 저장할 수 있으며, 이 노드는 사용자 세션 및 후속 세션에 자동으로 추가됩니다. 라이브러리의 사용자 노드는 애드온 섹션에서 찾을 수 있습니다.
이제 첫 번째 사용자 노드를 작성했으므로 다음 섹션에서는 사용자 노드 기능 및 일반 워크플로우를 게시하는 방법에 대해 자세히 알아보겠습니다. 또한 한 표면에서 다른 표면으로 형상을 전송하는 사용자 노드를 개발하는 과정도 살펴보겠습니다.
앞서 사용자 노드를 작성하여 Dynamo 그래프의 특정 프로세스에 적용해 보았습니다. 이 노드가 만족스러우므로 이제 다른 그래프에서 참조할 수 있도록 Dynamo 라이브러리에 보존하려고 합니다. 이렇게 하기 위해 노드를 로컬로 게시하겠습니다. 이 과정은 패키지를 게시하는 것과 유사한 프로세스인데, 이는 다음 장에서 자세히 살펴보겠습니다.
노드를 로컬로 게시하면 새 세션을 열 때 Dynamo 라이브러리에서 해당 노드에 액세스할 수 있게 됩니다. 노드를 게시하지 않은 경우 사용자 노드를 참조하는 Dynamo 그래프의 해당 폴더에도 해당 사용자 노드가 있어야 합니다(또는 _파일 > 라이브러리 가져오기_를 사용하여 사용자 노드를 Dynamo로 가져와야 함).
호스트 API 종속성이 없는 경우 Dynamo Sandbox 2.17 이후 버전에서 사용자 노드 및 패키지를 게시할 수 있습니다. 이전 버전에서는 Dynamo for Revit 및 Dynamo for Civil 3D에서만 사용자 노드 및 패키지 게시를 사용할 수 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이전 섹션에서 작성한 사용자 노드로 계속 진행해 보겠습니다. PointsToSurface 사용자 노드를 열면 Dynamo 사용자 노드 편집기에 그래프가 표시됩니다. Dynamo 그래프 편집기에서 사용자 노드를 두 번 클릭하여 열 수도 있습니다.
사용자 노드를 로컬로 게시하려면 캔버스를 마우스 오른쪽 버튼으로 클릭하고 "이 사용자 노드 게시..." 를 선택합니다.
위의 이미지와 유사하게 관련 정보를 채우고 "로컬로 게시" 를 선택합니다. 그룹 필드는 Dynamo 메뉴에서 액세스할 수 있는 주 요소를 정의합니다.
로컬로 게시하려는 모든 사용자 노드를 보관할 폴더를 선택합니다. 로드할 때마다 Dynamo에서 이 폴더를 확인하므로 폴더가 영구적인 위치에 있어야 합니다. 이 폴더로 이동한 후 "폴더 선택" 을 선택합니다. Dynamo 노드가 이제 로컬로 게시되므로 프로그램을 로드할 때마다 Dynamo 라이브러리에 표시됩니다.
사용자 노드 폴더 위치를 확인하려면 Dynamo > 기본 설정 > 패키지 설정 > 노드 및 패키지 경로 로 이동합니다.
이 창에는 경로 리스트가 표시됩니다.
Documents\DynamoCustomNodes... 는 로컬로 게시한 사용자 노드의 위치를 나타냅니다.
AppData\Roaming\Dynamo... 는 온라인으로 설치된 Dynamo 패키지의 기본 위치를 나타냅니다.
경로 이름 왼쪽에 있는 아래쪽 화살표를 클릭하여 리스트 순서에서 로컬 폴더 경로를 아래로 이동할 수도 있습니다. 맨 위 폴더는 패키지 설치의 기본 경로입니다. 따라서 기본 Dynamo 패키지 설치 경로를 기본 폴더로 유지하면 온라인 패키지가 로컬로 게시된 노드와 분리됩니다.
Dynamo의 기본 경로를 패키지 설치 위치로 설정하기 위해 경로 이름의 순서를 전환했습니다.
이 로컬 폴더로 이동하면 원래 사용자 노드를 Dynamo 사용자 노드 파일의 확장자인 ".dyf" 폴더에서 찾을 수 있습니다. 이 폴더의 파일을 편집할 수 있으며 그러면 노드가 UI에서 업데이트됩니다. 또한 주 DynamoCustomNode 폴더에 노드를 더 추가할 수도 있는데, 그러면 Dynamo가 다시 시작할 때 해당 노드를 라이브러리에 추가합니다.
이제 Dynamo가 매번 Dynamo 라이브러리의 "DynamoPrimer" 그룹에 있는 "PointsToSurface"와 함께 로드됩니다.
Dynamo는 광범위한 시각적 프로그래밍 작업을 위해 다양한 코어 노드를 제공합니다. 경우에 따라 더 빠르거나 더 뛰어난 솔루션, 또는 쉽게 공유할 수 있는 솔루션은 바로 자체 노드를 작성하는 것입니다. 자체 노드는 다른 프로젝트에서 재사용할 수 있으므로 그래프를 더욱 명확하고 선명하게 만들고 패키지 관리자에 푸시하여 글로벌 Dynamo 커뮤니티와 공유할 수 있습니다.
Dynamo에서는 사용자 노드를 작성하는 여러 가지 다른 방법을 제공합니다. 사용자 노드를 처음부터 새로 만들거나, 기존 그래프에서 만들거나, C#에서 명시적으로 만들 수 있습니다. 이 섹션에서는 기존 그래프에서 Dynamo UI의 사용자 노드를 만드는 방법을 다룹니다. 이 방법은 작업공간을 정리하고, 노드 시퀀스를 패키징하여 다른 위치에서 재사용할 수 있도록 하는 데 적합합니다.
아래 이미지에서는 UV 좌표를 사용하여 한 표면에서 다른 표면으로 점을 매핑합니다. 이 개념을 사용하여 XY 평면의 곡선을 참조하는 패널형 표면을 작성해 보겠습니다. 여기서는 패널화를 위한 쿼드 패널을 작성할 것입니다. 그러나 동일한 논리를 사용하여 UV 매핑을 통해 다양한 패널을 작성할 수 있습니다. 이렇게 하면 그래프 또는 다른 Dynamo 워크플로우에서 비슷한 프로세스를 보다 쉽게 반복할 수 있으므로 이는 사용자 노드 개발에 매우 유용한 방법입니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
먼저 사용자 노드에 중첩할 그래프를 작성해 보겠습니다. 이 예에서는 UV 좌표를 사용하여 기준 표면에서 대상 표면으로 다각형을 매핑하는 그래프를 작성합니다. 이 UV 매핑 프로세스는 자주 사용하는 방법이므로 사용자 노드에 적합합니다. 표면 및 UV 공간에 대한 자세한 내용은 표면 페이지를 참조하십시오. 전체 그래프는 위의 다운로드한 .zip 파일에 포함된 UVmapping_Custom-Node.dyn 입니다.
Code Block: 이 줄을 사용하여 -45와 45 사이의 숫자 10개 범위를 작성합니다.
45..45..#10;
Point.ByCoordinates: Code Block의 출력을 'x' 및 'y' 입력에 연결하고 레이싱을 상호 참조로 설정합니다. 이제 점 그리드가 표시됩니다.
Plane.ByOriginNormal: ‘Point’ 출력을 ‘origin’ 입력에 연결하여 각 점에서 평면을 작성합니다. 기본 법선 벡터인 (0,0,1)이 사용됩니다.
Rectangle.ByWidthLength: 이전 단계의 평면을 ‘plane’ 입력에 연결하고 값이 10 인 Code Block을 사용하여 폭과 길이를 지정합니다.
이제 직사각형 그리드가 표시됩니다. UV 좌표를 사용하여 이러한 직사각형을 대상 표면에 매핑해 보겠습니다.
Polygon.Points: 이전 단계의 Rectangle.ByWidthLength 출력을 ‘polygon’ 입력에 연결하여 각 직사각형의 코너 점을 추출합니다. 이러한 점은 대상 표면에 매핑할 점입니다.
Rectangle.ByWidthLength: 값이 100 인 Code Block 을 사용하여 직사각형의 폭과 길이를 지정합니다. 이는 기준 표면의 경계가 됩니다.
Surface.ByPatch: 이전 단계의 Rectangle.ByWidthLength를 ‘closedCurve’ 입력에 연결하여 기준 표면을 작성합니다.
Surface.UVParameterAtPoint: Polygon.Points 노드의 ‘Point’ 출력과 Surface.ByPatch 노드의 ‘Surface’ 출력을 연결하여 각 점에서 UV 매개변수를 반환합니다.
기준 표면과 UV 좌표 세트가 있으므로 대상 표면을 가져와 표면 사이의 점을 매핑할 수 있습니다.
File Path: 가져올 표면의 파일 경로를 선택합니다. 파일 유형은 .SAT여야 합니다. "찾아보기..." 버튼을 클릭하고 위에서 다운로드한 .zip 파일의 UVmapping_srf.sat 파일로 이동합니다.
Geometry.ImportFromSAT: 파일 경로를 연결하여 표면을 가져옵니다. 가져온 표면이 형상 미리보기에 표시됩니다.
UV: UV 매개변수 출력을 UV.U 및 UV.V 노드에 연결합니다.
Surface.PointAtParameter: 가져온 표면과 u 및 v 좌표를 연결합니다. 이제 대상 표면에 3D 점 그리드가 표시됩니다.
마지막 단계는 3D 점을 사용하여 직사각형 표면 패치를 구성하는 것입니다.
PolyCurve.ByPoints: 표면의 점을 연결하여 점을 통해 polycurve를 구성합니다.
Boolean: Boolean을 작업공간에 추가하고 ‘connectLastToFirst’ 입력에 연결한 다음, True로 전환하여 polycurve를 닫습니다. 이제 표면에 매핑된 직사각형이 표시됩니다.
Surface.ByPatch: polycurve를 ‘closedCurve’ 입력에 연결하여 표면 패치를 구성합니다.
이제 노드의 입력 및 출력으로 사용할 항목을 생각하며 사용자 노드에 중첩할 노드를 선택해 보겠습니다. 직사각형뿐만 아니라 다각형을 매핑할 수 있도록 사용자 노드를 가능한 한 유연하게 매핑해고자 합니다.
다음 노드(Polygon.Points로 시작)를 선택하고 작업공간을 마우스 오른쪽 버튼으로 클릭한 다음, '사용자 노드 작성'을 선택합니다.
사용자 노드 특성 대화상자에서 사용자 노드에 이름, 설명 및 카테고리를 지정합니다.
이름: MapPolygonsToSurface
설명: 베이스에서 대상 표면으로 다각형 매핑
애드온 범주: Geometry.Curve
사용자 노드에 따라 작업공간이 상당히 정리되었습니다. 입력과 출력의 이름이 원래 노드에 따라 지정되었습니다. 보다 알아보기 쉬운 이름을 갖도록 사용자 노드를 편집해 보겠습니다.
사용자 노드를 두 번 클릭하여 편집합니다. 그러면 노드의 내부를 나타내는 노란색 배경의 작업공간이 열립니다.
Inputs: 입력 이름을 baseSurface 및 targetSurface 로 변경합니다.
Outputs: 매핑된 다각형에 출력을 추가합니다.
사용자 노드를 저장하고 홈 작업공간으로 돌아갑니다. MapPolygonsToSurface 노드에 방금 변경한 사항이 반영됩니다.
사용자 해설에서 추가하여 사용자 노드의 견고성을 늘릴 수도 있습니다. 해설은 입력 및 출력 유형에서 힌트를 제공하거나 노드의 기능을 설명하는 데 도움이 될 수 있습니다. 사용자 노드의 입력 또는 출력 위에 마우스를 놓으면 해설이 나타납니다.
사용자 노드를 두 번 클릭하여 편집합니다. 그러면 노란색 배경 작업공간이 다시 열립니다.
입력 Code Block 편집을 시작합니다. 해설을 시작하려면 "//" 다음에 해설 문자를 입력합니다. 노드를 명확히 하는 데 도움이 될 수 있는 모든 항목을 입력합니다. 여기서는 targetSurface 에 대해 설명합니다.
또한 입력 유형을 값과 같게 설정하여 inputSurface 의 기본값을 설정해 보겠습니다. 여기서는 기본값을 원래 Surface.ByPatch 세트로 설정합니다.
해설을 출력에 적용할 수도 있습니다.
출력 Code Block에서 문자를 편집합니다. "//" 다음에 주석 문자를 입력합니다. 여기서는 보다 자세한 세부 설명을 추가하여 Polygons 및 surfacePatches 출력을 명확히 해 보겠습니다.
사용자 노드 입력 위에 커서를 놓으면 해설이 표시됩니다.
inputSurface 에 기본값을 설정한 상태로, 표면 입력 없이 정의를 실행할 수도 있습니다.