Informace uložené v souborech typu DXF

29. 3. 2007
Doba čtení: 11 minut

Sdílet

V dnešním článku o grafických formátech si podrobněji vysvětlíme způsob rozdělení souborů typu DXF do jednotlivých sekcí. Také si řekneme, které grafické entity je možné použít v dvourozměrných výkresech i prostorových (trojrozměrných) modelech uložených do tohoto vektorového souborového formátu.

Obsah

1. Informace uložené v souborech typu DXF
2. Obsah sekce HEADER
3. Význam některých proměnných uložených v sekci HEADER
4. Obsah sekce TABLES
5. Obsah sekce ENTITIES
6. Typy podporovaných grafických entit určených převážně pro 2D výkresy
7. Grafické entity použité v trojrozměrných modelech
8. Odkazy na další informační zdroje
9. Obsah dalšího pokračování tohoto seriálu

1. Informace uložené v souborech typu DXF

V předchozí části tohoto seriálu jsme si řekli, že informace jsou ve vektorovém grafickém formátu DXF (Drawing Interchange File Format) rozděleny do několika oblastí či sekcí (sections). Každá oblast začíná svou jednoznačnou identifikací a končí značkou konce oblasti (tato značka je pro všechny oblasti shodná). Soubory DXF mohou obsahovat až osm oblastí, které jsou nazvané HEADER, CLASSES, TABLES, BLOCKS, ENTITIES, OBJECTS, THUMBNAILIMAGE a EOF.

Oblasti se v DXF souborech musí nacházet v uvedené posloupnosti, tj. první je oblast HEADER, za ní může následovat oblast CLASSES atd. To zjednodušuje práci při načítání výkresů, protože informace uložené v oblasti entit se mohou odkazovat do již načtených a náležitě zpracovaných informací uložených v sekci bloků, přitom mohou být použity styly definované v oblasti tabulek atd. Dnes si popíšeme informační obsah oblastí HEADER, TABLES a částečně i nejobsáhlejší oblasti ENTITIES.

2. Obsah sekce HEADER

V sekci nazvané příznačně HEADER jsou uloženy proměnné, jejichž hodnoty reprezentují důležité informace o výkresu a/nebo konfiguraci programu, který daný výkres vytvořil či naposledy editoval. Uživatelům programu AutoCAD budou jména většiny proměnných známá, neboť se jedná o jména použitá při nastavování právě tohoto programu (ve starších verzích většinou přes příkazový řádek, novější verze již pro mnoho nastavení mají zvláštní konfigurační dialogy). Ostatní aplikace typu CAD pracující s DXF se snaží – pokud tedy sekci HEADER smysluplně používají – ukládat svou konfiguraci do proměnných tak, aby byly v co největší míře konzistentní s AutoCADem. Jak uvidíme dále, je přímo pro speciální potřeby těchto aplikací vyhrazeno deset uživatelských proměnných – pět proměnných pro uložení celých čísel a pět proměnných pro uložení čísel reálných.

Podle existence či naopak absence některých proměnných uložených v této sekci je možné zjistit, jaký program daný DXF soubor vytvářel. Celkový počet proměnných, které se mohou v sekci HEADER objevit, je několik desítek, v následující tabulce jsou vypsány ty nejdůležitější, které je možné využít i mimo CAD programy. Číslo typu odpovídá tabulce uvedené v předchozí části tohoto seriálu. Pro připomenutí: 0–9 jsou řetězce, 10–59 reálná čísla (10, 20 a 30 představují například souřadnice x, y, z), 60–79 celá čísla, 140–147 opět reálná čísla, 170–179 celá čísla a konečně 210–239 je další skupina reálných čísel. Význam některých proměnných uvedených v tabulce bude vysvětlen v dalším textu.

