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

그래스호퍼 QGIS를 활용한 콘타 자동 생성 | 01 건물 매스 & 파라펫 만들기

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

오늘 작성할 코드

전체 코드를 한번에 작성하는 것은 어려울 수 있으니 코드를 조금씩 나누어 작성하는 법을 알려줄 거예요. 위 사진은 전체 코드 중에서 오늘 작성할 부분을 표시한 거예요. 두 개로 보이지만, 동일한 코드이기 때문에 하나만 만들어도 되니 겁먹을 필요가 없어요.

 

이번 포스팅을 통해 건물의 매스와, 파라펫을 만드는 코드를 어떻게 만드는지 알 수 있어요.

 

 

전체 영상

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

 

먼저 라이노에서 임의로 하나의 닫힌 커브를 만들어요. 저는 10m x 10m의 정사각형 커브를 만들었어요. 그 후 그래스호퍼에서 Curve 컴포넌트를 불러와 우클릭 한 뒤 set one curve를 눌러 연결해주면 돼요. 지금은 하나의 커브를 수동으로 연결했지만, 나중엔 수많은 커브를 불러올거고, 그 과정도 자동으로 할 거예요.

 

Extrude 컴포넌트를 불러온 뒤 Curve를 연결해줘요. Extrude 컴포넌트는 라이노의 extrude 명령어와 동일한 역할을 해요. D에는 벡터, 즉 방향과 크기를 연결해줘야 해요. 저희는 커브를 통해 건물 매스를 만들 거니 수직으로 그러니까 Z 방향으로 돌출해야 해요. 그러니 D에는 Unit Z 컴포넌트를 연결해요. 얼마만큼 올려줘야 하는지는 건물의 층수에 따라 다르겠죠? Multiplication(곱하기. 간단하게 *로 불러올 수 있어요) 컴포넌트로 (건물의 층수 x 4000)만큼 올릴 수 있도록 해요. 1<20 을 입력하여 1부터 20까지의 범위를 가진 넘버 슬라이더를 불러와서 연결해줘요. A에 연결한 것은 어떻게 보면 건물의 층수라고 할 수 있고, B에 연결한 4000은 건물의 한층당 높이라고 볼 수 있어요. 그렇게 Extrude한 것은 속이 비어 있으니 Cap Holes 컴포넌트로 닫힌 폴리서피스로 만들어 줘요.

 

여기까지가 건물의 매스를 만드는 코드였어요. 엄청 간단하죠? 그런데 이렇게 매스만 덩그러니 있으면 심심하니 옥상에 파라펫을 달아줄 거예요.

 

Cap Holes를 Deconstruct Brep 컴포넌트에 연결해줘요. Deconstruct Brep은 객체의 면, 모서리, 꼭짓점을 분해해줘요. 우리는 이들 중 면을 이용할 거예요. 면 중에서도 가장 위에 있는 면만 이용할 거예요. 옥상에 파라펫을 만들 거기 때문이에요. Evaluate Surface 컴포넌트에 Deconstruct Brep의 F(면)를 연결해줘요. 이때 중요한 건 Evaluate Surface의 연결한 곳을 우클릭 하고 Reparameterize를 해줘야 해요. 그리고 " 를 쳐서 패널을 불러온 다음 더블클릭 하여 0.5, 0.5를 입력해줘요. 그걸 Evaluate Surface의 두번째에 연결해줘요.

 

Evaluate Surface의 N을 Dot Product의 A에 연결해줘요. 그리고 Dot product의 B에 Unit Z를 연결해줘요. 그러고 <를 쳐서 Smaller Than 컴포넌트를 불러온 다음 A에 Dot Product의 D를 연결해줘요. 그 후, "를 쳐서 패널을 불러온 다음 0.01을 입력해주고 Dot Product의 B에 연결해줘요. Cull Pattern 컴포넌트를 불러온 다음 P에 Smaller Than의 <를, L에 Deconstruct Brep의 F를 연결해줘요. 이때, Cull Pattern의 P를 눌러 Invert를 눌러줘야 해요.

 

Cull Pattern을 눌러보면 사진처럼 건물 매스의 윗면만 선택이 되는 걸 볼 수 있어요. 만약 안 보인다면, Cull Pattern 컴포넌트를 누른 다음 우클릭 하고 Preview활성화시켜 줘야 해요.

 

가장 어려운 부분은 지나갔어요. 이제 윗면을 원하는 만큼 Offset 하고, 원하는 만큼 Extrude 하는 것만 남았어요. 라이노를 다뤄보신 분들이라면 쉽게 따라올 수 있을 거예요.

 

Cull Pattern의 L을 Curve에 연결해서 외곽선을 추출해줘요. 그리고 Offset Curve에도 연결해줘요. 우리는 파라펫을 만들어야 하니 안쪽으로 오프셋 해야 해요. 그러니 Offset Curve의 방향과 크기를 지정해주는 D에는 Negative 컴포넌트를 연결해줘요. 그리고 1000을 입력하여 넘버 슬라이더를 불러와 Negative 컴포넌트에 연결해줘요. 이러면 안쪽으로 1000만큼 오프셋이 돼요.

 

Curve 컴포넌트와 Offset Curve 컴포넌트를 함께 눌러보면 두 개의 커브를 볼 수 있어요. 이걸 이제 Extrude 시켜주면 돼요.

 

 

Partition List 컴포넌트를 불러오고 L에 Curve를 연결해줘요. 그리고 Shift키를 누른 채 Offset Curve도 Partition List를 연결해줘요. Shift를 꼭 눌러야 해요. L을 우클릭 한 뒤 Flatten을 해줘요. 그리고 S에는 패널을 불러와 2를 입력하고 연결해줘요. 사실 이 작업은 당장은 필요가 없어요. 하지만 나중에 수많은 커브를 불러와 자동으로 매스를 올려주려면 필요한 코드예요.

 

Partition List 컴포넌트를 눌러보면 앞에서 Curve와 Offset Curve를 동시에 눌렀을 때 뜨는 거랑 똑같이 커브 2개가 잡히는 걸 볼 수 있어요.

 

 

Partition List를 Boundary Surfaces 컴포넌트에 연결해줘요. Boundary Surfaces 컴포넌트는 라이노의 PlanarSrf와 동일한 기능을 해요. 이제 Boundary Surface를 Extrude 컴포넌트에 연결해요. 그리고 역시 방향과 크기를 지정하는 D에는 Unit Z1000을 꽂은 채 연결해줘요. extrude를 눌러보면 파라펫이 만들어진 걸 볼 수 있어요.

 

 

 

 

오늘 만든 전체 코드예요. 건물의 매스를 올리고, 파라펫을 올려봤어요. 숫자를 입력한 부분이 군데군데 있었는데, 패널을 통해 입력한 건 상수라서 바꾸면 안돼요. 하지만 넘버 슬라이더로 입력한 부분들은 원하는대로 바꿀 수 있어요.

 

혹시 따라 해보면서 잘 안되는 부분이 있었거나, 궁금한 부분이 있었다면 댓글로 달아주세요!

반응형

댓글