Skip to content

Barevný systém ​

Barevný systém cad-viewer se řídí chováním AutoCAD ObjectARX a zároveň zajišťuje předvídatelné vykreslování v prostředí prohlížeče.

Podporuje jak AutoCAD Color Index (ACI), tak True Color, sjednocené prostřednictvím abstrakce AcCmColor.

Přehled ​

V systémech kompatibilních s AutoCADem jsou barvy reprezentovány dvěma základními způsoby:

ACI (AutoCAD Color Index) ​

  • Systém barev založený na celých číslech (0–256)
  • Používá předdefinovanou paletu
  • Zahrnuje logické barvy, které závisí na kontextu, nikoli na pevných hodnotách RGB

True Color ​

  • 24bitová barva RGB (R, G, B)
  • Každý kanál nabývá hodnot 0–255
  • Poskytuje plnou barevnou flexibilitu nezávisle na ACI

AcCmColor ​

Všechny barvy v cad-viewer jsou reprezentovány pomocí třídy AcCmColor.

Podporuje:

  • index ACI
  • true color (RGB)
  • logické barevné režimy (ByLayer / ByBlock)

Referenční implementace:
https://github.com/mlightcad/realdwg-web/blob/main/packages/common/src/AcCmColor.ts

Tato abstrakce zrcadlí ObjectARX, kde barevný objekt může představovat buď indexovanou barvu, nebo explicitní hodnotu RGB.

Speciální hodnoty ACI ​

Na rozdíl od standardních hodnot ACI (1–255) představují následující hodnoty logické barvy:

ACI = 0 → ByBlock ​

  • Barva je určena odkazem na blok
  • Chování:
    • Před vložením: používá výchozí barvu popředí
    • Po vložení: dědí z kontextu bloku

Nejde o pevnou barvu, ale o dynamický odkaz.

ACI = 256 → ByLayer ​

  • Barva je zděděna z hladiny entity
  • Nejpoužívanější režim v CAD pracovních postupech

Chování:

  • Změna barvy hladiny aktualizuje všechny entity používající ByLayer
  • Umožňuje centralizovanou správu barev

ACI = 7 → Adaptivní barva popředí ​

  • Představuje výchozí barvu popředí
  • Zobrazuje se jako:
    • Bílá na tmavém pozadí
    • Černá na světlém pozadí

To z ní činí barvu závislou na kontextu, nikoli pevnou hodnotu RGB.

V pracovních postupech AutoCADu:

  • Při vytvoření nové hladiny je její výchozí barva obvykle ACI 7
  • To zajišťuje, že nově vytvořená geometrie je vždy viditelná bez ohledu na motiv pozadí

Rozlišení barev v AcDbEntity ​

Každá entita rozlišuje svou finální zobrazovanou barvu prostřednictvím vlastnosti resolvedColor.

Referenční implementace:
https://github.com/mlightcad/realdwg-web/blob/main/packages/data-model/src/entity/AcDbEntity.ts

Vlastnost resolvedColor určuje finální barvu RGB použitou pro vykreslování. Rozlišení probíhá procesem založeným na prioritě:

  • True Color (nejvyšší priorita): Pokud entita explicitně definuje true color, použije se přímo
  • Rozlišení ByLayer: Pokud je barva ByLayer (ACI = 256), deleguje se na rozlišenou barvu hladiny
  • Rozlišení ByBlock: Pokud je barva ByBlock (ACI = 0), závisí na kontextu vložení bloku a při nedostupnosti kontextu se uchýlí k výchozí barvě
  • Rozlišení ACI barvy: Pro standardní hodnoty ACI (1–255) se použije předdefinovaná vyhledávací tabulka

Zpracování ACI 7 v cad-viewer ​

cad-viewer považuje ACI 7 za sémantickou barvu, nikoli pevnou hodnotu RGB. Automaticky se přepíná, aby při změně pozadí zachoval kontrast. Jak to funguje? V zásadě takto:

  • Změna pozadí spustí aktualizaci popředí: Když se změní barva pozadí zobrazení, renderer dostane explicitní pokyn aktualizovat barvu vykreslování „popředí“. Pravidlo je jednoduché:

    • Pokud je pozadí černé, použijte pro ACI 7 bílou.
    • Pokud je pozadí bílé, použijte pro ACI 7 černou.
  • Materiály si pamatují, zda jsou „popředí“: Při vytváření materiálů jsou označeny metadaty určujícími, zda představují entitu popředí (ACI 7). To systému umožňuje najít všechny uložené materiály, které by se měly při změně popředí přepnout.

  • Centralizovaná aktualizace popředí: Správce stylů rendereru směruje jediný požadavek „change foreground“ do všech správců materiálů (čáry, body, výplně). Každý správce prochází své uložené materiály a aktualizuje pouze ty označené jako popředí.

Shrnutí ​

TypReprezentaceStrategie rozlišení
True ColorRGBPřímá
ACI (1–255)IndexVyhledání v paletě
ByLayer256Delegace na hladinu
ByBlock0Závislé na kontextu
ACI 77Adaptivní kontrast

Cíle designu ​

Barevný systém cad-viewer je navržen tak, aby:

  • odpovídal sémantice ObjectARX
  • zachoval chování logických barev (ByLayer / ByBlock)
  • zajistil konzistentní vykreslování v prohlížečích
  • poskytl správné zpracování adaptivní barvy popředí (ACI 7)