Proměnná Typ Význam proměnné
$ACADVER 1 verze AutoCADu
$ANGBASE 70 orientace úhlů (0-ve směru hodinových ručiček, 1-proti směru hodinových ručiček)
$AUNITS 70 formát jednotek při specifikaci úhlů
$AUPREC 70 přesnost při specifikaci úhlů
$CECOLOR 62 počáteční barva entit (0-podle bloku, 256-podle hladiny)
$CELTYPE 6 počáteční typ čáry entit (0-podle bloku, 256-podle hladiny)
$DIM* různé několik desítek proměnných, které určují styl kótování, většina programů má s AutoCADovskými kótami problémy
$DWGCODEPAGE 70 kódová stránka (proměnná je naplněna při vytváření výkresu)
$CHAMFERA 40 první vzdálenost pro zkosení rohů (příkaz chamfer)
$CHAMFERB 40 druhá vzdálenost pro zkosení rohů
$FILLETRAD 40 poloměr pro zaoblení rohů (příkaz fillet)
$HANDLING 70 povolení či zakázání použití číselných identifikací entit
$HANDSEED 5 číslo prvního nepoužitého identifikačního čísla
$EXTMIN 10, 20, 30 levý dolní roh výkresu, souřadnice x, y, z
$EXTMAX 10, 20, 30 pravý horní roh výkresu, souřadnice x, y, z
$LIMMIN 10, 20, 30 levý dolní roh hranice výkresu, souřadnice x, y, z
$LIMMAX 10, 20, 30 pravý horní roh hranice výkresu, souřadnice x, y, z
$LTSCALE 40 globální měřítko při vykreslování stylů úseček (čárkovaná, čerchovaná atd.)
$PDMODE 70 styl vykreslování bodů
$PDSIZE 40 velikost vykreslovaných bodů
$PEXTMIN 10, 20, 30 levý dolní roh výkresu v prostoru papíru (paper space), souřadnice x, y, z
$PEXTMAX 10, 20, 30 pravý horní roh výkresu v prostoru papíru (paper space), souřadnice x, y, z
$PLINMIN 10, 20 limitní hodnoty souřadnic v prostoru papíru
$PLINMAX 10, 20 limitní hodnoty souřadnic v prostoru papíru
$PUCSORG 10, 20, 30 počátek aktivního prostoru papíru (paper space) v globálním prostoru
$PUCSXDIR 10, 20, 30 vektor x-ové osy aktivního prostoru papíru
$PUCSYDIR 10, 20, 30 vektor y-ové osy aktivního prostoru papíru
$UCSNAME 2 jméno aktivního uživatelského souřadného systému
$UCSORG 10, 20, 30 počátek aktivního uživatelského souřadného systému v globálním prostoru
$UCSXDIR 10, 20, 30 vektor x-ové osy aktivního uživatelského souřadného systému
$UCSYDIR 10, 20, 30 vektor y-ové osy aktivního uživatelského souřadného systému
$USERI1 – 5 70 pět celočíselných proměnných, které jsou určeny pro další aplikace či rozšíření AutoCADu
$USERR1 – 5 40 pět reálných proměnných se stejným významem jako proměnné $USERI1 – 5

3. Význam některých proměnných uložených v sekci HEADER

