Hlavní navigace

Vektorový grafický formát DXB a binární varianta DXF

19. 4. 2007
Doba čtení: 10 minut

Sdílet

Dnes si popíšeme binární variantu již popsaného vektorového formátu DXF. Zjednodušená binární varianta DXF se označuje zkratkou DXB, neboli Drawing Binary Interchange File Format, její modernější verze pak jako Binary DXF. Tento souborový formát je používán zejména z důvodu rychlejšího načítání a menšího objemu výsledného souboru.

Obsah

1. Vektorový grafický formát DXB
2. Struktura souboru uloženého ve formátu DXB
3. Hlavička souboru DXB
4. Datová část
5. Ukončovací znak
6. Záznamy uložené v datové části
7. Binární varianta DXF
8. Odkazy na další informační zdroje
9. Obsah dalšího pokračování tohoto seriálu

1. Vektorový grafický formát DXB

V perexu tohoto článku bylo napsáno, že vektorový grafický formát DXB (Drawing Binary Interchange File Format) je vlastně zjednodušenou binární variantou textového (ASCII) formátu DXF (Drawing Interchange File Format), který je založen na principu do sebe vložených a pojmenovaných skupin (groups). Oba tyto souborové grafické formáty byly navrženy firmou AutoDesk pro její program AutoCAD, AutoShade (dříve samostatný doplněk AutoCADu, dnes je jeho součástí), 3D Studio, 3D MAX atd. Proč však byly navrženy dva rozdílné souborové formáty, nestačil by pouze formát jediný?

DXF je vektorový formát určený zejména pro přenos obrazových dat mezi různými aplikacemi i platformami – jde o formát zcela nezávislý na operačním systému, použitém matematickém koprocesoru (resp. formátu čísel používaných matematickým koprocesorem), atd. Ve své podstatě se jedná o strukturovaný textový soubor, který je v mnoha ohledech podobný například dnes všude nasazovanému obecnému formátu XML: vlastní informace o grafických entitách jsou syntakticky i sémanticky „obaleny“ značkami, které zde mají podobu skupin a sekcí (DXF je rozděleno do sekcí, ve kterých jsou uloženy další informace rozdělené do skupin, obalující skupinou je většinou skupina číslo 0).

Formát DXF se skutečně značně rozšířil, zejména mezi programy typu CAD, CAM a dokonce i mezi některými systémy DTP a vektorovými grafickými editory (importní filtr pro DXF obsahují dokonce i Microsoft Office). Vzhledem ke způsobu uložení informací v těchto souborech je však práce s DXF (ale i s výše zmíněným XML, resp. některými jeho aplikacemi) pomalá a samotné soubory jsou objemné, což poněkud omezuje jejich nasazení například na Internetu. Na „síti sítí“ se v oblasti vektorových výkresů více prosazuje úsporný formát DWF a v některých případech i velmi povedený SVG (Scalable Vector Graphics, založený na XML).

Z důvodu urychlení exportů a importů vektorových dat a snížení celkové velikosti souborů firma AutoDesk navrhla úspornou variantu přenositelného souborového formátu, který již není textově orientovaný. Také způsob uložení obrazových dat do DXB je v mnoha ohledech zjednodušen, což znamená, že se v DXB nemohou ukládat všechny informace o výkresech; na druhou stranu je však práce s DXB jednodušší, než s DXF. Zajímavé je, že AutoCADy neobsahují zvláštní příkaz pro tvorbu těchto souborů, což se obchází tiskem do virtuálního plotteru (Správce plotterů → Přidat plotter → DXB soubor AutoCADu → Model DXB soubor → OK).

2. Struktura souboru uloženého ve formátu DXB

Soubor typu DXB je rozdělen do tří částí. První část je představována jednoduchou hlavičkou, která slouží k identifikaci souboru i v případě, že by byla porušena koncovka ve jméně souboru, například při přenosu po síti bez odpovídajícího MIME typu. Ihned za hlavičkou se nachází datová část, ve které jsou uloženy nejpodstatnější informace o všech grafických entitách (mnohé informace však zde uloženy být nemohou, proto je praktické použití DXB poněkud omezeno). Je jasné, že datová část je nejobjemnější. Poslední část souboru typu DXB je velmi jednoduchá, protože sestává z jednoho znaku NUL, který celý soubor ukončuje.

