Vektorový grafický formát HPGL

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

Sdílet

V dnešním článku se budeme zabývat vektorovým formátem nazvaným HPGL, neboli Hewlett-Packard Graphics Language. Tento formát byl v minulosti určen především pro ovládání perových plotterů, dnes se však stal velmi jednoduchým formátem, který je možné použít při předávání dat mezi různými graficky orientovanými aplikacemi.

Obsah

1. Vektorový grafický formát HPGL (Hewlett-Packard Graphics Language)
2. Formát souborů typu HPGL (PLT)
3. Základní příkazy pro kreslení úseček a obdélníků
4. Příkazy pro kreslení kružnic, oblouků a kruhových výsečí
5. Práce s textem
6. Nastavení kreslicího pera
7. Ostatní příkazy a řídicí kódy tiskáren i plotterů
8. Odkazy na další informační zdroje
9. Obsah dalšího pokračování tohoto seriálu

1. Vektorový grafický formát HPGL (Hewlett-Packard Graphics Language)

V předchozí části tohoto seriálu jsme si uvedli některé základní informace o vektorových grafických formátech, včetně jejich hrubého rozdělení do několika navzájem se prolínajících kategorií. Také jsme si řekli, že mnoho vektorových formátů uchovává informace o dvourozměrné kresbě či trojrozměrném modelu v textové podobě (tj. ve formě ASCII souborů), protože vektorový způsob reprezentace informace je obecně méně náročný na objem dat než při reprezentaci rastrové. Proto není nutné šetřit každým bitem a je možné zvolit formát čitelný a snadno zpracovatelný.

Rozdíl v objemu dat je patrný už u plošných kreseb (bitmapy vs. vektorově popsané objekty), při přechodu do trojrozměrného prostoru je už rozdíl mezi objemovou reprezentací pomocí voxelů a vektorovou reprezentací markantní (voxel je ve své podstatě trojrozměrný sampl původně bezrozměrného bo­du).

Typickým zástupcem vektorových formátů, které používají textovou (tj. člověkem čitelnou) reprezentaci obrazových údajů, je formát HPGL, tj. Hewlett-Packard Graphics Language. Soubory ukládané v tomto formátu mají většinou příponu PLT, což je zkratka slova plot či plotter. V následující kapitole si řekneme základní informace o tomto zajímavém a v oblasti CAD často používaném souborovém formátu. Uvidíme, že se na jedné straně jedná o plnohodnotný souborový formát a na straně druhé i o jednoduchý protokol, kterým se mohou ovládat perové plottery i jejich modernější technologičtí nástupci, zejména inkoustové plottery a velkoformátové tiskárny.

2. Formát souborů typu HPGL (PLT)

Vektorový grafický formát HPGL vytvořila firma Hewlett-Packard především jako (původně jednocestný) komunikační formát pro své perové plottery, například typy HP7475A, HP7220 či HP7586 apod. Ty byly k počítači připojovány buď přes paralelní nebo (a to častěji) přes sériový port typu RS-232. V případě použití sériového portu však nebylo vždy zaručeno, že se bude přenášet všech osm bitů každého znaku, protože se plottery připojovaly přes různé modifikace zapojení takzvaného null-modemu, samotné ovladače nebyly zcela kompatibilní apod. I z tohoto důvodu je HPGL navržen jako čistě textový formát s tím, že pro některé verze plotterů se na začátku přenosu provede jejich inicializace pomocí několika netisknutelných znaků, především znaku [Esc] a znaku s ASCII kódem 3 (každý plotter má jiné požadavky a tím i odlišnou sekvenci úvodních znaků).

Později byl formát HPGL použit i u plotterů vyráběných mnoha dalšími firmami a dokonce je podporován i u některých modelů laserových tiskáren (typicky u nich existuje podpora HPGL a PCL popř. HPGL/2 a PCL) a velkoformátových inkoustových tiskáren (ty se dnes pro zmatení pojmů také nazývají plottery, i když s původní technologií tisku nemají vůbec nic společného). Vzhledem k tomu, že původní perové plottery měly omezený výkon svého procesoru (používaly se i procesory Intel 8080, popř. osmibitové mikrořadiče) a také malou kapacitu paměti ROM s uloženým ovládacím programem, byl pro zápis jednotlivých kreslicích příkazů zvolen jednoduchý a snadno dekódovatelný formát – každý řídicí či kreslicí příkaz je zapsán pomocí dvojice ASCII znaků, za kterými mohou následovat číselné či textové parametry.

