Room · Door
Room 요소 조회
벽 · 천장 · 문 · 창 · 기둥 등이 어느 Room에 속하는지 자동으로 찾아 HAS_RM/UNIT 파라미터에 일괄 입력
🖱 쓰는 법
- Room이 배치된 Revit 문서를 엽니다
- YoonDream 탭 → Coco 패널 → Room 요소 조회 버튼 클릭
- 조회할 카테고리 체크 (벽 / 천장 / 문 / 창 / 레일링 / 계단 / 구조기둥 / 구조 보)
- 상단 통계 카드에서 결과 확인 (미배정 요소는 노란색 뱃지)
- 필요한 작업 실행
- Excel — 전체 결과를 엑셀로 내보내기
- 파라미터 입력 — HAS_RM/UNIT 파라미터에 일괄 입력
- Revit 선택 — 행 선택 후 Revit 뷰에서 하이라이트
- 더블클릭 — 해당 요소로 즉시 화면 이동
💡 이럴 때 쓰세요
- 실별 마감·도어 물량 집계를 위해 요소별 Room 정보를 일람표에 넣어야 할 때 — 수동 입력 수백 건 → 자동화
- Room 미배정 벽/천장 찾아서 수정하고 싶을 때 — 노란 뱃지로 한눈에
- Room Separator로 경계를 만든 프로젝트에서도 정확한 Room 매칭이 필요할 때 (자동 fallback 지원)
- 다층 Room(예: 아트리움)에서도 여러 층에 걸친 요소를 감지해야 할 때
Room Separator 환경도 자동 처리
벽 대신 Room Separator로 경계를 짠 프로젝트에서 문/창의 FromRoom/ToRoom이 비어 있어도, 도구가 자동으로 위치 기반 탐색으로 전환해 정확히 매칭합니다.
🔍 UI 미리보기
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
Coco.panel/room_element_query.pushbutton/— script.py, ui.xaml- 라이브러리:
lib/yoon_room_utils.py
지원 카테고리 (8종)
벽, 천장, 문, 창문, 레일링, 계단, 구조기둥, 구조 보
Room 판별 알고리즘
모든 판별의 핵심은 doc.GetRoomAtPoint(XYZ, phase) — 좌표 기반 Room 탐색.
| 요소 | 판별 방식 |
|---|---|
| 벽 | 다중 샘플링 — 벽 중심선 + 양쪽 법선 방향(3단계 오프셋)에서 GetRoomAtPoint(). 전체 높이에 걸쳐 Z 샘플링하여 다층 Room도 감지 |
| 문/창 | FromRoom/ToRoom 1차 시도 → 둘 다 None이면 GetRoomAtPoint() fallback + Host 벽 법선으로 반대편 Room 탐색 |
| 천장 | BoundingBox 중심+4분점에서 아래쪽으로 Z 탐색 (천장 아래 = Room 내부) |
| 기타 (기둥/보/레일링/계단) | BoundingBox 중심+4분점에서 Z 샘플링. 못 찾으면 아래쪽 확장 탐색 |
필터링 규칙
- EXT 타입 벽 제외 — 외벽은 Room 경계가 아니므로 스킵
- 레벨 매칭 필터 — 요소의 레벨과 Room의 레벨이 일치하는 경우만
- Room 검색 — 텍스트 필터로 특정 Room만 표시
파라미터 입력
HAS_RM / UNIT (인스턴스, 텍스트 타입) — 프로젝트에 이미 존재하는 파라미터 사용 (새로 생성하지 않음).
사용자 프로젝트 특성: Room Separator로 Room 경계를 설정 (벽이 아닌).
MEP Room 조회
덕트·파이프·트레이 등 MEP 요소가 어떤 Room을 통과하는지 링크된 건축 모델을 기준으로 자동 조회
🖱 쓰는 법
- 건축 모델이 RevitLink로 로드된 MEP 문서를 엽니다
- YoonDream 탭 → Coco 패널 → MEP Room 조회 버튼 클릭
- 도구가 자동으로 건축 링크를 읽어 MEP 요소별 통과 Room 목록 표시
💡 이럴 때 쓰세요
- 덕트가 지나가는 Room 리스트 뽑아 누락 구간 찾을 때
- 스프링클러 · 전등 등이 어느 Room에 속하는지 일괄 확인할 때
- MEP 모델에서 건축 Room 정보를 가져오려는데 링크만 있고 직접 접근 불가할 때 — 도구가 링크 내부 Room을 읽어냄
🔍 UI 미리보기
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
Coco.panel/mep_room_query.pushbutton/
지원 MEP 카테고리
덕트, 파이프, 플렉스덕트, 플렉스파이프, 케이블트레이, 전선관, 피팅, 터미널, 액세서리, 장비, 기구, 스프링클러, 전기 요소
조회 방식
- 링크된 건축 모델 접근 (
RevitLinkInstance) - MEP 요소의
LocationCurve를 따라 포인트 샘플링 - 각 샘플 포인트에서 건축 모델의 Room 판별
- 요소가 통과하는 모든 Room 목록 출력
Door Material 일괄변경
프로젝트 내 모든 Door 타입의 재질 파라미터를 한 번에 일괄 변경
🖱 쓰는 법
- YoonDream 탭 → Coco 패널 → Door Material 일괄 버튼 클릭
- 새 재질 값 입력
- 실행 클릭 → 모든 Door 타입의 Material 파라미터 일괄 적용
- 성공 / 스킵 / 실패 카운트 확인
💡 이럴 때 쓰세요
- 프로젝트 후반 도어 재질이 바뀌어 수백 개 타입 일괄 수정 필요할 때
- 표준 재질로 도어 전체 통일이 필요할 때
- 수동으로 하나씩 타입 열어 바꾸기 불가능한 규모일 때
읽기 전용 파라미터는 건너뜁니다
ReadOnly 파라미터는 자동으로 스킵되고 결과에 기록됩니다. 에러 없이 완료.
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
Coco.panel/DoorRoom.stack/bulk_door_material.pushbutton/
워크플로우
FilteredElementCollector로 전체FamilySymbol(Door 카테고리) 수집- 새 재질 값 입력
set_door_material()— 순회하며 파라미터 설정- 결과: 성공/스킵/실패 카운트 반환
WarningSwallower로 비치명적 경고 자동 무시. ReadOnly 파라미터는 graceful 스킵.
도어룸 자동입력
Door Number에서 Room 번호를 자동으로 뽑아내 Room Number/Name 파라미터에 자동 입력
🖱 쓰는 법
- Door Number 네이밍 규칙이
동-호-도어번호형태로 된 프로젝트를 엽니다 - YoonDream 탭 → Coco 패널 → 도어룸 자동입력 버튼 클릭
- 도구가 Door Number 파싱 → 대응 Room 찾아 자동 입력
📋 파싱 규칙 예시
Door Number: "A-101-SD01"
→ 파싱: "A-101"
→ Room Number "A-101"과 자동 매칭
→ Door의 Room Number/Name 파라미터에 자동 입력
💡 이럴 때 쓰세요
- Door 일람표에 Room 정보 컬럼이 비어 있어 수동 입력 수백 건이 쌓여 있을 때
- Door Number 네이밍에서 규칙을 뽑아 자동화할 수 있는 프로젝트일 때
- Room 번호가 변경되어도 Door Number만 올바르면 자동 반영 가능
유령 Room은 자동 제외
Area=0인 유령 Room은 매칭에서 제외됩니다. 유령 Room이 많다면 먼저 유령룸 삭제 도구를 돌리면 깔끔합니다.
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
Coco.panel/DoorRoom.stack/door_room_autofill.pushbutton/
파싱 규칙
Door Number를 "-"로 분리하여 Room 번호 추출:
Door Number: "A-101-SD01"
→ 파싱: ["A", "101", "SD01"]
→ Room 번호: "A-101"
워크플로우
get_room_dict()—{room_number: room_name}딕셔너리 구축 (Area=0 유령룸 제외)get_parsed_door_number()— Door Number 파싱- Room 번호 매칭 → Door의 Room Number/Name 파라미터에 자동 입력
유령룸 삭제
여러 RVT 파일에서 면적이 0인 유령 Room을 일괄 탐색하여 삭제
🖱 쓰는 법
- YoonDream 탭 → Coco 패널 → 유령룸 삭제 버튼 클릭
- 대상 파일 추가
- 열린 문서 추가 — Revit에 이미 열린 파일
- 파일 추가 — 디스크에서 직접 선택
- 폴더 추가 — 폴더 내 재귀 탐색 (백업 자동 제외)
- 실행 클릭 → 파일별로 유령 Room 탐색 + 삭제
💡 이럴 때 쓰세요
- Room 일람표에 이상한 행(Area=0)이 섞여 있어 정리할 때
- 도어룸 자동입력 전 정리 단계로 유령 Room 제거
- 100개 파일 일괄 정리해야 할 때
링크 문서는 스캔만 가능, 삭제 불가
RevitLink로 로드된 문서의 유령 Room은 스캔만 되고 삭제할 수 없습니다. 직접 열어야 삭제 가능.
🔍 UI 미리보기
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
Coco.panel/DoorRoom.stack/ghost_room_cleaner.pushbutton/— script.py, ui.xaml
유령 룸 정의
Room.Area == 0 — 경계가 없거나 올바르지 않아 면적이 0인 Room. 모델에 존재하지만 실제 공간을 나타내지 않는 무효 데이터.
파일 소스
| 소스 | 설명 |
|---|---|
| 열린 문서 추가 | 현재 Revit에서 열린 프로젝트 목록 (SelectFromList) |
| 파일 추가 | 디스크에서 .rvt 직접 선택 |
| 폴더 추가 | 폴더 내 재귀 탐색 (백업 자동 제외) |
링크 문서 처리
링크로 로드된 문서는 유령 룸 스캔만 가능하고 삭제는 불가 — 알림 표시. 직접 열어야만 삭제 가능.
에러 기록: ERROR/ghost_room_cleaner_errors.md (5건)