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...
형상은 설계를 위한 언어입니다. 프로그래밍 언어나 환경의 핵심에 형상 커널이 포함되어 있으면 알고리즘을 통해 정확하고 강력한 모델을 설계하고, 설계 루틴을 자동화하고, 설계를 반복해서 생성할 수 있게 됩니다.
형상 유형과 형상 유형이 어떻게 관련되어 있는지를 잘 이해하면 라이브러리에서 사용할 수 있는 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" 좌표계인 경우)와 모든 부분이 동일합니다.
하지만 원통형 또는 구형과 같은 대체 좌표계가 있습니다. 이후 섹션에서 살펴볼 텐데, 좌표계는 다른 형상 유형에 적용하여 해당 형상에서 위치를 정의할 수도 있습니다.
대체 좌표계(원통형, 구형) 추가
단일 표면에서 작성할 수 없는 보다 복잡한 모델을 구성하거나 명시적인 볼륨을 정의하려면 이제 (및 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: 구와 안쪽을 향하는 원추를 사용한 차이 연산입니다.
모델에서 을 사용하여 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의 모서리에는 모깎기 또는 모따기 작업을 편리하게 적용할 수 있습니다.
섹션에서 노드 동결에 대한 자세한 내용을 확인할 수 있습니다.
이렇게 솔리드 부울은 시간을 절약해 주는 강력한 프로세스의 역할을 합니다. 유지할 형상 부분을 구분하는 솔리드 부울 연산에는 다음 세 가지가 있습니다.
이 섹션에서는 Dynamo 라이브러리에서 사용할 수 있는 필수 노드를 소개합니다. 이 필수 노드는 전문가처럼 고유한 시각적 프로그램을 만드는 데 도움이 됩니다.
계산 설계를 위한 형상: Dynamo에서 기하학적 요소를 작업하려면 어떻게 해야 합니까? 다양한 방법으로 기본체에서 단순하거나 복잡한 형상을 작성할 수 있습니다.
프로그램의 빌딩 블록: “데이터”란 무엇이며, 프로그램에서 사용할 수 있는 기본 유형으로는 무엇이 있습니까? 또한 설계 워크플로우에 수학 및 논리 연산을 통합하는 방법에 대해 자세히 알아봅니다.
리스트로 설계: 데이터 구조를 관리하고 조정하려면 어떻게 해야 합니까? 리스트의 개념에 대해 좀 더 자세히 이해하고 이를 사용하여 설계 데이터를 효율적으로 관리할 수 있습니다.
Dynamo의 사전: 사전이란 무엇입니까? 사전을 사용하여 기존 결과에서 특정 데이터 및 값을 찾는 방법을 알아봅니다.
점은 좌표라는 하나 이상의 값으로 정의됩니다. 점을 정의하는 데 필요한 좌표 값 수는 점이 존재하는 컨텍스트 또는 좌표계에 따라 달라집니다.
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]
시각적 프로그래밍 환경인 Dynamo를 사용하면 데이터가 처리되는 방식을 조작할 수 있습니다. 데이터는 숫자나 문자이지만 형상도 마찬가지입니다. 컴퓨터의 입장에서 이해한다면, 형상(경우에 따라 계산 형상이라고도 함)은 세련되거나 정교한 성능 중심의 모델을 작성하는 데 사용할 수 있는 데이터라고 할 수 있습니다. 이렇게 조작하려면 사용할 수 있는 다양한 형상 유형을 속속들이 이해해야 합니다.
계산 모델링 분야에서 메쉬는 3D 형상을 나타내는 가장 널리 사용되는 양식 중 하나입니다. 메쉬 형상은 일반적으로 사변형 또는 삼각형 모음으로 구성되며, 간단하고 유연하며 NURBS 대신 사용할 수 있습니다. 또한 메쉬는 렌더링 및 시각화에서 디지털 제작 및 3D 인쇄에 이르는 모든 분야에서 사용됩니다.
Dynamo에서는 면-정점 데이터 구조를 사용하여 메쉬를 정의합니다. 가장 기본적인 수준에서 이 구조는 단순히 다각형으로 그룹화된 점의 모음입니다. 메쉬의 점은 정점이라고 하고, 표면 같은 다각형은 면이라고 합니다.
메쉬를 작성하려면 정점 리스트와 이러한 정점을 색인 그룹이라는 면으로 그룹화하는 시스템이 필요합니다.
정점 리스트
면을 정의할 색인 그룹 리스트
Mesh Toolkit 패키지를 설치하여 Dynamo의 메쉬 기능을 확장할 수 있습니다. Dynamo Mesh Toolkit에서는 외부 파일 형식에서 메쉬를 가져오고, Dynamo 형상 객체에서 메쉬를 작성하고, 정점 및 색인으로 메쉬를 수동으로 작성하는 도구를 제공합니다.
라이브러리에서는 메쉬를 수정 또는 복구하거나 제작에 사용할 수평 슬라이스를 추출하는 도구도 제공합니다.
이 패키지 사용에 대한 예를 확인하려면 Mesh Toolkit 사례 연구를 참조하십시오.
메쉬는 표면 또는 솔리드 형상을 나타내는 사변형 및 삼각형의 모음입니다. 솔리드와 마찬가지로 메쉬 객체의 구조에는 정점, 모서리 및 면이 포함됩니다. 법선과 같이 메쉬를 고유하게 만드는 추가 특성이 있습니다.
메쉬 정점
메쉬 모서리(*인접 면이 하나만 있는 모서리를 "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 표면은 원활한 수학적 관계가 있으므로 벡터 이미지와 비교될 수 있지만, 메쉬는 해상도가 설정된 래스터 이미지와 유사하게 동작합니다.
이 색인에서는 이 Primer에 사용된 모든 노드 및 기타 유용할 수 있는 구성요소에 대한 추가 정보를 제공합니다. 여기에는 Dynamo에서 사용할 수 있는 500개의 노드 중 일부만 소개되어 있습니다.
**즉, 폭(X축) 길이가 10인 직육면체를 작성하고 X 축척을 두 배로 하여 CoordinateSystem으로 변환해도 폭은 여전히 10입니다. ASM에서는 예측 가능한 순서로 본체의 정점을 추출할 수 없으므로, 변환 후 치수를 결정할 수 없습니다.
곡선은 우리가 처음 다룬 기하학적 데이터 유형으로, 선이 얼마나 구부러지거나 펴져 있는가? 또는 얼마나 길거나 짧은가? 등의 보다 익숙한 모양 설명 특성 세트를 포함하는 첫 번째 기하학적 데이터 유형입니다. 또한 점이 선에서 스플라인 사이의 모든 항목과 그 사이의 모든 곡선 유형을 정의하기 위한 빌딩 블록이라는 점은 그대로입니다.
선
폴리선
호
원
타원
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
차수 값이 높을수록 결과 곡선을 보간하는 데 더 많은 제어점이 사용됩니다.
시각적 프로그램 개발에 대해 더 자세히 알아보려는 경우 사용하게 될 빌딩 블록을 더 깊이 있게 이해해야 합니다. 이 장에서는 Dynamo 프로그램의 와이어를 통과하는 데이터와 관련된 기본적인 개념을 소개합니다.
공식적으로, 문자열은 리터럴 상수 또는 일부 변수 유형을 나타내는 문자 시퀀스입니다. 비공식적으로는 프로그래밍에서 텍스트를 의미하는 용어입니다. 지금까지 정수 및 십진수를 사용하여 매개변수를 구동했으며, 텍스트로도 같은 작업을 수행할 수 있습니다.
문자열은 사용자 매개변수 정의, 문서 세트에 주석 달기, 텍스트 기반 데이터 세트 구문 분석 등 광범위한 응용 분야에서 사용할 수 있습니다. 문자열 노드는 코어>입력 카테고리에 있습니다.
위의 샘플 노드는 문자열입니다. 숫자는 문자열로 나타내거나 문자 또는 전체 텍스트 배열로 나타낼 수 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
문자열을 조회하여 많은 양의 데이터를 신속하게 구문 분석할 수 있습니다. 워크플로우 진행 속도를 높이고 소프트웨어 상호 운용성을 지원하는 몇 가지 기본 작업에 대해 살펴보겠습니다.
아래 이미지에서는 외부 스프레드시트에서 가져온 데이터 문자열을 고려합니다. 해당 문자열은 XY 평면에서 직사각형의 정점을 나타냅니다. 일부 문자열 분할 작업을 소규모 연습으로 나눠보겠습니다.
";" 구분 기호는 직사각형의 각 정점을 분할합니다. 그러면 각 정점에 해당하는 3개의 항목이 포함된 리스트가 작성됩니다.
노드의 중간에 있는 "+"를 눌러 새 구분 기호를 작성합니다.
"," 문자열을 캔버스에 추가하고 새 구분 기호 입력에 연결합니다.
이제 결과는 항목 10개로 구성된 리스트가 됩니다. 노드는 먼저 separator0 을 기준으로 분할된 후 separator1 을 기준으로 분할됩니다.
위의 항목 리스트는 숫자처럼 보일 수 있지만 Dynamo에서는 여전히 개별 문자열로 간주됩니다. 점을 작성하려면 해당 데이터 유형을 문자열에서 숫자로 변환해야 합니다. 이 작업은 String.ToNumber 노드를 사용하여 수행합니다.
이 노드는 간단합니다. String.Split 결과를 입력에 연결합니다. 출력이 다르게 보이지는 않지만 데이터 유형은 이제 문자열 이 아닌 숫자 입니다.
기본적인 추가 작업을 통해 원래 문자열 입력을 기준으로 원점에 삼각형이 그려집니다.
문자열은 일반 텍스트 객체이므로 광범위한 응용 분야에서 사용됩니다. Dynamo의 코어>문자열 카테고리에 해당하는 몇 가지 주요 작업을 살펴보겠습니다.
다음은 두 문자열을 순서대로 병합하는 방법입니다. 이 방법에서는 리스트의 각 리터럴 문자열을 가져와 병합된 하나의 문자열을 작성합니다.
다음 이미지에는 다음 세 개의 문자열을 연결하는 과정이 나와 있습니다.
노드 중심에서 +/- 버튼을 클릭하여 연결 항목에 문자열을 추가하거나 연결 항목에서 문자열을 뺍니다.
출력에서는 공백과 문장 부호가 포함된 연결된 1개의 문자열이 제공됩니다.
결합 방법은 문장 부호가 하나 더 추가된다는 점을 제외하고는 연결과 매우 유사합니다.
Excel에서 작업한 경우 CSV 파일을 보았을 수 있습니다. CSV는 쉼표로 구분된 값을 의미합니다. 비슷한 데이터 구조를 작성하기 위해 String.Join 노드에서 쉼표(또는 이 경우 두 개의 대시)를 구분 기호로 사용할 수 있습니다.
다음 이미지에는 두 개의 문자열의 결합하는 과정이 나와 있습니다.
구분 기호 입력을 통해 결합된 문자열을 분할하는 하나의 문자열을 작성할 수 있습니다.
이 연습에서는 문자열을 조회하고 조작하는 방법을 사용하여 Robert Frost가 쓴 Stopping By Woods on a Snowy Evening(눈 내리는 저녁 숲가에 서서)의 마지막 절을 분석해 보겠습니다. 이러한 방법이 가장 실질적인 응용 사례는 아니지만, 명확한 리듬과 운율이 있는 줄에 적용할 경우 개념적 문자열 동작을 파악하는 데 도움이 됩니다.
먼저 절의 기본적인 문자열 분할부터 살펴보겠습니다. 작성된 시가 쉼표를 기준으로 형식이 지정된다는 것을 알 수 있습니다. 이 형식을 사용하여 각 줄을 개별 항목으로 구분할 것입니다.
기본 문자열이 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 노드를 추가하고 쉼표를 입력합니다.
최종 출력에는 마지막 두 항목이 하나로 병합되었습니다.
마지막 두 줄을 분리하는 데 많은 작업이 필요한 것처럼 보이는데, 이는 사실입니다. 문자열 작업을 위해서는 일부 사전 작업이 필요한 경우가 많습니다. 그렇지만 이러한 작업은 확장 가능하며, 대규모 데이터 세트에 비교적 쉽게 적용할 수 있습니다. 스프레드시트와 상호 운용성을 활용하여 파라메트릭 방식으로 작업 중인 경우에는 문자열 작업을 기억해야 합니다.
색상은 시각적 프로그램의 출력에서 차이를 렌더링하고, 우수한 시각적 요소를 작성하는 데 유용한 데이터 유형입니다. 추상 데이터와 다양한 숫자를 사용할 경우 무엇이 어느 정도로 달라지는지 확인하기 어려운 경우가 있습니다. 이러한 경우 색상을 적용하면 매우 유용합니다.
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인 샘플의 출력 표면 미리보기 클로즈업
리스트는 요소 또는 항목의 모음입니다. 예를 들어 바나나 묶음을 고려해보십시오. 각 바나나는 리스트(또는 묶음) 내의 항목입니다. 각 바나나를 따로 잡는 것보다 바나나 묶음을 잡는 것이 더 쉬운데, 이는 데이터 구조의 파라메트릭 관계에 따라 요소를 그룹화하는 경우에도 마찬가지입니다.
식료품을 구입할 때는 구입한 모든 항목을 바구니에 넣습니다. 이 바구니 또한 리스트입니다. 바나나 빵을 만들려면 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 값으로 정의되어 수직선의 행이 표시되는 것을 볼 수 있습니다.
계층에 티어를 하나 더 추가하겠습니다. 원래 예시에서 카드 데크를 가져와 여러 개의 데크가 포함된 상자를 작성하면 이제 상자에는 데크 리스트가 나타나고 각 데크에는 카드 리스트가 나타납니다. 이것은 리스트의 리스트입니다. 이 섹션의 내용을 바탕으로 유추해 보자면 아래의 이미지에는 동전 묶음 리스트가 포함되어 있고, 각 묶음에는 페니 리스트가 포함되어 있습니다.
리스트의 리스트에서 만들 수 있는 조회는 무엇일까요? 이러한 조회에서는 기존 특성을 확인합니다.
동전의 유형은 몇 가지입니까? 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에서는 지정된 함수를 입력 리스트에 적용하지만 계층의 한 단계 아래에 적용합니다. 조합은 지정된 함수의 입력에 해당하는 여러 입력이 있을 수 있다는 점을 제외하고 맵과 동일합니다.
간단한 소개를 위해 이전 섹션의 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가 표시됩니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습에서는 이전 연습에서 설정한 몇 가지 논리를 사용하여 표면을 편집합니다. 여기서 우리의 목표는 직관적이지만 데이터 구조 탐색 시 더욱 관련성을 높이는 것입니다. 우리는 제어점을 이동하여 표면을 분명하게 표현하려고 합니다.
위 노드의 문자열로 시작합니다. 기본 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 값을 변경할 수 있습니다. 변환 후 형상 업데이트를 확인하십시오!
리스트는 데이터를 구성하는 방법입니다. 컴퓨터의 운영 체제에는 파일과 폴더가 있습니다. Dynamo에서는 이러한 파일과 폴더를 각각 항목과 리스트로 간주할 수 있습니다. 운영 체제처럼, 여러 가지 방법으로 데이터를 작성, 수정 및 조회할 수 있습니다. 이 장에서는 Dynamo에서 리스트가 관리되는 방식에 대해 자세히 알아보겠습니다.
지금까지 리스트가 무엇인지 확인했으므로 리스트에서 수행할 수 있는 작업에 대해 설명하겠습니다. 리스트가 하나의 게임 카드 세트라고 생각해 보십시오. 세트는 리스트이며, 각 카드는 하나의 항목을 나타냅니다.
리스트에서는 어떤 조회를 만들 수 있을까요? 이러한 조회에서는 기존 특성을 확인합니다.
한 세트에 들어 있는 카드의 수는? 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%만 선택했습니다.
가장 간단한 데이터 형식이 숫자인 경우 해당 숫자를 연결하는 가장 쉬운 방법은 수학을 사용하는 것입니다. 나누기와 같은 단순한 연산자부터 삼각 함수, 좀 더 복잡한 수식까지, 수학은 수치 관계 및 패턴을 탐색하기 위한 좋은 방법입니다.
연산자는 두 개의 숫자 입력 값과 대수 함수를 사용하는 구성요소의 집합으로, 하나의 출력 값을 생성합니다(추가, 빼기, 곱하기, 나누기 등). 이러한 항목은 연산자>작업에서 찾을 수 있습니다.
아이콘 | 이름(구문) | 입력 | 출력 |
---|
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
수식을 통해 연산자와 변수를 결합하여 보다 복잡한 관계를 형성합니다. 슬라이더를 사용하여 입력 매개변수로 제어할 수 있는 수식을 만듭니다.
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 으로 변경합니다. 그러면 훨씬 더 조밀한 그리드가 표시되고 나선의 방향은 불명확해집니다. 이제, 해바라기가 작성되었습니다.
선은 점의 집합으로 구성되며, 각 선에는 최소 2개의 점이 있습니다. Dynamo에서 선을 작성하는 가장 일반적인 방법 중 하나는 Line.ByStartPointEndPoint
를 사용하여 Dynamo에서 선을 작성하는 것입니다.
사진 출처:
사진 출처:
_참고: 이 연습은 이전 버전의 Dynamo로 작성되었습니다. _ List.Map 기능의 대부분은 List@Level _기능을 추가하여 해결되었습니다. 자세한 내용은 아래의 _ 을 참조하십시오.
Code block 줄임에서는 "[]"을 사용하여 리스트를 정의합니다. 그러면 List.Create 노드보다 훨씬 빠르고 효율적인 방법으로 리스트를 작성할 수 있습니다. Code block에 대해서는 에서 자세히 설명합니다. 아래 이미지를 참조하여 여러 표현식이 포함된 리스트를 code block으로 정의할 수 있는 방법을 확인하십시오.
Code block 축약형은 "[]"를 사용하여 복잡한 데이터 구조에서 원하는 특정 항목을 빠르고 쉽게 선택할 수 있습니다. Code blocks에 대해서는 에서 자세히 설명합니다. 아래 이미지를 참조하여 여러 데이터 유형이 포함된 리스트를 code block으로 조회할 수 있는 방법을 확인하십시오.
사진 출처:
이제 이전 단계의 대량 노드는 제대로 작동하지만 여기에는 상당히 많은 작업이 필요합니다. 보다 효율적인 워크플로우를 작성하려면 를 살펴보고 Dynamo 표현식의 문자열을 하나의 노드로 정의하십시오. 이 다음 단계 시리즈에서는 파라메트릭 방정식을 사용하여 Fibonacci 나선을 그리는 방법을 살펴보겠습니다.
원형 Nautilus 쉘의 패턴이 만들어졌으므로, 이제 파라메트릭 그리드를 살펴보겠습니다. Fibonacci 나선에서 기본 회전을 사용하여 Fibonacci 그리드를 작성하면 을 본뜬 결과가 모델링됩니다.
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을 작성합니다.
+ 더하기
- 빼기
* 곱하기
/ 나누기
% 모듈 방식 분할에서는 두 번째 입력으로 나눈 후 첫 번째 입력의 나머지를 계산합니다.
< 다음보다 작음
> 다음보다 큼
== 두 값 간의 균일성에 대한 균일성 테스트입니다.
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)
색상
밝기
더하기(+) | var[]...[], var[]...[] | var[]...[] |
빼기(-) | var[]...[], var[]...[] | var[]...[] |
곱하기(*) | var[]...[], var[]...[] | var[]...[] |
나누기(/) | var[]...[], var[]...[] | var[]...[] |
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 2.0에서는 사전 데이터 유형을 리스트 데이터 유형과 분리하는 개념을 도입했습니다. 이러한 변경으로 인해 워크플로우에서 데이터를 작성하고 사용하는 방법도 크게 달라질 수 있습니다. 2.0 이전에는 사전과 리스트가 데이터 유형으로 결합되어 있었습니다. 간단히 말해, 리스트는 실제로 정수 키가 있는 사전이었습니다.
사전은 각 키가 각 모음에서 고유한 키-값 쌍 집합으로 구성된 데이터 유형입니다. 사전에는 순서가 없으므로 기본적으로 리스트의 경우처럼 색인 값 대신, 키를 사용하여 "항목을 조회"할 수 있습니다. Dynamo 2.0에서 문자열만 키가 될 수 있습니다.
리스트는 정렬된 값의 모음으로 구성된 데이터 유형입니다. Dynamo에서 리스트는 정수를 색인 값으로 사용합니다.
리스트에서 사전을 분리하면서 사전이 일급 객체가 되었고, 사전을 사용하여 색인 값을 기억하거나 엄격한 리스트 구조를 유지할 필요 없이 전체 워크플로우에서 빠르고 쉽게 값을 저장하고 조회할 수 있게 되었습니다. 사용자 테스트를 통해 일부 GetItemAtIndex
노드 대신, 사전을 활용할 때 그래프 크기가 크게 감소된 것을 확인할 수 있었습니다.
구문 이 변경되었으며, 이로 인해 코드 블록에서 사전 및 리스트를 초기화하고 사용하는 방법도 달라졌습니다.
사전은 구문 {key:value}
를 사용합니다.
리스트는 구문 [value,value,value]
를 사용합니다.
사전을 작성, 수정 및 조회할 수 있도록 _새 노드_가 라이브러리에 추가되었습니다.
v1.x 코드 블록에서 작성된 리스트는 스크립트를 로드할 때 중괄호 { }
대신 대괄호 [ ]
를 사용하는 새 리스트 구문으로 자동으로 마이그레이션됩니다. \
컴퓨터 과학에서 리스트와 같은 사전은 객체 모음을 의미합니다. 리스트는 특정 순서로 나열되지만, 사전은 정렬되지 않은 모음입니다. 순차적인 번호(색인)를 사용하지 않고 대신 키를 사용합니다.
아래 이미지는 사전의 잠재적인 사용 사례를 보여줍니다. 사전은 직접적인 상관 관계가 없을 수도 있는 두 가지 데이터 조각을 연관 짓는 데 사용되는 경우가 많습니다. 여기에서는 나중에 조회할 수 있도록 스페인어 버전 단어를 영어 버전에 연결합니다.
두 가지 데이터 요소를 연결할 사전을 작성합니다.
지정된 키를 사용하여 값을 가져옵니다.
사전은 키라고 하는 다른 데이터 부분과 연관된 데이터 모음을 나타냅니다. 사전은 데이터를 검색하고, 삭제하고, 모음에 삽입할 수 있는 기능을 제공합니다.
기본적으로 사전을 항목을 조회하는 매우 지능적인 방법으로 생각할 수 있습니다.
그동안 Dynamo에서 사전 기능을 사용할 수 있었지만, Dynamo 2.0에서는 이 데이터 유형을 관리하는 새로운 방법을 도입했습니다.
원본 이미지 출처: sixtysecondrevit.com
토끼굴 더 아래로 내려가면서 계층에 더 많은 계층을 추가해 보겠습니다. 데이터 구조는 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;
으로 변경할 수 있습니다.
흔들의자의 첫 번째 버전은 날렵한 모습이었으므로, 두 번째 모델은 오프로드에서 휴식을 취하기 적절한 스포츠 유틸리티 버전으로 만들었습니다.
Dynamo 2.0에서는 사전에 대해 이전에 앞서 논의한 노드가 도입되어 있으며, 코드 블록에도 이에 대한 새 기능이 포함되어 있습니다.
아래와 같은 구문이나 노드의 DesignScript 기반 표현을 사용할 수 있습니다.
사전은 Dynamo의 객체 유형이므로 사전에서 다음 커밋을 수행할 수 있습니다.
이러한 종류의 상호작용을 유지하는 것은 Revit 데이터를 문자열에 연관 지을 때 특히 유용합니다. 다음으로, 몇 가지 Revit 사용 사례를 살펴보겠습니다.
논리 또는 좀 더 구체적으로 말해서 조건부 논리를 사용하면 테스트를 기준으로 하나의 작업 또는 작업 세트를 지정할 수 있습니다. 테스트를 평가한 후에는 프로그램 흐름을 제어하는 데 사용할 수 있는 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 원통 체인은 여전히 모든 슬라이더에 동적으로 연결되어 있습니다. 각 슬라이더를 조정하며 정의가 업데이트되는 것을 확인해 보십시오.
아이콘 | 이름/구문 | 입력 | 출력 |
---|
Object.IsNull | obj | 부울 |
If(If) | test, true, false | 결과 |
Formula(IF(x,y,z)) | x, y, z | 결과 |
Code Block((x?y:z);) | x? y, z | 결과 |