Hlavní navigace

Vektorový grafický formát SLD (Slide)

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

Sdílet

V dnešním článku bude popsán další vektorový souborový formát používaný především v programech typu CAD. Jedná se o velmi jednoduchý a přitom snadno zpracovatelný formát nazvaný SLD (Slide), který - podobně jako dříve popsané formáty DXF a DXB - navrhla firma AutoDesk pro svůj světoznámý produkt AutoCAD.

Obsah

1. Vektorový grafický formát SLD (Slide)
2. Přednosti a zápory formátu SLD
3. Interní struktura souborů typu SLD
4. Hlavička souboru
5. Jednotlivé typy záznamů a jejich formát
6. Formát knihovny snímků (Slide Library)
7. Demonstrační příklad pro načtení a zobrazení souborů typu SLD
8. Odkazy na další informační zdroje
9. Obsah dalšího pokračování tohoto seriálu

1. Vektorový grafický formát SLD (Slide)

V dnešním pokračování seriálu o grafických formátech si popíšeme další vektorový formát používaný především v programech typu CAD/CAM a také některých starších operačních systémech s grafickým uživatelským rozhraním. Jedná se o velmi jednoduchý a snadno zpracovatelný binární formát nazvaný SLD (Slide), který se v některých CAD/CAM programech i vektorových grafických editorech používá pro ukládání vektorových obrázků složených především z úseček, oblouků a polyčar (popř. i vyplněných mnohoúhelníků). 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 při vytváření programovatelných a konfigurovatelných uživatelských dialogů (dnes se vektorové ikony s velkou slávou na desktopy vrací, i když se v žádném případě nejedná o žádnou žhavou novinku).

37_1
Obrázek 1: Soubor typu SLD zobrazený v demonstračním příkladu

2. Přednosti a zápory formátu SLD

Pravděpodobně největší předností formátu SLD je jeho jednoduchost. V tomto formátu je totiž možné ukládat pouze příkazy pro vykreslování vektorů (úseček), mnohoúhelníkové výplně a změny barvy. Všechny ostatní grafické entity, tj. kružnice, elipsy, oblouky, spline křivky či texty, se před uložením do SLD rozloží na lomené čáry (polyčáry) a ty jsou posléze zakódovány do sekvence vektorů. Na jednu stranu tak dochází ke značné ztrátě informace (ne nepodobné rasterizaci výkresu do bitmapy), ale to není v mnoha případech podstatné, protože SLD se používá především pro uložení snímků obrazovky, takže tyto snímky už nemusí být dále zpracovávány (samozřejmě kromě jejich následného zobrazení či tisku). Díky rozložení složitých entit na jednotlivé vektory se při zobrazování nemusíme zabývat například způsobem vykreslování textů, oblouků či spline křivek – úsečky jsou podporované v prakticky všech grafických knihovnách, takže jediný problém může nastat ve špatně orientovaném souřadném systému.

Další předností SLD je to, že informace o koncových bodech vektorů mohou být uloženy v poměrně kompaktní podobě. Každá souřadnice je zde představována šestnáctibitovým celým číslem (jedná se o snímek obrazovky, kde se nachází pixely na celočíselných souřadnicích), pokud se však nějaký vektor nachází v dostatečné blízkosti vektoru jiného, je možné jeho souřadnice zapsat formou offsetu, tj. osmibitových relativních souřadnic. Zejména starší AutoCADy tuto možnost často využívaly, což vedlo k tvorbě velmi malých souborů se snímky (relativní vektor je možné zapsat do pěti bytů, absolutní do bytů osmi). Samozřejmě se nejedná o nijak zázračnou komprimaci (osobně bych volil adaptivní bitovou délku souřadnic či přímé ukládání adres koncových bodů vektorů), ale při vhodném setřídění vektorů tak, aby tvořily na sebe navazující sekvence, mohou být jednotlivé snímky opravdu velmi krátké, což se může využít při jejich následném ukládání do knihovny snímků (Slide Library).

