RevitBIM자동화개발자

Dynamo로는 안 된다는 벽에 부딪혔다면: Python + Revit API 입문

MADE IN WORKS·2026. 7. 11.·5분 읽기

개요

Dynamo로 자동화를 시작했다면, 언젠가는 "이건 Dynamo로는 너무 복잡하다"는 한계에 부딪힌다. 그때 필요한 것이 Python + Revit API다. Revit API는 Revit의 거의 모든 기능을 코드로 제어할 수 있는 인터페이스다. Dynamo가 비주얼 툴이라면, Revit API는 "어떤 자동화든 가능하다"는 무한한 가능성을 제공한다.

Revit API로 할 수 있는 것들
  • 모델 요소 생성·수정·삭제
  • 파라미터 읽기/쓰기
  • 도면 자동 생성 및 시트 배치
  • 간섭 체크 및 모델 검토 자동화
  • 외부 데이터베이스 연동
  • 완전한 애드인(Add-in) 개발

왜 Python인가?

Revit API의 공식 언어는 C#이지만, Python도 두 가지 경로로 사용할 수 있다.

방식장점단점
pyRevitRevit 전용 Python 툴킷, 버튼 UI 자동 생성, 방대한 유틸리티pyRevit 설치 필요
Dynamo Python 노드Dynamo 환경 안에서 실행, Revit과 Dynamo 데이터 동시 활용Dynamo 실행 필요, 독립적 배포 어려움
Revit API 입문은 pyRevit으로 시작하라
pyRevit은 Revit에 커스텀 버튼을 추가해서 Python 스크립트를 실행할 수 있게 해주는 오픈소스 프레임워크다. 설치하면 Revit 리본 메뉴에 "pyRevit" 탭이 생기고, 여기서 스크립트를 관리·실행할 수 있다. Revit API의 진입 장벽을 크게 낮춰준다.

첫 번째 Python 스크립트 — 선택한 요소의 파라미터 출력

pyRevit 환경에서 실행하는 가장 기본적인 스크립트다.

# 선택한 요소의 모든 파라미터를 출력
import clr
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')

from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *

uidoc = __revit__.ActiveUIDocument
doc = uidoc.Document

# 선택한 요소 가져오기
selection = uidoc.Selection.GetElementIds()

for elem_id in selection:
    element = doc.GetElement(elem_id)
    print(f"요소 ID: {elem_id}")
    print(f"요소 이름: {element.Name}")
    
    # 모든 파라미터 출력
    params = element.Parameters
    for param in params:
        print(f"  {param.Definition.Name}: {param.AsValueString()}")

이 스크립트를 실행하면 선택한 요소의 모든 파라미터가 pyRevit 출력창에 표시된다. 어떤 파라미터가 있는지, 값을 어떻게 읽어야 하는지 확인할 때 유용하다.

실전 예제 2선

예제 1: 시트 자동 생성 — 100장을 10분 만에

설계 프로젝트에서 시트를 100장 만드는 것은 기본이다. 수동으로 하나하나 만들면 하루 종일 걸리지만, Revit API로는 10분이면 충분하다.

# 시트 자동 생성 스크립트 (pyRevit)
import clr
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')

from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *
from System.Collections.Generic import List

doc = __revit__.ActiveUIDocument.Document

# A1 시트 패밀리 로드 (미리 로드된 패밀리 타이틀 블록 사용)
collector = FilteredElementCollector(doc)\
    .OfClass(typeof(FamilySymbol))\
    .OfCategory(BuiltInCategory.OST_TitleBlocks)\
    .FirstElement()

title_block = doc.GetElement(collector.Id)

# 시트 생성
sheet_name = "A1-"

for i in range(1, 101):  # 100장 생성
    new_sheet = Sheet.Create(doc, title_block.Id)
    
    # 시트 이름과 번호 설정
    param_name = new_sheet.get_Parameter(BuiltInParameter.SHEET_NAME)
    param_number = new_sheet.get_Parameter(BuiltInParameter.SHEET_NUMBER)
    
    if param_name:
        param_name.Set(f"{sheet_name}{i}")
    if param_number:
        param_number.Set(f"{i:03d}")

print(f"시트 100장 생성 완료")

예제 2: 파라미터 일괄 업데이트 — 엑셀 연동

엑셀에 정리된 자재 코드 정보를 Revit 모델에 자동으로 반영한다.

# 엑셀 데이터로 Revit 파라미터 업데이트 (개념 코드)
import csv

# 1. 엑셀 데이터 읽기
with open('material_codes.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    data = list(reader)

# 2. Revit 요소 검색 및 업데이트
for row in data:
    elem_id = row['ElementId']
    material_code = row['MaterialCode']
    
    element = doc.GetElement(ElementId(int(elem_id)))
    if element:
        param = element.get_Parameter(
            BuiltInParameter.ALL_MODEL_MATERIAL
        )
        if param and not param.IsReadOnly:
            param.Set(material_code)

pyRevit 스크립트 구조 이해하기

pyRevit에서 유용한 스크립트를 만들기 위한 기본 구조다.

"""스크립트 설명 (이 텍스트가 버튼 툴팁으로 표시됨)"""
# -*- coding: utf-8 -*-

# 1. 레퍼런스 추가
import clr
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
clr.AddReference('RevitServices')

# 2. 네임스페이스 임포트
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *
from RevitServices.Persistence import DocumentManager

# 3. 현재 문서 가져오기
doc = DocumentManager.Instance.CurrentDBDocument

# 4. 트랜잭션 시작 (모델 변경 시 필수)
from Autodesk.Revit.DB import Transaction
t = Transaction(doc, "스크립트 이름")
t.Start()

# 5. 작업 수행
# (코드)

# 6. 트랜잭션 커밋
t.Commit()
트랜잭션(Transaction)을 잊지 마라
Revit API로 모델을 변경하려면 반드시 Transaction 안에서 실행해야 한다. 트랜잭션 없이 모델을 변경하면 Revit이 오류를 낸다. 트랜잭션은 "저장한다/취소한다"의 단위라고 생각하면 이해하기 쉽다. 작업을 시작할 때 t.Start(), 끝날 때 t.Commit().

학습 로드맵

  1. 1단계: Python 기본 문법 학습 (2~4주, 점프 투 파이썬 수준)
  2. 2단계: pyRevit 설치 → 샘플 스크립트 실행해보기
  3. 3단계: 공식 Revit API 문서에서 자주 쓰는 클래스 학습 (Element, Parameter, FilteredElementCollector 등)
  4. 4단계: 간단한 자동화 스크립트 작성 (파라미터 읽기/쓰기)
  5. 5단계: 실전 애드인 개발 (시트 자동 생성, 일괄 수정 등)
추천 학습 리소스설명
pyRevit 공식 문서설치부터 고급 기능까지
Revit API Docs (Autodesk 공식)모든 클래스와 메서드 레퍼런스
The Building Coder 블로그Revit API 전문가의 블로그, 다양한 예제
StackOverflow (Revit API 태그)실무 문제 해결의 보고

마무리

Dynamo가 "쉽고 빠른 자동화"라면, Revit API + Python은 "완전한 자동화"다. 처음에는 배우는 데 시간이 걸리지만, 한 번 익숙해지면 Dynamo로는 불가능했던 작업까지 모두 코드로 처리할 수 있다. "이걸 자동화할 수 있을까?"라는 질문에 대한 답은, Revit API 앞에서는 거의 항상 "할 수 있다"다.

다음 글에서는 Revit API의 실전 활용 — Dynamo vs pyRevit, 무엇으로 자동화할까를 비교 분석한다.