Barvy: zachovat ACI index a ByLayer po celé cestě DXF → model → DXF

Šablona i všech 9 log jsou zapsané výhradně indexovanými barvami AutoCADu
(group 62) – true color v nich není ani jednou. Kreslicí rozhraní přitom
neslo jen `int rgb`, takže se index i ByLayer ztratily už při čtení a export
zapisoval všechno jako natvrdo RGB (group 420). Výkres v CADu pak přestal
reagovat na tabulku barev a barva hladiny se rozpadla na kopie na entitách.

`IProfileRenderer.Layer(name, rgb, mm)` se mění na `Stav(in KresliciStav)`.
Stav nese barvu i s původem (`Barva`: ACI index / true color / ByLayer /
ByBlock), typ čáry, tloušťku a celý popis hladiny (`HladinaStav`) – hladina
se ve výstupu staví z tabulky hladin, ne z první entity, která na ní
přistála. Rámeček `!!NOPRINT` proto zůstane netisknutelný.

Paleta ACI je vlastní (`AciPaleta`), ne z ACadSharp: ta se od AutoCADu liší
u 33 indexů, mimo jiné u 8 (použitý v šabloně) a u posledního indexu většiny
desítek odstínů, kde vrací barvu ze sousední skupiny – 29 a 39 tam dokonce
dostanou tutéž barvu. Rozsah 10–249 se dopočítává, ne vypisuje.

Co ověřují nové testy (93 zelených):
- paleta proti AutoCADu i proti ACadSharp, se seznamem známých odchylek,
- rozřešení ByLayer/ByBlock, tloušťky a typu čáry,
- kolečko šablona → export → načtení: žádná entita není true color, indexy
  odpovídají zdroji, ByLayer zůstane ByLayer, hladiny mají barvu i příznak
  tisku ze zdrojové tabulky.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-07 12:13:32 +02:00
co-authored by Claude Opus 5
parent 7e7097c360
commit d66aec5299
16 changed files with 526 additions and 34 deletions
+2 -2
View File
@@ -84,7 +84,7 @@ public class ObloukyTesty
var contour = new Contour(new[] { arc, line }, Closed: true);
var g = new DxfProfileRenderer();
g.Layer("0", 0x000000);
g.Stav(KresliciStav.Vychozi);
g.Fill(new[] { contour });
// Export → dočasný DXF → import zpět a porovnání bboxu (sagitta ≤ 0,02 mm).
@@ -118,7 +118,7 @@ public class ObloukyTesty
var contour = new Contour(new[] { Edge.Arc(s.X, s.Y, e.X, e.Y, 1, 2, r, a0, sweep) }, Closed: false);
var g = new DxfProfileRenderer();
g.Layer("0", 0);
g.Stav(KresliciStav.Vychozi);
g.Stroke(contour);
var arc = Assert.Single(g.Document.Entities.OfType<Arc>());