리벳 갑시다.

1. Generative Design in Revit의 개요


GD(Generative Design)는 설계 시나리오의 제작과 평가를 컴퓨터에 맡기는 아이디어를 말한다.유전 알고리즘을 사용하면 컴퓨터가 디자인 방안을 마음대로 평가해 좋은 느낌으로 업데이트할 수 있다.그럼 사람은 뭘 해야 돼요?이렇게 하면 디자인 방안을 생성하는 매개 변수(입력 값)의 정의, 디자인 방안을 생성하는 논리적인 정의, 디자인 방안을 평가하는 정량 지표(출력 값)의 정의를 진행한다.또 컴퓨터가 제시한 디자인 방안 중 마지막으로 디자인 방안을 선택하는 것도 사람의 일이다.지표에'가볍고 튼튼한'등 저울질과 관련된 것들이 있기 때문이다.
출전: Using Generative Design in Construction Applications
이러한 Generative Design을 Revit에서 실행할 수 있는 메커니즘은 GD in Revit(GD in Revit)입니다.리벳 2020까지는'리피너리'라는 이름의 베타 에디션이 제공되지만, 리벳 2021부터 본격적으로 부착된다!다이나모로 논리를 만들고 GD in Revit로 그걸 수행하는 구조죠.Revit 사용자라면 누구나 사용할 수 있습니다.
GD in Revit 사용법에 대해서는 쉽게 정리했다.또 Generative Design Primer 홈페이지에도 GD의 논리부터 리벳에서의 사용법, 샘플 모델 등 다양한 정보가 게재됐다.영어지만 구글로 번역해 보세요!!
https://www.generativedesign.org/

2. Generative Design in Revit를 실제로 사용


GD 건물의 사례가 많아 토목 같은 샘플 모형을 만들어 봤다.수직의 법면에'주제곡'이라는 보강공을 분배한다.원추형의 표면은'피부'라는 직사각형 패널이다.법면은 개구부와 기울어진 상태에서 피부를 잘 분배하지 못해 피부의 가장자리를 잘라야 한다.가장자리를 자르는 피부를 최소화하기 위해 GD 배분 패널을 사용한다.
법면 전체를 벽에 설치...
분배 원추형
데이터 세트는 아래에 저장됩니다.2-1과 2-2와 관련해서는 리벳 202.2 이후 2-3과 관련해서는 리벳 2021이 필요하다.또 다이나모의 포장으로 스프링 노데스의 204.1.0 또는 203.2.0이 필요하다.
https://drive.autodesk.com/de29d9028/shares/SH56a43QTfd62c1cd968b878958b8d1fedc2

2-1. Dynamo를 실행해서 주제의 그림을 그려주세요.


GD를 실행하는 데 필요한 논리는 Dynamo로 정의해야 합니다.이번에는 테레.Armee_Optimize.나는dyn에서 논리를 했다.
스킨의 크기와 위치를 입력값으로 지정합니다.피부의 배치 위치는 uv 파라미터로 지정하여 법면 중심에서 몇 장의 피부를 벗어났다.

논리... 건너뛰기.아무튼 벽에 스킨케어 바르는 느낌.
그 결과 다이나모 공간에서 다양한 색깔의 피부가 드러난다.수치가 0.96이어서 전체 96% 이상을 사용한 피부는 녹색, 이하 피부는 오렌지색이었다.


Revit 공간은 피부의 경계를 나타낸다(소재 설정으로 색상 구분이 가능하지만 그렇게 많은 여지가 없다.)

입력값을 바꾸면서 결과가 어떻게 나올지 시험해 보세요!!

2-2. 파이썬 스크립트를 써서 주제의 부품을 만들자


지금은 선으로만 경계를 묘사할 뿐 사이즈 x의 피부는 y장이라는 느낌은 통계할 수 없다.따라서 리벳의'부품'기능을 사용해 하나의 벽 요소를 여러 피부로 분할한다.이에 따라 각 피부를 합계하고 표시할 수 있다.
https://knowledge.autodesk.com/ja/support/revit-products/learn-explore/caas/CloudHelp/cloudhelp/2021/JPN/Revit-Model/files/GUID-22D24055-61A2-40BB-A2F7-A37990300B2B-htm.html
Python Script는 [주제별 구성] 내에서 노드의 작동이 멈춘 경우 실행됩니다.

Python Script의 내용은 다음과 같습니다.
DividePart
import sys
import clr

clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)

clr.AddReference("System")
from System.Collections.Generic import List

def dividePart(doc, wall, divisionLines, sketchPlane):
	wallList = List[ElementId]()
	wallList.Add(wall.Id)

	if PartUtils.AreElementsValidForCreateParts(doc, wallList):
		createParts = PartUtils.CreateParts(doc, wallList)
		doc.Regenerate()
		parts = PartUtils.GetAssociatedParts(doc, wall.Id, 0, 0)
		
		if PartUtils.ArePartsValidForDivide(doc, parts):
			intersectionElementsIds = List[ElementId]()
			curveArray = List[Curve](divisionLines)	
			PartUtils.DivideParts(doc, parts, intersectionElementsIds, curveArray, sketchPlane.Id)

doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application

wall = UnwrapElement(IN[0])
divisionLines = [item.ToRevitType(True) for item in IN[1]]
sketchPlane = UnwrapElement(IN[2])

TransactionManager.Instance.EnsureInTransaction(doc)
dividePart = dividePart(doc, wall, divisionLines, sketchPlane)
TransactionManager.Instance.TransactionTaskDone()