Nevýhody tohoto formátu opět souvisí s jeho primárním určením: všechny složitější entity se před zápisem rozpadnou na jednotlivé vektory (ztráta informace), souřadnice vektorů jsou pouze celá čísla (nastávají možné problémy se zvětšováním či zmenšováním, i když minimálně) a k tomu z historických důvodů existují dvě podoby formátu – jeden pro procesory s architekturou big-endian a druhý pro procesory little-endian. To poněkud komplikuje práci se snímky, protože korektní prohlížecí program by měl umět zobrazit i snímky vzniklé na architektuře s opačným endianem (náš demonstrační příklad z tohoto pohledu korektní nebude).

37_2
Obrázek 2: Další snímek zobrazený v demonstračním příkladu

3. Interní struktura souborů typu SLD

Soubory typu SLD jsou rozděleny (podobně jako minule popsaný binární vektorový formát DXB) na dvě části. 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 (o konstantní délce 31 bytů) se nachází datová část, ve které jsou uloženy informace o jednotlivých vektorech, indexech barev a případných mnohoúhelníkových výplních.

37_3
Obrázek 3: Opět snímek typu SLD zobrazený v demonstračním příkladu

4. Hlavička souboru

Hlavička souboru typu SLD je velmi podobná hlavičce souboru typu DXB. Z programátorského hlediska se jedná o velmi jednoduchý formát, ve kterém jsou kombinovány řetězcové a binární hodnoty. Délka hlavičky je rovna 31 bytům. První oblast hlavičky obsahuje řetězec „AutoCAD Slide“, za nímž následují znaky CR, LF, Ctrl+Z a NUL (bytová nula). Za těmito znaky je uložena čtrnáctibytová struktura, ve které jsou v binární podobě zapsány další informace o snímku.

Význam první oblasti hlavičky 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í čtrnáctiznakový řetězec, který je odřádkovaný (znaky 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).

Druhá, čtrnáctibytová oblast hlavičky má následující strukturu:

Délka v bytech Význam
1 typ souboru – nastaveno na hodnotu 86
1 level – většinou nastaveno na hodnotu 2
2 šířka obrazovky v pixelech, na které byl snímek pořízen
2 výška obrazovky v pixelech, na které byl snímek pořízen
4 poměr šířky a výšky obrazovky vynásobený hodnotou 107
2 nedůležitý údaj, většinou je zde uložena hodnota 0×0000
2 hodnota 0×1234, podle které se rozhodne little či big-endian procesoru

Z této struktury jsou využitelné především informace o rozlišení obrazovky. Podle těchto hodnot je totiž možné zvolit vhodné měřítko při přepočtu souřadnic uložených v souboru SLD na souřadnice použitého zobrazovacího zařízení – nejsme tedy v žádném případě omezeni na rozlišení obrazovky, které bylo použito při vytváření souboru. Důležitý je také poslední údaj, ve kterém je uložena hexadecimální šestnáctibitová hodnota 0×1234. Podle toho, zda je jako první uložen byte 0×12 či 0×34 se zjišťuje, zda je celý soubor uložen ve formátu little-endian či big-endian, tj. zda se u šestnáctibitových hodnot nejdříve ukládá vyšší byte či byte nižší. Jediná třicetidvoubitová hodnota, která se v těchto souborech vyskytuje, udává poměr výšky a šířky obrazovky (viz výše uvedená tabulka); tato hodnota je definitoricky vždy uložena s nejméně významným bytem na prvním místě.

37_4

5. Jednotlivé typy záznamů a jejich formát

V souborech typu SLD se může nacházet celkem šest typů záznamů. Záznamy jsou rozlišené hodnotou svého druhého bytu (little-endian) či hodnotou prvního bytu (big-endian, méně časté). Pokud je hodnota tohoto bytu v rozsahu 0×000×7f, jedná se o záznam, ve kterém je uložen takzvaný absolutní vektor. Ten je zadán dvojicí vrcholů, přičemž každý vrchol je specifikován dvojicí šestnáctibitových souřadnic. Formát záznamu absolutního vektoru, jehož celková délka je rovna osmi bytům, je tedy následující:

