본문 바로가기
그래스호퍼/활용

그래스호퍼 QGIS를 활용한 콘타 자동 생성 | 02 런치박스 애드온 설치 및 레이어 자동으로 분류하여 최종 매스 올리기

by 한동주 2022. 2. 17.
반응형

이번 포스팅에서는 코드 작성에 필요한 런치박스 애드온을 설치하는 법, 라이노에 불러온 층수 레이어를 자동으로 분류하는 파이썬 스크립트를 작성하는 법과 그걸 통해 최종적으로 건물의 매스를 층수만큼 올리는 코드를 작성하는 법을 다뤄요.

 


① 런치박스 애드온 설치하기

 

런치박스 애드온은 그래스호퍼에서 가장 많이 쓰이는 애드온 중 하나예요. 저희는 런치박스의 많은 컴포넌트 중 라이노의 레이어와 지오메트리를 불러오는 기능을 하는 LayerReference 컴포넌트와 LayerInformation 컴포넌트를 사용할 거예요. 런치박스 애드온을 설치하기 위해 다음 링크로 접속해주세요. https://www.food4rhino.com/

 

그리고 하단으로 내려가 설치 파일을 받으시고 실행해주세요. 자동으로 설치가 돼요.

 


② 레이어 분류 코드 작성하기

 

오늘 작성할 코드

 

전체 영상

 

 

오늘 다루는 코드를 작성하는 영상이에요. 영상을 보고 따라 만들어도 되고, 아래의 설명을 보고 따라 해도 돼요.

 


먼저 이전 포스팅에서 작성했던 코드를 불러와주세요. 이 코드는 보이는 것처럼 커브를 레퍼런스 해주면 자동으로 매스를 올려주는 코드예요. 우리는 오늘 이 커브를 넣는 자리에 건물의 커브를 넣고, 건물의 층수 정보를 불러와서 자동으로 매스를 올려볼 거예요. 그러기 위해서는 건물의 커브와 층수 정보가 필요하겠죠? 원래라면 국토정보플랫폼에서 연속수치지형도를 받은 뒤 QGIS에서 dxf로 변환하여 사용해야 해요. 그런데 오늘은 첨부되어 있는 파일로 대신 해볼 거예요.

 

dxf.dxf
0.48MB

 

첨부된 dxf 파일을 받고, 라이노에 import 해줘요.

 

저는 라이노의 Unit(단위)이 밀리미터 단위예요. 이 코드는 밀리미터 단위를 기준으로 작성되고 있으니 참고해주세요. import를 누르면 이런 설정이 뜨는데 저는 따로 만지지 않고 바로 OK를 눌렀어요.

 

라이노에 sellast 명령어를 입력하여 방금 불러온 파일을 선택해줘요. 그리고 Scale 명령어를 사용하여 크기를 1000배 크게 만들어요.

 

그리고 라이노 기본 단축키인 F1을 눌러보면 이렇게 레이어가 불러와진 것을 볼 수 있어요.

 

이제 다시 그래스호퍼에서 작업할 거예요. Layer information 컴포넌트를 불러와요. 이 컴포넌트는 런치박스 애드온의 컴포넌트이니 런치박스 설치를 꼭 해줘야 해요.

 

Boolean Toggle 컴포넌트를 불러와 Layer information의 toggle에 연결한 뒤 더블 클릭하여 True로 바꿔줘요. 그리고 "를 입력하여 패널을 불러와 Names와 연결해봐요. 그러면 라이노에 있는 레이어가 모두 불러와져요. 그런데 저는 어쩐 일인지 중간에 null이 뜬 레이어가 많네요. 그래도 괜찮아요. 레이어 분류를 해주는 파이썬 스크립트를 통해 모두 정리해줄 거예요.

 

GhPython Script 컴포넌트를 불러와요.

 

그리고 x를 우클릭 하고 맨 위의 x를 ref라는 이름으로 바꿔줘요.

 

y도 sep으로 바꿔주고, 오른쪽 출력 부분에 있는 것들도 out을 제외하고 low, high, lowlay로 바꿔줘요. 기본적으로 출력에는 a밖에 없을 건데, 저렇게 추가하는 법은 컴포넌트를 확대하면 보이는 +를 누르면 돼요.

 

그리고 ref를 우클릭 하고 Item Access를 List Access로 바꿔줘요.

 

다음으로 sep을 우클릭하고 Type hint로 들어가 int로 바꿔줘요.

 

그리고 sep에는 1<20을 입력하여 1부터 20까지를 범위로 가지는 넘버 슬라이더를 연결해줘요. 건물의 층수가 이 sep에 연결된 숫자 이상이면 높은 건물로 분류되고, 미만이면 낮은 건물로 분류될 거예요.

 

 

이제 파이썬 컴포넌트를 더블 클릭해요. 처음부터 뭐가 많죠? 전체 선택 하고 다 지우면 돼요.

그리고 이걸 입력해줘요. 코딩을 모르면 따라 입력하는 것도 힘들 수 있어요. 그러면 그냥 복사 붙여넣기 하면 돼요.

 

layers = []
for i in range(len(ref)):
    if ref[i] == None:
        layers = layers
    elif len(ref[i]) < 3:
        layers.append(ref[i])
    else:
        layers = layers

layers = list(map(int, layers))
layers.sort()

