이전 섹션에서는 사용자 노드 및 예제 파일을 사용하여 MapToSurface 패키지를 설정하는 방법을 자세히 살펴보았습니다. 하지만 로컬로 개발된 패키지를 게시하려면 어떻게 해야 할까요? 이 성공 사례에서는 로컬 폴더의 파일 세트에서 패키지를 게시하는 방법을 보여 줍니다.
패키지를 게시하는 방법에는 여러 가지가 있습니다. 권장되는 프로세스는 로컬로 게시하고 로컬로 개발한 후 온라인으로 게시하는 것입니다. 패키지에 모든 파일이 포함된 폴더로 시작하겠습니다.
이전 단원에서 패키지를 설치한 경우에는 동일한 패키지로 작업하는 일이 없도록 MapToSurface 패키지를 게시하기 전에 제거합니다.
먼저 패키지 > Package Manager > 설치된 패키지 탭으로 이동하고 MapToSurface 옆에 있는 세로 점 메뉴를 클릭하고 삭제를 클릭합니다.
그런 다음, Dynamo를 다시 시작합니다. 다시 열 때 "패키지 관리" 창을 선택하면 MapToSurface 가 더 이상 해당 창에 표시되지 않습니다. 이제 처음부터 새로 시작할 준비가 되었습니다.
호스트 API 종속성이 없는 경우 Dynamo Sandbox 2.17 이후 버전에서 사용자 노드 및 패키지를 게시할 수 있습니다. 이전 버전에서는 Dynamo for Revit 및 Dynamo for Civil 3D에서만 사용자 노드 및 패키지 게시를 사용할 수 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이는 패키지에 대한 첫 번째 제출이며, 모든 예시 파일 및 사용자 노드를 하나의 폴더에 배치했습니다. 이 폴더가 준비되면 Dynamo Package Manager로 업로드할 준비가 된 것입니다.
이 폴더에는 5개의 사용자 노드(.dyf)가 포함되어 있습니다.
또한 이 폴더에는 5개의 예시 파일(.dyn)과 1개의 가져온 벡터 파일(.svg)도 포함되어 있습니다. 이러한 파일은 사용자에게 사용자 노드를 사용하는 방법을 보여 주기 위해 입문 연습으로 사용됩니다.
Dynamo에서 패키지 > Package Manager > 새 패키지 게시 탭을 클릭합니다.
패키지 게시 탭에서 창 왼쪽에 있는 관련 필드를 채웁니다.
다음으로, 패키지 파일을 추가하겠습니다. 파일을 하나씩 추가하거나 디렉토리 추가(1)를 선택하여 전체 폴더를 추가할 수 있습니다. .dyf 파일이 아닌 파일을 추가하려면 탐색기 창에서 파일 유형을 "모든 파일(.)" 로 변경합니다. 모든 파일, 사용자 노드(.dyf) 또는 예제 파일(.dyn)을 별다른 구분 없이 추가하겠습니다. 패키지를 게시하면 Dynamo에서는 이러한 항목을 분류합니다.
MapToSurface 폴더를 선택한 후에는 Package Manager에 폴더 내용이 표시됩니다. 폴더 구조가 복잡한 자체 패키지를 업로드하는 경우 Dynamo에서 폴더 구조를 변경하지 않도록 하려면 "폴더 구조 유지" 토글을 활성화하면 됩니다. 이 옵션은 고급 사용자를 위한 옵션으로, 패키지가 의도적으로 특정 방식으로 설정되지 않은 경우 이 토글을 해제하고 Dynamo에서 필요에 따라 파일을 구성할 수 있도록 하는 것이 좋습니다. 다음을 클릭하여 계속 진행합니다.
여기에서는 게시하기 전에 Dynamo에서 패키지 파일을 구성하는 방법을 미리 볼 수 있습니다. 완료를 클릭하여 계속 진행합니다.
"로컬로 게시"(1)를 클릭하여 게시합니다. 이 작업을 따라 진행하고 있는 경우 Package Manager에 중복된 패키지를 포함하지 않기 위해 "로컬로 게시" 는 클릭하고, "온라인으로 게시" 는 클릭하지 않아야 합니다.
게시하고 나면 "DynamoPrimer" 그룹 또는 Dynamo 라이브러리에서 사용자 노드를 사용할 수 있게 됩니다.
이제 루트 디렉토리를 확인하여 Dynamo에서 방금 작성한 패키지의 형식을 어떻게 지정했는지 살펴보겠습니다. 이렇게 하려면 설치된 패키지 탭으로 이동하고 MapToSurface 옆에 있는 세로 점 메뉴를 클릭하고 루트 디렉토리 표시를 선택합니다.
루트 디렉토리는 패키지의 로컬 위치에 있습니다(패키지를 "로컬"로 게시함). Dynamo에서는 현재 이 폴더를 참조하여 사용자 노드를 읽고 있습니다. 따라서 영구적인 폴더 위치(예: 데스크톱 아님)에 디렉토리를 로컬로 게시하는 것이 중요합니다. 다음은 Dynamo 패키지 폴더를 분석한 것입니다.
bin 폴더에는 C# 또는 Zero-Touch 라이브러리로 작성된 .dll 파일이 있습니다. 이 패키지에 대한 항목은 없으므로 이 예에서는 이 폴더가 비어 있습니다.
dyf 폴더에는 사용자 노드가 있습니다. 이 폴더를 열면 이 패키지의 모든 사용자 노드(.dyf 파일)가 표시됩니다.
추가 폴더에는 모든 추가 파일이 포함됩니다. 이러한 파일은 Dynamo 파일(.dyn) 또는 필요한 추가 파일(.svg, .xls, .jpeg, .sat 등)일 가능성이 큽니다.
pkg 파일은 패키지 설정을 정의하는 기본 텍스트 파일입니다. 이 작업은 Dynamo에서 자동화되어 있지만, 자세히 확인해 보고 싶은 경우 편집할 수 있습니다.
참고: 실제로 자체 패키지를 게시하지 않는 한, 이 단계에 따라 작업하지 마십시오.
게시할 준비가 되면 패키지 > Package Manager > 설치된 패키지 창에서 게시할 패키지 오른쪽에 있는 버튼을 선택하고 게시를 선택합니다.
이미 게시된 패키지를 업데이트하는 경우 "버전 게시"를 선택하면 Dynamo에서는 해당 패키지의 루트 디렉토리에 있는 새 파일을 기반으로 하여 온라인으로 패키지를 업데이트합니다. 아주 간단합니다.
게시된 패키지의 루트 폴더에서 파일을 업데이트하는 경우 내 패키지 탭에서 "버전 게시..." 를 선택하여 새 버전의 패키지를 게시할 수도 있습니다. 이렇게 하면 원활하게 필요에 따라 컨텐츠를 업데이트하고 커뮤니티와 공유할 수 있습니다. 버전 게시 는 패키지의 유지 담당자인 경우에만 작동합니다.
몇 개의 사용자 노드를 작성했으면 다음 단계는 패키지를 통해 노드를 구성 및 게시하는 것입니다. 이렇게 하면 편리하게 노드를 저장하고 Dynamo 커뮤니티와 쉽게 공유할 수 있습니다.
Dynamo에서는 개인적으로 사용하거나 Dynamo 커뮤니티와 공유하기 위해 패키지를 작성하는 다양한 방법을 제공합니다. 아래의 성공 사례에서 기존 패키지를 분해하여 설정 방법을 살펴보겠습니다. 이 성공 사례는 이전 장의 단원을 토대로 작성되었으며, 한 Dynamo 표면에서 다른 표면으로 UV 좌표별로 형상을 매핑하기 위한 사용자 노드 세트를 제공합니다.
한 표면에서 다른 표면으로의 점 UV 매핑을 보여 주는 샘플 패키지로 작업해 보겠습니다. 이 입문서의 사용자 노드 작성 섹션에서 이미 도구의 기본 사항을 구축했습니다. 아래의 파일은 UV 매핑의 개념을 파악하고 게시 가능한 라이브러리를 위한 도구 세트를 개발하는 방법을 보여 줍니다.
이 이미지에서는 UV 좌표를 사용하여 한 표면에서 다른 표면으로 점을 매핑합니다. 이 패키지는 이러한 개념을 기준으로 하지만, 좀 더 복잡한 형상을 나타냅니다.
이전 장에서는 XY 평면에 정의된 곡선을 기준으로 Dynamo에서 표면을 패널화하기 위한 방법을 살펴보았습니다. 이 성공 사례에서는 더 많은 치수를 포함하는 형상을 위해 이러한 개념을 확장합니다. 이 패키지가 개발된 방식을 보여 주기 위해 이를 구축된 대로 설치해 보겠습니다. 다음 섹션에서는 이 패키지가 게시된 방식을 살펴보겠습니다.
Dynamo에서 패키지 > Package Manager를 클릭하고 "MapToSurface"(1개의 단어) 패키지를 검색합니다. 설치를 클릭하여 다운로드를 시작하고 패키지를 라이브러리에 추가합니다.
설치 후에 사용자 노드를 애드온 > DynamoPrimer 섹션에서 사용할 수 있습니다.
이제 패키지가 설치되었으므로 설정 방법을 살펴보겠습니다.
현재 작성 중인 패키지에서는 참조용으로 만든 5개의 사용자 노드를 사용합니다. 아래에서는 각 노드가 수행하는 작업을 살펴보겠습니다. 일부 사용자 노드는 다른 사용자 노드를 통해 만들어지며, 그래프는 다른 사용자가 쉽게 이해할 수 있도록 배치되어 있습니다.
이는 5개의 사용자 노드로 구성된 간단한 패키지입니다. 아래 단계에서는 각 사용자 노드의 설정에 대해 간략하게 설명하겠습니다.
다른 모든 매핑 노드의 기준이 되는 기본 사용자 노드입니다. 간단히 말해, 해당 노드에서는 소스 표면 UV 좌표의 점을 대상 표면 UV 좌표의 위치에 매핑합니다. 점은 보다 복잡한 형상이 만들어지는 기준이 되는 가장 기본적인 형상이기 때문에 이 논리를 사용하여 2D 및 3D 형상을 한 표면에서 다른 표면으로 매핑할 수 있습니다.
매핑된 점을 1D 형상에서 2D 형상으로 연장하는 논리가 여기서는 간단히 다각형으로 나와 있습니다. "PointsToSurface" 노드를 이 사용자 노드에 중첩했습니다. 이런 식으로 각 다각형의 점을 표면에 매핑한 다음, 매핑된 해당 점에서 다각형을 재생성할 수 있습니다. 적절한 데이터 구조(점 리스트의 리스트)를 유지하여 다각형을 점 세트로 줄인 후에 따로 유지할 수 있습니다.
"PolygonsToSurface" 노드에서와 같이 동일한 논리가 여기에 적용됩니다. 하지만 다각형 점을 매핑하는 대신, NURBS 곡선의 제어점을 매핑합니다.
OffsetPointsToSurface
이 노드는 조금 더 복잡하지만 개념은 단순합니다. 즉, "PointsToSurface" 노드와 같이 이 노드에서는 한 표면에서 다른 표면으로 점을 매핑합니다. 그러나 원래 소스 표면에 없는 점도 고려하고, 가장 가까운 UV 매개변수에 대한 거리를 가져온 후 이 거리를 해당 UV 좌표의 대상 표면 법선에 매핑합니다. 예제 파일을 살펴보면 이 방법을 더욱 잘 이해할 수 있습니다.
예제 파일에서 소스 그리드부터 물결형 표면으로 매핑할 파라메트릭 표면을 작성하는 간단한 노드입니다.
예제 파일은 패키지의 루트 폴더에 있습니다. Package Manager > 설치된 패키지 탭을 클릭합니다.
MapToSurface 옆의 세로 점 메뉴 > 루트 디렉토리 표시를 클릭합니다.
다음으로 "extra" 폴더를 엽니다. 이 폴더에는 사용자 노드가 아닌 패키지의 모든 파일이 들어 있습니다. 여기에는 Dynamo 패키지에 대한 예제 파일(있는 경우)이 저장되어 있습니다. 아래의 스크린샷에는 각 예제 파일에 설명된 개념이 나와 있습니다.
이 예제 파일에서는 직사각형 그리드를 기준으로 표면을 패널화하는 데 "PointsToSurface" 를 사용하는 방법을 보여 줍니다. 이전 장에서 비슷한 워크플로우를 설명했기 때문에 이 과정은 익숙하게 느껴질 것입니다.
이 연습 파일에서는 비슷한 워크플로우를 사용하여 한 표면에서 다른 표면으로 원(또는 원을 나타내는 다각형)을 매핑하는 설정을 보여 줍니다. 여기서는 "PolygonsToSurface" 노드가 사용됩니다.
이 예제 파일에서는 "NurbsCrvToSurface" 노드를 사용하므로 약간 더 복잡해집니다. 대상 표면이 지정된 거리만큼 간격이 띄어지고 NURBS 곡선은 원래 대상 표면과 간격띄우기 표면에 매핑됩니다. 여기서 매핑된 두 곡선은 표면을 작성하기 위해 로프트된 후 두꺼워집니다. 그 결과 솔리드는 대상 표면 법선을 나타내는 굴곡을 가지게 됩니다.
이 예제 파일에서는 소스 표면에서 대상 표면으로 주름식 polysurface를 매핑하는 방법을 보여 줍니다. 소스 및 대상 표면은 각각 그리드와 회전된 표면에 걸쳐 있는 직사각형 표면입니다.
소스 표면에서 대상 표면으로 매핑된 소스 polysurface입니다.
사용자 노드에서는 여러 유형의 곡선을 매핑할 수 있으므로 이 마지막 파일에서는 Illustrator에서 내보낸 SVG 파일을 참조하고 가져온 곡선을 대상 표면에 매핑합니다.
.svg 파일의 구문을 분석하면 곡선이 .xml 형식에서 Dynamo polycurve로 변환됩니다.
가져온 곡선이 대상 표면에 매핑됩니다. 따라서 Illustrator에서 패널화를 명시적으로(마우스를 클릭하여) 설계하고, Dynamo로 가져온 후 대상 표면에 적용할 수 있습니다.
Dynamo는 다양한 기능을 기본적으로 제공하고, Dynamo의 기능을 크게 확장할 수 있는 광범위한 패키지 라이브러리도 유지합니다. 패키지는 사용자 노드 또는 추가 기능의 모음입니다. Dynamo Package Manager는 커뮤니티가 온라인으로 게시된 패키지를 다운로드할 수 있는 포털입니다. 이러한 도구 세트는 Dynamo의 핵심 기능을 확장하고, 누구나 액세스할 수 있으며, 버튼 클릭으로 즉시 다운로드할 수 있도록 타사에서 개발되었습니다.
Dynamo와 같은 오픈 소스 프로젝트에서는 이러한 유형의 커뮤니티 참여가 활성화되어 있습니다. 전용 타사 개발자가 있으므로 Dynamo는 다양한 산업 분야에 해당하는 워크플로우로 확장할 수 있습니다. 이러한 이유로 Dynamo 팀에서는 패키지 개발 및 게시를 간소화하기 위해 합심하여 노력했습니다. 이 내용은 다음 섹션에서 좀 더 자세히 다룰 예정입니다.
패키지를 설치하는 가장 쉬운 방법은 Dynamo 인터페이스에서 패키지 메뉴 옵션을 사용하는 것입니다. 이 기능으로 이동한 후 바로 패키지를 설치하겠습니다. 이 빠른 예에서는 그리드에서 쿼드 패널을 작성할 때 자주 사용하는 패키지를 설치합니다.
Dynamo에서 패키지 > Package Manager... 로 이동합니다.
검색 막대에서 "직사각형 그리드의 쿼드"를 검색해 보겠습니다. 그러면 이 검색 조회와 일치하는 모든 패키지가 표시됩니다. 일치하는 이름을 가진 첫 번째 패키지를 선택하려고 합니다.
설치를 클릭하여 이 패키지를 라이브러리에 추가한 다음 확인을 수락합니다. 완료되었습니다.
이제 Dynamo 라이브러리에 "buildz"라는 다른 그룹이 있는 것을 확인할 수 있습니다. 이 이름은 패키지의 개발자를 나타내며, 사용자 노드가 이 그룹에 배치됩니다. 이것을 바로 사용할 수 있습니다.
Code Block을 사용하여 직사각형 그리드를 빠르게 정의하고 그 결과를 Polygon.ByPoints 노드로 출력한 다음, Surface.ByPatch 노드를 사용하여 방금 작성한 직사각형 패널 리스트를 봅니다.
위의 예에서는 하나의 사용자 노드가 있는 패키지에 초점을 맞추고 있지만, 여러 개의 사용자 노드 및 지원 데이터 파일이 있는 패키지를 다운로드할 때도 동일한 프로세스를 사용합니다. 이제 보다 포괄적인 패키지인 Dynamo Unfold를 사용하면서 살펴보겠습니다.
위의 예에서와 같이 먼저 패키지 > Package Manager.. 를 선택합니다.
이번에는 한 단어 "DynamoUnfold" 를 검색해 보겠습니다. 패키지가 표시되면 설치를 클릭하여 Dynamo Unfold를 Dynamo 라이브러리에 추가하여 다운로드합니다.
Dynamo 라이브러리에는 여러 카테고리와 사용자 노드가 있는 DynamoUnfold 그룹이 있습니다.
이제 패키지의 파일 구조를 살펴보겠습니다.
먼저 패키지 > Package Manager > 설치된 패키지로 이동합니다.
그런 다음 루트 디렉토리 표시를 클릭하여 이 패키지의 루트 폴더를 엽니다.
이렇게 하면 패키지의 루트 디렉토리로 이동됩니다. 3개의 폴더와 1개의 파일이 있는지 확인합니다.
bin 폴더에는 .dll 파일이 있습니다. 이 Dynamo 패키지는 Zero-Touch를 사용하여 개발되었으므로 사용자 노드가 이 폴더에 저장됩니다.
dyf 폴더에는 사용자 노드가 있습니다. 이 패키지는 Dynamo 사용자 노드를 사용하여 개발되지 않았으므로 이 패키지의 경우 이 폴더는 비어 있습니다.
extra 폴더에는 예시 파일을 비롯한 모든 추가 파일이 저장됩니다.
pkg 파일은 패키지 설정을 정의하는 기본 텍스트 파일입니다. 지금은 이를 무시해도 됩니다.
"extra" 폴더를 열면 설치 중에 다운로드된 여러 가지 예시 파일이 있습니다. 모든 패키지에 예시 파일이 있는 것은 아니지만, 패키지에 속하는 예시가 있는 경우 여기서 찾을 수 있습니다.
"SphereUnfold"를 열어 보겠습니다.
파일을 열고 솔버에서 "실행"을 누르면 펼쳐진 구가 표시됩니다. 이와 같은 예제 파일은 새 Dynamo 패키지를 사용하는 방법을 배우는 데 유용합니다.
Package Manager에서 패키지 검색 탭의 정렬 및 필터링 옵션을 사용하여 패키지를 찾을 수 있습니다. 호스트 프로그램, 상태(신규, 더 이상 사용되지 않음 또는 아직 사용 가능) 및 패키지의 종속성 유무에 따라 사용할 수 있는 여러 필터가 있습니다.
패키지를 정렬하여 평가 점수가 높거나 가장 많이 다운로드된 패키지를 식별하거나 최신 업데이트가 있는 패키지를 찾을 수 있습니다.
상세 정보 보기를 클릭하여 각 패키지에 대한 자세한 내용에 액세스할 수도 있습니다. 이렇게 하면 Package Manager의 측면 패널이 열리며, 여기에서 버전 관리 및 종속성, 웹사이트 또는 리포지토리 URL, 라이센스 정보 등과 같은 정보를 찾을 수 있습니다.
Dynamo 패키지를 찾는 또 다른 방법은 Dynamo Package Manager 웹사이트를 탐색하는 것입니다. 여기에서 패키지에 대한 통계를 찾고 순위표를 작성할 수 있습니다. 패키지 파일은 Dynamo Package Manager에서 다운로드할 수도 있지만, 보다 원활한 프로세스는 Dynamo에서 바로 다운로드하는 것입니다.
패키지 파일이 저장되는 위치를 확인하려면 상단 탐색에서 Dynamo > 기본 설정 > 패키지 설정 > 노드 및 패키지 파일 위치를 클릭합니다. 여기에서 현재 루트 폴더 디렉토리를 찾을 수 있습니다.
기본적으로 패키지는 C:/Users/[사용자 이름]/AppData/Roaming/Dynamo/[Dynamo 버전] 폴더 경로와 비슷한 위치에 설치됩니다.
Dynamo 커뮤니티는 끊임없이 발전하고 진화하고 있습니다. 때때로 Dynamo Package Manager를 탐색하면 흥미로운 새 개발 항목을 찾아낼 수 있습니다. 다음 섹션에서는 최종 사용자 관점부터 고유한 Dynamo 패키지 작성자의 관점까지 고려하며 패키지를 좀 더 자세히 살펴보겠습니다.
DynamoUnfold 옆의 옵션 메뉴 를 선택합니다.
Zero-Touch 가져오기는 간단한 포인트 앤 클릭 방법으로 C# 라이브러리를 가져오는 것을 의미합니다. Dynamo에서는 .dll 파일의 공용 메서드를 읽고 Dynamo 노드로 변환합니다. Zero-Touch를 사용하여 자체 사용자 노드 및 패키지를 개발하고 외부 라이브러리를 Dynamo 환경으로 가져올 수 있습니다.
.dll 파일
Dynamo 노드
Zero-Touch를 사용하면 실제로 Dynamo용으로 개발되지 않았을 수 있는 라이브러리를 가져와 새로운 노드 모음을 작성할 수 있습니다. 현재의 Zero-Touch 기능은 Dynamo Project의 교차 플랫폼 방식을 보여 줍니다.
이 섹션에서는 Zero-Touch를 사용하여 타사 라이브러리를 가져오는 방법을 설명합니다. 자체 Zero-Touch 라이브러리를 개발하는 방법에 대한 내용은 Dynamo Wiki 페이지를 참조하십시오.
Zero-Touch 패키지는 사용자 정의 사용자 노드를 보완하는 데 유용한 도구입니다. C# 라이브러리를 사용하는 몇 가지 패키지가 아래 테이블에 나열되어 있습니다. 패키지에 대한 자세한 내용은 부록의 패키지 섹션을 참조하십시오.
이 성공 사례에서는 AForge 외부 .dll 라이브러리를 가져오는 방법을 보여 드리겠습니다. AForge는 이미지 처리에서 인공 지능에 이르는 다양한 기능을 제공하는 강력한 라이브러리입니다. AForge의 이미징 클래스를 참조하여 아래의 이미지 처리 연습 몇 가지를 수행해 보겠습니다.
먼저 AForge를 다운로드합니다. AForge 다운로드 페이지에서 [설치 프로그램 다운로드] 를 선택하고 다운로드가 완료되면 설치합니다.
Dynamo에서 새 파일을 작성하고 파일 > 라이브러리 가져오기... 를 선택합니다.
다음으로, dll 파일을 찾습니다.
팝업 창에서 AForge 설치의 릴리즈 폴더로 이동합니다. 이는 _C:\Program Files (x86)\AForge.NET\Framework\Release_와 유사한 폴더에 있을 수 있습니다.
AForge.Imaging.dll: 이 성공 사례에서는 AForge 라이브러리의 이 파일 하나만 사용하겠습니다. 이 .dll 을 선택하고 "열기" 를 누릅니다.
Dynamo로 돌아가면 라이브러리에 AForge 노드 그룹이 추가된 것을 볼 수 있습니다. 이제 비주얼 프로그램에서 AForge 이미징 라이브러리에 액세스할 수 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이제 라이브러리를 가져왔으므로 이 첫 번째 연습을 간단히 시작해보겠습니다(01-EdgeDetection.dyn). 샘플 이미지에서 몇 가지 기본 이미지 처리를 수행하여 AForge 이미지가 필터링되는 방법을 살펴봅니다. "Watch Image" 노드를 사용하여 결과를 표시하고 Photoshop의 필터와 유사한 필터를 Dynamo에서 적용합니다.
캔버스에 File Path 노드를 추가하고 다운로드한 연습 폴더(사진 출처: flickr)에서 "soapbutions.jpg"를 선택합니다.
File Path 노드에서는 선택한 이미지에 대한 경로 문자열을 간단히 제공합니다. 다음으로, Dynamo에서 이를 사용 가능한 이미지 파일로 변환해야 합니다.
File From Path를 사용하여 파일 경로 항목을 Dynamo 환경의 이미지로 변환합니다.
File Path 노드를 File.FromPath 노드에 연결합니다.
이 파일을 이미지로 변환하기 위해 Image.ReadFromFile 노드를 사용하겠습니다.
마지막으로, 결과를 살펴보겠습니다. Watch Image 노드를 캔버스에 놓고 Image.ReadFromFile에 연결합니다. 아직 AForge를 사용하지 않았지만 이미지를 Dynamo로 가져왔습니다.
탐색 메뉴의 AForge.Imaging.AForge.Imaging.Filters에서 사용 가능한 다양한 필터를 볼 수 있습니다. 이제 이러한 필터 중 하나를 사용하여 임계값에 따라 이미지의 채도를 낮춰 보겠습니다.
3개의 슬라이더를 캔버스에 놓은 다음, 해당 범위를 0에서 1로 변경하고 단계 값을 0.01로 변경합니다.
캔버스에 Grayscale.Grayscale 노드를 추가합니다. 이는 그레이스케일 필터를 이미지에 적용하는 AForge 필터입니다. 1단계의 세 슬라이더를 cr, cg 및 cb에 연결합니다. 맨 위 및 맨 아래 슬라이더를 값 1로, 중간 슬라이더를 값 0으로 변경합니다.
그레이스케일 필터를 적용하려면 이미지에 대해 수행할 작업이 필요합니다. 이를 위해 BaseFilter.Apply를 사용합니다. 이미지를 image 입력에 연결하고 Grayscale.Grayscale을 baseFilter 입력에 연결합니다.
Watch Image 노드에 연결하여 이미지 채도를 낮춥니다.
빨간색, 초록색 및 파란색의 임계값을 기준으로 이 이미지의 채도를 낮추는 방법을 조정할 수 있습니다. 이러한 임계값은 Grayscale.Grayscale 노드에 대한 입력 내용에 의해 정의됩니다. 이미지가 꽤 어둡게 보입니다. 초록색 값이 슬라이더에서 0으로 설정되어 있기 때문입니다.
맨 위 및 맨 아래 슬라이더를 값 0으로, 중간 슬라이더를 값 1로 변경합니다. 이렇게 하면 좀 더 명확하게 채도가 낮아진 이미지를 얻을 수 있습니다.
채도가 낮아진 이미지를 사용하고 그 위에 다른 필터를 적용해 보겠습니다. 채도가 낮아진 이미지에는 약간의 대비가 있으므로 일부 모서리 탐지를 테스트하고자 합니다.
SobelEdgeDetector.SobelEdgeDetector 노드를 캔버스에 추가합니다.
이 노드를 BaseUsingCopyPartialFilter.Apply에 연결하고 채도가 낮아진 이미지를 이 노드의 image 입력에 연결합니다.
Sobel 모서리 탐지기에서 새 이미지의 모서리가 강조 표시되었습니다.
확대하면 모서리 탐지기에서 픽셀로 표시된 버블의 윤곽이 표시됩니다. AForge 라이브러리에는 이와 같은 결과를 가져와 Dynamo 형상을 작성하는 도구가 있습니다. 다음 연습에서 이러한 내용을 살펴보겠습니다.
이제 몇 가지 기본적인 이미지 처리를 소개했으므로 이미지를 사용하여 Dynamo 형상을 구동해 보겠습니다. 기초 레벨에서는 이 연습을 통해 AForge 및 Dynamo를 사용하여 이미지의 "라이브 추적" 을 수행하는 것이 목표입니다. 여기서는 작업을 간단하게 유지하면서 참조 이미지에서 직사각형을 추출할 예정이지만, AForge에서는 좀 더 복잡한 작업에 필요한 도구도 제공됩니다. 다운로드한 연습 파일에서 02-RectangleCreation.dyn 을 사용해 보겠습니다.
File Path 노드를 사용하여 연습 폴더의 grid.jpg로 이동합니다.
위의 나머지 노드 시리즈를 연결하여 과정 파라메트릭 그리드를 표시합니다.
다음 단계에서는 이미지의 흰색 사각형을 참조하고 이를 실제 Dynamo 형상으로 변환하려고 합니다. AForge에는 강력한 Computer Vision 도구가 많이 있는데 여기서는 BlobCounter라는 라이브러리에 특히 중요한 도구를 사용하겠습니다.
캔버스에 BlobCounter를 추가한 후에는 이미지를 처리할 방법이 필요합니다(이전 연습의 BaseFilter.Apply 도구와 유사).
안타깝게도 "Process Image" 노드는 Dynamo 라이브러리에 즉시 표시되지 않습니다. 이는 이 함수가 AForge 소스 코드에 표시되지 않기 때문입니다. 이 문제를 해결하기 위해 해결 방법을 찾아야 합니다.
캔버스에 Python 노드를 추가하고 다음 코드를 Python 노드에 추가합니다. 이 코드에서는 AForge 라이브러리를 가져온 다음, 가져온 이미지를 처리합니다.
이미지 출력을 Python 노드 입력에 연결하면 Python 노드에서 AForge.Imaging.BlobCounter 결과를 얻게 됩니다.
다음 단계에서는 AForge Imaging API에 친숙해지기 위한 몇 가지 작업을 진행합니다. Dynamo 작업을 위해 이 모든 기능을 배울 필요는 없습니다. 여기서는 Dynamo 환경의 유연성을 활용하면서 외부 라이브러리로 작업하는 경우를 더 많이 다룹니다.
Python 스크립트의 출력을 BlobCounterBase.GetObjectRectangles에 연결합니다. 그러면 임계값을 기준으로 이미지의 객체가 읽히고 픽셀 공간에서 정량화된 직사각형이 추출됩니다.
캔버스에 다른 Python 노드를 추가하고 GetObjectRectangles에 연결한 다음, 아래 코드를 입력합니다. 그러면 구성된 Dynamo 객체 리스트가 작성됩니다.
이전 단계의 Python 노드 출력을 바꿉니다. 그러면 각 직사각형의 X, Y, 폭 및 높이를 나타내는 4개의 리스트가 작성됩니다.
Code Block을 사용하여 Rectangle.ByCornerPoints 노드(아래 코드)를 수용하는 구조로 데이터를 구성합니다.
이미지에서 흰색 사각형을 나타내는 직사각형 배열이 표시됩니다. 프로그래밍을 통해 Illustrator의 라이브 추적과 거의 유사한 작업을 수행했습니다.
그러나 아직 정리를 좀 더 해야 합니다. 확대하면 불필요한 작은 직사각형이 많이 있는 것을 볼 수 있습니다.
다음으로, 원치 않는 직사각형을 제거하기 위한 코드를 작성합니다.
GetObjectRectangles 노드와 다른 Python 노드 사이에 Python 노드를 삽입합니다. 이 노드의 코드는 아래에 나와 있으며, 지정된 크기보다 작은 모든 직사각형을 제거합니다.
불필요한 직사각형이 사라지면 재미 삼아 이러한 사각형에서 표면을 작성하고 해당 면적을 기준으로 일정 거리만큼 돌출시켜 보겠습니다.
마지막으로 both_sides 입력을 false로 변경하고 한 방향으로 돌출시킵니다. 이를 수지에 담그면 재미있는 테이블을 얻게 됩니다.
이러한 예는 기본적인 예이지만 여기에 설명된 개념은 흥미로운 실제 응용 사례에 적용할 수 있습니다. Computer Vision은 수많은 프로세스에 사용할 수 있습니다. 예를 들면 바코드 판독기, 투시 일치, 투영 매핑 및 증강 현실이 있습니다. 이 연습과 관련된 AForge의 고급 항목에 대한 자세한 내용은 이 문서에서 읽어보십시오.
로고/이미지
이름
Dynamo Mesh Toolkit에서는 외부 파일 형식에서 메쉬를 가져오고, Dynamo 형상 객체에서 메쉬를 작성하고, 정점 및 색인으로 메쉬를 수동으로 작성하는 도구를 제공합니다. 라이브러리에서는 메쉬를 수정 또는 복구하거나 제작에 사용할 수평 슬라이스를 추출하는 도구도 제공합니다.
Dynamo Mesh Toolkit은 Autodesk에서 지속적으로 연구하는 메쉬의 한 부분으로, 향후 몇 년 동안 지속적으로 발전할 것입니다. 툴킷에서 새로운 메서드가 자주 제공될 계획이니, 새 기능에 대한 의견, 버그 및 제안 사항과 관련하여 언제든지 Dynamo 팀에 연락해 주십시오.
아래 연습에서는 Mesh Toolkit을 사용하는 몇 가지 기본적인 메쉬 작업을 보여줍니다. 이 연습에서는 메쉬를 일련의 평면과 교차하는데, 이는 솔리드를 사용하는 경우 계산이 많이 필요할 수 있습니다. 솔리드와 달리 메쉬에는 설정된 “해상도”가 있으며 수학적으로 정의되지 않고 위상적으로 정의되며, 작업에 따라 이 해상도를 손쉽게 정의할 수 있습니다. 메쉬-솔리드 관계에 대한 자세한 내용은 이 입문서의 계산 방식 설계를 위한 형상 장을 참조하십시오. Mesh Toolkit을 보다 자세히 살펴보려면 Dynamo Wiki 페이지를 참조하면 됩니다. 그러면 아래 연습의 패키지로 이동하겠습니다.
Dynamo의 상단 메뉴 막대에서 패키지 > Package Manager...로 이동합니다. 검색 필드에 MeshToolkit을 한 글자씩 입력합니다. 설치를 클릭하고 확인을 수락하여 다운로드를 시작합니다. 아주 간단합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 예에서는 Mesh Toolkit에서 교차 노드를 살펴보고, 메쉬를 가져와 일련의 입력 평면과 교차시켜 슬라이스를 작성해 보겠습니다. 이 작업은 레이저 커터, 워터젯 커터 또는 CNC 밀에서의 제작을 위한 모델을 준비하기 위한 출발점입니다.
먼저 Dynamo에서 Mesh-Toolkit_Intersect-Mesh.dyn in Dynamo 를 엽니다.
File Path: 가져올 메쉬 파일을 찾습니다(stanford_bunny_tri.obj). 지원되는 파일 유형은 .mix 및 .obj입니다.
Mesh.ImportFile: 파일 경로를 연결하여 메쉬를 가져옵니다.
Point.ByCoordinates: 한 점을 생성합니다. 이 점이 호의 중심이 됩니다.
Arc.ByCenterPointRadiusAngle: 점을 중심으로 호를 생성합니다. 이 곡선은 일련의 평면을 배치하는 데 사용됩니다. __ 설정은 다음과 같습니다. __
radius: 40, startAngle: -90, endAngle:0
호를 따라 방향이 지정된 일련의 평면을 작성합니다.
Code Block: 0에서 1 사이의 25개 숫자를 작성합니다.
Curve.PointAtParameter: 호를 ‘curve’ 입력에 연결하고 코드 블록 출력을 ‘param’ 입력에 연결하여 곡선을 따라 일련의 점을 추출합니다.
Curve.TangentAtParameter: 동일한 입력을 이전 노드에 연결합니다.
Plane.ByOriginNormal: 점을 ‘origin’ 입력에 연결하고 벡터를 ‘normal’ 입력에 연결하여 각 점에서 일련의 평면을 작성합니다.
다음으로 이러한 평면을 사용하여 메쉬를 교차시키겠습니다.
Mesh.Intersect: 평면을 가져온 메쉬와 교차시켜 일련의 PolyCurve 윤곽을 작성합니다. 노드를 마우스 오른쪽 버튼으로 클릭하고 레이싱을 최장으로 설정합니다.
PolyCurve.Curves: PolyCurve를 해당 곡선 조각으로 나눕니다.
Curve.EndPoint: 각 곡선의 끝점을 추출합니다.
NurbsCurve.ByPoints: 점을 사용하여 NURBS 곡선을 구성합니다. 부울 노드를 True 로 설정하여 곡선을 닫습니다.
계속하기 전에 결과를 더 잘 볼 수 있도록 Mesh.ImportFile, Curve.EndPoint, Plane.ByOriginNormal 및 Arc.ByCenterPointRadiusAngle 등의 일부 노드의 미리보기를 끕니다.
Surface.ByPatch: 각 윤곽에 대한 표면 패치를 생성하여 메쉬의 "슬라이스"를 작성합니다.
와플/계란 상자 효과를 위해 두 번째 슬라이스 세트를 추가합니다.
메쉬와 유사한 솔리드를 비교하면 교차 작업이 더 빠르게 계산되는 것을 알 수 있습니다. 이 연습에 설명된 것과 같은 워크플로우에는 메쉬 작업이 적합합니다.