Vektorový grafický formát DXF

22. 3. 2007
Doba čtení: 10 minut

Sdílet

V dnešním článku se budeme zabývat vektorovým formátem nazvaným DXF neboli Drawing Interchange File Format. Tento formát, který byl navržený firmou AutoDesk, je používán zejména při přenášení grafických informací mezi různými systémy typu CAD, vektorovými editory, modelovacími programy a podobně.

Obsah

1. Vektorový grafický formát DXF
2. Přednosti vektorového grafického formátu DXF
3. Zápory tohoto grafického formátu
4. Popis struktury textových souborů typu DXF
5. Skupiny a jejich číselné kódy
6. Význam některých kódů skupin
7. Ukázka prázdného validního souboru typu DXF
8. Odkazy na další informační zdroje
9. Obsah dalšího pokračování tohoto seriálu

1. Vektorový grafický formát DXF

Vektorový grafický formát DXF (jedná se o zkratku úplného názvu Drawing Interchange File Format) byl navržen firmou AutoDesk pro její pilotní a pravděpodobně i nejčastěji používanou aplikaci – dnes světoznámý program AutoCAD. Původně se mělo jednat o formát, kterým by mezi sebou na souborové úrovni komunikovaly „malé“ CADy, které se v té době na počítačích PC začaly objevovat, postupem času se však formát DXF začal používat i v mnoha pokročilejších CAD aplikacích a modelovacích programech, a to nejenom na platformě PC. Mezitím vyspěl i samotný AutoCAD a ostatně celá platforma osobních počítačů řady PC se stala zajímavější i pro výrobce „velkých“ CADů, kteří kromě původních Unixových grafických stanic začali podporovat i platformu PC (Catia apod.).

Dnes je prakticky nemožné najít nějaký rozšířenější systém typu CAD, který by buď přímo nebo alespoň formou interně spouštěných konvertorů nepodporoval DXF, jak pro import, tak i pro export. Právě naopak – pro některé menší CADy je DXF prakticky jediná možnost, jak sdílet data s konkurenčními produkty, protože další formáty (IGES atd.) nebývají v těchto aplikacích podporovány. V tomto vektorovém souborovém formátu je možné ukládat jak informace o klasických 2D výkresech (první verze AutoCADu a dnes vektorové editory), tak i popisy složitých trojrozměrných scén, ve kterých mohou být tělesa reprezentována buď trojúhelníkovými a čtyřúhelníkovými ploškami (3D faces), parametrickými plochami či dokonce pomocí množinových operací CSG (Construction Solid Geometry).

Vektorová data mohou být ve formátu DXF uložena ve dvou podobách. Častější je forma textová – v tomto případě mají soubory DXF strukturovaný ASCII formát snadno čitelný jak člověkem, tak i počítačem. Druhá forma je binární; ta se sice vyskytuje méně často, ale soubory uložené v této formě jsou kratší (cca 20% velikosti textové varianty, konkrétní hodnoty se mohou lišit podle typu ukládaných výkresů) a také se načítají mnohem rychleji. Soubory uložené v binární variantě DXF mají většinou koncovku .DXB (Drawing Binary Interchange File Format), někdy se však můžeme setkat i s koncovkou .DXF, i když to není moc korektní, protože některé programy a operační systémy rozeznávají typy souborů pouze podle jejich přípony.

2. Přednosti vektorového grafického formátu DXF

Formát DXF nabídl uživatelům i programátorům několik vlastností, které ho činí poměrně zajímavým. Pojďme si nyní některé vlastnosti tohoto formátu popsat (bez zabíhání do technických detailů, na ty bude místo až v následujícím textu).

Pravděpodobně největší předností formátu DXF je jeho rozšířenost. S tím do značné míry souvisí i jeho podpora v mnoha graficky orientovaných aplikacích. Nemusí se přitom jednat pouze o složité a drahé aplikace typu CAD či CAM, protože import z DXF je podporován například i do aplikací Microsoft Office (převod na vektorové obrázky, musí však být nainstalovaný příslušný filtr), mnoha vektorových grafických editorů (typickým příkladem je CorelDraw) i jednoúčelových programů typu LParser (tím jsme se zabývali v seriálu o fraktálech) a modelovacích programů (původní 3D Studio, jeho následovník 3D Studio Max, Maya). Kromě toho existuje mnoho konvertorů – většinou však komerčních nebo closed-source – , které slouží k převádění vektorových dat z a/nebo do formátu DXF.