lowlayer = []
highlayer = []

for i in layers:
    if i < sep:
        lowlayer.append(i)
    else:
        highlayer.append(i)

lowlayer2 = lowlayer[:]

if 0 in lowlayer2:
    lowlayer2[lowlayer2.index(0)] = 1

low = lowlayer
high = highlayer
lowlay = lowlayer2

이렇게 입력하고 OK를 눌러줘요.

 

그리고 패널을 불러와 low와 high에 연결해보면 이렇게 층수가 분류된 걸 볼 수 있어요.

 

이제 이 레이어 정보를 토대로 각 레이어에 담긴 건물의 커브를 불러올 거예요. Layer Reference 컴포넌트를 불러와요. 그리고 Layer에는 low를 연결해요. Toggle에는 앞에서 불러왔던 Boolean Toggle을 연결해줘요. 그렇게 하고 Layer Reference 컴포넌트를 누르고 라이노를 보면 지오메트리가 레퍼런스 된 걸 볼 수 있어요.

 

그런데 이렇게 불러와진 것들 중에는 커브 뿐만 아니라 해치도 있어요. 우리는 커브만 필요하니 커브만 선택하는 작업을 해줄게요. Match Text 컴포넌트를 불러와 T에 Layer Reference의 Geo를 연결해줘요. 그리고 패널에 Polyline Curve를 입력하여 P에 연결해줘요. 이때 띄어쓰기와 대소문자를 정확하게 작성해야 해요. 그 후 Cull Pattern 컴포넌트를 불러와 L에는 Layer Reference의 Geo를, P에는 Match Text의 M을 연결해줘요.

 

이제 드디어 이전에 작성했던 코드를 쓸 시간이에요. 이전에 작성했던 코드에서 커브를 연결했던 Extrude 컴포넌트에 Cull Pattern의 출력값인 L을 연결해줘요. 그러면 벌써부터 건물의 매스가 올라가는 모습을 볼 수 있어요. 그런데 건물들이 각자의 층수대로 올라가진 않았어요. 모두 3층 높이만큼 올라갔어요. 이제 건물을 층수만큼 올려볼 거예요.

 

앞에 있는 파이썬 컴포넌트에서 lowlay 부분을 이전에 작성했던 코드에 있는 Multiplication(곱하기) 컴포넌트의 A에 연결해줘요. 이때 lowlay를 우클릭 하여 Graft를 해줘야 해요. 이제 다 했어요. 남은 일은 복사 붙여넣기예요.

 

Layer Reference를 포함한 그 이후의 모든 컴포넌트를 선택하고 복사 붙여넣기 해줘요. Ctrl C, Ctrl V를 해도 되고, 모두 선택한 뒤 Alt를 누른 채 컴포넌트를 좌클로 드래그 해도 돼요.

 

그리고 붙여넣기 한 Layer Reference의 Layer에 파이썬 컴포넌트의 high를 연결해줘요(사진 상 하단 부분). 그리고 Multiplication의 A에도 high를 연결해줘요. 이번에는 Multiplication의 A를 우클릭 하여 Graft 해줘야 해요.

 

 

이제 다 했어요! 이렇게 건물의 매스를 층수에 맞춰 자동으로 올려주는 코드를 완성했고, 사진은 간단히 렌더링 뷰로 본 거예요. 이 이후로는 부연 설명이니 참고해주세요.


굳이 건물의 층수를 low와 high로 나눈 이유가 있어요. low 코드 부분에서 Offset Curve를 보면 빨간색이 되어 오류가 있음을 알려주고 있어요. 이렇게 오류가 나는 건 커브의 크기가 1000만큼 offset 할만큼 충분히 크지 못하기 때문이에요. 보통 낮은 층수를 가진 건물들은 크기가 작은 경우가 많으니, 그런 건물에 대해선 offset을 적게 해줘야 해요. 참고로 이 offset은 파라펫의 두께를 조절하는 거예요. 제가 첨부해드린 dxf 파일을 기준으로는 300 정도로 설정하면 적당하게 오류가 나지 않아요. 하지만 다른 지역의 건물들에 대해서는 1000만큼 offset을 해도 오류가 나지 않을 수도 있고, 300을 해도 오류가 날 수 있으니 적절히 조절해서 사용하면 돼요.

 

두개로 나눔으로써 offset 오류를 해결하는 것 외에도 다른 장점이 생겼어요. 건물의 층수 정보를 연결해준 Muliplication(곱하기) 컴포넌트에서 B에는 4000을 연결했었어요. 이건 한층당 건물의 높이라고 보면 돼요. 낮은 건물을 더 낮게, 높은 건물을 더 높게 설정하고 싶다면 낮은 건물은 3000으로, 높은 건물은 5000으로 설정하면 돼요. 물론 반대도 가능하고, 세부적인 설정도 가능해요.

 

클릭하면 고화질로 볼 수 있어요

 

따라 하기 어렵지 않게 설명을 조금 생략한 부분도 있어요. 혹시 그런 부분에 대해 추가적으로 더 궁금한 것이 있다면 댓글로 달아주세요. 필요하다면 자세히 설명해주는 글을 써볼게요. 그 외에도 궁금한 부분이 있었거나 따라 해보다가 안 되는 부분이 있었다면 댓글로 달아주세요!

반응형

댓글