뷰 · 링크 · 기타
뷰 설정 복제
기준 뷰의 크롭 박스 · 숨김 요소 · Far Clip 깊이를 여러 뷰에 한 번에 복제 (뷰 템플릿이 관리하지 않는 개별 설정 전용)
🖱 쓰는 법
- 기준이 될 뷰를 열어둔 상태에서
- YoonDream 탭 → Coco 패널 → 뷰 설정 복제 버튼 클릭
- ① 소스 뷰 — ComboBox에서 선택하거나 현재 뷰 버튼으로 활성 뷰 지정
- ② 복제 항목 체크박스에서 원하는 항목만 켜기
- 크롭 박스 (Crop Region)
- 숨김 요소 (EH로 숨긴 레벨/그리드 등)
- Far Clip Offset (절단선 깊이)
- Grid/Level 2D Extent (같은 방향 뷰끼리만)
- ③ 타겟 뷰 — 복제 대상 뷰 체크 (검색 · 전체 · 해제 지원)
- 실행 ▶ 클릭 → 단일 Transaction으로 일괄 적용
📂 복제 가능한 4항목
| 항목 | 언제 쓰나요? |
|---|---|
| 크롭 박스 | 입면도 여러 개를 같은 범위로 맞추고 싶을 때 (뷰 Transform은 유지되어 구조 입면도가 45° 안 돌아감) |
| 숨김 요소 | 한 뷰에서 숨긴 레벨/그리드를 다른 뷰들에도 동일하게 숨기고 싶을 때 |
| Far Clip Offset | 뷰마다 절단 깊이가 다를 때 기준 뷰 깊이로 통일 |
| Grid/Level 2D Extent | 뷰별로 조정한 그리드 끝단 위치 복제 (같은 방향 뷰끼리만 의미 있음, 기본 OFF) |
💡 이럴 때 쓰세요
- 같은 방향으로 배치된 여러 입면도/단면도를 한 번에 정돈할 때
- 뷰 템플릿이 관리하지 않는 뷰별 개별 설정을 일괄 복사할 때
- 기준 뷰 하나만 예쁘게 맞춰두고 나머지 뷰는 자동으로 따라오게 하고 싶을 때
- 구조 입면도가 45° 회전된 상태에서도 안전하게 크롭 복제할 때 (Transform 유지)
Grid/Level Leader(구부림)는 복제되지 않습니다
Revit API의 Leader 세터가 내부적으로 거리/각도를 제약(clamp)하여 정확한 값 복제가 불가능 → 기능 제거됨.
🔍 UI 미리보기
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
Coco.panel/Crop.pushbutton/— script.py, ui.xaml, bundle.yaml
지원 뷰 타입
FloorPlan, CeilingPlan, EngineeringPlan, Elevation, Section
복제 가능한 항목 상세
| 항목 | 설명 | 기본값 |
|---|---|---|
| 크롭 박스 (Crop Region) | 월드 좌표 기반 변환, 타겟 뷰의 Transform(방향)은 유지 | ON |
| 숨김 요소 | 소스에서 EH로 숨긴 레벨/그리드 등을 타겟에도 동일하게 숨김 |
ON |
| Far Clip Offset | 절단선 깊이 (VIEWER_BOUND_OFFSET_FAR + _ACTIVE_FAR 세트) |
ON |
| Grid/Level 2D Extent | 뷰별로 조정된 그리드/레벨 끝단 위치 (같은 방향 뷰끼리만 의미) | OFF |
핵심 로직
- 크롭 박스: 소스의 8개 모서리를 월드 좌표로 변환 → 타겟 뷰 로컬로 역변환 후 AABB 계산. 타겟 뷰의
Transform을 유지해 구조 입면도 등 회전된 뷰가 45° 돌아가지 않음. - 숨김 요소: Revit API에
GetHiddenElementIds메서드가 없어,FilteredElementCollector+Element.IsHidden(view)로 전체 순회 수집. IronPython 3단계 fallback(인스턴스 → unbound → 리플렉션)으로 파생 뷰 타입 호환성 확보. - Grid/Level Extent:
GetCurvesInView후SetCurveInView적용. 실패 시 타겟 뷰 평면에 끝점 투영 fallback.
알려진 한계
- Grid/Level Leader(구부림) 복제: Revit API의 Leader 세터가 내부적으로 geometric constraint로 값을 clamp하여 거리/각도가 정확히 복제되지 않음 → 기능 제거
- Grid/Level Extent: 뷰 방향이 동일한 뷰끼리만 의미 있음 (입면도 → 측면도는 곡선이 뷰 평면 밖이라 자동 스킵)
Link Helper
여러 뷰에 DWG 도면을 이름 자동 매칭으로 일괄 링크
🖱 쓰는 법
- YoonDream 탭 → Coco 패널 → Link Helper 버튼 클릭
- DWG 파일들이 있는 폴더 지정
- 링크할 뷰 선택 (도구가 뷰 이름 ↔ DWG 파일명 유사도로 자동 매핑 제안)
- 매핑 조정 (자동 매핑이 틀렸다면 수동 수정)
- 배치 옵션 · 단위 선택
- 링크 클릭 → 각 뷰에 DWG 자동 링크
📂 매핑 예시
뷰 이름: "S-001 구조평면도 1F"
DWG 파일: "S-001_구조평면도_1F.dwg"
→ 유사도 높음 → 자동 매핑
💡 이럴 때 쓰세요
- 분야별 DWG 도면을 대응하는 Revit 뷰에 일괄 링크해야 할 때 — 100개 뷰 수동 링크 불필요
- CAD 원도를 Revit 뷰와 나란히 배치해 비교 · 보완 작업할 때
- 이미 링크된 DWG는 자동 스킵되어 중복 링크 걱정 없음
- DWG 파일이 다른 프로세스에 잠겨 있어도 임시 복제본으로 우회
🔍 UI 미리보기
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
Coco.panel/linkhelper.pushbutton/
자동 매핑
뷰 이름과 DWG 파일명의 유사도를 계산하여 자동 매칭:
뷰 이름: "S-001 구조평면도 1F"
DWG 파일: "S-001_구조평면도_1F.dwg"
→ 유사도 높음 → 자동 매핑
링크 옵션
| 옵션 | 선택지 |
|---|---|
| 배치 (ImportPlacement) | 6가지 옵션 (Center to Center, Origin to Origin 등) |
| 단위 (ImportUnit) | 6가지 옵션 (mm, cm, m, inch, foot, auto) |
파일 잠김 처리
다른 프로세스가 DWG를 잠근 경우 → 임시 폴더로 복제 후 복제본을 링크.
중복 방지
뷰에 이미 링크된 DWG가 있으면 자동 감지하여 스킵.
Schedule ↔ Excel 🚧 진행중
현재 개발 진행 중 — 엑셀 포맷 · 스케줄 동기화 로직 개선 작업 중
Revit 일람표와 Excel 사이 데이터를 양방향으로 주고받기 (DiRoots 플러그인의 무료 대안)
🖱 쓰는 법
- YoonDream 탭 → Coco 패널 → Schedule ↔ Excel 버튼 클릭
- 모드 선택 (4가지 중 하나)
- 대상 선택 · 엑셀 파일 지정
- 실행 클릭
📂 4가지 모드
| 모드 | 언제 쓰나요? |
|---|---|
| 요소 내보내기 | 특정 카테고리 요소 데이터를 엑셀로 덤프 |
| Excel 가져오기 | 엑셀에서 편집한 값을 요소 파라미터에 일괄 입력 |
| 스케줄 내보내기 | ViewSchedule 전체를 엑셀로 내보내기 |
| 스케줄 가져오기 | 엑셀에서 편집한 스케줄을 다시 Revit으로 |
💡 이럴 때 쓰세요
- 수백 개 요소의 파라미터를 엑셀로 뽑아 일괄 수정 후 다시 Revit에 반영할 때
- 일람표를 엑셀에서 더 편하게 필터/정렬하고 싶을 때
- DiRoots 같은 유료 플러그인 없이 무료로 해결하고 싶을 때
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
Coco.panel/SheetSchedule.stack/schedule_excel.pushbutton/
라이브러리 구조
| 모듈 | 역할 |
|---|---|
lib/element_data.py |
요소 데이터 수집/쓰기 |
lib/schedule_export.py |
스케줄 데이터 추출 |
lib/excel_utils.py |
Excel COM 연동 |
DiRoots 플러그인의 대안. 무료 + 맞춤 커스터마이징.
시트 복사
외부 Revit 파일에 있는 시트를 파라미터 값까지 그대로 현재 문서로 복사
🖱 쓰는 법
- YoonDream 탭 → Coco 패널 → 시트 복사 버튼 클릭
- 소스 파일 지정 (디스크 탐색 또는 열린 문서 선택)
- 시트 목록에서 복사할 시트 체크
- 검색·필터 지원
- Shift+클릭 으로 범위 선택
- 복사 실행 클릭 → 현재 문서로 시트 + 파라미터 이관
💡 이럴 때 쓰세요
- 이전 프로젝트의 시트 레이아웃을 그대로 재사용하고 싶을 때
- 시트 파라미터(발주처·프로젝트 번호 등)도 함께 가져와야 할 때
- 여러 시트를 한 번에 복사하고 싶을 때 (Shift+클릭 범위 선택)
🔍 UI 미리보기
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
Coco.panel/SheetSchedule.stack/copy_sheets.pushbutton/
기능
- 소스 파일 탐색 또는 열린 문서에서 선택
- 시트 목록 표시 + 검색/필터
- Shift+클릭 범위 선택 지원
- 시트 복사 시 파라미터 값도 함께 전송
IronPython 2 호환
.Name property 접근 시 .NET 워크어라운드 적용 (IronPython 2.7 제약).
타입별 자동 색칠
기둥·보 타입마다 뷰 필터를 자동 생성해서 인스턴스 타입이 바뀌면 색상이 실시간으로 따라감 (기존 애드인의 \"스냅샷\" 한계 해결)
🖱 쓰는 법
- 색칠할 뷰(3D · 평면 등)를 활성 상태로 둡니다
- YoonDream 탭 → Coco 패널 → 타입별 자동 색칠 버튼 클릭
- 카테고리 선택 — 기둥 또는 보 중 하나
- 도구가 해당 카테고리의 타입을 자동 수집 + 20색 팔레트 할당
- 필요 시 타입별 색상을 색상 스와치 클릭해 개별 커스텀
- 적용 대상 — 활성 뷰 또는 뷰 템플릿 선택
- 🎨 색상 적용 클릭
💡 이럴 때 쓰세요
- 검토용 3D 뷰에서 타입별로 색을 달리 보고 싶을 때 — 태그 달 필요 없음
- 한 번 색칠한 후에도 인스턴스 타입을 바꾸면 색상이 자동 갱신되길 바랄 때 (기존 애드인은 "다시 실행"해야 함)
- 프로젝트 전체 철골 기둥/보 검토 뷰를 자동 색상화할 때
- 타입이 새로 추가되면 도구 한 번 더 실행만으로 새 타입에 색 할당 (기존 색은 유지)
실시간으로 따라오는 원리
뷰 필터(ParameterFilterElement)를 타입별로 미리 만들어 두는 방식입니다. Revit이 뷰를 그릴 때마다 규칙을 재평가하므로, 인스턴스 타입을 A → B로 바꾸면 A 필터에서 이탈, B 필터에 자동 매칭되어 색이 즉시 전환됩니다.
새 타입이 생기면 도구를 한 번 더 실행해야 합니다
필터는 자동으로 새 타입을 감지하지 않습니다. 새 타입 추가 후 도구를 재실행하면 기존 타입 색은 유지되고 새 타입에만 신규 색이 할당됩니다.
🔍 UI 미리보기
🔧 개발자 정보 (API · 경로 · 내부 로직)
파일 위치
Coco.panel/type_color_filter.pushbutton/— script.py, ui.xaml, bundle.yaml
실시간성의 원리
뷰 필터(ParameterFilterElement)를 타입별로 하나씩 생성. Revit이 뷰 렌더링마다 규칙을 재평가하므로, 인스턴스가 Type A에서 Type B로 바뀌면 A 필터에서 이탈하고 B 필터에 자동 매칭되어 색상이 즉시 전환됩니다.
인스턴스.Type = A → 필터 "TCF-COL (A)" 매칭 → A 색상
↓ 사용자가 Type B로 변경
인스턴스.Type = B → 필터 "TCF-COL (B)" 매칭 → B 색상 (자동!)
주요 기능
| 기능 | 설명 |
|---|---|
| 카테고리 선택 | 기둥 / 보 중 단일 선택 (한 번에 한 관점) |
| 20색 팔레트 | Tableau 20 변형 — 시인성 우선 범주형 |
| 색상 자동 재배치 | 팔레트 순환 재할당 |
| 개별 색상 수정 | WinForms ColorDialog (커스텀 색상 지원) |
| 대상 선택 | 활성 뷰 또는 뷰 템플릿 |
| TCF 필터 전체 제거 | 이 도구가 만든 필터만 안전하게 일괄 삭제 |
| 재실행 시 색상 유지 | 기존 타입의 색은 유지, 새 타입만 팔레트에서 할당 |
기술적 디테일
- 필터 규칙:
SYMBOL_NAME_PARAM또는ALL_MODEL_TYPE_NAME문자열 매칭 —ParameterFilterUtilities.GetFilterableParametersInCommon()으로 카테고리별 가용 파라미터 동적 선택 - 왜 동적 선택인가: Revit은 카테고리마다 필터에 사용 가능한 파라미터 집합이 다름. 기둥에서 되는 파라미터가 보에선 안 될 수 있음
- 필터 이름 규칙:
TCF-{TAG} ({type_name})(예:TCF-COL (H-400x200)) —TCF-프리픽스로 다른 필터와 격리 - 금지 문자 처리: Revit 필터 이름에 허용되지 않는
{ } [ ] | ; < > ? \~는_`로 치환 - OGS 적용: Surface/Cut Foreground(Solid Drafting 패턴) + 투영/절단 선 색 동시 설정