Další předností tohoto souborového formátu je poměrně jednoduchá interní struktura, takže soubory DXF je snadné jak vytvářet, tak i zpětně načítat. Paradoxně se přitom ukazuje, že velmi háklivý na porušené DXF soubory je právě AutoCAD. Snadné zpracování samozřejmě neplatí pro některé pokročilejší grafické entity typu kóta či blok s atributy (to však není problém samotného formátu, nýbrž složitostí těchto entit), ale základní entity se vytváří či naopak načítají jednoduše. Generování jednoduchých souborů typu DXF je možné provádět i v převážně textově orientovaných skriptovacích jazycích, například BASHi, Perlu či Tcl (v dobách kralování MS-DOSu jsem také viděl mnoho programů napsaných v GW-Basicu a QBasicu :-).

Vzhledem k tomu, že textové DXF mají na lichých řádcích uvedeny názvy atributů či příkazů a na řádcích sudých jejich hodnoty (vždy je zde uložena pouze jedna hodnota, nejsou zapotřebí žádné oddělovače ani jiné syntaktické „smetí“), je načítání těchto souborů možné i s absencí specializovaných knihoven, bez kterých se prakticky neobejdeme například při práci s grafickými formáty založenými na XML (mezi tyto formáty patří například zajímavý formát SVG (Scalable Vector Graphics), kterým se později také budeme zabývat) nebo na jiné stromově orientované struktuře (VRML apod.). To samozřejmě neznamená, že by formáty SVG a VRML byly formáty špatné, jen se s nimi poněkud hůře pracuje a mají také jinou oblast využití.

3. Zápory tohoto grafického formátu

Vektorový grafický formát DXF však má i několik záporů, které částečně vychází z jeho stáří a na druhou stranu je v některých aspektech patrná velká vazba na program AutoCAD (proměnné, barvy, styly čar, bloky). Po dlouhou dobu byl omezen počet barev, kterými se ukládané grafické entity vytvářely. Také je složité specifikovat texturu povrchu u trojrozměrných těles, včetně dalších optických vlastností povrchu (průhlednost, index lomu, Phongův exponent). Z tohoto důvodu většina aplikací v tomto formátu ukládá pouze tvary těles a jejich barvy, tj. základní geometrické vlastnosti. Při práci s 2D výkresy však na tyto problémy prakticky nikdy nenarazíme, protože počet základních barev bývá dostačující a výrobci se již v kódování barev přizpůsobili AutoDesku, takže typický problém let minulých – zpřeházené barvy – se v současných aplikacích již neobjevuje.

Druhý zápor, na který můžeme narazit zejména při práci s rozsáhlými 2D výkresy i 3D modely, souvisí s objemnými soubory DXF. Je to způsobeno velkou režií při zápisu jednotlivých atributů, protože každému atributu (atributem je myšlena například barva, jedna souřadnice, číslo hladiny apod.) je přiřazen číselný kód uložený na samostatném řádku. Kód atributu a jeho hodnota tvoří takzvanou skupinu (group), tím se však budeme zabývat až v navazujících kapitolách. Jak uvidíme dále, i jednoduchá úsečka musí být zapsána minimálně na deseti textových řádcích, přičemž každý řádek zabere cca 6 bytů. Velký objem souborů má za následek pomalou práci programů provádějících jejich export či import. I to je jeden z důvodů, proč byla kromě textové varianty DXF navržena i mnohem menší binární varianta formátu nazvaná DXB (viz první kapitola).

4. Popis struktury textových souborů typu DXF

V následujících kapitolách se budeme zabývat pouze textovou variantou vektorového formátu DXF, binární variantu si popíšeme v některém dalším pokračování tohoto seriálu. Celý textový soubor popisující výkres je rozdělen do jedné až osmi oblastí či sekcí (sections), každá oblast začíná svým identifikátorem a končí značkou konce oblasti. To je velmi praktické, protože například program, který potřebuje ze souboru DXF vyčíst pouze informace o geometrii objektů se nemusí zdlouhavě zabývat například načítáním bloků nebo tabulek se styly – stačí pouze najít začátek oblasti s entitami a vlastní čtení začít až z tohoto místa.

