Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Dynamo는 설계자를 위한 오픈 소스 시각적 프로그래밍 플랫폼입니다.
Autodesk Dynamo의 시각적 프로그래밍을 위한 포괄적인 안내서인 Dynamo Primer를 여셨습니다. 이 입문서는 프로그래밍의 기본 사항을 공유하기 위한 지속적인 프로젝트입니다. 다루는 주제로는 계산 형상 작업, 규칙 기반 설계를 위한 모범 사례, 분야 간 프로그래밍 응용프로그램 등이 있으며, Dynamo 플랫폼과 관련된 다른 주제도 다룹니다.
Dynamo의 강력한 기능은 다양한 설계 관련 활동에서 확인할 수 있습니다. Dynamo를 사용하면 쉽게 활용 가능한 방법의 광범위한 목록을 바탕으로 다음을 시작할 수 있습니다.
탐색: 시각적 프로그래밍을 처음으로 탐색
연결: 다양한 소프트웨어의 워크플로우 연결
참여: 사용자, 기여자, 개발자로 구성된 활발한 커뮤니티에 참여
개발: 지속적인 향상을 위해 오픈 소스 플랫폼 개발
이러한 활동을 진행하고 Dynamo를 사용할 수 있는 흥미로운 기회를 제공하려면 Dynamo Primer가 필요합니다.
이 Primer에서 무엇을 배울 수 있는지 알아보려면 기본 사용자 안내서를 참조하십시오.
Autodesk에서는 Dynamo를 지속적으로 개선하고 있으므로 일부 기능은 이 Primer에 표시된 기능과 다르게 보일 수 있습니다. 하지만 기능 변경 사항은 모두 올바르게 표시되어 있습니다.
Dynamo Primer 프로젝트는 오픈 소스입니다. Autodesk는 고품질 컨텐츠를 제공하기 위해 노력하고 있으며 여러분이 제공하는 피드백을 소중하게 생각하고 있습니다. 문제를 보고하려는 경우 GitHub 문제 페이지(https://github.com/DynamoDS/DynamoPrimer/issues)에 게시해 주십시오.
새 섹션, 편집 또는 이 프로젝트의 다른 내용에 기여하고 싶은 경우 GitHub 리포지토리(https://github.com/DynamoDS/DynamoPrimer)를 확인해 보십시오.
Dynamo Primer는 Matt Jezyk 및 Autodesk의 Dynamo 개발 팀에서 시작한 오픈 소스 프로젝트입니다.
Mode Lab은 본 입문서의 초판을 작성하는 책임을 맡았습니다. 이러한 소중한 리소스를 마련하는 데 들인 모든 노고에 감사드립니다.
Parallax 팀의 John Pierson은 Dynamo 2.0 개정 내용을 반영하도록 입문서를 업데이트하는 업무를 맡았습니다.
Matterlab은 Dynamo 2.13 개정 내용을 반영하도록 입문서를 업데이트하는 업무를 맡았습니다.
Archilizer는 Dynamo 2.17 개정 내용을 반영하도록 입문서를 업데이트하는 업무를 맡았습니다.
Wood Rodgers는 Dynamo for Civil 3D의 컨텐츠로 입문서를 업데이트하는 업무를 맡았습니다.
Dynamo 프로젝트를 시작하도록 도와주시고 지침을 주신 Ian Keough 님께 감사드립니다.
적극적인 협력과 광범위한 Dynamo 프로젝트에 참여할 수 있는 기회를 주신 Matt Jezyk, Ian Keough, Zach Kron, Racel Amour 및 Colin McCrone 님께도 감사드립니다.
Dynamo Dynamo의 최신 안정적인 릴리즈는 다음 사이트를 참조하십시오.
http://dynamobim.com/download/ 또는 http://dynamobuilds.com
*참고: Revit 2020부터 Dynamo는 Revit 릴리스와 함께 번들로 제공되므로 수동 설치가 필요하지 않습니다. 자세한 내용은 이 블로그 게시물에서 확인할 수 있습니다.
DynamoBIM 추가 정보, 학습 컨텐츠 및 포럼을 확인할 수 있는 최고의 출처는 DynamoBIM 웹 사이트입니다.
http://dynamobim.org
Dynamo GitHub Dynamo는 GitHub의 오픈 소스 개발 프로젝트입니다. 참여하려면 DynamoDS를 확인해 주십시오.
https://github.com/DynamoDS/Dynamo
문의하기 이 문서에 문제가 있으면 알려주십시오.
Dynamo@autodesk.com
Copyright 2023 Autodesk
Apache License, 버전 2.0(이하 "라이센스")에 따라 라이센스가 부여되었으며, 라이센스를 준수하지 않을 경우 이 파일을 사용할 수 없습니다. 라이센스 사본은 다음에서 구할 수 있습니다.
http://www.apache.org/licenses/LICENSE-2.0
준거법에서 요구하거나 서면으로 동의하지 않는 한 본 라이센스에 따라 배포된 소프트웨어는 어떠한 종류의 명시적 또는 암시적 보증 또는 조건 없이 "있는 그대로" 배포됩니다. 라이센스에 따라 권한 및 제한을 규제하는 특정 언어의 라이센스를 확인하십시오.
Dynamo는 활성 오픈 소스 개발 프로젝트입니다. Dynamo를 지원하는 소프트웨어 리스트를 확인해 보십시오.
Dynamo는 Revit3D, FormIt, Civil3D 등의 소프트웨어와 함께 사전 설치됩니다.
특정 소프트웨어에서 Dynamo를 사용하는 방법에 대한 자세한 지침은 다음 섹션을 참고하십시오.
Dynamo를 독립 실행형 응용프로그램으로 사용하려는 경우, Sandbox 다운로드에 대한 지침을 계속 읽습니다.
Dynamo 응용프로그램은 Dynamo 웹사이트에서 다운로드할 수 있습니다. 공식 버전, 이전 버전 또는 시험판 버전 모두 다운로드 페이지에서 다운로드할 수 있습니다. 공식 출시 버전을 사용하려면 Dynamo 다운로드 페이지를 방문하고 다운로드를 클릭합니다.
이전 또는 '최신' 개발 버전을 찾으려는 경우 모든 버전을 동일한 페이지의 아래쪽 섹션에서 찾을 수 있습니다.
'최신' 개발 버전에는 아직 완전히 테스트되지 않아 불안정한 몇 가지 새로운 실험 기능이 포함될 수 있습니다. 이 기능을 사용하여 버그 또는 문제를 발견하고, Autodesk 팀에 문제를 보고하여 응용프로그램을 개선할 수 있습니다.
초보자는 안정적인 공식 버전을 다운로드하는 것이 좋습니다.
다운로드한 버전을 시작하기 전에 선택한 폴더에 컨텐츠의 압축을 풀어야 합니다.
이 단계를 수행하려면 컴퓨터에 7zip을 다운로드하여 설치합니다.
zip 파일을 마우스 오른쪽 버튼으로 클릭하고 모두 압축 풀기를 선택합니다.
모든 파일의 압축을 풀 대상을 선택합니다.
대상 폴더에서 DynamoSandbox.exe를 두 번 클릭하여 실행합니다.
DynamoSandbox 시작 화면이 다음과 같이 표시됩니다.
축하합니다. DynamoSandbox 사용을 위한 설정이 완료되었습니다.
형상은 Dynamo Sandbox의 추가 기능으로, 현재 Revit, Robot Structural Analysis, FormIt 및 Civil 3D 소프트웨어에 대한 라이센스 또는 멤버쉽을 보유한 사용자만 사용할 수 있습니다. 형상을 사용하면 사용자가 Dynamo Sandbox에서 형상을 가져오고, 작성하고, 편집하고, 내보낼 수 있습니다.
사용하려면 도구막대 패널에서 시작합니다. 사용 중인 소프트웨어에 따라 일반적으로 시작 아이콘은 메뉴 > 관리 탭에서 사용할 수 있습니다. Dynamo 아이콘 을 클릭하여 시작합니다.
Dynamo Primer에는 Mode Lab과 함께 작성한 장의 내용이 포함되어 있습니다. 이러한 장에서는 Dynamo를 사용하여 자체 시각적 프로그램을 개발하고 실행하는 데 필요한 필수 요건과 Dynamo를 더욱 유용하게 활용하는 방법에 대한 핵심적인 통찰력에 대해 집중적으로 설명합니다.
이 안내서는 다양한 배경과 기술 수준의 독자들을 대상으로 합니다. Dynamo 설정, 사용자 인터페이스 및 주요 개념에 대한 일반적인 소개는 이후 섹션에서 확인할 수 있습니다. 새 사용자는 다음 항목을 참조하는 것이 좋습니다.
특정 노드 및 기본 개념과 같은 각 요소에 대한 보다 심도 있는 이해를 원하는 사용자를 위해 해당 장에서 기본 사항에 대해 알아봅니다.
Dynamo 워크플로우의 데모를 보고 싶다면 샘플 워크플로우 섹션에 포함된 그래프를 참조하십시오. 첨부된 지침을 따르면 고유한 Dynamo 그래프를 작성할 수 있습니다.
Dynamo에 대한 여러 항목을 다루므로 이후 장에서 더 많은 주제별 연습을 확인할 수 있습니다. 연습은 일반적으로 각 페이지의 마지막 섹션에서 찾을 수 있습니다.
의욕적인 사용자 그룹과 활동적인 참가자가 없다면 Dynamo는 지금의 모습을 갖추지 못했을 것입니다. 블로그를 팔로우하거나, 갤러리에 작업을 추가하거나, 포럼에서 Dynamo에 대해 토론하여 커뮤니티에 참여해 보십시오.
Dynamo는 설계자를 위한 시각적 프로그래밍 도구로 통용되며, 외부 라이브러리 또는 API가 있는 모든 Autodesk 제품을 활용할 수 있게 해 줍니다. Dynamo Sandbox를 사용하여 "샌드박스" 스타일 응용프로그램에서 프로그램을 개발할 수도 있지만, Dynamo 에코시스템은 계속해서 성장하고 있습니다.
프로젝트의 소스 코드는 오픈 소스이므로 해당 기능을 핵심 컨텐츠로 확장할 수 있습니다. GitHub에서 프로젝트를 확인하고 Dynamo를 사용자화하고 있는 사용자의 진행 중 작업을 찾아보십시오.
필요에 따라 찾아보기, 분기, Dynamo 확장
Dynamo의 UI(사용자 인터페이스)는 5개의 주요 영역으로 구성되어 있습니다. 여기에서 개요를 간략하게 설명하고 다음 섹션에서 작업공간 및 라이브러리에 대해 자세히 살펴보겠습니다.
메뉴
도구막대
라이브러리
작업공간
실행 막대
다음은 Dynamo 응용프로그램의 기본 기능에 대한 메뉴입니다. 대부분의 Windows 소프트웨어와 마찬가지로, 처음 두 메뉴는 파일 관리, 선택 및 컨텐츠 편집을 위한 작업과 관련된 메뉴입니다. 나머지 메뉴는 좀 더 Dynamo에 해당하는 항목입니다.
일반 정보 및 설정은 Dynamo 드롭다운 메뉴에서 찾을 수 있습니다.
정보 - 컴퓨터에 설치된 Dynamo 버전을 확인할 수 있습니다.
가용성 데이터 수집에 대한 동의 - Dynamo를 개선하기 위한 사용자 데이터 공유를 옵트인하거나 옵트아웃할 수 있습니다.
기본 설정 - 응용프로그램의 소수점 정밀도 및 형상 렌더 품질을 정의하는 것과 같은 설정이 포함됩니다.
Dynamo를 종료합니다.
문제가 있는 경우 도움말 메뉴를 확인합니다. 인터넷 브라우저를 통해 Dynamo 참조 웹 사이트 중 하나에 액세스할 수 있습니다.
시작하기 - Dynamo 사용에 대한 간략한 소개입니다.
대화식 안내서 -
샘플 - 참조 예시 파일입니다.
Dynamo 사전 - 모든 노드에 대한 문서가 포함된 리소스입니다.
Dynamo 웹사이트 - GitHub에서 Dynamo 프로젝트를 봅니다.
Dynamo 프로젝트 Wiki - Dynamo API, 지원 라이브러리 및 도구를 사용한 개발 방법에 대해 알아보기 위해 Wiki를 방문합니다.
시작 페이지 표시 - 문서 내에 있는 경우 Dynamo 시작 페이지로 돌아갑니다.
버그 신고 - GitHub에서 문제를 엽니다.
Dynamo의 도구막대에는 파일 작업에 빠르게 액세스할 수 있는 일련의 버튼과 실행취소[Ctrl + Z] 및 재실행[Ctrl + Y] 명령이 포함되어 있습니다. 맨 오른쪽에는 작업공간의 스냅샷을 내보내는 또 다른 버튼이 있습니다. 이 버튼은 문서화 및 공유에 매우 유용합니다.
Dynamo 라이브러리는 기능 라이브러리의 모음으로, 각 라이브러리에는 카테고리별로 그룹화된 노드가 포함되어 있습니다. 이 라이브러리는 Dynamo의 기본 설치 중에 추가되는 기본 라이브러리로 구성되어 있습니다. 사용법을 계속 소개하면서 사용자 노드 및 추가 패키지를 사용하여 기본 기능을 확장하는 방법을 보여 드리겠습니다. 라이브러리 섹션에서는 이 기능을 사용하는 방법에 대한 보다 자세한 지침을 설명합니다.
작업공간에서는 시각적 프로그램을 구성합니다. 여기에서 3D 형상을 보기 위한 미리보기 설정을 변경할 수도 있습니다. 자세한 내용은 작업공간을 참고하십시오.
여기에서 Dynamo 스크립트를 실행합니다. 실행 버튼의 드롭다운 아이콘을 클릭하여 다양한 모드 간에 전환합니다.
자동: 스크립트를 자동으로 실행합니다. 변경 사항은 실시간으로 업데이트됩니다.
수동: '실행' 버튼을 클릭한 경우에만 스크립트가 실행됩니다. 복잡하고 '용량이 큰' 스크립트를 변경할 때 유용합니다.
주기적: 이 옵션은 기본적으로 회색으로 표시됩니다. DateTime.Now 노드가 사용되는 경우에만 사용할 수 있습니다. 지정된 간격으로 자동으로 실행되도록 그래프를 설정할 수 있습니다.
Dynamo는 독립 실행형 "Sandbox" 모드에서 다운로드하여 실행하거나 Revit, FormIt 또는 Civil 3D와 같은 다른 소프트웨어에 대한 플러그인으로 실행할 수 있는 응용프로그램입니다.
Dynamo를 통해 시각적 프로그래밍 프로세스 내에서 작업할 수 있는데, 이러한 프로세스에서 요소를 함께 연결하여 사용자 알고리즘을 구성하는 작업의 관계와 시퀀스를 정의하게 됩니다. 데이터 처리부터 형상 생성까지 다양한 응용 환경에서 code
한 줄을 작성하지 않고도 모두 실시간으로 이러한 알고리즘을 사용할 수 있습니다.
프로젝트 워크플로우에 시각적 프로그래밍을 사용하는 것부터 사용자화된 도구를 개발하는 것에 이르기까지 Dynamo는 유용한 여러 응용프로그램에서 핵심적인 역할을 합니다.
새로 작성 - 새 .dyn 파일을 작성합니다.
열기 - 기존 .dyn(작업공간) 또는 .dyf(사용자 노드) 파일을 엽니다.
저장/다른 이름으로 저장 - 활성 .dyn 또는 .dyf 파일을 저장합니다.
실행취소 - 마지막 작업을 실행취소합니다.
재실행 - 다음 작업을 재실행합니다.
작업공간을 이미지로 내보내기 - 표시되는 작업공간을 PNG 파일로 내보냅니다.
노드 및 와이어는 프로세스를 지원하기 위한 Dynamo의 주요 구성요소입니다. 설계 부품 간에 강력한 시각적 및 체계적 관계를 구축하는 데 도움이 됩니다. 설계 워크플로우를 개발 및 최적화하는 동안 간단한 마우스 클릭을 사용하여 노드를 쉽게 연결할 수 있습니다.
Revit의 BIM(빌딩 정보 모델링)을 위한 애드온으로 시작한 Dynamo는 많은 발전을 거듭했습니다. 다른 무엇보다, Dynamo는 하나의 플랫폼으로 자리잡아 설계자는 시각적 프로그래밍을 탐색하고 문제를 해결하고 자체 도구를 만들 수 있도록 지원하고 있습니다. 몇 가지 컨텍스트를 설정하면서 Dynamo가 무엇인지, 그리고 어떻게 사용해야 하는지를 알아보는 과정을 시작해 보겠습니다.
Dynamo 작업공간은 네 가지 기본 요소로 구성되어 있습니다.
모든 활성 탭
미리보기 모드
줌/초점이동 컨트롤
작업공간의 노드
새 파일을 열면 기본적으로 새 홈 작업공간이 열립니다.
사용자 노드를 작성하여 사용자 노드 작업공간에서 열 수 있습니다.
각 Dynamo 창에는 하나의 홈 작업공간만 허용되지만 탭에는 여러 개의 사용자 노드 작업공간이 열려 있을 수 있습니다.
다음과 같은 세 가지 방법으로 서로 다른 미리보기 간을 전환할 수 있습니다.
a. 오른쪽 상단 아이콘 사용
b. 작업공간을 마우스 오른쪽 버튼으로 클릭
3D 미리보기에서 그래프 미리보기로 전환
그래프 미리보기에서 3D 미리보기로 전환
c. 키보드 단축키(Ctrl+B) 사용
아이콘 또는 마우스를 사용하여 두 작업공간 중 하나를 탐색할 수 있습니다.
a. 그래프 미리보기 모드에서
아이콘 사용:
마우스 사용:
마우스 왼쪽 버튼 클릭 - 선택
마우스 왼쪽 버튼을 클릭하고 끌기 - 여러 노드를 선택하려면 선택 상자 사용
마우스 가운데 버튼을 클릭하고 위/아래로 스크롤 - 줌 확대/축소
마우스 가운데 버튼을 클릭하고 끌기 - 초점이동
캔버스의 아무 곳이나 마우스 오른쪽 버튼으로 클릭 - 캔버스 내 검색 열기
b. 3D 미리보기 모드에서
아이콘 사용:
마우스 사용:
마우스 가운데 버튼을 클릭하고 위/아래로 스크롤 - 줌 확대/축소
마우스 가운데 버튼을 클릭하고 끌기 - 초점이동
마우스 오른쪽 버튼을 클릭하고 끌기 - 궤도
마우스 왼쪽 버튼을 클릭하여 노드를 선택합니다.
여러 노드를 선택하려면 클릭하고 끌어 선택 상자를 작성합니다.
이 섹션에서는 Dynamo 라이브러리에서 사용할 수 있는 필수 노드를 소개합니다. 이 필수 노드는 전문가처럼 고유한 시각적 프로그램을 만드는 데 도움이 됩니다.
: Dynamo에서 기하학적 요소를 작업하려면 어떻게 해야 합니까? 다양한 방법으로 기본체에서 단순하거나 복잡한 형상을 작성할 수 있습니다.
: “데이터”란 무엇이며, 프로그램에서 사용할 수 있는 기본 유형으로는 무엇이 있습니까? 또한 설계 워크플로우에 수학 및 논리 연산을 통합하는 방법에 대해 자세히 알아봅니다.
데이터 구조를 관리하고 조정하려면 어떻게 해야 합니까? 리스트의 개념에 대해 좀 더 자세히 이해하고 이를 사용하여 설계 데이터를 효율적으로 관리할 수 있습니다.
사전이란 무엇입니까? 사전을 사용하여 기존 결과에서 특정 데이터 및 값을 찾는 방법을 알아봅니다.
그래프 미리보기
3D 미리보기
윈도우 줌
줌 확대
줌 축소
초점이동
윈도우 줌
줌 확대
줌 축소
초점이동
궤도
시각적 프로그래밍 환경인 Dynamo를 사용하면 데이터가 처리되는 방식을 조작할 수 있습니다. 데이터는 숫자나 문자이지만 형상도 마찬가지입니다. 컴퓨터의 입장에서 이해한다면, 형상(경우에 따라 계산 형상이라고도 함)은 세련되거나 정교한 성능 중심의 모델을 작성하는 데 사용할 수 있는 데이터라고 할 수 있습니다. 이렇게 조작하려면 사용할 수 있는 다양한 형상 유형을 속속들이 이해해야 합니다.
Dynamo에서 노드는 시각적 프로그램을 형성하기 위해 연결하는 객체입니다. 각 노드는 작업을 수행합니다. 이 작업은 숫자를 저장하는 것처럼 간단할 수도 있고 형상을 작성하거나 조회하는 경우처럼 더 복잡할 수도 있습니다.
Dynamo의 노드 대부분은 5개 부분으로 구성되어 있습니다. 입력 노드와 같은 예외도 있지만, 각 노드의 분석을 다음과 같이 설명할 수 있습니다.
이름 -
Category.Name
명명 규칙을 사용하는 노드의 이름입니다.주 본체 - 노드의 주 본체 - 여기를 마우스 오른쪽 버튼으로 클릭하면 전체 노드 수준의 옵션이 표시됩니다.
포트(입력 및 출력) - 노드에 입력 데이터를 제공하는 와이어에 대한 수용기이며 노드 작업의 결과입니다.
기본값 - 입력 포트를 마우스 오른쪽 버튼으로 클릭 - 일부 노드에서 사용 가능하거나 불가능한 기본값이 있습니다.
레이싱 아이콘 - 일치하는 리스트 입력에 대해 지정된 레이싱 옵션을 나타냅니다(뒷부분에서 자세히 다룸).
노드의 입력 및 출력을 포트라고 하며, 와이어에 대한 수용기로 작동합니다. 데이터는 왼쪽에 있는 포트를 통해 노드에 들어오고, 해당 작업을 실행한 후에는 오른쪽 노드 밖으로 나갑니다.
포트는 특정 유형의 데이터를 수신해야 합니다. 예를 들어 2.75 와 같은 숫자를 좌표로 정의된 점 노드의 포트에 연결하면 점이 성공적으로 작성됩니다. 그러나 동일한 포트에 "Red" 를 제공하면 오류가 발생합니다.
팁: 포트 위에 마우스 커서를 놓으면 예상 데이터 유형이 포함된 툴팁이 표시됩니다.
포트 레이블
툴팁
데이터 유형
기본값
Dynamo는 각 노드의 상태에 따라 다른 색상 체계로 노드를 렌더링하여 시각적 프로그램의 실행 상태를 나타냅니다. 상태 계층은 오류 > 경고 > 정보 > 미리보기와 같은 순서로 표시됩니다.
이름 또는 포트를 마우스 오른쪽 버튼으로 클릭하거나 그 위에 커서를 놓으면 추가 정보 및 옵션이 표시됩니다.
충족된 입력 - 입력 포트 위에 파란색 수직 막대가 있는 노드는 제대로 연결된 것이며 모든 입력이 성공적으로 연결된 것입니다.
충족되지 않은 입력 - 하나 이상의 입력 포트 위에 빨간색 수직 막대가 있는 노드는 입력을 연결해야 합니다.
함수 - 함수를 출력하고 출력 포트 위에 회색 수직 막대가 있는 노드는 함수 노드입니다.
선택됨 - 현재 선택된 노드의 테두리는 연청록색으로 강조 표시됩니다.
동결 - 반투명 파란색 노드는 동결된 것으로, 노드 실행이 일시 중단됩니다.
경고 - 노드 아래의 노란색 상태 막대는 경고 상태를 나타냅니다. 즉, 노드에 입력 데이터가 없거나 노드의 데이터 유형이 잘못되었을 수 있습니다.
오류 - 노드 아래의 빨간색 상태 막대는 노드가 오류 상태임을 나타냅니다.
정보 - 노드 아래의 파란색 상태 막대는 정보 상태를 나타내며, 노드에 관한 유용한 정보에 플래그가 지정됩니다. 이 상태는 성능에 잠재적인 영향을 미치는 방식으로 노드를 사용함으로써 노드에서 지원하는 최대값에 접근할 때 트리거될 수 있습니다.
팁: 이 툴팁 정보를 통해 업스트림 노드를 검사하여 필수 데이터 유형이나 데이터 구조에 오류가 있는지 확인합니다.
경고 툴팁 - "Null" 또는 데이터 없음은 Double(예: 숫자)로 인식될 수 없습니다.
Watch 노드를 사용하여 입력 데이터를 검사합니다.
Upstream the Number 노드는 숫자가 아닌 "Red"를 저장합니다.
일부 상황에서는 비주얼 프로그램에서 특정 노드의 실행을 방지하고 싶을 수 있습니다. 노드의 마우스 오른쪽 버튼 클릭 메뉴에 있는 옵션인 노드 '동결'을 통해 이 작업을 수행할 수 있습니다.
노드를 동결하면 노드의 다운스트림인 노드도 동결됩니다. 즉, 동결된 노드의 출력에 의존하는 모든 노드도 동결됩니다.
와이어는 노드 간에 연결되어 관계를 생성하고 시각적 프로그램의 흐름을 구성합니다. 문자 그대로 한 객체에서 다음 객체로 데이터 펄스를 운반하는 전기 와이어로 간주할 수 있습니다.
와이어는 한 노드의 출력 포트를 다른 노드의 입력 포트에 연결합니다. 이 방향이 시각적 프로그램의 데이터 흐름을 설정합니다.
입력 포트는 노드의 왼쪽에 있고 출력 포트는 오른쪽에 있습니다. 따라서 일반적으로 프로그램 흐름이 왼쪽에서 오른쪽으로 이동한다고 말할 수 있습니다.
연결을 작성하려면 포트를 마우스 왼쪽 버튼으로 클릭한 다음, 다른 노드의 포트를 마우스 왼쪽 버튼으로 클릭하여 와이어를 작성합니다. 연결 중에는 와이어가 점선으로 표시되며 성공적으로 연결되면 스냅되어 실선이 됩니다.
데이터는 항상 출력에서 입력으로 이 와이어를 따라 흐르지만, 연결된 포트를 클릭하는 순서에 따라 어떤 방향으로도 와이어를 만들 수 있습니다.
시각적 프로그램에서 와이어로 표시된 연결을 편집하여 프로그램 흐름을 자주 조정하게 됩니다. 와이어를 편집하려면 이미 연결된 노드의 입력 포트를 마우스 왼쪽 버튼으로 클릭합니다. 다음 두 가지 옵션을 사용할 수 있습니다.
입력 포트로의 연결을 변경하려면 다른 입력 포트를 마우스 왼쪽 버튼으로 클릭합니다.
와이어를 제거하려면 와이어를 바깥쪽으로 당긴 다음, 작업공간을 마우스 왼쪽 버튼으로 클릭합니다.
Shift 키를 누른 채 마우스 왼쪽 버튼을 클릭하여 여러 와이어를 다시 연결합니다.
Ctrl 키를 누른 채 마우스 왼쪽 버튼을 클릭하여 와이어를 복제합니다.
기본적으로 와이어는 회색 스트로크로 미리 표시됩니다. 노드가 선택되면 연결 와이어는 노드와 동일한 청록색으로 강조 표시됩니다.
강조 표시된 와이어
기본 와이어
기본적으로 와이어 숨기기
그래프에서 와이어를 숨기려는 경우 뷰 > 커넥터에서 이 옵션을 찾고 커넥터 표시를 선택취소할 수 있습니다.
이 설정을 사용하면 선택한 노드 및 해당 결합 와이어만 연한 청록색으로 강조 표시됩니다.
노드 출력을 마우스 오른쪽 버튼으로 클릭하고 와이어 숨기기를 선택하여 선택한 와이어를 숨길 수도 있습니다.
미리보기 끄기 - 노드 아래에 회색 상태 막대가 표시되고, 눈 아이콘 은 노드의 형상 미리보기가 꺼져 있음을 나타냅니다.
시각적 프로그램에 경고 또는 오류가 포함된 경우 Dynamo는 해당 문제에 대한 추가 정보를 제공합니다. 노란색으로 되어 있는 모든 노드는 이름 위에 툴팁도 표시됩니다. 경고 또는 오류 툴팁 아이콘 위에 마우스를 놓으면 툴팁이 확장됩니다.
형상은 설계를 위한 언어입니다. 프로그래밍 언어나 환경의 핵심에 형상 커널이 포함되어 있으면 알고리즘을 통해 정확하고 강력한 모델을 설계하고, 설계 루틴을 자동화하고, 설계를 반복해서 생성할 수 있게 됩니다.
형상 유형과 형상 유형이 어떻게 관련되어 있는지를 잘 이해하면 라이브러리에서 사용할 수 있는 Geometry 노드 모음을 탐색할 수 있습니다. Geometry 노드는 계층이 아닌 알파벳순으로 정리되어 있습니다. 여기서는 Dynamo 인터페이스 내 배치와 유사하게 표시됩니다.
또한 Dynamo에서 모델을 만들고 배경 미리보기에 표시되는 항목의 미리보기를 그래프의 데이터 흐름에 연결하는 작업은 시간이 갈수록 점점 더 간단해집니다.
가정된 좌표계는 그리드 및 색상 축으로 렌더링됩니다.
선택된 노드에서는 해당하는 형상(노드에서 형상을 작성하는 경우)을 강조 표시 색상으로 배경에 렌더링합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
일반적으로 정의된 형상은 그림의 모양, 크기, 상대 위치 및 공간 특성을 연구한 것입니다. 이 분야에는 수천 년의 유구한 역사가 있습니다. 컴퓨터의 출현과 대중화를 통해 우리는 형상을 정의하고 탐색하고 생성하는 강력한 도구를 얻었습니다. 이제 복잡한 기하학적 상호 작용의 결과를 계산하는 작업이 매우 쉬워졌기에 우리가 실제로 그렇게 하고 있다는 사실은 거의 분명합니다.
컴퓨터의 성능을 통해 얼마나 다양하고 복잡한 형상을 얻을 수 있는지 궁금하다면 알고리즘을 테스트하는 데 사용되는 표준 모델인 Stanford Bunny를 웹에서 빠르게 검색해 보십시오.
알고리즘, 컴퓨팅 및 복잡성의 맥락에서 형상을 파악하는 일은 다소 어려울 수 있지만, 고급 응용프로그램 작성을 시작하기 위한 기본 사항으로 설정할 수 있는 핵심적이고 비교적 간단한 원칙이 몇 가지 있습니다.
형상은 데이터입니다. 컴퓨터 및 Dynamo의 입장에서 볼 때 Bunny는 숫자와 그렇게 다르지 않습니다.
형상은 추상화를 활용합니다. 기본적으로 기하학적 요소는 지정된 공간 좌표계 내에서 숫자, 관계 및 공식으로 설명됩니다.
형상에는 계층이 있습니다. 점이 함께 모여 선을 만들고 선이 함께 모여 표면을 만드는 식입니다.
형상은 부분과 전체를 동시에 설명합니다. 곡선이 있는 경우 곡선의 모양뿐만 아니라 해당 곡선을 구성하는 모든 점도 볼 수 있습니다.
실제로 이러한 원칙은 우리가 작업 중인 항목(형상의 유형, 형상이 작성된 방식 등)을 잘 알고 있어야 함을 의미합니다. 그래야 더욱 복잡한 모델을 개발할 때 여러 형상을 유동적으로 구성, 분해 및 재구성할 수 있습니다.
잠시 형상에 대한 추상적 설명 및 계층적 설명 간의 관계를 살펴보겠습니다. 이러한 두 가지 개념은 서로 관련되어 있지만 처음에는 명확하게 드러나지 않을 수 있으므로 좀 더 심층적인 워크플로우 또는 모델 개발을 시작하면 개념적 장애물에 빠르게 도달할 수 있습니다. 초보자인 경우 차원을 통해 우리가 모델링하는 "대상"을 쉽게 파악해 보십시오. 모양을 나타내는 데 필요한 차원을 통해 형상이 계층적으로 구성된 방식을 이해할 수 있습니다.
점(좌표로 정의됨)에는 차원이 없습니다. 이는 각 좌표를 나타내는 숫자일 뿐입니다.
선(두 점으로 정의됨)은 1 차원입니다. 선을 따라 앞으로(양의 방향) 또는 뒤로(음의 방향) "걸어갈 수 있습니다".
평면(두 선으로 정의됨)은 2 차원입니다. 이제 좀 더 왼쪽으로 또는 좀 더 오른쪽으로 걸어갈 수 있습니다.
상자(두 평면으로 정의됨)는 3 차원입니다. 위쪽 또는 아래쪽에 상대적인 위치를 정의할 수 있습니다.
차원은 형상 분류를 시작하는 편리한 방법이지만 가장 좋은 방법은 아닙니다. 결국 점, 선, 평면 및 상자만으로 모델링하지는 않게 됩니다. 곡선이 필요할 수도 있으니까요. 또한 완전히 추상화된 형상 유형의 완전히 다른 카테고리가 있습니다. 이에 따라 방향, 체적 또는 부분 간의 관계와 같은 특성이 정의됩니다. 실제로는 벡터를 적용할 수 없으므로 공간에 표시되는 대상과 비교해서 정의하려면 어떻게 해야 할까요? 기하학적 계층을 더 상세하게 분류하면 추상 유형과 "도우미" 간의 차이점이 적용됩니다. 이는 각각 지원하는 항목 및 모델 요소의 모양을 그리는 데 도움이 되는 유형별로 그룹화할 수 있습니다.
Dynamo에서 모델을 작성하는 작업은 노드를 사용하여 생성할 수 있는 작업으로만 국한되지 않습니다. 다음은 형상을 사용하여 프로세스를 다음 단계로 발전시키는 몇 가지 주요 방법입니다.
Dynamo를 사용하면 파일을 가져올 수 있습니다. 점 구름에는 CSV를 사용하고, 표면을 가져올 때는 SAT를 사용해 보십시오.
Revit으로 작업하는 경우 Revit 요소를 참조하여 Dynamo에서 사용할 수 있습니다.
Dynamo Package Manager에서는 확장된 형상 유형 및 작업에 대한 추가 기능을 제공합니다. Mesh Toolkit 패키지를 확인하십시오.
벡터는 크기 및 방향을 나타내는 것으로, 지정된 속도로 특정 방향을 향해 속도를 높이는 화살표라고 생각하면 됩니다. Dynamo에서 모델의 핵심 구성요소입니다. 추상적인 "도우미" 카테고리에 속하기 때문에 벡터를 작성할 때는 때 배경 미리보기에 아무것도 표시되지 않습니다.
벡터 미리보기를 위한 자리 표시자로 선을 사용할 수 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
평면은 2D 표면으로, 무한하게 연장되는 평평한 표면이라고 생각하면 됩니다. 각 평면에는 원점, X 방향, Y 방향 및 Z(위쪽) 방향이 있습니다.
평면은 추상적이지만, 평면에는 원점 위치가 있어 이를 공간에서 찾을 수 있습니다.
Dynamo에서 평면은 배경 미리보기에서 렌더링됩니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
좌표계는 점 또는 기타 형상 요소의 위치를 결정하는 체계입니다. 아래 이미지는 Dynamo에서 어떻게 보이는지와 각 색상이 무엇을 나타내는지 설명합니다.
평면은 추상적이지만, 좌표계에도 원점 위치가 있어 이를 공간에서 찾을 수 있습니다.
Dynamo에서 좌표계는 배경 미리보기에서 축을 정의하는 점(원점)과 선으로 렌더링됩니다(규칙에 따라 X는 빨간색, Y는 초록색, Z는 파란색임).
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
벡터, 평면 및 좌표계는 추상 형상 유형의 기본 그룹을 구성합니다. 이러한 항목은 모양을 나타내는 다른 형상의 위치, 방향 및 공간 컨텍스트를 정의하는 데 유용합니다. 예를 들어 New York City, 42nd Street 및 Broadway(좌표계)에서 지상층(평면)에 선 채 북쪽(벡터)을 바라보고 있다면 이러한 "도우미"를 사용하여 현재 위치를 정의할 수 있습니다. 휴대폰 케이스 제품이나 고층 건물의 경우도 마찬가지입니다. 모델을 개발하려면 이러한 컨텍스트가 필요합니다.
벡터는 방향 및 크기를 설명하는 기하학적 수량입니다. 벡터는 추상적입니다. 즉, 기하학적 요소가 아니라 수량을 나타냅니다. 벡터와 점은 둘 다 값 리스트로 구성되기 때문에 벡터가 점으로 혼동되기 쉽습니다. 그러나 점은 지정된 좌표계에서의 위치를 나타내지만, 벡터는 "방향"과 같은 의미의 상대적인 위치 차이를 나타낸다는 점이 주요 차이점입니다.
상대적 차이를 이해하는 것이 어렵다면, 벡터 AB를 "점 A에 서서 점 B 쪽을 바라보고 있는" 상태라고 생각해 보십시오. 여기(A)에서 저기(B)까지의 방향이 벡터입니다.
동일한 AB 표기법을 사용하여 벡터를 좀 더 분석해 보겠습니다.
벡터의 시작점을 기준이라고 합니다.
벡터의 끝점을 팁 또는 센스라고 합니다.
벡터 AB는 반대 방향을 향하는 벡터 BA와 같지 않습니다.
벡터(및 그 추상적 정의)에 관해 기분전환이 필요하다면 클래식 코미디인 Airplane을 보고 자주 인용되는 다음 농담을 들어보세요.
알았다, 오버. 우리 벡터는 뭐지? Victor?(Roger, Roger. What's our vector, Victor?)
평면은 추상적인 2D "도우미"입니다. 보다 구체적으로 말하면 평면은 개념적으로 "평평하여" 두 방향으로 무한하게 확장되며, 일반적으로 원점 근처에서 좀 더 작은 사각형으로 렌더링됩니다.
"잠깐! 원점이요? CAD 소프트웨어에서 모델링할 때 제가 사용하는 것과 같은 좌표계처럼 들리는데요."라는 생각이 드실 수 있습니다.
맞습니다. 대부분의 모델링 소프트웨어에서는 구성 평면이나 "레벨"을 활용하여 초안을 작성할 로컬 2D 컨텍스트를 정의합니다. XY, XZ, YZ 또는 북쪽, 남동쪽, 평면이 더 친숙하게 들릴 수 있습니다. 이러한 항목은 모두 무한 "평면" 컨텍스트를 정의하는 평면입니다. 평면에는 깊이가 없지만 방향을 설명하는 데 도움이 됩니다.
평면에 익숙하다면 좌표계를 이해하는 것이 다소 어려울 수 있습니다. 평면은 좌표계(표준 "유클리드" 또는 "XYZ" 좌표계인 경우)와 모든 부분이 동일합니다.
하지만 원통형 또는 구형과 같은 대체 좌표계가 있습니다. 이후 섹션에서 살펴볼 텐데, 좌표계는 다른 형상 유형에 적용하여 해당 형상에서 위치를 정의할 수도 있습니다.
대체 좌표계(원통형, 구형) 추가
은 좌표라는 하나 이상의 값으로 정의됩니다. 점을 정의하는 데 필요한 좌표 값 수는 점이 존재하는 컨텍스트 또는 좌표계에 따라 달라집니다.
Dynamo에서 가장 일반적인 종류의 점은 3D 표준 좌표계에 있으며 3개의 좌표 [X,Y,Z]를 갖습니다(Dynamo의 3D 점).
Dynamo의 2D 점에는 두 개의 좌표 [X,Y]가 있습니다.
곡선과 표면 모두에 대한 매개변수는 연속적이며 지정된 형상의 모서리를 넘어 연장됩니다. 매개변수 공간을 정의하는 모양은 3D 표준 좌표계에 있기 때문에 파라메트릭 좌표를 항상 "표준" 좌표로 변환할 수 있습니다. 예를 들어 표면의 점 [0.2, 0.5]는 표준 좌표의 점 [1.8, 2.0, 4.1]과 같습니다.
가정된 표준 XYZ 좌표의 점
지정된 좌표계(원통형)를 기준으로 하는 점
표면의 UV 좌표로서의 점
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
형상이 모델의 언어라면 점은 알파벳이라고 할 수 있습니다. 점은 다른 모든 형상이 작성되는 토대가 됩니다. 곡선을 작성하려면 점이 두 개 이상 필요하며, 다각형이나 메쉬 면 등을 만들려면 점이 세 개 이상 필요합니다. 점 간의 관계, 순서 및 위치를 정의(사인 함수 사용)하면 원이나 곡선으로 인식되는 고차원적인 형상을 정의할 수 있습니다.
함수
x=r*cos(t)
및y=r*sin(t)
를 사용하는 원함수
x=(t)
및y=r*sin(t)
을 사용하는 사인 곡선
점은 2D 좌표계에도 존재할 수 있습니다. 규칙은 작업 중인 공간의 종류에 따라 다른 문자 표기법을 가집니다. 평면에서는 [X,Y]를, 표면에 있는 경우에는 [U,V]를 사용할 수 있습니다.
유클리드 좌표계의 점: [X,Y,Z]
곡선 매개변수 좌표계의 점: [t]
표면 매개변수 좌표계의 점: [U,V]
모델에서 표면을 사용하여 3D 환경에서 보이는 객체를 나타냅니다. 곡선이 항상 평면형인 것은 아닙니다. 즉, 곡선은 3차원에 있지만 정의되는 공간이 항상 하나의 차원에 묶이게 되는 것입니다. 표면은 다른 모델링 작업에서 사용할 수 있는 추가 특성 모음과 다른 차원을 제공해 줍니다.
Dynamo의 매개변수에서 표면을 가져와 평가하여 추출할 수 있는 정보의 종류를 알아보겠습니다.
Surface.PointAtParameter 는 지정된 UV 좌표의 점을 반환합니다.
Surface.NormalAtParameter 는 지정된 UV 좌표의 법선 벡터를 반환합니다.
Surface.GetIsoline 은 U 또는 V 좌표에서 Isoparametric 곡선을 반환합니다. IsoDirection 입력을 확인해 주십시오.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
표면은 함수와 두 개의 매개변수로 정의되는 수학적 모양으로, 곡선을 위한 t
대신, U
및 V
를 사용하여 해당 매개변수 공간을 설명합니다. 즉, 이 유형의 형상으로 작업하는 경우 더 많은 기하학적 데이터를 그려야 합니다. 예를 들어 곡선에는 접선 벡터와 법선 평면(곡선의 길이를 따라 회전 또는 비틀릴 수 있음)이 있지만, 표면에는 방향이 일치하는 법선 벡터와 접선 평면이 있습니다.
표면
U Iso 곡선
V Iso 곡선
UV 좌표
수직 평면
법선 벡터
표면 도메인: 표면 도메인은 해당 곡면의 3D 점으로 평가되는 (U,V) 매개변수의 범위로 정의됩니다. 각 차원(U 또는 V)의 도메인은 일반적으로 두 개의 숫자, U 최소값 U 최대값 및 V 최소값 V 최대값으로 기술됩니다.
표면의 모양이 "직사각형"처럼 보이지 않고 위치상 더욱 조밀하거나 느슨한 Iso 곡선 세트를 포함할 수 있지만, 해당 도메인으로 정의된 "공간"은 항상 2D입니다. Dynamo에서 표면은 항상 U와 V 방향 모두에서 최소값 0.0 및 최대값 1.0으로 정의된 도메인을 가지는 것으로 인식됩니다. 평면 또는 잘린 표면은 다른 도메인을 가질 수 있습니다.
Iso 곡선(또는 아이소파라메트릭 곡선): 곡면의 상수 U 또는 V 값과 해당하는 다른 U 또는 V 방향에 대한 값 도메인으로 정의되는 곡선입니다.
UV 좌표: U, V 및 경우에 따라 W로 정의되는 UV 매개변수 공간의 점입니다.
수직 평면: 지정된 UV 좌표에서 U 및 V Iso 곡선 모두에 수직인 평면입니다.
법선 벡터: 수직 평면을 기준으로 "위쪽" 방향을 정의하는 벡터입니다.
NURBS 표면은 NURBS 곡선과 매우 유사합니다. NURBS 표면을 양방향으로 이동하는 NURBS 곡선의 그리드로 생각할 수 있습니다. NURBS 표면의 모양은 U 및 V 방향의 여러 제어점 및 해당 표면의 각도에 따라 정의됩니다. 동일한 알고리즘을 사용하여 제어점, 가중치 및 각도를 통해 모양, 법선, 접선, 곡률 및 기타 특성을 계산할 수 있습니다.
NURBS 표면의 경우 사용자에게 표시되는 모양에 관계없이 제어점의 직사각형 그리드이므로 형상이 내포하는 두 개의 방향이 있습니다. 이러한 방향은 종종 표준 좌표계에 상대적으로 임의 방향이지만, 모델을 분석하거나 표면을 따라 다른 형상을 생성하는 데 자주 사용됩니다.
차수 (U,V) = (3,3)
차수 (U,V) = (3,1)
차수 (U,V) = (1,2)
차수 (U,V) = (1,1)
Polysurface는 모서리를 따라 결합된 표면으로 구성됩니다. Polysurface에서는 이제 토폴로지 방식에 따라 연결된 모양을 이동할 수 있다는 점에서 2D UV 정의 이상의 기능을 제공합니다.
“토폴로지”는 일반적으로 부분이 연결되는 방식 및/또는 Dynamo의 관련 토폴로지가 형상 유형이 되는지에 대한 개념을 설명합니다. 구체적으로 토폴로지는 표면, Polysurface 및 솔리드의 상위 카테고리입니다.
이러한 방식으로 표면을 결합하면(패치라고도 함) 이음새를 가로질러 상세정보를 정의할 뿐만 아니라 좀 더 복잡한 모양을 만들 수 있습니다. Polysurface의 모서리에는 모깎기 또는 모따기 작업을 편리하게 적용할 수 있습니다.
단일 표면에서 작성할 수 없는 보다 복잡한 모델을 구성하거나 명시적인 볼륨을 정의하려면 이제 솔리드(및 Polysurface) 영역을 도입해야 합니다. 단순한 정육면체라도 면당 1개씩 6개의 표면이 필요할 정도로 충분히 복잡하다고 할 수 있습니다. 솔리드의 경우 표면에서는 제공하지 않는 두 가지 핵심 개념인 세부적인 토폴로지 설명(면, 모서리, 정점)과 부울 연산을 활용할 수 있습니다.
부울 연산을 사용하여 솔리드를 수정할 수 있습니다. 몇 가지 부울 연산을 사용하여 작은 뿔이 여러 개 있는 구를 만들어 보겠습니다.
Sphere.ByCenterPointRadius: 기준 솔리드를 작성합니다.
Topology.Faces, Face.SurfaceGeometry: 솔리드의 면을 조회하고 표면 형상으로 변환합니다. 이 경우 구에는 하나의 면만 있습니다.
Cone.ByPointsRadii: 표면의 점을 사용하여 원추를 구성합니다.
Solid.UnionAll: 원추와 구를 결합합니다.
Topology.Edges: 새 솔리드의 모서리를 조회합니다.
Solid.Fillet: 작은 뿔이 여러 개 있는 구의 모서리를 모깎기합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
부울 연산은 복잡하므로 계산 속도가 느려질 수 있습니다. “동결” 기능을 사용하여 선택한 노드 및 영향을 받은 다운스트림 노드의 실행을 일시 중단할 수 있습니다.
1. 마우스 오른쪽 버튼을 클릭할 때 표시되는 상황별 메뉴를 사용하여 솔리드 결합 작업을 동결합니다.
2. 선택한 노드와 모든 다운스트림 노드를 연회색 가상 모드로 미리 볼 수 있으며, 영향을 받는 와이어는 파선으로 표시됩니다. 영향을 받는 형상 미리보기도 가상으로 표시됩니다. 그러면 부울 결합을 계산하지 않고 값 업스트림을 변경할 수 있습니다.
3. 노드를 동결 해제하려면 마우스 오른쪽 버튼을 클릭하고 동결을 선택 취소합니다.
4. 영향을 받는 모든 노드와 연관된 형상 미리보기가 업데이트되고 표준 미리보기 모드로 되돌아갑니다.
노드 및 와이어 섹션에서 노드 동결에 대한 자세한 내용을 확인할 수 있습니다.
솔리드는 "내부" 또는 "외부"를 정의하는 닫힌 경계 방식에 따라 체적을 포함하는 하나 이상의 표면으로 구성됩니다. 이러한 표면의 수에 관계없이 솔리드로 간주되는 "수밀" 체적을 형성해야 합니다. 솔리드는 표면 또는 Polysurface를 함께 결합하거나 로프트, 스윕 및 회전과 같은 작업을 사용하여 작성할 수 있습니다. 구, 정육면체, 원추 및 원통 원형도 솔리드입니다. 하나 이상의 면이 제거된 정육면체는 몇 가지 유사한 특성이 있지만 솔리드가 아닌 Polysurface로 계산됩니다.
평면은 솔리드가 아닌 단일 표면으로 구성됩니다.
구는 하나의 표면으로 구성되지만 솔리드 입니다.
원추는 솔리드를 만들기 위해 서로 결합된 두 개의 표면으로 구성됩니다.
원통은 솔리드를 만들기 위해 서로 결합된 세 개의 표면으로 구성됩니다.
큐브는 솔리드를 만들기 위해 서로 결합된 6개의 표면으로 구성됩니다.
솔리드는 정점, 모서리 및 면의 세 가지 요소 유형으로 구성됩니다. 면은 솔리드를 구성하는 표면입니다. 모서리는 인접한 면 사이의 연결을 정의하는 곡선이며, 정점은 이러한 곡선의 시작점과 끝점입니다. 이러한 요소는 위상 노드를 사용하여 조회할 수 있습니다.
면
모서리
정점
솔리드는 해당 모서리를 모깎기 또는 모따기하여 날카로운 모서리와 각을 제거하는 방식으로 수정할 수 있습니다. 모따기 작업을 수행하면 두 면 사이에 직선보간 표면이 작성되지만, 모깎기를 수행하면 면 사이에서 혼합되어 접선이 유지됩니다.
솔리드 정육면체
모따기된 정육면체
모깎기된 정육면체
솔리드 부울 연산은 두 개 이상의 솔리드를 결합하는 방법입니다. 하나의 부울 연산은 실제로는 다음 4가지 연산을 수행하는 것을 의미합니다.
두 개 이상의 객체를 교차합니다.
교차점에서 분할합니다.
형상의 원치 않는 부분을 삭제합니다.
모든 항목을 다시 결합합니다.
이렇게 솔리드 부울은 시간을 절약해 주는 강력한 프로세스의 역할을 합니다. 유지할 형상 부분을 구분하는 솔리드 부울 연산에는 다음 세 가지가 있습니다.
Union: 솔리드의 겹치는 부분을 제거하고 단일 솔리드로 결합합니다.
Difference: 한 솔리드에서 다른 솔리드를 뺍니다. 빼려는 솔리드를 도구라고 하는데, 도구로 사용할 솔리드를 전환하여 역체적을 유지할 수도 있습니다.
Intersection: 두 솔리드의 교차 체적만 유지합니다.
이러한 세 가지 연산 외에도 Dynamo에는 여러 솔리드로 차이 및 결합 연산을 수행하기 위한 Solid.DifferenceAll 노드와 Solid.UnionAll 노드가 있습니다.
UnionAll: 구와 바깥쪽 방향의 원추를 사용한 결합 연산입니다.
DifferenceAll: 구와 안쪽을 향하는 원추를 사용한 차이 연산입니다.
라이브러리에는 설치와 함께 제공되는 10개의 기본 카테고리 노드뿐만 아니라 추가로 로드된 사용자 노드 또는 패키지까지, 로드된 모든 노드가 포함되어 있습니다. 라이브러리의 노드는 라이브러리, 카테고리 및 하위 카테고리(해당되는 경우) 내에서 계층적으로 구성되어 있습니다.
기본 노드: 기본 설치와 함께 제공됩니다.
사용자 노드: 자주 사용하는 루틴 또는 특수 그래프를 사용자 노드로 저장합니다. 또한 커뮤니티와 사용자 노드를 공유할 수도 있습니다.
패키지 관리자의 노드: 게시된 사용자 노드의 모음입니다.
이제 노드 카테고리의 계층을 살펴보고, 라이브러리에서 빠르게 검색할 수 있는 방법과 그중에서 자주 사용하는 노드에 대해 알아보겠습니다.
이러한 카테고리를 훑어보면 작업공간에 추가할 수 있는 작업의 계층을 파악하고 이전에 사용해 본 적이 없는 새 노드를 빠르게 확인할 수 있습니다.
메뉴를 통해 각 카테고리와 하위 카테고리를 확장하여 라이브러리를 검색합니다.
형상은 가장 많은 노드 수를 포함하고 있으므로 탐색을 시작하기에 유용한 메뉴입니다.
라이브러리
카테고리
하위카테고리
노드
노드가 데이터를 작성(Create) 하는지, 작업(Action) 을 실행하는지 또는 데이터를 조회(Query) 하는지에 따라 노드를 동일한 하위 카테고리로 추가로 분류합니다.
Create: 처음부터 새로 형상을 작성하거나 구성합니다. 예: 원.
Action: 객체에 대해 작업을 수행합니다. 예: 원 축척.
Query: 이미 존재하는 객체의 특성을 가져옵니다. 예: 원의 반지름 가져오기.
노드 위에 마우스를 놓으면 해당 노드의 이름 및 아이콘 외에 자세한 정보가 표시됩니다. 이를 통해 노드에서 수행하는 작업, 입력에 필요한 항목, 출력으로 제공되는 항목을 쉽게 파악할 수 있습니다.
설명 - 노드에 대한 일반 언어 설명
아이콘 - 더 큰 버전의 라이브러리 메뉴 아이콘
입력 - 이름, 데이터 유형 및 데이터 구조
출력 - 데이터 유형 및 구조
작업공간에 추가할 노드에 대해 상대적 특수성을 알고 있는 경우 검색 필드에 입력하여 일치하는 모든 노드를 조회합니다.
추가하려는 노드를 클릭하여 선택하거나 Enter 키를 눌러 강조 표시된 노드를 작업공간의 중심에 추가합니다.
키워드를 사용하여 노드를 찾는 것 외에도, 검색 필드 또는 코드 블록(Dynamo 텍스트 언어 사용)에서 계층을 점으로 구분하여 입력할 수 있습니다.
각 라이브러리의 계층 구조는 작업공간에 추가된 노드의 이름에 반영됩니다.
라이브러리 계층에 있는 노드 위치의 서로 다른 부분을 library.category.nodeName
형식으로 입력하면 다음과 같이 서로 다른 결과가 반환됩니다.
library.category.nodeName
category.nodeName
nodeName
또는 keyword
일반적으로 작업공간에서 노드의 이름은 category.nodeName
형식으로 렌더링됩니다. 단, Input 및 View 카테고리에는 특히 몇 가지 중요한 예외가 있습니다.
유사한 이름의 노드에 유의하고 카테고리 차이를 기록해 두십시오.
대부분 라이브러리의 노드에는 카테고리 형식이 포함됩니다.
Point.ByCoordinates
및 UV.ByCoordinates
는 이름은 같지만 출처 카테고리는 서로 다릅니다.
중요한 예외에는 내장된 함수, Core.Input, Core.View 및 연산자가 포함됩니다.
Dynamo의 기본 설치에는 수백 가지의 노드가 포함되어 있습니다. 이 중에서 시각적 프로그램 개발에 필수적인 노드는 무엇일까요? 프로그램의 매개변수(Input)를 정의할 수 있도록 하는 노드를 집중적으로 살펴보고, 노드 작업(Watch) 결과를 확인하고, 바로 가기(Code Block)를 통해 입력 또는 기능을 정의해 보겠습니다.
Input 노드는 시각적 프로그램의 사용자(자신 또는 다른 사용자)가 핵심 매개변수를 사용하기 위한 주요 수단입니다. 다음은 Core 라이브러리에서 제공되는 일부 노드입니다.
Watch 노드는 시각적 프로그램을 통해 흐르는 데이터를 관리하는 데 필수적입니다. 노드 위로 마우스를 가져가면 노드 데이터 미리보기를 통해 노드의 결과를 볼 수 있습니다.
Watch 노드에 계속 표시하면 유용합니다.
또는 Watch3D 노드를 통해 형상 결과를 확인할 수 있습니다.
이러한 두 노드는 Core 라이브러리의 View 카테고리에 있습니다.
팁: 시각적 프로그램에 많은 노드가 포함되어 있는 경우 3D 미리보기가 혼란스러울 수 있습니다. 설정 메뉴에서 배경 미리보기 표시 옵션의 선택을 취소하고 Watch3D 노드를 사용하여 형상을 미리 보는 방법을 고려하십시오.
Code Block 노드는 줄을 세미콜론으로 구분하여 코드 블록을 정의하는 데 사용할 수 있습니다. 이는 X/Y
만큼이나 간단합니다.
Code Block을 숫자 입력 정의에 대한 바로 가기나 다른 노드 기능에 대한 호출로 사용할 수도 있습니다. 이를 위한 구문은 Dynamo 텍스트 언어인 DesignScript의 명명 규칙을 따릅니다.
다음은 스크립트에서 Code Block을 사용하는 간단한 데모(지침 포함)입니다.
두 번 클릭하여 Code Block 노드를 작성합니다.
Circle.ByCenterPointRadius(x,y);
를 입력합니다.
작업공간을 클릭하여 선택을 취소합니다. 그러면 x
및 y
입력이 자동으로 추가됩니다.
Point.ByCoordinates 노드와 Number Slider를 작성한 다음, Code Block의 입력에 연결합니다.
시각적 프로그램을 실행한 결과가 3D 미리보기에 원으로 표시됩니다.
곡선은 우리가 처음 다룬 기하학적 데이터 유형으로, 선이 얼마나 구부러지거나 펴져 있는가? 또는 얼마나 길거나 짧은가? 등의 보다 익숙한 모양 설명 특성 세트를 포함하는 첫 번째 기하학적 데이터 유형입니다. 또한 점이 선에서 스플라인 사이의 모든 항목과 그 사이의 모든 곡선 유형을 정의하기 위한 빌딩 블록이라는 점은 그대로입니다.
선
폴리선
호
원
타원
NURBS 곡선
폴리 곡선
NURBS는 곡선과 표면을 정확하게 표현하는 데 사용되는 모델입니다. 결과를 비교하기 위해 NURBS 곡선을 작성하는 두 개의 서로 다른 방법을 사용하여 Dynamo에서 사인 곡선을 작성합니다.
NurbsCurve.ByControlPoints 는 점 리스트를 제어점으로 사용합니다.
NurbsCurve.ByPoints 는 점 리스트를 통해 곡선을 그립니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
곡선이라는 용어는 일반적으로 다양한 종류의 곡선형(직선인 경우에도) 모양에 사용하는 다목적 용어입니다. 곡선(Curve의 "C"가 대문자인 경우)은 선, 원, 스플라인 등 해당 모양 유형 모두에 대한 상위 분류입니다. 보다 기술적으로 접근하면 곡선은 단순 함수(x = -1.26*t, y = t
)에서 미적분학과 관련된 함수까지 다양한 함수 모음에 "t"를 입력하여 찾을 수 있는 가능한 모든 점을 그립니다. 어떤 종류의 곡선으로 작업하든 "t"라고 하는 이 매개변수는 평가할 수 있는 특성입니다. 또한 모양과 관계없이 모든 곡선에는 곡선을 작성하는 데 사용되는 최소 및 최대 t 값과 일치하는 시작점 및 끝점도 있습니다. 이는 해당 방향성을 이해하는 데도 도움이 됩니다.
Dynamo에서는 곡선에 대한 "t" 값의 도메인이 0.0부터 1.0까지의 범위라고 가정합니다.
또한 모든 곡선에는 곡선을 그리거나 해석하는 데 사용할 수 있는 다양한 특성이나 특징이 있습니다. 시작점과 끝점 사이의 거리가 0이면 곡선이 "닫힌" 상태입니다. 또한 모든 곡선에는 많은 제어점이 있습니다. 이러한 모든 점이 동일한 평면에 있는 경우 곡선은 "평면"입니다. 전체적으로 곡선에 적용되는 특성도 있고, 곡선을 따라 특정 점에만 적용되는 특성도 있습니다. 예를 들어, 지정된 T 값의 접선 벡터는 로컬 특성이지만 평면성은 전역 특성입니다.
선은 가장 간단한 곡선 형식입니다. 별로 곡선처럼 보이지 않을 수 있지만 실제로는 곡률이 없는 곡선입니다. 선을 작성하는 방법에는 몇 가지가 있습니다. 가장 직관적인 방법은 점 A에서 점 B까지 연결하는 것입니다. 선 AB의 모양은 점 사이에 그려지지만 수학적으로는 양방향으로 무한하게 확장됩니다.
두 선을 연결하면 폴리선이 생성됩니다. 여기에 제어점이란 무엇인지가 직관적으로 나타나 있습니다. 이러한 점 위치를 편집하면 폴리선의 모양이 변경됩니다. 폴리선이 닫혀 있으면 다각형이 생성됩니다. 다각형의 모서리 길이가 모두 같으면 정다각형으로 그려집니다.
모양을 정의하는 파라메트릭 함수가 더 복잡해지면서 하나 또는 두 개의 반지름을 그려 선에서 한 단계 더 나아가 호, 원, 타원 호, 또는 타원을 작성할 수 있습니다. 호 버전과 원 또는 타원의 차이는 모양이 닫혀 있는지 여부뿐입니다.
NURBS(비균일 유리 기준 스플라인)는 단순한 2D 선, 원, 호 또는 직사각형에서 가장 복잡한 3D 자유형 유기적 곡선까지 모든 모양을 정확하게 모델링할 수 있는 수학적 표현입니다. NURBS 모델은 유연하고(제어점이 비교적 적지만 차수 설정에 따라 매끄럽게 보간됨) 정밀하므로(탄탄한 수학으로 묶여 있음) 그림이나 애니메이션에서 제조에 이르는 모든 프로세스에서 사용될 수 있습니다.
차수: 곡선의 차수는 제어점이 곡선에 미치는 영향의 범위를 결정합니다. 즉, 차수가 클수록 영향 범위가 커집니다. 차수는 양의 정수입니다. 이 숫자는 일반적으로 1, 2, 3 또는 5이지만 어떤 양의 정수도 될 수 있습니다. NURBS 선과 폴리선은 일반적으로 차수가 1이고 대부분의 자유형 곡선은 차수가 3 또는 5입니다.
제어점: 제어점은 차수가 +1 이상인 점으로 이루어진 리스트입니다. NURBS 곡선의 모양을 변경하는 가장 쉬운 방법 중 하나는 해당 제어점을 이동하는 것입니다.
가중치: 제어점에는 가중치라고 하는 연관된 숫자가 있습니다. 가중치는 일반적으로 양수입니다. 곡선 제어점의 모든 가중치가 같은 경우(일반적으로 1) 해당 곡선을 비유리라고 하고, 그렇지 않은 경우 유리라고 합니다. 대부분의 NURBS 곡선은 비유리입니다.
노트: 노트는 (차수+N-1) 숫자의 리스트입니다. 여기서 N은 제어점의 수입니다. 노트는 가중치와 함께 사용되어 결과 곡선에 제어점이 미치는 영향을 제어합니다. 노트의 한 가지 용도는 곡선의 특정 점에 꼬임을 작성하는 것입니다.
차수 = 1
차수 = 2
차수 = 3
차수 값이 높을수록 결과 곡선을 보간하는 데 더 많은 제어점이 사용됩니다.
이 색인에서는 이 Primer에 사용된 모든 노드 및 기타 유용할 수 있는 구성요소에 대한 추가 정보를 제공합니다. 여기에는 Dynamo에서 사용할 수 있는 500개의 노드 중 일부만 소개되어 있습니다.
**즉, 폭(X축) 길이가 10인 직육면체를 작성하고 X 축척을 두 배로 하여 CoordinateSystem으로 변환해도 폭은 여전히 10입니다. ASM에서는 예측 가능한 순서로 본체의 정점을 추출할 수 없으므로, 변환 후 치수를 결정할 수 없습니다.
가장 간단한 데이터 형식이 숫자인 경우 해당 숫자를 연결하는 가장 쉬운 방법은 수학을 사용하는 것입니다. 나누기와 같은 단순한 연산자부터 삼각 함수, 좀 더 복잡한 수식까지, 수학은 수치 관계 및 패턴을 탐색하기 위한 좋은 방법입니다.
연산자는 두 개의 숫자 입력 값과 대수 함수를 사용하는 구성요소의 집합으로, 하나의 출력 값을 생성합니다(추가, 빼기, 곱하기, 나누기 등). 이러한 항목은 연산자>작업에서 찾을 수 있습니다.
아이콘 | 이름(구문) | 입력 | 출력 |
---|
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
수식을 통해 연산자와 변수를 결합하여 보다 복잡한 관계를 형성합니다. 슬라이더를 사용하여 입력 매개변수로 제어할 수 있는 수식을 만듭니다.
1. 파라메트릭 방정식에서 't'를 나타내는 Number 시퀀스를 작성합니다. 따라서 나선을 정의할 수 있을 만큼 충분히 큰 리스트를 사용하려고 합니다.
Number Sequence: start, amount 및 step 의 세 가지 입력에 따라 숫자 시퀀스를 정의합니다.
2. 위의 단계에서는 파라메트릭 도메인을 정의하는 숫자 리스트를 작성했습니다. 다음으로, 황금 나선 방정식을 나타내는 노드 그룹을 작성합니다.
황금 나선은 다음 방정식으로 정의됩니다.
아래 이미지는 시각적 프로그래밍 양식의 황금 나선을 나타냅니다. 노드 그룹을 단계별로 진행하면서 시각적 프로그램과 작성된 방정식 간의 평행에 주의를 기울이십시오.
a. Number Slider: 캔버스에 2개의 숫자 슬라이더를 추가합니다. 이러한 슬라이더는 파라메트릭 방정식의 a 및 b 변수를 나타냅니다. 이러한 슬라이더는 유동적인 상수 또는 원하는 결과를 얻기 위해 조정할 수 있는 매개변수를 나타냅니다.
b. Multiplication(*): 곱하기 노드는 별표로 표시됩니다. 이를 반복적으로 사용하여 곱하기 변수를 연결하겠습니다.
c. Math.RadiansToDegrees: 삼각 함수에서 평가하기 위해 't' 값을 각도로 변환해야 합니다. Dynamo에서는 이러한 함수를 계산하기 위해 기본적으로 각도로 설정됩니다.
d. Math.Pow: 't' 및 숫자 'e'의 함수로, Fibonacci 시퀀스를 작성합니다.
e. Math.Cos and Math.Sin: 이러한 두 삼각 함수는 각 파라메트릭 점의 x 좌표와 y 좌표를 각각 구분합니다.
f. Watch: 이제 출력이 두 개의 리스트로 표시됩니다. 이러한 출력은 나선을 생성하는 데 사용되는 점의 x 및 y 좌표가 됩니다.
Point.ByCoordinates: 상단의 곱하기 노드를 'x' 입력에 연결하고 하단의 노드를 'y' 입력에 연결합니다. 이제 화면에 파라메트릭 나선형 점이 표시됩니다.
Polycurve.ByPoints: 이전 단계의 Point.ByCoordinates를 points 에 연결합니다. 닫힌 곡선을 만드는 것이 아니므로 입력 없이 connectLastToFirst 를 그대로 두면 됩니다. 그러면 이전 단계에서 정의한 각 점을 통과하는 나선이 작성됩니다.
이제 Fibonacci 나선을 완료했습니다. 여기에서 두 가지 개별 연습을 추가로 진행하여 Nautilus와 Sunflower를 호출해 보겠습니다. 이 둘은 자연 시스템을 추상적으로 나타낸 것이지만, Fibonacci 나선의 두 가지 다른 응용을 잘 보여 줍니다.
Circle.ByCenterPointRadius: 여기서는 이전 단계와 동일한 입력으로 원 노드를 사용하겠습니다. 반지름 값의 기본값은 1.0 이므로 원의 출력이 바로 표시됩니다. 따라서 점이 원점에서 얼마나 멀리 떨어져 있는지를 바로 확인할 수 있게 됩니다.
Number Sequence: 't'의 원래 배열입니다. 이를 Circle.ByCenterPointRadius의 반지름 값에 연결하면, 원 중심이 원점에서 계속 멀어지지만 원의 반지름은 증가하여 독특한 Fibonacci 원그래프가 작성됩니다.
이 그래프를 3D로 만들면 보너스 점수를 드리겠습니다.
이전 연습의 동일한 단계인 Point.ByCoordinates 노드로 나선형 점 배열 작성하기부터 시작해 보겠습니다.
![](../images/5-3/2/math-part IV-01.jpg)
다음으로, 이러한 간단한 단계를 수행하여 다양하게 회전하는 일련의 나선형을 생성합니다.
a. Geometry.Rotate: Geometry.Rotate 옵션에는 여러 가지가 있습니다. geometry, basePlane 및 degrees 를 입력으로 사용하여 노드를 선택했는지 확인합니다. Point.ByCoordinates를 형상 입력에 연결합니다. 이 노드를 마우스 오른쪽 버튼으로 클릭하고 레이싱이 '외적'으로 설정되어 있는지 확인합니다.
b. Plane.XY: basePlane 입력에 연결합니다. 나선의 기준과 동일한 위치에 있는 원점을 중심으로 회전합니다.
c. Number Range: 각도 입력을 위해 여러 회전을 작성하려고 합니다. 이 작업은 Number Range 구성요소를 사용하여 빠르게 수행할 수 있습니다. 이 값을 degrees 입력에 연결합니다.
d. Number: 또한 숫자 범위를 정의하려면 캔버스에 세로로 세 개의 숫자 노드를 추가합니다. 위에서 아래로 0.0,360.0, 및 120.0 값을 각각 지정합니다. 그러면 나선이 회전하게 됩니다. 3개의 숫자 노드를 해당 노드에 연결한 후 Number Range 노드의 출력 결과를 확인합니다.
처음에는 출력이 소용돌이와 비슷합니다. Number Range 매개변수 중 일부를 조정하고 결과가 어떻게 달라지는지 확인해 보겠습니다.
Number Range 노드의 단계 크기를 120.0 에서 36.0 으로 변경합니다. 이렇게 하면 더 많은 회전이 작성되므로 그리드가 더 조밀해집니다.
Number Range 노드의 단계 크기를 36.0 에서 3.6 으로 변경합니다. 그러면 훨씬 더 조밀한 그리드가 표시되고 나선의 방향은 불명확해집니다. 이제, 해바라기가 작성되었습니다.
시각적 프로그램 개발에 대해 더 자세히 알아보려는 경우 사용하게 될 빌딩 블록을 더 깊이 있게 이해해야 합니다. 이 장에서는 Dynamo 프로그램의 와이어를 통과하는 데이터와 관련된 기본적인 개념을 소개합니다.
계산 모델링 분야에서 는 3D 형상을 나타내는 가장 널리 사용되는 양식 중 하나입니다. 메쉬 형상은 일반적으로 사변형 또는 삼각형 모음으로 구성되며, 간단하고 유연하며 NURBS 대신 사용할 수 있습니다. 또한 메쉬는 렌더링 및 시각화에서 디지털 제작 및 3D 인쇄에 이르는 모든 분야에서 사용됩니다.
Dynamo에서는 면-정점 데이터 구조를 사용하여 메쉬를 정의합니다. 가장 기본적인 수준에서 이 구조는 단순히 다각형으로 그룹화된 점의 모음입니다. 메쉬의 점은 정점이라고 하고, 표면 같은 다각형은 면이라고 합니다.
메쉬를 작성하려면 정점 리스트와 이러한 정점을 색인 그룹이라는 면으로 그룹화하는 시스템이 필요합니다.
정점 리스트
면을 정의할 색인 그룹 리스트
라이브러리에서는 메쉬를 수정 또는 복구하거나 제작에 사용할 수평 슬라이스를 추출하는 도구도 제공합니다.
메쉬는 표면 또는 솔리드 형상을 나타내는 사변형 및 삼각형의 모음입니다. 솔리드와 마찬가지로 메쉬 객체의 구조에는 정점, 모서리 및 면이 포함됩니다. 법선과 같이 메쉬를 고유하게 만드는 추가 특성이 있습니다.
메쉬 정점
메쉬 모서리(*인접 면이 하나만 있는 모서리를 "Naked"라고 하며, 다른 모든 모서리는 "Clothed"임)
메쉬 면
메쉬의 정점은 점 리스트일 뿐입니다. 정점의 색인은 메쉬를 구성하거나 메쉬 구조에 대한 정보를 가져올 때 매우 중요합니다. 각 정점에는 부착된 면의 평균 방향을 그리고 메쉬의 "안쪽" 및 "바깥쪽" 방향을 파악하는 데 도움이 되는 해당 정점 법선(벡터)도 있습니다.
정점
정점 법선
면은 3개 또는 4개의 정점이 정렬된 리스트입니다. 따라서 메쉬 면의 "표면" 표현은 색인화되는 정점의 위치에 따라 포함됩니다. 메쉬를 구성하는 정점 리스트가 이미 있으므로 개별 점을 제공하여 면을 정의하는 대신, 간단히 정점의 색인을 사용합니다. 이렇게 하면 둘 이상의 면에서 동일한 정점을 사용할 수도 있습니다.
색인 0, 1, 2, 3으로 만들어진 쿼드 면
색인 1, 4, 2로 만든 삼각형 면. 색인 그룹은 순서대로 이동될 수 있습니다. 시퀀스가 시계 반대 방향으로 정렬되기만 하면 면이 올바르게 정의됩니다.
메쉬 형상은 NURBS 형상과 어떻게 다르고, 이러한 형상은 각기 언제 사용해야 할까요?
이전 장에서는 두 방향으로 진행되는 일련의 NURBS 곡선에 의해 NURBS 표면이 정의되는 것을 확인했습니다. U
및 V
라는 레이블이 지정되는 이러한 방향을 통해 2D 표면 도메인에 따라 NURBS 표면을 매개변수화할 수 있게 됩니다. 곡선 자체는 컴퓨터에 방정식으로 저장되므로 결과 표면을 임의의 작은 정밀도로 계산할 수 있습니다. 그러나 여러 NURBS 표면을 함께 결합하는 것은 어려울 수 있습니다. 두 NURBS 표면을 결합하면 형상의 서로 다른 단면이 서로 다른 UV 매개변수 및 곡선 정의를 갖는 폴리 표면이 만들어집니다.
표면
아이소파라메트릭(아이소팜) 곡선
표면 제어점
표면 제어 다각형
아이소파라메트릭 점
표면 프레임
메쉬
Naked 모서리
메쉬 네트워크
메쉬 모서리
정점 법선
메쉬 면/메쉬 면 법선
반면, 메쉬는 정확하게 정의된 불연속 개수의 정점 및 면으로 구성됩니다. 일반적으로 정점 네트워크는 간단한 UV
좌표로 정의할 수 없으며, 면이 불연속적이므로 정밀도는 메쉬로 구축되고 메쉬를 미세 조정하고 면을 더 추가하는 방법으로만 변경할 수 있습니다. 수학적 설명이 부족하면 메쉬가 단일 메쉬 내에서 복잡한 형상을 보다 유연하게 처리할 수 있습니다.
또 다른 중요한 차이점은 메쉬나 NURBS 형상의 로컬 변경이 전체 형태에 영향을 미치는 정도입니다. 메쉬의 한 정점을 이동하면 해당 정점에 인접한 면에만 영향을 줍니다. NURBS 표면에서는 영향의 범위가 보다 복잡하며 제어점의 가중치 및 노트뿐만 아니라 표면의 각도에 따라 달라집니다. 그러나 일반적으로 NURBS 표면에서 단일 제어점을 이동하면 형상에서 보다 매끄럽고 광범위한 변화가 일어납니다.
NURBS 표면 - 제어점을 이동하면 모양 전체가 영향을 받습니다.
메쉬 형상 - 정점을 이동하면 인접 요소에만 영향을 미칩니다.
유용한 하나의 유추 방식은 벡터 이미지(선과 곡선으로 구성)와 래스터 이미지(개별 픽셀로 구성)를 비교하는 것입니다. 벡터 이미지를 줌 확대하면 곡선이 선명하고 명확하게 유지되지만, 래스터 이미지를 줌 확대하면 개별 픽셀이 더 커집니다. 이러한 유추에서 NURBS 표면은 원활한 수학적 관계가 있으므로 벡터 이미지와 비교될 수 있지만, 메쉬는 해상도가 설정된 래스터 이미지와 유사하게 동작합니다.
논리 또는 좀 더 구체적으로 말해서 조건부 논리를 사용하면 테스트를 기준으로 하나의 작업 또는 작업 세트를 지정할 수 있습니다. 테스트를 평가한 후에는 프로그램 흐름을 제어하는 데 사용할 수 있는 True
또는 False
를 나타내는 부울 값을 얻게 됩니다.
숫자 변수는 여러 숫자의 전체 범위를 포함할 수 있습니다. 부울 변수는 True 또는 False, Yes 또는 No, 1 또는 0과 같이 2개의 값만 포함할 수 있습니다. 이렇게 범위가 제한되어 있기 때문에 부울을 사용하여 계산을 수행하는 경우는 드뭅니다.
"If" 문은 프로그래밍의 기본 개념입니다. "이것 이 true이면 저것 이 발생하고, 그렇지 않으면 다른 작업 이 발생합니다. 문의 결과 동작은 부울 값에 의해 구동됩니다. 다음과 같은 여러 가지 방법으로 Dynamo에서 "If" 문을 정의할 수 있습니다.
아이콘 | 이름(구문) | 입력 | 출력 |
---|
조건문 "If"를 사용하여 이러한 세 가지 노드 각각의 동작에 대한 간단한 예를 살펴보겠습니다.
이 이미지에서 boolean 은 true 로 설정되어 있습니다. 따라서 결과는 "this is the result if true" 문자열이 됩니다. 여기서 If 문을 작성하는 3개의 노드는 동일하게 작동합니다.
다시 한번 말씀드리지만 노드는 동일하게 작동합니다. boolean 이 false 로 변경되면 결과는 원래 If 문에 정의된 대로 숫자 Pi 가 됩니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
논리를 사용하여 숫자 리스트를 짝수 리스트와 홀수 리스트로 구분해보겠습니다.
a. Number Range - 캔버스에 숫자 범위를 추가합니다.
b. Numbers - 캔버스에 3개의 숫자 노드를 추가합니다. 각 숫자 노드의 값은 start 의 경우 0.0, end 의 경우 10.0, step 의 경우 1.0 이어야 합니다.
c. Output - 출력은 0-10 범위의 11개 숫자로 이루어진 리스트입니다.
d. Modulo(%)- Number Range를 x 로, 2.0 을 y 로 지정합니다. 그러면 리스트에 포함된 각 숫자를 2로 나눈 나머지가 계산됩니다. 이 리스트의 출력에서는 0과 1이 번갈아 나오는 값 리스트가 제공됩니다.
e. Equality Test(==) - 캔버스에 동일성 테스트를 추가합니다. modulo 출력을 x 입력에, 0.0 을 y 입력에 연결합니다.
f. Watch - 동일성 테스트의 출력은 true와 false가 번갈아 나오는 값의 리스트입니다. 이러한 값은 리스트의 항목을 구분하는 데 사용됩니다. 0(또는 true)은 짝수를 나타내고, 1(또는 false)은 홀수를 나타냅니다.
g. List.FilterByBoolMask - 이 노드에서는 입력 부울을 기준으로 2개의 다른 리스트로 값을 필터링합니다. 원래 number range 를 list 입력에 연결하고 equality test 출력을 mask 입력에 연결합니다. in 출력은 true 값을 나타내고 out 출력은 false 값을 나타냅니다.
h. Watch - 결과적으로 이제 짝수 리스트와 홀수 리스트가 표시됩니다. 논리 연산자를 사용하여 리스트를 패턴으로 구분했습니다.
첫 번째 연습에서 설정한 논리를 토대로, 이 설정을 모델링 작업에 적용해 보겠습니다.
2. 동일한 노드를 사용하여 이전 연습에서 시작합니다. 유일한 예외는 다음과 같습니다(형식 변경 이외).
a. 이러한 입력 값과 함께 Sequence 노드를 사용합니다.
b. List.FilterByBoolMask에 대한 리스트 내 입력의 연결을 끊었습니다. 지금은 이러한 노드를 그대로 두지만 이는 연습 후반부에서 도움이 될 것입니다.
3. 먼저 위의 이미지에 표시된 것처럼 별도의 그래프 그룹을 만들어 보겠습니다. 이 노드 그룹은 선 곡선을 정의하는 파라메트릭 방정식을 나타냅니다. 몇 가지 참고 사항은 다음과 같습니다.
a. 첫 번째 Number Slider는 파형의 주파수를 나타내며, Min은 1이고, Max는 4이고, Step은 0.01입니다.
b. 두 번째 Number Slider는 파형의 진폭을 나타내며, Min은 0이고, Max는 1이고, Step은 0.01입니다.
c. PolyCurve.ByPoints - 위의 노드 다이어그램이 복사된 경우 결과는 Dynamo 미리보기 뷰포트에서 사인 곡선이 됩니다.
입력 방법: 보다 정적인 특성에 대해서는 숫자 노드를 사용하고 보다 유동적인 특성에는 숫자 슬라이더를 사용합니다. 이 단계를 시작할 때 정의하는 원래 숫자 범위를 유지하겠습니다. 그러나 여기에서 작성하는 사인 곡선은 유동적이어야 합니다. 이러한 슬라이더를 이동하면서 곡선의 진동수와 진폭이 업데이트되는 것을 볼 수 있습니다.
4. 잠시 정의를 확인하기 위해 다음 작업 상황을 참조할 수 있도록 최종 결과를 살펴보겠습니다. 처음에 따로 생성된 두 단계를 이제 연결합니다. 기본 사인 곡선을 사용하여 지퍼 구성요소의 위치를 움직이고, true/false 논리를 사용하여 작은 상자와 큰 상자를 번갈아 표시합니다.
a. Math.RemapRange - 02단계에서 작성한 숫자 시퀀스를 사용하여 범위를 다시 매핑함으로써 새로운 숫자 시리즈를 작성해 보겠습니다. 01단계의 원래 숫자 범위는 0~100입니다. 이러한 숫자의 범위는 각각 newMin 및 newMax 입력을 기준으로 0에서 1까지입니다.
5. Curve.PointAtParameter 노드를 작성한 다음, param 입력으로 04단계의 Math.RemapRange 출력을 연결합니다.
이 단계에서는 곡선을 따라 점을 작성합니다. param 의 입력에서는 이 범위의 값을 찾으므로 숫자를 0에서 1로 다시 매핑했습니다. 값 0 은 시작점을 나타내고 값 1 은 끝점을 나타냅니다. 그 사이의 모든 숫자는 [0,1] 범위 내에서 계산됩니다.
6. Curve.PointAtParameter의 출력을 List.FilterByBoolMask에 연결하여 홀수 및 짝수 색인 리스트를 구분합니다.
a. List.FilterByBoolMask - 이전 단계의 Curve.PointAtParameter를 list 입력에 연결합니다.
b. Watch - in 에 대한 감시 노드와 out 에 대한 감시 노드는 짝수 색인과 홀수 색인을 나타내는 두 개의 리스트가 있음을 보여 줍니다. 이러한 점은 다음 단계에 나와 있는 곡선에서 동일한 방법으로 정렬됩니다.
7. 다음으로 05단계에서 살펴본 List.FilterByBoolMask의 출력 결과를 사용하여 색인에 따른 크기를 가진 형상을 생성합니다.
Cuboid.ByLengths - 위의 이미지에 나와 있는 연결을 다시 작성하여 사인 곡선을 따라 지퍼를 가져옵니다. 여기서 직육면체는 상자에 불과하며, 상자 중심의 곡선 점을 기준으로 해당 크기를 정의합니다. 이제 짝수/홀수 분할 논리가 모델에서 명확히 드러나야 합니다.
a. 짝수 색인의 직육면체 리스트.
b. 홀수 색인의 직육면체 리스트.
지금까지 이 연습에서 살펴본 논리 연산에 따라 형상 치수를 정의하는 프로세스를 프로그래밍해 보았습니다.
데이터는 프로그램과 관련된 항목입니다. 데이터는 유선으로 이동되며, 새로운 형식의 출력 데이터로 처리되는 노드에 입력을 제공합니다. 데이터의 정의, 구성 방법을 검토하고 Dynamo에서 사용해 보겠습니다.
데이터는 정성적 또는 정량적 변수 값의 세트입니다. 가장 간단한 데이터 형식은 0
, 3.14
또는 17
과 같은 숫자입니다. 그러나 데이터는 변화하는 숫자(height
), 문자(myName
), 형상(Circle
) 또는 데이터 항목 리스트(1,2,3,5,8,13,...
)를 나타내는 다양한 유형의 변수가 될 수도 있습니다.
Dynamo에서 노드의 입력 포트에 데이터를 추가/공급합니다. 작업이 없는 데이터가 있을 수 있지만 노드가 나타내는 작업을 처리하기 위해서는 데이터가 필요합니다. 노드를 작업공간에 추가할 때 입력을 제공하지 않으면 결과는 작업 자체의 결과가 아니라 함수가 됩니다.
단순 데이터
데이터 및 작업(노드)이 성공적으로 실행됩니다.
데이터 입력이 없는 작업(노드)에서는 일반 함수를 반환합니다.
Null 인식 - 'null'
유형은 데이터가 없음을 나타냅니다. 이는 추상적인 개념이지만 시각적 프로그래밍 작업 중에 이 개념을 마주하게 될 가능성이 높습니다. 작업을 통해 유효한 결과가 작성되지 않는 경우 노드에서는 null을 반환합니다.
null이 발생하는지 테스트하고 데이터 구조에서 null을 제거하는 작업은 강력한 프로그램을 작성하는 데 있어서 매우 중요한 부분입니다.
시각적 프로그래밍을 사용하는 경우 많은 데이터를 아주 빠르게 생성할 수 있으며, 계층 구조를 관리할 방법이 필요합니다. 이는 데이터를 저장하는 조직 체계인 데이터 구조의 역할입니다. 데이터 구조의 세부 사항과 사용 방법은 프로그래밍 언어마다 다릅니다.
Dynamo에서는 리스트 기능을 통해 데이터에 계층을 추가합니다. 이러한 내용은 뒤쪽에 나오는 장에서 자세히 살펴보겠지만 여기서는 다음 내용부터 간단히 알아봅니다.
리스트는 하나의 데이터 구조에 배치된 항목의 모음을 나타냅니다.
내 손(리스트)에는 5개의 손가락(항목)이 있습니다.
도로(리스트)에는 10개의 가구(항목)가 있습니다.
Number Sequence 노드에서는 start, amount 및 step 입력을 사용하여 번호 리스트를 정의합니다. 이러한 노드를 사용하여 100-109 범위 및 0-9 범위에 대해 10개 숫자가 포함된 별도의 리스트 2개를 작성했습니다.
List.GetItemAtIndex 노드에서는 특정 색인에 있는 리스트의 항목을 선택합니다. 0 을 선택하면 리스트의 첫 번째 항목이 표시됩니다(이 경우 100).
두 번째 리스트에 동일한 프로세스를 적용하면 리스트의 첫 번째 항목인 0 값이 표시됩니다.
이제 List.Create 노드를 사용하여 두 개의 리스트를 하나로 병합합니다. 노드에서 리스트의 리스트 를 작성합니다. 그러면 데이터 구조가 변경됩니다.
색인을 0 으로 설정하여 List.GetItemAtIndex 를 다시 사용하면 리스트의 리스트에서 첫 번째 리스트가 표시됩니다. 이는 리스트를 항목으로 처리하는 것을 의미하며, 이 점은 다른 스크립팅 언어와 다소 다릅니다. 뒤쪽에 나오는 장에서 리스트 조작 및 데이터 구조에 대해 좀 더 자세히 살펴보겠습니다.
Dynamo의 데이터 계층을 이해하기 위한 주요 개념은 데이터 구조와 관련해서 리스트가 항목으로 간주된다는 점입니다. 즉, Dynamo는 데이터 구조의 이해를 위해 하향식 프로세스로 작동합니다. 이것은 무엇을 의미합니까? 예시를 통해 살펴보겠습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
첫 번째 예에서는 이 섹션에서 설명한 형상 계층을 통과하는 쉘 원통을 조립합니다.
1.Point.ByCoordinates 추가 - 캔버스에 노드를 추가하면 Dynamo 미리보기 그리드의 원점에 점이 표시됩니다. x,y 및 z 입력의 기본값은 0.0 이며, 이 값을 사용하면 해당 위치에 점이 생깁니다.
2. Plane.ByOriginNormal - 형상 계층의 다음 단계는 평면입니다. 평면은 여러 가지 방법으로 구성할 수 있는데 우리는 입력을 위해 원점과 법선을 사용하겠습니다. 원점은 이전 단계에서 작성한 점 노드입니다.
Vector.ZAxis - z 방향으로 결합된 벡터입니다. 입력이 없으며 [0,0,1] 값의 벡터만 있습니다. 이 값을 Plane.ByOriginNormal 노드에 대한 normal 입력으로 사용합니다. 그러면 Dynamo 미리보기에 직사각형 평면이 표시됩니다.
3. Circle.ByPlaneRadius - 계층을 따라 위로 이동하면서 이제 이전 단계의 평면에서 곡선을 작성합니다. 노드에 연결한 후 원점에 원을 가져옵니다. 노드의 기본 반지름 값은 1 입니다.
4. Curve.Extrude - 이제 항목에 깊이를 지정하고 세 번째 치수로 이동하여 항목이 팝업되도록 합니다. 이 노드에서는 곡선을 돌출시켜 곡선에서 표면을 작성합니다. 노드의 기본 거리는 1 이며 뷰포트에 원통이 표시됩니다.
5. Surface.Thicken - 이 노드에서는 표면을 지정된 거리만큼 간격띄우기하고 양식을 닫아 닫힌 솔리드를 제공합니다. 기본 두께 값은 1 이고 뷰포트에서 쉘 원통이 이러한 값과 함께 표시됩니다.
6. Number Slider - 이러한 모든 입력에 대해 기본값을 사용하는 대신, 파라메트릭 컨트롤을 몇 가지 모델에 추가해 보겠습니다.
Domain Edit - 숫자 슬라이더를 캔버스에 추가한 후 왼쪽 상단에 있는 캐럿을 클릭하여 도메인 옵션을 표시합니다.
Min/Max/Step - min, max 및 step 값을 각각 0,2 및 0.01 로 변경합니다. 이 작업은 전체 형상의 크기를 제어하기 위해 수행합니다.
7. Number Sliders - 모든 기본 입력에서 기본값을 갖는 모든 입력에 슬라이더가 대신 생길 때까지 이 숫자 슬라이더를 여러 번 복사하여 붙여넣어 보겠습니다(슬라이더를 선택하고 Ctrl+C, Ctrl+V 키를 차례로 누름). 정의가 작동하려면 일부 슬라이더 값이 0보다 커야 합니다(즉, 표면을 두껍게 하려면 돌출 깊이가 있어야 함).
8. 이제 이러한 슬라이더를 사용하여 파라메트릭 쉘 원통을 작성했습니다. 이러한 매개변수 중 일부를 조정해 보고 Dynamo 뷰포트에서 형상이 동적으로 업데이트되는 것을 확인합니다.
Number Sliders - 이 작업에서 한 단계 더 나아가 캔버스에 슬라이더를 많이 추가했으며, 방금 작성한 도구의 인터페이스를 정리해야 합니다. 하나의 슬라이더를 마우스 오른쪽 버튼으로 클릭하고 "이름 바꾸기..."를 선택한 다음, 각 슬라이더의 이름을 해당 매개변수(thickness, Radius, Height 등)에 대해 적절한 이름으로 변경합니다.
9. 여기서는 원통을 두껍게 작성했습니다. 이러한 객체는 현재 1개가 있습니다. 동적으로 연결된 상태를 유지하는 원통 배열을 작성하는 방법을 살펴보겠습니다. 이렇게 하기 위해 단일 항목으로 작업하는 대신 원통 리스트를 작성하겠습니다.
Addition (+) - 작성한 원통 옆에 원통 행을 추가하는 것이 목표입니다. 현재 원통과 인접한 원통을 추가하려는 경우 원통의 반지름과 해당 쉘의 두께를 둘 다 고려해야 합니다. 이 수는 슬라이더의 두 값을 더하여 얻습니다.
10. 이 단계는 더 많이 관련되어 있으므로 좀 더 천천히 살펴보겠습니다. 최종 목표는 행에서 각 원통의 위치를 정의하는 숫자 리스트를 작성하는 것입니다.
a. Multiplication - 먼저 이전 단계의 값에 2를 곱합니다. 이전 단계의 값은 반지름을 나타냅니다. 원통을 전체 지름만큼 이동하겠습니다.
b. Number Sequence - 이 노드를 사용하여 숫자 배열을 작성합니다. 첫 번째 입력은 이전 단계에서 step 값으로의 multiplication 노드입니다. number 노드를 사용하여 start 값을 0.0 으로 설정할 수 있습니다.
c. Integer Slider - amount 값의 경우 정수 슬라이더를 연결합니다. 그러면 작성되는 원통의 수가 정의됩니다.
d. Output - 이 리스트는 배열의 각 원통에 대해 이동된 거리를 표시하며 원래 슬라이더에서 파라메트릭 방식으로 구동됩니다.
11. 이 단계는 매우 간단합니다. 이전 단계에서 정의한 시퀀스를 원래 Point.ByCoordinates의 x 입력에 연결합니다. 그러면 삭제할 수 있는 pointX 슬라이더가 바뀝니다. 이제 뷰포트에 원통 배열이 표시됩니다(정수 슬라이더가 0보다 큰지 확인).
12 원통 체인은 여전히 모든 슬라이더에 동적으로 연결되어 있습니다. 각 슬라이더를 조정하며 정의가 업데이트되는 것을 확인해 보십시오.
공식적으로, 문자열은 리터럴 상수 또는 일부 변수 유형을 나타내는 문자 시퀀스입니다. 비공식적으로는 프로그래밍에서 텍스트를 의미하는 용어입니다. 지금까지 정수 및 십진수를 사용하여 매개변수를 구동했으며, 텍스트로도 같은 작업을 수행할 수 있습니다.
문자열은 사용자 매개변수 정의, 문서 세트에 주석 달기, 텍스트 기반 데이터 세트 구문 분석 등 광범위한 응용 분야에서 사용할 수 있습니다. 문자열 노드는 코어>입력 카테고리에 있습니다.
위의 샘플 노드는 문자열입니다. 숫자는 문자열로 나타내거나 문자 또는 전체 텍스트 배열로 나타낼 수 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
문자열을 조회하여 많은 양의 데이터를 신속하게 구문 분석할 수 있습니다. 워크플로우 진행 속도를 높이고 소프트웨어 상호 운용성을 지원하는 몇 가지 기본 작업에 대해 살펴보겠습니다.
아래 이미지에서는 외부 스프레드시트에서 가져온 데이터 문자열을 고려합니다. 해당 문자열은 XY 평면에서 직사각형의 정점을 나타냅니다. 일부 문자열 분할 작업을 소규모 연습으로 나눠보겠습니다.
";" 구분 기호는 직사각형의 각 정점을 분할합니다. 그러면 각 정점에 해당하는 3개의 항목이 포함된 리스트가 작성됩니다.
노드의 중간에 있는 "+"를 눌러 새 구분 기호를 작성합니다.
"," 문자열을 캔버스에 추가하고 새 구분 기호 입력에 연결합니다.
이제 결과는 항목 10개로 구성된 리스트가 됩니다. 노드는 먼저 separator0 을 기준으로 분할된 후 separator1 을 기준으로 분할됩니다.
위의 항목 리스트는 숫자처럼 보일 수 있지만 Dynamo에서는 여전히 개별 문자열로 간주됩니다. 점을 작성하려면 해당 데이터 유형을 문자열에서 숫자로 변환해야 합니다. 이 작업은 String.ToNumber 노드를 사용하여 수행합니다.
이 노드는 간단합니다. String.Split 결과를 입력에 연결합니다. 출력이 다르게 보이지는 않지만 데이터 유형은 이제 문자열 이 아닌 숫자 입니다.
기본적인 추가 작업을 통해 원래 문자열 입력을 기준으로 원점에 삼각형이 그려집니다.
문자열은 일반 텍스트 객체이므로 광범위한 응용 분야에서 사용됩니다. Dynamo의 코어>문자열 카테고리에 해당하는 몇 가지 주요 작업을 살펴보겠습니다.
다음은 두 문자열을 순서대로 병합하는 방법입니다. 이 방법에서는 리스트의 각 리터럴 문자열을 가져와 병합된 하나의 문자열을 작성합니다.
다음 이미지에는 다음 세 개의 문자열을 연결하는 과정이 나와 있습니다.
노드 중심에서 +/- 버튼을 클릭하여 연결 항목에 문자열을 추가하거나 연결 항목에서 문자열을 뺍니다.
출력에서는 공백과 문장 부호가 포함된 연결된 1개의 문자열이 제공됩니다.
결합 방법은 문장 부호가 하나 더 추가된다는 점을 제외하고는 연결과 매우 유사합니다.
Excel에서 작업한 경우 CSV 파일을 보았을 수 있습니다. CSV는 쉼표로 구분된 값을 의미합니다. 비슷한 데이터 구조를 작성하기 위해 String.Join 노드에서 쉼표(또는 이 경우 두 개의 대시)를 구분 기호로 사용할 수 있습니다.
다음 이미지에는 두 개의 문자열의 결합하는 과정이 나와 있습니다.
구분 기호 입력을 통해 결합된 문자열을 분할하는 하나의 문자열을 작성할 수 있습니다.
먼저 절의 기본적인 문자열 분할부터 살펴보겠습니다. 작성된 시가 쉼표를 기준으로 형식이 지정된다는 것을 알 수 있습니다. 이 형식을 사용하여 각 줄을 개별 항목으로 구분할 것입니다.
기본 문자열이 String 노드에 붙여넣어집니다.
다른 String 노드는 구분 기호를 나타내는 데 사용됩니다. 이 경우에는 쉼표를 사용합니다.
String.Split 노드가 캔버스에 추가되고 두 문자열에 연결됩니다.
출력에 줄이 개별 요소로 구분되었음이 표시됩니다.
이제 이 시에서 좋은 부분인 마지막 두 줄로 가보겠습니다. 원래 절은 하나의 데이터 항목이었습니다. 첫 번째 단계에서 이 데이터를 개별 항목으로 구분했습니다. 이제 찾으려는 텍스트를 검색해야 합니다. 또한 리스트의 마지막 두 항목을 선택하여 이 작업을 수행할 수 있긴 하지만, 이것이 한 권의 책이라면 모든 내용을 읽고 요소를 수동으로 분리하려고 하지는 않을 것입니다.
수동으로 검색하는 대신 String.Contains 노드를 사용하여 문자 세트를 검색합니다. 이는 워드 프로세서에서 "찾기" 명령을 수행하는 것과 유사합니다. 이 경우 항목 내에서 해당 하위 문자열을 찾은 경우 "true" 또는 "false"가 반환됩니다.
searchFor 입력에서는 절 내에서 찾으려는 하위 문자열을 정의합니다. 텍스트가 "And miles"인 String 노드를 사용해 보겠습니다.
출력에서는 false 및 true 리스트가 제공됩니다. 다음 단계에서는 이 부울 논리를 사용하여 요소를 필터링해 보겠습니다.
List.FilterByBoolMask는 false 및 true를 필터링하는 데 사용하려는 노드입니다. "in" 출력은 "mask" 입력이 "true"인 문을 반환하지만, "out" 출력은 "false"인 문을 반환합니다.
"in"의 결과는 예상한 것처럼 절의 마지막 두 줄입니다.
이제 두 줄을 병합하여 절의 반복을 이해하기 쉽게 하려고 합니다. 이전 단계의 출력을 보면 리스트에 다음과 같은 두 개의 항목이 있는 것을 알 수 있습니다.
두 개의 List.GetItemAtIndex 노드를 사용하고, 0과 1 값을 색인 입력으로 사용하여 항목을 분리할 수 있습니다.
각 노드의 출력에는 마지막 두 줄이 순서대로 표시됩니다.
이러한 두 항목을 하나로 병합하려면 다음과 같이 String.Join 노드를 사용합니다.
String.Join 노드를 추가하고 나면 구분 기호가 필요하다는 사실을 알게 됩니다.
구분 기호를 작성하려면 캔버스에 String 노드를 추가하고 쉼표를 입력합니다.
최종 출력에는 마지막 두 항목이 하나로 병합되었습니다.
마지막 두 줄을 분리하는 데 많은 작업이 필요한 것처럼 보이는데, 이는 사실입니다. 문자열 작업을 위해서는 일부 사전 작업이 필요한 경우가 많습니다. 그렇지만 이러한 작업은 확장 가능하며, 대규모 데이터 세트에 비교적 쉽게 적용할 수 있습니다. 스프레드시트와 상호 운용성을 활용하여 파라메트릭 방식으로 작업 중인 경우에는 문자열 작업을 기억해야 합니다.
노드 | 노드 | ||
---|---|---|---|
선은 점의 집합으로 구성되며, 각 선에는 최소 2개의 점이 있습니다. Dynamo에서 선을 작성하는 가장 일반적인 방법 중 하나는 Line.ByStartPointEndPoint
를 사용하여 Dynamo에서 선을 작성하는 것입니다.
이제 이전 단계의 대량 노드는 제대로 작동하지만 여기에는 상당히 많은 작업이 필요합니다. 보다 효율적인 워크플로우를 작성하려면 를 살펴보고 Dynamo 표현식의 문자열을 하나의 노드로 정의하십시오. 이 다음 단계 시리즈에서는 파라메트릭 방정식을 사용하여 Fibonacci 나선을 그리는 방법을 살펴보겠습니다.
원형 Nautilus 쉘의 패턴이 만들어졌으므로, 이제 파라메트릭 그리드를 살펴보겠습니다. Fibonacci 나선에서 기본 회전을 사용하여 Fibonacci 그리드를 작성하면 을 본뜬 결과가 모델링됩니다.
패키지를 설치하여 Dynamo의 메쉬 기능을 확장할 수 있습니다. Dynamo Mesh Toolkit에서는 외부 파일 형식에서 메쉬를 가져오고, Dynamo 형상 객체에서 메쉬를 작성하고, 정점 및 색인으로 메쉬를 수동으로 작성하는 도구를 제공합니다.
이 패키지 사용에 대한 예를 확인하려면 를 참조하십시오.
아이콘 | 이름/구문 | 입력 | 출력 |
---|
이 연습에서는 문자열을 조회하고 조작하는 방법을 사용하여 Robert Frost가 쓴 의 마지막 절을 분석해 보겠습니다. 이러한 방법이 가장 실질적인 응용 사례는 아니지만, 명확한 리듬과 운율이 있는 줄에 적용할 경우 개념적 문자열 동작을 파악하는 데 도움이 됩니다.
CREATE
Color.ByARGB 알파, 빨간색, 녹색, 파란색 구성요소로 색상을 구성합니다.
색상 범위 시작 색상과 끝 색상 간의 색상 그라데이션에서 색상을 가져옵니다.
ACTION
Color.Brightness 이 색상의 밝기 값을 가져옵니다.
Color.Components 색상의 구성요소를 알파, 빨간색, 녹색, 파란색의 순서로 나열합니다.
Color.Saturation 이 색상의 채도 값을 가져옵니다.
Color.Hue 이 색상의 색조 값을 가져옵니다.
QUERY
Color.Alpha 색상의 알파 구성요소를 찾습니다(0~255).
Color.Blue 색상의 파란색 구성요소를 찾습니다(0~255).
Color.Green 색상의 녹색 구성요소를 찾습니다(0~255).
Color.Red 색상의 빨간색 구성요소를 찾습니다(0~255).
CREATE
GeometryColor.ByGeometryColor 색상을 사용하여 형상을 표시합니다.
ACTION
View.Watch 노드의 출력을 시각화합니다.
View.Watch 3D 형상의 동적 미리보기를 표시합니다.
ACTION
부울 True와 False 사이에서 선택합니다.
Code Block DesignScript 코드를 직접 작성할 수 있습니다.
디렉토리 경로 시스템에서 디렉토리를 선택하여 디렉토리 경로를 가져올 수 있습니다.
파일 경로 시스템에서 파일을 선택하여 파일 이름을 가져올 수 있습니다.
정수 슬라이더 정수 값을 생성하는 슬라이더입니다.
Number 숫자를 작성합니다.
번호 슬라이더 숫자 값을 생성하는 슬라이더입니다.
String 문자열을 작성합니다.
Object.IsNull 지정된 객체가 null인지 확인합니다.
CREATE
List.Create 지정된 입력에서 새 리스트를 작성합니다.
List.Combine 두 시퀀스의 각 요소에 연결자를 적용합니다.
Number Range 지정된 범위에서 숫자의 시퀀스를 작성합니다.
Number Sequence 숫자의 시퀀스를 작성합니다.
ACTION
List.Chop 리스트를 각각 지정된 양의 항목이 포함된 리스트 세트로 자릅니다.
List.Count 지정된 리스트에 저장된 항목의 개수를 반환합니다.
List.Flatten 리스트의 내포된 리스트를 특정한 양만큼 단순화합니다.
List.FilterByBoolMask 별도의 부울 리스트에서 해당하는 인덱스를 조회하여 시퀀스를 필터링합니다.
List.GetItemAtIndex 지정된 색인에 위치하는 지정된 리스트에서 항목을 가져옵니다.
List.Map 리스트의 모든 요소에 함수를 적용하고 결과에서 새 리스트를 생성합니다.
List.Reverse 지정된 리스트의 항목이 역순으로 포함된 새 리스트를 작성합니다.
List.ReplaceItemAtIndex 지정된 인덱스에 위치한 지정된 리스트에서 항목을 대체합니다.
List.ShiftIndices 리스트의 인덱스를 지정된 수만큼 오른쪽으로 이동합니다.
List.TakeEveryNthItem 지정된 리스트에서 지정된 간격띄우기 이후 지정된 값의 배수인 인덱스의 항목을 가져옵니다.
List.Transpose 리스트의 리스트에서 행과 열을 교체합니다. 다른 행보다 짧은 행이 몇 개 있을 경우 null 값이 결과 배열에 자리 표시자로 삽입되어 항상 직사각형이 되도록 합니다.
ACTION
If 조건문입니다. 테스트 입력의 부울 값을 확인합니다. 테스트 입력이 true인 경우 결과에서 true 입력을 출력하고, 그렇지 않은 경우 결과에서 false 입력을 출력합니다.
ACTION
Math.Cos 각도의 코사인 값을 계산합니다.
Math.DegreesToRadians 도 각도를 라디안 각도로 변환합니다.
Math.Pow 숫자를 지정된 멱 수만큼 제곱합니다.
Math.RadiansToDegrees 라디안 각도를 도 각도로 변환합니다.
Math.RemapRange 분포 비율을 유지하면서 숫자 리스트의 범위를 조정합니다.
Math.Sin 각도의 사인을 계산합니다.
Formula 수학 공식을 계산합니다. 평가에 NCalc를 사용합니다. http://ncalc.codeplex.com을 참조하십시오.
Map 값을 입력 범위로 매핑합니다.
ACTION
String.Concat 여러 문자열을 하나의 문자열로 연결합니다.
String.Contains 지정된 문자열에 지정된 하위 문자열이 포함되어 있는지 확인합니다.
String.Join 결합되는 각 문자열 사이에 지정된 구분자를 삽입하여, 여러 문자열을 하나의 문자열로 연결합니다.
String.Split 단일 문자열을 지정된 구분 문자열을 사용하여 문자열 리스트로 구분합니다.
String.ToNumber 문자열을 정수 또는 double 값으로 변환합니다.
CREATE
Circle.ByCenterPointRadius 표준 XY 평면의 입력 중심점과 반지름을 사용하고 표준 Z를 법선으로 사용하여 원을 작성합니다.
Circle.ByPlaneRadius 입력 평면 원점(루트)을 중심으로 지정된 반지름을 사용하여 입력 평면에 원을 작성합니다.
CREATE
CoordinateSystem.ByOrigin 입력 점을 원점으로 하고 X 및 Y축이 WCS X 및 Y축으로 설정된 CoordinateSystem을 작성합니다.
CoordinateSystem.ByCyclindricalCoordinates 지정된 좌표계를 기준으로 지정된 원통형 좌표 매개변수에서 CoordinateSystem을 작성합니다.
CREATE
Cuboid.ByLengths WCS 원점을 중심으로 지정된 폭, 길이, 높이의 직육면체를 작성합니다.
Cuboid.ByLengths(원점)
입력 점을 중심으로 지정된 폭, 길이, 높이의 직육면체를 작성합니다.
Cuboid.ByLengths(coordinateSystem)
WCS 원점을 중심으로 지정된 폭, 길이, 높이의 직육면체를 작성합니다.
Cuboid.ByCorners
낮은 점에서 높은 점에 걸친 직육면체를 작성합니다.
Cuboid.Length
이 함수는 실제 표준 공간 치수가 아니라 직육면체의 입력 치수를 반환합니다. **
Cuboid.Width
이 함수는 실제 표준 공간 치수가 아니라 직육면체의 입력 치수를 반환합니다. **
Cuboid.Height
이 함수는 실제 표준 공간 치수가 아니라 직육면체의 입력 치수를 반환합니다. **
BoundingBox.ToCuboid
경계 상자를 솔리드 직육면체로 가져옵니다.
ACTION
Curve.Extrude(거리) 곡선을 법선 벡터 방향으로 돌출시킵니다.
Curve.PointAtParameter StartParameter() 및 EndParameter() 사이의 지정된 매개변수에서 곡선상의 점을 가져옵니다.
ACTION
Geometry.DistanceTo 이 형상에서 다른 형상까지의 거리를 가져옵니다.
Geometry.Explode 복합 또는 분리되지 않은 요소를 구성요소 부품으로 분리합니다.
Geometry.ImportFromSAT 가져온 형상 리스트입니다.
Geometry.Rotate(basePlane) 객체를 평면 원점 및 법선 주위로 지정된 각도만큼 회전합니다.
Geometry.Translate 형상 유형을 지정된 방향으로 지정된 거리만큼 변환합니다.
CREATE
Line.ByBestFitThroughPoints 점의 산점도에 가장 가까운 선을 작성합니다.
Line.ByStartPointDirectionLength 점에서 시작하여 벡터 방향으로 지정된 길이만큼 연장되는 직선을 작성합니다.
Line.ByStartPointEndPoint 두 입력 점 사이에 직선을 작성합니다.
Line.ByTangency 입력 곡선의 매개변수 점에서 입력 곡선에 접하는 선을 작성합니다.
QUERY
Line.Direction 곡선 방향입니다.
Create
NurbsCurve.ByControlPoints 명시적 제어점을 사용하여 BSplineCurve를 작성합니다.
NurbsCurve.ByPoints 점 사이를 보간하여 BSplineCurve를 작성합니다.
Create
NurbsSurface.ByControlPoints 명시적 제어점과 지정된 U 및 V 각도를 사용하여 NurbsSurface를 작성합니다.
NurbsSurface.ByPoints 지정된 보간 점과 U 및 V 각도를 사용하여 NurbsSurface를 작성합니다. 결과 표면은 모든 점을 통과합니다.
CREATE
Plane.ByOriginNormal 루트 점을 중심으로 입력 법선 벡터를 사용하여 평면을 작성합니다.
Plane.XY 표준 XY 평면에 평면을 작성합니다.
CREATE
Point.ByCartesianCoordinates 3개의 데카르트 좌표를 사용하여 지정된 좌표계에서 점을 형성합니다.
Point.ByCoordinates(2D) 지정된 2개의 데카르트 좌표를 사용하여 XY 평면에 점을 형성합니다. Z 구성요소는 0입니다.
Point.ByCoordinates(3D) 지정된 3개의 데카르트 좌표를 사용하여 점을 형성합니다.
Point.Origin 원점(0,0,0)을 가져옵니다.
ACTION
Point.Add 점에 벡터를 추가합니다. 변환(벡터)과 같습니다.
QUERY
Point.X 점의 X 구성요소를 가져옵니다.
Point.Y 점의 Y 구성요소를 가져옵니다.
Point.Z 점의 Z 구성요소를 가져옵니다.
CREATE
Polycurve.ByPoints 점을 연결하는 일련의 선에서 PolyCurve를 작성합니다. 닫힌 곡선의 경우 마지막 점은 시작점과 같은 위치에 있어야 합니다.
CREATE
Rectangle.ByWidthLength(평면) 입력 평면 루트를 중심으로 입력 폭(평면 X축 길이)과 길이(평면 Y축 길이)를 사용하여 직사각형을 작성합니다.
CREATE
Sphere.ByCenterPointRadius 입력 점을 중심으로 지정된 반지름을 사용하여 솔리드 구를 작성합니다.
CREATE
Surface.ByLoft 입력 횡단면 곡선 사이에서 로프트하여 표면을 작성합니다.
Surface.ByPatch 입력 곡선에 의해 정의된 닫힌 경계의 내부를 채워 표면을 작성합니다.
ACTION
Surface.Offset 표면의 간격을 표면 법선 방향으로 지정된 거리만큼 띄웁니다.
Surface.PointAtParameter 지정된 U 및 V 매개변수에서 점을 반환합니다.
Surface.Thicken 표면을 두껍게 하여 솔리드로 만들고, 표면의 양쪽에서 표면 법선 방향으로 돌출합니다.
CREATE
UV.ByCoordinates 두 double 값에서 UV를 작성합니다.
CREATE
Vector.ByCoordinates 3개의 유클리드 좌표로 벡터를 형성합니다.
Vector.XAxis 표준 X축 벡터(1,0,0)를 가져옵니다.
Vector.YAxis 표준 Y축 벡터(0,1,0)를 가져옵니다.
Vector.ZAxis 표준 Z축 벡터(0,0,1)를 가져옵니다.
ACTION
Vector.Normalized 벡터의 정규화된 버전을 가져옵니다.
CREATE
CoordinateSystem.ByOrigin 입력 점을 원점으로 하고 X 및 Y축이 WCS X 및 Y축으로 설정된 CoordinateSystem을 작성합니다.
CoordinateSystem.ByCyclindricalCoordinates 지정된 좌표계를 기준으로 지정된 원통형 좌표 매개변수에서 CoordinateSystem을 작성합니다.
+ 더하기
- 빼기
* 곱하기
/ 나누기
% 모듈 방식 분할에서는 두 번째 입력으로 나눈 후 첫 번째 입력의 나머지를 계산합니다.
< 다음보다 작음
> 다음보다 큼
== 두 값 간의 균일성에 대한 균일성 테스트입니다.
부울
수
문자열
번호 슬라이더
디렉토리 경로
정수 슬라이더
파일 경로
리스트는 데이터를 구성하는 방법입니다. 컴퓨터의 운영 체제에는 파일과 폴더가 있습니다. Dynamo에서는 이러한 파일과 폴더를 각각 항목과 리스트로 간주할 수 있습니다. 운영 체제처럼, 여러 가지 방법으로 데이터를 작성, 수정 및 조회할 수 있습니다. 이 장에서는 Dynamo에서 리스트가 관리되는 방식에 대해 자세히 알아보겠습니다.
리스트는 요소 또는 항목의 모음입니다. 예를 들어 바나나 묶음을 고려해보십시오. 각 바나나는 리스트(또는 묶음) 내의 항목입니다. 각 바나나를 따로 잡는 것보다 바나나 묶음을 잡는 것이 더 쉬운데, 이는 데이터 구조의 파라메트릭 관계에 따라 요소를 그룹화하는 경우에도 마찬가지입니다.
사진 출처: Augustus Binu
식료품을 구입할 때는 구입한 모든 항목을 바구니에 넣습니다. 이 바구니 또한 리스트입니다. 바나나 빵을 만들려면 3묶음의 바나나가 필요합니다(바나나 빵을 많이 만드는 경우). 이 바구니는 바나나 묶음 리스트를 나타내고 각 묶음은 바나나 리스트를 나타냅니다. 바구니는 리스트의 리스트(2차원)이고 바나나 묶음은 리스트(1차원)입니다.
Dynamo에서는 리스트 데이터가 정렬되고, 각 리스트의 첫 번째 항목은 색인 "0"을 갖습니다. 아래에서는 Dynamo에서 리스트가 정의되는 방법과 여러 리스트가 서로 어떻게 연관되는지 알아보겠습니다.
처음에 다소 이상해 보일 수 있는 점은 리스트의 첫 번째 색인이 항상 1이 아니라 0이라는 것입니다. 따라서 리스트의 첫 번째 항목이라고 하면 실제로 색인 0에 해당하는 항목을 의미합니다.
예를 들어 오른손의 손가락 수를 셀 경우 1에서 5까지 셀 수 있습니다. 그러나 손가락을 하나의 리스트에 포함하면 Dynamo에서는 0부터 4까지의 색인을 지정할 것입니다. 프로그래밍 초보자에게는 다소 이상해 보일 수 있지만 대부분의 계산 시스템에서는 0부터 시작하는 색인이 표준 방식입니다.
리스트에는 항목이 5개 있으며, 해당 리스트에서는 0부터 시작하는 계산 시스템을 사용합니다. 리스트에 저장되는 항목은 숫자일 필요가 없습니다. 점, 곡선, 표면, 패밀리 등 Dynamo에서 지원하는 어떤 데이터 유형도 될 수 있습니다.
a. 색인
b. 점
c. 항목
종종 리스트에 저장된 데이터 유형을 확인하는 가장 쉬운 방법은 watch 노드를 다른 노드의 출력에 연결하는 것입니다. 기본적으로 watch 노드에서는 자동으로 리스트 왼쪽에 모든 색인이 표시되고 오른쪽에 데이터 항목이 표시됩니다.
이러한 색인은 리스트로 작업할 때 중요한 요소입니다.
리스트와 관련해서, 입력 및 출력은 사용 중인 Dynamo 노드에 따라 달라집니다. 예를 들어 5개의 점 리스트를 사용하며, 이 출력을 두 개의 다른 Dynamo 노드인 PolyCurve.ByPoints 및 Circle.ByCenterPointRadius에 연결해 보겠습니다.
PolyCurve.ByPoints의 points 입력의 경우 "Point[]" 를 찾습니다. 이것은 점 리스트를 나타냅니다.
PolyCurve.ByPoints의 출력은 점 5개의 리스트에서 작성된 단일 PolyCurve입니다.
Circle.ByCenterPointRadius의 centerPoint 입력의 경우 "Point" 를 요청합니다.
Circle.ByCenterPointRadius의 출력은 중심이 점의 원래 리스트에 해당하는 원 5개의 리스트입니다.
PolyCurve.ByPoints 및 Circle.ByCenterPointRadius의 입력 데이터는 동일하지만, Polycurve.ByPoints 노드에서는 하나의 polycurve를 제공하며, Circle.ByCenterPointRadius 노드에서는 각 점에 중심이 있는 5개의 원을 제공합니다. 즉, polycurve는 5개의 점을 연결하는 곡선으로 그려지고, 원은 각 점에 서로 다른 원을 작성합니다. 그렇다면 데이터는 어떻게 될까요?
Polycurve.ByPoints의 points 입력 위에 커서를 놓으면 해당 입력이 "Point[]" 를 찾는 것을 확인할 수 있습니다. 끝에 각괄호가 있다는 점에 유의하십시오. 이는 점 리스트를 나타내며, polycurve를 작성하려는 경우 입력은 각 polycurve에 대한 리스트여야 합니다. 따라서 이 노드에서는 각 리스트를 하나의 polycurve로 압축합니다.
반면, Circle.ByCenterPointRadius의 centerPoint 입력에서는 "Point" 를 요청합니다. 이 노드에서는 원의 중심점을 정의하기 위한 항목으로 하나의 점을 찾습니다. 바로 이 때문에 입력 데이터에서 5개의 원을 얻게 되는 것입니다. 이렇게 Dynamo에서 입력과 다른 점을 인식하면 데이터 관리 시 노드가 작동하는 방식을 보다 잘 이해할 수 있습니다.
명확한 솔루션이 없으면 데이터 일치는 문제가 됩니다. 이 문제는 노드가 다른 크기의 입력에 액세스할 수 있는 경우에 발생합니다. 데이터 일치 알고리즘을 변경하면 결과가 크게 달라질 수 있습니다.
점 사이에 선 세그먼트를 작성하는 노드가 있다고 상상해 보십시오(Line.ByStartPointEndPoint). 여기에는 다음과 같이 점 좌표를 제공하는 두 개의 입력 매개변수가 있습니다.
가장 간단한 방법은 더 이상 짝을 지을 수 없을 때까지 입력을 일대일로 연결하는 것입니다. 이를 "최단 리스트" 알고리즘이라고 합니다. 다음은 Dynamo 노드의 기본 동작입니다.
"최장 리스트" 알고리즘은 더 이상 짝을 지을 수 없을 때까지 입력을 계속 연결하고 요소를 재사용합니다.
마지막으로 “외적” 메서드는 가능한 모든 연결을 설정합니다.
보시다시피 이러한 점 세트 사이에 선을 그릴 수 있는 방법은 여러 가지가 있습니다. 레이싱 옵션은 노드의 중심을 마우스 오른쪽 버튼으로 클릭하고 "레이싱" 메뉴를 선택하여 찾을 수 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
아래의 레이싱 작업을 보여드리기 위해 이 기준 파일을 사용하여 최단 리스트, 최장 리스트 및 외적을 정의해 보겠습니다.
Point.ByCoordinates의 레이싱만 변경하고 위의 그래프의 다른 부분은 변경하지 않습니다.
_최단 리스트_를 레이싱 옵션(기본 옵션)으로 선택하면 5개의 점으로 구성된 기본 대각선이 표시됩니다. 5개의 점은 더 짧은 리스트의 길이이므로 최단 리스트 레이싱은 한 리스트의 끝에 도달하면 중지됩니다.
레이싱을 최장 리스트 로 변경하면 수직으로 확장되는 대각선이 표시됩니다. 개념 다이어그램과 동일한 방법으로, 5개 항목 리스트의 마지막 항목이 반복되면서 더 긴 리스트의 길이에 도달합니다.
레이싱을 외적 으로 변경하면 각 리스트 간에 모든 조합이 모여 5x10개의 점 그리드가 제공됩니다. 이는 현재 데이터가 리스트의 리스트라는 점을 제외하고, 위 개념 다이어그램에 표시된 것처럼 외적에 대한 동일한 데이터 구조입니다. polycurve를 연결하면 각 리스트가 X 값으로 정의되어 수직선의 행이 표시되는 것을 볼 수 있습니다.
지금까지 리스트가 무엇인지 확인했으므로 리스트에서 수행할 수 있는 작업에 대해 설명하겠습니다. 리스트가 하나의 게임 카드 세트라고 생각해 보십시오. 세트는 리스트이며, 각 카드는 하나의 항목을 나타냅니다.
사진 출처: Christian Gidlöf
리스트에서는 어떤 조회를 만들 수 있을까요? 이러한 조회에서는 기존 특성을 확인합니다.
한 세트에 들어 있는 카드의 수는? 52.
짝을 이루는 패의 수는? 4.
재료? 종이.
길이는? 3.5" 또는 89mm.
폭은? 2.5" 또는 64mm.
리스트에서 수행할 수 있는 작업은 무엇일까요? 작업을 수행하면 해당 작업을 기준으로 리스트가 변경됩니다.
세트를 섞을 수 있습니다.
값별로 세트를 정렬할 수 있습니다.
짝을 이루는 패별로 세트를 정렬할 수 있습니다.
세트를 나눌 수 있습니다.
각 사람에게 카드를 나눠주기 위해 세트를 나눌 수 있습니다.
세트에서 특정 카드를 선택할 수 있습니다.
위에 나열된 모든 작업에는 일반 데이터 리스트로 작업할 수 있도록 비슷한 Dynamo 노드가 있습니다. 아래 단원에는 리스트에서 수행할 수 있는 기본적인 작업 중 일부가 나와 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
아래 이미지는 두 원 사이에 선을 그려 기본 리스트 작업을 표현하는 기준 그래프입니다. 리스트 내에서 데이터를 관리하는 방법을 살펴보고 아래의 리스트 작업을 통해 시각적 결과를 표시해 보겠습니다.
값이
500;
인 Code Block으로 시작합니다.Point.ByCoordinates 노드의 x 입력에 연결합니다.
이전 단계의 노드를 Plane.ByOriginNormal 노드의 원점 입력에 연결합니다.
Circle.ByPlaneRadius 노드를 사용하여 이전 단계의 노드를 평면 입력에 연결합니다.
Code Block을 사용하여 radius에 대해 값
50;
을 지정합니다. 다음은 작성할 첫 번째 원입니다.Geometry.Translate 노드를 사용하여 Z 방향으로 최대 100개 단위만큼 원을 이동합니다.
Code Block 노드에서 코드 줄
0..1..#10;
을 사용하여 0과 1 사이의 10개 숫자 범위를 정의합니다.이전 단계의 code block을 두 Curve.PointAtParameter 노드의 param 입력에 연결합니다. Circle.ByPlaneRadius를 최상위 노드의 곡선 입력에 연결하고 Geometry.Translate를 그 아래 노드의 곡선 입력에 연결합니다.
Line.ByStartPointEndPoint를 사용하여 두 Curve.PointAtParameter 노드를 연결합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
List.Count 노드는 간단합니다. 리스트의 값 개수를 계산하고 해당 수를 반환합니다. 이 노드는 리스트의 리스트로 작업할 경우 미묘한 차이가 있으며, 이 내용은 다음 섹션에서 살펴보겠습니다.
**List.Count ****** 노드에서는 Line.ByStartPointEndPoint 노드의 줄 수를 반환합니다. 이 경우 해당 값은 원래 Code Block 노드에서 작성된 점 수와 일치하는 10입니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
List.GetItemAtIndex는 기본적으로 리스트의 항목을 조회하는 기본적인 방법입니다.
먼저 Line.ByStartPointEndPoint 노드를 마우스 오른쪽 버튼으로 클릭하여 해당 미리보기를 끕니다.
List.GetItemAtIndex 노드를 사용하여 색인 "0" 또는 줄 리스트의 첫 번째 항목을 선택합니다.
슬라이더 값을 0에서 9 사이로 변경하여 List.GetItemAtIndex를 통해 다른 항목을 선택합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
List.Reverse 는 리스트의 모든 항목 순서를 반대로 합니다.
반전된 줄 리스트를 올바르게 시각화하려면 Code Block을
0..1..#50;
으로 변경하여 더 많은 줄을 작성합니다.Line.ByStartPointEndPoint 노드를 복제하고 Curve.PointAtParameter 및 두 번째 Line.ByStartPointEndPoint 사이에 List.Reverse 노드를 삽입합니다.
Watch3D 노드를 사용하여 두 가지 다른 결과를 미리 봅니다. 첫 번째 항목에서는 반전된 리스트가 없는 결과를 보여 줍니다. 줄은 인접한 점에 수직으로 연결됩니다. 그러나 반전된 리스트에서는 모든 점을 다른 리스트에 반대 순서로 연결합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
List.ShiftIndices는 틀기 또는 나선형 패턴이나 기타 유사한 데이터 조작을 작성하는 데 유용한 도구입니다. 이 노드에서는 리스트의 항목을 지정된 색인만큼 이동합니다.
반전 리스트와 동일한 프로세스에서 Curve.PointAtParameter 및 Line.ByStartPointEndPoint에 List.ShiftIndices를 삽입합니다.
Code Block을 사용하여 리스트를 1개 색인만큼 이동하기 위해 값 "1"을 지정했습니다.
변경된 정도는 미세하지만 다른 점 세트에 연결할 때 하단 Watch3D 노드의 모든 줄이 1개 색인만큼 이동되었습니다.
예를 들어 Code Block을 더 큰 값인 "30" 으로 변경하면 대각선이 크게 달라진다는 것을 알 수 있습니다. 이 경우 이동은 카메라의 홍채처럼 작동하여 원래의 원통형 형식에서 틀기가 작성됩니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
List.FilterByBooleanMask는 부울 리스트나 "true" 또는 "false" 값을 기준으로 특정 항목을 제거합니다.
"true" 또는 "false" 값 리스트를 작성하려면 좀 더 많은 작업이 필요합니다.
Code Block을 사용하여
0..List.Count(list);
구문으로 표현식을 정의합니다. Curve.PointAtParameter 노드를 list 입력에 연결합니다. code block록 장에서 이 설정에 대해 좀 더 자세히 설명하겠지만, 이 경우에는 코드 줄에서 Curve.PointAtParameter 노드의 각 색인을 나타내는 리스트를 제공합니다.%** (modulus)** 노드를 사용하여 code block 의 출력을 x 입력에 연결하고 4 값을 y 입력에 연결합니다. 이렇게 하면 색인 리스트를 4로 나눈 나머지가 표시됩니다. Modulus는 패턴 작성에 매우 유용한 노드입니다. 모든 값은 가능한 나머지 4개(0, 1, 2, 3)로 표시됩니다.
%** (modulus)** 노드에서 0 값은 색인이 4로 나누어떨어짐을 의미합니다(0, 4, 8 등). == 노드를 사용하면 "0" 값을 기준으로 테스트하여 나누어떨어지는지 테스트할 수 있습니다.
Watch 노드에서는 true,false,false,false... 로 표시되는 true/false 패턴이 있음을 나타냅니다.
이 true/false 패턴을 사용하여 두 List.FilterByBooleanMask 노드의 마스크 입력에 연결합니다.
Curve.PointAtParameter 노드를 List.FilterByBooleanMask의 각 리스트 입력에 연결합니다.
Filter.ByBooleanMask의 출력은 "in" 및 "out" 으로 표시됩니다. "In" 은 마스크 값이 "true" 인 값을 나타내고 "out" 은 마스크 값이 "false" 인 값을 나타냅니다. Line.ByStartPointEndPoint 노드의 "in" 출력을 startPoint 및 endPoint 입력에 연결하여 필터링된 선 리스트를 작성했습니다.
Watch3D 노드에서는 점보다 선 수가 더 적은 것을 나타냅니다. true 값만 필터링하여 노드의 25%만 선택했습니다.
토끼굴 더 아래로 내려가면서 계층에 더 많은 계층을 추가해 보겠습니다. 데이터 구조는 3차원 이상의 리스트의 리스트로 더 확장될 수 있습니다. 리스트는 Dynamo의 자체 항목이므로 가능한 많은 차원이 있는 데이터를 작성할 수 있습니다.
여기에서 작업하는 것은 러시아 마트료시카에 비유할 수 있습니다. 각 리스트는 여러 항목을 포함하는 하나의 컨테이너로 간주할 수 있습니다. 각 리스트는 고유한 특성을 가지며, 고유한 객체로 간주됩니다.
러시아 마트료시카(사진 출처: Zeta) 세트는 n차원 리스트와 비슷합니다. 각 도면층은 리스트를 나타내고 각 리스트 안에는 항목이 포함되어 있습니다. Dynamo의 경우 각 컨테이너 안에는 여러 개의 컨테이너가 포함될 수 있습니다(각 리스트의 항목을 나타냄).
n차원 리스트는 시각적으로 설명하기 어렵지만, 이 장에서는 3차원 이상의 리스트를 중점적으로 다루는 몇 가지 연습을 진행해보겠습니다.
매핑은 Dynamo의 데이터 관리에서 가장 복잡한 부분이며, 특히 리스트의 복잡한 계층 작업을 수행할 때와 관련이 있습니다. 아래에 제공되는 일련의 연습을 진행하면서 데이터가 다차원이 될 때 매핑 및 조합을 사용해야 하는 경우를 살펴보겠습니다.
List.Map 및 List.Combine은 이전 섹션에서 이미 설명했습니다. 아래의 마지막 연습에서는 복잡한 데이터 구조에서 이러한 노드를 사용해 보겠습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습은 가져온 형상을 연결하는 3개의 연습 시리즈 중 첫 번째입니다. 이 연습 시리즈의 각 부분에서는 점점 더 복잡한 데이터 구조를 다룹니다.
연습 파일 폴더에 있는 .sat 파일로 시작하겠습니다. File Path 노드를 사용하여 이 파일을 선택할 수 있습니다.
Geometry.ImportFromSAT를 사용하여 형상을 Dynamo 미리보기에 두 개의 표면으로 가져옵니다.
이 연습에서는 간단한 작업을 위해 표면 중 하나로 진행합니다.
색인 1을 선택하여 위쪽 표면을 선택합니다. 이 작업은 List.GetItemAtIndex 노드를 사용하여 수행합니다.
Geometry.ImportFromSAT 미리보기에서 형상 미리보기를 끕니다.
다음 단계에서는 표면을 점 그리드로 분할합니다.
1. Code Block을 사용하여 다음 두 코드 줄을 삽입합니다.
0..1..#10;
0..1..#5;
2. Surface.PointAtParameter에서 두 Code Block 값을 u 및 v 에 연결합니다. 이 노드의 레이싱 을 "외적" 으로 변경합니다.
3. 출력에는 데이터 구조가 표시되며 Dynamo 미리보기에서도 이 구조를 볼 수 있습니다.
다음으로, 마지막 단계의 점을 사용하여 표면을 따라 10개의 곡선을 생성했습니다.
데이터 구조가 구성되는 방식을 확인하기 위해 NurbsCurve.ByPoints를 Surface.PointAtParameter의 출력에 연결합니다.
더 명확한 결과를 얻기 위해 지금은 List.GetItemAtIndex 노드의 미리보기를 끌 수 있습니다.
기본 List.Transpose를 사용하면 리스트의 리스트를 구성하는 열과 행이 반전됩니다.
List.Transpose의 출력을 NurbsCurve.ByPoints에 연결하면 이제 5개의 곡선이 표면을 가로질러 가로로 표시됩니다.
이전 단계에서 NurbsCurve.ByPoints 노드의 미리보기를 꺼서 이미지에서 동일한 결과를 얻을 수 있습니다.
좀 더 복잡한 작업을 수행해 보겠습니다. 이전 연습에서 작성한 곡선에 대해 작업을 수행하려고 한다고 가정해 보겠습니다. 이러한 곡선을 다른 표면과 연관 짓고 그 사이에서 로프트를 수행하고자 할 수도 있습니다. 이렇게 하려면 데이터 구조에 더 많은 신경을 써야 하지만 기본 논리는 동일합니다.
이전 연습의 단계로 시작하고 List.GetItemAtIndex 노드를 사용하여 가져온 형상의 상단 표면을 구분합니다.
Surface.Offset을 사용하여 표면을 10 씩 간격을 띄웁니다.
이전 연습과 같은 방법으로 다음과 같은 코드 두 줄을 사용하여 code block 을 정의합니다.
0..1..#10;
0..1..#5;
이러한 출력을 두 개의 Surface.PointAtParameter 노드에 연결하고 각 레이싱 을 "외적" 으로 설정합니다. 이러한 노드 중 하나는 원래 표면에 연결되어 있고 다른 노드는 오프셋 표면에 연결되어 있습니다.
이러한 표면의 미리보기를 끕니다.
이전 연습에서와 같이 출력을 두 개의 NurbsCurve.ByPoints 노드에 연결합니다. 결과에는 두 표면에 해당하는 곡선이 표시됩니다.
List.Create를 사용하면 두 곡선 세트를 한 리스트의 리스트로 결합할 수 있습니다.
출력에서 각 NURBS 곡선 연결 세트를 나타내는 10개 항목을 각각 포함하는 리스트가 2개 생성됩니다.
Surface.ByLoft를 수행하면 이 데이터 구조를 시각적으로 이해할 수 있습니다. 이 노드에서는 각 하위 리스트의 모든 곡선을 로프트합니다.
이전 단계에서 사용한 Surface.ByLoft 노드의 미리보기를 끕니다.
List.Transpose를 사용하여 모든 열과 행을 반전합니다. 이 노드는 10개의 곡선으로 이루어진 2개의 리스트를 2개의 곡선으로 이루어진 10개의 리스트로 전송합니다. 이제 각 NURBS 곡선이 다른 표면의 이웃 곡선과 연관됩니다.
Surface.ByLoft를 사용하여 리브 구조에 도달합니다.
다음으로, 이 결과를 얻기 위한 대체 프로세스를 살펴보겠습니다.
혼동을 피하기 위해, 시작하기 전에 이전 단계의 Surface.ByLoft 미리보기를 끕니다.
List.Transpose 대신 List.Combine 을 사용할 수 있습니다. 이는 각 하위 리스트에서 "연결자" 로 작동합니다.
이 경우에는 List.Create 를 "연결자" 로 사용하여 하위 리스트에서 각 항목의 리스트를 작성합니다.
Surface.ByLoft 노드를 사용하여 이전 단계와 동일한 표면을 표시합니다. 이 경우 행과 열을 더 쉽게 바꿀 수 있지만 데이터 구조가 훨씬 복잡해지면 List.Combine을 사용하는 것이 더 안정적입니다.
몇 단계 이전으로 되돌아가서 리브 구조의 곡선 방향을 전환하려면 NurbsCurve.ByPoints에 연결하기 전에 List.Transpose를 사용할 수 있습니다. 그러면 열과 행이 반전되어 5개의 수평 리브가 생성됩니다.
이제 한 단계 더 진행해 보겠습니다. 이 연습에서는 가져온 두 표면을 모두 사용하고 복합 데이터 계층을 작성합니다. 이번에도 동일한 기본 논리를 사용하여 동일한 작업을 완료하는 것이 작업 목표입니다.
이전 연습에서 가져온 파일로 시작합니다.
이전 연습에서와 같이 Surface.Offset 노드를 사용하여 10 만큼 간격을 띄웁니다.
출력에서 오프셋 노드를 사용하여 두 개의 표면을 생성했습니다.
이전 연습과 같은 방법으로 다음과 같은 코드 두 줄을 사용하여 Code Block을 정의합니다.
0..1..#20;
0..1..#20;
이러한 출력을 두 개의 Surface.PointAtParameter 노드에 연결하고 각 레이싱을 "외적" 으로 설정합니다. 이러한 노드 중 하나는 원래 표면에 연결되어 있고 다른 노드는 오프셋 표면에 연결되어 있습니다.
이전 연습에서와 같이 출력을 두 개의 NurbsCurve.ByPoints 노드에 연결합니다.
NurbsCurve.ByPoints의 출력을 보면 이전 연습보다 더 복잡한 두 리스트의 리스트가 생성된 것을 알 수 있습니다. 데이터는 기본 표면을 기준으로 분류되므로 데이터 구조에 다른 계층을 추가했습니다.
또한 Surface.PointAtParameter 노드가 좀 더 복잡해졌습니다. 이 경우에는 리스트의 리스트의 리스트를 얻게 됩니다.
계속 진행하기 전에 기존 표면의 미리보기를 끕니다.
List.Create 노드를 사용하여 NURBS 곡선을 하나의 데이터 구조로 병합함으로써 리스트의 리스트의 리스트를 작성합니다.
Surface.ByLoft 노드를 연결하면 각각 원래 데이터 구조에서 작성된 대로 자체 리스트에 남기 때문에 원래 표면의 버전을 얻게 됩니다.
이전 연습에서는 List.Transpose를 사용하여 리브 구조를 작성할 수 있었지만, 여기서는 이 기능이 작동하지 않습니다. 바꾸기는 2차원 리스트에서 사용해야 하는데, 현재 리스트는 3차원 리스트이므로 "열 및 행 반전" 작업이 쉽게 작동하지 않습니다. 리스트는 객체이므로 List.Transpose를 사용하면 하위 리스트가 있는 리스트가 반전되지만, 계층에서 한 리스트 아래에 있는 NURBS 곡선의 행과 열이 반전되지는 않습니다.
여기서는 List.Combine이 더 적합합니다. 보다 복잡한 데이터 구조로 이동하는 경우에는 List.Map 및 List.Combine 노드를 사용할 수 있습니다.
List.Create 를 "연결자" 로 사용하면 더 잘 작동하는 데이터 구조가 작성됩니다.
데이터 구조는 여전히 계층 구조 중 한 단계 아래에서 행과 열이 바뀌어야 합니다. 이렇게 하려면 List.Map을 사용합니다. 이 방법은 입력 리스트가 두 개 이상이 아닌 1개가 있는 경우를 제외하고, List.Combine과 유사하게 작동합니다.
List.Map에 적용할 함수는 List.Transpose로, 이를 사용하면 기본 리스트 내의 하위 리스트에 포함된 열과 행이 반전됩니다.
마지막으로 적절한 데이터 계층을 사용해 NURBS 곡선을 로프트하여 리브 구조를 얻을 수 있습니다.
다음과 같이 입력 설정이 지정된 Surface.Thicken 노드를 사용하여 형상에 깊이를 추가해 보겠습니다.
이 두 구조를 지지하는 표면을 추가하는 것이 좋으므로, 다른 Surface.ByLoft 노드를 추가하고 이전 단계의 NurbsCurve.ByPoints에 대한 첫 번째 출력을 입력으로 사용합니다.
미리보기가 복잡해지므로 각 노드를 마우스 오른쪽 버튼으로 클릭하고 '미리보기'를 선택취소하여 이러한 노드의 미리보기를 끄면 더 나은 결과를 확인할 수 있습니다.
선택한 이러한 표면을 두껍게 하면 연결이 완료됩니다.
가장 편안한 흔들의자는 아니지만 많은 데이터가 사용되었습니다.
마지막 단계로 줄무늬 멤버의 방향을 반대로 바꿉니다. 이전 연습에서 행과 열을 바꾸는 작업을 사용했으므로 여기에도 비슷한 작업을 수행합니다.
계층 구조에 계층이 1개 더 있으므로 List.Tranpose 함수와 함께 List.Map을 사용하여 NURBS 곡선의 방향을 변경해야 합니다.
디딤판 수를 늘리려는 경우 Code Block을
0..1..#20;
0..1..#30;
으로 변경할 수 있습니다.
흔들의자의 첫 번째 버전은 날렵한 모습이었으므로, 두 번째 모델은 오프로드에서 휴식을 취하기 적절한 스포츠 유틸리티 버전으로 만들었습니다.
계층에 티어를 하나 더 추가하겠습니다. 원래 예시에서 카드 데크를 가져와 여러 개의 데크가 포함된 상자를 작성하면 이제 상자에는 데크 리스트가 나타나고 각 데크에는 카드 리스트가 나타납니다. 이것은 리스트의 리스트입니다. 이 섹션의 내용을 바탕으로 유추해 보자면 아래의 이미지에는 동전 묶음 리스트가 포함되어 있고, 각 묶음에는 페니 리스트가 포함되어 있습니다.
사진 출처: Dori
리스트의 리스트에서 만들 수 있는 조회는 무엇일까요? 이러한 조회에서는 기존 특성을 확인합니다.
동전의 유형은 몇 가지입니까? 2.
각 동전 유형의 값은 얼마입니까? $0.01 및 $0.25입니다.
쿼터는 무엇으로 만들어졌습니까? 75%의 구리와 25%의 니켈로 만들어졌습니다.
페니는 무엇으로 만들어졌습니까? 97.5%의 아연과 2.5%의 구리로 만들어졌습니다.
리스트의 리스트에서 수행할 수 있는 작업은 무엇일까요? 작업을 수행하면 해당 작업을 기준으로 리스트의 리스트가 변경됩니다.
특정 쿼터 또는 페니의 스택을 선택합니다.
특정 쿼터 또는 페니를 선택합니다.
쿼터와 페니의 스택을 재정렬합니다.
스택을 한꺼번에 섞습니다.
다시 말씀드리지만, Dynamo에는 위에 나와 있는 각 작업과 유사한 노드가 있습니다. 우리는 물리적 객체가 아니라 추상 데이터로 작업하므로 데이터 계층을 위아래로 이동하는 방법을 제어하는 규칙 세트가 필요합니다.
리스트의 리스트를 다루는 경우에는 데이터가 겹쳐 있어 복잡하지만, 몇 가지 놀라운 파라메트릭 작업을 수행할 수 있습니다. 아래의 단원에서 기본 사항을 자세히 살펴보고 몇 가지 추가 작업에 대해 논의해 보겠습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 섹션에서 배울 기본 개념은 Dynamo에서는 리스트를 자체의 내부 객체로 취급한다는 점입니다. 이 하향식 계층은 객체 지향적 프로그래밍을 염두에 두고 개발되었습니다. Dynamo에서는 List.GetItemAtIndex와 같은 명령으로 하위 요소를 선택하는 대신, 데이터 구조에서 주 리스트의 색인을 선택합니다. 그리고 해당 항목은 다른 리스트가 될 수 있습니다. 다음과 같이 예시 이미지로 자세히 살펴보겠습니다.
Code Block을 사용하여 두 개의 범위(
0..2; 0..3;
)를 정의했습니다.이러한 범위는 레이싱이 "외적" 으로 설정된 Point.ByCoordinates 노드에 연결됩니다. 이렇게 하면 점 그리드가 작성되고, 또한 리스트의 리스트가 출력으로 반환됩니다.
Watch 노드에서는 각 리스트에 4개의 항목이 있는 3개의 리스트를 제공합니다.
색인이 0인 List.GetItemAtIndex를 사용하는 경우 Dynamo에서는 첫 번째 리스트와 해당 컨텐츠를 모두 선택합니다. 다른 프로그램에서는 데이터 구조에 있는 모든 리스트의 첫 번째 항목을 선택하겠지만, Dynamo에서는 데이터를 다룰 때 하향식 계층을 채택합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
Flatten을 사용하면 데이터 구조에서 데이터의 모든 티어가 제거됩니다. 이는 데이터 계층이 작업에 필요하지 않은 경우에 유용하지만, 정보가 제거되므로 위험할 수 있습니다. 아래 예에서는 데이터 리스트를 단순화한 결과를 보여줍니다.
코드 줄을 하나 삽입하여 Code Block의 범위(
-250..-150..#4;
)를 정의합니다.code block 을 Point.ByCoordinates 노드의 x 및 y 입력에 플러깅하면 레이싱이 "외적" 으로 설정되어 점의 그리드가 가져와집니다.
Watch 노드는 리스트의 리스트가 있음을 보여줍니다.
PolyCurve.ByPoints 노드는 각 리스트를 참조하고 각 polycurve를 작성합니다. Dynamo 미리보기에는 그리드의 각 행을 나타내는 4개의 polycurve가 있습니다.
polycurve 노드 앞에 flatten 을 삽입하여 모든 점에 대해 하나의 리스트를 작성했습니다. PolyCurve.ByPoints 노드는 리스트를 참조하여 하나의 곡선을 작성합니다. 모든 점은 하나의 리스트에 있으므로, 전체 점 리스트를 통과하는 하나의 지그재그 polycurve를 얻게 됩니다.
또한 격리된 데이터 티어를 단순화할 수도 있습니다. List.Flatten 노드를 사용하면 계층 상단에서 단순화할 지정된 수의 데이터 티어를 정의할 수 있습니다. 이는 워크플로우와 관련이 없을 수도 있는 복잡한 데이터 구조 문제로 고심하고 있는 경우에 정말 유용한 도구입니다. 또 다른 옵션은 List.Map에서 flatten 노드를 함수로 사용하는 것입니다. 아래에서 List.Map에 대해 자세히 알아보겠습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
파라메트릭 모델링을 사용할 경우 기존 리스트에 데이터 구조를 수정해야 하는 경우도 있습니다. 여기에 여러 노드를 사용할 수도 있으며, chop이 가장 기본적인 버전입니다. chop을 사용하면 리스트를 설정된 항목 수의 하위 리스트로 분할할 수 있습니다.
chop 명령을 사용하면 지정된 리스트 길이를 기준으로 리스트가 분할됩니다. 어떤 면에서 chop은 flatten과 반대입니다. 즉, 데이터 구조를 제거하는 것이 아니라 새로운 티어를 데이터 구조에 추가합니다. 이 도구는 아래 예처럼 형상 작업에 유용한 도구입니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
List.Map/Combine에서는 지정된 함수를 입력 리스트에 적용하지만 계층의 한 단계 아래에 적용합니다. 조합은 지정된 함수의 입력에 해당하는 여러 입력이 있을 수 있다는 점을 제외하고 맵과 동일합니다.
_참고: 이 연습은 이전 버전의 Dynamo로 작성되었습니다. _ List.Map 기능의 대부분은 List@Level _기능을 추가하여 해결되었습니다. 자세한 내용은 아래의 _ List@Level 을 참조하십시오.
간단한 소개를 위해 이전 섹션의 List.Count 노드를 살펴보겠습니다.
List.Count 노드는 리스트의 모든 항목을 계산합니다. 이를 사용하여 List.Map 의 작동 방식을 보여드리겠습니다.
Code Block에 다음 두 줄의 코드를 삽입합니다.
-50..50..#Nx; -50..50..#Ny;
이 코드를 입력하면 code block에서 Nx와 Ny에 대한 두 개의 입력을 작성합니다.
두 개의 integer sliders 를 사용하여 Nx 및 Ny 값을 Code Block에 연결하여 정의합니다.
code block의 각 줄을 Point.ByCoordinates 노드의 각 X 및 Y 입력에 연결합니다. 노드를 마우스 오른쪽 버튼으로 클릭하고 "레이싱"을 선택한 다음 "외적" 을 선택합니다. 그러면 점의 그리드가 작성됩니다. 범위는 -50에서 50 사이로 정의했으므로 기본 Dynamo 그리드에 걸쳐 있습니다.
Watch 노드에 작성된 점이 표시됩니다. 데이터 구조를 알 수 있습니다. 리스트의 리스트를 작성했습니다. 각 리스트에는 그리드 점의 행이 나타납니다.
이전 단계에서 Watch 노드의 출력에 List.Count 노드를 부착합니다.
Watch 노드를 List.Count 출력에 연결합니다.
List.Count 노드는 5 값을 제공합니다. 이는 code block에 정의된 "Nx" 변수와 동일합니다. 그 이유는 무엇일까요?
먼저, Point.ByCoordinates 노드는 리스트를 작성하기 위한 기본 입력으로 "x" 입력을 사용합니다. Nx가 5이고 Ny가 3인 경우 각각 3개의 항목이 포함된 리스트의 리스트를 5개 얻게 됩니다.
Dynamo에서는 리스트를 자체의 내부 객체로 취급하므로 List.Count 노드가 계층의 주 리스트에 적용됩니다. 결과는 값 5 또는 주 리스트의 리스트 수입니다.
List.Map 노드를 사용하여 계층에서 한 단계 내려가 이 레벨에서 "함수" 를 수행합니다.
List.Count 노드에 입력이 없습니다. 이 노드는 함수로 사용되고 있으므로 계층에서 한 단계 아래의 모든 개별 리스트에 List.Count 노드가 적용됩니다. List.Count의 빈 입력은 List.Map의 리스트 입력에 해당합니다.
이제 List.Count의 결과로 각각 값이 3인 항목 5개의 리스트가 제공됩니다. 이는 각 하위 리스트의 길이를 나타냅니다.
참고: 이 연습은 이전 버전의 Dynamo로 작성되었습니다. List.Combine 기능의 대부분은 List@Level _기능을 추가하여 해결되었습니다. 자세한 내용은 아래의 List@Level 을 참조하십시오.
이 연습에서는 List.Combine을 사용하여 별도의 객체 리스트에 함수를 적용하는 방법을 보여 줍니다.
먼저 두 점 리스트를 설정합니다.
Sequence 노드를 사용하여 각각 10단계로 증분하는 10개의 값을 생성합니다.
결과를 Point.ByCoordinates 노드의 x 입력에 연결합니다. 이렇게 하면 Dynamo에 점 리스트가 작성됩니다.
두 번째 Point.ByCoordinates 노드를 작업공간에 추가하고, 동일한 Sequence 출력을 x 입력으로 사용하되 Interger Slider를 해당 y 입력으로 사용하고, 해당 값을 31(첫 번째 점 세트와 겹치지 않는 한, 어떤 값도 사용할 수 있음)로 설정하여 두 점 세트가 서로 겹치지 않게 합니다.
다음으로 List.Combine을 사용하여 두 개의 개별 리스트에 있는 객체에 함수를 적용합니다. 이 경우 간단한 선 그리기 함수가 됩니다.
List.Combine을 작업공간에 추가하고 두 점 세트를 list0 및 list1 입력으로 연결합니다.
Line.ByStartPointEndPoint를 List.Combine에 대한 입력 함수로 사용합니다.
완료되면 두 점 세트가 Line.ByStartPointEndPoint 함수를 통해 압축/쌍으로 연결되며, Dynamo에서 10개의 선이 반환됩니다.
n-차원 리스트의 연습을 참조하여 List.Combine을 사용하는 또 다른 예제를 살펴보십시오.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
List.Map을 선호하는 경우 List@Level 기능을 통해 노드의 입력 포트에서 바로 작업할 리스트 레벨을 선택할 수 있습니다. 이 기능을 이용하면 노드의 모든 수신 입력에 적용할 수 있으며 다른 방법보다 쉽고 빠르게 리스트의 레벨에 액세스할 수 있습니다. 입력으로 사용할 리스트의 레벨만 노드에 지정하고 노드에서 나머지 작업을 수행하도록 합니다.
이 연습에서는 List@Level 기능을 사용하여 특정 레벨의 데이터를 격리합니다.
간단한 3D 점 그리드부터 시작하겠습니다.
그리드는 X, Y, Z의 범위로 구성되며, 데이터는 X 리스트, Y 리스트, Z 리스트의 3가지 티어로 구성됩니다.
이러한 티어는 서로 다른 레벨에 존재합니다. 레벨은 미리보기 버블 아래에 표시됩니다. 리스트 레벨 열은 위 리스트 데이터에 해당하므로 그 안에서 작업할 레벨을 식별하는 데 도움이 됩니다.
리스트 레벨은 가장 낮은 레벨 데이터가 항상 "L1"에 오도록 역순으로 구성됩니다. 그러면 그래프가 업스트림으로 변경되는 경우에도 계획대로 작동할지 확인할 수 있습니다.
List@Level 함수를 사용하려면 '>'을 클릭합니다. 이 메뉴 내에 두 개의 확인란이 있습니다.
레벨 사용 - List@Level 기능을 사용할 수 있습니다. 이 옵션을 클릭하면 노드를 사용할 입력 리스트 레벨을 클릭하여 선택할 수 있습니다. 이 메뉴를 사용하면 위 또는 아래를 클릭하여 여러 레벨 옵션을 빠르게 시도할 수 있습니다.
리스트 구조 유지 - 이 옵션을 사용하면 해당 입력의 레벨 구조를 유지할 수 있습니다. 경우에 따라 데이터를 고의적으로 하위 리스트로 구성했을 수 있습니다. 이 옵션을 선택하면 리스트 구성이 그대로 유지되고 정보가 손실되지 않습니다.
간단한 3D 그리드를 사용하면 리스트 레벨을 통해 전환하여 리스트 구조를 액세스하고 시각화할 수 있습니다. 각 리스트 레벨과 색인 조합은 원래 3D 세트와 다른 점 세트를 반환합니다.
DesignScript의 "@L2"에서는 레벨 2의 리스트만 선택할 수 있습니다. 색인 0이 있는 레벨 2의 리스트는 첫 번째 Y 점 세트만 포함하여 XZ 그리드만 반환합니다.
레벨 필터를 "L1"로 변경하면 첫 번째 리스트 레벨의 모든 항목을 볼 수 있습니다. 색인 0이 있는 레벨 1의 리스트는 모든 3D 점을 단순 리스트로 포함합니다.
"L3"에 대해 동일한 작업을 시도하는 경우 세 번째 리스트 레벨 점만 표시됩니다. 색인 0이 있는 레벨 3의 리스트에는 첫 번째 Z 점 세트만 포함되며 XY 그리드만 반환됩니다.
"L4"에 대해 동일한 작업을 시도하는 경우 세 번째 리스트 레벨 점만 표시됩니다. 색인 0이 있는 레벨 4의 리스트에는 첫 번째 X 점 세트만 포함되며 YZ 그리드만 반환됩니다.
이 특정 예는 List.Map에서도 작성할 수 있지만, List@Level에서는 상호작용을 크게 단순화하여 노드 데이터에 쉽게 액세스할 수 있게 합니다. 아래에서 List.Map 및 List@Level 메서드를 서로 비교하며 살펴보십시오.
두 메서드 모두 동일한 점에 대한 액세스를 제공하지만, List@Level 메서드를 사용하면 단일 노드 내의 데이터 도면층 간에 쉽게 전환할 수 있습니다.
List.Map을 사용하여 점 그리드에 액세스하려면 List.Map과 함께 List.GetItemAtIndex 노드를 사용해야 합니다. 단계를 내려가는 모든 리스트 레벨마다 추가 List.Map 노드를 사용해야 합니다. 리스트의 복잡도에 따라 적절한 레벨의 정보에 액세스하려면 그래프에 상당한 양의 List.Map 노드를 추가해야 할 수 있습니다.
이 예에서는 List.Map 노드가 있는 List.GetItemAtIndex 노드가 '@L3'이 선택된 List.GetItemAtIndex와 동일한 리스트 구조를 가진 동일한 점 세트를 반환합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
Transpose는 리스트의 리스트를 다룰 때 기본적인 함수입니다. 스프레드시트 프로그램과 마찬가지로 transpose는 데이터 구조의 열과 행을 반전합니다. 아래 기본 행렬을 사용하여 이 내용을 보여드리고, 다음 섹션에서는 Transpose를 사용하여 기하학적 관계를 작성할 수 있는 방법을 보여드리겠습니다.
이전 연습에서 List.Count 노드를 삭제하고 일부 형상으로 이동하여 데이터 구조 방식을 살펴보겠습니다.
PolyCurve.ByPoints를 Point.ByCoordinates의 Watch 노드의 출력에 연결합니다.
출력에는 5개의 polycurve가 표시되며 Dynamo 미리보기에서는 곡선을 볼 수 있습니다. Dynamo 노드에서는 점 리스트(또는 이 경우 점 리스트의 리스트)를 찾고 여기에서 단일 polycurve를 작성합니다. 기본적으로 각 리스트가 데이터 구조에서 곡선으로 변환되었습니다.
List.Transpose 노드는 모든 항목을 리스트의 리스트에 있는 모든 리스트로 바꿉니다. 이 방법은 복잡하게 들리지만 Microsoft Excel의 transpose와 동일한 논리입니다. 즉, 데이터 구조에서 열을 행으로 바꿉니다.
추상 결과 확인: transpose로 인해 리스트 구조가 각각 3개의 항목이 있는 5개의 리스트에서 각각 5개의 항목이 있는 3개의 리스트로 바뀌었습니다.
기하학적 결과 확인: PolyCurve.ByPoints를 사용하여 원래 곡선에 수직 방향으로 3개의 polycurve가 표시됩니다.
Code block 줄임에서는 "[]"을 사용하여 리스트를 정의합니다. 그러면 List.Create 노드보다 훨씬 빠르고 효율적인 방법으로 리스트를 작성할 수 있습니다. Code block에 대해서는 Code Blocks 및 DesignScript에서 자세히 설명합니다. 아래 이미지를 참조하여 여러 표현식이 포함된 리스트를 code block으로 정의할 수 있는 방법을 확인하십시오.
Code block 축약형은 "[]"를 사용하여 복잡한 데이터 구조에서 원하는 특정 항목을 빠르고 쉽게 선택할 수 있습니다. Code blocks에 대해서는 Code Block 및 DesignScript 장에서 자세히 설명합니다. 아래 이미지를 참조하여 여러 데이터 유형이 포함된 리스트를 code block으로 조회할 수 있는 방법을 확인하십시오.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습에서는 이전 연습에서 설정한 몇 가지 논리를 사용하여 표면을 편집합니다. 여기서 우리의 목표는 직관적이지만 데이터 구조 탐색 시 더욱 관련성을 높이는 것입니다. 우리는 제어점을 이동하여 표면을 분명하게 표현하려고 합니다.
위 노드의 문자열로 시작합니다. 기본 Dynamo 그리드에 걸쳐 있는 기본 표면을 작성하고 있습니다.
Code Block을 사용하여 다음 두 코드 줄을 삽입하고 Surface.PointAtParameter의 u 및 v 입력에 각각 연결합니다.
-50..50..#3;
-50..50..#5;
Surface.PointAtParameter의 레이싱을 "외적" 으로 설정해야 합니다.
Watch 노드에 각각 5개의 항목이 있는 리스트 3개의 리스트가 표시됩니다.
이 단계에서는 우리가 작성한 그리드의 중심점을 조회하려고 합니다. 이렇게 하려면 중간 리스트에서 중간 점을 선택합니다. 이해되시죠?
이것이 올바른 점인지 확인하려면 Watch 노드 항목을 클릭하여 올바른 항목을 대상으로 하는지 확인할 수도 있습니다.
Code Block을 사용하여 다음과 같이 리스트의 리스트를 조회하기 위한 기본 코드 줄을 작성하겠습니다.
points[1][2];
Geometry.Translate를 사용하여 선택한 점을 Z 방향으로 20 단위씩 위로 이동할 것입니다.
List.GetItemAtIndex 노드가 있는 점의 중간 행도 선택하겠습니다. 참고: 이전 단계와 마찬가지로,
points[1];
줄을 사용하여 Code Block으로 리스트를 조회할 수도 있습니다.
지금까지 중심점을 성공적으로 조회하여 위로 이동했습니다. 이제 이동한 이 점을 원래 데이터 구조에 다시 삽입해야 합니다.
먼저, 이전 단계에서 격리한 리스트의 항목을 대치하려고 합니다.
List.ReplaceItemAtIndex를 사용하여 "2" 의 색인으로 중간 항목을 이동된 점에 연결된 대치 항목(Geometry.Translate)으로 대치할 것입니다.
이 출력은 이동된 점을 리스트의 중간 항목으로 입력했음을 보여줍니다.
이제 리스트를 수정했으므로 이 리스트를 원본 데이터 구조(리스트의 리스트)에 다시 삽입해야 합니다.
동일한 논리 다음에 List.ReplaceItemAtIndex를 사용하여 중간 리스트를 수정된 리스트로 대치합니다.
이러한 두 노드의 색인을 정의하는 Code Block 은 1과 2이며, Code Block(points[1][2])의 원래 조회와 일치합니다.
index 1 에서 리스트를 선택하면 Dynamo 미리보기에 데이터 구조가 강조 표시됩니다. 이동된 점을 원래 데이터 구조에 병합했습니다.
이 점 세트에서 표면을 만드는 여러 가지 방법이 있습니다. 이 경우 곡선을 함께 로프트하여 표면을 작성하겠습니다.
NurbsCurve.ByPoints 노드를 작성하고 새 데이터 구조를 연결하여 세 개의 NURBS 곡선을 작성합니다.
Surface.ByLoft를 NurbsCurve.ByPoints의 출력에 연결합니다. 이제 수정된 표면이 있습니다. 형상의 원래 Z 값을 변경할 수 있습니다. 변환 후 형상 업데이트를 확인하십시오!
더하기(+) | var[]...[], var[]...[] | var[]...[] |
빼기(-) | var[]...[], var[]...[] | var[]...[] |
곱하기(*) | var[]...[], var[]...[] | var[]...[] |
나누기(/) | var[]...[], var[]...[] | var[]...[] |
If(If) | test, true, false | 결과 |
Formula(IF(x,y,z)) | x, y, z | 결과 |
Code Block((x?y:z);) | x? y, z | 결과 |
Object.IsNull | obj | 부울 |
색상은 시각적 프로그램의 출력에서 차이를 렌더링하고, 우수한 시각적 요소를 작성하는 데 유용한 데이터 유형입니다. 추상 데이터와 다양한 숫자를 사용할 경우 무엇이 어느 정도로 달라지는지 확인하기 어려운 경우가 있습니다. 이러한 경우 색상을 적용하면 매우 유용합니다.
Dynamo의 색상은 ARGB 입력을 사용하여 작성됩니다. ARGB는 알파, 빨간색, 초록색 및 파란색 채널에 해당합니다. 알파는 색상의 투명도 를 나타내고, 다른 3개의 색상은 전체 색상 스펙트럼을 생성하기 위한 기본 색상으로 사용됩니다.
아이콘 | 이름(구문) | 입력 | 출력 |
---|---|---|---|
아래 표의 색상을 사용하면 색상을 정의하는 데 사용되는 특성(알파, 빨간색, 초록색 및 파란색)이 조회됩니다. Color.Components 노드는 다른 출력으로 4개의 색상을 모두 제공하므로 색상의 특성을 조회할 때 선호됩니다.
아이콘 | 이름(구문) | 입력 | 출력 |
---|---|---|---|
아래 표의 색상은 HSB 색상 공간에 해당합니다. 색상을 색조, 채도 및 밝기로 나누면 색상을 좀 더 직관적으로 해석할 수 있습니다. 즉, '어떤 색상인가?', '색상이 얼마나 선명한가?', '색상이 얼마나 밝거나 어두운가?'와 같은 질문으로 각각 색조, 채도 및 밝기를 분석할 수 있습니다.
아이콘 | 이름(구문) | 입력 | 출력 |
---|---|---|---|
색상 범위는 #part-ii-from-logic-to-geometry 연습의 Remap Range 노드와 비슷합니다. 이 노드에서는 숫자 리스트를 다른 영역에 다시 매핑합니다. 그러나 숫자 영역으로 매핑하는 대신, 0에서 1 사이의 입력 숫자를 기준으로 색상 그라데이션 에 매핑합니다.
현재 노드는 잘 작동하지만 처음에는 모든 항목이 다 제대로 작동하지는 않을 수 있습니다. 색상 그라데이션에 익숙해지려면 대화식으로 테스트하는 것이 가장 좋습니다. 간단한 연습을 통해 숫자에 해당하는 출력 색상으로 그라데이션을 설정하는 방법을 살펴보겠습니다.
세 가지 색상 정의: Code Block 노드를 사용하여 적절한 0 및 255 조합을 연결함으로써 빨간색, 초록색 및 파란색 을 정의합니다.
리스트 작성: 세 개의 색상을 하나의 리스트로 병합합니다.
색인 정의: 리스트를 작성하여 각 색상의 그립 위치를 정의합니다(0에서 1 사이). 초록색 값이 0.75인지 확인합니다. 이 경우 색상 범위 슬라이더의 수평 그라데이션을 따라 3/4 위치에 초록색이 배치됩니다.
Code Block: 값(0에서 1 사이)을 입력하여 색상을 변환합니다.
Display.ByGeometry 노드를 사용하면 Dynamo 뷰포트의 형상에 색상을 지정할 수 있습니다. 이 노드는 여러 다른 유형의 형상을 구분하거나, 파라메트릭 개념을 보여 주거나, 시뮬레이션을 위한 해석 범례를 정의하는 데 유용합니다. 입력은 형상과 색상으로, 간단합니다. 위 이미지와 같은 그라데이션을 작성하기 위해 색상 입력이 색상 범위 노드에 연결됩니다.
Display.BySurfaceColors 노드를 사용하면 색상을 사용하여 표면 전반에서 데이터를 매핑할 수 있습니다. 이 기능을 통해 태양, 에너지, 근접성 등과 같은 불연속 해석을 통해 얻은 데이터를 시각화할 수 있게 됩니다. Dynamo의 표면에 색상을 적용하는 것은 다른 CAD 환경의 재료에 텍스처를 적용하는 것과 유사합니다. 아래 간단한 연습에서 이 도구를 사용하는 방법을 살펴보겠습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습에서는 형상과 함께 파라메트릭 방식으로 색상을 제어하는 데 중점을 둡니다. 형상은 아래에서 Code Block을 사용하여 정의하는 기본 나선입니다. 이렇게 하면 파라메트릭 함수를 쉽고 빠르게 작성할 수 있습니다. 또한 이 작업에서는 형상이 아닌 색상에 주안점을 두므로 캔버스를 복잡하게 만들지 않고 Code Block을 사용하여 나선을 효율적으로 작성합니다. 좀 더 고급 자료로 넘어가게 되면 이 code block을 더 자주 사용하게 될 것입니다.
Code Block: 위의 공식을 사용하여 두 개의 code block을 정의합니다. 이 방법은 나선을 작성하는 빠른 파라메트릭 방법입니다.
Point.ByCoordinates: code block의 세 가지 출력을 노드의 좌표에 연결합니다.
이제 나선을 작성하는 점의 배열이 표시됩니다. 다음 단계는 나선을 시각화할 수 있도록 점을 통과하는 곡선을 작성하는 것입니다.
PolyCurve.ByPoints: Point.ByCoordinates 출력을 노드의 points 입력에 연결합니다. 나선형 곡선이 생성됩니다.
Curve.PointAtParameter: PolyCurve.ByPoints 출력을 curve 입력에 연결합니다. 이 단계의 목적은 곡선을 따라 미끄러지는 파라메트릭 어트랙터 점을 작성하는 것입니다. 이 곡선은 매개변수의 점을 평가하므로 0에서 1 사이의 param 값을 입력해야 합니다.
Number Slider: 캔버스에 추가한 후 min 값을 0.0 으로 변경하고 max 값을 1.0 으로 변경한 다음, step 값을 .01 로 변경합니다. 슬라이더 출력을 Curve.PointAtParameter에 대한 param 입력에 연결합니다. 이제 슬라이더의 백분율(시작점 0, 끝점 1)로 표시되는 나선 길이를 따라 점이 표시됩니다.
참조점이 작성되었으므로 이제 참조점부터 나선을 정의하는 원래 점까지의 거리를 비교합니다. 이 거리 값에 따라 형상 및 색상이 결정됩니다.
Geometry.DistanceTo: Curve.PointAtParameter 출력을 input 에 연결합니다. Point.ByCoordinates를 형상 입력에 연결합니다.
Watch: 결과 출력에서는 각 나선형 점부터 곡선을 따라 표시되는 참조점까지의 거리 리스트를 표시합니다.
다음 단계는 나선형 점부터 참조점까지의 거리 리스트로 매개변수를 구동하는 것입니다. 이러한 거리 값을 사용하여 곡선을 따라 일련의 구 반지름을 정의합니다. 구형이 적절한 크기로 유지되도록 하려면 거리 값을 다시 매핑 해야 합니다.
Math.RemapRange: Geometry.DistanceTo 출력을 numbers 입력에 연결합니다.
Code Block: 값이 0.01 인 code block을 newMin 입력에 연결하고 값이 1 인 code block을 newMax 입력에 연결합니다.
Watch: Math.RemapRange 출력을 하나의 노드에 연결하고 Geometry.DistanceTo 출력을 다른 노드에 연결합니다. 결과를 비교합니다.
이 단계에서는 거리 리스트를 더 작은 범위로 다시 매핑했습니다. newMin 및 newMax 값은 적합하다고 여기는 대로 편집할 수 있습니다. 값이 다시 매핑되고 영역 전체에서 동일한 분포 비율 이 적용됩니다.
Sphere.ByCenterPointRadius: Math.RemapRange 출력을 radius 입력에 연결하고 원래 Point.ByCoordinates 출력을 centerPoint 입력에 연결합니다.
number slider의 값을 변경하고 구의 크기가 업데이트되는 것을 확인합니다. 이제 파라메트릭 지그가 생성되었습니다.
구의 크기는 곡선을 따라 표시되는 참조점으로 정의된 파라메트릭 배열을 보여 줍니다. 구 반지름에 동일한 개념을 사용하여 해당 색상을 지정해 보겠습니다.
Color Range: 캔버스 위에 추가합니다. value 입력 위에 마우스를 놓으면 요청된 번호가 0에서 1 사이인 것을 알 수 있습니다. 이 영역과 호환되도록 Geometry.DistanceTo 출력의 숫자를 다시 매핑해야 합니다.
Sphere.ByCenterPointRadius: 지금은 이 노드에 대한 미리보기를 사용하지 않도록 설정하겠습니다(마우스 오른쪽 버튼 클릭 > 미리보기).
Math.RemapRange: 이 프로세스는 익숙해졌을 것입니다. Geometry.DistanceTo 출력을 numbers 입력에 연결합니다.
Code Block: 이전 단계와 마찬가지로, newMin 입력에 대해 0 값을 작성하고 newMax 에 대해 1 값을 작성합니다. 이 경우 한 code block에서 두 개의 출력을 정의할 수 있습니다.
Color Range: Math.RemapRange 출력을 value 입력에 연결합니다.
Color.ByARGB: 두 개의 색상을 작성하려면 이 항목을 사용합니다. 이 프로세스가 생소할 수도 있지만 다른 소프트웨어의 RGB 색상과 동일한 것입니다. 여기서는 단순히 시각적 프로그래밍을 사용하여 이 프로세스를 수행합니다.
Code Block: 0 및 255 의 두 값을 작성합니다. 위 이미지에 따라 두 출력을 두 Color.ByARGB 입력에 연결합니다(또는 선호하는 두 가지 색상 작성).
Color Range: colors 입력에서 색상 리스트를 요청합니다. 이전 단계에서 작성한 두 가지 색상으로부터 이 리스트를 작성해야 합니다.
List.Create: 두 색상을 하나의 리스트로 병합합니다. 출력을 Color Range에 대한 colors 입력에 연결합니다.
Display.ByGeometryColor: Sphere.ByCenterPointRadius를 geometry 입력에 연결하고 Color Range 를 color 입력에 연결합니다. 이제 곡선의 영역을 따라 부드러운 그라데이션이 생성되었습니다.
정의에서 Number Slider 값을 이전과 다르게 변경하면 색상 및 크기가 업데이트됩니다. 이 경우 색상 및 반지름 크기가 직접 연계됩니다. 이제 두 매개변수 사이에 시각적 링크가 표시됩니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
먼저 Display.BySurfaceColors 노드의 입력으로 사용할 표면을 작성(또는 참조)해야 합니다. 이 예에서는 사인 및 코사인 곡선 사이에서 로프트를 시도합니다.
이 노드 그룹은 Z축을 따라 점을 작성한 다음, 사인 및 코사인 함수를 기준으로 재배치합니다. 그런 다음, 두 점 리스트를 사용하여 NURBS 곡선을 생성합니다.
Surface.ByLoft: NURBS 곡선 리스트 사이에 보간된 표면을 생성합니다.
File Path: 픽셀 데이터 다운스트림에 대해 샘플링할 이미지 파일을 선택합니다.
File.FromPath를 사용하여 파일 경로를 파일로 변환한 다음, Image.ReadFromFile에 전달하여 샘플링할 이미지를 출력합니다.
Image.Pixels: 이미지를 입력하고 이미지의 X 및 Y 치수에 따라 사용할 샘플 값을 제공합니다.
Slider: Image.Pixels의 샘플 값을 제공합니다.
Display.BySurfaceColors: 각각 X와 Y를 따라 표면에서 색상 값 배열을 매핑합니다.
해상도가 400x300인 샘플의 출력 표면 미리보기 클로즈업
사전은 키라고 하는 다른 데이터 부분과 연관된 데이터 모음을 나타냅니다. 사전은 데이터를 검색하고, 삭제하고, 모음에 삽입할 수 있는 기능을 제공합니다.
기본적으로 사전을 항목을 조회하는 매우 지능적인 방법으로 생각할 수 있습니다.
그동안 Dynamo에서 사전 기능을 사용할 수 있었지만, Dynamo 2.0에서는 이 데이터 유형을 관리하는 새로운 방법을 도입했습니다.
기본적으로 Dynamo의 노드 라이브러리에는 많은 기능이 저장되어 있습니다. 자주 사용하는 루틴이나 커뮤니티와 공유하려는 특수 그래프의 경우, 사용자 노드 및 패키지를 통해 Dynamo를 더욱 확장할 수 있습니다.
Dynamo 2.0에서는 사전에 대해 이전에 앞서 논의한 노드가 도입되어 있으며, 코드 블록에도 이에 대한 새 기능이 포함되어 있습니다.
아래와 같은 구문이나 노드의 DesignScript 기반 표현을 사용할 수 있습니다.
사전은 Dynamo의 객체 유형이므로 사전에서 다음 커밋을 수행할 수 있습니다.
이러한 종류의 상호작용을 유지하는 것은 Revit 데이터를 문자열에 연관 지을 때 특히 유용합니다. 다음으로, 몇 가지 Revit 사용 사례를 살펴보겠습니다.
Dynamo 2.0에서는 사전 데이터 유형을 리스트 데이터 유형과 분리하는 개념을 도입했습니다. 이러한 변경으로 인해 워크플로우에서 데이터를 작성하고 사용하는 방법도 크게 달라질 수 있습니다. 2.0 이전에는 사전과 리스트가 데이터 유형으로 결합되어 있었습니다. 간단히 말해, 리스트는 실제로 정수 키가 있는 사전이었습니다.
사전은 각 키가 각 모음에서 고유한 키-값 쌍 집합으로 구성된 데이터 유형입니다. 사전에는 순서가 없으므로 기본적으로 리스트의 경우처럼 색인 값 대신, 키를 사용하여 "항목을 조회"할 수 있습니다. Dynamo 2.0에서 문자열만 키가 될 수 있습니다.
리스트는 정렬된 값의 모음으로 구성된 데이터 유형입니다. Dynamo에서 리스트는 정수를 색인 값으로 사용합니다.
리스트에서 사전을 분리하면서 사전이 일급 객체가 되었고, 사전을 사용하여 색인 값을 기억하거나 엄격한 리스트 구조를 유지할 필요 없이 전체 워크플로우에서 빠르고 쉽게 값을 저장하고 조회할 수 있게 되었습니다. 사용자 테스트를 통해 일부 GetItemAtIndex
노드 대신, 사전을 활용할 때 그래프 크기가 크게 감소된 것을 확인할 수 있었습니다.
구문 이 변경되었으며, 이로 인해 코드 블록에서 사전 및 리스트를 초기화하고 사용하는 방법도 달라졌습니다.
사전은 구문 {key:value}
를 사용합니다.
리스트는 구문 [value,value,value]
를 사용합니다.
사전을 작성, 수정 및 조회할 수 있도록 _새 노드_가 라이브러리에 추가되었습니다.
v1.x 코드 블록에서 작성된 리스트는 스크립트를 로드할 때 중괄호 { }
대신 대괄호 [ ]
를 사용하는 새 리스트 구문으로 자동으로 마이그레이션됩니다. \
컴퓨터 과학에서 리스트와 같은 사전은 객체 모음을 의미합니다. 리스트는 특정 순서로 나열되지만, 사전은 정렬되지 않은 모음입니다. 순차적인 번호(색인)를 사용하지 않고 대신 키를 사용합니다.
아래 이미지는 사전의 잠재적인 사용 사례를 보여줍니다. 사전은 직접적인 상관 관계가 없을 수도 있는 두 가지 데이터 조각을 연관 짓는 데 사용되는 경우가 많습니다. 여기에서는 나중에 조회할 수 있도록 스페인어 버전 단어를 영어 버전에 연결합니다.
두 가지 데이터 요소를 연결할 사전을 작성합니다.
지정된 키를 사용하여 값을 가져옵니다.
Dynamo 2.0은 다양한 사전 노드를 제공하는데, 그러한 노드 중에는 create, action 및 query 노드가 있습니다.
1.Dictionary.ByKeysValues
는 제공된 값과 키를 사용해서 사전을 작성합니다. 항목 수는 가장 짧은 리스트 입력이 됩니다.
Dictionary.Components
는 입력 사전의 구성요소를 생성합니다. (create 노드의 역 작업입니다.)
Dictionary.RemoveKeys
는 입력 키가 제거된 새 사전 객체를 생성합니다.
Dictionary.SetValueAtKeys
는 입력 키와 값을 기준으로 새 사전을 생성하여 해당 키의 현재 값을 대치합니다.
Dictionary.ValueAtKey
는 입력 키의 값을 반환합니다.
Dictionary.Count
는 사전에 있는 키 값 쌍의 수를 알려줍니다.
Dictionary.Keys
는 현재 사전에 저장된 키를 반환합니다.
Dictionary.Values
는 현재 사전에 저장된 값을 반환합니다.
색인과 리스트로 작업하는 이전 방법 대신, 전반적으로 데이터를 사전과 연관 짓는 것이 유용한 대안이 될 수 있습니다.
Revit에서 포함된 데이터의 일부를 사용해서 항목을 조회하려고 한 적이 있습니까?
다음 예와 같이 작업을 수행할 수 있습니다.
아래 이미지에서는 Revit 모델의 모든 룸을 수집하고, 원하는 룸의 색인(룸 번호 기준)을 가져오고, 마지막으로 색인의 룸을 가져오는 작업을 수행합니다.
모델의 모든 룸을 수집합니다.
찾을 룸 번호입니다.
룸 번호를 가져오고 해당 룸 번호가 있는 색인을 찾습니다.
색인에서 룸을 가져옵니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이제 사전을 사용하여 이 아이디어를 다시 작성해 보겠습니다. 먼저 Revit 모델에서 모든 룸을 수집해야 합니다.
작업할 Revit 카테고리를 선택합니다(이 경우에는 룸 사용).
Dynamo에 모든 요소를 수집하도록 지시합니다.
사용할 데이터는 룸 번호입니다.
이제 지정된 키 및 요소로 사전을 작성합니다.
적절한 입력이 주어지면 노드 Dictionary.ByKeysValues가 사전을 작성합니다.
Keys
는 문자열이어야 하지만,values
는 다양한 객체 유형일 수 있습니다.
마지막으로, 이제 룸 번호를 사용하여 사전에서 룸을 검색할 수 있습니다.
String
은 사전에서 객체를 조회하는 데 사용하는 키입니다.Dictionary.ValueAtKey가 이제 사전에서 객체를 가져옵니다.
동일한 사전 논리를 사용하여 그룹화된 객체로 사전을 작성할 수도 있습니다. 지정된 레벨에서 모든 룸을 조회하려면 다음과 같이 위 그래프를 수정하면 됩니다.
이제 룸 번호를 키로 사용하는 대신, 매개변수 값을 사용할 수 있습니다(이 경우에는 레벨 사용).
이제 룸이 있는 레벨을 기준으로 룸을 그룹화할 수 있습니다.
이제 요소가 레벨로 그룹화되므로 공유 키(고유 키)를 사전용 키로 사용하고 룸 리스트를 요소로 사용할 수 있습니다.
마지막으로 Revit 모델의 레벨을 사용하여 사전에서 해당 레벨에 있는 룸을 조회할 수 있습니다.
Dictionary.ValueAtKey
는 레벨 이름을 가져온 후 해당 레벨에서 룸 객체를 반환합니다.
사전을 사용할 수 있는 기회는 무궁무진합니다. Revit의 BIM 데이터를 요소 자체에 연결하는 기능은 다양한 사용 사례에 제시할 수 있습니다.
Dynamo는 광범위한 시각적 프로그래밍 작업을 위해 다양한 코어 노드를 제공합니다. 경우에 따라 더 빠르거나 더 뛰어난 솔루션, 또는 쉽게 공유할 수 있는 솔루션은 바로 자체 노드를 작성하는 것입니다. 자체 노드는 다른 프로젝트에서 재사용할 수 있으므로 그래프를 더욱 명확하고 선명하게 만들고 패키지 관리자에 푸시하여 글로벌 Dynamo 커뮤니티와 공유할 수 있습니다.
몇 개의 사용자 노드를 작성했으면 다음 단계는 패키지를 통해 노드를 구성 및 게시하는 것입니다. 이렇게 하면 편리하게 노드를 저장하고 Dynamo 커뮤니티와 쉽게 공유할 수 있습니다.
사용자 노드는 개념상 컨테이너로 간주할 수 있는 "Dynamo 사용자 노드" 내에 다른 노드 및 사용자 노드를 중첩하여 생성됩니다. 이 컨테이너 노드가 그래프에서 실행되면 해당 컨테이너 노드 내의 모든 항목이 실행되어 유용한 노드 조합을 재사용하고 공유할 수 있게 됩니다.
그래프에 여러 개의 사용자 노드 사본이 있는 경우 기본 사용자 노드를 편집하여 모든 사본을 업데이트할 수 있습니다. 이렇게 하면 워크플로우나 설계에서 발생할 수 있는 변경 사항에 맞게 조정하는 방식으로 그래프를 원활하게 업데이트할 수 있습니다.
사용자 노드의 가장 좋은 기능은 작업 공유 기능입니다. "파워 유저"가 복잡한 Dynamo 그래프를 만들고 Dynamo를 처음 접하는 설계자에게 전달하는 경우 그래프를 설계 상호작용을 위한 필수 요소로 압축할 수 있습니다. 사용자 노드를 열어 내부 그래프를 편집할 수 있지만 "컨테이너"는 단순하게 유지할 수 있습니다. 이 프로세스에서 사용자 노드를 사용하면 Dynamo 사용자가 깔끔하고 직관적인 그래프를 설계할 수 있습니다.
사용자 노드 환경으로 이동하여 백분율을 계산하는 단순 노드를 만들어 보겠습니다. 사용자 노드 환경은 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에서는 사용자 노드를 작성하는 여러 가지 다른 방법을 제공합니다. 사용자 노드를 처음부터 새로 만들거나, 기존 그래프에서 만들거나, C#에서 명시적으로 만들 수 있습니다. 이 섹션에서는 기존 그래프에서 Dynamo UI의 사용자 노드를 만드는 방법을 다룹니다. 이 방법은 작업공간을 정리하고, 노드 시퀀스를 패키징하여 다른 위치에서 재사용할 수 있도록 하는 데 적합합니다.
아래 이미지에서는 UV 좌표를 사용하여 한 표면에서 다른 표면으로 점을 매핑합니다. 이 개념을 사용하여 XY 평면의 곡선을 참조하는 패널형 표면을 작성해 보겠습니다. 여기서는 패널화를 위한 쿼드 패널을 작성할 것입니다. 그러나 동일한 논리를 사용하여 UV 매핑을 통해 다양한 패널을 작성할 수 있습니다. 이렇게 하면 그래프 또는 다른 Dynamo 워크플로우에서 비슷한 프로세스를 보다 쉽게 반복할 수 있으므로 이는 사용자 노드 개발에 매우 유용한 방법입니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
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 에 기본값을 설정한 상태로, 표면 입력 없이 정의를 실행할 수도 있습니다.
원본 이미지 출처:
다음에는 이 데이터를 조회하는 데 사용할 키를 결정해야 합니다. 키에 대한 정보는 섹션에서 찾을 수 있습니다.
Dynamo에서 사용자 노드를 작성하는 방법에는 여러 가지가 있습니다. 이 장의 예에서는 Dynamo UI에서 직접 사용자 노드를 작성해 보겠습니다. 자신이 프로그래머이며 C# 또는 Zero-Touch 형식에 관심이 있는 경우 Dynamo Wiki에서 를 참조하여 더 자세히 알아볼 수 있습니다.
출력: 입력과 유사하지만, 이러한 노드는 사용자 노드에서 출력 포트를 만들고 이름을 지정합니다. 입력 및 출력 유형에 힌트를 제공하는 사용자 주석을 입력 및 출력 포트에 추가해 보십시오. 이는 에 자세히 설명되어 있습니다.
먼저 사용자 노드에 중첩할 그래프를 작성해 보겠습니다. 이 예에서는 UV 좌표를 사용하여 기준 표면에서 대상 표면으로 다각형을 매핑하는 그래프를 작성합니다. 이 UV 매핑 프로세스는 자주 사용하는 방법이므로 사용자 노드에 적합합니다. 표면 및 UV 공간에 대한 자세한 내용은 페이지를 참조하십시오. 전체 그래프는 위의 다운로드한 .zip 파일에 포함된 UVmapping_Custom-Node.dyn 입니다.
ARGB 색상(Color.ByARGB)
A,R,G,B
색상
알파(Color.Alpha)
색상
A
빨간색(Color.Red)
색상
R
초록색(Color.Green)
색상
G
파란색(Color.Blue)
색상
B
구성요소(Color.Components)
색상
A,R,G,B
색조(Color.Hue)
색상
색조
채도(Color.Saturation)
색상
채도
밝기(Color.Brightness)
색상
밝기
Dynamo는 다양한 프로그램을 지원하도록 설계된 유연한 환경이지만, 처음에는 Revit에서 사용하기 위해 개발되었습니다. 시각적 프로그램은 BIM(건물 정보 모델링)을 위한 강력한 옵션을 제공합니다. Dynamo는 Revit용으로 특별히 설계된 전체 노드 세트와 성장하는 AEC 커뮤니티의 타사 라이브러리를 제공합니다. 이 장에서는 Revit에서 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 > 설치된 패키지로 이동합니다.
DynamoUnfold 옆의 옵션 메뉴 를 선택합니다.
그런 다음 루트 디렉토리 표시를 클릭하여 이 패키지의 루트 폴더를 엽니다.
이렇게 하면 패키지의 루트 디렉토리로 이동됩니다. 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 패키지 작성자의 관점까지 고려하며 패키지를 좀 더 자세히 살펴보겠습니다.
이전 섹션에서는 사용자 노드 및 예제 파일을 사용하여 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 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: 각 윤곽에 대한 표면 패치를 생성하여 메쉬의 "슬라이스"를 작성합니다.
와플/계란 상자 효과를 위해 두 번째 슬라이스 세트를 추가합니다.
메쉬와 유사한 솔리드를 비교하면 교차 작업이 더 빠르게 계산되는 것을 알 수 있습니다. 이 연습에 설명된 것과 같은 워크플로우에는 메쉬 작업이 적합합니다.
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로 가져온 후 대상 표면에 적용할 수 있습니다.
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의 강력한 기능은 파라메트릭 수준에서 매개변수를 편집할 수 있다는 것입니다. 예를 들어 생성 알고리즘 또는 시뮬레이션 결과를 사용하여 요소 배열의 매개변수를 구동할 수 있습니다. 이렇게 하면 Revit 프로젝트에서 동일한 패밀리의 인스턴스 세트에 사용자 특성을 지정할 수 있습니다.
인스턴스 매개변수는 지붕 표면의 패널 조리개를 정의하며, 조리개 비율은 0.1에서 0.4 사이입니다.
유형 기반 매개변수는 동일한 패밀리 유형이므로 표면의 모든 요소에 적용됩니다. 예를 들어, 각 패널의 재료는 유형 기반 매개변수로 구동될 수 있습니다.
이전에 Revit 패밀리를 설정한 경우 매개변수 유형(문자열, 숫자, 치수 등)을 지정해야 합니다. Dynamo에서 매개변수를 지정할 때는 올바른 데이터 유형을 사용해야 합니다.
또한 Dynamo를 Revit 패밀리의 특성에 정의된 파라메트릭 구속조건과 함께 사용할 수 있습니다.
Revit의 매개변수를 빠르게 검토하면 유형 매개변수와 인스턴스 매개변수가 있다는 것을 알 수 있습니다. 둘 다 Dynamo에서 편집할 수 있지만 아래 연습에서는 인스턴스 매개변수를 사용하겠습니다.
버전 0.8부터 Dynamo에는 기본적으로 단위가 없습니다. 이를 통해 Dynamo에서는 추상적 시각적 프로그래밍 환경을 유지할 수 있습니다. Revit 치수와 상호 작용하는 Dynamo 노드에서는 Revit 프로젝트의 단위를 참조합니다. 예를 들어, Dynamo에서 Revit의 길이 매개변수를 설정하는 경우 Dynamo의 해당 값에는 Revit 프로젝트의 기본 단위가 적용됩니다. 아래의 연습에서는 미터를 사용합니다.
단위를 빠르게 변환하려면 "Convert Between Units" 노드를 사용합니다. 이 노드는 길이, 면적 및 체적 단위를 즉시 변환하는 데 유용한 도구입니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
아래의 연습에서는 미터를 사용합니다.
이 연습에서는 Dynamo에서 기하학적 작업을 수행하지 않고, Revit 요소를 편집하는 데 중점을 둡니다. 여기서는 Dynamo 형상을 가져오지 않고 Revit 프로젝트에서 매개변수를 편집하기만 합니다. 이 연습은 기본적인 연습이며, 고급 Revit 사용자의 경우 매스의 인스턴스 매개변수이더라도 동일한 논리를 요소 배열에 적용하여 대규모 축척에 맞게 사용자화할 수 있습니다. 이 모든 작업은 "Element.SetParameterByName" 노드에서 수행됩니다.
이 섹션의 Revit 파일 예시로 시작합니다. 이전 섹션에서 구조 요소 및 가변 트러스를 제거했습니다. 이 연습에서는 Revit의 파라메트릭 리그와 Dynamo의 조작을 집중적으로 살펴보겠습니다.
Revit의 매스에서 건물을 선택하면 특성 패널에 인스턴스 매개변수의 배열이 표시됩니다.
Dynamo에서는 대상 요소를 선택하여 매개변수를 검색할 수 있습니다.
"Select Model Element" 노드를 사용하여 건물 매스를 선택합니다.
"Element.Parameters" 노드를 사용하여 이 매스의 모든 매개변수를 조회할 수 있습니다. 여기에는 유형 및 인스턴스 매개변수가 포함됩니다.
Element. Parameters 노드를 참조하여 대상 매개변수를 찾습니다. 또는 이전 단계의 특성 패널을 보고, 편집하려는 매개변수 이름을 선택할 수 있습니다. 이 경우 건물 매스에서 대규모 형상 이동에 영향을 미치는 매개변수를 찾습니다.
Element.SetParameterByName 노드를 사용하여 Revit 요소를 변경해 보겠습니다.
C_ode Block_을 사용하여 매개변수 리스트를 정의하고 각 항목을 따옴표로 묶어 문자열을 나타냅니다. 또한 일련의 "string" 노드가 여러 입력에 연결되어 있는 List.Create 노드를 사용할 수 있지만 Code block이 더 빠르고 쉽습니다. Revit에서 문자열이 대/소문자를 구분하여 정확한 이름과 일치하는지 확인합니다.
{"BldgWidth","BldgLength","BldgHeight", "AtriumOffset", "InsideOffset","LiftUp"};
각 매개변수의 값을 지정할 수도 있습니다. 캔버스에 6개의 "integer sliders" 를 추가하고 리스트의 해당 매개변수로 이름을 바꿉니다. 또한 각 슬라이더의 값을 위 이미지로 설정합니다. 하향식 순서: 62,92,25,22,8,12
매개변수 이름과 동일한 길이의 리스트를 사용하여 다른 code block 을 정의합니다. 이 경우 code block 에 대해 입력을 작성하는 변수(따옴표 제외) 이름을 지정합니다. 각 개별 입력에 slider 를 연결합니다.
{bw,bl,bh,ao,io,lu};
Code Block을 "Element.SetParameterByName"* 값 입력에 연결합니다. 자동으로 실행을 선택하면 결과가 자동으로 표시됩니다.
*이 예시는 인스턴스 매개변수에서는 작동하지만 유형 매개변수에서는 작동하지 않습니다.
Revit에서와 마찬가지로 이러한 매개변수 중 다수는 서로 종속됩니다. 물론 형상이 끊어질 수도 있는 결합도 있습니다. 매개변수 특성의 정의된 수식에서 이 문제를 해결하거나 Dynamo에서 수학 연산을 사용하여 유사한 논리를 설정할 수 있습니다(이는 연습 범위를 확장하려는 경우 추가로 수행해야 하는 과제임).
이러한 결합을 통해 건물 매스에 멋진 새 설계가 제공됩니다. 100, 92, 100, 25, 13, 51
다음으로, 유사한 프로세스를 사용하여 정면을 편집하는 방법을 살펴보겠습니다.
그래프를 복사하여 트러스 시스템을 하우징할 정면 유리에 집중해 봅니다. 이 경우 다음 네 개의 매개변수를 분리합니다.
{"DblSkin_SouthOffset","DblSkin_MidOffset","DblSkin_NorthOffset","Facade Bend Location"};
또한 number sliders 를 작성하고 적절한 매개변수로 이름을 바꿉니다. 하향식의 처음 3개의 슬라이더는 [0,10] 도메인에 다시 매핑되어야 하지만 최종 슬라이더인 "Facade Bend Location" 은 [0,1] 도메인에 다시 매핑되어야 합니다. 이러한 하향식 값은 다음과 같은 값으로 시작해야 합니다(임의의 값임). 2.68, 2.64, 2.29, 0.5
새 Code block을 정의하고 슬라이더를 연결합니다.
{so,mo,no,fbl};
그래프의 이 부분에서 sliders 를 변경하여 정면 유리를 훨씬 더 크게 만들 수 있습니다. 9.98, 10.0, 9.71 ,0.31
Revit용 Dynamo은 그래픽 알고리즘 편집기의 데이터 및 논리 환경으로 건물 정보 모델링을 확장했습니다. 이 제품은 대단히 유연하고 강력한 Revit 데이터베이스를 제공하므로 BIM을 새로운 차원에서 활용할 수 있게 됩니다.
이 장에서는 BIM을 위한 Dynamo 워크플로우에 대해 중점적으로 설명합니다. 프로젝트로 바로 이동하는 것은 BIM용 그래픽 알고리즘 편집기에 익숙해지는 가장 좋은 방법이기 때문에 섹션은 주로 연습으로 구성되어 있습니다. 우선 프로그램을 시작하는 것부터 살펴보겠습니다.
Revit과 Dynamo가 계속해서 발전함에 따라, 현재 사용 중인 Revit 버전이 컴퓨터에 설치한 Revit용 Dynamo용 버전과 호환되지 않음을 알게 될 수도 있습니다. 아래에는 Revit과 호환되는 Revit용 Dynamo 버전을 간단히 설명되어 있습니다.
이 프로젝트는 시작은 미미했지만 개발자 팀과 열정적인 커뮤니티의 전폭적인 지원을 받으면서 오랫동안 발전해 왔습니다.
Dynamo는 원래 Revit에서 AEC 워크플로우를 간소화하기 위해 개발되었습니다. Revit은 모든 프로젝트에 대해 강력한 데이터베이스를 만들었지만, 일반적인 사용자가 인터페이스의 제약을 벗어나서 이 정보에 액세스하는 것은 어려울 수 있습니다. Revit은 타사 개발자가 사용자 도구를 작성할 수 있도록 하는 포괄적인 API(응용프로그램 프로그램 인터페이스)를 호스팅하고 있습니다. 프로그래머가 이 API를 수년간 사용해 왔지만 누구나 문자 기반 스크립트에 활용할 수 있는 것은 아닙니다. Dynamo는 접근하기 쉬운 그래픽 알고리즘 편집기를 통해 Revit 데이터를 쉽게 사용할 수 있도록 만들려고 합니다.
사용자는 핵심 Dynamo 노드를 사용자 Revit 노드와 함께 사용하여 상호 운용성, 문서, 분석 및 생성을 위해 파라메트릭 워크플로우를 널리 확장할 수 있습니다. Dynamo를 사용하면 지루한 워크플로우 작업을 자동화하는 한편 설계를 더욱 자세하게 살펴볼 수 있습니다.
Revit 프로젝트 또는 패밀리 편집기에서 애드인을 찾은 다음, Dynamo를 클릭합니다.*
*Dynamo는 열려 있는 파일에서만 실행됩니다.
Revit에서 Dynamo를 열면 "Revit"이라는 새 카테고리가 나타납니다. 이 카테고리는 Revit 워크플로우에 특히 적합한 노드를 제공하는 UI에 포괄적으로 추가되었습니다.*
*Revit 전용 노드 패밀리를 사용하면 Dynamo 그래프가 Revit용 Dynamo에서 열 때만 작동합니다. 예를 들어 Revit용 Dynamo 그래프를 Dynamo 샌드박스에서 여는 경우 Revit 노드가 누락됩니다.
Revit은 강력한 프로젝트 관리 기능을 제공하는 플랫폼이므로 Dynamo의 파라메트릭 작업은 복잡할 수 있고 이로 인해 계산 속도가 느려질 수 있습니다. Dynamo에서 노드를 계산하는 데 시간이 오래 걸리는 경우 그래프를 개발하는 동안 Revit 작업 실행을 일시 중지하기 위해 노드 "동결" 기능을 사용할 수도 있습니다.
Dynamo는 원래 AEC를 위해 만들어졌기 때문에 광범위하며 계속해서 성장하는 커뮤니티는 업계 전문가들로부터 배우고 연계할 수 있는 훌륭한 리소스가 됩니다. Dynamo의 커뮤니티는 건축가, 엔지니어, 프로그래머 및 설계자들이 열정을 다해 만들고 공유하는 공간입니다.
Dynamo는 활성 블로그도 운영하고 있습니다. 최신 게시물을 읽어 보고 최신 개발 소식을 알아보십시오!
앞서 기본 건물 매스 편집을 살펴보았지만 한 번에 많은 요소를 편집하면서 Dynamo/Revit 링크를 좀 더 자세히 살펴보려고 합니다. 데이터 구조에는 고급 리스트 작업이 필요하므로 대형 축척으로 사용자화하는 것이 훨씬 더 복잡해집니다. 그러나 실행 이면의 기본 원칙은 근본적으로 동일합니다. 일련의 가변 구성요소를 통해 해석할 수 있는 몇 가지 기회를 살펴보겠습니다.
일련의 가변 구성요소를 작성하고 해당 점 위치를 기준으로 매개변수를 편집한다고 가정합니다. 예를 들어 점은 요소의 면적과 관련된 두께 매개변수를 구동할 수 있습니다. 또는 한 해 동안의 일조 노출과 관련된 불투명도 매개변수를 구동할 수 있습니다. Dynamo를 사용하면 몇 가지 간단한 단계를 통해 매개변수에 해석을 연결할 수 있으며, 아래 연습에서 기본 버전을 살펴보겠습니다.
AdaptiveComponent.Locations 노드를 사용하여 선택한 가변 구성요소의 가변 점을 조회합니다. 이 도구를 사용하면 해석을 위해 Revit 요소의 추상화된 버전으로 작업할 수 있습니다.
가변 구성요소의 점 위치를 추출하여 해당 요소에 대해 특정 범위의 해석을 실행할 수 있습니다. 예를 들어, 4점 가변 구성요소를 사용하면 지정된 패널에 대해 평면에서의 편차를 연구할 수 있습니다.
재매핑을 사용하여 데이터 세트를 매개변수 범위에 매핑합니다. 이는 파라메트릭 모델에 사용되는 기본적인 도구이며 아래 연습에서 이러한 기본적인 내용을 보여드리겠습니다.
Dynamo를 사용하면 가변 구성요소의 점 위치를 사용하여 각 요소에 가장 잘 맞는 평면을 작성할 수 있습니다. 또한 Revit 파일에서 태양 위치를 조회하고 다른 가변 구성요소를 기준으로 태양에 대한 평면의 상대적 방향을 연구할 수 있습니다. 알고리즘 방식의 지붕 전망을 작성하여 아래 연습에서 이 작업을 설정해 보겠습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습에서는 이전 섹션에서 설명한 기술을 확장합니다. 이 경우 4점 가변 구성요소를 인스턴스화한 다음, 태양에 대한 방향을 기준으로 편집하여 Revit 요소에서 파라메트릭 표면을 정의합니다.
먼저 "Select Edge" 노드를 사용하여 두 개의 모서리를 선택합니다. 두 모서리는 아트리움의 긴 스팬입니다.
List.Create 노드를 사용하여 두 모서리를 하나의 리스트로 결합합니다.
Surface.ByLoft 로 두 모서리 사이에 표면을 작성합니다.
code block 을 사용하여 0부터 1까지 10개의 동일한 간격으로 배치된 값을 정의합니다(
0..1..#10;
).code block 을 Surface.PointAtParameter 노드의 u 및 v 입력에 연결하고 Surface.ByLoft 노드를 surface 입력에 연결합니다. 노드를 마우스 오른쪽 버튼으로 클릭하고 레이싱 을 외적 으로 변경합니다. 그러면 표면에 점 그리드가 나타납니다.
이 점 그리드는 파라메트릭 방식으로 정의된 표면에 대한 제어점 역할을 합니다. 이러한 각 점의 u 및 v 위치를 추출하여 파라메트릭 수식에 연결하고 동일한 데이터 구조를 유지해 보겠습니다. 방금 작성한 점의 매개변수 위치를 조회하여 이를 수행할 수 있습니다.
캔버스에 Surface.ParameterAtPoint 노드를 추가하고 위에 표시된 대로 입력을 연결합니다.
UV.U 노드를 사용하여 이러한 매개변수의 u 값을 조회합니다.
UV.V 노드를 사용하여 이러한 매개변수의 v 값을 조회합니다.
출력은 표면의 모든 점에 대해 해당 u 및 v 값을 표시합니다. 이제 적절한 데이터 구조에 각 값의 0~1 범위가 구성되었으므로 파라메트릭 알고리즘을 적용할 준비가 되었습니다.
캔버스에 code block 을 추가하고 코드
Math.Sin(u*180)*Math.Sin(v*180)*w;
를 입력합니다. 이는 평평한 표면에서 사인 마운드를 작성하는 파라메트릭 함수입니다.UV.U 를 u 입력에 연결하고 UV.V를 v 입력에 연결합니다.
w 입력은 모양의 진폭 을 나타내므로 number slider 를 부착합니다.
이제 알고리즘에 의해 정의된 값 리스트가 있습니다. 이 값 리스트를 사용하여 점을 +Z 방향으로 위로 이동합니다. Geometry.Translate 를 사용하여 code block을 zTranslation 에 연결하고 Surface.PointAtParameter 를 geometry 입력에 연결합니다. Dynamo 미리보기에 새 점이 표시됩니다.
마지막으로 NurbsSurface.ByPoints 노드를 사용하여 표면을 작성하고 이전 단계의 노드를 점 입력에 연결합니다. 이제 파라메트릭 표면이 생겼습니다. 슬라이더를 자유롭게 끌어 마운드가 축소 및 확장되는 것을 확인합니다.
파라메트릭 표면을 사용하여 4점 가변 구성요소를 배열하기 위해 패널화하는 방법을 정의하려고 합니다. Dynamo에는 표면 패널화를 위한 즉시 사용 가능한 기능이 없기 때문에 커뮤니티에서 유용한 Dynamo 패키지를 찾아보겠습니다.
패키지>패키지 검색... 으로 이동합니다.
"LunchBox" 를 검색하고 "LunchBox for Dynamo" 를 설치합니다. 이는 이러한 형상 작업에 매우 유용한 도구 세트입니다.
다운로드가 완료되면 LunchBox 제품군에 완전히 액세스할 수 있게 됩니다. "쿼드 그리드" 를 검색하고 "LunchBox Quad Grid By Face" 를 선택합니다. 파라메트릭 표면을 surface 입력에 연결하고 U 및 V 분할을 15 로 설정합니다. Dynamo 미리 보기에 쿼드 패널 표면이 표시되어야 합니다.
설정에 대해 궁금한 점이 있으면 Lunch Box 노드를 두 번 클릭하여 어떻게 만들어졌는지 확인할 수 있습니다.
다시 Revit으로 돌아와 여기에서 사용할 가변 구성요소를 잠시 살펴보겠습니다. 이 과정을 반드시 진행할 필요는 없지만, 이는 인스턴스화하려는 지붕 패널입니다. 이는 ETFE 시스템을 대략적으로 나타낸 4점 가변 구성요소입니다. 중심 보이드의 조리개는 "ApertureRatio" 라는 매개변수에 있습니다.
Revit에서 많은 형상을 인스턴스화하고자 하므로 Dynamo 솔버를 "수동" 으로 바꿔야 합니다.
캔버스에 Family Types 노드를 추가하고 "ROOF-PANEL-4PT" 를 선택합니다.
캔버스에 AdaptiveComponent.ByPoints 노드를 추가하고 "LunchBox Quad Grid by Face" 출력의 Panel Pts 를 points 입력에 연결합니다. Family Types 노드를 familySymbol 입력에 연결합니다.
실행 을 누릅니다. Revit은 형상이 작성되는 동안 잠깐 멈춥니다. 시간이 너무 오래 걸리는 경우 code block의 '15' 를 더 작은 숫자로 줄입니다. 그러면 지붕의 패널 수가 줄어듭니다.
참고: Dynamo에서 노드를 계산하는 데 시간이 오래 걸리는 경우 그래프를 개발하는 동안 Revit 작업 실행을 일시 중지하기 위해 노드 "고정" 기능을 사용할 수도 있습니다. 노드 동결에 대한 자세한 내용은 솔리드 장의 "동결" 섹션을 확인하십시오.
다시 Revit으로 돌아가면 지붕에 패널 배열이 표시됩니다.
확대하면 표면 품질을 더 자세히 확인할 수 있습니다.
이전 단계에서 계속 진행하면서 태양에 대한 노출을 기준으로 각 패널의 조리개를 더 많이 움직이도록 해보겠습니다. Revit으로 줌하고 패널 하나를 선택하면 특성 막대에 "조리개 비율" 이라는 매개변수가 표시됩니다. 조리개 범위가 대략 0.05~0.45 가 되도록 패밀리가 설정됩니다.
태양 경로를 켜면 Revit에서 현재 태양 위치를 볼 수 있습니다.
SunSettings.Current 노드를 사용하여 이 태양 위치를 참조할 수 있습니다.
태양 설정을 Sunsetting.SunDirection 에 연결하여 일조 벡터를 가져옵니다.
가변 구성요소를 작성하는 데 사용된 패널 점 에서 Plane.ByBestFitThroughPoints 를 사용하여 구성요소의 대략적인 평면을 만듭니다.
이 평면의 법선 을 조회합니다.
내적 을 사용하여 일조 방향을 계산합니다. 내적은 두 벡터의 평행 또는 반 평행 정도를 결정하는 수식입니다. 따라서 각 가변 구성요소의 평면 법선을 선택한 다음, 일조 벡터와 비교하여 일조 방향을 대략적으로 시뮬레이션합니다.
결과의 절댓값 을 사용합니다. 그래야 평면 법선이 반대 방향을 향하고 있는 경우 내적이 정확해집니다.
실행 을 누릅니다.
내적 을 보면 다양한 범위의 숫자가 표시됩니다. 상대 분산을 사용할 것이지만, 이러한 숫자를 편집하려는 "조리개 비율" 매개변수의 적절한 범위로 압축해야 합니다.
Math.RemapRange 는 이 작업에 유용한 도구입니다. 입력 리스트를 가져와서 해당 경계를 두 대상 값으로 다시 매핑합니다.
대상 값을 code block 에서 0.15 및 0.45 로 정의합니다.
실행 을 누릅니다.
다시 매핑된 값을 Element.SetParameterByName 노드에 연결합니다.
문자열 "조리개 비율" 을 parameterName 입력에 연결합니다.
가변 구성요소 를 element 입력에 연결합니다.
실행 을 누릅니다.
Revit으로 다시 돌아와, 멀리에서 ETFE 패널의 조리개에 일조 방향이 미치는 영향을 파악할 수 있습니다.
확대하면 ETFE 패널이 태양을 향할 때 더 많이 닫히는 것을 볼 수 있습니다. 여기서 목표는 태양 노출에 따른 과열을 줄이는 것입니다. 태양 노출을 기준으로 더 많은 빛이 들어오게 하려면 Math.RemapRange 에서 영역을 전환하기만 하면 됩니다.
문서화를 위한 편집 매개변수에서는 이전 섹션에서 학습한 내용을 따릅니다. 이 섹션에서는 요소의 기하학적 특성에 영향을 주지 않고, 문서화를 위해 Revit 파일을 준비하는 편집 매개변수를 살펴봅니다.
아래 연습에서는 평면 노드에서의 기본 편차를 사용하여 문서화를 위한 Revit 시트를 작성합니다. 파라메트릭 방식으로 정의된 지붕 구조의 각 패널은 편차 값이 다르므로, 색상을 사용하여 값 범위를 나타내고, 가변 점을 정면 컨설턴트, 엔지니어 또는 계약업체에 전달하도록 스케줄링합니다.
평면 노드와의 편차를 사용하면 점이 4개인 세트가 각 점 간에 가장 적합한 맞춤 평면에서 벗어나는 거리가 계산됩니다. 이 방법은 시공 가능성을 연구하는 빠르고 쉬운 방법입니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 섹션의 Revit 파일로 시작하거나 이전 섹션부터 계속 진행합니다. 이 파일의 경우 지붕에 ETFE 패널 배열이 있습니다. 이 연습에서는 이러한 패널을 참조합니다.
캔버스에 Family Types 노드를 추가하고 "ROOF-PANEL-4PT" 를 선택합니다.
이 노드를 All Elements of Family Type 노드에 연결하여 Revit에서 Dynamo로 모든 요소를 가져옵니다.
AdaptiveComponent.Locations 노드를 사용하여 각 요소에 대한 가변 점의 위치를 조회합니다.
Polygon.ByPoints 노드를 사용하여 이러한 4개의 점에서 다각형을 작성합니다. 이제 Revit 요소의 전체 형상을 가져오지 않고도 Dynamo에서 패널화된 시스템의 추상 버전이 제공됩니다.
Polygon.PlaneDeviation 노드를 사용하여 평면 편차를 계산합니다.
재미 삼아 이전 연습처럼 해당 평면 편차를 기준으로 각 패널의 조리개 비율을 설정해 보겠습니다.
캔버스에 Element.SetParameterByName 노드를 추가하고 가변 구성요소를 element 입력에 연결합니다. "Aperture Ratio" 를 읽는 Code Block 을 parameterName 입력에 연결합니다.
값을 매개변수 범위에 다시 매핑해야 하기 때문에 편차 결과를 값 입력에 직접 연결할 수 없습니다.
Math.RemapRange 를 사용하고 Code Block 에
0.15; 0.45;
를 입력하여 편차 값을 0.15~ 0_._45 사이의 도메인에 다시 매핑합니다.이러한 결과를 Element.SetParameterByName 의 값 입력에 연결합니다.
다시 Revit으로 돌아오면 표면의 조리개 변경을 이해할 수 있습니다.
확대하면 닫힌 패널에 표면의 코너 쪽으로 가중치가 부여되는 것을 명확히 확인할 수 있습니다. 열린 코너는 상단을 향합니다. 그 이유는 벌지는 최소 곡률을 갖지만 코너는 더 큰 편차 영역을 나타내기 때문입니다.
조리개 비율을 설정해도 지붕에 있는 패널의 편차가 명확하게 표시되지 않으므로 실제 요소의 형상도 변경합니다. 제작 실행 가능성의 관점에서만 편차를 연구한다고 가정해 보겠습니다. 문서화를 위해 편차 범위를 기준으로 패널에 색상을 지정하는 것이 도움이 될 수 있습니다. 아래에 제시된 일련의 단계(위 단계의 프로세스와 매우 유사함)를 통해 이 작업을 수행할 수 있습니다.
Element.SetParameterByName 과 해당 입력 노드를 제거하고 Element.OverrideColorInView 를 추가합니다.
캔버스에 Color Range 노드를 추가하고 Element.OverrideColorInView 의 색상 입력에 연결합니다. 그라데이션을 작성하려면 여전히 편차 값을 색상 범위에 연결해야 합니다.
value 입력 위에 커서를 놓으면 각 값에 색상을 매핑하기 위해 입력 값이 0 에서 1 사이여야 함을 알 수 있습니다. 편차 값을 이 범위로 다시 매핑해야 합니다.
Math.RemapRange 를 사용하여 평면 편차 값을 0에서 1 사이의 범위로 다시 매핑합니다. (참고: "MapTo" 노드를 사용하여 소스 도메인도 정의할 수 있습니다.)
결과를 Color Range 노드에 연결합니다.
출력은 숫자 범위가 아니라 색상 범위입니다.
수동으로 설정한 경우 실행 을 누릅니다. 이 시점부터는 계속 수동으로 설정해서 작업하는 것이 좋습니다.
다시 Revit으로 돌아가면 색상 범위를 기준으로 하는 평면 편차를 나타내는 훨씬 더 확실한 그라데이션이 표시됩니다. 하지만 색상을 사용자화하려면 어떻게 해야 할까요? 최소 편차 값은 빨간색으로 표시되는데 이는 우리가 예상했던 것과 반대인 것 같습니다. 우리는 최대 편차를 빨간색으로 표시하고 최소 편차는 좀 더 차분한 색상으로 표시하려고 합니다. Dynamo로 돌아가서 이 문제를 해결하십시오.
code block 을 사용하여 두 개의 다른 줄에
0;
및255;
의 두 숫자를 추가합니다.해당 값을 두 개의 Color.ByARGB 노드에 연결하여 빨간색과 파란색을 작성합니다.
이 두 가지 색상에서 리스트를 작성합니다.
이 리스트를 Color Range 의 colors 입력에 연결하고 사용자 색상 범위 업데이트를 확인합니다.
Revit으로 돌아가면 이제 코너의 최대 편차 영역이 더 잘 구분됩니다. 이 노드는 뷰의 색상을 재지정하기 위한 것이므로, 도면 세트에 특정 유형의 해석에 중점을 둔 특정 시트가 있는 경우에 정말 유용할 수 있습니다.
Revit에서 하나의 ETFE 패널을 선택하면 XYZ1, XYZ2, XYZ3 및 XYZ4의 4개 인스턴스 매개변수가 있는 것을 볼 수 있습니다. 이러한 매개변수는 작성된 후에 모두 비어 있습니다. 이러한 매개변수는 텍스트 기반 매개변수이며 값이 필요합니다. Dynamo를 사용하여 각 매개변수에 가변 점 위치를 작성합니다. 이렇게 하면 형상을 정면 컨설턴트 엔지니어에게 보내야 할 경우 상호 운용성이 향상됩니다.
샘플 시트에는 비어 있는 큰 일람표가 있습니다. XYZ 매개변수는 Revit 파일의 공유 매개변수이므로 일람표에 추가할 수 있습니다.
확대해 보면 XYZ 매개변수는 이미 채워져 있습니다. 처음 두 매개변수는 Revit에서 제어됩니다.
이러한 값을 작성하기 위해 복잡한 리스트 작업을 수행하겠습니다. 그래프 자체는 간단하지만, 리스트 장에 설명된 것처럼 개념은 주로 리스트 매핑에서 만들어집니다.
두 개의 노드가 있는 모든 가변 구성요소를 선택합니다.
AdaptiveComponent.Locations 를 사용하여 각 점의 위치를 추출합니다.
이러한 점을 문자열로 변환합니다. 매개변수는 텍스트 기반이므로 올바른 데이터 유형을 입력해야 합니다.
변경할 매개변수를 정의하는 4개의 문자열(XYZ1, XYZ2, XYZ3, 및 XYZ4) 리스트를 작성합니다.
이 리스트를 Element.SetParameterByName 의 parameterName 입력에 연결합니다.
Element.SetParameterByName 을 List.Combine 의 combinator 입력에 연결합니다. 가변 구성요소 를 list1 에 연결합니다. 객체의 String 을 list2 에 연결합니다.
여기서는 각 요소에 대해 4개의 값을 작성하여 복잡한 데이터 구조를 작성하게 되므로 리스트 매핑이 진행됩니다. List.Combine 노드에서는 데이터 계층에서 한 단계 아래에 작업을 정의합니다. 이것이 바로 Element.SetParameterByName 의 요소 및 값 입력이 비어 있는 이유입니다. List.Combine 은 해당 입력의 하위 리스트를 연결된 순서에 따라 Element.SetParameterByName 의 빈 입력에 연결합니다.
Revit에서 패널을 선택하면 각 매개변수에 대해 문자열 값이 표시되는 것을 볼 수 있습니다. 실제로는 점(X,Y,Z)을 작성하기 위한 보다 간단한 형식을 작성할 수 있습니다. 이 작업은 Dynamo에서 문자열 연산으로 수행할 수 있지만 여기서는 이 장의 범위를 벗어나지 않기 위해 해당 내용은 다루지 않습니다.
매개변수가 채워진 샘플 일람표의 뷰입니다.
이제 각 ETFE 패널에는 제작을 위한 각 패널의 코너를 나타내는 각 가변 점에 대해 XYZ 좌표가 작성되었습니다.
Revit은 데이터가 풍부한 환경입니다. 따라서 "포인트 앤 클릭" 이외의 다양한 선택 기능을 사용할 수 있습니다. 파라메트릭 작업을 수행하는 동안 Revit 데이터베이스를 조회하고 Revit 요소를 Dynamo 형상에 동적으로 링크할 수 있습니다.
UI의 Revit 라이브러리에서는 여러 가지 방법으로 형상을 선택할 수 있는 "Selection" 카테고리를 제공합니다.
Revit 요소를 제대로 선택하려면 Revit 요소 계층을 완전히 이해해야 합니다. 프로젝트의 모든 벽을 선택하시겠습니까? 카테고리별로 선택하십시오. 미드 센추리 모던 로비에서 모든 Eames 의자를 선택하시겠습니까? 패밀리별로 선택하십시오.
Revit 계층을 간단히 살펴보겠습니다.
생물학의 분류법인 계, 문, 강, 목, 과, 속, 종을 기억하십니까? Revit 요소도 비슷한 방식으로 분류됩니다. 기본 레벨에서 Revit 계층은 카테고리, 패밀리, 유형* 및 인스턴스로 구분할 수 있습니다. 인스턴스는 고유한 ID를 가진 개별 모델 요소이지만, 카테고리는 일반 그룹(예: "벽" 또는 "바닥")을 정의합니다. Revit 데이터베이스를 이러한 방식으로 구성하면 요소 하나를 선택하고 계층의 지정된 레벨에 따라 유사한 요소를 모두 선택할 수 있습니다.
*Revit의 유형은 프로그래밍의 유형과 다르게 정의됩니다. Revit에서 유형은 "데이터 유형"이 아닌 계층의 분기를 참조합니다.
아래의 3개 이미지에는 Dynamo의 Revit 요소 선택에 대한 기본 카테고리를 분석한 내용이 나와 있습니다. 이러한 도구는 함께 사용할 수 있는 유용한 도구로, 다음 연습에서 이러한 도구 중 일부를 살펴보겠습니다.
포인트 앤 클릭 은 Revit 요소를 직접 선택하는 가장 쉬운 방법입니다. 전체 모델 요소 또는 해당 위상의 일부(예: 면 또는 모서리)를 선택할 수 있습니다. 이렇게 하면 해당 Revit 객체에 동적으로 연결된 상태로 유지되므로 Revit 파일이 해당 위치 또는 매개변수를 업데이트하면 참조된 Dynamo 요소가 그래프에서 업데이트됩니다.
드롭다운 메뉴 에서는 Revit 프로젝트에서 액세스할 수 있는 모든 요소 리스트를 작성합니다. 이 메뉴를 사용하여 뷰에서 반드시 보이지 않을 수 있는 Revit 요소를 참조할 수 있습니다. 이 도구는 Revit 프로젝트 또는 패밀리 편집기에서 기존 요소를 조회하거나 새 요소를 작성하는 데 유용합니다.
![](../.gitbook/assets/selecting _database_navigation_with_dynamo_nodes_02.png)
또한 Revit 계층 에서 특정 계층별로 Revit 요소를 선택할 수도 있습니다. 이 옵션은 문서화 또는 생성 인스턴스화 및 사용자화 준비를 위해 대규모 데이터 배열을 사용자화하기 위한 강력한 옵션입니다.
위의 세 가지 이미지를 염두에 두고, 이 장의 나머지 섹션에서 작성할 파라메트릭 응용프로그램을 준비하기 위해 기본 Revit 프로젝트에서 요소를 선택하는 연습을 살펴보겠습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 Revit 파일 예에는 간단한 건물의 세 가지 요소 유형이 있습니다. 이를 Revit 계층의 컨텍스트에서 Revit 요소를 선택하는 예로 사용하겠습니다.
건물 매스
보(구조 프레임)
트러스(가변 구성요소)
현재 Revit 프로젝트 뷰에 있는 요소로부터 어떤 결론을 도출할 수 있습니까? 해당 요소를 선택하기 위해 계층 구조에서 얼마나 아래로 이동해야 합니까? 물론 대규모 프로젝트에서 작업하게 되면 이 과정이 훨씬 복잡해질 것입니다. 사용 가능한 여러 가지 옵션이 있습니다. 즉, 카테고리, 레벨, 패밀리, 인스턴스 등을 기준으로 요소를 선택할 수 있습니다.
기본 설정으로 작업하고 있으므로 카테고리 드롭다운 노드에서 "Mass" 를 선택하여 건물 매스를 선택해 보겠습니다. 이 옵션은 Revit > 선택 탭에서 찾을 수 있습니다.
매스 카테고리의 출력은 단순히 카테고리 자체입니다. 요소를 선택해야 합니다. 이렇게 하려면 "All Elements of Category" 노드를 사용합니다.
지금은 Dynamo에서 아무 형상도 표시되지 않습니다. Revit 요소를 선택했지만 요소를 Dynamo 형상으로 변환하지 않았습니다. 이렇게 구분하는 것은 중요합니다. 많은 요소를 선택하려고 할 경우 이로 인해 전반적인 속도가 느려지기 때문에 Dynamo에서 모든 요소를 미리 보려고 하지 않는 것이 좋습니다. Dynamo는 형상 작업을 반드시 수행할 필요 없이 Revit 프로젝트를 관리하기 위한 도구로, 이 장의 다음 섹션에서 살펴보겠습니다.
이 경우에는 간단한 형상으로 작업할 것이므로 형상을 Dynamo 미리보기로 가져오고자 합니다. 위의 감시 노드의 "BldgMass"에는 옆에 초록색 번호가 있습니다. 이는 요소의 ID를 나타내며 Dynamo 형상이 아닌 Revit 요소를 처리하고 있음을 나타냅니다. 다음 단계는 이 Revit 요소를 Dynamo의 형상으로 변환하는 것입니다.
Element.Faces 노드를 사용하여 Revit 매스의 각 면을 나타내는 표면 리스트를 가져옵니다. 이제 Dynamo 뷰포트에서 형상을 보고, 파라메트릭 작업을 위해 면을 참조하기 시작할 수 있습니다.
대체 방법은 다음과 같습니다. 이 경우 Revit 계층 ("All Elements of Category") 을 통해 선택하지 않고 Revit에서 형상을 명시적으로 선택합니다.
"Select Model Element" 노드를 사용하여 *"선택" *(또는 "변경") 버튼을 클릭합니다. Revit 뷰포트에서 원하는 요소를 선택합니다. 이 경우에는 건물 매스를 선택하겠습니다.
Element.Faces 가 아닌 Element.Geometry 를 사용하여 전체 매스를 하나의 솔리드 형상으로 선택할 수 있습니다. 이렇게 하면 해당 매스 내에 포함된 모든 형상이 선택됩니다.
Geometry.Explode 를 사용하여 표면 리스트를 다시 가져올 수 있습니다. 이러한 두 노드는 Element.Faces 와 동일하게 작동하지만, Revit 요소의 형상을 자세히 살펴보기 위한 대체 옵션을 제공합니다.
몇 가지 기본 리스트 작업을 사용하여 관심 면을 조회할 수 있습니다.
먼저, 선택한 요소를 이전 노드에서 Element.Faces 노드로 출력합니다.
다음으로, List.Count 노드에는 매스의 23개 표면으로 작업하고 있다고 표시됩니다.
이 숫자를 참조하여 integer slider의 최댓값을 "22" 로 변경합니다.
List.GetItemAtIndex 를 사용하여 _index_에 대해 리스트와 integer slider를 입력합니다. 선택한 상태에서 슬라이딩하면서 index 9 에서 중지한 후, 트러스를 호스팅하는 주 정면을 분리했습니다.
이전 단계는 다소 번거로운 작업이었습니다. "Select Face" 노드를 사용하면 이 작업을 훨씬 더 빠르게 수행할 수 있습니다. 이렇게 하면 Revit 프로젝트에서 요소 자체가 아닌 면을 분리할 수 있습니다. 전체 요소가 아닌 표면을 선택한다는 점을 제외하면 "Select Model Element" 와 동일한 상호 작용이 적용됩니다.
건물의 주 정면 벽을 분리하려 한다고 가정합니다. "Select Faces" 노드를 사용하여 이 작업을 수행할 수 있습니다. "선택" 버튼을 클릭한 다음, Revit에서 4개의 주요 정면을 선택합니다.
네 개의 벽을 선택한 후 Revit에서 "완료" 버튼을 클릭해야 합니다.
이제 면을 Dynamo에 표면으로 가져옵니다.
이제 아트리움 위의 보를 살펴보겠습니다.
"Select Model Element" 노드를 사용하여 보 중 하나를 선택합니다.
보 요소를 Element.Geometry 노드에 연결합니다. 그러면 Dynamo 뷰포트에 해당 보가 표시됩니다.
Watch3D 노드를 사용하여 형상을 확대할 수 있습니다(Watch 3D에서 보가 보이지 않는 경우 마우스 오른쪽 버튼을 클릭하고 "창에 맞게 줌"을 누름).
Revit/Dynamo 워크플로우에서 자주 묻는 질문은 바로 '요소 하나를 선택하고 유사한 요소를 모두 가져오는 방법은 무엇입니까?'입니다. 선택한 Revit 요소에 모든 계층 정보가 포함되어 있으므로 해당 패밀리 유형을 조회하고 해당 유형의 모든 요소를 선택할 수 있습니다.
보 요소를 Element.ElementType 노드에 연결합니다.
이제 Watch 노드에 출력이 Revit 요소가 아닌 패밀리 기호임이 표시됩니다.
Element.ElementType 은 간단한 조회이므로
x.ElementType;
을 사용할 때처럼 쉽게 code block에서 이 작업을 수행하고 동일한 결과를 얻을 수 있습니다.
나머지 보를 선택하려면 "All Elements of Family Type" 노드를 사용합니다.
watch 노드는 다섯 개의 Revit 요소가 선택되었음을 나타냅니다.
이러한 5가지 요소를 모두 Dynamo 형상으로 변환할 수도 있습니다.
500개의 보를 가져오려는 경우 의도한 파라메트릭 작업을 수행하는 데 모든 표면이 필요합니까? 또는 보에서 기본 정보를 추출하고 기본 형상을 이용해 생성 작업을 수행할 수 있습니까? 이러한 질문은 이 장을 둘러볼 때 유의해야 할 질문입니다. 예를 들어, 옆에 있는 트러스 시스템을 살펴보겠습니다.
동일한 노드 그래프를 사용하여 보 요소 대신 트러스 요소를 선택합니다. 이를 수행하기 전에 이전 단계에서 Element.Geometry를 삭제합니다.
이제 트러스 패밀리 유형에서 몇 가지 기본 정보를 추출할 준비가 되었습니다.
Watch 노드에 Revit에서 선택한 가변 구성요소 리스트가 있는 것을 볼 수 있습니다. 기본 정보를 추출하려고 하므로 가변 점에서 시작합니다.
"All Elements of Family Type" 노드를 "AdaptiveComponent.Location" 노드에 연결합니다. 이렇게 하면 각각에 가변 점 위치를 나타내는 세 개의 점이 있는 리스트의 목록이 제공됩니다.
"Polygon.ByPoints" 노드를 연결하면 polycurve가 반환됩니다. 이 내용은 Dynamo 뷰포트에서 확인할 수 있습니다. 이 방법을 통해 하나의 요소에 대한 형상을 시각화하고 요소의 나머지 배열에 대한 형상을 추상화했습니다(이 예에 포함된 것보다 번호가 더 클 수 있음).
팁: Dynamo에서 Revit 요소의 초록색 번호를 클릭하면 Revit 뷰포트가 해당 요소로 줌됩니다.
전체 파라메트릭 컨트롤을 사용하여 Dynamo에서 Revit 요소의 배열을 작성할 수 있습니다. Dynamo의 Revit 노드에서는 일반 형상에서 특정 카테고리 유형(예: 벽 및 바닥)으로 요소를 가져올 수 있는 기능을 제공합니다. 이 섹션에서는 가변 구성요소와 함께 파라메트릭 방식으로 유연한 요소를 가져오는 방법을 중점적으로 살펴보겠습니다.
가변 구성요소는 생성 응용프로그램에 유용한 유연한 패밀리 카테고리입니다. 인스턴스화할 때 가변 점의 기본 위치에 의해 구동되는 복잡한 형상 요소를 작성할 수 있습니다.
다음은 패밀리 편집기의 세 점 가변 구성요소 예입니다. 이렇게 하면 각 가변 점의 위치에 의해 정의된 트러스가 생성됩니다. 아래 연습에서는 이 구성요소를 사용하여 정면에 걸친 일련의 트러스를 생성하겠습니다.
가변 구성요소는 상호 운용성의 모범 사례에 대한 좋은 예입니다. 기본 가변 점을 정의하여 가변 구성요소의 배열을 작성할 수 있습니다. 그리고 이 데이터를 다른 프로그램으로 전송할 때 형상을 단순한 데이터로 줄일 수 있습니다. Excel 같은 프로그램을 사용한 가져오기 및 내보내기는 유사한 논리를 따릅니다.
정면 컨설턴트가 완전히 명확하게 표현된 형상을 통해 해석할 필요 없이 트러스 요소의 위치를 알고 싶어 한다고 가정해 보십시오. 제작을 준비할 때 컨설턴트가 가변 점의 위치를 참조하여 Inventor 같은 프로그램에서 형상을 재생성할 수 있습니다.
아래 연습에서 설정할 워크플로우를 통해 Revit 요소 작성을 위한 정의를 작성하는 동안 이 모든 데이터에 액세스할 수 있습니다. 이 프로세스를 통해 개념화, 문서화 및 제작을 원활한 워크플로우로 병합할 수 있습니다. 이렇게 하면 상호 운용성을 위한 더 지능형의 효율적인 프로세스가 작성됩니다.
파라메트릭 Dynamo 형상을 Revit으로 가져오는 또 다른 방법은 DirectShape를 사용하는 것입니다. 요약하면, DirectShape 요소 및 관련 클래스는 외부에서 작성된 형상 모양을 Revit 문서에 저장하는 기능을 지원합니다. 형상에 닫힌 솔리드나 메쉬가 포함될 수 있습니다. DirectShape는 기본적으로 "실제" Revit 요소를 작성하는 데 정보가 충분하지 않은 IFC 또는 STEP와 같은 다른 데이터 형식에서 모양을 가져오도록 되어 있습니다. IFC 및 STEP 워크플로우와 마찬가지로 DirectShape 기능은 Dynamo에서 작성된 형상을 Revit 프로젝트에 실제 요소로 가져오는 작업과 함께 사용하기에 적합합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 섹션의 예제 파일로 시작하거나 이전 세션의 Revit 파일을 계속 사용하면 동일한 Revit 매스가 표시됩니다.
이것은 파일을 열었을 때의 상태입니다.
이것은 Revit 매스에 지능형으로 링크된 Dynamo를 사용하여 작성한 트러스 시스템입니다.
우리는 "Select Model Element" 및 "Select Face" 노드를 사용했으며, 이제 형상 계층에서 한 단계 더 아래로 이동하여 "Select Edge" 를 사용해 보겠습니다. Dynamo 솔버가 "자동" 을 실행하도록 설정되어 있으면 그래프가 Revit 파일의 변경 사항에 따라 지속적으로 업데이트됩니다. 선택하는 모서리는 Revit 요소 토폴로지에 동적으로 연결됩니다. 토폴로지*가 변경되지 않는 한, 연결은 Revit과 Dynamo 사이에 링크된 상태로 유지됩니다.
유리 정면의 맨 위 곡선을 선택합니다. 이 길이는 건물의 전체 길이에 걸쳐 있습니다. 모서리를 선택하는 데 문제가 있을 경우 원하는 모서리가 강조 표시될 때까지 모서리 위에 마우스 커서를 놓고 "Tab" 키를 눌러 Revit에서 선택 항목을 선택해야 합니다.
두 "Select Edge" 노드를 사용하여 정면의 중간에 있는 돌각을 나타내는 각 모서리를 선택합니다.
Revit에서 정면 맨 아래 모서리에 대해 동일한 작업을 수행합니다.
Watch 노드에서 이제 Dynamo에 선이 있음을 나타냅니다. 그러면, 모서리 자체는 Revit 요소가 아니므로 자동으로 Dynamo 형상으로 변환됩니다. 이러한 곡선은 정면 전체에서 가변 트러스를 인스턴스화하는 데 사용할 참조입니다.
*위상을 일관되게 유지하기 위해 추가된 면이나 모서리가 없는 모델을 참조합니다. 매개변수는 모양을 변경할 수 있지만, 작성 방식은 그대로 유지됩니다.
먼저 곡선을 결합하여 하나의 리스트로 병합해야 합니다. 이러한 방식으로 곡선을 "그룹화" 하여 형상 작업을 수행할 수 있습니다.
정면 가운데에 두 개의 곡선에 대한 리스트를 작성합니다.
List.Create 구성요소를 Polycurve.ByJoinedCurves 노드에 연결하여 두 곡선을 Polycurve에 결합합니다.
정면 아래쪽에 두 개의 곡선에 대한 리스트를 작성합니다.
List.Create 구성요소를 Polycurve.ByJoinedCurves 노드에 연결하여 두 곡선을 Polycurve에 결합합니다.
마지막으로 세 개의 주 곡선(선 1개와 polycurve 2개)을 하나의 리스트에 결합합니다.
맨 위 곡선(선)을 활용하여 정면의 전체 범위를 나타내려고 합니다. 이 선을 따라 평면을 작성하여 리스트에서 함께 그룹화한 곡선 세트와 교차할 것입니다.
code block 에서
0..1..#numberOfTrusses;
구문을 사용하여 범위를 정의합니다.code block의 입력에 integer slider를 연결합니다. 추측한 바와 같이, 이를 통해 트러스의 수를 나타낼 것입니다. 슬라이더가 0에서 1 로 정의된 범위의 항목 수를 제어합니다.
code block 을 "Curve.PlaneAtParameter" 노드의 param 입력에 연결하고 맨 위 모서리를 곡선 입력에 연결합니다. 이렇게 하면 10개의 평면이 생기고 정면 전체에 균등하게 분산됩니다.
평면은 무한한 2차원 공간을 나타내는 추상적인 형상 조각입니다. 또한 이 단계에서 설정한 것처럼 등고선을 작성하고 교차할 때 적합합니다.
Geometry.Intersect 노드(레이싱 옵션을 외적으로 설정)를 사용하여 Curve.PlaneAtParameter 를 Geometry.Intersect 노드의 entity 입력에 연결합니다. 주 List.Create 노드를 geometry 입력에 연결합니다. 이제 Dynamo 뷰포트에 정의된 평면과 함께 각 곡선의 교차를 나타내는 점이 표시됩니다.
출력은 리스트의 리스트입니다. 우리가 하려고 하는 것을 위한 리스트가 너무 많습니다. 여기서 부분 단순화를 수행하려고 합니다. 리스트에서 한 단계 내려가 결과를 단순화해야 합니다. 이를 위해 Primer의 리스트 장에 설명된 대로 List.Map 작업을 사용합니다.
Geometry.Intersect 노드를 List.Map 의 리스트 입력에 연결합니다.
Flatten 노드를 List.Map 의 f(x) 입력에 연결합니다. 그러면 3개의 리스트가 제공되며 각 리스트에는 트러스 수와 동일한 개수가 포함됩니다.
이 데이터를 변경해야 합니다. 트러스를 인스턴스화하려면 패밀리에 정의된 것과 동일한 수의 가변 점을 사용해야 합니다. 이는 세 점 가변 구성요소이므로 각각 10개의 항목(numberOfTrusses)이 있는 리스트 3개 대신, 각각 3개의 항목이 있는 리스트 10개가 필요합니다. 이 방식으로 10개의 가변 구성요소를 작성할 수 있습니다.
List.Map 을 List.Transpose 노드에 연결합니다. 이제 원하는 데이터 출력이 만들어졌습니다.
데이터가 올바른지 확인하려면 캔버스에 Polygon.ByPoints 노드를 추가하고 Dynamo 미리보기에서 다시 확인합니다.
다각형을 작성한 방법과 같은 방법으로 가변 구성요소를 배열합니다.
캔버스에 AdaptiveComponent.ByPoints 노드를 추가하고 List.Transpose 노드를 점 입력에 연결합니다.
Family Types 노드를 사용하여 "AdaptiveTruss" 패밀리를 선택하고 이 패밀리를 AdaptiveComponent.ByPoints 노드의 FamilyType 입력에 연결합니다.
Revit에서 이제 정면 전체에 걸쳐 10개의 트러스가 균일하게 배치되었습니다!
그래프를 "조정"하면, 슬라이더가 변경되어 numberOfTrusses가 30으로 바뀝니다. 많은 트러스가 사실적이지는 않지만 파라메트릭 링크가 작동합니다. 확인이 끝나면 numberOfTrusses를 15로 설정합니다.
최종 테스트의 경우 Revit에서 매스를 선택하고 인스턴스 매개변수를 편집하여 건물의 형태를 변경하고 트러스가 그에 따라 바뀌는 것을 확인할 수 있습니다. 이 업데이트를 보려면 이 Dynamo 그래프가 열려 있어야 하며, 그래프가 닫히면 바로 링크가 끊어집니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
먼저 이 교육의 샘플 파일(ARCH-DirectShape-BaseFile.rvt)을 엽니다.
3D 뷰에서는 이전 교육에서 건물 매스를 확인할 수 있습니다.
아트리움의 모서리를 따라 참조 곡선이 하나 있는데 이를 Dynamo에서 참조할 곡선으로 사용하겠습니다.
아트리움의 반대쪽 모서리를 따라 또 다른 참조 곡선이 있으며, 이 곡선도 Dynamo에서 참조할 것입니다.
Dynamo에서 형상을 참조하기 위해 Revit에서 각 부재에 대해 Select Model Element 를 사용하겠습니다. Revit에서 매스를 선택하고 Element.Faces 를 사용하여 이 형상을 Dynamo로 가져옵니다. 이제 Dynamo 미리보기에 매스가 표시됩니다.
Select Model Element 및 CurveElement.Curve 를 사용하여 하나의 참조 곡선을 Dynamo로 가져옵니다.
Select Model Element 및 CurveElement.Curve 를 사용하여 다른 참조 곡선을 Dynamo로 가져옵니다.
이 구조는 대각선 이동, 캠버 및 반지름이라는 세 가지 주요 매개변수에 의해 구동됩니다.
이 그래프에 대한 매개변수의 근접 모양을 줌합니다. 이를 조정하여 다른 형상 출력을 얻을 수 있습니다.
DirectShape.ByGeometry 노드를 캔버스에 놓으면 형상, 카테고리, 재료 및 이름 등 네 가지 입력이 표시됩니다.
형상은 그래프의 형상 작성 부분에서 작성된 솔리드가 됩니다.
카테고리 입력은 드롭다운 Categories 노드를 사용하여 선택합니다. 이 경우에는 "구조 프레임"을 사용하겠습니다.
이 경우 더욱 단순하게 "기본값"으로 정의할 수 있지만 위의 노드 배열을 통해 재료 입력이 선택됩니다.
Dynamo를 실행하고 Revit으로 돌아오면 프로젝트의 지붕에 가져온 형상이 표시됩니다. 이는 일반 모델이 아니라 구조 프레임 요소입니다. Dynamo에 대한 파라메트릭 링크는 그대로 유지됩니다.
편집 매개변수의 다양한 응용 방법을 알게 되면 Dynamo를 사용하여 Revit의 많은 요소를 편집해볼 수 있습니다. 이 작업은 계산이 오래 걸리는 작업일 수 있습니다. 즉, 속도가 느릴 수 있습니다. 많은 수의 요소를 편집하는 경우 그래프를 개발하는 동안 Revit 작업 실행을 일시 중지하기 위해 노드 "동결" 기능을 사용할 수도 있습니다. 노드 동결에 대한 자세한 내용은 솔리드 장의 "" 섹션을 참조하십시오.
Revit 버전 | 첫 번째 안정적인 Dynamo 버전 | 마지막으로 지원되는 Revit용 Dynamo 버전 |
---|
섹션에서 노드 동결에 대한 자세한 내용을 확인할 수 있습니다.
Dynamo는 지속적으로 진화하는 오픈 소스 프로젝트로, 많은 개발 작업은 Revit과 관련이 있습니다. 이 프로그램을 처음 접하는 경우 토론 포럼에서 하여 시작해 보십시오. 프로그래머이며 Dynamo 개발에 참여하고 싶으면 를 확인하십시오. 또한 타사 라이브러리를 위한 유용한 리소스는 입니다. 이러한 패키지 중 다수는 AEC를 고려하여 만들어졌습니다. 이 장에서는 패널화를 위한 타사 패키지를 살펴보겠습니다.
보가 500개라면 어떨까요? 이러한 모든 요소를 Dynamo 형상으로 변환하는 작업은 시간이 오래 걸릴 수 있습니다. Dynamo에서 노드를 계산하는 데 시간이 오래 걸리는 경우 그래프를 개발하는 동안 Revit 작업 실행을 일시 중지하기 위해 노드 "동결" 기능을 사용할 수도 있습니다. 노드 동결에 대한 자세한 내용은 솔리드 장의 "" 섹션을 확인하십시오.
아래의 에서는 Dynamo에서 Revit 요소 작성을 위해 데이터를 참조하는 방법에 대해 설명합니다. 여러 개의 가변 구성요소를 생성하기 위해 가변 구성요소의 각 점을 나타내는 세 개의 점이 각 리스트에 있는 리스트의 리스트를 정의합니다. Dynamo에서 데이터 구조를 관리할 때 이 점을 염두에 두어야 합니다.
Dynamo 형상을 DirectShape로 Revit 프로젝트에 가져오는 을 진행해 보겠습니다. 이 방법을 사용하면 가져온 형상의 카테고리, 재료, 이름을 지정할 수 있으며, 그동안 Dynamo 그래프에 대한 파라메트릭 링크는 유지됩니다.
샘플 그래프에서 오른쪽으로 줌을 축소하고 초점이동하면 큰 노드 그룹이 표시됩니다. 이러한 노드 그룹은 Dynamo 미리보기에 표시된 격자 지붕 구조를 생성하는 형상 작업입니다. 이러한 노드는 Primer의 에서 설명한 대로 Node to Code 기능을 사용하여 생성됩니다.
로고/이미지
이름
도로, 철도, 토지, 공공 설비, 측량, GIS...
토목 인프라는 이 모든 것, 그리고 더 많은 것을 포함합니다! 이 섹션에는 Dynamo를 숙달하고 Dynamo for Civil 3D를 최대한 활용하는 데 도움이 되는 실용적이고 관련 있는 몇 가지 예제 그래프가 포함되어 있습니다. 각 그래프에는 그래프를 작성하는 데 사용된 논리에 대한 자세한 설명이 함께 제공되므로 그래프를 사용할 수 있을 뿐만 아니라 이해 도 할 수 있습니다.
또한 이러한 예제에는 강력한 그래프를 작성하기 위해 오랜 시간 동안 검증된 모범 사례가 구현되어 있습니다. 예제를 살펴보면서 강력하고 유연하며 유지 관리가 용이한 그래프를 작성하는 방법에 대한 더 많은 아이디어를 얻으려면 모범 사례 섹션을 숙지하는 것이 좋습니다.
Dynamo는 원래 Revit을 염두에 두고 개발되었지만, 시각적 프로그래밍 도구로서의 다재다능함은 Revit을 뛰어넘습니다. 또한 Dynamo는 Civil 3D에 통합되어 있습니다. 따라서 사용자는 토목 인프라 프로젝트를 위한 강력한 자동화 루틴을 만들 수 있습니다. 일반적인 작업부터 가장 복잡한 설계 워크플로우까지 모든 작업을 처리하는 데 매우 유용한 도구로, 궁극적으로 시간을 절약하고 설계를 최적화하며 더 나은 설계 결정을 내리는 데 도움이 됩니다. Dynamo는 Civil 3D를 위해 특별히 설계된 전체 노드 세트와 활발한 AEC 커뮤니티의 타사 라이브러리를 제공합니다.
입문서의 이 장에서는 기본 사항부터 시작하여 고급 항목에 이르기까지 Dynamo for Civil 3D에 대해 중점적으로 다룹니다.
앞서 노드는 Dynamo 그래프의 핵심 빌딩 블록이며, 라이브러리에서 논리 그룹으로 구성된다고 언급했습니다. Dynamo for Civil 3D에는 라이브러리에 정렬, 프로파일, 코리더, 블록 참조 등과 같은 AutoCAD 및 Civil 3D 객체 작업을 위한 전용 노드가 포함된 두 개의 카테고리(또는 선반)가 있습니다. 라이브러리의 나머지 부분에는 보다 일반적인 성격의 노드가 포함되어 있으며, 이러한 노드는 Dynamo의 모든 "제품"(예: Revit용 Dynamo, Dynamo Sandbox 등) 간에 일관됩니다.
코어 Dynamo 라이브러리의 노드 구성 방식에 대한 자세한 내용은 라이브러리 섹션을 참조하십시오.
AutoCAD 및 Civil 3D 객체 작업을 위한 특정 노드
범용 노드
별도로 설치할 수 있는 타사 패키지의 노드
AutoCAD 및 Civil 3D 선반 아래에 있는 노드를 사용하면 Dynamo 그래프가 Dynamo for Civil 3D에서만 작동합니다. Dynamo for Civil 3D 그래프를 다른 곳(예: Revit용 Dynamo)에서 열면 이러한 노드는 경고와 함께 플래그가 표시되고 실행되지 않습니다.
AutoCAD와 Civil 3D를 위한 별도의 선반이 두 개 있는 이유는 무엇입니까?
이 구성은 기본 AutoCAD 객체(선, 폴리선, 블록 참조 등)를 위한 노드와 Civil 3D 객체(선형, 코리더, 표면 등)를 위한 노드를 구분합니다. 기술적인 관점에서 볼 때 AutoCAD와 Civil 3D는 서로 다른 두 개의 제품이며, AutoCAD는 기본 응용프로그램이고 Civil 3D는 AutoCAD를 기반으로 하는 제품입니다.
AutoCAD 및 Civil 3D 노드로 작업하려면 각 선반 내의 객체 계층을 확실히 이해하는 것이 중요합니다. 생물학의 분류법인 계, 문, 강, 목, 과, 속, 종을 기억하십니까? AutoCAD 및 Civil 3D 객체도 유사한 방식으로 분류됩니다. 몇 가지 예를 통해 설명하겠습니다.
예로 선형을 사용하겠습니다.
선형의 이름을 변경하는 것이 목표라고 가정해 보겠습니다. 여기에서 다음으로 추가할 노드는 CivilObject.SetName 노드입니다.
처음에는 직관적이지 않은 것처럼 보일 수 있습니다. CivilObject란 무엇이며, 라이브러리에 Alignment.SetName 노드가 없는 이유는 무엇입니까? 이 질문에 대한 답은 재사용 가능성 및 단순성 과 관련이 있습니다. 생각해 보면, Civil 3D 객체의 이름을 변경하는 절차는 객체가 선형, 코리더, 프로파일이든 다른 어떤 것이든 관계없이 동일합니다. 따라서 본질적으로 모두 동일한 작업을 수행하는 반복 노드(예: Alignment.SetName, Corridor.SetName, Profile.SetName 등)를 사용하는 대신, 해당 기능을 단일 노드로 묶는 것이 좋습니다. 이것이 바로 CivilObject.SetName의 기능입니다!
이에 대해 생각해 볼 수 있는 또 다른 방법은 관계 의 관점에서 생각해 보는 것입니다. 사과와 배가 모두 과일의 종류인 것처럼 선형과 코리더는 모두 Civil 객체의 유형입니다. 사과와 배 모두 껍질을 벗길 때 하나의 껍질 벗기는 도구를 사용하는 것처럼, Civil 객체 노드는 모든 유형의 Civil 객체에 적용됩니다. 과일 종류마다 껍질 벗기는 도구가 따로 있다면 주방은 꽤 지저분해질 것입니다! 그런 의미에서 Dynamo 노드 라이브러리는 주방과 같습니다.
이제 한 단계 더 나아가 보겠습니다. 정렬의 도면층을 변경한다고 가정합니다. 사용할 노드는 Object.SetLayer 노드입니다.
CivilObject.SetLayer라는 노드가 없는 이유는 무엇입니까? 앞서 언급한 재사용 가능성 및 단순성의 원칙이 여기에도 동일하게 적용됩니다. 도면층 특성은 선, 폴리선, 문자, 블록 참조 등 그리거나 삽입할 수 있는 AutoCAD의 모든 객체에 공통적으로 적용되는 특성입니다. 선형 및 코리더와 같은 Civil 3D 객체는 동일한 카테고리에 속하므로 객체에 적용되는 모든 노드는 모든 Civil 객체에도 사용할 수 있습니다.
시간이 지나면 기본 사항을 넘어서고 Dynamo의 내부 작업을 깊이 있게 익힐 수 있습니다. 이 섹션의 페이지에서는 그래프를 한 단계 더 높은 수준으로 끌어올릴 수 있도록 Dynamo for Civil 3D의 고급 기능을 사용할 수 있는 방법을 제공합니다.
2013 |
2014 |
2015 |
2016 |
2017 |
2018 |
2019 |
2020+ | 2.1.0 - Revit 2020+에는 이제 Dynamo가 포함되어 있고 Revit처럼 업데이트를 수신합니다. | 해당 사항 없음 |
Dynamo for Civil 3D는 토목 인프라 프로젝트에 참여하는 엔지니어 및 설계자에게 시각적 프로그래밍 패러다임을 제공합니다. Dynamo는 Civil 3D 사용자를 위한 일종의 디지털 멀티 도구로 생각하면 됩니다. 어떤 작업을 수행하든 작업에 적합한 도구를 제공합니다. 직관적인 인터페이스를 통해 코드를 한 줄도 작성하지 않고도 강력하고 사용자화 가능한 루틴을 작성할 수 있습니다. 프로그래머가 아니어도 Dynamo를 사용할 수 있지만, 프로그래머의 논리로 생각 할 수 있어야 합니다. 입문서의 다른 장과 함께, 이 장은 논리 기술을 쌓아 계산 설계 사고방식으로 어떤 작업이든 처리할 수 있도록 도와줍니다.
Dynamo는 Civil 3D 2020에서 처음 도입되었으며 그 이후 계속 발전해 왔습니다. 처음에는 소프트웨어 업데이트를 통해 별도로 설치되었지만, 이제는 모든 버전의 Civil 3D에 번들로 제공됩니다. 사용 중인 Civil 3D 버전에 따라 Dynamo 인터페이스가 이 장에 표시된 예와 약간 다르게 보일 수 있습니다. 이는 Civil 3D 2023에서 인터페이스가 크게 변경되었기 때문입니다.
Dynamo 개발에 관한 최신 정보는 Dynamo 블로그를 살펴보는 것이 좋습니다. 아래 표에는 Dynamo for Civil 3D의 수명 기간 동안의 주요 이정표가 요약되어 있습니다.
이제 큰 그림에 대해 조금 더 알게 되었으니, 바로 Civil 3D에서 첫 번째 Dynamo 그래프를 작성해 보겠습니다!
이 예는 기본적인 Dynamo 기능을 보여주기 위한 간단한 예입니다. 비어 있는 새 Civil 3D 문서에서 단계별로 작업하는 것이 좋습니다.
가장 먼저 Civil 3D에서 빈 문서를 엽니다. 빈 문서에서 Civil 3D 리본의 관리 탭으로 이동하여 시각적 프로그래밍 패널을 찾습니다.
Dynamo 버튼을 클릭합니다. 그러면 별도의 창에서 Dynamo가 실행합니다.
Dynamo와 Dynamo 플레이어 간의 차이점은 무엇입니까?
Dynamo는 그래프를 작성하고 실행하는 데 사용됩니다. Dynamo 플레이어는 Dynamo에서 열지 않고도 그래프를 실행할 수 있는 간편한 방법입니다.
사용할 준비가 되면 Dynamo 플레이어 섹션으로 이동합니다.
Dynamo가 열리면 시작 화면이 표시됩니다. 새로 만들기를 클릭하여 빈 작업공간을 엽니다.
샘플은 어떻습니까?
Dynamo for Civil 3D에는 미리 작성된 몇 가지 그래프가 포함되어 있어 Dynamo를 사용하는 방법에 대한 더 많은 아이디어를 얻을 수 있습니다. 입문서의 샘플 워크플로우와 함께, 언젠가는 이 내용을 살펴볼 것을 권장합니다.
이제 빈 작업공간이 표시됩니다. Dynamo가 실제로 작동하는 모습을 살펴보겠습니다! 목표는 다음과 같습니다.
아주 간단합니다. 하지만 시작하기 전에 몇 가지 기본 사항을 검토해야 합니다.
Dynamo 그래프의 핵심 빌딩 블록을 노드라고 합니다. 노드는 작은 기계와 같아서 데이터를 입력하면 해당 데이터에 대해 몇 가지 작업을 수행한 후 결과를 출력합니다. Dynamo for Civil 3D에는 하나의 노드만으로는 할 수 없는 더 크고 더 나은 작업을 수행하는 그래프를 작성할 수 있는, 와이어로 연결 가능한 노드 라이브러리가 있습니다.
이전에 Dynamo를 사용해 본 적이 없다면 어떻게 해야 합니까?
일부 내용은 매우 생소할 수 있지만, 괜찮습니다! 다음과 같은 섹션이 도움이 될 것입니다.
그럼, 그래프를 작성해 보겠습니다. 다음은 필요한 모든 노드의 리스트입니다.
라이브러리의 검색 막대에 해당 이름을 입력하거나 캔버스에서 아무 곳이나 마우스 오른쪽 버튼으로 클릭하고 검색하면 이러한 노드를 찾을 수 있습니다.
어떤 노드를 사용해야 하는지, 그러한 노드를 어디에서 찾을 수 있는지 어떻게 알 수 있습니까?
라이브러리의 노드는 노드의 기능에 따라 논리적 카테고리로 그룹화됩니다. 더 자세한 내용을 확인하려면 노드 라이브러리 섹션을 참조하십시오.
최종 그래프의 모습은 다음과 같습니다.
지금까지 수행한 작업을 요약해 보겠습니다.
작업할 문서를 선택했습니다. 이 경우(그리고 많은 경우) Civil 3D의 활성 문서에서 작업합니다.
문자 객체를 작성해야 하는 대상 블록(이 경우에는 모델 공간)을 정의했습니다.
String 노드를 사용하여 문자를 배치할 도면층을 지정했습니다.
문자가 배치될 위치를 정의하기 위해 Point.ByCoordinates 노드를 사용하여 점을 작성했습니다.
두 개의 Number Slider 노드를 사용하여 문자 삽입점의 X 및 Y 좌표를 정의했습니다.
또 다른 String 노드를 사용하여 문자 객체의 컨텐츠를 정의했습니다.
마지막으로 문자 객체를 작성했습니다.
멋지게 작성된 새 그래프의 결과를 확인해 보겠습니다!
Civil 3D로 돌아가서 모델 탭이 선택되어 있는지 확인합니다. Dynamo에서 작성한 새 문자 객체가 표시됩니다.
문자가 표시되지 않으면 ZOOM -> EXTENTS 명령을 실행하여 오른쪽 스폿으로 줌해야 할 수 있습니다.
좋습니다! 이제 문자를 약간 업데이트해 보겠습니다.
Dynamo 그래프로 돌아가서 문자열, 삽입점 좌표 등 몇 가지 입력 값을 변경합니다. Civil 3D에서 문자가 자동으로 업데이트되는 것을 볼 수 있습니다. 또한 입력 포트 중 하나를 분리하면 문자가 제거됩니다. 모든 항목을 다시 연결하면 문자가 다시 생성됩니다.
그래프가 실행될 때마다 Dynamo가 새 문자 객체를 삽입하지 않는 이유는 무엇입니까?
기본적으로 Dynamo는 작성하는 객체를 "기억"합니다. 노드 입력 값을 변경하면 완전히 새로운 객체를 작성하는 대신 Civil 3D의 객체가 업데이트됩니다. 이 동작에 대한 자세한 내용은 객체 바인딩 섹션을 참조하십시오.
이 예시는 Dynamo for Civil 3D로 수행할 수 있는 작업의 일부에 불과합니다. 자세히 알아보려면 계속 읽어 보십시오!
Dynamo의 많은 뛰어난 사용 사례 중 하나는 코리더 모형을 따라 개별 객체를 동적으로 배치하는 것입니다. 코리더를 따라 삽입된 조립품과 독립적인 위치에 객체를 배치해야 하는 경우가 자주 있는데, 이는 수동으로 수행하기에는 매우 지루한 작업입니다. 또한 코리더의 수평 또는 수직 형상이 변경되면 상당한 양의 재작업이 필요합니다.
외부 파일에서 데이터 읽기(이 경우 Excel)
사전에서 데이터 구성
좌표계를 사용하여 위치/축척/회전 제어
블록 참조 배치
Dynamo에서 형상 시각화
이 그래프는 Civil 3D 2020 이상 버전에서 실행됩니다.
먼저 아래의 샘플 파일을 다운로드한 다음 DWG 파일과 Dynamo 그래프를 엽니다.
Excel 파일은 Dynamo 그래프와 동일한 디렉토리에 저장하는 것이 가장 좋습니다.
이 그래프의 논리에 대한 개요는 다음과 같습니다.
Excel 파일을 읽고 Dynamo로 데이터 가져오기
지정된 코리더 기준선에서 형상선 가져오기
원하는 측점에서 코리더 형상선을 따라 좌표계 생성
좌표계를 사용하여 모형 공간에 블록 참조 배치
그럼 시작하겠습니다!
이 예제 그래프에서는 Excel 파일을 사용하여 Dynamo가 등주 블록 참조를 배치하는 데 사용할 데이터를 저장하겠습니다. 테이블의 모습은 다음과 같습니다.
외부 파일(예: Excel 파일)에서 데이터를 읽을 때 Dynamo를 사용하는 것은 훌륭한 전략이며, 특히 데이터를 다른 팀 구성원과 공유해야 하는 경우 더 그렇습니다.
Dynamo로 가져온 Excel 데이터는 다음과 같습니다.
이제 데이터가 있으므로 그래프의 나머지 부분에서 사용할 수 있도록 열(코리더, 기준선, PointCode 등)별로 데이터를 분할해야 합니다. 이 작업을 수행하는 일반적인 방법은 List.GetItemAtIndex 노드를 사용하고 원하는 각 열의 색인 번호를 지정하는 것입니다. 예를 들어, 코리더 열은 색인 0에 있고, 기준선 열은 색인 1에 있습니다.
괜찮아 보이시죠? 하지만 이 접근 방식에는 잠재적인 문제가 있습니다. 나중에 Excel 파일의 열 순서가 변경되면 어떻게 됩니까? 아니면 두 열 사이에 새 열이 추가됩니까? 그러면 그래프가 제대로 작동하지 않기 때문에 업데이트해야 합니다. Excel 열 헤더를 키 로, 나머지 데이터를 값 으로 사용하여 데이터를 사전 에 넣으면 추후에도 그래프를 사용할 수 있습니다.
사전을 처음 사용하는 경우 Dynamo의 사전 섹션을 참조하십시오.
이렇게 하면 Excel에서 열의 순서를 유연하게 변경할 수 있으므로 그래프의 탄력성이 향상됩니다. 열 헤더가 동일하게 유지되는 한, 해당 키(즉, 열 헤더)를 사용하여 사전에서 데이터를 간단히 검색할 수 있으며, 이것이 우리가 다음에 수행할 작업입니다.
이제 Excel 데이터를 가져와서 사용할 준비가 되었으므로 해당 데이터를 사용하여 Civil 3D에서 코리더 모형에 대한 몇 가지 정보를 가져와 보겠습니다.
이름으로 코리더 모형을 선택합니다.
코리더 내에서 특정 기준선을 가져옵니다.
기준선 내의 형상선을 점 코드로 가져옵니다.
이제 Excel 파일에서 지정한 측점 값으로 코리더 형상선을 따라 좌표계를 생성하겠습니다. 이러한 좌표계는 등주 블록 참조의 위치, 회전 및 축척을 정의하는 데 사용됩니다.
좌표계를 처음 사용하는 경우 벡터, 평면 및 좌표계 섹션을 참조하십시오.
여기에서는 Code Block을 사용하여 좌표계가 기준선의 어느 쪽에 있는지에 따라 좌표계를 회전합니다. 여러 노드의 시퀀스를 사용하여 이를 달성할 수도 있지만, 이것은 그냥 작성하는 것이 더 쉬운 상황임을 보여주는 좋은 예입니다.
Code Block을 처음 사용하는 경우 코드 블록과 DesignScript 섹션을 참조하십시오.
거의 다 왔습니다! 블록 참조를 실제로 배치하는 데 필요한 모든 정보를 확보했습니다. 가장 먼저 해야 할 일은 Excel 파일의 BlockName 열을 사용하여 원하는 블록 정의를 가져오는 것입니다.
여기에서 마지막 단계는 블록 참조를 작성하는 것입니다.
그래프를 실행하면 코리더를 따라 모형 공간에 새 블록 참조가 표시되는 것을 볼 수 있습니다. 그래프의 실행 모드를 자동으로 설정하고 Excel 파일을 편집하면 블록 참조가 자동으로 업데이트됩니다. 아주 멋진 기능입니다.
사용자 인터페이스 섹션에서 그래프 실행 모드에 대한 자세한 내용을 확인할 수 있습니다.
다음은 Dynamo 플레이어를 사용하여 그래프를 실행하는 예입니다.
Dynamo 플레이어를 처음 사용하는 경우 Dynamo 플레이어 섹션을 참조하십시오.
Dynamo에서 코리더 형상을 시각화하여 컨텍스트를 제공하면 도움이 될 수 있습니다. 이 특정 모형에는 모형 공간에서 이미 코리더 솔리드가 추출되어 있으므로 해당 솔리드를 Dynamo로 가져오겠습니다.
하지만 한 가지 더 고려해야 할 사항이 있습니다. 솔리드는 상대적으로 "무거운" 형상 유형이므로, 이 작업을 수행하면 그래프의 속도가 느려집니다. 솔리드를 볼지 여부를 간단하게 선택 할 수 이는 방법이 있다면 좋을 것입니다. 분명한 해답은 Corridor.GetSolids 노드의 연결을 해제하는 것이지만, 이렇게 하면 모든 다운스트림 노드에 경고가 발생하여 약간 지저분해집니다. 이 상황에서는 ScopeIf 노드가 정말 유용합니다.
Object.Geometry 노드의 맨 아래에는 회색 막대가 있습니다. 즉, 노드 미리보기가 꺼져 있으므로(노드를 마우스 오른쪽 버튼으로 클릭하여 액세스 가능) GeometryColor.ByGeometryColor가 배경 미리보기에서 다른 형상과 화면표시 우선순위를 두고 "경쟁"하는 것을 피할 수 있습니다.
ScopeIf 노드를 사용하면 기본적으로 노드의 전체 분기를 선택적으로 실행할 수 있습니다. test 입력이 false이면 ScopeIf 노드에 연결된 모든 노드가 실행되지 않습니다.
Dynamo 배경 미리보기의 결과는 다음과 같습니다.
다음은 이 그래프의 기능을 확장하는 방법에 대한 몇 가지 아이디어입니다.
Excel 파일에 회전 열을 추가하고 이를 사용하여 좌표계의 회전을 구동합니다.
필요한 경우 등주가 코리더 형상선에서 벗어날 수 있도록 Excel 파일에 수평 또는 수직 간격띄우기를 추가합니다.
측점 값이 있는 Excel 파일을 사용하는 대신, 시작 측점 및 일반적인 간격을 사용하여 Dynamo에서 직접 측점 값을 생성합니다.
Civil 3D에서 COGO 점 및 점 그룹으로 작업하는 것은 많은 필드-마감 프로세스의 핵심 요소입니다. 이 예제에서는 데이터 관리와 관련하여 Dynamo가 매우 유용할 수 있는 잠재적인 사용 사례 하나를 보여드리겠습니다.
리스트 작업
List.GroupByKey 노드로 유사 객체 그룹화
Dynamo 플레이어에 사용자 출력 표시
이 그래프는 Civil 3D 2020 이상 버전에서 실행됩니다.
먼저 아래의 샘플 파일을 다운로드한 다음 DWG 파일과 Dynamo 그래프를 엽니다.
이 그래프의 논리에 대한 개요는 다음과 같습니다.
문서의 모든 COGO 점 가져오기
설명별로 COGO 점 그룹화
점 그룹 작성
Dynamo 플레이어에 요약 출력
그럼 시작하겠습니다!
첫 번째 단계는 문서의 모든 점 그룹을 가져온 다음 각 그룹 내의 모든 COGO 점을 가져오는 것입니다. 그러면 내포된 리스트 또는 "리스트의 리스트"가 생성되며, List.Flatten 노드를 사용하여 모든 것을 단일 리스트로 단순화하면 나중에 작업하기가 더 쉬워집니다.
이제 모든 COGO 점이 있으므로 해당 설명을 기준으로 점을 그룹으로 분리해야 합니다. 이것이 바로 List.GroupByKey 노드의 역할입니다. 이 노드는 기본적으로 동일한 키를 공유하는 모든 항목을 그룹화합니다.
힘든 작업은 끝났습니다! 마지막 단계는 그룹화된 COGO 점에서 새 Civil 3D 점 그룹을 작성하는 것입니다.
그래프를 실행할 때, 우리는 형상에 대한 작업을 하지 않을 것이기 때문에 Dynamo 배경 미리보기에 아무것도 표시되지 않습니다. 따라서 그래프가 제대로 실행되는지 확인할 수 있는 유일한 방법은 도구공간을 확인하거나 노드 출력 미리보기를 보는 것입니다. 그러나 Dynamo 플레이어를 사용하여 그래프를 실행하면 작성된 점 그룹에 대한 요약을 출력하여 그래프 결과에 대해 더 많은 피드백을 제공할 수 있습니다. 노드를 마우스 오른쪽 버튼으로 클릭하고 Is Output 으로 설정하기만 하면 됩니다. 이 경우 이름이 변경된 Watch 노드를 사용하여 결과를 확인합니다.
다음은 Dynamo 플레이어를 사용하여 그래프를 실행하는 예입니다.
다음은 이 그래프의 기능을 확장하는 방법에 대한 몇 가지 아이디어입니다.
초기 정보 대신 ** 전체 설명**을 기반으로 점 그룹을 수정합니다.
선택한 몇 가지 다른 사전 정의된 카테고리(예: "Ground shots", "Monuments" 등)로 점을 그룹화합니다.
특정 그룹의 점에 대한 TIN 지표면을 자동으로 작성합니다.
Dynamo for Civil 3D에는 각 노드에서 작성된 객체를 "기억"하는 매우 강력한 메커니즘이 포함되어 있습니다. 이 메커니즘을 객체 바인딩이라고 하며, 이를 통해 동일한 문서에서 실행될 때마다 Dynamo 그래프가 일관된 결과를 생성할 수 있습니다. 객체 바인딩은 많은 상황에서 사용하기에 매우 바람직하지만, Dynamo의 동작을 보다 잘 제어하고 싶은 다른 상황도 있을 수 있습니다. 이 섹션에서는 객체 바인딩의 작동 방식과 객체 바인딩을 활용하는 방법을 설명합니다.
현재 도면층의 모형 공간에 원을 작성하는 이 그래프를 살펴보겠습니다.
반지름이 변경되면 어떻게 되는지 확인하십시오.
이것이 바로 객체 바인딩이 작동하는 방식입니다. Dynamo의 기본 동작은 반지름 입력이 변경될 때마다 새 원을 작성하는 것이 아니라 원의 반지름을 수정 하는 것입니다. 이는 그래프가 실행될 때마다 Object.ByGeometry 노드가 이 특정 원을 작성한 것을 "기억"하기 때문입니다. 또한 Dynamo는 이 정보를 저장하여 다음번에 Civil 3D 문서를 열고 그래프를 실행할 때 정확히 동일한 동작을 수행합니다.
Dynamo의 기본 객체 바인딩 동작을 변경할 수 있는 예를 살펴보겠습니다. 문자를 원 가운데에 배치하는 그래프를 작성한다고 가정해 보겠습니다. 그러나 이 그래프의 의도는 반복해서 실행하고 선택한 원에 대해 매번 새로운 문자를 배치할 수 있다는 것입니다. 다음은 그래프의 모습입니다.
그러나 실제로는 다른 원을 선택하면 이렇게 됩니다.
이렇게 변경한 후에 원하는 동작을 얻게 됩니다.
Dynamo for Civil 3D에서는 Dynamo 메뉴의 바인딩 데이터 저장소 설정을 통해 기본 객체 바인딩 동작을 수정할 수 있습니다.
바인딩 데이터 저장소 옵션은 Civil 3D 2022.1 이상 버전에서 사용할 수 있습니다.
모든 옵션은 기본적으로 사용하도록 설정되어 있습니다. 다음은 각 옵션의 기능에 대한 요약입니다.
이 옵션을 사용하면 Dynamo는 그래프를 마지막으로 실행했을 때 작성한 객체를 "잊어버립니다". 따라서 그래프는 어떤 상황의 어떤 도면에서도 실행될 수 있으며 매번 새로운 개체를 작성합니다.
사용해야 하는 경우
Dynamo가 이전 실행에서 수행한 모든 작업을 "잊어버리고" 매번 새로운 객체를 작성하도록 하려면 이 옵션을 사용합니다.
이 옵션을 사용하면 객체 바인딩 메타데이터가 저장될 때 그래프(.dyn 파일)로 직렬화됩니다. 그래프를 닫았다가 다시 열고 동일한 도면 에서 실행하면 모든 것이 그래프를 닫았을 때와 동일하게 작동합니다. 다른 도면 에서 그래프를 실행하면 바인딩 데이터가 그래프에서 제거되고 새로운 객체가 작성됩니다. 즉, 원본 도면을 열고 그래프를 다시 실행하면 이전 객체와 함께 새로운 객체가 작성됩니다.
사용해야 하는 경우
이 옵션은 Dynamo가 특정 도면 에서 마지막으로 실행될 때 작성한 객체를 "기억"하도록 하려는 경우에 사용합니다.
이 옵션은 특정 도면 과 Dynamo 그래프 간에 1:1 관계를 유지할 수 있는 상황에 가장 적합합니다. 옵션 1과 3은 여러 도면에서 실행되도록 설계된 그래프에 더 적합합니다.
이 옵션은 객체 바인딩 데이터가 그래프(.dyn 파일) 대신 도면에서 직렬화된다는 점을 제외하고 옵션 2와 유사합니다. 그래프를 닫았다가 다시 열고 동일한 도면 에서 실행하면 모든 것이 그래프를 닫았을 때와 동일하게 작동합니다. 다른 도면 에서 그래프를 실행하는 경우 그래프가 아닌 도면에 저장되기 때문에 바인딩 데이터는 원래 도면에 그대로 유지됩니다.
사용해야 하는 경우
이 옵션은 여러 도면 에서 동일한 그래프를 사용하고 Dynamo가 각 도면에서 수행한 작업을 "기억"하도록 하려는 경우에 사용합니다.
이 옵션을 사용할 때 가장 먼저 주목해야 할 점은 기본 Dynamo 인터페이스를 통해 그래프를 실행할 때 그래프가 도면과 상호 작용하는 방식에 영향을 미치지 않는다는 것입니다. 이 옵션은 Dynamo 플레이어를 사용하여 그래프를 실행할 때_만_ 적용됩니다.
기본 Dynamo 인터페이스를 사용하여 그래프를 실행한 다음 닫고 Dynamo 플레이어를 사용하여 동일한 그래프를 실행하면 이전에 작성한 객체 위에 새로운 객체가 작성됩니다. 그러나 Dynamo 플레이어에서 그래프가 한 번 실행되면 도면의 객체 바인딩 데이터가 직렬화됩니다. 따라서 Dynamo 플레이어를 통해 그래프를 여러 번 실행하면 새로운 객체가 작성되지 않고 객체가 업데이트됩니다. Dynamo 플레이어를 통해 다른 도면 에서 그래프를 실행하면 바인딩 데이터는 그래프가 아닌 도면에 저장되기 때문에 원래 도면에 유지됩니다.
사용해야 하는 경우
여러 도면에서 Dynamo 플레이어를 사용하여 그래프를 실행하고 Dynamo 플레이어가 각 도면에서 수행한 작업을 "기억"하도록 하려는 경우에 이 옵션을 사용합니다.
클리어런스 검증을 위한 운동학적 엔벨로프를 개발하는 것은 레일 설계에서 중요한 부분입니다. 복잡한 코리더 횡단구성요소를 작성하고 관리하는 대신 Dynamo를 사용하여 엔벨로프에 사용할 솔리드를 생성할 수 있습니다.
코리더 형상선 작업
좌표계 간 형상 변환
로프트를 통한 솔리드 작성
레이싱 설정으로 노드 동작 제어
이 그래프는 Civil 3D 2020 이상 버전에서 실행됩니다.
먼저 아래의 샘플 파일을 다운로드한 다음 DWG 파일과 Dynamo 그래프를 엽니다.
이 그래프의 논리에 대한 개요는 다음과 같습니다.
지정된 코리더 기준선에서 형상선 가져오기
코리더 형상선을 따라 원하는 간격으로 좌표계 생성
프로파일 블록 형상을 좌표계로 변환
프로파일 사이에 솔리드 로프트
Civil 3D에서 솔리드 작성
그럼 시작하겠습니다!
첫 번째 단계는 코리더 데이터를 가져오는 것입니다. 이름으로 코리더 모형을 선택하고 코리더 내에서 특정 기준선을 가져온 다음, 기준선 내에서 점 코드로 형상선을 가져옵니다.
이제 지정된 시작 측점과 끝 측점 사이의 코리더 형상선을 따라 좌표계를 생성하겠습니다. 이러한 좌표계는 차량 프로파일 블록 형상을 코리더에 정렬하는 데 사용됩니다.
노드의 오른쪽 아래 모서리에 있는 작은 XXX이(가) 있습니다. 이는 노드의 레이싱 설정이 두 형상선에 대해 동일한 측점 값으로 좌표계를 생성하는 데 필요한 _외적_으로 설정되어 있음을 의미합니다.
이제 형상선을 따라 차량 프로파일의 어레이를 만들어야 합니다. 이제 Geometry.Transform 노드를 사용하여 차량 프로파일 블록 정의에서 형상을 변환하겠습니다. 이는 시각화하기 까다로운 개념이므로, 노드를 살펴보기 전에 어떤 일이 일어날지 보여주는 다음 그래픽을 확인하십시오.
따라서 기본적으로 단일 블록 정의에서 Dynamo 형상을 가져와서 이동/회전하는 동시에 형상선을 따라 어레이를 작성합니다. 아주 멋집니다! 다음은 노드 순서의 모습입니다.
이 노든 문서에서 블록 정의를 가져옵니다.
이러한 노드는 블록 내 객체의 Dynamo 형상을 가져옵니다.
이러한 노드는 기본적으로 형상을 변환하는 좌표계를 정의합니다.
마지막으로 이 노드는 형상을 변환하는 실제 작업을 수행합니다.
이 노드에서 가장 긴 레이싱을 주목합니다.
우리가 Dynamo에서 얻는 결과는 다음과 같습니다.
기쁜 소식을 전해 드립니다! 힘든 작업은 끝났습니다. 이제 프로파일 간에 솔리드를 생성하기만 하면 됩니다. Solid.ByLoft 노드를 사용하면 이 작업을 쉽게 수행할 수 있습니다.
결과는 다음과 같습니다. 이 솔리드는 Dynamo 솔리드이므로 여전히 Civil 3D에서 작성해야 합니다.
마지막 단계는 생성된 솔리드를 모형 공간으로 출력하는 것입니다. 또한 눈에 잘 띄도록 색상도 지정할 것입니다.
다음은 Dynamo 플레이어를 사용하여 그래프를 실행하는 예입니다.
다음은 이 그래프의 기능을 확장하는 방법에 대한 몇 가지 아이디어입니다.
각 트랙에 대해 다른 측점 범위를 별도로 사용할 수 있는 기능을 추가합니다.
충돌을 개별적으로 분석할 수 있도록 솔리드를 더 작은 세그먼트로 분할합니다.
엔벨로프 솔리드가 피쳐와 교차하는 확인하고 충돌하는 부분에 색상을 지정합니다.
일반적인 주택 개발의 엔지니어링 설계에는 위생 하수, 강우 배수, 식수 등 여러 지하 공공 설비와 관련된 작업이 포함됩니다. 이 예에서는 Dynamo를 사용하여 분배 본관에서 지정된 로트(예: 구획)로 서비스 연결을 그릴 수 있는 방법을 보여 줍니다. 일반적으로 모든 로트에서 서비스 연결이 필요하므로 모든 서비스를 배치하는 데 상당히 지루한 작업을 하게 됩니다. Dynamo는 필요한 형상을 정밀하게 자동으로 그리는 것은 물론 현지 에이전시 표준에 맞게 조정할 수 있는 유연한 입력을 제공하여 프로세스 속도를 높일 수 있습니다.
사용자 입력을 위한 객체 선택 노드 사용
좌표계 관련 작업
Geometry.DistanceTo 및 Geometry.ClosestPointTo와 같은 기하학적 연산 사용
블록 참조 작성
객체 바인딩 설정 제어
이 그래프는 Civil 3D 2020 이상 버전에서 실행됩니다.
먼저 아래의 샘플 파일을 다운로드한 다음 DWG 파일과 Dynamo 그래프를 엽니다.
이 그래프의 논리에 대한 개요는 다음과 같습니다.
분배 본관에 대한 곡선 형상 가져오기
사용자가 선택한 로트 선에 대한 곡선 형상 가져오기(필요한 경우 반전)
서비스 계량기에 대한 삽입점 생성
서비스 계량기 위치에서 가장 가까운 분배 본관의 점 가져오기
모형 공간에서 블록 참조 및 선 작성
그럼 시작하겠습니다!
첫 번째 단계는 분배 본관에 대한 형상을 Dynamo로 가져오는 것입니다. 개별 선 또는 폴리선을 선택하는 대신, 특정 도면층에 있는 모든 객체를 가져와서 Dynamo PolyCurve로 결합합니다.
다음으로, 선택한 로트 선의 형상을 Dynamo로 가져와서 작업할 수 있도록 해야 합니다. 이 작업에 적합한 도구는 그래프 사용자가 Civil 3D에서 특정 객체를 선택할 수 있는 객체 선택 노드입니다.
또한 발생할 수 있는 잠재적인 문제도 처리해야 합니다. 로트 선에는 시작점과 끝점이 있으며, 이는 로트 선에 방향이 있음을 의미합니다. 그래프가 일관된 결과를 생성하려면 모든 로트 선의 방향이 일관되어야 합니다. 그래프 논리에서 이 조건을 직접 고려할 수 있으므로, 그래프의 탄력성이 향상됩니다.
로트 선의 시작점과 끝점을 가져옵니다.
각 점에서 분배 본관까지의 거리를 측정한 다음 어느 거리가 더 긴지 파악합니다.
원하는 결과는 선의 시작점이 분배 본관에 가장 가까운 것입니다. 그렇지 않으면 로트 선의 방향을 반전합니다. 그 외에는 원래 로트 선을 반환합니다.
이제 서비스 계량기를 어디에 배치할지 결정할 차례입니다. 일반적으로 현지 에이전시 요구 사항에 따라 배치가 결정되므로 다양한 조건에 맞게 변경할 수 있는 입력 값만 제공합니다. 점을 만들기 위한 참조로 로트 선을 따라 좌표계를 사용하겠습니다. 이렇게 하면 로트 선의 방향에 관계없이 로트 선을 기준으로 간격띄우기를 쉽게 정의할 수 있습니다.
이제 서비스 계량기 위치에서 가장 가까운 분배 본관에 점을 확보해야 합니다. 이렇게 하면 모형 공간에 서비스 연결을 그려서 항상 분배 본관에 수직이 되도록 할 수 있습니다. Geometry.ClosestPointTo 노드는 완벽한 솔루션입니다.
이것은 분배 본관 PolyCurve입니다.
이것은 서비스 계량기 삽입점입니다.
마지막 단계는 모형 공간에서 실제로 객체를 작성하는 것입니다. 이전에 생성한 삽입점을 사용하여 블록 참조를 생성한 다음 분배 본관에 있는 점을 사용하여 서비스 연결에 대한 선을 그립니다.
그래프를 실행하면 모형 공간에 새 블록 참조 및 서비스 연결선이 표시됩니다. 일부 입력을 변경하고 모든 항목이 자동으로 업데이트되는지 확인해 보십시오!
하나의 로트 선에 객체를 배치한 후 다른 로트 선을 선택하면 객체가 "이동"되는 것을 볼 수 있습니다.
이는 Dynamo의 기본 동작이고, 대부분의 경우 매우 유용합니다. 그러나 여러 서비스 연결을 순차적으로 배치하고 원래 객체를 수정하는 대신 실행할 때마다 Dynamo가 새 객체를 작성하도록 하고자 할 수 있습니다. 이 동작은 객체 바인딩 설정을 변경하여 제어할 수 있습니다.
이 설정을 변경하면 Dynamo가 실행할 때마다 작성하는 객체를 "잊어버립니다". 다음은 Dynamo 플레이어를 사용하여 객체 바인딩을 끈 상태에서 그래프를 실행하는 예입니다.
다음은 이 그래프의 기능을 확장하는 방법에 대한 몇 가지 아이디어입니다.
각 로트 선을 선택하는 대신 여러 개의 서비스 연결을 동시에 배치합니다.
입력을 조정하여 수도 서비스 계량기 대신 하수 청소구를 배치합니다.
로트 선의 양쪽이 아닌 특정 쪽에 단일 서비스 연결을 배치할 수 있는 토글을 추가합니다.
파이프 및 구조물을 관망에 추가할 때 Civil 3D는 템플릿을 사용하여 자동으로 이름을 지정합니다. 일반적으로 초기 배치 시에는 이 정도면 충분하지만 향후 설계가 진행됨에 따라 불가피하게 이름을 변경해야 할 수도 있습니다. 또한 가장 먼 다운스트림 구조물에서 시작하여 관로 내에서 순차적으로 구조물의 이름을 지정하거나 로컬 에이전시의 데이터 스키마에 맞는 이름 지정 패턴을 따르는 등 다양한 이름 지정 패턴이 필요할 수 있습니다. 이 예에서는 Dynamo를 사용하여 모든 유형의 이름 지정 전략을 정의하고 일관되게 적용하는 방법을 보여 줍니다.
경계 상자 작업
List.FilterByBoolMask 노드를 사용하여 데이터 필터링
List.SortByKey 노드를 사용하여 데이터 정렬
문자열 생성 및 수정
이 그래프는 Civil 3D 2020 이상 버전에서 실행됩니다.
먼저 아래의 샘플 파일을 다운로드한 다음 DWG 파일과 Dynamo 그래프를 엽니다.
이 그래프의 논리에 대한 개요는 다음과 같습니다.
도면층별 구조물 선택
구조물 위치 가져오기
간격띄우기를 기준으로 구조물을 필터링한 다음 측점을 기준으로 정렬
새 이름 생성
구조물 이름 바꾸기
그럼 시작하겠습니다!
가장 먼저 해야 할 일은 작업할 모든 구조물을 선택하는 것입니다. 특정 도면층에서 모든 객체를 선택하기만 하면 되므로, 다른 관망에서 구조물을 선택할 수 있습니다(동일한 도면층을 공유한다고 가정할 때).
이 노드를 사용하면 구조물과 동일한 도면층을 공유할 수 있는, 원하지 않는 객체 유형을 실수로 검색하지 않을 수 있습니다.
이제 구조물이 준비되었으므로 공간에서 구조물의 위치를 파악하여 위치에 따라 구조물을 정렬해야 합니다. 이를 위해 각 객체의 경계 상자를 활용하겠습니다. 객체의 경계 상자는 객체의 기하학적 범위를 완전히 포함하는 최소 크기의 상자입니다. 경계 상자의 중심을 계산하면 구조물 삽입점에 대한 근사치를 꽤 정확하게 구할 수 있습니다.
이러한 점을 사용하여 선택한 선형을 기준으로 구조물의 측점 및 간격띄우기를 구할 것입니다.
여기서부터 작업이 조금 까다로워지기 시작합니다. 이 단계에서는 도면층에 지정한 모든 구조물의 큰 리스트가 있고 이를 정렬할 선형을 선택했습니다. 문제는 리스트에 이름을 바꾸고 싶지 않은 구조물이 있을 수 있다는 것입니다. 예를 들어, 그러한 구조물은 관심 있는 특정 실행의 일부가 아닐 수 있습니다.
선택한 선형
이름을 바꾸려는 구조물
무시해야 하는 구조물
따라서 선형에서 특정 간격띄우기보다 큰 구조물은 고려하지 않도록 구조물 리스트를 필터링해야 합니다. 이 작업은 List.FilterByBoolMask 노드를 사용하여 수행하는 것이 가장 좋습니다. 구조물 리스트를 필터링한 후 List.SortByKey 노드를 사용하여 측점 값을 기준으로 구조물을 정렬합니다.
구조물의 간격띄우기가 임계값보다 작은지 확인
Null 값을 false 로 대치
구조물 및 측점 리스트 필터링
측점별로 구조물 정렬
마지막으로 해야 할 작업은 구조물의 이름을 새로 생성하는 것입니다. 사용할 형식은 <alignment name>-STRC-<number>
입니다. 원하는 경우 숫자를 0으로 채울 수 있는 몇 가지 추가 노드가 있습니다(예: "1" 대신 "01").
마지막으로, 구조물 이름을 바꾸겠습니다.
다음은 Dynamo 플레이어를 사용하여 그래프를 실행하는 예입니다.
최종 결과 대신 그래프의 중간 출력을 시각화하기 위해 Dynamo의 3D 배경 미리보기를 활용하는 것이 도움이 될 수 있습니다. 한 가지 쉬운 방법은 구조물의 경계 상자를 보여주는 것입니다. 또한 이 특정 데이터세트에는 문서에 코리더가 있으므로 코리더 형상선 형상을 Dynamo로 가져와서 구조물이 공간에서 어디에 위치하는지에 대한 컨텍스트를 제공할 수 있습니다. 코리더가 없는 데이터세트에서 그래프를 사용하는 경우 이러한 노드는 아무 작업도 수행하지 않습니다.
이제 간격띄우기를 기준으로 구조를 필터링하는 프로세스가 작동하는 방식을 더 잘 이해할 수 있습니다.
다음은 이 그래프의 기능을 확장하는 방법에 대한 몇 가지 아이디어입니다.
특정 선형을 선택하는 대신 가장 가까운 선형을 기준으로 구조물의 이름을 바꿉니다.
구조물 외에 파이프의 이름을 바꿉니다.
해당 실행을 기준으로 구조물의 도면층을 설정합니다.
/
/
/
Civil 3D 버전 | Dynamo 버전 | 주 |
---|---|---|
문자를 모델 공간에 삽입할 Dynamo 그래프를 작성합니다.
작업을 완료했습니다!
코리더를 따라 Excel 파일에 지정된 측점 값에 등주 블록 참조를 배치합니다.
작업을 완료했습니다!
고유한 각 COGO 점 설명에 대한 점 그룹을 작성합니다.
리스트 작업을 처음 해보는 경우 섹션을 참조하십시오.
Dynamo 플레이어를 처음 사용하는 경우 섹션을 참조하십시오.
작업을 완료했습니다!
그래프를 실행할 때마다 문자가 삭제되고 다시 생성되는 것처럼 보입니다. 실제로는 선택하는 원에 따라 문자의 위치가 수정 됩니다. 따라서 다른 위치에 있을 뿐 동일한 문자입니다! 매번 새로운 문자를 작성하려면 바인딩 데이터가 유지되지 않도록 Dynamo의 객체 바인딩 설정을 수정해야 합니다(아래의 참조).
Dynamo 플레이어를 처음 사용하는 경우 섹션을 참조하십시오.
차량 프로파일 블록을 사용하여 코리더를 따라 클리어런스 엔벨로프 3D 솔리드를 생성합니다.
좌표계를 처음 사용하는 경우 섹션을 참조하십시오.
노드 레이싱을 처음 사용하는 경우 섹션을 참조하십시오.
Dynamo 플레이어를 처음 사용하는 경우 섹션을 참조하십시오.
작업을 완료했습니다!
수도 서비스 계량기 블록 참조를 로트 선에서 지정된 간격띄우기에 배치하고 각 서비스 연결에 대해 분배 본관에 수직으로 선을 그립니다.
Dynamo 곡선 형상을 처음 사용하는 경우 섹션을 참조하십시오.
좌표계를 처음 사용하는 경우 섹션을 참조하십시오.
자세한 내용은 섹션을 참조하십시오.
Dynamo 플레이어를 처음 사용하는 경우 섹션을 참조하십시오.
작업을 완료했습니다!
선형의 측점 표시를 기반으로 관망 구조물의 이름을 순서대로 바꿉니다.
리스트 작업을 처음 해보는 경우 섹션을 참조하십시오.
Dynamo 플레이어를 처음 사용하는 경우 섹션을 참조하십시오.
작업을 완료했습니다!
2024.1
2.18
2024
2.17
Dynamo 플레이어 사용자 인터페이스 업데이트
2023.2
2.15
2023
2.13
Dynamo 사용자 인터페이스 업데이트
2022.1
2.12
객체 바인딩 데이터 저장소 설정 추가
객체 바인딩 제어를 위한 새로운 노드 추가
2022
2.10
기본 Civil 3D 설치에 포함됨
IronPython에서 Python.NET으로 전환
2021
2.5
2020.2
2.4
2020 Update 2
2.4
새로운 노드 추가
2020.1
2.2
2020
2.1
초기 릴리즈
코드 블록은 Dynamo의 고유한 기능으로서, 시각적 프로그래밍 환경을 문자 기반 환경에 동적으로 연결해 줍니다. 코드 블록은 모든 Dynamo 노드에 액세스할 수 있으며 하나의 노드에서 전체 그래프를 정의할 수 있습니다. 코드 블록은 Dynamo의 기본적인 빌딩 블록이므로 이 장을 자세히 읽어 보십시오.
Dynamo 플레이어는 Civil 3D에서 Dynamo 그래프를 실행하는 간단한 방법을 제공합니다. 그래프가 작성되면 플레이어를 사용하고 그래프를 실행하는 데 Dynamo에 대한 전문 지식이 필요하지 않습니다. 플레이어를 사용하면 노드 및 와이어의 세부 사항을 알아보는 데 관심이 없을 수 있는 다른 사람들과 그래프를 쉽게 공유할 수 있습니다.
Civil 3D의 Dynamo 플레이어에 대한 자세한 내용은 Civil 3D 도움말 사이트에서 제공하는 문서를 참조하십시오.
Dynamo에서 AEC 세계에 대한 코딩을 시작하면 좋습니다. 코딩 여정을 시작하려는 경우 다음 섹션 중 일부에 관심이 있을 것입니다.
Dynamo는 시각적 프로그래밍 도구로서 매우 강력하지만 노드 및 와이어를 넘어 문자 형식으로 코드를 작성하는 것도 가능합니다. 이 작업은 다음과 같은 두 가지 방법으로 수행할 수 있습니다.
Code Block을 사용하여 DesignScript 쓰기
Python 노드를 사용하여 Python 쓰기
이 섹션에서는 Civil 3D 환경에서 Python을 활용하여 AutoCAD 및 Civil 3D .NET API를 활용하는 방법에 대해 중점적으로 설명합니다.
Dynamo에서 Python을 사용하는 방법에 대한 보다 일반적인 정보는 Python 섹션을 참조하십시오.
AutoCAD와 Civil 3D에는 여러분과 같은 개발자가 사용자 지정 기능으로 핵심 제품을 확장할 수 있는 여러 API가 있습니다. Dynamo의 컨텍스트에서 관련성이 있는 것은 관리되는 .NET API입니다. 다음 링크는 API의 구조 및 작동 방식을 이해하는 데 필수적입니다.
이 섹션을 진행하면서 데이터베이스, 트랜잭션, 메서드, 특성 등 익숙하지 않은 개념이 접할 수 있습니다. 이러한 개념 중 대부분은 .NET API 작업의 핵심이며 Dynamo 또는 Python에만 국한되지 않습니다. 이러한 항목에 대해 자세히 설명하는 것은 이 입문서 섹션의 범위를 벗어나는 것이므로 더 자세한 내용은 위의 링크를 자주 참조하는 것이 좋습니다.
새 Python 노드를 처음 편집하면 시작할 수 있도록 템플릿 코드가 미리 채워져 있습니다. 아래에는 각 블록에 대한 설명과 함께 템플릿을 분석한 내용이 나와 있습니다.
sys
및clr
모듈을 가져옵니다. 둘 다 Python 인터프리터가 제대로 작동하는 데 필요합니다. 특히clr
모듈을 사용하면 .NET 네임스페이스를 기본적으로 Python 패키지로 처리할 수 있습니다.AutoCAD 및 Civil 3D를 위한 관리되는 .NET API로 작업하기 위한 표준 어셈블리(예: DLL)를 로드합니다.
표준 AutoCAD 및 Civil 3D 네임스페이스에 참조를 추가합니다. 이는 각각 C# 또는 VB.NET의
using
또는Imports
지시어와 동일합니다.노드의 입력 포트에는
IN
라는 사전 정의된 리스트를 사용하여 액세스할 수 있습니다. 색인 번호를 사용하여 특정 포트의 데이터에 액세스할 수 있습니다(예:dataInFirstPort = IN[0]
).활성 문서 및 편집기를 가져옵니다.
문서를 잠그고 데이터베이스 트랜잭션을 시작합니다.
여기에 스크립트 논리의 대부분을 배치해야 합니다.
주 작업이 완료된 후 이 행의 주석을 해제하여 트랜잭션을 커밋합니다.
노드에서 데이터를 출력하려면 스크립트 끝에 있는
OUT
변수에 데이터를 지정합니다.
사용자화하시겠습니까?
C:\ProgramData\Autodesk\C3D <version>\Dynamo
에 있는 PythonTemplate.py
파일을 편집하여 기본 Python 템플릿을 수정할 수 있습니다.
예제를 통해 Dynamo for Civil 3D에서 Python 스크립트를 작성하는 데 필요한 몇 가지 기본 개념을 살펴보겠습니다.
다음은 이 연습에서 참조할 수 있는 예제 파일입니다.
이 그래프의 논리에 대한 개요는 다음과 같습니다.
Civil 3D API 문서 검토
문서에서 도면층 이름별로 모든 유역 선택
Dynamo 객체를 "언래핑"하여 내부 Civil 3D API 멤버에 액세스
AutoCAD 점에서 Dynamo 점 작성
점에서 PolyCurve 작성
그럼 시작하겠습니다!
그래프 작성과 코드 작성을 시작하기 전에 Civil 3D API 문서를 살펴보고 API가 제공하는 기능을 파악하는 것이 좋습니다. 이 경우 유역의 경계 점을 반환하는 특성이 유역 클래스에 있습니다. 이 특성은 Point3dCollection
객체를 반환하는데, Dynamo에서 이 객체를 어떻게 사용할지 알 수 없습니다. 다시 말해, Point3dCollection
에서 PolyCurve를 작성할 수 없으므로, 결국 모든 항목을 Dynamo 점으로 변환해야 합니다. 이에 대해서는 나중에 더 자세히 살펴보겠습니다.
이제 그래프 논리 작성을 시작할 수 있습니다. 가장 먼저 해야 할 일은 문서에 있는 모든 유역 리스트를 가져오는 것입니다. 이를 위해 사용할 수 있는 노드가 있으므로 Python 스크립트에 포함할 필요가 없습니다. 노드를 사용하면 그래프를 읽을 수 있는 다른 사람에게 더 나은 가시성을 제공할 수 있습니다(Python 스크립트에 많은 코드를 묻어두는 것에 비해). 또한 Python 스크립트가 유역의 경계 점을 반환하는 한 가지 작업에 집중할 수 있도록 해줍니다.
여기서 All Objects on Layer 노드의 출력은 CivilObjects 목록입니다. 이는 현재 Dynamo for Civil 3D에 유역 작업을 위한 노드가 없기 때문이며, 이것이 바로 Python을 통해 API에 액세스해야 하는 이유입니다.
더 자세히 알아보기 전에 중요한 개념을 간단히 살펴봐야 합니다. 노드 라이브러리 섹션에서 객체와 CivilObjects가 어떻게 관련되어 있는지 살펴보았습니다. 이에 대해 조금 더 자세히 설명하자면, Dynamo 객체는 AutoCAD 도면요소를 감싸는 래퍼입니다. 마찬가지로, Dynamo CivilObject도 Civil 3D 도면요소를 감싸는 래퍼입니다. 해당 InternalDBObject
또는 InternalObjectId
특성에 액세스하여 객체의 "언래핑"할 수 있습니다.
경험상 일반적으로 InternalObjectId
특성을 사용하여 객체 ID를 가져온 다음 트랜잭션에서 래핑된 객체에 액세스하는 것이 더 안전합니다. 이는 InternalDBObject
특성이 쓰기 가능 상태가 아닌 AutoCAD DBObject를 반환하기 때문입니다.
다음은 내부 유역 객체에 액세스하는 작업을 수행하는 완전한 Python 스크립트가 해당 경계 점을 가져오는 것입니다. 강조 표시된 행은 기본 템플릿 코드에서 수정/추가된 행을 나타냅니다.
각 행에 대한 설명을 보려면 스크립트에서 밑줄이 있는 문자를 클릭합니다.
경험상 스크립트 논리의 대부분은 트랜잭션 내에 포함하는 것이 가장 좋습니다. 이렇게 하면 스크립트가 읽기/쓰기 중인 객체에 안전하게 액세스할 수 있습니다. 대부분의 경우 트랜잭션을 생략하면 치명적 오류가 발생할 수 있습니다.
이 단계에서 Python 스크립트는 배경 미리보기에서 볼 수 있는 Dynamo 점 리스트를 출력해야 합니다. 마지막 단계는 점에서 PolyCurve를 만드는 것입니다. 이 작업은 Python 스크립트에서 직접 수행할 수도 있지만, 더 잘 보이도록 의도적으로 스크립트 외부의 노드에 배치했습니다. 최종 그래프의 모습은 다음과 같습니다.
최종 Dynamo 형상은 다음과 같습니다.
마무리하기 전에 간단히 한 가지 더 알려드리겠습니다. 사용 중인 Civil 3D 버전에 따라 Python 노드가 다르게 구성될 수 있습니다. Civil 3D 2020 및 2021에서 Dynamo는 IronPython이라는 도구를 사용하여 .NET 객체와 Python 스크립트 간에 데이터를 이동했습니다. 그러나 Civil 3D 2022에서는 Dynamo가 Python 3을 사용하는 대신 표준 기본 Python 인터프리터(CPython)를 사용하도록 전환되었습니다. 이러한 전환의 이점으로는 널리 사용되는 최신 라이브러리와 새로운 플랫폼 기능, 필수 유지보수 및 보안 패치에 대한 액세스가 포함됩니다.
Dynamo 블로그에서 이 전환에 대한 자세한 내용과 기존 스크립트를 업그레이드하는 방법을 확인할 수 있습니다. IronPython을 계속 사용하려면 Dynamo Package Manager를 사용하여 DynamoIronPython2.7 패키지를 설치하기만 하면 됩니다.
이 행은 Dynamo 형상 라이브러리에서 필요한 특정 클래스를 가져옵니다. import *
는 명명 충돌을 유발할 수 있으므로, 여기서는 import Point as DynPoint
를 지정합니다.
여기서는 모든 입력의 전체 리스트를 참조하는 기본 IN
대신 원하는 데이터가 포함되어 있는 입력 포트를 정확하게 지정합니다.
Dynamo 패키지는 Dynamo의 핵심 기능을 확장하기 위해 타사에서 개발한 도구 세트입니다. 누구나 액세스할 수 있으며 한 번의 버튼 클릭으로 다운로드할 수 있습니다.
패키지를 시작하는 방법에 대한 자세한 내용은 패키지 섹션을 참조하십시오.
다음은 Dynamo for Civil 3D 그래프를 한 단계 높은 수준으로 끌어올릴 수 있는 가장 인기 있는 패키지 리스트입니다.
Civil 3D 도구 키트 는 대규모의 추가 노드 인벤토리를 통해 Dynamo의 기능을 크게 개선하는 Dynamo for Civil 3D 패키지입니다.
캠버는 레이블, 외부 참조, 데이터 바로 가기, 스타일 등으로 작업할 수 있는 수백 개의 노드가 포함된 오픈 소스 Dynamo for Civil 3D 패키지입니다.
CivilConnection 은 Civil 3D, Dynamo 및 Revit 간에 정보를 교환할 수 있는 오픈 소스 Revit용 Dynamo 패키지입니다.
Arkance Systems 노드는 치수, 테이블, 뷰, 드릴 제어 등의 작업에 유용하고 노드가 다수 포함된 Dynamo for Civil 3D 패키지입니다.
이 섹션에서는 DesignScript를 사용하여 형상을 작성하는 방법에 대한 일련의 학습 내용을 찾을 수 있습니다. 예제 DesignScript를 Dynamo 코드 블록으로 복사하여 후속 작업을 수행합니다.
코드 블록은 Dynamo에서 핵심적으로 사용되는 프로그래밍 언어인 DesignScript를 깊이 있게 볼 수 있는 창입니다. 예비 설계 워크플로우를 지원할 목적으로 완전히 새로 제작된 DesignScript는 사람이 읽을 수 있는 간결한 언어로, 소량의 코드에는 즉각적인 피드백을 제공하고 크고 복잡한 상호작용에 맞게 확장됩니다. 또한 DesignScript는 "내부적으로" Dynamo의 대부분을 구동하는 엔진의 토대를 형성합니다. Dynamo 노드에 포함된 거의 모든 기능과 상호작용은 스크립팅 언어와 일대일 관계가 있으므로, 노드 기반 상호작용과 스크립팅 간에 유연하게 전환할 수 있는 특별한 기능이 있습니다.
초보자를 위해 노드는 DesignScript 학습을 지원할 목적으로 또는 단순히 규모가 더 큰 그래프 섹션의 크기를 줄일 목적으로 자동으로 변환될 수 있습니다. 이 작업은 "Node to Code" 프로세스를 사용하여 수행합니다. 이 프로세스에 대한 자세한 설명은 에 나와 있습니다. 더 숙련된 사용자는 코드 블록을 사용하여 기존 기능과 많은 표준 코딩 패러다임을 활용한 사용자 작성 관계로 구성된 사용자화된 매쉬업을 만들 수 있습니다. 초급자와 고급 사용자 사이에는 방대한 바로 가기 및 코드 조각이 있는데, 바로 이러한 요소가 설계를 가속화해 줍니다. 프로그래머가 아닌 사람에게 '코드 블록'이라는 용어는 생소할 수 있지만 코드 블록은 사용하기 쉽고 강력합니다. 초급 사용자는 최소한의 코딩으로 코드 블록을 효율적으로 사용할 수 있으며, 고급 사용자는 스크립팅된 정의를 지정하여 Dynamo 정의의 다른 위치에서 다시 호출할 수 있습니다.
간단히 말해, 코드 블록은 시각적 스크립팅 환경 내의 문자 스크립팅 인터페이스입니다. 숫자, 문자열, 수식 및 기타 데이터 유형으로 사용할 수 있습니다. 코드 블록은 Dynamo용으로 설계되었으므로 사용자는 코드 블록에서 임의의 변수를 정의할 수 있으며, 이러한 변수는 노드의 입력에 자동으로 추가됩니다.
코드 블록을 사용하면 사용자가 입력 지정 방식을 유연하게 결정할 수 있습니다. 아래에 좌표 (10, 5, 0) 으로 기본 점을 만드는 다양한 방법이 나와 있습니다.
라이브러리의 사용 가능한 함수에 대해 자세히 알아볼 때 라이브러리에서 검색한 후 적절한 노드를 찾는 것보다 "Point.ByCoordinates"를 입력하는 것이 더 빠르다는 것을 알게 될 것입니다. "Point." 를 입력하면 점에 적용할 수 있는 함수 리스트가 Dynamo에 표시됩니다. 이렇게 하면 스크립팅을 더 직관적으로 사용할 수 있으며 Dynamo에서 함수를 적용하는 방식을 배우는 데 도움이 됩니다.
코드 블록은 코어>입력>작업>코드 블록 에서 찾을 수 있습니다. 하지만 단순히 캔버스를 두 번 클릭하기만 하면 코드 블록이 더 빠르게 나타납니다. 이 노드는 너무 자주 사용되어 두 번 클릭 권한이 완전하게 부여되어 있습니다.
코드 블록은 데이터 유형에 대해서도 유연하게 작동합니다. 사용자는 숫자, 문자열, 수식을 빠르게 정의할 수 있으며 코드 블록은 원하는 출력을 제공합니다.
아래 이미지에서는 작업을 수행하는 "구식" 방법이 오랜 걸린다는 것을 알 수 있습니다. 사용자는 인터페이스에서 의도한 노드를 검색하고 노드를 캔버스에 추가한 다음, 데이터를 입력해야 합니다. 코드 블록을 사용하는 경우 사용자는 캔버스를 두 번 클릭하여 노드를 표시하고 기본 구문을 사용하여 올바른 데이터 유형을 입력하면 됩니다.
코드 블록과 비교하여 더 이상 사용되지 않을 것이 거의 확실한 Dynamo 노드의 세 가지는 number, string 및 formula 노드입니다.
"구식"
코드 블록
Dynamo 표준 형상 라이브러리의 가장 단순한 기하학적 객체는 점입니다. 모든 형상은 생성자라는 특수 함수를 사용하여 작성되며, 생성자는 각각 해당 특정 형상 유형의 새 인스턴스를 반환합니다. Dynamo에서 생성자는 객체 유형의 이름(이 경우 Point)으로 시작되며 뒤에 생성 메서드가 옵니다. x, y 및 z 데카르트 좌표로 지정한 3D 점을 작성하기 위해 ByCoordinates 생성자를 사용합니다.
Dynamo의 생성자는 일반적으로 "By" 접두어로 지정되고, 이러한 함수를 호출하면 새로 작성된 해당 유형의 객체가 반환됩니다. 새로 작성된 이 객체는 등호 기호의 왼쪽에 명명된 변수에 저장됩니다.
대부분의 객체에는 여러 다른 생성자가 있으며 BySphericalCoordinates 생성자를 사용하여 구의 반지름, 첫 번째 회전 각도 및 두 번째 회전 각도(도 단위로 지정됨)로 지정된 구에 있는 점을 작성할 수 있습니다.
선처럼 더 높은 차원의 형상을 생성하는 데 점을 사용할 수 있으며, ByStartPointEndPoint 생성자를 사용하여 두 점 간에 선 객체를 작성할 수 있습니다.
마찬가지로 일련의 선 또는 곡선을 가져와 그 사이의 표면을 보간하는 Loft 생성자를 사용하는 경우처럼 선을 사용하여 더 높은 차원의 표면 형상을 만들 수 있습니다.
표면 역시 더 높은 차원의 솔리드 형상을 작성하는 데 사용할 수 있는데, 예를 들어 지정된 거리만큼 표면을 두껍게 할 수 있습니다. 많은 객체에는 프로그래머가 해당 객체에 대해 명령을 수행할 수 있도록 하는 메서드라고 하는 함수가 연결되어 있습니다. 모든 형상 조각에 공통적으로 적용되는 메서드에는 각각 지정된 양만큼 형상을 변환(이동) 및 회전하는 Translate 및 Rotate 가 포함됩니다. 표면에는 표면의 새 두께를 지정하는 숫자인 단일 입력을 사용하는 Thicken 메서드가 있습니다.
Intersection 명령은 더 높은 차원 객체에서 더 낮은 차원 형상을 추출할 수 있습니다. 이렇게 추출한 낮은 차원 형상은 형상 작성, 추출, 재작성으로 연결되는 일련의 프로세스에서 더 높은 차원 형상의 기준을 형성할 수 있습니다. 이 예에서는 생성된 솔리드를 사용하여 표면을 작성하고 표면을 사용하여 곡선을 작성합니다.
함수는 코드 블록에서 작성한 후 Dynamo 정의의 다른 위치에서 다시 호출할 수 있습니다. 이를 통해 파라메트릭 파일에 또 다른 제어층이 작성되며, 이는 텍스트 기반 버전의 사용자 노드로 볼 수 있습니다. 이 경우 "parent" 코드 블록에 쉽게 액세스할 수 있으며 그래프의 모든 위치에 배치할 수 있습니다. 와이어는 필요하지 않습니다.
첫 번째 줄에는 키워드 “def”, 그다음에 함수 이름, 괄호로 묶인 입력 이름이 차례로 표시됩니다. 중괄호는 함수의 본문을 정의합니다. "return ="을 사용하여 값을 반환합니다. 함수를 정의하는 Code Block은 다른 Code Block에서 호출되기 때문에 입력 또는 출력 포트가 없습니다.
동일한 파일의 다른 Code Block에서 해당 이름 및 동일한 개수의 인수를 지정하여 함수를 호출합니다. 이 노드는 라이브러리의 기본 제공 노드처럼 작동합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습에서는 점의 입력 리스트에서 구를 작성하는 일반 정의를 만들겠습니다. 이러한 구의 반지름은 각 점의 Z 특성에 의해 결정됩니다.
각각 0에서 100 사이의 값을 갖는 10개의 값 범위로 시작하겠습니다. 이러한 값을 Point.ByCoordinates 노드에 연결하여 대각선을 작성합니다.
Code Block을 작성하고 정의를 소개합니다.
다음 코드 줄을 사용합니다.
inputPt 는 함수를 구동할 점을 나타내기 위해 지정한 이름입니다. 현재, 이 함수는 아무 기능도 하지 않지만 이후 단계에서 구축할 것입니다.
Code Block 함수에 추가하여 주석과 각 점의 Z 위치를 조회하는 sphereRadius 변수를 배치합니다. inputPt.Z 에는 괄호가 메서드로 필요하지 않습니다. 기존 요소 특성의 조회 이므로 입력이 필요하지 않습니다.
이제 다른 Code Block에서 작성한 함수를 불러오겠습니다. 캔버스를 두 번 클릭하여 새 code block 을 작성하고 sphereB 를 입력하면 Dynamo는 정의한 sphereByZ 함수를 제안합니다. 함수가 intellisense 라이브러리에 추가되었습니다. 멋지지 않은가요?
이제 함수를 호출하고, 이전 단계에서 생성한 점에 연결할 Pt 라는 변수를 작성합니다.
출력에서 모든 값이 null이라는 것을 확인할 수 있습니다. 그 이유는 무엇일까요? 함수를 정의했을 때 sphereRadius 변수를 계산하지만 함수가 출력 으로 반환 해야 하는 결과를 정의하지 않았습니다. 이 문제는 다음 단계에서 해결할 수 있습니다.
중요한 단계로, 선
return = sphereRadius;
를 sphereByZ 함수에 추가하여 함수의 출력을 정의해야 합니다.이제 Code Block의 출력이 각 점의 Z 좌표를 나타낸다는 것을 알 수 있습니다.
이제 Parent 함수를 편집하여 실제 구를 작성하겠습니다.
먼저 다음 코드 줄로 구를 정의합니다.
sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);
다음으로, 반환 값을 sphereRadius 대신 sphere 로 변경합니다.
return = sphere;
이렇게 하면 Dynamo 미리보기에 몇 개의 큰 구가 표시됩니다.
1. 이러한 구의 크기를 조절하기 위해 구분선
sphereRadius = inputPt.Z/20;
을 추가하여 sphereRadius 값을 업데이트하겠습니다. 이제 별도의 구가 표시되며 반지름과 Z 값 간의 관계를 이해할 수 있습니다.
Point.ByCoordinates 노드에서 레이싱을 최단 리스트에서 외적으로 변경하여 점 그리드를 작성합니다. sphereByZ 함수는 여전히 전체 효과를 나타내므로 모든 점이 Z 값을 기준으로 하는 반지름의 구를 작성합니다.
물을 테스트하기 위해 숫자의 원래 리스트를 Point.ByCoordinates에 대한 X 입력에 연결합니다. 이제 정육면체 및 구가 구현되었습니다.
참고: 컴퓨터에서 계산하는 데 시간이 오래 걸리는 경우 #10 을 #5 와 같은 값으로 변경해 보십시오.
작성한 sphereByZ 함수는 일반 함수이므로 이전 단원에서 사용한 나선을 다시 불러와 이 함수를 적용할 수 있습니다.
마지막 단계: 사용자 정의 매개변수로 반지름 비율을 구동해 보겠습니다. 이렇게 하려면 함수에 대한 새 입력을 작성하고 20 구분자를 매개변수로 대치해야 합니다.
다음과 같이 sphereByZ 정의를 업데이트합니다.
입력에
sphereByZ(Pt,ratio);
와 같이 ratio 변수를 추가하여 하위 Code Block을 업데이트합니다. 슬라이더를 새로 작성한 Code Block 입력에 연결하고, 반지름 비율에 따라 반지름의 크기를 변경합니다.
Dynamo의 노드 이름에서는 일반적인 테마를 확인할 수 있습니다. 각 노드에서는 공백 없이 "." 구문을 사용합니다. 그 이유는 각 노드의 맨 위에 있는 문자가 스크립팅의 실제 구문을 나타내고 "."(또는 점 표기법)은 호출할 수 있는 방법과 요소를 구분하기 때문입니다. 이를 통해 시각적 스크립팅에서 문자 기반 스크립팅으로 쉽게 변환할 수 있습니다.
점 표기법의 일반적인 비유로, Dynamo에서 파라메트릭 사과는 어떻게 처리할 수 있을까요? 다음은 사과를 먹기로 결정하기 전에 사과에 대해 실행할 몇 가지 메서드입니다. 참고: 이는 실제 Dynamo 메서드가 아닙니다.
인간 판독 가능 | 점 표기법 | Output |
---|
여러분에 대해서는 잘 모르지만 위 표의 출력을 통해 판단해보면 이는 맛있는 사과처럼 보입니다. Apple.eat() 를 수행해 보겠습니다.
사과의 비유를 생각하면서 Point.ByCoordinates 를 살펴보고 code block을 사용하여 점을 작성하는 방법을 살펴보겠습니다.
code block 구문 Point.ByCoordinates(0,10);
는 하나의 노드를 사용하여 점을 작성할 수 있다는 점을 제외하고 Dynamo의 Point.ByCoordinates 노드와 동일한 결과를 제공합니다. 이 구문은 별도의 노드를 "X" 및 "Y" 에 연결하는 것보다 더 효율적입니다.
code block에서 Point.ByCoordinates 를 사용하여 즉시 사용 가능한 노드 (X,Y) 와 동일한 순서로 입력을 지정합니다.
노드가 특수한 "UI" 노드 가 아닌 한, Code Block을 통해 특수 사용자 인터페이스 기능을 사용하는 라이브러리의 모든 일반 노드를 호출할 수 있습니다. 예를 들어 Circle.ByCenterPointRadius 는 호출할 수 있지만 Watch 3D 노드를 호출하는 것은 적절하지 않습니다.
일반 노드(대부분의 라이브러리)는 일반적으로 다음과 같은 세 가지 유형으로 사용됩니다. 이러한 카테고리에 유의하면 라이브러리 구성을 이해할 수 있습니다. 이러한 세 가지 유형의 메서드 또는 노드는 Code Block 내에서 호출될 때 다르게 취급됩니다.
Create - 항목 작성 또는 구성
Action - 항목에 대해 작업 수행
Query - 이미 존재하는 항목의 특성을 가져오기
"Create" 카테고리에서는 형상을 처음부터 새로 구성합니다. code block에 값을 왼쪽에서 오른쪽으로 입력합니다. 이러한 입력은 위에서 아래로의 노드 입력과 같은 순서로 되어 있습니다.
Line.ByStartPointEndPoint 노드와 code block의 해당 구문을 비교해 보면 동일한 결과를 얻을 수 있습니다.
Action은 해당 유형의 객체에 대해 수행할 수 있는 작업입니다. Dynamo에서는 많은 코딩 언어에 공통되는 _점 표기법_을 사용하여 항목에 작업을 적용합니다. 작업이 완료되면 점을 입력한 후 작업의 이름을 입력합니다. action-type 메서드의 입력은 create-type 메서드와 같이 괄호로 묶으며, 표시되는 첫 번째 입력을 해당 노드에 지정할 필요가 없습니다. 대신, 작업을 수행할 요소를 지정합니다.
Point.Add 노드는 action-type 노드이므로 구문이 조금 다르게 작동합니다.
입력은 (1) point 와 여기에 추가할 (2) vector 입니다. Code Block 에서는 점(항목)의 이름을 “pt” 로 지정했습니다. *“vec”*라는 벡터를 “pt” 에 추가하려면 pt.Add(vec) 또는 thing, dot, action이라고 씁니다. Add 작업에는 입력이 하나만 있거나 Point.Add 노드의 모든 입력에서 첫 번째 입력을 뺀 입력이 포함됩니다. Point.Add 노드에 대한 첫 번째 입력은 점 자체입니다.
query-type 메서드는 객체의 특성을 가져옵니다. 객체 자체가 입력이므로 입력을 지정할 필요가 없습니다. 괄호는 필요하지 않습니다.
노드를 사용하는 레이싱은 code block을 사용하는 레이싱과 약간 다릅니다. 노드를 사용할 경우 사용자는 노드를 마우스 오른쪽 버튼으로 클릭하고 수행할 레이싱 옵션을 선택하면 됩니다. code block을 사용할 경우에는 사용자가 데이터 구성 방법을 보다 강력하게 제어할 수 있습니다. code block 줄임 메서드에서는 복제 가이드 를 사용하여 여러 1차원 리스트를 쌍으로 연결하는 방법을 설정합니다. "<>" 꺾쇠괄호로 묶은 숫자를 통해 내포된 결과 리스트의 계층(<1>,<2>,<3> 등)이 정의됩니다.
이 예에서는 두 개의 범위를 정의하는 줄임 메서드를 사용합니다(이 장의 다음 섹션에서 줄임 메서드에 대해 좀 더 자세히 설명함). 간단히 말해
0..1;
은{0,1}
과 동일하며-3..-7
은{-3,-4,-5,-6,-7}
과 동일합니다. 결과적으로 x 값 2개와 y 값 5개가 표시됩니다. 이러한 불일치 리스트에서 복제 가이드를 사용하지 않는 경우 최단 리스트의 길이에 해당하는 두 점의 리스트가 표시됩니다. 복제 가이드를 사용하여 2개 및 5개 좌표의 가능한 모든 조합(또는 외적)을 찾을 수 있습니다.Point.ByCoordinates
(x_vals<1>,y_vals<2>);
구문을 사용하면 각 리스트에 5 개의 항목이 포함된 2 개의 리스트를 얻게 됩니다.Point.ByCoordinates
(x_vals<2>,y_vals<1>);
구문을 사용하면 각 리스트에 2 개의 항목이 포함된 5 개의 리스트를 얻게 됩니다.
이 표기법을 사용하여 주요 리스트(5개 항목으로 구성된 2개 리스트 또는 2개 항목으로 구성된 5개 리스트)를 지정할 수도 있습니다. 이 예에서 복제 가이드의 순서를 변경하여 그리드 내의 점 행 리스트나 그리드 내의 점 열 리스트를 포함하는 결과를 생성합니다.
위의 code block 메서드에 익숙해지는 데 다시 시간이 걸릴 수 있지만 Dynamo에는 프로세스를 보다 쉽게 만들어주는 "Node to Code"라는 기능이 있습니다. 이 기능을 사용하려면 Dynamo 그래프에서 노드 배열을 선택하고 캔버스를 마우스 오른쪽 버튼으로 클릭한 다음, "Node to Code"를 선택합니다. Dynamo에서는 이러한 노드를 입출력을 모두 포함하는 하나의 code block으로 축소했습니다. 이 기능은 code block을 학습하는 데 유용한 도구일 뿐만 아니라 보다 효율적인 파라메트릭 Dynamo 그래프를 사용하여 작업할 수 있도록 합니다. "Node to Code"를 사용하여 아래의 연습을 마무리할 예정이므로 이 내용을 빼먹지 마십시오.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
code block의 효과를 표시하기 위해 기존 어트랙터 필드 정의를 code block 형식으로 변환하려고 합니다. 기존 정의로 작업하면 code block이 시각적 스크립팅과 어떻게 연관되는지 알 수 있으며 DesignScript 구문을 배우는 데 도움이 됩니다.
먼저 위 이미지의 정의를 다시 작성하거나 샘플 파일을 엽니다.
Point.ByCoordinates의 레이싱이 외적 으로 설정되어 있습니다.
그리드의 각 점이 참조점까지의 거리를 기준으로 Z 방향으로 위로 이동합니다.
표면이 다시 작성되고 두꺼워지면서 참조점까지의 거리를 기준으로 형상에 돌출이 작성됩니다.
가장 첫 단계로, Point.ByCoordinates
(x,y,0);
참조점을 먼저 정의해 보겠습니다. 참조점 노드 맨 위에 지정된 것과 동일한 Point.ByCoordinates 구문을 사용합니다.슬라이더를 사용하여 동적으로 업데이트할 수 있도록 변수 x 및 y 가 Code Block 에 삽입됩니다.
-50에서 50까지의 범위에 해당하는 Code Block 입력에 슬라이더 를 추가합니다. 이렇게 하면 기본 Dynamo 그리드에 걸쳐 나타낼 수 있습니다.
Code Block의 두 번째 줄에서는 Number Sequence 노드를 대치할 축약형
coordsXY = (-50..50..#11);
을 정의합니다. 이 내용은 다음 섹션에서 자세히 살펴보겠습니다. 지금은 일단 이 줄임 코드가 시각적 스크립트의 Number Sequence 노드와 동일하다는 것만 이해합니다.
이제 coordsXY 시퀀스에서 점의 그리드를 작성하려고 합니다. 이렇게 하려면 Point.ByCoordinates 구문을 사용해야 하지만, 시각적 스크립트에서 수행한 것과 동일한 방식으로 리스트의 _외적_도 시작해야 합니다. 이를 위해
gridPts = Point.ByCoordinates(coordsXY<1>,coordsXY<2>,0);
줄을 입력합니다. 꺾쇠괄호는 외적 참조를 나타냅니다.Watch3D 노드에는 Dynamo 그리드를 가로지르는 점 그리드가 있습니다.
이제 다소 까다롭지만 참조점까지의 거리를 기준으로 점 그리드를 위로 이동하려고 합니다. 먼저 이 새 점 세트를 transPts 라고 지정합니다. 변환은 기존 요소에 대한 작업이므로
Geometry.Translate...
를 사용하는 대신,gridPts.Translate
를 사용합니다.캔버스의 실제 노드에서 읽으면 3개의 입력이 있는 것을 알 수 있습니다. 해당 요소에 대해 작업을 수행하고 있으므로(gridPts.Translate 사용) 변환할 형상은 이미 선언되어 있습니다. 나머지 두 입력은 함수 direction 및 distance 의 괄호 안에 삽입됩니다.
방향은 충분히 단순하므로
Vector.ZAxis()
를 사용하여 수직으로 이동합니다.여전히 참조점과 각 그리드 점 사이의 거리를 계산해야 하므로 이 작업을 참조점에 대한 작업과 동일한 방식으로 수행합니다.
refPt.DistanceTo(gridPts)
코드의 마지막 줄은 변환된 점을 반환합니다.
transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));
이제 Nurbs 표면을 작성하기 위한 적절한 데이터 구조를 가진 점 그리드가 있습니다.
srf = NurbsSurface.ByControlPoints(transPts);
를 사용하여 표면을 구성합니다.
마지막으로, 표면에 깊이를 추가하기 위해
solid = srf.Thicken(5);
을 사용하여 솔리드를 구성합니다. 이 경우 코드에서 표면을 5개 단위씩 두껍게 만들었지만 항상 이 값을 변수로 선언한 다음(예: thickness로 지칭) 슬라이더를 사용하여 해당 값을 제어할 수 있습니다.
"Node to Code" 기능은 방금 버튼 클릭으로 완료한 전체 연습을 자동화합니다. 이 기능은 사용자 정의 및 재사용 가능한 code block을 작성하는 데 유용할 뿐만 아니라 Dynamo에서 스크립팅하는 방법을 배울 수 있는 매우 유용한 도구이기도 합니다.
연습의 1단계에서 사용했던 기존 시각적 스크립트로 시작합니다. 모든 노드를 선택하고 캔버스를 마우스 오른쪽 버튼으로 클릭한 다음, "Node to Code" 를 선택합니다. 아주 간단합니다.
Dynamo에서는 시각적 그래프, 레이싱 및 모든 항목의 문자 기반 버전을 자동화했습니다. 시각적 스크립트에서 이 기능을 테스트하고 code block의 강력한 성능을 활용해보십시오.
code block에는 데이터 관리를 훨씬 더 쉽게 해주는 몇 가지 기본적인 축약 방법이 있습니다. 아래의 기본 사항을 분석하고 이러한 축약형을 데이터 작성 및 조회에 어떻게 사용할 수 있는지 알아보겠습니다.
범위 및 시퀀스를 정의하는 방법을 기본 축약형으로 줄일 수 있습니다. code block으로 숫자 데이터 리스트를 정의하기 위한 ".." 구문을 작성할 때 아래 이미지를 참고하십시오. 이 표기법을 이해한 후에는 숫자 데이터를 정말 효율적으로 작성할 수 있게 됩니다.
이 예에서는 숫자 범위가
beginning..end..step-size;
를 정의하는 기본 Code Block 구문으로 대치됩니다. 숫자로 표현하면0..10..1;
입니다.
0..10..1;
구문은0..10;
과 같습니다. 단계 크기 1은 축약형 표기의 기본값입니다. 따라서0..10;
을 사용하면 단계 크기가 1인 0~10의 시퀀스가 지정됩니다.Sequence 의 예는 최대 15개의 리스트가 아니라, 리스트에 포함된 15개의 값을 원한다는 사실을 나타내기 위해 "#"을 사용한다는 점을 제외하고 비슷합니다. 여기서는
beginning..#ofSteps..step-size:
를 정의합니다. 시퀀스의 실제 구문은0..#15..2
입니다.이번에는 이전 단계의 "#" 을 구문의 "step-size" 부분에 배치합니다. 이제 숫자 범위 는 "beginning" 부터 "end" 까지 걸쳐 있으며, "step-size" 표기법은 여러 개의 값을 둘 사이에 균일하게 분산합니다(
beginning..end..#ofSteps
).
고급 범위를 작성하면 리스트의 리스트를 간단하게 사용할 수 있습니다. 아래 예에서는 1차 범위 표기법에서 변수를 분리한 후 해당 리스트의 다른 범위를 작성합니다.
1. 중첩된 범위를 작성하여 "#"이 있는 표기법과 없는 표기법을 비교합니다. 약간 더 복잡해질 수 있지만 기본 범위와 동일한 논리가 적용됩니다.
2. 1차 범위 내의 임의 위치에서 하위 범위를 정의할 수 있으며, 하위 범위가 2개 있을 수도 있습니다.
3. 범위의 "end" 값을 제어하여 길이가 다른 범위를 더 많이 작성합니다.
논리 연습의 일환으로, 위의 두 축약형을 비교하고, 하위 범위 및 # 표기법에 따라 결과 출력이 어떻게 달라지는지 구문 분석해 봅니다.
또한 축약형을 사용해서 리스트를 만드는 것 외에, 리스트를 즉석에서 작성할 수도 있습니다. 이러한 리스트는 광범위한 요소 유형을 포함할 수 있으며 조회도 가능합니다(리스트는 그 자체가 객체임). 요약하면, Code Block을 통해 대괄호( “꺽쇠괄호”라고도 함)를 사용해서 리스트를 만들고, 리스트의 항목을 조회합니다.
1. 문자열을 사용하여 리스트를 빠르게 작성하고 항목 색인을 사용하여 조회합니다.
2. 변수를 사용해서 리스트를 작성하고, 범위 축약형 표기법을 사용해서 조회합니다.
내포된 리스트로 관리하는 작업도 유사한 프로세스입니다. 리스트 순서를 인식하고 여러 대괄호 세트를 사용해서 명확히 구분합니다.
1. 리스트의 리스트를 정의합니다.
2. 단일 대괄호 표기법으로 리스트를 조회합니다.
3. 이중 대괄호 표기법을 사용하여 항목을 조회합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습에서는 새로운 축약형 기술을 조정하면서 범위 및 수식으로 정의된 달걀 껍질형 표면을 작성합니다. 이 연습에서는 code block과 기존 Dynamo 노드를 동시에 사용하는 방법을 살펴봅니다. 정의를 이해할 수 있도록 Dynamo 노드를 시각적으로 배치하면서, 과도한 데이터 이동 작업에는 code block을 사용합니다.
먼저 위의 노드를 연결하여 표면을 작성해 보겠습니다. 숫자 노드를 사용하여 폭과 길이를 정의하는 대신, 캔버스를 두 번 클릭하고 Code Block에 100;
을 입력합니다.
Code Block에
0..1..#50
을 입력하여 0과 1 사이에 50개 분할 영역으로 구분된 범위를 정의합니다.범위를 Surface.PointAtParameter에 연결합니다. 이 노드에서는 표면 전체에서 0과 1 사이의 u 및 v 값을 사용합니다. Surface.PointAtParameter 노드를 마우스 오른쪽 버튼으로 클릭하여 레이싱을 외적으로 변경해야 합니다.
이 단계에서는 첫 번째 함수를 사용하여 Z에서 위쪽으로 점 그리드를 이동합니다. 이 그리드는 기본 함수를 기준으로 생성된 표면을 구동합니다. 아래 이미지에 표시된 대로 새 노드를 추가합니다.
수식 노드를 사용하는 대신,
(0..Math.Sin(x*360)..#50)*5;
줄이 있는 Code Block을 사용합니다. 빠른 분석을 위해 내부에 수식을 사용하여 범위를 정의합니다. 이 수식은 사인 함수입니다. 사인 함수에는 Dynamo에서 각도 입력이 수신되므로 전체 사인파를 가져오려면 x 값(0에서 1 범위의 입력)에 360을 곱합니다. 다음으로, 각 행의 제어 그리드 점과 동일한 수의 분할을 원하므로 #50을 사용하여 50개의 재분할 영역을 정의합니다. 마지막으로 승수 5는 변환의 진폭을 늘리므로 Dynamo 미리보기에서 결과를 확인할 수 있습니다.
이전 Code Block이 제대로 작동했지만 완전한 파라메트릭은 아니었습니다. 매개변수를 동적으로 구동하려고 하므로, 이전 단계의 줄을
(0..Math.Sin(x*360*cycles)..#List.Count(x))*amp;
로 대치하겠습니다. 이렇게 하면 입력을 기준으로 이러한 값을 정의할 수 있습니다.
0부터 10 사이에서 슬라이더를 변경하면 몇 가지 흥미로운 결과를 얻을 수 있습니다.
숫자 범위에서 행과 열을 바꾸어 커튼 파형의 방향을 반대로 바꿉니다.
transposeList = List.Transpose(sineList);
다음과 같이 sineList 및 tranposeList를 추가하면 왜곡된 달걀 껍질형 표면이 표시됩니다.
eggShellList = sineList+transposeList;
아래에 지정된 슬라이더 값을 변경하여 이 알고리즘의 '파형을 진정'시켜 보겠습니다.
마지막으로, 이 Code Block을 사용하여 분리된 데이터 부분을 조회해 보겠습니다. 특정 점 범위를 사용해서 표면을 재생성하려면 위 code block을 Geometry.Translate와 NurbsSurface.ByPoints 노드 사이에 추가합니다. 여기에는 sineStrips[0..15..1];
텍스트 줄이 있습니다. 이는 50개 중에서 처음 16개의 점 행을 선택합니다. 표면을 재작성하면 점 그리드의 분리된 부분이 생성된 것을 볼 수 있습니다.
마지막 단계에서 이 Code Block을 좀 더 파라메트릭하게 만들기 위해 0에서 1 사이의 슬라이더를 사용하여 조회를 실행합니다.
sineStrips[0..((List.Count(sineStrips)-1)*u)];
코드 줄을 사용하여 이 작업을 수행합니다. 혼란스러워 보일 수 있지만, 이 코드 줄을 사용하면 리스트 길이를 0에서 1 사이의 승수로 빠르게 축척할 수 있습니다.
슬라이더에서 0.53
값을 사용하면 표면이 그리드의 중간점을 지나 작성됩니다.
또한 예상대로 슬라이더에서 1
을 사용하면 표면이 전체 점 그리드에서 작성됩니다.
시각적 그래프를 보면 Code Block을 강조 표시하고 해당 기능을 확인할 수 있습니다.
1. 첫 번째 Code Block은 Number 노드를 대치합니다.
2. 두 번째 Code Block은 Number Range 노드를 대치합니다.
3. 세 번째 Code Block은 Formula 노드(List.Transpose, List.Count 및 Number Range)를 대치합니다.
4. 네 번째 Code Block은 리스트의 리스트를 조회하고 List.GetItemAtIndex 노드를 대치합니다.
도면에 있는 모든 유역의 경계 형상을 가져옵니다.
Dynamo 유형 | 랩 |
---|---|
작업을 완료했습니다!
객체 Autodesk.AutoCAD.DynamoNodes.Object
도면요소 Autodesk.AutoCAD.DatabaseServices.Entity
CivilObject Autodesk.Civil.DynamoNodes.CivilObject
도면요소 Autodesk.Civil.DatabaseServices.Entity
사과가 무슨 색인가? | Apple.color | 빨간색 |
사과가 잘 익었는가? | Apple.isRipe | true |
사과 무게는 어떻게 되는가? | Apple.weight | 6oz |
사과가 어디에서 왔는가? | Apple.parent | 트리 |
사과에서 만들어지는 것은 무엇인가? | Apple.children | seeds |
이 사과는 현지에서 키운 것인가? | Apple.distanceFromOrchard | 60mi. |
계산 방식 설계의 객체는 최종 위치와 형태로 명시적으로 작성되는 경우가 드물며, 기존 형상을 기준으로 변환하고 회전되고 배치되는 경우가 많습니다. 벡터 수학은 형상에 방향을 지정할 뿐 아니라 시각적 표현 없이 3D 공간을 통한 이동을 개념화할 수 있는 일종의 기하학적 비계 역할을 합니다.
가장 기본적인 위치에서는 벡터가 3D 공간에서의 위치를 나타내며 종종 위치(0, 0, 0)에서 해당 위치까지의 화살표 끝점으로 간주됩니다. 벡터는 ByCoordinates 생성자로 작성될 수 있으며 새로 작성된 벡터 객체의 x, y 및 z 위치를 사용합니다. 벡터 객체는 기하학적 객체가 아니므로 Dynamo 창에 나타나지 않습니다. 하지만 새로 작성하거나 수정한 벡터에 대한 정보를 콘솔 창에 출력할 수 있습니다.
일련의 수학 연산이 벡터 객체에 대해 정의되어 있으므로, 1D 공간의 숫자 행에서 실수를 이동하는 것처럼 3D 공간에서 객체에 대해 추가, 빼기, 곱하기 또는 이동을 수행할 수 있습니다.
벡터 추가는 두 벡터의 구성요소 합계로 정의되며, 두 구성요소 벡터 화살표가 "꼬리 끝"에 배치된 경우 결과 벡터로 간주될 수 있습니다. 벡터 추가는 Add 메서드를 사용하여 수행되며 왼쪽 다이어그램으로 표시됩니다.
마찬가지로, Subtract 메서드를 사용해서 두 개의 벡터 객체를 서로에게서 뺄 수 있습니다. 벡터 빼기는 첫 번째 벡터에서 두 번째 벡터로의 방향으로 간주될 수 있습니다.
벡터 곱하기는 벡터의 끝점을 주어진 축척 비율만큼 해당 방향으로 이동하는 것으로 생각할 수 있습니다.
보통 결과 벡터의 길이가 축척된 크기와 정확히 동일해지도록 벡터의 축척을 조정하는 것이 좋습니다. 이는 먼저 벡터를 정규화하여, 즉 벡터의 길이를 정확히 1로 설정할 수 있습니다.
c는 여전히 (1, 2, 3)과 동일한 방향을 가리키지만, 길이는 정확히 5가 되었습니다.
벡터 수학에는 두 가지 추가 메서드가 있는데, 이러한 메서드는 1D 수학과 명확히 평행은 아닌 외적 및 내적입니다. 외적은 두 개의 기존 벡터에 대해 90도로 직교하는 벡터를 생성하는 방법입니다. 예를 들어, x축과 y축의 외적은 z축이지만 두 입력 벡터가 서로 직교할 필요는 없습니다. 외적 벡터는 Cross 메서드로 계산합니다.
벡터 수학의 추가적인 고급 함수는 내적입니다. 두 벡터 사이의 내적은 두 벡터 사이의 각도와 정확하지는 않지만 관련이 있는 실수(Vector 객체가 아님)입니다. 내적의 유용한 특성 중 하나는 두 벡터가 수직인 경우에만 두 벡터 사이의 내적이 0이 된다는 것입니다. 내적은 Dot 메서드로 계산합니다.
Dynamo가 다양한 복합 형상 형태를 작성할 수 있지만, 간단한 기하학적 원형은 모든 계산 방식 설계의 토대를 형성합니다. 이는 최종 설계 형태로 직접 표현되거나 보다 복잡한 형상이 생성되는 비계로 사용됩니다.
CoordinateSystem은 반드시 형상의 일부는 아니지만 형상을 생성하기 위한 중요한 도구입니다. CoordinateSystem 객체는 회전, 방향 및 축척 등의 위치 및 형상 변환을 모두 추적합니다.
회전, 축척 또는 방향 전환 없이 한 점(x = 0, y = 0, z = 0)을 중심으로 CoordinateSystem을 작성하려면 ID 생성자를 호출하기만 하면 됩니다.
형상 변환이 있는 CoordinateSystem은 이 장의 범위를 벗어나지만 다른 생성자를 사용하여 특정 지점에서 CoordinateSystem.ByOriginVectors 라는 좌표계를 작성할 수 있습니다.
가장 간단한 기하학적 원형은 3D 공간에서 0차원 위치를 나타내는 점입니다. 앞에서 설명한 것처럼 특정 좌표계에서 점을 작성하는 여러 가지 방법이 있습니다. Point.ByCoordinates 는 지정된 X, Y 및 Z 좌표를 사용하여 점을 작성하고 Point.ByCartesianCoordinates 는 특정 좌표계에서 지정된 X, Y 및 Z 좌표를 사용하여 점을 작성합니다. Point.ByCylindricalCoordinates 는 반지름, 회전 각도 및 높이를 갖는 원통에 놓여 있는 점을 작성하고, Point.BySphericalCoordinates 는 반지름 및 2개의 회전 각도가 있는 구에 놓여 있는 점을 작성합니다.
이 예는 다양한 좌표계에서 작성된 점을 보여줍니다.
그 다음으로 높은 차원의 Dynamo 원형은 두 끝점 사이의 무한한 수의 점을 나타내는 선 세그먼트입니다. 생성자 Line.ByStartPointEndPoint 로 두 개의 경계점을 명시적으로 지정하거나 해당 방향에서 시작점, 방향 및 길이(Line.ByStartPointDirectionLength)를 지정하여 선을 작성할 수 있습니다.
Dynamo에는 3D로 만든 기하학적 원형의 가장 기본적인 유형을 나타내는 객체가 있습니다. 예를 들어 직육면체는 Cuboid.ByLengths 로 작성되고, 원추는 Cone.ByPointsRadius 및 Cone.ByPointsRadii 로 작성됩니다. 원통은 Cylinder.ByRadiusHeight 로 작성되고, 구는 Sphere.ByCenterPointRadius 로 작성됩니다.
계산 방식 설계에서 곡선과 표면은 후속 형상을 구성하기 위한 기본 비계로 자주 사용됩니다. 이러한 초기 형상을 이후 형상의 기반으로 사용하려면 스크립트는 객체의 전체 영역에서 위치 및 방향 등의 품질을 추출할 수 있어야 합니다. 곡선과 표면 모두 이러한 추출을 지원하는데, 이를 매개변수화라고 합니다.
곡선의 모든 점은 0에서 1 사이의 고유한 매개변수를 갖는 것으로 간주될 수 있습니다. 여러 제어점이나 보간된 점을 기준으로 NurbsCurve를 작성하려는 경우 첫 번째 점은 매개변수 0이 되고 마지막 점은 매개변수 1이 됩니다. 정확히 어떤 매개변수가 중간점인지 미리 알 수는 없습니다. 이러한 상황은 심각한 제한 사항처럼 들릴 수 있지만, 이는 일련의 유틸리티 함수를 통해 완화될 수 있습니다. 표면의 매개변수화는 곡선과 유사하지만, 표면에는 하나의 매개변수 대신 u 및 v라는 두 개의 매개변수개가 있습니다. 다음 점을 사용하여 표면을 작성하려는 경우:
p1에는 매개변수 u = 0 v = 0을 지정하고, p9에는 매개변수u = 1 v = 1을 지정할 수 있습니다.
매개변수화는 곡선을 생성하는 데 사용되는 점을 결정할 때는 별로 유용하지 않습니다. 매개변수화의 주요 용도는 중간점이 NurbsCurve 및 NurbsSurface 생성자로 생성된 경우 위치를 결정하는 것입니다.
곡선에는 0에서 1 사이의 단일 실수 인수를 사용하여 해당 매개변수에서 Point 객체를 반환하는 PointAtParameter 메서드가 있습니다. 예를 들어 이 스크립트는 매개변수 0, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1에서 점을 찾습니다.
마찬가지로 표면에는 생성된 점의 u 및 v 매개변수인 두 개의 인수를 사용하는 PointAtParameter 메서드가 있습니다.
곡선과 표면의 개별 점을 추출하는 것이 유용할 수 있지만, 스크립트에서는 곡선 또는 표면이 향하는 방향과 같은 매개변수의 특정 기하학적 특성을 지정해야 하는 경우가 많습니다. CoordinateSystemAtParameter 메서드는 해당 위치 뿐만 아니라 곡선이나 표면의 매개변수에서 방향이 지정된 CoordinateSystem을 찾습니다. 예를 들어 다음 스크립트는 회전된 표면을 따라 방향이 지정된 CoordinateSystem을 추출하고, CoordinateSystems의 방향을 사용하여 표면에 수직으로 진행되는 선을 생성합니다.
앞서 설명한 대로 매개변수화가 곡선이나 표면의 길이를 따라 항상 균일한 것은 아닙니다. 즉, 매개변수 0.5가 항상 중간점에 해당하지는 않으며 0.25가 항상 곡선 또는 표면에서 1/4 위치에 있는 점에 해당하는 것은 아닙니다. 이러한 제한을 해결할 수 있도록 곡선에는 곡선을 따라 특정 길이의 점을 찾을 수 있는 추가 매개변수화 명령 세트가 있습니다.
NurbsCurve의 2D 아날로그는 NurbsSurface입니다. 자유형 NurbsCurve와 마찬가지로 NurbsSurface는 두 가지 기본 방법으로 생성할 수 있습니다. 기준점 세트를 입력하고 Dynamo에서 사이를 보간하도록 하거나, 표면의 제어점을 명시적으로 지정할 수 있습니다. 또한 자유형 곡선과 마찬가지로, 보간된 표면은 설계자가 표면에 필요한 모양을 정확하게 파악하고 있거나 설계에서 표면이 제약 조건 점을 통과해야 하는 경우에 유용합니다. 반면에 제어점으로 작성된 표면은 예비 설계의 다양한 다듬기 수준에서 더 유용할 수 있습니다.
보간된 표면을 작성하려면 표면의 모양을 대략적으로 나타내는 2D 점 모음을 생성하기만 하면 됩니다. 이 모음은 톱니 모양이 아닌 직사각형이어야 합니다. NurbsSurface.ByPoints 메서드는 이러한 점에서 표면을 생성합니다.
표면의 기본 제어점을 지정하여 자유형 NurbsSurface를 작성할 수도 있습니다. NurbsCurve와 마찬가지로, 제어점은 표면의 차수에 따라 최종 표면 형태로 완화되는 직선 세그먼트로 사각형 메쉬를 나타내는 것으로 간주할 수 있습니다. 제어점으로 NurbsSurface를 작성하려면 표면의 양방향에서 기본 곡선의 각도를 나타내는 두 개의 추가 매개변수를 NurbsSurface.ByPoints 에 포함합니다.
다음과 같이 NurbsSurface의 각도를 늘려 결과 표면 형상을 변경할 수 있습니다.
입력 점 세트 간을 보간하여 표면을 작성할 수 있는 것처럼 기준 곡선 세트 간에 보간하여 표면을 작성할 수 있는데, 이를 로프트라고 합니다. 로프트된 곡선은 입력 곡선의 모음을 유일한 매개변수로 사용하여 Surface.ByLoft 생성자를 통해 작성됩니다.
회전 표면은 중심 축 주위로 기준 곡선을 스윕하여 작성된 추가적인 표면 유형입니다. 보간된 표면이 보간된 곡선의 2D 아날로그라면 회전 표면은 원 및 호의 2D 아날로그입니다.
회전 표면은 기준 곡선(표면의 "모서리"를 나타냄), 축 원점(표면의 기준점), 축 방향(중심 "코어" 방향), 스윕 시작 각도와 끝 각도에 의해 지정됩니다. 이러한 항목은 Surface.Revolve 생성자의 입력으로 사용됩니다.
Dynamo에는 자유형 곡선을 만드는 두 가지 기본적인 방법이 있습니다. 점 모음을 지정하고 Dynamo에서 점 간에 부드러운 곡선을 보간하도록 하거나, 특정 차수 곡선의 기본 제어점을 지정하는 보다 쉬운 방법을 사용할 수 있습니다. 보간된 곡선은 설계자가 필요한 선의 형태를 정확히 알고 있거나 설계에 곡선이 통과할 수 있는 경우와 통과할 수 없는 경우에 대한 특정 구속조건이 있을 때 유용합니다. 제어점을 통해 지정된 곡선은 본질적으로 알고리즘이 최종 곡선 형태로 부드럽게 연결되는 일련의 직선 세그먼트입니다. 제어점을 통해 곡선을 지정하면 다듬기 차수가 다양한 곡선 형태를 살펴보거나, 곡선 세그먼트 간에 매끄럽게 연결되어야 하는 경우에 유용할 수 있습니다.
보간된 곡선을 작성하려면 점 모음을 NurbsCurve.ByPoints 메서드에 전달하기만 하면 됩니다.
생성된 곡선은 각각 모음의 첫 번째 점과 마지막 점에서 시작하고 끝나는 각 입력 점과 교차합니다. 선택적 주기 매개변수를 사용하여 닫힌 주기 곡선을 작성할 수 있습니다. Dynamo가 누락된 세그먼트를 자동으로 채우므로 중복된 끝점(시작점과 동일)은 필요하지 않습니다.
NurbsCurve는 많은 부분 동일한 방식으로 생성됩니다. 입력 점이 직선 세그먼트의 끝점을 나타내고, 두 번째 매개변수가 차수*라고 하는 곡선에 적용되는 다듬기의 정도와 유형을 지정합니다. 차수가 1인 곡선은 다듬기가 없고 폴리선이 됩니다.
차수가 2인 곡선은 폴리선 세그먼트의 중간점과 교차하고 접하도록 매끄럽게 표시됩니다.
Dynamo는 차수 20까지 NURBS(비균일 유리 B-스플라인) 곡선을 지원하며, 다음 스크립트는 다듬기 수준을 늘릴 경우 곡선 모양에 미치는 영향을 보여줍니다.
곡선의 차수보다 적어도 하나 더 많은 제어점이 있어야 합니다.
제어 정점으로 곡선을 생성할 때의 또 다른 이점은 개별 곡선 세그먼트 간에 접선을 유지할 수 있다는 것입니다. 마지막 두 제어점 사이의 방향을 추출하고, 다음 곡선의 처음 두 제어점으로 이 방향을 계속 진행하는 방식으로 이 작업을 수행할 수 있습니다. 다음 예에서는 곡선을 부드럽게 하여 별도의 NURBS 곡선을 두 개 작성합니다.
*위 내용은 NURBS 곡선 형상에 대한 매우 간단한 설명입니다. 더 정확하고 자세한 내용은 참고 문헌에서 Potmann, et al, 2007을 참고하십시오.
데이터 유형 | 표준 Dynamo | 해당하는 Code Block 항목 |
숫자 |
문자열 |
시퀀스 |
범위 |
색인의 항목 가져오기 |
리스트 작성 |
문자열 연결 |
조건문 |
노드 | 해당하는 Code Block 항목 | 주 |
모든 연산자(+, &&, >=, Not 등) | +, &&, >=, ! 등 | “Not”은 “!”가 되지만 "Factorial"과 구분하기 위해 노드를 "Not"으로 지칭합니다. |
Boolean True | true; | 소문자입니다. |
Boolean False | false; | 소문자입니다. |
3D 공간에서 x, y, z 좌표를 명시적으로 지정하여 특정 형상 객체를 작성할 수 있습니다. 그러나 형상은 객체 자체 또는 기본 CoordinateSystem에서 기하학적 변환을 사용하여 최종 위치로 이동되는 경우가 더 많습니다.
가장 간단한 기하학적 변환은 x, y, z 방향으로 지정된 단위 수만큼 객체를 이동하는 전환입니다.
Dynamo의 모든 객체는 .Translate 메서드를 객체 이름의 끝에 추가하여 변환할 수 있지만, 좀 더 복잡한 변환은 기본 CoordinateSystem에서 새 CoordinateSystem으로 객체를 변환해야 합니다. 예를 들어 객체를 x축을 중심으로 45도 회전하려면 객체를 회전 없는 기존 CoordinateSystem에서 .Transform 메서드를 사용하여 x축을 중심으로 45도 회전한 CoordinateSystem으로 변환해야 합니다.
CoordinateSystem은 변환 및 회전뿐 아니라 축척 또는 전단이 조정되어 작성될 수도 있습니다. CoordinateSystem은 다음과 같이 .Scale 메서드로 축척할 수 있습니다.
전단된 CoordinateSystem은 직교하지 않는 벡터를 CoordinateSystem 생성자에 입력하여 작성합니다.
축척 및 전단은 회전 및 변환보다 비교적 더 복잡한 기하학적 변환이므로 모든 Dynamo 객체가 이러한 변환을 거치는 것은 아닙니다. 다음 표는 균일하지 않게 축척이 조정된 CoordinateSystem 및 전단된 CoordinateSystem이 있을 수 있는 Dynamo 객체를 간략하게 설명합니다.
지금까지 많은 예는 더 낮은 차원의 객체에서 더 높은 차원의 형상을 생성하는 데 초점을 맞추었습니다. 교차 메서드를 사용하면 더 높은 차원의 형상에서 더 낮은 차원의 객체를 생성할 수 있으며, 자르기 및 선택 자르기 명령을 사용하면 기하학적 형태가 작성된 후에 스크립트를 통해 세밀하게 수정할 수 있습니다.
Intersect 메서드는 Dynamo의 모든 형상 조각에 대해 정의됩니다. 즉, 이론상 모든 형상 조각은 다른 형상 조각과 교차할 수 있습니다. 물론 결과 객체가 항상 입력 점 자체가 되는 점 관련 교차처럼, 일부 교차의 경우에는 의미가 없을 수 있습니다. 객체 간의 가능한 다른 교차 조합은 다음 차트에 설명되어 있습니다. 또한 이 차트에는 다양한 교차 작업의 결과도 나와 있습니다.
다음의 간단한 예는 평면과 NurbsSurface의 교차점을 보여줍니다. 교차는 다른 모든 NurbsCurve처럼 사용할 수 있는 NurbsCurve 배열을 생성합니다.
Trim 메서드는 거의 모든 형상 조각에 정의된다는 점에서 Intersect 메서드와 매우 유사합니다. 그러나 _Intersect_보다 _Trim_에 훨씬 더 많은 제한이 있습니다.
Trim 메서드에서 유의할 사항은 삭제할 형상 및 유지할 조각을 결정하는 "선택" 점이 필요하다는 것입니다. Dynamo는 선택 점에서 가장 가까운 잘린 형상을 찾아서 이를 버립니다.
Python은 널리 사용되는 프로그래밍 언어로, 구문 스타일 때문에 인기가 높습니다. 판독 가능성이 뛰어나므로 다른 여러 언어보다 쉽게 배울 수 있습니다. Python은 모듈 및 패키지를 지원하며 기존 응용프로그램에 포함될 수 있습니다. Python을 시작하고 실행하는 방법에 대한 자세한 내용은 의 페이지에서 확인할 수 있습니다.
Intersect, Trim 및 _SelectTrim_은 주로 점, 곡선 및 표면과 같은 낮은 차원의 형상에서 사용됩니다. 반면에 솔리드 형상에는 구성 후 형태를 수정하는 추가 메서드 세트가 있습니다. 이러한 메서드는 Trim 과 비슷한 방식으로 재료를 빼고 요소를 함께 결합하여 더 큰 전체 구조를 형성합니다.
Union 메서드는 두 개의 솔리드 객체를 사용하고 두 객체가 차지하는 공간 외부에 단일 솔리드 객체를 작성합니다. 객체 사이의 겹치는 공간은 최종 형태로 결합됩니다. 이 예에서는 구와 직육면체를 단일 솔리드 구-정육면체 모양으로 결합합니다.
Trim 과 같은 Difference 메서드는 기준 솔리드에서 입력 도구 솔리드의 콘텐츠를 뺍니다. 이 예에서는 구가 약간 안으로 잘립니다.
Intersect 메서드는 두 개의 솔리드 입력 사이에서 겹치는 솔리드를 반환합니다. 다음 예에서는 Difference 가 Intersect 로 변경되었으며 결과 솔리드는 처음에 잘린 누락된 보이드입니다.
다음 Python 스크립트는 몇 가지 예에서 점 배열을 생성합니다. 이러한 스크립트는 다음과 같이 Python 스크립트 노드에 붙여 넣어야 합니다.
python_points_1
python_points_2
python_points_3
python_points_4
python_points_5
Dynamo에서 Python 스크립트를 사용하는 방법에 대해 설명했으므로 이제 Revit 라이브러리를 스크립팅 환경에 연결하는 방법을 살펴보겠습니다. 아래의 code block에서 처음 네 줄을 포함하는 Python Standard 및 Dynamo 코어 노드를 가져왔습니다. Revit 노드, Revit 요소 및 Revit 문서 관리자를 가져오려는 경우 다음과 같은 일부 코드 줄만 추가하면 됩니다.
이렇게 하면 Revit API에 액세스할 수 있으며 모든 Revit 작업에 대한 사용자 스크립트가 제공됩니다. 시각적 프로그래밍 프로세스와 Revit API 스크립팅을 결합하면 공동 작업 및 도구 개발이 크게 개선됩니다. 예를 들어 BIM 관리자와 구조도 설계자는 동일한 그래프에서 함께 작업할 수 있습니다. 이러한 공동 작업을 통해 모델의 설계 및 실행을 개선할 수 있습니다.
새로운 Revit 프로젝트를 작성합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습에서는 Dynamo for Revit의 기본적인 Python 스크립트를 살펴볼 것입니다. 이 연습은 Revit 파일 및 요소 처리, Revit과 Dynamo 간의 커뮤니케이션 등에 중점을 둡니다.
이는 Dynamo 세션에 링크된 Revit 파일의 doc, uiapp 및 _app_을 검색하기 위해 미리 마련된 메서드입니다. 이전에 Revit API에서 작업해본 적이 있는 프로그래머는 감시 리스트의 항목을 알아차릴 수도 있습니다. 이러한 항목이 익숙하지 않더라도 아래의 연습에서 다른 예시를 사용하므로 괜찮습니다.
Dynamo에서 Revit 서비스를 가져오고 문서 데이터를 검색하는 방법은 다음과 같습니다.
Dynamo의 Python 노드를 살펴봅니다. 아래에서 코드를 찾을 수도 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습에서는 Dynamo Python 노드를 사용하여 Revit에서 간단한 모델 곡선을 작성하겠습니다.
Revit에서 새로운 개념 매스 패밀리를 작성하여 시작합니다.
개념 매스 폴더 를 열고 Metric Mass.rft 템플릿 파일을 사용합니다.
Revit에서 키보드 단축키 un
을 사용하여 프로젝트 단위 설정을 표시하고 길이 단위를 미터로 변경합니다.
Dynamo를 시작하고 아래 이미지의 노드 세트를 작성합니다. 먼저 Dynamo 노드에서 Revit에 두 개의 참조점을 작성합니다.
Code Block을 작성하고 값을
"0;"
으로 지정합니다.이 값을 X, Y 및 Z 입력에 대한 ReferencePoint.ByCoordinates 노드에 연결합니다.
단계 크기가 1인 -100에서 100 사이의 슬라이더를 3개 작성합니다.
각 슬라이더를 ReferencePoint.ByCoordinates 노드에 연결합니다.
Python 노드를 작업공간에 추가하고, 노드에서 "+" 버튼을 클릭하여 다른 입력을 추가한 후 두 참조점을 각 입력에 연결합니다. Python 노드를 엽니다.
Dynamo의 Python 노드를 살펴봅니다. 아래에서 전체 코드를 찾습니다.
System.Array: Revit에는 입력으로 Python 리스트가 아닌 시스템 배열이 필요합니다. 이 경우 코드 줄이 1개 더 추가될 뿐이지만 인수 유형에 신경 쓰면 Revit에서 Python 프로그래밍을 쉽게 처리할 수 있습니다.
Dynamo에서 Python을 사용하여 하나의 선으로 연결된 참조점 두 개를 작성했습니다. 다음 연습에서 좀 더 자세히 살펴보겠습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습은 간단하지만, Revit에서 Dynamo로, 그리고 그 반대로 데이터와 형상을 연결하는 항목을 이해하는 데 도움이 됩니다. 먼저 Revit-StructuralFraming.rvt를 열어 보겠습니다. 이 파일이 열리면 Dynamo를 시작하고 Revit-StructuralFraming.dyn 파일을 엽니다.
이 Revit 파일에는 기본적인 내용이 포함됩니다. 2개의 참조 곡선(레벨 1에 1개, 레벨 2에 1개)이 그려집니다. 이러한 곡선을 Dynamo로 가져와 라이브 링크를 유지하려고 합니다.
이 파일에는 Python 노드의 5개 입력에 연결된 노드 세트가 있습니다.
Select Model Element Nodes: 각각에 대해 선택 버튼을 누르고 Revit에서 해당 곡선을 선택합니다.
Code Block:
0..1..#x;
, 구문을 사용하여 0에서 20 사이의 정수 슬라이더를 x 입력에 연결합니다. 이렇게 하면 두 곡선 사이에 그릴 빔 수가 지정됩니다.Structural Framing Types: 드롭다운 메뉴에서 기본 W12x26 빔을 선택합니다.
Levels: "레벨 1"을 선택합니다.
Python의 이 코드는 약간 더 조밀하지만, 코드 내의 해설에 프로세스에서 발생하는 상황이 설명되어 있습니다.
Revit에는 두 곡선을 구조적 요소로 스패닝하는 빔 배열이 있습니다. 참고: 이는 실제 예가 아닙니다. 해당 구조적 요소는 Dynamo에서 작성된 기본 Revit 인스턴스의 예로 사용됩니다.
Dynamo에서는 결과도 볼 수 있습니다. Watch3D 노드의 빔은 Revit 요소에서 조회된 형상을 나타냅니다.
Revit 환경에서 Dynamo 환경으로 데이터를 변환하는 프로세스가 지속됩니다. 요약하면 프로세스가 진행되는 방식은 다음과 같습니다.
Revit 요소 선택
Revit 요소를 Dynamo 곡선으로 변환
Dynamo 곡선을 일련의 Dynamo 점으로 분할
두 곡선 사이의 Dynamo 점을 사용하여 Dynamo 선 작성
Dynamo 선을 참조하여 Revit 빔 작성
Revit 빔의 형상을 조회하여 Dynamo 표면 출력
이 작업은 약간 까다로워 보일 수 있지만 스크립트를 사용하면 Revit에서 곡선을 편집하고 솔버를 다시 실행하는 것만큼 간단해집니다(단, 이렇게 하는 경우 이전 빔을 삭제해야 할 수도 있음). 이는 Python에서 빔을 배치하여 OOTB 노드에 있는 연결이 끊어지기 때문입니다.
Revit에서 참조 곡선을 업데이트하여 새로운 빔 배열을 얻게 됩니다.
Dynamo의 시각적 프로그래밍 환경에서 텍스트 프로그래밍을 사용하는 이유는 무엇입니까? 은 장점이 많습니다. 직관적인 시각적 인터페이스에서 특수 구문을 학습하지 않고도 프로그램을 작성할 수 있습니다. 그러나 시각적 프로그램은 다소 복잡해 보일 수 있으며, 경우에 따라 기능이 부족할 수 있습니다. 예를 들어, Python에서는 조건문(if/then)을 작성하고 순환하기 위한 보다 효율적인 메서드를 제공합니다. Python은 Dynamo의 기능을 확장하고 여러 노드를 간단한 몇 개의 코드 줄로 바꿀 수 있게 해주는 강력한 도구입니다.
시각적 프로그램:
텍스트 프로그램:
code block과 마찬가지로 Python 노드는 시각적 프로그래밍 환경 내의 스크립팅 인터페이스입니다. Python 노드는 라이브러리의 스크립트>편집기>Python 스크립트에서 찾을 수 있습니다.
노드를 두 번 클릭하면 Python 스크립트 편집기가 열립니다. 노드를 마우스 오른쪽 버튼으로 클릭하고 편집... 을 선택할 수도 있습니다. 상단에 상용구가 몇 가지 있습니다. 이 텍스트는 필요한 라이브러리를 참조하는 데 유용합니다. 입력 내용은 IN 배열에 저장됩니다. 값을 OUT 변수에 지정하면 Dynamo로 반환됩니다.
메서드로는 ByCoordinates 와 같은 구성자, Add 와 같은 동작, X, Y 및 Z 좌표와 같은 조회 등이 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 예에서는 솔리드 모듈에서 패턴을 작성하는 Python 스크립트를 작성한 후, 사용자 노드로 변환하겠습니다. 먼저, Dynamo 노드를 사용하여 솔리드 모듈을 작성해 보겠습니다.
Rectangle.ByWidthLength: 솔리드의 기반이 될 직사각형을 작성합니다.
Surface.ByPatch: 직사각형을 ‘closedCurve’ 입력에 연결하여 하단 표면을 작성합니다.
Geometry.Translate: code block을 사용해 솔리드의 베이스 두께를 지정하고 직사각형을 ‘geometry’ 입력에 연결하여 위로 이동합니다.
Polygon.Points: 변환된 직사각형을 조회하여 코너 점을 추출합니다.
Geometry.Translate: code block을 사용하여 4개의 점에 해당하는 4개의 값 리스트를 작성하고 솔리드의 한쪽 코너를 위로 변환합니다.
Polygon.ByPoints: 변환된 점을 사용하여 상단 사각형을 다시 구성합니다.
Surface.ByPatch: 다각형을 연결하여 상단 표면을 작성합니다.
상단 표면과 하단 표면이 생겼으므로 두 프로파일 간을 로프트하여 솔리드의 측면을 작성해 보겠습니다.
List.Create: 하단 직사각형 및 상단 다각형을 색인 입력에 연결합니다.
Surface.ByLoft: 두 프로파일을 로프트하여 솔리드의 측면을 작성합니다.
List.Create: 상단, 측면, 하단 표면을 색인 입력에 연결하여 표면 리스트를 작성합니다.
Solid.ByJoinedSurfaces: 표면을 결합하여 솔리드 모듈을 작성합니다.
솔리드가 생겼으므로 Python 스크립트 노드를 작업공간에 배치해 보겠습니다.
노드에 입력을 추가하려면 노드에서 + 아이콘을 클릭합니다. 입력은 리스트의 항목임을 나타낼 수 있도록 IN[0], IN[1] 등으로 이름이 지정됩니다.
먼저 입력과 출력을 정의해 보겠습니다. 노드를 두 번 클릭하여 Python 편집기를 엽니다. 아래 코드에 따라 편집기에서 코드를 수정합니다.
이 코드는 연습을 진행하는 동안 좀 더 적절하게 수정됩니다. 다음으로, 솔리드 모듈을 배열하기 위해 필요한 정보를 고려해야 합니다. 먼저, 변환 거리를 결정하기 위해 솔리드의 치수를 알아야 합니다. 경계 상자 버그 때문에 모서리 곡선 형상을 사용하여 경계 상자를 작성해야 합니다.
Dynamo의 Python 노드를 살펴봅니다. Dynamo의 노드 제목에 표시되는 것과 동일한 구문을 사용하고 있습니다. 아래에서 주석 처리된 코드를 확인하십시오.
솔리드 모듈을 변환 및 회전하는 작업을 둘 다 수행할 예정이므로 Geometry.Transform 작업을 사용해 보겠습니다. Geometry.Transform 노드를 보면 솔리드를 변환하기 위해 소스 좌표계와 대상 좌표계가 필요하다는 사실을 알게 됩니다. 소스는 솔리드의 컨텍스트 좌표계인 한편, 대상은 배열된 각 모듈의 다른 좌표계가 됩니다. 즉, 매번 좌표계를 다르게 변환하려면 x 및 y 값으로 순환해야 합니다.
실행을 클릭한 다음, 코드를 저장합니다. 다음과 같이 Python 노드를 기존 스크립트와 연결합니다.
Python 노드의 첫 번째 입력으로 Solid.ByJoinedSurfaces의 출력을 연결하고 Code Block을 사용하여 다른 입력을 정의합니다.
Topology.Edges 노드를 작성하고 Python 노드의 출력을 입력으로 사용합니다.
마지막으로 Edge.CurveGeometry 노드를 작성하고 Topology.Edges의 출력을 입력으로 사용합니다.
시드 값을 변경하여 다른 패턴을 작성해 보십시오. 다양한 효과를 위해 솔리드 모듈 자체의 매개변수를 변경할 수도 있습니다.
유용한 Python 스크립트를 작성했으므로 이를 사용자 노드로 저장해 보겠습니다. Python 스크립트 노드를 선택하고 작업공간을 마우스 오른쪽 버튼으로 클릭한 다음, '사용자 노드 작성'을 선택합니다.
이름, 설명 및 카테고리를 지정합니다.
그러면 사용자 노드를 편집할 새 작업공간이 열립니다.
Inputs: 입력 이름을 좀 더 알아보기 쉽게 변경하고 데이터 유형 및 기본값을 추가합니다.
Output: 출력 이름 변경
노드를 .dyf 파일로 저장하면 방금 변경한 사항이 사용자 노드에 반영되는 것을 확인할 수 있습니다.
클래스 | 균일하지 않게 축척이 조정된 CoordinateSystem | 전단 CoordinateSystem |
---|---|---|
Dynamo Project 이면의 계획은 플랫폼 구현 범위를 넓히는 것입니다. Dynamo에서 일람표에 프로그램을 추가하면 사용자는 Python 스크립팅 환경에서 플랫폼별 API에 액세스할 수 있습니다. Revit이 이 섹션의 성공 사례에 해당하지만, 앞으로는 다른 플랫폼의 스크립팅에 대한 포괄적인 튜토리얼을 제공하는 더 많은 장이 제공될 예정입니다. 또한 이제 Dynamo로 가져올 수 있는 많은 라이브러리에 액세스할 수 있습니다.
아래의 예는 Python을 사용하여 Dynamo에서 Revit 관련 작업을 구현하는 방법을 보여 줍니다. Dynamo 및 Revit과의 Python 관계에 대한 자세한 검토가 필요한 경우 를 참고하십시오. Python 및 Revit의 또 다른 유용한 리소스는 프로젝트입니다.
Autodesk.DesignScript.Geometry 라이브러리를 사용하면 Code Block과 유사한 점 표기법을 사용할 수 있습니다. Dynamo 구문에 대한 자세한 내용은 뿐만 아니라 를 참조하십시오. 이 PDF 문서를 다운로드하려면 링크를 마우스 오른쪽 버튼으로 클릭하고 "다른 이름으로 링크 저장..."을 선택하십시오. ‘점’과 같은 형상 유형을 입력하면 점을 작성하고 조회하기 위한 메서드 리스트가 표시됩니다.
호
아니요
아니오
NurbsCurve
예
예
NurbsSurface
아니요
아니오
원
아니요
아니오
선
예
예
평면
아니요
아니오
점
예
예
폴리곤
아니요
아니오
솔리드
아니요
아니오
표면
아니요
아니오
문자
아니요
아니요
사용: 점 | 곡선 | 평면 | 표면 | 솔리드 |
위치: 곡선 | 예 | 아니오 | 아니오 | 아니오 | 아니오 |
폴리곤 | - | 아니오 | 예 | 아니오 | 아니오 |
표면 | - | 예 | 예 | 예 | 예 |
솔리드 | - | - | 예 | 예 | 예 |
포함: | 표면 | 곡선 | 평면 | 솔리드 |
표면 | 곡선 | 점 | 점, 곡선 | 표면 |
곡선 | 점 | 점 | 점 | 곡선 |
평면 | 곡선 | 점 | 곡선 | 곡선 |
솔리드 | 표면 | 곡선 | 곡선 | 솔리드 |
입문서의 이 부분은 "모범 사례" 형식으로 구성되어 있습니다. 여기에서는 품질 파라메트릭 워크플로우에 가장 도움이 되는 경험과 연구를 통해, 학습한 몇 가지 전략에 대해 설명합니다. 디자이너 및 프로그래머 입장에서 품질 메트릭은 주로 유지보수 용이성, 신뢰성, 유용성, 도구 효율성 등과 관련이 있습니다. 이러한 모범 사례에는 시각적 또는 텍스트 기반 스크립팅에 대한 구체적인 예가 포함되어 있지만, 기본 원칙은 모든 프로그래밍 환경에 적용될 수 있으며 많은 계산 방식 워크플로우의 기초를 이룰 수 있습니다.
시각적 프로그래밍 프로세스 내에서 작업하는 것은 유용한 크리에이티브 활동일 수 있지만, 작업공간의 복잡성 및/또는 배치 때문에 프로그램 흐름과 핵심 사용자 입력이 빠르게 가려질 수 있습니다. 프로그램 관리를 위한 몇 가지 모범 사례를 살펴보겠습니다.
작업공간에 여러 개의 노드를 추가했으면 명확성을 위해 노드의 배치를 재구성하려고 할 수 있습니다. 둘 이상의 노드를 선택하고 작업공간을 마우스 오른쪽 버튼으로 클릭하면 팝업 창에는 X 및 Y에 맞춤 및 분배 옵션이 있는 선택 항목 정렬 메뉴가 표시됩니다.
둘 이상의 노드를 선택합니다.
작업공간을 마우스 오른쪽 버튼으로 클릭합니다.
선택 항목 정렬 옵션을 사용합니다.
일부 환경에서는 노드 이름을 검토하고 프로그램 흐름에 따라 시각적 프로그램을 "읽을 수" 있습니다. 다양한 경험을 갖춘 사용자들을 위해 일반 언어 레이블과 설명을 추가하는 것도 좋은 방법입니다. Dynamo에는 이 작업을 위해 편집할 수 있는 텍스트 필드가 있는 Notes 노드가 제공됩니다. 다음 두 가지 방법으로 작업공간에 참고 사항을 추가할 수 있습니다.
편집 > 참고 만들기 메뉴로 이동합니다.
키보드 바로 가기 Ctrl+W를 사용합니다.
참고 사항이 작업공간에 추가되면 텍스트 필드가 팝업되어 참고 사항의 텍스트를 편집할 수 있습니다. 작성한 후에는 Note 노드를 두 번 클릭하거나 마우스 오른쪽 버튼으로 클릭하여 참고 사항을 편집할 수 있습니다.
시각적 프로그램의 규모가 커지면 실행될 더 큰 단계를 정해 두는 것이 도움이 됩니다. 더 큰 노드 모음을 그룹으로 강조 표시하고 배경 및 제목에 색상 직사각형을 사용하여 레이블을 지정할 수 있습니다. 다음 세 가지 방법으로 둘 이상의 노드를 선택하여 그룹을 만들 수 있습니다.
편집 > 그룹 만들기 메뉴로 이동합니다.
키보드 바로 가기 Ctrl+C를 사용합니다.
작업공간을 마우스 오른쪽 버튼으로 클릭하고 "그룹 작성"을 선택합니다.
그룹이 작성되면 제목, 색상 등의 설정을 편집할 수 있습니다.
팁: 파일에 주석을 달고 가독성을 높이기 위해서는 참고와 그룹을 둘 다 사용하는 것이 효과적입니다.
다음은 참고와 그룹이 추가된 프로그램의 예입니다.
참고: "그리드 매개변수"
참고: "그리드 점"
그룹: "점 그리드 작성"
그룹: "어트랙터 점 작성"
참고: "거리 값 보정"
참고: "원의 가변 그리드"
Dynamo 2.0을 사용하면 Python 창을 처음 열 때 사용할 기본 템플릿 (.py extension)
을 지정할 수 있습니다. 이 기능은 Dynamo 내에서 Python 사용을 촉진하기 위해 오랫동안 요청되어 왔습니다. 템플릿을 사용할 수 있는 경우 사용자 Python 스크립트를 개발할 때 기본 가져오기를 바로 사용할 수 있게 됩니다.
이 템플릿의 위치는 Dynamo 설치의 APPDATA
위치에 있습니다.
이는 일반적으로 ( %appdata%\Dynamo\Dynamo Core\{version}\ )
과 같습니다.
이 기능을 사용하려면 DynamoSettings.xml
파일에 다음 행을 추가해야 합니다. (메모장에서 편집)
여기에서 <PythonTemplateFilePath />
를 간단히 다음으로 대치할 수 있습니다.
참고: CURRENTUSER를 사용자 이름으로 대치하십시오.
다음으로, 내장 항목으로 사용하려는 기능이 포함된 템플릿을 작성해야 합니다. 이 예에서는 Revit 관련 가져오기와 Revit으로 작업할 때의 다른 일반적인 항목을 포함할 수 있습니다.
빈 메모장 문서를 시작하고 다음 코드를 그 안에 붙여 넣습니다.
완료되면 APPDATA
위치에 이 파일을 PythonTemplate.py
로 저장합니다.
Python 템플릿을 정의했으므로 Dynamo는 Python 노드가 배치될 때마다 이 템플릿을 찾습니다. 이 템플릿을 찾을 수 없는 경우 기본 Python 창과 유사한 항목이 표시됩니다.
Python 템플릿을 찾은 경우(이 예의 Revit 템플릿처럼) 작성한 기본 항목을 볼 수 있습니다.
이러한 유용한 추가 기능에 대한 자세한 정보(Radu Gidei 작성)를 다음에서 확인할 수 있습니다. https://github.com/DynamoDS/Dynamo/pull/8122
이 참조 페이지에서는 코드 라이브러리, 레이블 지정 및 스타일 지정에 대한 보다 자세한 내용을 통해 스크립팅 전략에서 다루는 모범 사례를 확장합니다. 아래에서는 Python을 사용하여 개념을 설명할 텐데, 동일한 원칙이 Python 및 C#(Zerotouch)에도 적용되지만 이때 구문은 다릅니다.
표준 라이브러리는 Dynamo 외부에 있으며 프로그래밍 언어 Python 및 C#(Zerotouch)에 있습니다. Dynamo에는 노드 계층에 바로 해당되는 고유한 라이브러리 세트도 있으므로, 사용자는 노드 및 와이어로 만들 수 있는 모든 요소를 코드에서 만들 수 있습니다. 아래에는 각 Dynamo 라이브러리를 통해 액세스할 수 있는 항목과 표준 라이브러리를 사용해야 하는 경우에 대한 지침이 나와 있습니다.
표준 라이브러리 및 Dynamo 라이브러리
Python 및 C#의 표준 라이브러리를 사용하여 Dynamo 환경에서 고급 데이터 및 흐름 구조를 만들 수 있습니다.
Dynamo 라이브러리는 형상 및 기타 Dynamo 객체를 작성하기 위한 노드 계층 구조에 바로 해당됩니다.
Dynamo 라이브러리
ProtoGeometry*
기능: 호, 경계 상자, 원, 원추, 좌표계, 직육면체, 곡선, 원통, 모서리, 타원, 타원 호, 면, 형상, 나선, 색인 그룹, 선, 메쉬, NURBS 곡선, NURBS 표면, 평면, 점, 다각형, 직사각형, 솔리드, 구, 표면, 위상, TSpline, UV, 벡터, 정점
가져오는 방법: import Autodesk.DesignScript.Geometry
``
DSCoreNodes
기능: 색상, 색상 범위 2D, 날짜 시간, 시간 간격, IO, 수식, 논리, 리스트, 수학, 쿼드 트리, 문자열, 스레드
가져오는 방법: import DSCore
테셀레이션
기능: 볼록 헐, Delaunay, Voronoi.
가져오는 방법: import Tessellation
DSOffice
기능: Excel
가져오는 방법: import DSOffice
*주: Python 또는 C#을 통해 ProtoGeometry를 사용할 때 비관리형 객체를 작성하는 경우에는 해당 메모리를 수동으로 관리해야 합니다. 자세한 내용은 아래의 비관리형 객체 섹션을 참고하십시오.
스크립팅하는 동안 우리는 변수, 유형, 함수, 기타 도면요소 등을 나타내기 위해 끊임없이 식별자를 사용합니다. 이러한 기호 표기 체계를 통해 알고리즘을 만들면 일반적으로 일련의 문자로 구성되어 있는 레이블을 통해 정보를 편리하게 참조할 수 있습니다. 명명 작업은 나중에 자신 및 다른 사람이 쉽게 읽고 이해할 수 있는 코드를 작성하는 데 매우 중요한 역할을 합니다. 다음은 스크립트에서 항목을 명명할 때 기억해야 할 몇 가지 팁입니다.
약어를 사용해도 좋지만 해설에 약어에 대한 설명을 포함합니다.
중복된 레이블을 지정하지 않도록 합니다.
변수 이름에는 부정 논리 대신 긍정 논리를 사용합니다.
기본적으로 "역방향 표기"를 사용합니다.
이 방식이 구조적 측면에서 좀 더 적합합니다.
별칭을 사용하여 지나치게 길고 자주 반복되는 체인을 줄입니다.
별칭을 지정하면 곧 매우 혼란스러운 비표준 프로그램이 작성될 수 있습니다.
필요한 단어만 사용합니다.
“모든 것은 가능한 한 간단하게 만들어야 하지만, 너무 간단해서는 안 된다.” - 알버트 아인슈타인
일반적으로, 프로그래밍 방법에는 몇 가지가 있습니다. 따라서 "개인적인 스크립팅 스타일"이란 자신이 도중에 수없이 많은 작은 결정을 선택하거나 선택하지 않은 결과입니다. 즉, 코드의 가독성과 유지 관리성은 내부 일관성과 일반적인 스타일 규칙 준수에 따른 직접적인 결과입니다. 경험상, 두 위치에서 동일하게 보이는 코드는 동일하게 작동합니다. 다음은 명확하고 일관된 코드를 작성하기 위한 몇 가지 팁입니다.
명명 규칙: 코드의 각 엔티티 유형에 대해 아래의 규칙 중 하나를 선택하고 선택한 규칙을 준수하십시오.
변수, 함수, 메서드, 패키지, 모듈:
lower_case_with_underscores
클래스 및 예외:
CapWords
보호된 메서드 및 내부 함수:
_single_leading_underscore(self, ...)
전용 메서드:
__double_leading_underscore(self, ...)
상수:
ALL_CAPS_WITH_UNDERSCORES
팁: 단일 문자 변수(예: l, O, I)는 바로 앞의 컨텍스트에서 의미가 명확하게 드러나는 아주 짧은 블록을 제외하고는 사용하지 마십시오.
빈 줄 사용:
최상위 함수와 클래스 정의를 두 개의 빈 줄로 묶습니다.
클래스 내부의 메서드 정의는 1개의 빈 줄로 묶습니다.
드문 경우지만 빈 줄을 추가로 사용하여 관련 함수의 그룹을 구분할 수 있습니다.
불필요한 공백 방지:
괄호, 대괄호 또는 중괄호의 안:
쉼표, 세미콜론 또는 콜론의 바로 앞:
함수 호출의 인수 리스트가 시작되는 여는 괄호의 바로 앞:
색인화 또는 분할이 시작되는 여는 괄호의 바로 앞:
항상 이러한 바이너리 연산자 한쪽에 1개의 공백을 둡니다.
줄 길이 감시:
79자만 넘지 않으면 됩니다.
필요한 편집기 창의 폭을 제한하면 여러 파일을 나란히 열어 둘 수 있으며, 이 방법은 인접한 열에 두 버전이 있는 코드 검토 도구를 사용할 때 유용합니다.
긴 줄의 경우 표현식을 괄호로 묶어 여러 줄로 나눌 수 있습니다.
명백한 내용으로 중복되는 해설 방지:
해설이 적어야 코드를 읽기 쉬운 경우도 있습니다. 특히 의미 있는 기호 이름을 대신 사용해야 하는 경우 더욱 그렇습니다.
좋은 코딩 습관을 들이면 해설에 대한 의존도가 줄어듭니다.
팁: 해설에서는 이유를 알려주고 코드에서는 방법을 알려줍니다.
오픈 소스 코드 확인:
오픈 소스 프로젝트는 많은 개발자가 함께 만드는 것입니다. 이러한 프로젝트는 팀이 가능한 한 효율적으로 함께 작업할 수 있도록 높은 수준의 코드 가독성을 유지해야 합니다. 따라서 해당 프로젝트의 소스 코드를 살펴보면서 이러한 개발자들이 어떤 작업을 하고 있는지 관찰하는 것이 좋습니다.
규칙 개선:
각 규칙이 현재의 필요에 맞게 작동하고 있는지를 질문합니다.
기능/효율성이 저하되고 있습니까?
Zerotouch용 C#을 작성하고 Dynamo에 기여하기 위한 지침을 보려면 다음과 같은 Wiki 페이지를 확인하십시오.
다음 Wiki에서는 코드 문서화 및 테스트를 위한 몇 가지 일반적인 코딩 표준에 대해 설명합니다. https://github.com/DynamoDS/Dynamo/wiki/Coding-Standards
다음 Wiki에서는 특히 라이브러리, 카테고리, 노드 이름, 포트 이름 및 약어에 대한 명명 표준을 다룹니다. https://github.com/DynamoDS/Dynamo/wiki/Naming-Standards
비관리형 객체:
사용자가 작성한 Python 또는 C# 형상 객체의 Dynamo 형상 라이브러리 (ProtoGeometry) 를 사용하는 과정을 가상 컴퓨터에서 관리하지 않고 이러한 여러 객체의 메모리를 수동으로 정리해야 하는 경우를 나타냅니다. 기본 또는 비관리형 객체를 정리하려면 Dispose 메서드 또는 using 키워드를 사용하면 됩니다. 개요를 보려면 다음 Wiki 항목을 참고하십시오. https://github.com/DynamoDS/Dynamo/wiki/Zero-Touch-Plugin-Development#dispose--using-statement
그래프로 반환하지 않거나 참조를 저장하지 않는 비관리형 리소스만 제거하면 됩니다. 이 섹션의 나머지 부분에서는 이러한 객체를 중간 형상 이라고 부르겠습니다. 아래의 코드 예시에서는 이 객체 클래스의 예를 확인할 수 있습니다. 이 zero touch C# 함수 singleCube는 단일 정육면체를 반환하지만 실행 중에 10,000개의 추가 정육면체를 작성합니다. 이러한 다른 형상이 중간 구성 형상으로 사용된 것처럼 가장할 수 있습니다.
이 zero touch 함수는 Dynamo와 충돌할 가능성이 높습니다. 10,000개의 솔리드를 작성했지만 그중 하나만 저장하고 반환했습니다. 대신, 반환하는 항목을 제외한 모든 중간 정육면체를 제거해야 합니다. 반환하는 항목은 그래프로 전파되어 다른 노드에서 사용되므로 제거하지 않을 것입니다.
수정된 코드는 다음과 같습니다.
일반적으로 Surfaces
, Curves
및 Solids
과 같은 형상만 제거하면 됩니다. 그러나 안전을 위해 모든 형상 유형(Vectors
, Points
, CoordinateSystems
)을 제거할 수 있습니다.
이 장의 앞부분에서는 Primer를 통해 Dynamo의 강력한 시각적 스크립팅 기능을 구현하는 방법에 대해 다루었습니다. 이러한 기능에 대한 충분한 이해는 견고한 시각적 프로그램을 구축하는 단단한 기초이자 첫 번째 단계입니다. 현장에서 시각적 프로그램을 사용하거나, 동료들과 공유하거나, 오류 문제를 해결하거나, 제한을 테스트할 때는 처리할 추가적인 문제가 있습니다. 다른 사람이 프로그램을 사용할 예정이거나 지금부터 6개월 후 공개할 예정이면 즉각적인 그래픽과 논리적 명확성이 있어야 합니다. Dynamo에는 프로그램의 복잡성을 관리하는 많은 도구가 있으며, 이 장에서는 그러한 도구를 사용할 시기에 대한 지침을 제공합니다.
Dynamo 그래프를 개발하고 아이디어를 테스트함에 따라 규모와 복잡성이 빠르게 증가할 수 있습니다. 기능적인 프로그램을 만드는 것이 중요한 한편, 최대한 간단하게 만드는 것도 그만큼 중요합니다. 그래프를 더 빠르고 예측 가능한 방식으로 실행하게 될 뿐만 아니라 나중에 다른 사용자와 함께 그 논리를 이해하게 됩니다. 아래에는 그래프의 논리를 명확히 표시하는 여러 가지 방법이 나와 있습니다.
그룹을 사용하면 프로그램을 구축할 때 기능적으로 고유한 부분을 작성할 수 있습니다.
그룹을 사용하면 모듈성과 정렬을 유지하면서 프로그램의 큰 부분을 이동할 수 있습니다.
그룹에서 수행하는 작업(입력 대 함수)을 구분할 수 있도록 그룹의 색상을 변경할 수 있습니다.
그룹을 사용하면 그래프를 구성하여 사용자 노드 작성을 간소화할 수 있습니다.
이 프로그램의 색상으로 각 그룹의 용도가 식별됩니다. 이 전략을 사용하여 개발하는 그래픽 표준이나 템플릿에서 계층을 작성할 수 있습니다.
함수 그룹(파란색)
입력 그룹(주황색)
스크립트 그룹(초록색)
그룹을 사용하는 방법은 프로그램 관리하기를 참조하십시오.
경우에 따라 Code Block을 사용하여 검색보다 빠르게 숫자 또는 노드 메서드를 입력할 수 있습니다(Point.ByCoordinates, Number, String, Formula).
Code Block은 DesignScript에서 사용자 함수를 정의하여 그래프의 노드 수를 줄이려는 경우에 유용합니다.
1과 2는 모두 동일한 기능을 수행합니다. 각 노드를 개별적으로 검색하고 추가하는 것보다 코드 몇 줄을 작성하는 것이 훨씬 더 빨랐습니다. code block은 훨씬 간결하기도 합니다.
Code Block에 작성된 설계 스크립트
노드 내 동등한 프로그램
Code Block을 사용하는 방법은 Code Block이란을 참조하십시오.
간단한 노드 모음을 가져와 단일 Code Block에 해당 DesignScript를 쓰는 Node to Code를 사용하여 그래프의 복잡성을 줄일 수 있습니다.
Node to Code를** 사용하면 프로그램의 명확성을 유지하면서 코드를 압축할 수 있습니다.**
Node to Code를 사용할 경우의 장점은 다음과 같습니다.
계속 편집 가능한 하나의 구성요소로 쉽게 코드 압축
그래프의 대부분을 단순화할 수 있음
'미니 프로그램'을 자주 편집하지 않는 경우에 유용
함수와 같은 기타 code block 기능을 통합하는 데 유용
Node to Code를 사용할 경우의 단점은 다음과 같습니다.
일반 이름을 지정할 경우 읽기가 어려워짐
다른 사용자가 이해하기가 더 어려움
시각적 프로그래밍 버전으로 쉽게 돌아갈 수 있는 방법 없음
기존 프로그램
Node to Code로 작성한 Code Block
Node to Code를 사용하는 방법에 대한 자세한 내용은 설계 스크립트 구문을 참조하십시오.
List@Level을 사용하면 상당한 크기의 캔버스 공간을 차지할 수 있는 List.Map 및 List.Combine 노드를 대체하여 그래프의 복잡성을 줄일 수 있습니다.
List@Level에서는 노드의 입력 포트에서 바로 리스트의 임의 레벨에 있는 데이터에 액세스할 수 있게 해주어** List.Map/List.Combine보다 더 빨리 노드 논리를 구성하는 방법**을 제공합니다.
우리는 CountTrue의 "list" 입력에 대해 List@Level을 활성화하여 BoundingBox.Contains에서 반환하는 True 값이 어떤 리스트에 몇 개인지 확인할 수 있습니다. 사용자는 List@Level을 통해 입력으로 데이터를 가져올 레벨을 결정할 수 있습니다. List@Level을 사용하면 유연하고 효율적이므로 List.Map 및 List.Combine과 관련된 다른 방법에 비해 적극 권장됩니다.
리스트 레벨 2에서 true 값 계산
리스트 레벨 3에서 true 값 계산
List@Level을 사용하는 방법은 리스트의 리스트를 참조하십시오.
그래프를 최대한 간단하고 효율적으로 만들 뿐만 아니라 그래픽 명확성을 위해 노력하십시오. 논리적 그룹화를 사용하여 그래프를 직관적으로 만들기 위한 최선의 노력에도 불구하고 관계가 명확하게 표시되지 않을 수 있습니다. 그룹 내부에 간단한 메모를 기록하거나 슬라이더 이름을 바꾸면 사용자 자신이나 다른 사용자가 불필요한 혼란을 겪거나 그래프를 훑어보지 않아도 됩니다. 아래에는 그래프 내에, 그리고 그래프 전체에 그래픽 일관성을 적용하는 데 유용한 몇 가지 방법이 나와 있습니다.
그래프 작성을 마친 후 작업을 줄이려면 작업하면서 자주 노드를 정렬하여 노드 배치를 읽을 수 있도록 해야 합니다.
다른 사용자가 사용자의 그래프를 사용해 작업하려는 경우 보내기 전에 노드-와이어 배치가 쉽게 유동되는지 확인해야 합니다.
정렬에 활용하려면 "노드 배치 정리" 기능을 사용하여 그래프를 자동으로 정렬합니다. 그러나 이렇게 하는 것이 직접 정렬하는 것보다 정확하지는 않습니다.
구성되지 않은 그래프
정렬된 그래프
노드 정렬을 사용하는 방법은 프로그램 관리하기를 참조하십시오.
입력의 이름을 바꾸면 다른 사람들이 그래프를 쉽게 이해할 수 있습니다. 특히 플러깅 대상이 화면에서 벗어날 경우에 유용합니다.
입력 이외에 다른 노드의 이름을 바꿀 때는 주의하십시오. 이에 대한 대안은 노드 클러스터에서 사용자 노드를 작성하고 그 이름을 바꾸는 것입니다. 여기에 다른 것이 포함되어도 이해될 것입니다.
표면 조작을 위한 입력
건축 매개변수를 위한 입력
배수 시뮬레이션 스크립트를 위한 입력
노드의 이름을 바꾸려면 해당 이름을 마우스 오른쪽 버튼으로 클릭하고 "노드 이름 바꾸기..."를 선택합니다.
그래프의 일부에 노드로 표현할 수 없는 일반 언어 설명이 필요하다면 메모를 추가해야 합니다.
노드 또는 그룹 모음이 너무 크거나 복잡해서 즉시 쉽게 이해할 수 없는 경우 메모를 추가해야 합니다.
원시 변환 거리를 반환하는 프로그램 부분을 설명하는 메모
해당 값을 사인파에 매핑하는 코드를 설명하는 메모
메모를 추가하는 방법은 프로그램 관리하기를 참조하십시오.
시각적 스크립트를 작성하는 동안 반환되는 결과가 예상되는 결과와 같은지 확인하는 것이 중요합니다. 모든 오류나 문제가 프로그램의 즉각적인 실패를 초래하는 것은 아닙니다. 특히, 먼 다운스트림에 영향을 줄 수 있는 null 또는 0 값이 그렇습니다. 이 전략은 스크립팅 전략의 텍스트 스크립팅 컨텍스트에서도 설명합니다. 다음 방법은 예상한 결과를 얻을 수 있도록 도와줍니다.
프로그램을 구축할 때 Watch 또는 미리보기 풍선을 사용하여** 키 출력에서 예상한 결과를 반환하는지 확인합니다.**
Watch 노드는 다음을 비교하는 데 사용됩니다.
원시 변환 거리
사인 방정식을 통해 전달되는 값
Watch를 사용하는 방법에 대해서는 라이브러리를 참조하십시오.
사용자가 독립적으로 작업하는 경우에도 다른 사람이 언젠가 프로그램을 열 가능성이 높습니다. 다른 사람이 프로그램에 필요한 항목을 신속하게 파악하고 이 프로그램의 입력과 출력을 통해 생성할 수 있어야 합니다. 이는 특히 Dynamo 커뮤니티와 공유하고 다른 사람의 프로그램에서 사용할 사용자 노드를 개발할 때 중요합니다. 이러한 방법을 통해 강력하고 재사용 가능한 프로그램과 노드가 작성됩니다.
판독성 및 확장성을 보장하려면 최대한 많은 입력 및 출력을 시도하고 최소화해야 합니다.
캔버스에 단일 노드를 추가하기도 전에 먼저 논리가 어떻게 작동할 수 있는지 대략적인 윤곽을 작성하여 논리를 작성하는 방법에 대한 전략을 짜보아야 합니다. 대략적인 윤곽을 개발할 때는 스크립트에 적용할 입력 및 출력을 추적해야 합니다.
그래프에 포함할 특정 옵션 또는 조건이 있는 경우 사전 설정을 사용하여 신속하게 액세스해야 합니다.
사전 설정을 사용하면 실행 시간이 긴 그래프에서 특정 슬라이더 값을 캐싱하여 복잡성을 줄일 수도 있습니다.
사전 설정을 사용하는 방법에 대해서는 사전 설정을 사용하여 데이터 관리하기를 참조하십시오.
프로그램을 단일 컨테이너에 수집할 수 있는 경우 사용자 노드를 사용해야 합니다.
다른 프로그램에서 그래프의 일부를 자주 재사용할 경우 사용자 노드를 사용해야 합니다.
Dynamo 커뮤니티와 기능을 공유하려면 사용자 노드를 사용해야 합니다.
점 변환 프로그램을 사용자 노드에 수집하면 강력하면서도 고유한 프로그램을 이동식으로 만들고 훨씬 쉽게 이해할 수 있습니다. 이름이 올바르게 지정된 입력 포트를 사용하면 다른 사용자가 노드 사용 방법을 쉽게 이해할 수 있습니다. 각 입력에 대한 설명과 필수 데이터 유형을 추가해야 합니다.
기존 어트랙터 프로그램
이 프로그램(PointGrid)을 수집하는 사용자 노드
사용자 노드를 사용하는 방법에 대해서는 사용자 노드 소개를 참조하십시오.
템플릿을 작성하여 공동작업자가 그래프를 이해하는 표준화된 방법을 갖도록 시각적 그래프 전체에 그래픽 표준을 설정할 수 있습니다.
템플릿을 작성할 때 그룹 색상 및 글꼴 크기를 표준화하여 워크플로우 또는 데이터 작업의 유형을 분류할 수 있습니다.
템플릿을 작성할 때 그래프에서 프런트엔드 워크플로우와 백엔드 워크플로우 간의 차이를 레이블, 색상 또는 스타일로 지정하는 방법을 표준화할 수도 있습니다.
프로그램의 UI 또는 프런트엔드에는 프로젝트 이름, 입력 슬라이더 및 형상 가져오기 등이 있습니다.
프로그램의 백엔드
그룹 색상 카테고리(일반 설계, 입력, Python 스크립팅, 가져온 형상)
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
몇 가지 모범 사례를 설정했으므로 종합된 프로그램에 빨리 적용해 보겠습니다. 프로그램에서 지붕이 생성되지만 그래프의 상태가 작성자의 "마인드맵"과 같습니다. 이 상태로는 구성 또는 용도에 대한 설명이 부족합니다. 다른 사용자가 사용 방법을 이해할 수 있도록 프로그램을 구성하고, 설명하고, 분석하는 모범 사례를 진행해 보겠습니다.
프로그램이 작동하지만 그래프가 체계적이지 않습니다.
프로그램에서 반환된 데이터 및 형상을 결정하는 것부터 시작하겠습니다.
데이터에 중요한 변경 사항이 발생하는 경우를 이해하는 것은 논리적 분할 또는 모듈성을 설정하는 데 중요합니다. Watch 노드가 있는 프로그램의 나머지 부분을 조사하여 다음 단계로 이동하기 전에 그룹을 결정할 수 있는지 여부를 확인합니다.
수학 방정식이 포함된 이 Code Block은 프로그램의 중요한 부분처럼 보입니다. Watch 노드가 표시되어 변환 거리 리스트가 반환됩니다.
이 영역의 용도가 명확하지 않습니다. BoundingBox.Contains의 리스트 레벨 L2에 True 값이 정렬되며, List.FilterByBoolMask가 있으면 점 그리드의 일부를 샘플링하고 있음을 의미합니다.
프로그램의 요소 부분을 이해하고 나면 그룹에 배치해 보겠습니다.
그룹을 사용하면 사용자가 프로그램의 부분을 시각적으로 구분할 수 있습니다.
3D 대지 모델 가져오기
사인 방정식을 기반으로 점 그리드 변환
점 그리드의 샘플 부분
건축 지붕 표면 작성
유리 커튼월 작성
그룹이 설정된 상태에서 노드를 정렬하여 그래프 전체에 걸친 시각적 연속성을 작성합니다.
시각적 연속성을 통해 사용자는 노드 간의 암시적 관계 및 프로그램 흐름을 확인할 수 있습니다.
그래픽 개선 사항을 한층 더 추가하여 프로그램에 더 쉽게 액세스할 수 있도록 합니다. 메모를 추가하여 프로그램의 특정 영역이 작동하는 방식을 설명하고, 입력에 사용자 이름을 지정하고, 서로 다른 유형의 그룹에 색상을 지정합니다.
이러한 그래픽 개선 사항을 통해 사용자는 프로그램에서 수행하는 작업에 대해 자세히 알 수 있습니다. 서로 다른 그룹 색상을 사용하면 입력을 함수와 구분할 수 있습니다.
주
알아보기 쉬운 이름의 입력
프로그램을 압축하기 전에 Python 스크립트 배수 시뮬레이터를 소개할 전략적 위치를 찾아보겠습니다. 첫 번째로 축척된 지붕 표면의 출력을 각각의 스크립팅 입력에 플러깅합니다.
이 프로그램에서 이 지점의 스크립팅을 통합하기로 선택했으므로 배수 시뮬레이션을 원래의 단일 지붕 표면에서 실행할 수 있습니다. 해당 특정 표면은 미리 볼 수 없지만, 모따기된 Polysurface의 상단 표면을 선택할 필요가 없습니다.
스크립트 입력에 대한 소스 형상
Python 노드
입력 슬라이더
켜기/끄기 "스위치"
모든 것이 제자리에 배치되었으므로 그래프를 단순화하겠습니다.
Node to Code와 사용자 노드로 프로그램을 압축하니 그래프의 크기가 크게 줄었습니다. 지붕 표면 및 벽을 작성하는 그룹은 이 프로그램에만 해당하는 것이기 때문에 코드로 변환되었습니다. 점 변환 그룹은 다른 프로그램에서 사용될 수 있으므로 사용자 노드에 포함되었습니다. 예시 파일에서는 점 변환 그룹에서 자체 사용자 노드를 작성합니다.
"점 그리드 변환" 그룹을 포함할 사용자 노드
"건축 지붕 표면 및 커튼월 작성" 그룹을 압축할 Node to Code
마지막 단계로, 본보기 지붕 양식에 대한 사전 설정을 작성합니다.
이러한 입력은 지붕 양식의 주요 동인이며 사용자가 프로그램의 잠재력을 확인하는 데 도움이 됩니다.
두 가지 사전 설정 뷰가 포함된 프로그램입니다.
지붕 배수 패턴은 사용자에게 각 사전 설정의 해석 뷰를 제공합니다.
시각적 스크립팅 환경 내의 텍스트 기반 스크립팅을 활용하면 DesignScript, Python, ZeroTouch(C#)를 사용하여 강력한 시각적 관계를 사용할 수 있습니다. 사용자는 입력 슬라이더와 같은 요소를 노출시키고, 대규모 작업을 DesignScript로 압축하며, 동일한 작업공간 내에서 Python 또는 C#을 통해 강력한 도구 및 라이브러리에 액세스할 수 있습니다. 효과적으로 관리할 경우 이러한 전략을 결합하면 전체 프로그램에 대해 사용자화 사용 가능성, 명확성 및 효율성을 많이 향상할 수 있습니다. 아래에는 텍스트 스크립트를 사용하여 시각적 스크립트를 보강하는 데 도움이 되는 일련의 지침이 나와 있습니다.
텍스트 스크립팅의 경우 시각적 프로그래밍보다 더 복잡한 관계를 설정할 수 있지만 그와 겹치는 기능도 많습니다. 노드가 효과적으로 사전에 패키지된 코드이고, 전체 Dynamo 프로그램을 DesignScript 또는 Python으로 작성할 수 있기 때문에 그렇습니다. 그러나 노드와 와이어의 인터페이스에서 그래픽 정보의 직관적인 흐름을 작성하므로 우리는 시각적 스크립팅을 사용합니다. 텍스트 스크립팅의 기능이 시각적 스크립팅보다 유용한 지점을 알면 노드와 와이어의 직관적인 특성을 포기하지 않고 이 기능을 사용해야 하는 경우에 대한 중요한 단서를 얻게 될 것입니다. 아래에는 스크립팅해야 하는 경우와 사용해야 하는 언어에 대한 지침이 나와 있습니다.
텍스트 스크립팅의 목적:
루핑
재귀
외부 라이브러리에 액세스
언어 선택:
각 Dynamo 라이브러리에서 액세스 가능한 리스트를 보려면 스크립팅 참조를 참조하십시오.
필연적으로 파라메트릭 환경인 Dynamo에서 스크립팅할 경우 코드가 상주할 노드 및 와이어의 프레임워크를 기준으로 코드를 구성하는 것이 좋습니다. 텍스트 스크립트가 포함된 노드는 소수의 특정 입력, 함수 및 예상 출력이 있는 프로그램의 다른 노드처럼 생각하십시오. 그러면 즉시 해당 노드 내의 코드에 작은 변수 세트가 포함되어 작동하게 되며, 이것이 깔끔한 파라메트릭 시스템의 열쇠입니다. 아래에는 코드를 시각적 프로그램에 보다 효율적으로 통합하기 위한 몇 가지 지침이 나와 있습니다.
외부 변수 식별하기:
해당 데이터를 직접 작성하는 모델을 구성할 수 있도록 설계 문제에서 지정된 매개변수를 확인해 보십시오.
코드를 작성하기 전에 다음 변수를 식별하십시오.
최소한의 입력 세트
의도한 출력
상수
몇 가지 변수는 코드를 작성하기 전에 설정되어 있습니다.
강우를 시뮬레이션할 표면
기본 빗방울 수(에이전트)
기본 빗방울 이동 거리
가장 가파른 경로를 내려가는 경우와 표면을 횡단하는 경우 간의 전환
Python 노드(각 입력 수 포함)
반환된 곡선을 파란색으로 만드는 Code Block
내부 관계 설계하기:
매개변수화를 사용하면 방정식 또는 시스템의 최종 결과를 조작하거나 변경하기 위해 특정 매개변수 또는 변수를 편집할 수 있습니다.
스크립트의 엔터티가 논리적으로 관련된 경우 항상 서로의 함수로 정의하십시오. 이렇게 하면 하나가 수정되는 경우 나머지 요소가 비례적으로 업데이트될 수 있습니다.
다음과 같이 키 매개변수를 노출하는 방식으로만 입력 수를 최소화합니다.
매개변수 세트를 더 많은 상위 매개변수에서 파생할 수 있는 경우 상위 매개변수만 스크립트 입력으로 노출합니다. 그러면 인터페이스의 복잡성이 줄어들어 스크립트의 가용성이 높아집니다.
Python 노드 내 예시의 코드 "모듈"은 다음과 같습니다.
입력
스크립트 내부의 변수
이러한 입력 및 변수를 사용하여 해당 함수를 수행하는 루프
팁: 솔루션에서처럼 과정에 최대한 중점을 두십시오.
스크립트에서 동일한 항목을 표현할 방법이 여러 가지 있는 경우 어느 시점에 중복 표현이 동기화되지 않아 유지보수 문제, 공통 분할 불량, 내부 모순이 초래될 수 있습니다.
DRY 원칙에 따르면 "모든 지식은 시스템 내에서 단일하고, 명백하며, 권위 있게 표현되어야 합니다."
이 원칙이 제대로 적용되면 스크립트의 모든 관련 요소가 예측 가능한 방식으로 균일하게 변경되고, 모든 관련 없는 요소가 서로 간에 논리적인 결과를 일으키지 않습니다.
팁: 스크립트에서 엔터티(위 예에서는 상수)를 복제하기 전에 소스에 링크할 수 있는지에 대해 자문해 보십시오.
코드가 점점 길어지고 복잡해짐에 따라 “중요한 아이디어”나 매우 중요한 알고리즘은 점점 더 읽기 어려워집니다. 또한 어떤 특정 상황이 어디에서 발생하는지 추적하거나, 문제가 발생하는 경우 버그를 찾거나, 다른 코드를 통합하거나, 개발 작업을 지정하기가 더욱 어려워집니다. 이러한 문제를 방지하기 위해 실행하는 작업에 따라 코드를 분할하는 구성 전략으로, 모듈에서 코드를 작성하는 것이 좋습니다. 다음은 모듈화 방식으로 스크립트를 보다 쉽게 관리할 수 있는 몇 가지 팁입니다.
모듈에 코드 작성하기:
"모듈"은 작업공간의 Dynamo 노드와 유사하게 특정 작업을 수행하는 코드 그룹입니다.
인접 코드(함수, 클래스, 입력 그룹 또는 가져오고 있는 라이브러리)와 시각적으로 분리해야 하는 무엇이든 모듈이 될 수 있습니다.
모듈에서 코드를 개발하면 시각적이고 직관적인 품질의 노드뿐만 아니라 텍스트 스크립팅에서만 가능한 복잡한 관계도 활용할 수 있습니다.
이러한 루프에서는 우리가 연습에서 개발할 "agent"라는 클래스를 호출합니다.
각 에이전트의 시작점을 정의하는 코드 모듈
에이전트를 업데이트하는 코드 모듈
에이전트 경로에 대한 트레일을 그리는 코드 모듈
코드 재사용 발견하기:
코드가 두 곳 이상에서 같은(또는 매우 유사한) 작업을 수행하는 것을 발견한 경우 호출할 수 있는 함수로 클러스터링할 방법을 찾으십시오.
“관리자” 함수는 프로그램 흐름을 제어하며, 주로 구조 간 데이터 이동과 같은 낮은 레벨의 세부 정보를 처리하는 “작업자” 함수에 대한 호출을 포함합니다.
이 예시에서는 중심점의 Z 값을 기준으로 반지름과 색상을 사용하여 구를 작성합니다.
"작업자" 상위 함수 두 개: 반지름이 있는 구를 작성하고 중심점의 Z 값을 기준으로 색상을 표시하는 함수.
두 작업자 함수를 결합하는 "관리자" 상위 함수. 이를 호출하면 내부의 두 함수가 모두 호출됩니다.
확인해야 할 사항만 표시하기:
모듈 인터페이스에는 모듈에서 제공하거나 요구하는 요소가 나타납니다.
단위 간의 인터페이스가 정의되면 각 단위의 세부 설계를 별도로 진행할 수 있습니다.
분리 가능성/대치 가능성:
모듈에서는 서로에 대해 잘 모르거나 상관하지 않습니다.
모듈화의 일반적인 형태:
코드 그룹화:
함수:
클래스:
Dynamo에서 텍스트 스크립트를 개발하는 동안 실제로 작성되는 것이 기대하는 바와 일치하는지 지속적으로 확인하는 것이 좋습니다. 그러면 예기치 못한 이벤트(구문 오류, 논리 불일치, 부정확한 값, 이상 출력 등)를 신속하게 검색해 마지막에 한 번에 처리하는 대신 나타날 때 즉시 처리합니다. 텍스트 스크립트는 캔버스의 노드 내에 있으므로 시각적 프로그램의 데이터 흐름에 이미 통합되어 있습니다. 따라서 출력할 데이터를 지정하고, 프로그램을 실행하고, Watch 노드를 사용하여 스크립트에서 흐름 상태를 평가하는 것처럼 간단하게 연속적 스크립트 모니터링을 수행할 수 있습니다. 다음은 스크립트를 구성할 때 지속적으로 검사할 수 있는 몇 가지 팁입니다.
진행하면서 테스트하기:
기능 클러스터를 완료할 때마다 다음을 수행합니다.
이전 단계로 이동하여 코드를 검사합니다.
엄격하게 확인합니다. 공동작업자가 이 작업이 무엇인지 이해할 수 있는가? 이 작업을 수행할 필요가 있는가? 이 기능을 보다 효율적으로 수행할 수 있는가? 불필요한 중복이나 의존성을 작성하고 있는가?
빠르게 테스트하여 "타당한" 데이터가 반환되는지 확인합니다.
다음과 같이 스크립트가 업데이트되면 노드에서 항상 관련 데이터를 출력하도록 스크립트에서 작업 중인 최신 데이터를 출력으로 지정합니다.
솔리드의 모든 모서리가 곡선으로 돌아가 경계 상자를 작성하는지 확인합니다.
개수 입력이 범위로 변환되는지 확인합니다.
이 루프에서 좌표계가 제대로 변환되고 회전되었는지 확인합니다.
"극단적인 경우" 예상하기:
스크립팅하는 동안 할당된 도메인의 최솟값 및 최댓값에 입력 매개변수를 크랭크하여 프로그램이 극단적인 조건에서도 계속 작동하는지 확인합니다.
프로그램이 극단적인 조건에서 작동하더라도 의도하지 않은 null/공백/0 값을 반환하는지 확인합니다.
어떤 경우에는 몇몇 스크립트 관련 기본 문제를 나타내는 버그와 오류가 이러한 극단적인 경우에만 드러납니다.
오류의 원인을 파악한 다음 문제를 방지하려면 내부적으로 수정해야 할지 아니면 매개변수 도메인을 다시 정의해야 할지를 결정합니다.
팁: 항상 사용자가 자신에게 표시된 모든 입력 값의 모든 조합을 사용한다고 가정하십시오. 그러면 원치 않는 갑작스러운 상황이 발생하지 않습니다.
디버깅은 스크립트에서 "버그"를 제거하는 프로세스입니다. 버그는 오류, 비효율성, 부정확성 또는 예상치 못한 결과일 수 있습니다. 버그는 스크립트를 사용하여 철자가 잘못된 변수 이름을 보다 널리 퍼진 구조적 문제로 수정하는 것처럼 간단하게 해결할 수 있습니다. 스크립트를 만들면서 조정하면 버그가 완전히 없어진다는 보장은 없지만 이러한 잠재적 문제를 조기에 포착할 수 있습니다. 아래에는 버그를 체계적으로 해결하는 데 도움이 되는 몇 가지 모범 사례를 검토한 내용이 나와 있습니다.
Watch 풍선 사용하기:
프로그램 조정이라는 개념과 유사하게 OUT 변수에 데이터를 지정하여 코드의 여러 위치에서 반환되는 데이터를 확인합니다.
의미 있는 주석 작성하기:
의도한 결과를 명확하게 설명하면 코드 모듈을 디버깅하기가 훨씬 쉽습니다.
이 경우 일반적으로 주석과 빈 줄이 과도하게 많아지지만, 디버깅할 때 주석 내용을 관리 가능한 여러 부분으로 나누면 유용할 수 있습니다.
코드의 모듈성 활용하기:
문제의 소스는 특정 모듈로 격리할 수 있습니다.
잘못된 모듈을 식별하고 나면 문제를 훨씬 더 간단하게 해결할 수 있습니다.
프로그램을 수정해야 하는 경우 모듈에서 개발된 코드는 다음과 같이 훨씬 더 쉽게 변경할 수 있습니다.
새 모듈 또는 디버깅된 모듈을 기존 프로그램에 삽입할 수 있으며, 삽입하더라도 프로그램의 나머지 부분은 변경되지 않습니다.
Python 노드에서의 예시 파일 디버깅은 다음과 같습니다.
입력 형상에서 형상 자체보다 큰 경계 상자를 반환합니다. 이는 xDist 및 yDist를 OUT에 지정하면 볼 수 있습니다.
입력 형상의 모서리 곡선에서 xDist 및 yDist에 대해 올바른 거리로 적절한 경계 상자를 반환합니다.
xDist 및 yDist 값 문제를 해결하기 위해 삽입한 코드 "모듈"입니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
텍스트 스크립팅의 모범 사례를 고려하여 비 시뮬레이션 스크립트를 작성해 보겠습니다. 그래프 전략에서 체계적이지 않은 시각적 프로그램에 모범 사례를 적용할 수 있었지만 그렇게 하는 것은 텍스트 스크립팅을 사용하는 것보다 훨씬 더 어렵습니다. 텍스트 스크립팅에서 설정한 논리적 관계는 가시성이 낮아 복잡한 코드에서는 풀기가 거의 불가능할 수 있습니다. 텍스트 스크립팅의 기능을 사용하면 조직의 책임이 더 커집니다. 각 단계를 살펴보고 그 과정에서 모범 사례를 적용해 보겠습니다.
우리의 스크립트는 어트랙터가 변형된 표면에 적용됩니다.
가장 먼저 해야 할 작업은 필요한 Dynamo 라이브러리를 가져오는 것입니다. 먼저 이렇게 하면 Python에서 Dynamo 기능에 전역적으로 액세스할 수 있게 됩니다.
사용하려는 모든 라이브러리를 여기로 가져와야 합니다.
다음으로, 스크립트의 입력과 출력을 정의해야 합니다. 이는 노드에서 입력 포트로 표시됩니다. 이러한 외부 입력이 스크립트의 토대가 되고 파라메트릭 환경을 설정하는 열쇠가 됩니다.
Python 스크립트에서 변수에 해당하는 입력을 정의하고 원하는 출력을 결정해야 합니다.
우리가 걸어갈 표면
우리가 걷게 할 에이전트의 수
에이전트가 걸을 수 있는 최대 걸음 수
표면 아래로 최단 경로를 택하거나 횡단할 수 있는 옵션
스크립트의 입력(IN[0], IN[1])에 해당하는 입력 식별자가 있는 Python 노드
다른 색상으로 표시할 수 있는 출력 곡선
이제 모듈성 실습을 이용하여 스크립트 본문을 작성해 보겠습니다. 여러 시작점에 대해 표면 아래의 최단 경로를 시뮬레이션하는 것은 여러 함수가 필요한 중대한 작업입니다. 스크립트 전체에서 다른 함수를 호출하는 대신 이를 단일 클래스인 당사의 에이전트로 수집하여 코드를 모듈화할 수 있습니다. 이 클래스 또는 "모듈"의 여러 함수는 다른 변수를 사용하여 호출하거나 다른 스크립트에서 재사용할 수도 있습니다.
한 걸음씩 걸을 때마다 가능한 가장 가파른 방향으로 이동하도록 선택하여 표면을 걷게 하려는 에이전트에 대해 다음과 같은 클래스 또는 청사진을 정의해야 합니다.
이름
모든 에이전트가 공유하는 전역 속성
각 에이전트마다 고유한 인스턴스 속성
걷게 하는 함수
각 걸음의 위치를 트레일 리스트로 카탈로그화하는 함수
시작 위치를 정의하여 에이전트를 초기화하겠습니다. 이는 스크립트를 조정하고 에이전트 클래스가 제대로 작동하는지 확인할 수 있는 좋은 기회입니다.
표면을 걷는 것을 관찰하고 해당 초기 속성을 정의하려는 모든 에이전트를 인스턴스화해야 합니다.
비어 있는 새 트레일 리스트
표면에서 여정을 시작할 위치
여기서 스크립트가 반환하는 결과를 확인하기 위해 에이전트 리스트를 출력으로 지정했습니다. 올바른 수의 에이전트가 반환되지만, 반환되는 형상을 확인하려면 나중에 스크립트를 다시 조정해야 합니다.
각 단계에서 각 에이전트를 업데이트합니다. 그런 다음 내포된 루프를 입력해야 합니다. 여기서 각 에이전트와 각 걸음에 대해 해당 위치를 업데이트하고 해당 트레일 리스트에 기록합니다. 또한 걸음마다 에이전트가 표면에서 한 걸음 더 내디뎌서 내려갈 수 없는 지점에 도달하지 않았는지 확인합니다. 그러한 조건이 충족되면 해당 에이전트의 여정이 종료됩니다.
에이전트가 완전히 업데이트되었으므로 이들을 나타내는 형상을 반환해 보겠습니다. 모든 에이전트가 하강 제한 또는 최대 걸음 수에 도달한 후, 해당 트레일 리스트의 지점을 통해 polycurve를 작성하고 polycurve 트레일을 출력합니다.
가장 가파른 경로를 찾는 스크립트입니다.
기본 표면의 강우를 시뮬레이션하는 사전 설정입니다.
가장 가파른 경로를 찾는 대신 기본 표면을 횡단하도록 에이전트를 전환할 수 있습니다.
전체 Python 텍스트 스크립트입니다.
루핑
재귀
노드 압축
외부 라이브러리
축약형
DesignScript
예
예
예
아니오
예
Python
예
예
부분적
예
아니요
ZeroTouch (C#)
아니요
아니오
아니오
예
아니요