Jednotlivé parametry od sebe mohou být odděleny některým z ASCII znaků „,“ (čárka), " „ (mezera), “+„ (znaménko plus) či “-„ (znaménko minus), přičemž samotná firma Hewlett-Packard doporučuje vždy používat čárku nebo znak minus (v případě, že se jedná o záporné číslo); některé programy však mezi parametry vkládají i mezery. Způsob oddělování parametrů pomocí znaku minus s malou modifikací převzal i moderní formát SVG (Scalable Vector Graphics). Každý příkaz je od následujícího příkazu oddělen buď znakem “;" (středník), koncem řádku (CR+LF či pouze CR), mezerou nebo dokonce nemusí být žádný ukončovací znak přítomen (i to je možné, protože parametr je možné od příkazu jednoduše rozpoznat).

Většina ovladačů pro perové plottery, jejich inkoustové následovníky či laserové tiskárny generuje soubory, které neobsahují žádný znak pro konec řádku (ten je nepodstatný), žádné zbytečné mezery a žádné ukončovací znaky za příkazy – tím je zajištěna co nejmenší velikost výsledného souboru, kratší čas přenosu souboru do plotteru (zejména při použití sériového přenosu přes RS-232) a samozřejmě i rychlejší tisk. Na první pohled může taková volnost při vzájemném oddělování parametrů i celých příkazů připadat programátorům zbytečně složitá (především při parsování souborů HPGL vzniklých různými programy), ve skutečnosti je však jejich zpracování poměrně jednoduché. Větší problémy mohou nastat při načítání souborů, které na začátku či na konci obsahují sekvenci řídicích znaků (takzvané DCI – Device-Control Instructions). Důležité je najít začátek vlastních dat uložených ve formátu HPGL, v naprosté většině konfigurací se jedná o řetězec IN;.

3. Základní příkazy pro kreslení úseček a obdélníků

Jednotlivé modely plotterů se od sebe v mnoha parametrech odlišují, zejména se to týká použité tiskové technologie, maximální velikosti papíru (či pauzáku) a v neposlední řadě také toho, jaké objekty může plotter přímo vykreslovat. První plottery, které obsahovaly pouze velmi jednoduchý procesor, uměly vykreslit pouze jednotlivé úsečky, tj. rozpoznávaly příkazy typu PU, PD atd. Ostatní tvary, zejména oblouky a texty, se musely již v počítači (typicky v programu typu CAD) nechat rozpadnout na sekvenci úseček. Další plottery již zvládaly přímo vykreslovat kružnice, oblouky a kruhové výseče (příkazy typu AA) a „nejchytřejší“ verze plotterů již pracuje s ořezovými oblastmi, různými typy fontů, různými typy čar, barvami atd.

Ovladače samozřejmě podporují starší i novější typy plotterů, takže pokud vyžadujeme například výstup pouze ve formě úseček, je vhodné nastavit nějaký starší typ plotteru (takto jsem z AutoCADu získával vektorovou podobu 2D pohledu na původní 3D kresbu se skrytými hranami v případě, že nedostačoval formát SLD).

Nejprve si ukážeme, které příkazy je možné použít při kreslení úseček a obdélníků. Mezi tuto skupinu příkazů patří čtveřice PA, PD, PR a PU, jež je podporována všemi typy plotterů, od těch nejjednodušších jednoperových až po moderní velkoformátové inkoustové. Pomocí těchto příkazů je možné vykreslovat jak jednotlivé úsečky, tak i sekvence na sebe navazujících úseček (polyčáry). Dobře napsané drivery pro plottery, které vykreslují pouze polyčáry, dokážou všechny složitější tvary (kružnice, text, šrafy), rozdělit na sekvenci čar, tu zoptimalizovat tak, aby pero urazilo co nejmenší vzdálenost a teprve takto optimalizovanou sekvenci poslat na plotter. I v případě uložení vektorového obrázku do souboru vznikne při takto pojaté optimalizaci soubor s minimální délkou. Další čtyři příkazy EA, ER, RA a RR už nejsou tak často používané a v mnoha souborech typu PLT se s nimi nesetkáme.