from-x (dva byty, souřadnice musí být menší než 32767)
from-y (dva byty)
to-x (dva byty)
to-y (dva byty) 

Pokud je v rozlišovacím bytu (prvním či druhém) záznamu uložena hodnota 0×fb, je v tomto záznamu uložen takzvaný relativní vektor. Ten se od absolutního vektoru odlišuje v tom, že souřadnice jsou zapsány na pouhém jednom bytu (rozsah –128 až 127, tj. se znaménkem) a počítají se relativně od posledně zapsaného vrcholu (tím je například počáteční vrchol absolutního vektoru, tj. [from-x, from-y]). Délka tohoto záznamu je rovna pěti bytům:

0xfb (typ záznamu – u little endian je prohozen s from-x)
from-x (jeden byt, znaménkový)
from-y (jeden byt, znaménkový)
to-x (jeden byt, znaménkový)
to-y (jeden byt, znaménkový) 

Ještě jednodušší formát má záznam s koncovým bodem vektoru. Tento záznam má délku pouhé tři byty, začíná bytem 0×fe a obsahuje relativní souřadnice jednoho vrcholu. Za druhý vrchol je považován posledně zapsaný vrchol z předchozího záznamu (opět si musíme dát pozor na to, že se jedná vždy o první vrchol v případě absolutního i relativního vektoru):

0xfe (typ záznamu, u little endian je prohozen s to-x)
to-x (jeden byt, znaménkový)
to-y (jeden byt, znaménkový) 

Další typ záznamu, který rozpoznáme podle bytu 0×ff, je velmi jednoduchý. Ve druhém bytu je zapsán index barvy, kterou se budou vykreslovat všechny následující entity. Vztah index-barva sice není nikde přesně popsán, většinou se však používá standardní barvová paleta AutoCADu:

0xff (typ záznamu)
color (jeden byt, barva) 

Také ukončující záznam je jednoduchý. Tento záznam, který má délku dva byty a měl by se nacházet jako poslední v celém souboru, má typ záznamu přiřazen na hodnotu 0×fc a druhý byte (resp. první byte v případě little endian) má hodnotu 0×00:

0xfc (typ záznamu)
0x00 (druhý byt ve dvojici) 

Poslední typ záznamu slouží pro specifikaci jednoho vrcholu mnohoúhelníka, který má být vyplněný. Typ záznamu je nastaven na hodnotu 0×fd, druhý byte ve dvojici je vždy nastaven na hodnotu 0×00. Za touto dvojicí bytů je uložena x-ová a y-ová souřadnice jednoho vrcholu mnohoúhelníka (každá souřadnice ve dvou bytech, tj. jedná se o dvě šestnáctibitové hodnoty). Vrcholů může být zadáno několik, minimální hodnota je rovna třem, maximální hodnota deseti. Pokud je y-ová souřadnice záporná, značí to začátek či konec vyplňování, tj. první či poslední vrchol mnohoúhelníka. První záznam obsahuje v x-ové souřadnici celkový počet vrcholů (3–10), nejedná se tedy o souřadnice, ty následují až v dalším záznamu s typem 0×fd.

0xfd (typ záznamu)
0x00 (druhý byt ve dvojici)
x-ová souřadnice (dva byty)
y-ová souřadnice (dva byty) 

6. Formát knihovny snímků (Slide Library)

