✅ QC Panel
품질 검토 도구 4개 (물량인스펙터 개발 진행 중)
패밀리검토 (Family QC)
표준 라이브러리 파일을 기준으로 현재 모델의 패밀리/타입을 전수 대조 + 3D 빨간색 시각화 + 엑셀 리포트
🖱 쓰는 법
- 검토 대상 문서를 엽니다
- YoonDream 탭 → QC 패널 → 패밀리검토 버튼 클릭
- 📂 찾아보기 로 기준이 될 표준 .rvt 지정
- 실행 클릭 → 자동 비교 + 3가지 요약 카운트 표시
- 표준 준수 (초록) — 기준에 있는 패밀리 사용
- 비표준 (빨강) — 기준에 없는 패밀리 (문제)
- 기준 없음 (노랑) — 기준 파일에 대응 항목 부재
- 결과 리스트에서 비표준 항목 확인
- 하단 버튼으로 추가 작업
- 📊 Excel — 엑셀 리포트 뽑기
- 🔴 3D 격리 — 비표준 요소만 보이게
- 검토 뷰 — 전용 3D 뷰 자동 생성
💡 이럴 때 쓰세요
- 프로젝트 납품 전 표준 라이브러리 준수 여부 확인할 때
- 팀원이 비표준 패밀리를 쓴 곳을 3D에서 한눈에 찾아내고 싶을 때
- 감리 제출용 엑셀 리포트 필요할 때
- 비표준 요소만 격리한 검토 뷰를 자동으로 만들어야 할 때
🔍 UI 미리보기
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
QC.panel/familyqc.pushbutton/
검토 프로세스
- 기준 파일 선택 — Detach로 열어 전체 패밀리/타입 수집
- 현재 문서 스캔 — 모든 인스턴스 수집
- 매칭 — 패밀리 이름 + 타입 이름으로 기준 대조
- 판정 — 기준에 없는 패밀리 = 비표준
시각화
| 기능 | 설명 |
|---|---|
| 3D 빨간색 강조 | OverrideGraphicSettings로 비표준 요소 빨간색 처리 |
| 검토 뷰 자동 생성 | View3D.CreateIsometric()으로 전용 3D 뷰 생성 |
| 비표준 격리 | 비표준 요소만 보이도록 격리 |
엑셀 리포트 (ExcelWrapper COM Interop)
excelType = System.Type.GetTypeFromProgID("Excel.Application")
app = System.Activator.CreateInstance(excelType)
출력 시트
| 시트 | 내용 |
|---|---|
| 요약 | 파일별 통과/비표준/기준없음 카운트 |
| 카테고리별 | 패밀리→타입 상세 목록 |
패밀리 사용검색
고른 패밀리가 어느 파일에 실제로 놓여 있는지 여러 파일을 한 번에 확인 — 파일에 들어만 있는 것과 실제로 모델에 놓인 것을 구분해 줍니다
🖱 쓰는 법
- YoonDream 탭 → QC 패널 → 패밀리 사용검색 버튼 클릭
- 찾을 패밀리를 고릅니다 — 세 가지 방법 중 편한 것으로
- 기준 파일에서 고르기 — 파일 하나를 열어 그 안의 목록에서 선택
- 열린 문서에서 고르기 — 지금 열어 둔 파일에서 선택
- 이름 직접 입력 — 이름을 알고 있을 때. 여러 개는 세미콜론(
;)으로 구분
- 필요하면 타입까지 골라서 검사에 체크 — 목록이 타입 단위로 펼쳐집니다
- 찾아볼 파일을 담습니다 — 폴더 추가 · 파일 추가 · 열린 문서
- 검사 시작 → 바탕화면에 결과 파일이 저장되고 자동으로 열립니다
📂 결과 보는 법
결과 첫 장이 판정표입니다. 가로가 찾는 패밀리, 세로가 파일입니다.
| 표시 | 뜻 |
|---|---|
| O (초록) | 그 파일에 실제로 놓여 있음 |
| △ (노랑) | 이름은 있는데 놓인 게 하나도 없음 |
| X (회색) | 그 이름 자체가 파일에 없음 |
| - (빨강) | 파일을 열지 못함 (사유는 비고 칸에) |
둘째 장 상세에는 판정의 근거가 들어갑니다 — 파일 안에서 찾은 실제 이름, 놓인 개수, 타입별 개수. O 라고만 하고 끝내지 않고, 몇 개가 어느 타입으로 놓였는지까지 보여 줍니다.
💡 이럴 때 쓰세요
- 패밀리를 바꾸거나 지워야 할 때 — 어느 동에 영향이 가는지 먼저 확인
- 표준 패밀리가 각 동에 제대로 적용됐는지 한 장으로 대조할 때
- 파일에 들어만 있고 안 쓰는 패밀리 정리할 때 (△ 로 뜨는 것들)
- 특정 벽·바닥 타입을 실제로 쓴 동이 어디인지 찾을 때
벽·바닥 같은 시스템 패밀리도 됩니다
문·창·기둥처럼 불러오는 패밀리뿐 아니라 벽·바닥·지붕·천장 같은 시스템 패밀리도
같이 나옵니다. 목록에서 [벽] 기본 벽 처럼 카테고리와 함께 보입니다.
패밀리 단위와 타입 단위를 섞어도 됩니다
A패밀리는 통째로, B패밀리는 특정 타입만 처럼 한 번에 담아서 검사할 수 있습니다.
담아 둔 항목은 체크 상자를 바꿔도 그대로 남습니다.
타입으로 찾을 때 주의
타입까지 지정하면 그 이름의 타입이 없는 파일은 X 로 나옵니다. 패밀리는 들어 있어도 마찬가지입니다. 패밀리가 있는지만 보려면 패밀리 단위로 담으세요.
파일은 건드리지 않습니다
읽기만 하고 아무것도 고치지 않습니다. 큰 파일은 목록이 뜨기까지 시간이 조금 걸립니다.
열어 둔 파일은 그 화면 그대로 읽습니다
이미 열어 둔 파일은 다시 열지 않고 그 문서를 그대로 읽습니다. 작업 중인 파일이 닫히지 않습니다. 공유 모델(중앙파일)도 마찬가지입니다 — 폴더에서 중앙파일을 담았는데 내 컴퓨터에 그 파일을 열어 둔 상태면, 열어 둔 쪽에서 읽습니다. 목록에 초록색 열림 표시로 나오고, 결과 비고 칸에도 남습니다. 중앙파일과 내 파일을 둘 다 담으면 같은 모델이므로 하나로 합쳐서 검사합니다.
🔍 UI 미리보기
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
QC.panel/family_usage_finder.pushbutton/- 함정 기록:
ERROR/family_usage_finder_notes.md - 계획 문서:
dev/active/family-usage-finder/
판정 규칙
| 표기 | 패밀리 단위 | 타입 단위 |
|---|---|---|
O |
어느 타입이든 인스턴스 1개 이상 | 그 타입의 인스턴스 1개 이상 |
△ |
존재하나 인스턴스 0개 | 타입은 존재하나 인스턴스 0개 |
X |
그 이름의 패밀리 없음 | 그 이름의 타입 없음 (패밀리만 있어도 X) |
두 경로를 모두 훑는다 — 시스템 패밀리는 Family 요소가 없다
# (1) 로드 가능 패밀리
for fam in FilteredElementCollector(doc).OfClass(Family): ...
# (2) 시스템 패밀리 — FamilySymbol 이 아닌 ElementType
for et in FilteredElementCollector(doc).WhereElementIsElementType():
if isinstance(et, FamilySymbol): continue
fam_name = et.FamilyName # '기본 벽', 'Floor' …
인스턴스 카운트 — 전체 스윕 회피
| 대상 | 방법 |
|---|---|
| 로드 가능 | FamilyInstanceFilter(doc, symbolId) — Revit 내부 인덱스 사용 |
| 시스템 | ElementMulticategoryFilter 로 카테고리 한정 후 GetTypeId() 대조 |
| 폴백 | 필터 실패 시 그 문서 1회 전체 순회로 typeId → 개수 맵 구축 |
주의 사항
- 파일 열기는
OpenAllWorksets필수.CloseAllWorksets로 열면 닫힌 워크셋의 요소가 메모리에 없어 개수가 조용히 적게 나온다. - 이름 비교는 정규화(대문자화 + 영숫자만) — 파일마다 공백·하이픈 표기 차이 흡수.
- 읽기 전용이라 워크셰어링 점유가 생기지 않는다 (
relinquish_all불필요). - 진행 중 취소하면 결과가 일부 파일뿐 — 알림·엑셀 제목·파일명 세 곳에 표시된다.
뷰 템플릿 비교
기준 뷰 템플릿과 다른 템플릿들의 설정 차이를 항목별로 상세 분석
🖱 쓰는 법
- YoonDream 탭 → QC 패널 → 뷰 템플릿 비교 버튼 클릭
- 기준 템플릿 선택
- 비교 대상 템플릿 다중 선택
- 실행 클릭 → 차이점 하이라이트 리포트
📂 비교 항목
| 항목 | 설명 |
|---|---|
| 가시성/그래픽 | 카테고리별 표시/숨김, 선 두께, 색상 |
| 뷰 필터 | 적용된 필터 목록 + 필터별 설정 |
| 파라미터 오버라이드 | 뷰 파라미터 값 차이 |
💡 이럴 때 쓰세요
- 팀원이 만든 뷰 템플릿이 표준과 얼마나 다른지 확인할 때
- 템플릿 변경 이력 검토 필요할 때
- 동일해야 할 템플릿 3~5개 사이 미세한 차이 찾아낼 때
파라미터 이름 자동 한국어 변환
Revit 내부 파라미터 이름이 영문으로 되어 있어도 LabelUtils로 한국어/영어 양쪽 표시됩니다.
🔍 UI 미리보기
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
QC.panel/view_template_compare.pushbutton/
워크플로우
- 기준 템플릿 선택
- 비교 대상 템플릿 다중 선택
ViewType+StorageType+BuiltInParameter로 각 설정 추출- 차이점만 하이라이트
LabelUtils로 파라미터 이름 한국어/영어 표시
뷰 타입 한국어 라벨
safe_name() + param_display() 함수로 Revit 내부 이름을 사용자 친화적으로 변환.
물량인스펙터 진행중
🚧 개발 진행 중
재질 → 카테고리 → 패밀리 → 타입 4단계 트리로 모델의 물량(부피/면적)을 계층 탐색
🖱 쓰는 법 (개발 중)
- YoonDream 탭 → QC 패널 → 물량인스펙터 버튼 클릭
- 부피 또는 면적 탭 선택
- 4단계 트리에서 관심 항목 확장
- 원하는 노드 선택 → 격리 또는 색상 강조
📂 주요 기능
| 기능 | 설명 |
|---|---|
| 4단계 트리 | Material → Category → Family → Type 계층 탐색 |
| 부피 탭 | m³ 단위 물량 표시 |
| 면적 탭 | m² 단위 면적 표시 |
| 격리 | 선택 요소를 3D 뷰에서 격리 |
| 색상 강조 | 선택 요소에 색상 오버라이드 |
| 재질 필터 | 팝업에서 재질 선택 → 해당 요소만 표시 |
💡 이럴 때 쓰게 될 예정
- 재질별 총 물량 빠른 집계 (예: "콘크리트 전체 m³")
- 특정 타입만 뷰에서 격리해 검토할 때
- Quick Physical Inspection — 물량을 수식/일람표 없이 빠르게 확인
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
QC.panel/QuantityInspector.pushbutton/
UI 프레임워크
Windows Forms 기반 (WPF가 아닌):
TreeView— 4단계 계층 트리TabControl— 부피/면적 전환CheckedListBox— 재질 선택 팝업
설정 저장
ConfigManager — AppData에 JSON으로 설정 저장/로드.