본문 바로가기

반응형

흔한생각 (recording)/Dynamo

(19)
다이나모에서 딕셔너리 활용하여 코드 리팩토링 하기 도입: 비주얼 스크립팅의 장점과 한계 다이나모는 작성하기 직관적이고 쉬운 대신에, 목적을 자세히 구현할 수록 코드의 복잡도가 순식간에 증가한다는 단점이 있습니다. 딕셔너리란? “Dictionary” 라는 영단어는 “사전” 이라는 한국어 단어에 대응하는 단어입니다. 이렇게 짝을 지어 대응시킨 정보의 형태를 Dictionary 자료형이라고 하고, 그림처럼 중괄호 안 쪽에 콜론으로 대응시킨 데이터 쌍의 형태로 이루어집니다. 이런 대응되는 정보라는 특징을 이용하면, 하나의 꾸러미로 함께 돌아다니는 데이터를 만들 수 있습니다. 저를 규정하는 정보를 한번 나열해 봤습니다. 아까 dictionary에서 보던 자료의 형태와 굉장히 유사하죠? 굉장히 직관적인 형태의 데이터 이기도 합니다. 이렇게 중괄호만 양쪽 끝에 붙여..
파이썬 함수 데코레이터를 이용해서 함수 범용성 높이기(리스트 레벨구조 기능 추가) 다이나모 파이썬 스크립트에서 리스트 레벨 구조 기능 추가하기(feat. Python decorator function) 파이썬은 동적 타입을 지원하기 때문에 함수 인자들의 자료형을 그렇게 신경 쓰면서 함수를 디자인하지 않아도 된다는 장점(?) 이 있습니다. 그래서 프로그래밍을 처음 접했을 때 진입장벽이 낮고, 배우기 쉽습니다. 게다가 타입에 신경쓰지 않는 상황이라면 상대적으로 규모가 작은 코딩인 경우가 많으니, 소규모의 스크립팅 목적으로도 파이썬이 참 적당합니다. 그래서 비주얼 프로그래밍인 다이나모에서도 파이썬 스크립트 노드가 자주 활용됩니다. 그런데 단일개체를 입력받아서 결과를 반환하는 함수를 만들고 나면, 리스트와 같은 다중 항목들을 처리하기 위해서는 만든 함수를 가지고 for 문을 구성해야 하는데 ..
다이나모 GroupByFunction VS GroupByKey 여러 개의 객체를 포함한 리스트는 필요에 따라 내포된 리스트 (nested list)로 재편될 필요가 있습니다. 가장 떠올리기 쉬운 사례로는 프로젝트에 존재하는 모든 그리드를 축방향에 따라서 재분류하는 사례가 있겠군요. 말 나온 김에 바로 해볼까요? 일단 그리드 마련하기 빈 프로젝트를 열고 그리드를 그려줍시다. 개수는 상관없고, x축 방향과 y축방향으로 적당한 개수의 그리드를 그려주면 됩니다. 이렇게 대충 그려주세요. 실습을 위한 준비물이니 그리드 간격 같은 건 신경 쓰지 않아도 됩니다. 그다음에는 다이나모를 실행해야겠죠? 다이나모를 열고 빈 캔버스에 일단 다음과 같이 작성해 봅시다. 이렇게 두 개의 노드를 배치하면 프로젝트 내에 존재하는 모든 Grid element들을 가져올 수 있습니다. X축 방향과..
다이나모에서 ReplaceByCondition 활용 방법 리스트의 원소를 치환하고 싶어졌다 다이나모 노드 중에서 리스트 중 특정 원소를 치환하는 노드가 있습니다. 하나는 ReplaceItemAtIndex노드이고 다른 하나는 ReplaceByCondition노드입니다. 보통 이해하기 쉬운 노드는 ReplaceItemAtIndex 노드입니다. 먼저 ReplaceItemAtIndex 노드를 써서 치환해보자 이유는, 사용법이 좀 더 직관적이기도 하고, index만 건드리면 되기 때문에, 하드 코딩의 형식으로 원하는 인덱스만 직접 지정해서 치환하는 등의 활용도 가능하기 때문입니다. 그런데 한 번에 하나의 인덱스만 치환해주는 단점이 있어서, 한 리스트의 여러 개의 원소를 동시에 치환하고 싶으면 좀 노드 처리를 지저분하게 해야 합니다. 또 어떤 조건을 만족하는 원소들의 인..
Dynamo Python 노드에서 PyPI 패키지 사용하기 2022.05.13 - 내용추가 깜박하고 중요한 걸 설명에서 빼먹었네요. 밑의 예제에서 사용된 파이썬 노드들은 모두 Python Engine Version을 CPython 모드로 설정해야 합니다!... 그 이유는 1. IronPython이 Python 3.xx버전을 지원하지 않음. (따라서 python 2의 문법을 써야하는데, 3 배우기도 바쁜 시대에 좀 불합리하죠?) 2. 거의 대부분의 유용한 패키지들이 CPython 구현체를 기반으로 작성되어있음.(IronPython의 경우에는 호환되지 않는 경우가 대부분) 이기 때문입니다. 그리고 어차피 다이나모 버전이 올라감에 따라 IronPython 엔진은 deprecate 될 예정이니, 지금부터 아예 CPython 모드로만 작성하는 습관을 들이시길 권합니다....
다이나모 파이썬 노드에서 임의로 설치한 패키지 사용하기 다이나모를 쓰다 보면 캔버스 공간 효율화와, 코드 단순화를 목적으로 파이썬 노드를 쓰게 되는 경우가 왕왕 있습니다. 그런데 파이썬으로 모든 기능을 구현하려면 흔히 말하는 ‘바퀴를 새로 발명해야 하는’ 문제가 생기기 쉬운데, 그럴 때는 기존에 사용하던 패키지에 의존하고 싶어 집니다. 패키지를 소환해서 쓰는 것은 별 문제가 아니지만, 패키지를 참조하게 되는 경로는 사용자의 PC 환경에 따라 매번 달라지기 때문에 범용성을 확보하기가 어렵습니다. 그래서 오늘은 환경변수를 활용하여, 다이나모 파일을 실행하는 환경이 바뀌어도 자동으로 패키지가 설치된 경로를 인식하여 패키지 참조를 수행하는 코드를 보여드리려고 합니다. (Dynamo Revit 기준으로 설명하겠습니다.) 테스트용 archi-lab.net 패키지 설치하..
dynamo 응용! 코로나 바이러스 만들고 blender 로 표면 다듬기 지난 2년 동안 참 오랫동안 코로나 바이러스가 사람들을 고생시켰죠. 어떻게 생겨 먹은 놈인가 해서 이미지를 찾아봤습니다. 둥근 공 같이 생겼는데, 뾰족 뾰족 뭐가 표면에 많이 돋아나 있네요. 저 뾰족한 부분이 스파이크 단백질이라는 부위이고, 우리 몸의 세포들에 있는 수용체에 결합하는 역할을 한다고 합니다. 다이나모로 COVID19 모델링하기 저는 다이나모를 좋아합니다. 형상적, 비형상적을 막론하고, 데이터를 처리하는 코드를 빠르게 짜고 피드백할 수 있기 때문입니다. 그래서 다이나모를 이용해서 코로나 바이러스의 모습을 모델링해보면 어떨까 하는 생각을 했습니다. 저도 모르게 해버렸어요. 머릿속으로 일단 동그랗게 생긴 몸통부터 만들어야겠다는 생각을 한 뒤 다이나모를 켰습니다. 몸만들기 바이러스 몸체에서 가장 ..
List_Match에 있는 노드들은 짝짓기 전문가입니다 (다이나모 기본노드 활용 시리즈-6) 리스트를 매치한다는 것의 의미 다이나모 기본 노드 활용 시리즈-6으로 돌아왔습니다. Match는 영어로 “짝을 맞추다”라는 뜻이죠? 오늘 살펴볼 노드들은 집합의 원소들을 한꺼번에 조작하는 방법에 대한 노드들입니다. 좌측 라이브러리 창에서의 위치는 위 그림과 같습니다. List.CartesianProduct List.Combine List.LaceLongest List.LaceShortest List.Map 이 중에서 List.Map을 제외한 나머지 4개의 노드들은 인자(함수 기능 수행을 위해 받아들이는 재료)로 3개 이상을 받아서 작동하게 됩니다. “combineFunction”, list0, list1, listN ... “+”버튼을 누르면 재료로 쓰일 리스트의 개수를 점점 늘려나갈 수 있습니다. 실습..

반응형