Kromě jednotlivých snímků se v CAD systémech používají i takzvané knihovny snímků (Slide Library). Ve své podstatě se jedná o několik snímků uložených v jednom souboru, přičemž každý snímek je pojmenován (jméno může být dlouhé až 31 znaků). Přípona knihovny snímků je .SLB, v instalacích AutoCADu se například nachází soubor support/acad.slb s několika snímky. Knihovna začíná hlavičkou, jež má délku 32 bytů. V hlavičce se na začátku nachází řetězec s obsahem „AutoCAD Slide Library 1.0“, který je následovaný symboly CR, LF, Ctrl+Z a čtyřmi znaky NUL. Po hlavičce jsou v knihovně uloženy popisky jednotlivých snímků, přičemž každý popisek má délku 36 bytů. V prvních 32 bytech popisku je uložen název snímků – jedná se o klasický céčkový řetězec ukončený nulou. V dalších čtyřech bytech je uveden offset začátku snímku, tuto hodnotu je možné použít například při volání céčkovské knihovní funkce fseek(). Konec seznamu s popiskami snímků je reprezentován popiskou, která má ve jménu snímku uložen prázdný řetězec. Dalším obsahem souboru jsou již jednotlivé snímky, každý je zde uložen i se svou hlavičkou.

7. Demonstrační příklad pro načtení a zobrazení souborů typu SLD

Prohlížeč souborů typu SLD (Slide), jehož zdrojový soubor je dostupný pod tímto odkazem (k dispozici je i HTML verze se zvýrazněním syntaxe), je naprogramovaný v programovacím jazyku C a pro zobrazování využívá možnosti grafické knihovny OpenGL. Při spuštění aplikace se musí jako první parametr zadat jméno souboru uloženého ve formátu SLD (podporována je pouze verze určená pro procesory Intel). Následně je soubor načten, zanalyzován a podporované grafické příkazy (pro kreslení vektoru, relativního vektoru, koncového bodu vektoru a změnu barvy) jsou uloženy do lineárního seznamu pro další zpracování. Ovládání zobrazení načteného snímku je velmi jednoduché. Levým tlačítkem myši se výkresem pohybuje, pravým tlačítkem se mění měřítko. Místo myši lze použít i kurzorové klávesy (posun snímku) spolu s klávesami [Page Up] a [Page Down] (změna měřítka). Tlačítkem Q a ESC se běh programu ukončí:

Operace (klávesa) Význam
Esc ukončení běhu aplikace
Q ukončení běhu aplikace
šipky posun snímku
PageUp změna měřítka snímku (zvětšení)
PageDown změna měřítka snímku (zmenšení)
levé tlačítko myši rotace snímku
pravé tlačítko myši změna měřítka snímku

37_5
Screenshot demonstračního příkladu se zobrazeným snímkem

Testovací soubory typu SLD si můžete stáhnout zde.

CS24_early

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

  1. Autodesk, Inc.:
    Appendix A – Drawing Interchange File Formats Slide Files (AutoCAD 2000)
    http://www.au­todesk.com/techpub­s/autocad/acad2000/dxf/­slide_files_dxf_a­a.htm
  2. Autodesk, Inc.:
    http://www.au­todesk.com/techpub­s/autocad/aca­dr14/dxf/the_dxb_fi­le_format_al_u05_b­.htm
  3. Autodesk, Inc.:
    Drawing Interchange and File Formats, AutoCAD Release 12
    Copyright © 1982–1990, 1992, Autodesk, Inc.
  4. Autodesk, Inc.:
    AutoCAD Reference Manual
    Autodesk, Inc., 1995
  5. Autodesk, Inc.:
    AutoCAD 2006 – Elektronická nápověda
    Autodesk, Inc.
  6. CADSlide version 1.5:
    http://www.sof­tpedia.com/get/Sci­ence-CAD/CADSlide.shtml
  7. Slide Manager:
    http://www.dot­soft.com/slide­man.htm

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

V následujícím pokračování tohoto seriálu si popíšeme již mnohem komplikovanější formát. Bude se jednat o známý PostScript, jehož možnosti využití jsou v reálných aplikacích mnohem větší než možnosti doposud popsaných vektorových formátů určených především pro CAD a CAM. PostScript ve své podstatě není pouhý vektorový formát, ale plnohodnotný programovací jazyk, což na jednu stranu zvětšuje jeho schopnosti, na druhou stranu však poněkud komplikuje tvorbu prohlížeček či ovladačů tiskáren.

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.