Příkaz Význam Parametry Popis
PA Plot Absolute x, y, … nastavení absolutních souřadnic (může kreslit)
PR Plot Relative xn, yn, … nastavení relativních souřadnic pera (pero může kreslit)
PU Pen Up x, y, … zdvižení pera na souřadnice x, y; může být i bez parametrů
PD Pen Down x, y, … spuštění pera na souřadnice x, y; může být i bez parametrů
EA Edge Rectangle Absolute x, y obdélník specifikovaný úhlopříčkou
ER Edge Rectangle Relative x, y obdélník specifikovaný úhlopříčkou
RA Shade Rectangle Absolute x, y vyplní obsah obdélníka specifikovaného úhlopříčkou
RR Shade Rectangle Relative x, y vyplní obsah obdélníka specifikovaného úhlopříčkou

4. Příkazy pro kreslení kružnic, elips, oblouků a kruhových výsečí

V této skupině příkazů se nachází jeden příkaz CI pro vykreslení kružnice zadané svým poloměrem r. Pozici středu kružnice není zapotřebí zadávat, protože se odvodí z aktuální polohy pera. Další dva příkazy AA a AR slouží pro vykreslení kruhového oblouku. Poslední dvojice příkazů EW a WG se používá pro vykreslení vyplněné či nevyplněné kruhové výseče. Příkazy AA, AR, EW a WG akceptují ještě jeden nepovinný parametr, kterým se specifikuje přesnost napojení dotyčnice na konci kruhového oblouku.

Příkazy z této skupiny nejsou často používány, mnoho plotterů nezná buď žádný příkaz této kategorie, nebo akceptuje pouze příkazy AA, AR a CI. Zajímavá je absence příkazů sloužících pro vykreslení elipsy či eliptického oblouku, možná to souvisí s tím, že se tato grafická entita dlouhou dobu nepoužívala ani v AutoCADu (ve své době jediným rozšířeným obecným CAD systémem pro „malé“ počítače PC).

Příkaz Význam Parametry Popis
AA Arc Absolute x, y, úhel oblouk zadaný absolutními souřadnicemi
AR Arc Relative x, y, úhel oblouk zadaný relativními souřadnicemi
CI Circle r kružnice s poloměrem r
EW Edge Wedge r, u1, u2 kruhová výseč zadaná poloměrem a dvojicí úhlů
WG Shade Wedge r, u1, u2 vyplněná kruhová výseč

5. Práce s textem

První plottery neuměly přímo vykreslovat znaky pomocí specializovaných příkazů, rozdělení znaků na jednotlivé vektory (úsečky a kruhové oblouky) řešila buď samotná aplikace nebo ovladač k plotteru. I z tohoto důvodu obsahovaly programy typu CAD jednoduché „vektorové“ fonty, pojmenované podle duktu písmen Simplex, Duplex a Triplex. Podobné „vektorové“ fonty se v minulosti používaly i v systému Microsoft Windows. Spolu s rostoucí kapacitou paměti ROM a výkonností mikroprocesorů zabudovaných v plotterech se však začaly objevovat i příkazy, které práci se znaky i celými řetězci umožňovaly. Nejedná se sice o žádný PostScript (ten je v tomto ohledu prakticky stále nejlepší, i díky písmům Type 1), ale základní funkcionalita je zaručena. Z dále prováděných příkazů je důležitý příkaz DT, kterým se specifikuje znak, který ukončuje řetězec (například to může být hvězdička). Samotný řetězec se vykreslí příkazem LB. Ostatní příkazy z této kategorie slouží pro nastavení fontu, zešikmení znaků (slant), nastavení velikosti znaků, orientace textu atd.

Příkaz Význam Parametry Popis
CA Alternate Character Set n nastavení alternativní znakové sady číslo n
CN Character Plot nx, ny znaky na pozici mezi kurzorem a nx, ny
CS Standard Character Set n nastavení standardní znakové sady číslo n
DI Absolute Direction rx, ry směr vykreslování znaků
DR Relative Direction rx, ry směr vykreslování znaků
DT Define Label Terminator t nastavení ukončovacího znaku řetězce
LB Label znaky kreslí řetězec znaků až do přijmutí znaku definovaného pomocí DT
SA Select Alternate Set specifikuje alternativní znakovou sadu vybranou příkazem CA
SS Select Standard Set specifikuje standardní znakovou sadu vybranou příkazem CS
SL Character Slant tan specifikace zešikmení znaků o tan úhlu
SI Absolute Character Size w, h absolutní výška znaků w×h
SR Relative Character Size w, h relativní výška znaků w×h

