※ 레빗 다이나모 기준으로 설명합니다.
우리가 어떤 프로젝트의 어떤 작업을 수행을 하던,
거대한 흐름 속의 일부분을 작업하게 됩니다.
왜 이런 거창한 말을 하는가 하면,
레빗, 그리고 다이나모 만 가지고 일을 할 수 없다는 뜻입니다.
다른 쪽에서 받아온 다른 포맷의 데이터를
레빗이나 다이나모로 받아와서 작업해야 하는 일이 있다는 뜻이죠.
그럴때, 프로그램 바깥과 소통할 수 있는 유일한 창구가 무엇일까요?
바로 IO 입니다.
Input/Output 에 관한 내용을 알아야,
다이나모를 연습하는 것에서 벗어나
다이나모를 통해 실제적인 가치에 접근할 수 있습니다.
특히나 다이나모 처럼 사용자 층이 적어,
이 프로그램으로 만든 산출물을 공유하기 힘든 경우는 특히 더 그렇습니다.
Import란?
코드를 짜서 무언가를 처리 할 때, 0부터 100까지의 수열이 필요하다면 어떻게 할까요?
빈캔버스에 더블클릭해서 코드블럭을 꺼내고,
0..100;
이라고 기입하면 다이나모 안에서 필요한 data를 마련할 수 있습니다.
반면, 프로젝트에 사용될 벽체의 종류와 두께, 그리고 부재번호를 엑셀 데이터로 가지고 있다면,
다이나모에서 그걸 다시 만드는 일을 하는 것은 순수한 노가다일 뿐입니다.
엑셀에 있는 데이터를 가져오면 편하겠죠?
비록 데이터의 포맷은 다르지만요
그 2가지의 세계를 이어주는 가교가 바로 import 입니다.
외부로부터의 입력
사전 설명
친절하게, 다이나모에는 노드 라이브러리 창을 보면
ImportExport 라는 카테고리가 잘보이게 놓여져 있습니다.
그리고 그 안에는
Data, File System, Image, Web이라는 4개의 카테고리가 있습니다.
오늘 보일 내용은 Data와 File System 카테고리 내부만 보면 됩니다.
(Image 와 Web 활용에 대한 실례는 다음에 소개할게요. Web카테고리는 공공데이터 가져오기 에서 이미 간단하게 소개했죠?)
스프레드시트 데이터 import 해보기
ImportExcel 노드 구경하기
외부로 부터의 대표적인 입력은 뭐니뭐니해도 스프레드시트, 즉 엑셀이니, 엑셀을 가지고 해보겠습니다.
다른건 나중에 하고 ImportExcel 노드 부터 봅시다
꺼내보면 입력을 받는 4개의 포트가 있죠?
위의 2가지가 중요한 것이니 “file” 과 “sheetName” 만 신경쓰겠습니다.
스프레드시트 파일 준비
그전에 엑셀 파일을 하나 준비해야죠.
이렇게 입력하고 TEST라는 이름으로 저장했습니다.
벽체 구분 기호와 두께, 그리고 종류 및 위치를 간단히 기입한 시트입니다.
하단에 Sheet1이라고 시트이름도 적혀있습니다.
ImportExcel 노드에 필요한 재료 연결하기
아까 ImportExcel 노드에서 첫번째 재료를 받는 항목이 file이었죠?
직감을 발휘하여, Data 카테고리 밑에 있는 File System 카테고리를 눌러봅니다.
File 이라는 이름이 붙은 노드가 여러 가지 있네요.
그중에 자세히 읽어보면 File From Path가 있고, File Path가 있습니다.
전자는 경로로 부터 파일을 가져오는 노드이고, 후자는 파일 경로를 선택하는 노드입니다.
둘다 꺼냅니다.
File Path 노드에는 Browse... 라는 버튼이 있군요. 이걸 누르면 가져오고 싶은 엑셀 파일을 선택할 수 있는 창이 뜹니다.
클릭해서 선택을 마치면 이렇게 노드 하단에 어떤 파일에 대한 경로가 선택되었는지 나옵니다.
그런데 이건 우리가 원하는 파일의 경로를 찾은 것이고, 경로에 있는 파일 자체를 가지고 오는 노드는 따로 있습니다.
오른쪽에 있는 File From Path 와 연결해볼까요?
File From Path 하단에 이렇게 뜨면 성공입니다.
그 다음에는 sheetName 포트에 필요한 재료를 넣으면 됩니다.
아까 만들 엑셀 파일에서, 데이터를 읽어들이기를 원하는 시트 이름을 코드블럭을 통해 입력합니다.
"Sheet1”이었죠?
연결하자마자 Data.ImportExcel 노드의 아래에 엑셀에 있던 데이터가
리스트의 형태로 정렬되어 나타났습니다.
리스트가 구성된 꼴을 살펴보니, 이 노드는 엑셀을 행방향으로 읽어들이는 군요.
함께 놓고 보면 이해가 더 쉬울거에요.
이렇게 읽어 들인 데이터를 현란한 노드배치와 절묘한 코드블럭 사용을 통해
떡 주무르듯 제어하면, 우리가 원하는 데이터를 산출하는 프로그램을 짤 수 있습니다.
다른 포스트에서 시리즈로 이어서 계속 보여드릴 게요.
레빗으로부터의 입력
입력을 받는 것은 아예 외부로부터 받는 입력도 있지만,
Dynamo가 긴밀하게 연결되어 있는 Revit 프로그램으로 부터 데이터를 끌어오는 것도 포함됩니다.
라이브러리 창에서 Revit 카테고리를 눌러 하위 항목인 Selection 카테고리를 살펴봅시다
여기에는 많은 노드들이 있는데, 대부분 레빗에서 입력받은 데이터들을 조회하는 역할을 합니다.
Dynamo로 Revit 객체의 형상을 포함한 각종 정보들을 가져오기
이 케이스는 상기의 링크에서 활용방법을 설명했기 때문에,
이번에는 카테고리 별 모든 객체를 불러오는 방식 말고,
특정레벨에 존재하는 객체들을 불러오는 방식으로 작성해 보겠습니다.
All Elements at Level 이라는 노드가 있습니다. 이름만 봐도 설명이 되지요?
우리는 앞에서도 input 포트의 이름으로 추측하길 즐겼으니 이번에도 동일하게 즐겨야 합니다.
Level이라고 써있으니, Level을 선택할 수 있는 노드를 찾아야 겠죠? (참고로 Level도 레빗에서는 하나의 객체입니다.)
이번엔 운좋게 몇 칸 밑을 보니 바로 찾을 수 있었습니다.
드롭다운 메뉴를 열수 있는 버튼이 있으니 열어볼게요.
설명을 깜박했는데, 저는 현재 레빗 샘플 프로젝트를 함께 열어둔 상태입니다.
노드를 보니 현재 레빗 파일에 존재하는 모든 레벨들이 등장합니다.
기초부분을 보고 싶으니까 Foundation 레벨을 선택할게요.
그 다음에 이어주면, 이렇게 해당 레벨에 소속된 모든 객체들이 다이나모로 들어오게 됩니다.
초록색으로 Element ID만 보이니 좀 심심하죠? 형상을 한번 꺼내볼게요.
짜잔
사용자 입력
코드블럭으로 필요한 데이터를 사용자가 직접 입력할 수 있지만,
다이나모 플레이어를 이용해 프로그램을 실행하는 경우에는 다른 방법이 필요합니다.
이 내용은 다음에 다이나모 플레이어에 대한 포스트를 올리면서 함께 설명할게요.
익숙해질때까지 따라해보세요.
'흔한생각 (recording) > Dynamo' 카테고리의 다른 글
List_Generate #2 (다이나모 기본노드 활용 시리즈-3) (0) | 2022.02.27 |
---|---|
List_Generate #1 (다이나모 기본노드 활용 시리즈-2) (0) | 2022.02.27 |
Dynamo 기본노드로 필터링 VS 파이썬으로 필터링 (0) | 2022.02.20 |
다이나모 코드의 추상화 수준을 높여가는 방법 (0) | 2022.02.17 |
다이나모로 공공데이터 API 활용하기 (0) | 2022.02.15 |