색상 시스템
cad-viewer 색상 시스템은 AutoCAD ObjectARX의 동작을 따르면서 브라우저 환경에서 예측 가능한 렌더링을 보장합니다.
**AutoCAD Color Index(ACI)**와 True Color를 모두 지원하며, AcCmColor 추상화를 통해 통합됩니다.
개요
AutoCAD 호환 시스템에서 색상은 주로 두 가지 방식으로 표현됩니다:
ACI(AutoCAD Color Index)
- 정수 기반 색상 시스템(
0–256) - 미리 정의된 팔레트 사용
- 고정된 RGB 값이 아닌 컨텍스트에 의존하는 논리 색상 포함
True Color
- 24비트 RGB 색상(
R, G, B) - 각 채널은
0–255범위 - ACI와 독립적인 완전한 색상 유연성 제공
AcCmColor
cad-viewer의 모든 색상은 AcCmColor 클래스를 사용하여 표현됩니다.
지원 항목:
- ACI 인덱스
- True Color(RGB)
- 논리 색상 모드(ByLayer / ByBlock)
참조 구현:
https://github.com/mlightcad/realdwg-web/blob/main/packages/common/src/AcCmColor.ts
이 추상화는 색상 객체가 인덱스 색상 또는 명시적 RGB 값을 나타낼 수 있는 ObjectARX를 반영합니다.
특수 ACI 값
표준 ACI 값(1–255)과 달리 다음 값은 논리 색상을 나타냅니다:
ACI = 0 → ByBlock
- 색상은 블록 참조에 의해 결정됩니다
- 동작:
- 삽입 전: 기본 전경색 사용
- 삽입 후: 블록 컨텍스트에서 상속
이는 고정 색상이 아니라 동적 참조입니다.
ACI = 256 → ByLayer
- 색상은 엔티티의 레이어에서 상속됩니다
- CAD 워크플로에서 가장 일반적으로 사용되는 모드
동작:
- 레이어 색상을 변경하면 ByLayer를 사용하는 모든 엔티티가 업데이트됩니다
- 중앙 집중식 색상 관리를 가능하게 합니다
ACI = 7 → 적응형 전경색
- 기본 전경색을 나타냅니다
- 표시 방식:
- 어두운 배경에서는 흰색
- 밝은 배경에서는 검은색
따라서 이는 고정된 RGB 값이 아닌 컨텍스트 의존적 색상입니다.
AutoCAD 워크플로에서:
- 새 레이어를 생성하면 기본 색상은 일반적으로 ACI 7입니다
- 이를 통해 배경 테마에 관계없이 새로 생성된 기하가 항상 표시됩니다
AcDbEntity의 색상 해석
각 엔티티는 resolvedColor 속성을 통해 최종 표시 색상을 해석합니다.
참조 구현:
https://github.com/mlightcad/realdwg-web/blob/main/packages/data-model/src/entity/AcDbEntity.ts
resolvedColor 속성은 렌더링에 사용되는 최종 RGB 색상을 결정합니다. 해석은 우선순위 기반 프로세스를 따릅니다:
- True Color(최우선): 엔티티가 명시적으로 true color를 정의하면 이를 직접 사용합니다
- ByLayer 해석: 색상이 ByLayer(ACI = 256)이면 레이어의 해석된 색상에 위임합니다
- ByBlock 해석: 색상이 ByBlock(ACI = 0)이면 블록 삽입 컨텍스트에 따라 달라지며, 컨텍스트가 없으면 기본 색상으로 폴백합니다
- ACI 색상 해석: 표준 ACI 값(
1–255)의 경우 미리 정의된 조회 테이블을 사용합니다
cad-viewer에서의 ACI 7 처리
cad-viewer는 ACI 7을 고정된 RGB 값이 아닌 의미론적 색상으로 취급합니다. 배경이 변경되면 대비를 유지하기 위해 자동으로 반전됩니다. 어떻게 동작할까요? 원칙적으로,
배경 변경이 전경 업데이트를 트리거함: 뷰의 배경색이 변경되면 렌더러에 "전경" 렌더링 색상을 업데이트하도록 명시적으로 지시합니다. 규칙은 간단합니다:
- 배경이 검은색이면 ACI 7에 흰색을 사용합니다.
- 배경이 흰색이면 ACI 7에 검은색을 사용합니다.
재질은 자신이 "전경"인지 기억함: 재질이 생성될 때 전경(ACI 7) 엔티티를 나타내는지 여부를 나타내는 메타데이터로 태그됩니다. 이를 통해 시스템은 전경이 변경될 때 반전되어야 하는 모든 캐시된 재질을 찾을 수 있습니다.
중앙 집중식 전경 업데이트: 렌더러의 스타일 관리자는 단일 "전경 변경" 요청을 모든 재질 관리자(선, 점, 채우기)로 라우팅합니다. 각 관리자는 캐시된 재질을 순회하며 전경으로 태그된 것만 업데이트합니다.
요약
| 유형 | 표현 | 해석 전략 |
|---|---|---|
| True Color | RGB | 직접 |
| ACI(1–255) | 인덱스 | 팔레트 조회 |
| ByLayer | 256 | 레이어 위임 |
| ByBlock | 0 | 컨텍스트 의존 |
| ACI 7 | 7 | 적응형 대비 |
설계 목표
cad-viewer 색상 시스템은 다음을 목표로 설계되었습니다:
- ObjectARX 의미 체계와 일치
- 논리 색상 동작(ByLayer / ByBlock) 보존
- 브라우저에서 일관된 렌더링 보장
- 적응형 전경색(ACI 7)의 올바른 처리 제공