공식적으로, 문자열은 리터럴 상수 또는 일부 변수 유형을 나타내는 문자 시퀀스입니다. 비공식적으로는 프로그래밍에서 텍스트를 의미하는 용어입니다. 지금까지 정수 및 십진수를 사용하여 매개변수를 구동했으며, 텍스트로도 같은 작업을 수행할 수 있습니다.
문자열은 사용자 매개변수 정의, 문서 세트에 주석 달기, 텍스트 기반 데이터 세트 구문 분석 등 광범위한 응용 분야에서 사용할 수 있습니다. 문자열 노드는 코어>입력 카테고리에 있습니다.
위의 샘플 노드는 문자열입니다. 숫자는 문자열로 나타내거나 문자 또는 전체 텍스트 배열로 나타낼 수 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
문자열을 조회하여 많은 양의 데이터를 신속하게 구문 분석할 수 있습니다. 워크플로우 진행 속도를 높이고 소프트웨어 상호 운용성을 지원하는 몇 가지 기본 작업에 대해 살펴보겠습니다.
아래 이미지에서는 외부 스프레드시트에서 가져온 데이터 문자열을 고려합니다. 해당 문자열은 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 프로그램의 와이어를 통과하는 데이터와 관련된 기본적인 개념을 소개합니다.
데이터는 프로그램과 관련된 항목입니다. 데이터는 유선으로 이동되며, 새로운 형식의 출력 데이터로 처리되는 노드에 입력을 제공합니다. 데이터의 정의, 구성 방법을 검토하고 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 | 부울 |
색상은 시각적 프로그램의 출력에서 차이를 렌더링하고, 우수한 시각적 요소를 작성하는 데 유용한 데이터 유형입니다. 추상 데이터와 다양한 숫자를 사용할 경우 무엇이 어느 정도로 달라지는지 확인하기 어려운 경우가 있습니다. 이러한 경우 색상을 적용하면 매우 유용합니다.
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인 샘플의 출력 표면 미리보기 클로즈업
가장 간단한 데이터 형식이 숫자인 경우 해당 숫자를 연결하는 가장 쉬운 방법은 수학을 사용하는 것입니다. 나누기와 같은 단순한 연산자부터 삼각 함수, 좀 더 복잡한 수식까지, 수학은 수치 관계 및 패턴을 탐색하기 위한 좋은 방법입니다.
연산자는 두 개의 숫자 입력 값과 대수 함수를 사용하는 구성요소의 집합으로, 하나의 출력 값을 생성합니다(추가, 빼기, 곱하기, 나누기 등). 이러한 항목은 연산자>작업에서 찾을 수 있습니다.
아이콘 | 이름(구문) | 입력 | 출력 |
---|---|---|---|
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
수식을 통해 연산자와 변수를 결합하여 보다 복잡한 관계를 형성합니다. 슬라이더를 사용하여 입력 매개변수로 제어할 수 있는 수식을 만듭니다.
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 좌표가 됩니다.
이제 이전 단계의 대량 노드는 제대로 작동하지만 여기에는 상당히 많은 작업이 필요합니다. 보다 효율적인 워크플로우를 작성하려면 DesignScript를 살펴보고 Dynamo 표현식의 문자열을 하나의 노드로 정의하십시오. 이 다음 단계 시리즈에서는 파라메트릭 방정식을 사용하여 Fibonacci 나선을 그리는 방법을 살펴보겠습니다.
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로 만들면 보너스 점수를 드리겠습니다.
원형 Nautilus 쉘의 패턴이 만들어졌으므로, 이제 파라메트릭 그리드를 살펴보겠습니다. Fibonacci 나선에서 기본 회전을 사용하여 Fibonacci 그리드를 작성하면 해바라기 씨의 성장을 본뜬 결과가 모델링됩니다.
이전 연습의 동일한 단계인 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 으로 변경합니다. 그러면 훨씬 더 조밀한 그리드가 표시되고 나선의 방향은 불명확해집니다. 이제, 해바라기가 작성되었습니다.
논리 또는 좀 더 구체적으로 말해서 조건부 논리를 사용하면 테스트를 기준으로 하나의 작업 또는 작업 세트를 지정할 수 있습니다. 테스트를 평가한 후에는 프로그램 흐름을 제어하는 데 사용할 수 있는 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. 홀수 색인의 직육면체 리스트.
지금까지 이 연습에서 살펴본 논리 연산에 따라 형상 치수를 정의하는 프로세스를 프로그래밍해 보았습니다.
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[]...[]
If(If)
test, true, false
결과
Formula(IF(x,y,z))
x, y, z
결과
Code Block((x?y:z);)
x? y, z
결과