Osobně jsem si v praktických programech, které musely načítat či ukládat informace do DXF, vystačil „pouze“ se sekcí ENTITIES (to bylo v dobách, kdy jsem neměl popis DXF k dispozici a musel jsem provádět analýzu vytvořených souborů), požadavky jiných aplikací však mohou být odlišné.

Některé sekce/oblasti jsou nepovinné, tj. nemusí být v souborech typu DXF vůbec uvedeny. To opět zjednodušuje práci, tentokrát programům, které provádí export dat do DXF. Například i program AutoCAD (původně výhradní generátor DXF) po příkazu DXFOUT může uložit pouze oblast s entitami a ukončující sekci. Nemělo by však být měněno pořadí oblastí, tj. oblast/sekce HEADER musí být v souboru umístěna jako první, po ní může následovat oblast TABLES atd. V tomto případě měli návrháři formátu opět na mysli jednodušší práci s formátem a také možnost načíst celý výkres sekvenčně bez dopředných odkazů (při vytváření bloků už máme načteny styly čar a výplní, při vykreslování entit už známe všechny bloky atd.).

V tabulce zobrazené níže jsou sepsána jména jednotlivých oblastí spolu s jejich významem. Podrobnější informace o obsahu jednotlivých oblastí si uvedeme v dalším pokračování tohoto seriálu:

Jméno oblasti Význam
HEADER hlavička s uloženými proměnnými, které popisují důležité informace o výkresu i konfiguraci programu, který soubor vytvářel
CLASSES informace o třídách vytvořených v CAD programu; tato sekce se objevila až v novějších verzích DXF.
TABLES různé tabulky: styly čar, styly výplní, textové styly, definice pohledů, nastavení kótování atd.
BLOCKS v této sekci jsou uloženy takzvané bloky, tj. entity sloučené pod jeden identifikátor
ENTITIES většinou jde o objemově nejobsáhlejší sekci, která obsahuje zápis jednotlivých grafických entit, včetně vkládání bloků do výkresu
OBJECTS informace o negrafických entitách, které se používají například při skriptování (AutoLISP atd.)
THUMBNAILIMAGE v této části (pokud je přítomna) je umístěn náhled na výkres; ten se například používá v dialogu pro načtení výkresu
EOF (END OF FILE) konec souboru, zde již nejsou umístěna žádná data

5. Skupiny a jejich číselné kódy

V jednotlivých oblastech jsou údaje zapisovány ve formě takzvaných skupin (groups). Skupinou není v kontextu DXF myšleno nic jiného než dvojice textových řádků. Na prvním z těchto řádků (globálně se jedná o lichý řádek) se nachází číselný kód skupiny (kladné celé číslo bez uvedení znaménka), na druhém řádku pak příslušná hodnota, která může mít různý formát – většinou celé číslo, reálné číslo (přesněji číslo uložené s pohyblivou řádovou čárkou) či řetězec. V původním DXF se počítalo pouze s třímístnými kódy, proto je také provedeno zarovnání těchto číselných údajů doprava na tři znaky (pro toto zarovnání se někdy používá pojmenování Fortran 13). Nověji se však také objevují kódy skupin větší než 1000; zde není žádné zarovnání provedeno a první cifra je umístěna na začátku řádku. Vazba mezi kódem skupiny a typem údajů uložených na dalším řádku, je vypsána v tabulce:

Rozsah kódu skupin Typ uložených údajů
0–9 řetězce
10–59 reálná čísla
60–79 celá čísla
140–147 reálná čísla
170–175 celá čísla
210–239 reálná čísla
999 řetězec (komentář)
1000–1009 řetězce
1010–1059 reálná čísla
1060–1079 celá čísla

6. Význam některých kódů skupin

