Skip to content

색상 시스템 ​

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 ColorRGB직접
ACI(1–255)인덱스팔레트 조회
ByLayer256레이어 위임
ByBlock0컨텍스트 의존
ACI 77적응형 대비

설계 목표 ​

cad-viewer 색상 시스템은 다음을 목표로 설계되었습니다:

  • ObjectARX 의미 체계와 일치
  • 논리 색상 동작(ByLayer / ByBlock) 보존
  • 브라우저에서 일관된 렌더링 보장
  • 적응형 전경색(ACI 7)의 올바른 처리 제공