Dynamo
Primer for v2.0
한국어
한국어
  • 정보
  • 소개
    • Dynamo의 정의 및 작동 방식
    • Primer 사용자 안내서, Dynamo Community 및 플랫폼
  • Dynamo 설정
  • 사용자 인터페이스
    • 작업공간
    • 라이브러리
  • 노드 및 와이어
  • 필수 노드 및 개념
    • 노드의 색인
    • 계산 방식 설계를 위한 형상
      • 형상 개요
      • 벡터, 평면 및 좌표계
      • 점
      • 곡선
      • 표면
      • 솔리드
      • 메쉬
    • 프로그램의 빌딩 블록
      • 데이터
      • 수학
      • 논리
      • 문자열
      • 색상
    • 리스트로 설계
      • 리스트란 무엇입니까?
      • 리스트 작업
      • 리스트의 리스트
      • n차원 리스트
    • Dynamo의 사전
      • 사전이란
      • 사전 노드
      • 코드 블록의 사전
      • Revit 사용 사례
  • 사용자 노드 및 패키지
    • 사용자 노드
      • 사용자 노드 소개
      • 사용자 노드 작성
      • 라이브러리에 게시
    • 패키지
      • 패키지 소개
      • 패키지 성공 사례 - Mesh Toolkit
      • 패키지 개발
      • 패키지 게시하기
      • Zero-Touch 가져오기
  • Revit용 Dynamo
    • Revit 연결
    • 선택
    • 편집
    • 작성
    • 사용자화
    • 문서화
  • Dynamo for Civil 3D
    • Civil 3D 연결
    • 시작하기
    • 노드 라이브러리
    • 샘플 워크플로우
      • 도로
        • 등주 배치
      • 토지
        • 서비스 배치
      • 유틸리티
        • 구조물 이름 바꾸기
      • 레일
        • 클리어런스 엔벨로프
      • 측량
        • 점 그룹 관리
    • 고급 항목
      • 객체 바인딩
      • Python 및 Civil 3D
    • Dynamo 플레이어
    • 유용한 패키지
    • 리소스
  • Forma 베타의 Dynamo
    • Forma에서 Dynamo Player 설정
    • Dynamo Player에서 그래프 추가 및 공유
    • Dynamo Player에서 그래프 실행
    • Dynamo 컴퓨팅 서비스와 Desktop Dynamo의 차이점
  • Dynamo의 코딩
    • 코드 블록과 DesignScript
      • Code Block이란
      • DesignScript 구문
      • 축약형
      • 함수
    • DesignScript를 사용한 형상
      • DesignScript 형상 기본 사항
      • 기하학적 원형
      • 벡터 수학
      • 곡선: 보간 및 제어점
      • 전환, 회전 및 기타 변환
      • 표면: 보간, 제어점, 로프트, 회전
      • 기하학적 매개변수화
      • 교차 및 자르기
      • 기하학적 부울
      • Python 점 생성기
    • Python
      • Python 노드
      • Python 및 Revit
      • 자체 Python 템플릿 설정
    • 언어 변경 사항
  • 모범 사례
    • 그래프 전략
    • 스크립팅 전략
    • 스크립팅 참조
    • 프로그램 관리
    • Dynamo에서 대규모 데이터 세트로 효율적으로 작업
  • 샘플 워크플로우
    • 시작하기 워크플로우
      • 파라메트릭 꽃병
      • 어트랙터 점
    • 개념 색인
  • 개발자 입문서
    • 소스에서 Dynamo 빌드하기
      • 소스에서 DynamoRevit 빌드하기
      • Dynamo의 종속성 관리 및 업데이트
    • Dynamo를 위한 개발
      • 시작하기
      • Zero-Touch 사례 연구 - 그리드 노드
      • Zero-Touch 노드에서 Python 스크립트 실행하기(C#)
      • Zero-Touch로 한 단계 더 나아가기
      • 고급 Dynamo 노드 사용자 정의
      • Dynamo 패키지에서 COM(interop) 유형 사용
      • NodeModel 사례 연구 - 사용자 지정 UI
      • Dynamo 2.x용 패키지 및 Dynamo 라이브러리 업데이트하기
      • Dynamo 3.x용 패키지 및 Dynamo 라이브러리 업데이트하기
      • 확장
      • Dynamo 2.0+에 대한 사용자 패키지 구성 정의
      • Dynamo 명령행 인터페이스
      • Dynamo 통합
      • Dynamo For Revit을 위한 개발
      • 패키지 게시하기
      • Visual Studio에서 패키지 빌드하기
      • 패키지로 제공되는 확장
    • 끌어오기 요청
    • 테스트 기대치
    • 예제
  • 부록
    • 질문과 대답(FAQ)
    • 시각적 프로그래밍 및 Dynamo
    • 리소스
    • 릴리즈 정보
    • 유용한 패키지
    • 예제 파일
    • 호스트 통합 맵
    • PDF 다운로드
    • Dynamo 키보드 바로 가기
Powered by GitBook
On this page
  • Code Block의 점 표기법
  • 노드 호출 - Create, Action, Query
  • 레이싱은 어떨까요?
  • Node to Code
  • 연습: 표면 어트랙터
Edit on GitHub
Export as PDF
  1. Dynamo의 코딩
  2. 코드 블록과 DesignScript

DesignScript 구문

PreviousCode Block이란Next축약형

Last updated 2 months ago

Dynamo의 노드 이름에서는 일반적인 테마를 확인할 수 있습니다. 각 노드에서는 공백 없이 "." 구문을 사용합니다. 그 이유는 각 노드의 맨 위에 있는 문자가 스크립팅의 실제 구문을 나타내고 "."(또는 점 표기법)은 호출할 수 있는 방법과 요소를 구분하기 때문입니다. 이를 통해 시각적 스크립팅에서 문자 기반 스크립팅으로 쉽게 변환할 수 있습니다.

점 표기법의 일반적인 비유로, Dynamo에서 파라메트릭 사과는 어떻게 처리할 수 있을까요? 다음은 사과를 먹기로 결정하기 전에 사과에 대해 실행할 몇 가지 메서드입니다. 참고: 이는 실제 Dynamo 메서드가 아닙니다.

사람이 읽을 수 있음
점 표기법
Output

사과가 무슨 색인가?

Apple.color

빨간색

사과가 잘 익었는가?

Apple.isRipe

true

사과 무게는 어떻게 되는가?

Apple.weight

6oz

사과가 어디에서 왔는가?

Apple.parent

트리

사과에서 만들어지는 것은 무엇인가?

Apple.children

seeds

이 사과는 현지에서 키운 것인가?

Apple.distanceFromOrchard

60mi.

여러분에 대해서는 잘 모르지만 위 표의 출력을 통해 판단해보면 이는 맛있는 사과처럼 보입니다. Apple.eat() 를 수행해 보겠습니다.

Code Block의 점 표기법

사과의 비유를 생각하면서 Point.ByCoordinates 를 살펴보고 code block을 사용하여 점을 작성하는 방법을 살펴보겠습니다.

code block 구문 Point.ByCoordinates(0,10);는 하나의 노드를 사용하여 점을 작성할 수 있다는 점을 제외하고 Dynamo의 Point.ByCoordinates 노드와 동일한 결과를 제공합니다. 이 구문은 별도의 노드를 "X" 및 "Y" 에 연결하는 것보다 더 효율적입니다.

  1. code block에서 Point.ByCoordinates 를 사용하여 즉시 사용 가능한 노드 (X,Y) 와 동일한 순서로 입력을 지정합니다.

노드 호출 - Create, Action, Query

노드가 특수한 "UI" 노드 가 아닌 한, Code Block을 통해 특수 사용자 인터페이스 기능을 사용하는 라이브러리의 모든 일반 노드를 호출할 수 있습니다. 예를 들어 _Circle.ByCenterPointRadius_는 호출할 수 있지만 Watch 3D 노드를 호출하는 것은 적절하지 않습니다.

일반 노드(대부분의 라이브러리)는 일반적으로 다음과 같은 세 가지 유형으로 사용됩니다. 이러한 카테고리에 유의하면 라이브러리 구성을 이해할 수 있습니다. 이러한 세 가지 유형의 메서드 또는 노드는 Code Block 내에서 호출될 때 다르게 취급됩니다.

  1. Create - 항목 작성 또는 구성

  2. Action - 항목에 대해 작업 수행

  3. Query - 이미 존재하는 항목의 특성을 가져오기

Create

"Create" 카테고리에서는 형상을 처음부터 새로 구성합니다. code block에 값을 왼쪽에서 오른쪽으로 입력합니다. 이러한 입력은 위에서 아래로의 노드 입력과 같은 순서로 되어 있습니다.

Line.ByStartPointEndPoint 노드와 code block의 해당 구문을 비교해 보면 동일한 결과를 얻을 수 있습니다.

작업

Action은 해당 유형의 객체에 대해 수행할 수 있는 작업입니다. Dynamo에서는 많은 코딩 언어에 공통되는 _점 표기법_을 사용하여 항목에 작업을 적용합니다. 작업이 완료되면 점을 입력한 후 작업의 이름을 입력합니다. action-type 메서드의 입력은 create-type 메서드와 같이 괄호로 묶으며, 표시되는 첫 번째 입력을 해당 노드에 지정할 필요가 없습니다. 대신, 작업을 수행할 요소를 지정합니다.

  1. Point.Add 노드는 action-type 노드이므로 구문이 조금 다르게 작동합니다.

  2. 입력은 (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> 등)이 정의됩니다.

  1. 이 예에서는 두 개의 범위를 정의하는 줄임 메서드를 사용합니다(이 장의 다음 섹션에서 줄임 메서드에 대해 좀 더 자세히 설명함). 간단히 말해 0..1;은 {0,1}과 동일하며 -3..-7은 {-3,-4,-5,-6,-7}과 동일합니다. 결과적으로 x 값 2개와 y 값 5개가 표시됩니다. 이러한 불일치 리스트에서 복제 가이드를 사용하지 않는 경우 최단 리스트의 길이에 해당하는 두 점의 리스트가 표시됩니다. 복제 가이드를 사용하여 2개 및 5개 좌표의 가능한 모든 조합(또는 외적)을 찾을 수 있습니다.

  2. Point.ByCoordinates(x_vals<1>,y_vals<2>); 구문을 사용하면 각 리스트에 5 개의 항목이 포함된 2 개의 리스트를 얻게 됩니다.

  3. Point.ByCoordinates(x_vals<2>,y_vals<1>); 구문을 사용하면 각 리스트에 2 개의 항목이 포함된 5 개의 리스트를 얻게 됩니다.

이 표기법을 사용하여 주요 리스트(5개 항목으로 구성된 2개 리스트 또는 2개 항목으로 구성된 5개 리스트)를 지정할 수도 있습니다. 이 예에서 복제 가이드의 순서를 변경하여 그리드 내의 점 행 리스트나 그리드 내의 점 열 리스트를 포함하는 결과를 생성합니다.

Node to Code

위의 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 구문을 배우는 데 도움이 됩니다.

먼저 위 이미지의 정의를 다시 작성하거나 샘플 파일을 엽니다.

  1. Point.ByCoordinates의 레이싱이 외적 으로 설정되어 있습니다.

  2. 그리드의 각 점이 참조점까지의 거리를 기준으로 Z 방향으로 위로 이동합니다.

  3. 표면이 다시 작성되고 두꺼워지면서 참조점까지의 거리를 기준으로 형상에 돌출이 작성됩니다.

  1. 가장 첫 단계로, Point.ByCoordinates(x,y,0); 참조점을 먼저 정의해 보겠습니다. 참조점 노드 맨 위에 지정된 것과 동일한 Point.ByCoordinates 구문을 사용합니다.

  2. 슬라이더를 사용하여 동적으로 업데이트할 수 있도록 변수 x 및 y 가 Code Block 에 삽입됩니다.

  3. -50에서 50까지의 범위에 해당하는 Code Block 입력에 슬라이더 를 추가합니다. 이렇게 하면 기본 Dynamo 그리드에 걸쳐 나타낼 수 있습니다.

  1. Code Block의 두 번째 줄에서는 Number Sequence 노드를 대치할 축약형 coordsXY = (-50..50..#11);을 정의합니다. 이 내용은 다음 섹션에서 자세히 살펴보겠습니다. 지금은 일단 이 줄임 코드가 시각적 스크립트의 Number Sequence 노드와 동일하다는 것만 이해합니다.

  1. 이제 coordsXY 시퀀스에서 점의 그리드를 작성하려고 합니다. 이렇게 하려면 Point.ByCoordinates 구문을 사용해야 하지만, 시각적 스크립트에서 수행한 것과 동일한 방식으로 리스트의 _외적_도 시작해야 합니다. 이를 위해 gridPts = Point.ByCoordinates(coordsXY<1>,coordsXY<2>,0); 줄을 입력합니다. 꺾쇠괄호는 외적 참조를 나타냅니다.

  2. Watch3D 노드에는 Dynamo 그리드를 가로지르는 점 그리드가 있습니다.

  1. 이제 다소 까다롭지만 참조점까지의 거리를 기준으로 점 그리드를 위로 이동하려고 합니다. 먼저 이 새 점 세트를 transPts 라고 지정합니다. 변환은 기존 요소에 대한 작업이므로 Geometry.Translate...를 사용하는 대신, gridPts.Translate를 사용합니다.

  2. 캔버스의 실제 노드에서 읽으면 3개의 입력이 있는 것을 알 수 있습니다. 해당 요소에 대해 작업을 수행하고 있으므로(gridPts.Translate 사용) 변환할 형상은 이미 선언되어 있습니다. 나머지 두 입력은 함수 direction 및 distance 의 괄호 안에 삽입됩니다.

  3. 방향은 충분히 단순하므로 Vector.ZAxis()를 사용하여 수직으로 이동합니다.

  4. 여전히 참조점과 각 그리드 점 사이의 거리를 계산해야 하므로 이 작업을 참조점에 대한 작업과 동일한 방식으로 수행합니다. refPt.DistanceTo(gridPts)

  5. 코드의 마지막 줄은 변환된 점을 반환합니다. transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));

  1. 이제 Nurbs 표면을 작성하기 위한 적절한 데이터 구조를 가진 점 그리드가 있습니다. srf = NurbsSurface.ByControlPoints(transPts);를 사용하여 표면을 구성합니다.

  1. 마지막으로, 표면에 깊이를 추가하기 위해 solid = srf.Thicken(5);을 사용하여 솔리드를 구성합니다. 이 경우 코드에서 표면을 5개 단위씩 두껍게 만들었지만 항상 이 값을 변수로 선언한 다음(예: thickness로 지칭) 슬라이더를 사용하여 해당 값을 제어할 수 있습니다.

"Node to Code"로 그래프를 단순화하기

"Node to Code" 기능은 방금 버튼 클릭으로 완료한 전체 연습을 자동화합니다. 이 기능은 사용자 정의 및 재사용 가능한 code block을 작성하는 데 유용할 뿐만 아니라 Dynamo에서 스크립팅하는 방법을 배울 수 있는 매우 유용한 도구이기도 합니다.

  1. 연습의 1단계에서 사용했던 기존 시각적 스크립트로 시작합니다. 모든 노드를 선택하고 캔버스를 마우스 오른쪽 버튼으로 클릭한 다음, "Node to Code" 를 선택합니다. 아주 간단합니다.

Dynamo에서는 시각적 그래프, 레이싱 및 모든 항목의 문자 기반 버전을 자동화했습니다. 시각적 스크립트에서 이 기능을 테스트하고 code block의 강력한 성능을 활용해보십시오.

14KB
Dynamo-Syntax_Attractor-Surface.dyn
NodeNames