Celá struktura bude popsána v následujících čtyřech kapitolách. Hlavička souboru uloženého ve formátu DXB bude popsána ve třetí kapitole, datová část ve čtvrté kapitole a ukončovací znak v kapitole páté. V šesté kapitole si podrobněji popíšeme, jakým způsobem jsou v datové části souboru DXB uloženy informace o jednotlivých grafických entitách. Kapitola sedmá se již nezabývá soubory typu DXB, ale takzvanými „binárními DXF“, což je obdoba textových (ASCII) DXF souborů, ve kterých jsou některé informace uloženy v binárním tvaru, což vede k redukci celkové velikosti a také ke snazšímu a rychlejšímu načítání.

3. Hlavička souboru DXB

Hlavička souboru typu DXB je z programátorského hlediska velmi jednoduchá. Její délka je vždy rovna devatenácti bytům, které jsou rozděleny do čtyř oblastí. Prvních patnáct bytů obsahuje ASCII řetězec s obsahem „AutoCAD DXB 1.0“ (pozor: nejedná se o céčkovský řetězec, protože není přítomna ukončovací nula, ta se nachází až v další části hlavičky, což může způsobovat problémy například při porovnávání řetězce s konstantou pomocí strcmp()). Navazující oblast je představována dvěma byty, které obsahují řídicí znaky CR (ASCII kód 0×0d) a LF (ASCII kód 0×0a). Třetí oblast je tvořena znakem Ctrl+Z a poslední oblast znakem s hodnotou NUL (ASCII kód 0×00).

Význam prvních tří oblastí spočívá v tom, že pokud se obsah souboru vypíše v MS-DOSu či na konzoli MS-Windows příkazem type (jednodušší obdoba cat), zobrazí se pouze úvodní patnáctiznakový řetězec, který je odřádkovaný (CR+LF), a ihned poté je výpis zastaven, protože znak Ctrl+Z v MS-DOSu i MS-Windows znamená ukončení vstupu (v Unixech je to pro změnu znak Ctrl+D). Poslední znak s hodnotou NUL slouží k oddělení hlavičky od následující sekce – datové části. Tento znak také slouží pro ukončení řetězce v programovacím jazyku C, ale i v některých funkcích MS-DOSu (tam se podobné řetězce nazývají ASCIIZ).

4. Datová část

Datová část představuje v naprosté většině případů nejobjemnější díl celého souboru typu DXB. V této části jsou uloženy všechny informace o entitách, které se ve výkrese či 3D modelu nachází. Celá datová část je rozdělena do takzvaných záznamů (records), které mají variabilní délku podle toho, jaké informace nesou – většinou se jedná o číselnou informaci, přičemž číselná hodnota může být uložena několika možnými způsoby a na různý počet bitů. Jeden typ záznamu také slouží pro registraci názvu nové hladiny, hodnotou tohoto záznamu je tedy jméno hladiny představované céčkovým řetězcem (tj. řetězcem ukončeným znakem NUL).

Každý záznam začíná úvodním bytem, ve kterém je zakódován typ záznamu. Po tomto bytu ihned následuje vlastní hodnota či sekvence hodnot – vše uložené v binárním formátu, jehož princip bude vysvětlen v šesté kapitole. Vzhledem k tomu, že se v DXB souborech nenachází žádné oddělovače, musí každá aplikace znát délky všech typů záznamů, aby správně prováděla synchronizaci. U souborů typu DXF byla situace jednodušší, protože bylo možné neznámé či nezajímavé skupiny prostě přeskočit (to jsme si také ukázali v demonstračních příkladech, ve kterých se z načítaných DXF souborů vybíraly pouze relevantní informace).

5. Ukončovací znak