6. Nastavení kreslicího pera

Příkazy z této kategorie jsou velmi důležité, protože většina perových plotterů umožňuje (mechanickou) změnu kreslicího pera. Například je možné použít pera různé tloušťky, použít různobarevné inkousty místo klasické černé tuše atd. Moderní plottery funkci výměnu pera simulují, takže příkazy jsou stále platné. Základním a prakticky vždy podporovaným příkazem je SC, který pro další kreslení vybírá pero číslo n. S tímto příkazem se často setkáme v inicializační části souborů typu HPGL/PLT, kde se většinou vybírá pero číslo 0.

Podobným příkazem je PT, kterým se volí šířka pera; tento příkaz však není vždy podporovaný. Dalším příkazem VS se volí rychlost posunu pera. Vyšší rychlost je samozřejmě žádoucí, zejména při tisku na velký formát, může však mít negativní vliv na kvalitu vykreslování, zejména v případě, že je použit nekvalitní inkoust, který nedokáže dostatečně rychle „stékat“ na papír či pauzák. Často se u užších per volí nižší rychlost a naopak.

Příkaz Význam Parametry Popis
FT Fill Type vzorek, mezera nastavení stylu výplně
LT Line Type číslo, délka nastavení typu vykreslované úsečky
PM Polygon Mode n způsob kreslení polygonů
PT Pen Thickness d specifikace šířky pera v mm
SC Select Pen n výběr kreslicího pera číslo n
VS Velocity Select v nastavení rychlosti kreslení

7. Ostatní příkazy a řídicí kódy tiskáren i plotterů

Příkazy z této kategorie provádí globální nastavení některých kreslicích parametrů, popř. dokážou vracet informace od plotteru zpět do počítače. Nejpoužívanějším příkazem je IN, se kterým se často setkáme na začátcích souborů typu HPGL/PLT. Tento příkaz provede inicializaci všech parametrů plotteru na počáteční hodnoty, některé plottery při přečtení tohoto příkazu naaretují papír (to je poměrně zdlouhavá operace).

Změna měřítka či otočení souřadného systému je podporována pouze u novějších plotterů, u starších se tyto operace musely provádět přímo v CADu či ovladači. Příkazy DC a DP slouží k nastavení souřadnice pera (například tlačítky na plotteru) a odeslání těchto souřadnic do počítače. Skupina příkazů začínajících na O získává vybrané parametry z plotteru a také je odesílá do počítače. Vzhledem k tomu, že tyto příkazy nemají vliv na vykreslovaný obrazec (a také nejsou uchovávány v souborech typu HPGL/PLT), nebudeme se jimi dále zabývat.

Příkaz Význam Parametry Popis
AP Automatic Pen Operation n povolení automatických operací pera (vracení atd.)
DF Default nastavení všech parametrů na původní hodnotu
DC Digitize Clear ukončení digitalizačního režimu
DP Digitize Point přepnutí do digitalizačního režimu
IN Initialize inicializace plotteru
IW Input Window x, y, x, y nastavení ořezového okna pro výstup
O? Output ? vrací z plotteru do počítače některý nastavený parametr
RO Rotate Coordinate System otočení souřadného systému
SC Scaling x, y, x, y nastavení měřítka pomocí obdélníku

bitcoin_skoleni

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

  1. Heslo HPGL na Wikipedii:
    http://en.wiki­pedia.org/wiki/HPGL
  2. Hewlett Packard Graphics Language Commands:
    http://www.sxlis­t.com/techref­/language/hpgl/com­mands.htm
  3. HP-GL Graphics Language:
    http://cstep.lu­berth.com/HPGL­.pdf

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

V následující části tohoto seriálu si ukážeme praktické využití formátu HPGL (a.k.a. PLT) při získávání grafických informací ze známého programu AutoCAD. Přes tento formát je možné z AutoCADu i dalších aplikací získat kresbu tak, jak by byla vytištěna, tj. včetně měřítka, skrytých hran atd.

Autor článku

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