Dynamo 2.0을 사용하면 Python 창을 처음 열 때 사용할 기본 템플릿 (.py extension)
을 지정할 수 있습니다. 이 기능은 Dynamo 내에서 Python 사용을 촉진하기 위해 오랫동안 요청되어 왔습니다. 템플릿을 사용할 수 있는 경우 사용자 Python 스크립트를 개발할 때 기본 가져오기를 바로 사용할 수 있게 됩니다.
이 템플릿의 위치는 Dynamo 설치의 APPDATA
위치에 있습니다.
이는 일반적으로 ( %appdata%\Dynamo\Dynamo Core\{version}\ )
과 같습니다.
이 기능을 사용하려면 DynamoSettings.xml
파일에 다음 행을 추가해야 합니다. (메모장에서 편집)
여기에서 <PythonTemplateFilePath />
를 간단히 다음으로 대치할 수 있습니다.
참고: CURRENTUSER를 사용자 이름으로 대치하십시오.
다음으로, 내장 항목으로 사용하려는 기능이 포함된 템플릿을 작성해야 합니다. 이 예에서는 Revit 관련 가져오기와 Revit으로 작업할 때의 다른 일반적인 항목을 포함할 수 있습니다.
빈 메모장 문서를 시작하고 다음 코드를 그 안에 붙여 넣습니다.
완료되면 APPDATA
위치에 이 파일을 PythonTemplate.py
로 저장합니다.
Python 템플릿을 정의했으므로 Dynamo는 Python 노드가 배치될 때마다 이 템플릿을 찾습니다. 이 템플릿을 찾을 수 없는 경우 기본 Python 창과 유사한 항목이 표시됩니다.
Python 템플릿을 찾은 경우(이 예의 Revit 템플릿처럼) 작성한 기본 항목을 볼 수 있습니다.
이러한 유용한 추가 기능에 대한 자세한 정보(Radu Gidei 작성)를 다음에서 확인할 수 있습니다. https://github.com/DynamoDS/Dynamo/pull/8122
Python은 널리 사용되는 프로그래밍 언어로, 구문 스타일 때문에 인기가 높습니다. 판독 가능성이 뛰어나므로 다른 여러 언어보다 쉽게 배울 수 있습니다. Python은 모듈 및 패키지를 지원하며 기존 응용프로그램에 포함될 수 있습니다. Python을 시작하고 실행하는 방법에 대한 자세한 내용은 Python.org의 "시작하기" 페이지에서 확인할 수 있습니다.
Dynamo의 시각적 프로그래밍 환경에서 텍스트 프로그래밍을 사용하는 이유는 무엇입니까? 은 장점이 많습니다. 직관적인 시각적 인터페이스에서 특수 구문을 학습하지 않고도 프로그램을 작성할 수 있습니다. 그러나 시각적 프로그램은 다소 복잡해 보일 수 있으며, 경우에 따라 기능이 부족할 수 있습니다. 예를 들어, Python에서는 조건문(if/then)을 작성하고 순환하기 위한 보다 효율적인 메서드를 제공합니다. Python은 Dynamo의 기능을 확장하고 여러 노드를 간단한 몇 개의 코드 줄로 바꿀 수 있게 해주는 강력한 도구입니다.
시각적 프로그램:
텍스트 프로그램:
code block과 마찬가지로 Python 노드는 시각적 프로그래밍 환경 내의 스크립팅 인터페이스입니다. Python 노드는 라이브러리의 스크립트>편집기>Python 스크립트에서 찾을 수 있습니다.
노드를 두 번 클릭하면 Python 스크립트 편집기가 열립니다. 노드를 마우스 오른쪽 버튼으로 클릭하고 편집... 을 선택할 수도 있습니다. 상단에 상용구가 몇 가지 있습니다. 이 텍스트는 필요한 라이브러리를 참조하는 데 유용합니다. 입력 내용은 IN 배열에 저장됩니다. 값을 OUT 변수에 지정하면 Dynamo로 반환됩니다.
메서드로는 ByCoordinates 와 같은 구성자, Add 와 같은 동작, X, Y 및 Z 좌표와 같은 조회 등이 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 예에서는 솔리드 모듈에서 패턴을 작성하는 Python 스크립트를 작성한 후, 사용자 노드로 변환하겠습니다. 먼저, Dynamo 노드를 사용하여 솔리드 모듈을 작성해 보겠습니다.
Rectangle.ByWidthLength: 솔리드의 기반이 될 직사각형을 작성합니다.
Surface.ByPatch: 직사각형을 ‘closedCurve’ 입력에 연결하여 하단 표면을 작성합니다.
Geometry.Translate: code block을 사용해 솔리드의 베이스 두께를 지정하고 직사각형을 ‘geometry’ 입력에 연결하여 위로 이동합니다.
Polygon.Points: 변환된 직사각형을 조회하여 코너 점을 추출합니다.
Geometry.Translate: code block을 사용하여 4개의 점에 해당하는 4개의 값 리스트를 작성하고 솔리드의 한쪽 코너를 위로 변환합니다.
Polygon.ByPoints: 변환된 점을 사용하여 상단 사각형을 다시 구성합니다.
Surface.ByPatch: 다각형을 연결하여 상단 표면을 작성합니다.
상단 표면과 하단 표면이 생겼으므로 두 프로파일 간을 로프트하여 솔리드의 측면을 작성해 보겠습니다.
List.Create: 하단 직사각형 및 상단 다각형을 색인 입력에 연결합니다.
Surface.ByLoft: 두 프로파일을 로프트하여 솔리드의 측면을 작성합니다.
List.Create: 상단, 측면, 하단 표면을 색인 입력에 연결하여 표면 리스트를 작성합니다.
Solid.ByJoinedSurfaces: 표면을 결합하여 솔리드 모듈을 작성합니다.
솔리드가 생겼으므로 Python 스크립트 노드를 작업공간에 배치해 보겠습니다.
노드에 입력을 추가하려면 노드에서 + 아이콘을 클릭합니다. 입력은 리스트의 항목임을 나타낼 수 있도록 IN[0], IN[1] 등으로 이름이 지정됩니다.
먼저 입력과 출력을 정의해 보겠습니다. 노드를 두 번 클릭하여 Python 편집기를 엽니다. 아래 코드에 따라 편집기에서 코드를 수정합니다.
이 코드는 연습을 진행하는 동안 좀 더 적절하게 수정됩니다. 다음으로, 솔리드 모듈을 배열하기 위해 필요한 정보를 고려해야 합니다. 먼저, 변환 거리를 결정하기 위해 솔리드의 치수를 알아야 합니다. 경계 상자 버그 때문에 모서리 곡선 형상을 사용하여 경계 상자를 작성해야 합니다.
Dynamo의 Python 노드를 살펴봅니다. Dynamo의 노드 제목에 표시되는 것과 동일한 구문을 사용하고 있습니다. 아래에서 주석 처리된 코드를 확인하십시오.
솔리드 모듈을 변환 및 회전하는 작업을 둘 다 수행할 예정이므로 Geometry.Transform 작업을 사용해 보겠습니다. Geometry.Transform 노드를 보면 솔리드를 변환하기 위해 소스 좌표계와 대상 좌표계가 필요하다는 사실을 알게 됩니다. 소스는 솔리드의 컨텍스트 좌표계인 한편, 대상은 배열된 각 모듈의 다른 좌표계가 됩니다. 즉, 매번 좌표계를 다르게 변환하려면 x 및 y 값으로 순환해야 합니다.
실행을 클릭한 다음, 코드를 저장합니다. 다음과 같이 Python 노드를 기존 스크립트와 연결합니다.
Python 노드의 첫 번째 입력으로 Solid.ByJoinedSurfaces의 출력을 연결하고 Code Block을 사용하여 다른 입력을 정의합니다.
Topology.Edges 노드를 작성하고 Python 노드의 출력을 입력으로 사용합니다.
마지막으로 Edge.CurveGeometry 노드를 작성하고 Topology.Edges의 출력을 입력으로 사용합니다.
시드 값을 변경하여 다른 패턴을 작성해 보십시오. 다양한 효과를 위해 솔리드 모듈 자체의 매개변수를 변경할 수도 있습니다.
유용한 Python 스크립트를 작성했으므로 이를 사용자 노드로 저장해 보겠습니다. Python 스크립트 노드를 선택하고 작업공간을 마우스 오른쪽 버튼으로 클릭한 다음, '사용자 노드 작성'을 선택합니다.
이름, 설명 및 카테고리를 지정합니다.
그러면 사용자 노드를 편집할 새 작업공간이 열립니다.
Inputs: 입력 이름을 좀 더 알아보기 쉽게 변경하고 데이터 유형 및 기본값을 추가합니다.
Output: 출력 이름 변경
노드를 .dyf 파일로 저장하면 방금 변경한 사항이 사용자 노드에 반영되는 것을 확인할 수 있습니다.
Autodesk.DesignScript.Geometry 라이브러리를 사용하면 Code Block과 유사한 점 표기법을 사용할 수 있습니다. Dynamo 구문에 대한 자세한 내용은 뿐만 아니라 를 참조하십시오. 이 PDF 문서를 다운로드하려면 링크를 마우스 오른쪽 버튼으로 클릭하고 "다른 이름으로 링크 저장..."을 선택하십시오. ‘점’과 같은 형상 유형을 입력하면 점을 작성하고 조회하기 위한 메서드 리스트가 표시됩니다.
Dynamo에서 Python 스크립트를 사용하는 방법에 대해 설명했으므로 이제 Revit 라이브러리를 스크립팅 환경에 연결하는 방법을 살펴보겠습니다. 아래의 code block에서 처음 네 줄을 포함하는 Python Standard 및 Dynamo 코어 노드를 가져왔습니다. Revit 노드, Revit 요소 및 Revit 문서 관리자를 가져오려는 경우 다음과 같은 일부 코드 줄만 추가하면 됩니다.
이렇게 하면 Revit API에 액세스할 수 있으며 모든 Revit 작업에 대한 사용자 스크립트가 제공됩니다. 시각적 프로그래밍 프로세스와 Revit API 스크립팅을 결합하면 공동 작업 및 도구 개발이 크게 개선됩니다. 예를 들어 BIM 관리자와 구조도 설계자는 동일한 그래프에서 함께 작업할 수 있습니다. 이러한 공동 작업을 통해 모델의 설계 및 실행을 개선할 수 있습니다.
Dynamo Project 이면의 계획은 플랫폼 구현 범위를 넓히는 것입니다. Dynamo에서 일람표에 프로그램을 추가하면 사용자는 Python 스크립팅 환경에서 플랫폼별 API에 액세스할 수 있습니다. Revit이 이 섹션의 성공 사례에 해당하지만, 앞으로는 다른 플랫폼의 스크립팅에 대한 포괄적인 튜토리얼을 제공하는 더 많은 장이 제공될 예정입니다. 또한 이제 Dynamo로 가져올 수 있는 많은 IronPython 라이브러리에 액세스할 수 있습니다.
아래의 예는 Python을 사용하여 Dynamo에서 Revit 관련 작업을 구현하는 방법을 보여 줍니다. Dynamo 및 Revit과의 Python 관계에 대한 자세한 검토가 필요한 경우 Dynamo Wiki 페이지 를 참고하십시오. Python 및 Revit의 또 다른 유용한 리소스는 Revit Python 쉘 프로젝트입니다.
새로운 Revit 프로젝트를 작성합니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습에서는 Dynamo for Revit의 기본적인 Python 스크립트를 살펴볼 것입니다. 이 연습은 Revit 파일 및 요소 처리, Revit과 Dynamo 간의 커뮤니케이션 등에 중점을 둡니다.
이는 Dynamo 세션에 링크된 Revit 파일의 doc, uiapp 및 _app_을 검색하기 위해 미리 마련된 메서드입니다. 이전에 Revit API에서 작업해본 적이 있는 프로그래머는 감시 리스트의 항목을 알아차릴 수도 있습니다. 이러한 항목이 익숙하지 않더라도 아래의 연습에서 다른 예시를 사용하므로 괜찮습니다.
Dynamo에서 Revit 서비스를 가져오고 문서 데이터를 검색하는 방법은 다음과 같습니다.
Dynamo의 Python 노드를 살펴봅니다. 아래에서 코드를 찾을 수도 있습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습에서는 Dynamo Python 노드를 사용하여 Revit에서 간단한 모델 곡선을 작성하겠습니다.
Revit에서 새로운 개념 매스 패밀리를 작성하여 시작합니다.
개념 매스 폴더 를 열고 Metric Mass.rft 템플릿 파일을 사용합니다.
Revit에서 키보드 단축키 un
을 사용하여 프로젝트 단위 설정을 표시하고 길이 단위를 미터로 변경합니다.
Dynamo를 시작하고 아래 이미지의 노드 세트를 작성합니다. 먼저 Dynamo 노드에서 Revit에 두 개의 참조점을 작성합니다.
Code Block을 작성하고 값을
"0;"
으로 지정합니다.이 값을 X, Y 및 Z 입력에 대한 ReferencePoint.ByCoordinates 노드에 연결합니다.
단계 크기가 1인 -100에서 100 사이의 슬라이더를 3개 작성합니다.
각 슬라이더를 ReferencePoint.ByCoordinates 노드에 연결합니다.
Python 노드를 작업공간에 추가하고, 노드에서 "+" 버튼을 클릭하여 다른 입력을 추가한 후 두 참조점을 각 입력에 연결합니다. Python 노드를 엽니다.
Dynamo의 Python 노드를 살펴봅니다. 아래에서 전체 코드를 찾습니다.
System.Array: Revit에는 입력으로 Python 리스트가 아닌 시스템 배열이 필요합니다. 이 경우 코드 줄이 1개 더 추가될 뿐이지만 인수 유형에 신경 쓰면 Revit에서 Python 프로그래밍을 쉽게 처리할 수 있습니다.
Dynamo에서 Python을 사용하여 하나의 선으로 연결된 참조점 두 개를 작성했습니다. 다음 연습에서 좀 더 자세히 살펴보겠습니다.
아래 링크를 클릭하여 예제 파일을 다운로드하십시오.
전체 예시 파일 리스트는 부록에서 확인할 수 있습니다.
이 연습은 간단하지만, Revit에서 Dynamo로, 그리고 그 반대로 데이터와 형상을 연결하는 항목을 이해하는 데 도움이 됩니다. 먼저 Revit-StructuralFraming.rvt를 열어 보겠습니다. 이 파일이 열리면 Dynamo를 시작하고 Revit-StructuralFraming.dyn 파일을 엽니다.
이 Revit 파일에는 기본적인 내용이 포함됩니다. 2개의 참조 곡선(레벨 1에 1개, 레벨 2에 1개)이 그려집니다. 이러한 곡선을 Dynamo로 가져와 라이브 링크를 유지하려고 합니다.
이 파일에는 Python 노드의 5개 입력에 연결된 노드 세트가 있습니다.
Select Model Element Nodes: 각각에 대해 선택 버튼을 누르고 Revit에서 해당 곡선을 선택합니다.
Code Block:
0..1..#x;
, 구문을 사용하여 0에서 20 사이의 정수 슬라이더를 x 입력에 연결합니다. 이렇게 하면 두 곡선 사이에 그릴 빔 수가 지정됩니다.Structural Framing Types: 드롭다운 메뉴에서 기본 W12x26 빔을 선택합니다.
Levels: "레벨 1"을 선택합니다.
Python의 이 코드는 약간 더 조밀하지만, 코드 내의 해설에 프로세스에서 발생하는 상황이 설명되어 있습니다.
Revit에는 두 곡선을 구조적 요소로 스패닝하는 빔 배열이 있습니다. 참고: 이는 실제 예가 아닙니다. 해당 구조적 요소는 Dynamo에서 작성된 기본 Revit 인스턴스의 예로 사용됩니다.
Dynamo에서는 결과도 볼 수 있습니다. Watch3D 노드의 빔은 Revit 요소에서 조회된 형상을 나타냅니다.
Revit 환경에서 Dynamo 환경으로 데이터를 변환하는 프로세스가 지속됩니다. 요약하면 프로세스가 진행되는 방식은 다음과 같습니다.
Revit 요소 선택
Revit 요소를 Dynamo 곡선으로 변환
Dynamo 곡선을 일련의 Dynamo 점으로 분할
두 곡선 사이의 Dynamo 점을 사용하여 Dynamo 선 작성
Dynamo 선을 참조하여 Revit 빔 작성
Revit 빔의 형상을 조회하여 Dynamo 표면 출력
이 작업은 약간 까다로워 보일 수 있지만 스크립트를 사용하면 Revit에서 곡선을 편집하고 솔버를 다시 실행하는 것만큼 간단해집니다(단, 이렇게 하는 경우 이전 빔을 삭제해야 할 수도 있음). 이는 Python에서 빔을 배치하여 OOTB 노드에 있는 연결이 끊어지기 때문입니다.
Revit에서 참조 곡선을 업데이트하여 새로운 빔 배열을 얻게 됩니다.