Nejjednodušší částí DXF souboru je jeho ukončovací znak. Jedná se o jediný byte s hodnotou 0×00. Slouží především ke kontrole, zda byly všechny záznamy korektně načteny, tj. zda není soubor poškozen (CRC ani podobnou kontrolní technologii totiž DXB neobsahuje). Pokud by například došlo k poškození některého úvodního bytu záznamu, došlo by ke ztrátě synchronizace (DXB neobsahují žádné značky konce záznamů), a od tohoto místa by se všechny další informace načetly nekorektně. Proto je vhodné testovat, zda po načtení všech záznamů v souboru opravdu zůstane pouze jeden byte a zda má tento byte hodnotu 0×00.

6. Záznamy uložené v datové části

V předchozích kapitolách jsme si řekli, že datová část je rozdělena do takzvaných záznamů (records). Záznam většinou představuje informaci o jedné grafické entitě nebo jiném důležitém objektu (například o hladině). V každém záznamu bývá (podle typu entity) uloženo několik číselných hodnot, které mohou být reprezentovány v různém formátu a na různém počtu bitů. V následující tabulce jsou uvedeny jednopísmenné zkratky (prefixy) jednotlivých numerických formátů spolu s krátkým popisem daného formátu. Tyto zkratky, které jsou mimochodem použity i v originální dokumentaci AutoDesku, použijeme při popisu jednotlivých typů záznamů:

Prefix Popis numerického formátu
w 16bitové celé číslo v pořadí procesorů Intelu (little-endian)
l 32bitové celé číslo v pořadí procesorů Intelu (little-endian)
f číslo v pohyblivé řádové čárce podle IEEE uložené na 32bitech v uspořádání little-endian
n variabilní 16bitové číslo, variabilnost je dána nastavením číselného režimu:
0–šestnáctibitová celá čísla (integer)
1–šestnáctibitová čísla uložená v pevné řádové čárce
u variabilní 16bitové číslo, variabilnost je dána nastavením číselného režimu:
0–32bitová celá čísla vynásobená o 216 (po vydělení dostaneme racionální číslo)
1–32bitová čísla typu float
a úhel reprezentovaný 32bitovým číslem udávajícím miliontiny stupně

Vidíme, že některé formáty mohou mít dva významy podle nastavení číselného režimu. Ten se mění pomocí záznamu uloženého v datové oblasti, což si ukážeme v dalším textu. V následující tabulce je uveden výpis všech entit i dalších typů záznamů (definice hladin apod.), které se mohou v souborech typu DXB vyskytovat. Typ záznamu (resp. číslo typu) je uložen na jednom bytu, po němž následují další číselné či textové údaje. Formát těchto údajů je uvozen prefixem vypsaným v předchozí tabulce, to znamená, že například uvedení písmene w značí, že daná číselná hodnota je uložena na dvou bytech a představuje celé číslo v uspořádání little-endian:

Číslo typu záznamu Délka (byty) Typ záznamu
1 13 úsečka
2 5 bod
3 7 kružnice
8 19 oblouk
9 17 stopa
11 17 deska
17 1 konex polyčáry
19 3 začátek polyčáry
20 5 vrchol polyčáry
22 25 3D ploška
128 9 změna násobitele při převodu int→float (nastaveno na 1.0)
129 řetězec+2 definice hladiny
130 5 navazující úsečka (na poslední zadaný vrchol)
131 9 navazující stopa (na poslední dva zadané vrcholy)
132 5 blok
133 5 vyboulení oblouku na polyčáře
134 5 změna šířky kresby
135 3 změna číselného režimu (integer/float), uloženo typem „w“
136 3 změna barvy vykreslování podle barvové palety AutoCADu
Typ záznamu Datové položky
úsečka n-fromx
n-fromy
n-fromz
n-tox
n-toy
n-toz
bod n-x
n-y
kružnice n-centerx
n-centery
n-průmer
oblouk n-centerx
n-centery
n-průmer
a-počáteční úhel
a-koncový úhel
stopa n-x1
n-y1
n-x2
n-y2
n-x3
n-y3
n-x4
n-y4
deska n-x1
n-y1
n-x2
n-y2
n-x3
n-y3
n-x4
n-y4
konex polyčáry nic
začátek polyčáry w-příznak uzavřenosti
vrchol polyčáry n-x
n-y
3D ploška n-x1
n-y1
n-z1
n-x2
n-y2
n-z2
n-x3
n-y3
n-z3
n-x4
n-y4
n-z4
změna násobitele při převodu int→float f-násobitel
definice hladiny jméno hladiny a ukončující 0
navazující úsečka n-tox
n-toy
navazující stopa n-x3 (první navazující vrchol)
n-y3
n-x4(druhý navazující vrchol)
n-y4
blok n-bx
n-by
vyboulení oblouku na polyčáře u-poměr 2h/d (kruhový oblouk, lze zadat i nulové
vyboulení=úsečka, 1 značí polokružnici)
změna šířky n-počáteční šířka
n-koncová šířka