V předchozí tabulce jsem si uvedli pouze vazbu mezi kódem skupiny a typem uložených údajů. Každý kód skupiny však má přesně specifikovaný význam. Ty nejčastěji používané kódy, které můžeme nalézt prakticky v jakémkoli souboru typu DXF, si vypíšeme v této kapitole. Způsob jejich konkrétního použití bude uveden v následující části tohoto seriálu, stejně jako kódy skupin ležící nad hodnotou 999.

  • Kód skupiny 0: tato skupina značí začátek definice grafické entity, hodnoty uložené v tabulce nebo se používá jako oddělovač jednotlivých sekcí. Po kódu entity následuje na druhém řádku její textový popis.
  • Kód skupiny 1: primární textová hodnota, která je entitě přiřazena.
  • Kód skupiny 2: jméno bloku, jméno atributu popř. další jednoznačně pojmenovaný textový údaj. Také se používá pro rozlišení názvů jednotlivých sekcí v souboru.
  • Kód skupiny 3: další textové informace přidružené k entitě.
  • Kód skupiny 4: další textové informace přidružené k entitě.
  • Kód skupiny 5: hexadecimální číslo entity, které by mělo být v rámci jednoho souboru jednoznačné. Některé programy (AutoCAD) vyžadují, aby se jednalo o rostoucí posloupnost.
  • Kód skupiny 6: jméno stylu čáry, kterou je entita vykreslena.
  • Kód skupiny 7: jméno stylu textu.
  • Kód skupiny 8: jméno hladiny, ve které entita leží.
  • Kód skupiny 9: jméno proměnné, tento údaj se používá v sekci hlavičky souboru DXF.
  • Kód skupiny 10: první x-ová souřadnice.
  • Kód skupiny 11: druhá x-ová souřadnice (12-třetí atd., až po 18). Pro některé entity je uvedena pouze první souřadnice.
  • Kód skupiny 20: první y-ová souřadnice.
  • Kód skupiny 21: druhá y-ová souřadnice (22-třetí atd., až po 28).
  • Kód skupiny 30: první z-ová souřadnice. U 2D výkresů je nulová.
  • Kód skupiny 31: druhá z-ová souřadnice (31-třetí atd., až po 38).
  • Kód skupiny 38: posun entity ve směru osy z (elevace), použito u původního AutoCADovského modelování 2,5D.
  • Kód skupiny 39: tloušťka (z-ová výška) entity. Použito opět u AutoCADovského modelování 2,5D, například pro tvorbu zdí.
  • Kód skupiny 49: v některých tabulkách (typy čar apod.) se mohou hodnoty opakovat. Každá opakující se skupina začíná kódem 49, před těmito skupinami musí být zadána skupina 7×, pomocí které se určí délka celé tabulky.
  • Kód skupiny 50–58: primární úhel a sekundární úhly.
  • Kód skupiny 62: číslo barvy, ta se většinou vybírá z palety AutoCADovských ba­rev.
  • Kód skupiny 67: specifikace, zda entita leží v prostoru modelu nebo prostoru výkresu (model space, paper space).
  • Kód skupiny 69: jednoznačná identifikace viewportu.
  • Kód skupiny 210: x-ová souřadnice směrového vektoru
  • Kód skupiny 220: y-ová souřadnice směrového vektoru
  • Kód skupiny 230: z-ová souřadnice směrového vektoru
  • Kód skupiny 999: jednořádkový textový komentář.

7. Ukázka prázdného validního souboru typu DXF

V následujícím výpisu je ukázáno, jak vypadá prázdný, ale stále validní soubor typu DXF. Jsou vidět hlavičky pěti hlavních sekcí, ukončení jednotlivých sekcí a ukončení celého souboru sekcí EOF. Všimněte si „párovosti“ skupin SECTION a ENDSEC.

  0
SECTION
  2
HEADER
  0
ENDSEC
  0
SECTION
  2
TABLES
  0
ENDSEC
  0
SECTION
  2
BLOCKS
  0
ENDSEC
  0
SECTION
  2
ENTITIES
  0
ENDSEC
  0
EOF 

ict ve školství 24

8. Odkazy na další informační zdroje

  1. Drawing Interchange and File Formats, AutoCAD Release 12
    Copyright © 1982–1990, 1992, Autodesk, Inc.
  2. AutoCAD Reference Manual
    Autodesk, Inc., 1995
  3. AutoCAD DXF (Wikipedia):
    http://en.wiki­pedia.org/wiki/Au­toCAD_DXF
  4. Open Design Aliance:
    http://www.open­design.com/
    (touto skupinou se budeme zabývat v některém z dalších pokračování seriálu)

9. Obsah dalšího pokračování tohoto seriálu

V následujícím pokračování tohoto seriálu si podrobněji popíšeme způsob zápisu jednotlivých grafických entit v textových souborech typu DXF. Zaměříme se především na entity používané pro reprezentaci plošných (2D) výkresů.

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.