Při zápisu výkresu ve formátu DXF určeného pro AutoCAD je důležité především správné nastavení proměnných $HANDLING a $HANDSEED. V AutoCADu je totiž každé grafické entitě jednoznačně přiřazena číselná hodnota, která je v souborech typu DXF zapsána ve skupině 5. Tato hodnota je použita jako klíč v interní databázi grafických entit. Pokud programy generující soubory DXF entity žádným způsobem nečíslují, musí se buď proměnná $HANDLING nastavit na nulu, nebo naopak musí být každé entitě jednoznačné číslo přiřazeno, například jednoduchým čítačem (spolu s nastavením proměnné $HANDSEED na nejvyšší hodnotu čítače. Zatímco starší AutoCADy (verze 12, 14, 12 LT) načetly i soubory se špatně nastavenými čísly entit (více entit se stejným číslem apod.), nové verze již takové soubory nenačtou a při importu DXF nahlásí chybu (místo aby chybnou entitu přeskočily).

Další proměnné, které mohou mít při importech či exportech význam, jsou proměnné pro nastavení hranice výkresu ($LIMMIN, $LIMMAX) a levého dolního, popř. pravého horního rohu výkresu ($EXTMIN, $EXTMAX). Všechny tyto údaje jsou zadány trojicí souřadnic x, y, z ve světovém prostoru (WCS–World Coordinates System). V AutoCADu (a vlastně každém vyspělejším CADu) se totiž nemusí pracovat pouze ve světovém prostoru, ale je možné nadefinovat si prostory vlastní (uživatelské), takzvané UCS–User Coordinates Systems. Každý takový prostor je zadán svým počátkem a vektorem x-ové osy a y-ové osy. Vektor třetí osy není potřeba specifikovat, protože uživatelské souřadné systémy jsou ortogonální, tj. třetí vektor se vypočítá vektorovým součinem dvou zadaných vektorů. V hlavičce DXF jsou uvedeny informace o aktuálním, tj. právě nastaveném uživatelském souřadném systému; jedná se o proměnné $UCSNAME, $UCSORG, $UCSXDIR a $UCSYDIR.

Zvláště při prohlížení výkresů uložených v DXF je dobré brát v úvahu obsah proměnných $LTSCALE, $PDMODE a $PDSIZE. Těmito proměnnými se nastavuje způsob vykreslování bodů (jedná se o jednu ze základních grafických entit) a také stylů čar. Každé čáře, ale i polyčáře, kružnici či oblouku, může být přiřazen jeden ze stylů vykreslování, například čára plná (implicitní hodnota), čára čárkovaná, čerchovaná, tečkovaná apod. Konkrétní styly jsou uloženy v sekci TABLES. Při prohlížení výkresu je však podstatné měřítko stylu vykreslování. To může být vázané buď přímo na výkres (např. mezera mezi tečkami je ve výkrese vždy dlouhá 10 mm bez ohledu na způsob zobrazení) nebo na konkrétní pohled/zoom (mezera mezi tečkami je dlouhá 10 pixelů). V případě, že některé entitě není přiřazena žádná barva či typ čáry, je vhodné brát v úvahu hodnotu proměnných $CECOLOR a $CELTYPE. Tyto údaje však bývají entitám prakticky vždy přiřazené (snad až na poškozené soubory DXF), stejně jako hladina, ve které se entity nachází.

Při vykreslování výkresu v takzvaném prostoru papíru (Paper Space – v AutoCADu se do tohoto prostoru přepíná pomocí „ouška“ nazvaného implicitně Model) se uplatní hodnota proměnných $PEXTMIN, $PEXTMAX, $PLINMIN a $PLINMAX. Kromě toho je potřebné znát orientaci prostoru papíru zadaného ve světových souřadnicích; tyto údaje jsou uloženy v proměnných $PUCSORG, $PUCSXDIR a $PUCSYDIR. Tyto proměnné mají podobný význam, jako podobně pojmenované proměnné uživatelského souřadného systému (UCS). Profesionální prohlížečky DXF se chovají podobně jako AutoCAD, tj. dokážou jednoduše přepínat mezi výkresovým prostorem a prostorem papíru. Při načítání výkresů obsahujících delší text je vhodné načíst hodnotu proměnné $DWGCODEPAGE, která by měla obsahovat kódovou stránku. V mnoha případech se však setkáme se soubory, ve kterých není tato proměnná vyplněna a pak nezbývá než experimentovat s nejčastěji používanými kódovými stránkami.

4. Obsah sekce TABLES

V sekci nazvané TABLES jsou uloženy různé tabulky, tj. informace, které není možné popsat jednoduchým vztahem proměnná=hodnota. Každá tabulka začíná skupinou s číslem 0 a hodnotou TABLE. Ihned po tomto záznamu se nachází skupina s číslem 2 a hodnotou odvozenou od názvu tabulky, například LTYPE, LAYER, UCS atd. Celkový počet záznamů v dané tabulce je zapsán ve skupině s číslem 70 (toto číslo však může být v některých případech větší než skutečný počet záznamů, například v případě, že je nějaký typ čáry vymazán, ale v interní databázi pořád uschován).

Každý záznam v tabulce začíná skupinou 0 s hodnotou odpovídající názvu tabulky, po níž následuje skupina 2, jejíž hodnotou je jméno záznamu (třeba jméno hladiny či textového stylu). To, že se stejný název tabulky objevuje ve dvou skupinách (2-začátek celé tabulky a 0-jeden záznam v tabulce) může být při čtení obsahu souboru člověkem matoucí, ale při programové implementaci většinou nedochází k problémům. Tabulek může existovat velké množství, my si zde vypíšeme ty nejčastější tabulky, se kterými se setkáme ve velkém množství souborů DXF.

Tabulka Význam
LTYPE tabulka obsahující styly (typy) úseček, každý záznam obsahuje několik skupin číslo 49
LAYER tabulka s definicemi hladin (jméno, barva, typ čáry, zamknutí, viditelnost apod.)
APPID doplňkové informace o registrovaných aplikacích k danému výkresu
DIMSTYLE styly kótování, pravděpodobně nejsložitější informace v souborech DXF
UCS záznamy o uživatelských souřadných systémech
VIEW záznamy o pohledu na výkres
VPORT pohledové transformace, včetně nastavení parametrů kamery (perspektiva, natočení), mřížky (grid), ikony UCS apod.
STYLE styl textu (výška, poměr šířka/výška, font, zrcadlení)

5. Obsah sekce ENTITIES

V sekci ENTITIES jsou uloženy informace o grafických entitách, tj. geometricky popsaných objektech, které se v plošném výkresu či trojrozměrném modelu nachází. Existuje několik typů entit, od jednoduchých bodů přes úsečky, polyčáry a kružnice až po trojrozměrné objekty typu parametrická plocha. Kromě přímého uvedení jednotlivých entit se v této sekci nachází i pseudoentity INSERT, což je vlastně příkaz pro vložení celého bloku složeného z více entit na určené místo ve výkrese. K blokům mohou být přiřazeny atributy, například textové (tvorba „razítek“) či odkazy do databáze (automatické doplnění dalších údajů například z kódovníku). V následující kapitole budou uvedeny entity, které se většinou nachází v plošných výkresech, v kapitole sedmé pak entity určené spíše pro popis trojrozměrných modelů.

6. Typy podporovaných grafických entit určených převážně pro 2D výkresy

Mnoho typů grafických entit, které se mohou v souborech typu DXF vyskytovat, je určeno především pro tvorbu klasických 2D výkresů. Souvisí to jak se zavedenou praxí (3D výkresy se používají méně často, než by mohlo být na první pohled – například na „efektní“ obrázky v reklamách na CADy – patrné), tak i s historií tohoto formátu, který byl od své první varianty určen především pro potřeby komunikace s AutoCADem, jenž v prvních verzích s trojrozměrnými modely pracovat nedokázal. Další verze AutoCADu nejprve přinesly možnost tvorby 2,5D výkresů, kde se mohla vybraným entitám přiřadit výška a vzdálenost od plochy Z (+ změnit souřadný systém, takzvaný UCS), přes tvorbu parametických 3D ploch až po plnohodnotného objemového modeláře. Mezi grafické entity, které se používají především v plošných (2D) výkresech, patří především:

Jméno entity Význam
POINT bod, jehož značka může být natočena různým směrem
LINE úsečka zadaná dvojicí bodů
POLYLINE polyčára složená z úseček, oblouků nebo pomocí spline
CIRCLE kružnice zadaná středem a poloměrem
ARC kruhový oblouk zadaný středem, poloměrem a dvojicí úhlů
TEXT textový řetězec zadaný bodem vložení, rotací, výškou a dalšími atributy
SHAPE značka (obdoba bloku) zadaná středem, velikostí, úhlem natočení a jménem značky
INSERT blok složený z jedné i více entit sdružených pod jedním jménem
TRACE „stopa“, což je vlastně úsečka s nenulovou tloušťkou

7. Grafické entity použité v trojrozměrných modelech

S rostoucími možnostmi AutoCADu ohledně prostorového modelování se postupně rozrůstaly i grafické entity, které se v těchto výkresech používají. Základní „3D entitou“ je obyčejná úsečka (LINE), kterou je možné použít pro tvorbu drátových modelů (wireframe), tj. modelů neobsahujících plochy, ale pouze hrany a vrcholy. Tím ale možnosti úsečky nekončí – v některých případech se 3D úsečka používá jako pomocný konstrukční prvek (posléze neviditelný), na jehož koncové body se navazují například koncové body ploch, jejich řídicí body apod. Neviditelnost je v CAD systémech možné zabezpečit velmi jednoduše: příslušná hladina s pomocnými entitami se prostě vypne, takže se v modelu žádná z těchto entit neobjeví.

Plnohodnotné trojrozměrné povrchy je možné skládat z entity typu 3DFACE, což není nic jiného než trojúhelníková či čtyřúhelníková ploška. Pomocí této entity lze v DXF souborech mezi různými programy přenášet prakticky libovolný tvar rozložený většinou na trojúhelníky (čtyřúhelníkové plošky jsou v praxi méně časté). Vážnou nevýhodou rozložení původního povrchu na trojúhelníky zůstávají značně objemné DXF soubory. Podobný význam jako 3DFACE má entita SOLID, tj. deska určená buď třemi body (trojúhelník) nebo body čtyřmi. Další podporovanou 3D entitou je varianta entity POLYLINE, pomocí které se vytváří plochy, například B-spline plochy či Bézierovy plochy. Rozhodnutí, zda je touto entitou popsána polyčára či 3D plocha je provedeno na základě příznaků (flags) uložených ve skupině 70 (implicitní hodnota je 0, tj. polyčára).

Jméno entity Význam
3DFACE ploška určená třemi body (trojúhelník) nebo body čtyřmi
SOLID podobné entitě 3DFACE, většina programů tuto entitu negeneruje
POLYLINE entita použitá při popisu 3D ploch, například Bézierových ploch či B-spline ploch
INSERT blok složený z jedné i více entit se často používá i v 3D výkresech, může sloužit k hierarchickému popisu scény

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/

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

V následují části seriálu o grafických formátech si ukážeme, jakým způsobem je možné vytvořit aplikace, které budou vytvářet soubory typu DXF či je naopak budou načítat a zobrazovat jejich obsah.

Autor článku

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