7. Binární varianta DXF

Firma AutoDesk zavedla i binární variantu souborů typu DXF. Ve skutečnosti se jedná o jakýsi hybrid mezi čistě textovým formátem DXF a čistě binárním formátem DXB. V těchto souborech, které je možné rozpoznat podle hlavičky obsahující řetězec „AutoCAD Binary DXF“, se nachází stejné informace, jako v souborech typu DXF, tj. hodnoty jednotlivých proměnných AutoCADu, plné geometrické informace o uložených entitách, tabulky stylů, hladin apod. Na rozdíl od textových DXF jsou však číselné informace uloženy nativně ve formátu IEEE a jednotlivé skupiny nejsou odděleny ukončovačem řádku (CR+LF).

Z těchto důvodů je načítání či naopak ukládání binárních DXF zhruba dvakrát rychlejší, než obdobné činnosti prováděné s textovými DXF. Také velikost binárních DXF je v porovnání s textovou variantou průměrně poloviční, zde ovšem do značné míry záleží na celkovém počtu entit, které se nachází ve výkrese. U velmi malých výkresů není rozdíl ve velikosti souborů patrný (je to způsobeno především uloženými proměnnými AutoCADu, jejichž názvy jsou stále textové), avšak u větších výkresů, ve kterých je počet entit roven několika stům, se dostáváme zhruba na poměr velikostí 1:2.

CS24_early

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

  1. Aaron A. Collins:
    AutoCAD DXF file to DKB Data File Converter,
    version 1.0
  2. Autodesk, Inc.:
    AutoLISP Release 9, Programmer's re­ference,
    Autodesk Ltd., Oct. 1987
  3. Autodesk, Inc.:
    AutoLISP Release 10, Programmer's re­ference,
    Autodesk Ltd., Sept. 1988
  4. Autodesk, Inc.:
    Drawing Interchange and File Formats, AutoCAD Release 12
    Copyright © 1982–1990, 1992, Autodesk, Inc.
  5. Autodesk, Inc.:
    AutoCAD Reference Manual
    Autodesk, Inc., 1995
  6. Autodesk, Inc.:
    AutoCAD 2006 – Elektronická nápověda
    Autodesk, Inc.
  7. Autodesk, Inc.:
    http://www.au­todesk.com/techpub­s/autocad/aca­dr14/dxf/the_dxb_fi­le_format_al_u05_b­.htm
  8. AutoCAD DXF (Wikipedia):
    http://en.wiki­pedia.org/wiki/Au­toCAD_DXF
  9. Endianess (Wikipedia):
    http://en.wiki­pedia.org/wiki/En­dianness

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

V následujícím pokračování tohoto seriálu si popíšeme další vektorový formát používaný především v programech typu CAD. Jedná se o velmi jednoduchý a snadno zpracovatelný binární formát nazvaný SLD (Slide), který se v některých CAD programech i vektorových grafických editorech používá pro ukládání vektorových obrázků složených z úseček, oblouků a polyčar. Původně byl tento formát určen pro tvorbu „snímků“ obrazovek (odtud ostatně pochází i jeho název), postupem času se však oblast jeho použití rozšířila: v minulosti byl dokonce používán pro uložení vektorových ikon v programu AutoCAD (dnes se vektorové ikony s velkou slávou vrací na desktopy, i když se v žádném případě nejedná o žádnou žhavou novinku).

Byl pro vás článek přínosný?

Autor článku

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