OUT = 0
UI에서 작업하는 경우
  • 부품 작성
  • 을 클릭합니다.
  • 부품 분할
  • 을 클릭합니다.
  • 분할선 그리기
  • 검사 표시에 따라 작업 완료
  • 이런 순서로 일하다.근데 이런 느낌도 있어요.
    createParts = PartUtils.CreateParts(doc, wallList)
    PartUtils.ArePartsValidForDivide(doc, parts)
    curveArray = List[Curve](divisionLines)
    PartUtils.DivideParts(doc, parts, intersectionElementsIds, curveArray, sketchPlane.Id)
    
    에 각각 대응한다.
    이 부근의 설치는 뼈가 부러질 수 있지만 힘껏 누르면 빌딩 코더에 상당히 풍부한 재료가 들어간다.이번에는 여기를 참고했다.
    https://thebuildingcoder.typepad.com/blog/2012/09/parts-assemblies-partutils-and-divideparts.html
    결과적으로 분할된 부품이 Revit 공간에 표시됩니다.또한 각 볼륨의 피부 수는 부품 통계표에 표시됩니다.

    2-3. GD를 실행해서 주제의 최적 배분을 해보도록 하겠습니다.


    현재 인류는 피부의 위치를 지정했다.GD를 사용하여 컴퓨터에 이 설정 위치를 지정하도록 하세요.다이나모 프로그램에서 피부 설정에서 완제품률을 계산하고 있기 때문에 이번에는 이 수치를 최적화시킬 것이다.

    노드 추가


    GD in Revit를 사용할 경우 Dynamo 측에 추가된 노드가 두 개 있습니다.하나는 데이터야.Remember 노드에서 Dynamo 측면에서 선택한 Revit 요소를 캐시하는 데 사용되는 노드입니다.또 하나는 Data 입니다.Gate 노드에서 Dynamo 측의 계산 결과를 Revit 측의 노드로 내보냅니다.평소에는 "Close"로 결과가 Revit에 출력될 때만 "Open"으로 표시됩니다.
    Revit에서 데이터를 입력합니다.Remember
    Revit로 내보내기 전에Gate
    GD in Revit가 다이나모의 프로그램을 반복해서 실행하기 때문에 리비트 측과 하나하나 데이터를 교환하면 오버헤드가 커진다.따라서'리벳이 보유한 정보를 다이나모에 캐시하기'와'다이너모를 통해 계산 결과를 확정한 후 리벳에게 되돌려주기'가 필요하다.

    가져오기 및 내보내기 설정


    다이나모의 경우 디자인 매개 변수로 식별하고자 하는 내용을'입력', 평가 지표로 식별하고자 하는 내용을'출력'으로 정의한다.여기.와 같이 가져오기는 수치, 부울 및 Revit 요소만 설정할 수 있고 내보내기는 수치가 있는 Watch 노드만 설정할 수 있습니다.Watch 노드는 출력의 결과를 쉽게 알 수 있도록 이름을 변경합니다.


    GD용 다이나모 쓰기


    그럼 GD를 실제로 돌려.먼저 GD를 위해 Dynamo를 씁니다.Dynamo에서 '유니버설 디자인' 옵션 카드→ '유니버설 디자인에 사용할 쓰기' 단추를 누르면 프로그램의 실행을 요구할 수 있습니다.검증이 완료되면 다음과 같이 이미지와 설명을 추가하여 GD에 Dynamo를 쓸 수 있습니다userprile%\Docoments\AEC Generative Design에 필요한 데이터를 기록합니다.dependencies 폴더와dyn 파일을 다른 사람의 PC로 옮기면 같은 조건에서 GD를 실행할 수 있습니다.

    검토 작성


    이어서 연구를 창설하다.연구는 GD를 정의하는 조건이다.Dynamo에서 [일반 디자인] 탭→[검토 작성] 버튼을 클릭합니다.학습 유형을 선택할 수 있습니다.여기서 TerreArmee_Optimize 를 선택합니다.
    메서드는 최적화를 포함한 4가지 생성 메서드를 선택할 수 있습니다.여기서 최적화를 선택합니다.4가지 용법의 구별 사용 방법은 참고하십시오여기..
    선택 에서 Revit 요소를 선택합니다.Dynamo 면이 가져오기로 정의된 컨텐트를 표시합니다.Dynamo에서 GD를 실행할 때는 먼저 Dynamo 노드에서 선택한 후 GD를 시작해야 합니다.(캡처 경고 표시)
    [변수 및 상수 선택]에서 이 옵션을 선택하면 변수이고 를 제거하면 상수입니다.Dynamo 면에도 가져오기로 정의된 내용이 표시됩니다.
    대상 설정 및 구속 설정에서는 이 옵션을 선택하면 유효하지만 제거할 때는 유효하지 않습니다.Dynamo 면이 출력으로 정의된 내용을 표시합니다.
    생성된 설정에서 유전 알고리즘을 사용하여 설계 방안을 진화할 때의 매개 변수를 정의했다.자세한 내용은 여기.를 참조하십시오.
    생성 단추를 누르면 디자인 방안이 생성되기 시작합니다.


    연구 성과


    아래 화면에서 디자인 방안을 비교 토론할 수 있다.화면 아래에 표시된 매개 변수를 끌어다 놓고 지정된 범위 내의 매개 변수만 필터링합니다.방안을 결정한 후'다이너모에서 열기'를 누르세요.

    Dynamo 프로그램을 열면 GD에 의해 결정되는 매개변수가 자동으로 입력됩니다.그리고 일반적인 다이나모 실행 버튼을 누르면...했어!GD 결과를 Revit에 반영할 수 있습니다.

    좋은 웹페이지 즐겨찾기