Speciální kódy – reference

Zvláštní kódy lze použít k vytváření dalších geometrických tvarů a určení některých akcí.

Druhý znak řetězce o třech znacích (určení délky vektoru) musí být 0 nebo je možní zadat číslo zvláštního kódu. Například 008 a 8 jsou platné specifikace.

Speciální bajtové kódy

Kód

Popis

000

Konec definice tvaru

Kreslení je aktivováno na začátku každého tvaru. Je-li režim kreslení zapnut (kód 1), vektory způsobí kreslení čar. Je-li režim kreslení vypnut (kód 2), vektory se posunou do nového umístění bez kreslení.

001

Zapnout kreslení (pero dolů)

002

Vypnout kreslení (pero nahoru)

003

Dělit délky vektorů následujícím bajtem

Výška určená pomocí příkazu TVAR je nejprve považována za délku jednoho pravoúhlého vektoru (směry 0, 4, 8 nebo C). Kód 3 dělí délky vektorů následujícím bajtem. Kód 4 násobí délky vektorů následujícím bajtem. Po kódech 3 a 4 následuje specifikační bajt s celočíselným měřítkem (1 až 255).

Jestliže chcete, aby výška tvaru určovala velikost celého tvaru a nakreslíte ho pomocí délky vektoru 10, můžete pomocí 3,10 změnit měřítko specifikace výšky. Měřítko je ve tvaru kumulativní; znamená to, že násobení 2 a poté 6 má za následek měřítko 12. Obvykle je potřeba vliv faktorů měřítka na konci tvaru obrátit, zvláště pro podtvary a tvary textových písem. Aplikace totiž měřítko automaticky neupravuje.

004

Násobit délky vektorů následujícím bajtem

005

Uložit aktuální pozici do zásobníku

Je nutné obnovit vše, co bylo uloženo. Zásobník pozic může obsahovat maximálně 4 pozice. Pokud zásobník přeteče z důvodu použití příliš mnoha operací uložení a málo operací obnovení, pokus o vykreslení daného tvaru zobrazí následující hlášení:

Zásobník pozic přetéká ve tvaru nnn

Podobně, pokud se pokusíte obnovit více pozic než bylo uloženo, zobrazí se následující hlášení:

Zásobník pozic podtéká ve tvaru nnn

006

Použít aktuální pozici ze zásobníku

007

Vykreslit číslo podtvaru určené následujícím bajtem

Pro písma, která nejsou Unicode, určuje bajt za kódem 7 číslo tvaru od 1 do 255. Pro písma Unicode určuje bajt za kódem 7 číslo tvaru v rozsahu 1 až 65535. Čísla tvarů Unicode by se měla počítat jako dva bajty.

Tvar s tímto číslem (ve stejném souboru tvaru) je kreslen právě v daný okamžik. U nového tvaru není režim kreslení resetován. Po dokončení kreslení podtvaru pokračuje kreslení vlastního tvaru.

008

Posunutí X-Y dané následujícími dvěma bajty

Jednoduché vektory určené jedním bajtem mohou vést pouze v 16 předdefinovaných směrech a jejich maximální délka je 15. Taková omezení přinášejí vysokou úspornost definice, ale někdy jsou příliš omezující. Kód 8 určuje posun ve směru X-Y daný následujícími dvěma bajty. Kód 8 musí být následován dvěma bajty ve formátu:

8,X-displacement,Y-displacement

Posun X-Y může být v rozsahu –128 až +127. Znak + není povinný, navíc pro zvýšení čitelnosti můžete použít závorky. Následující příklad vytvoří vektor, který kreslí (nebo posunuje) 10 jednotek doleva a tři jednotky nahoru.

8,(-10,3)

Po interpretaci dvou hodnot posunu se další hodnota opět chápe jako normálový vektor.

Kód 9 lze použít pro kreslení několika navazujících nestandardních vektorů. Kód 9 určuje libovolný počet párů posunutí X-Y. Sekvence kódu je ukončena párem (0,0). Následující příklad nakreslí tři nestandardní vektory a vrátí se do režimu normálních vektorů:

9,(3,1),(3,2),(2,-3),(0,0)

Posloupnost párů posunutí X-Y je nutné zakončit párem (0,0), aby aplikace rozpoznala normálové vektory nebo speciální kódy, které následují.

009

Více posunutí X-Y, ukončeno (0,0)

00A

Oblouk oktantu definovaný dvěma následujícími bajty

Tomu se říká oblouk oktantu, protože zasahuje jeden nebo více 45 stupňových oktantů, počínaje a konče na hranici oktantů. Oktanty jsou číslovány proti směru pohybu hodinových ručiček od pozice 3 hodin, viz obrázek:

Specifikace oblouku je:

10,radius,(-)0SC

Poloměr může být libovolná hodnota od 1 do 255. Druhý specifikační bajt označuje směr oblouku (je-li kladný, proti směru pohybu hodinových ručiček, a je-li záporný, po směru pohybu hodinových ručiček), jeho počáteční oktant ( s , hodnota od 0 do 7) a počet oktantů, které přesahuje ( c hodnota od 0 do 7, kde 0 se rovná osmi oktantům neboli celé kružnici). Čitelnost můžete zlepšit použitím závorek. Podívejte se například na následující část definice tvaru:

...012,10,(1,-032),01E,...

Jak je ukázáno na následujícím obrázku, tento kód kreslí vektor o délce jedné jednotky nahoru a doprava, oblouk po směru pohybu hodinových ručiček z oktantu 3 (s poloměrem jedné jednotky pro dva oktanty) a potom vektor o délce jedné jednotky dolů a doprava.

00B

Zlomkový oblouk definovaný následujícími pěti bajty

Popis oblouku vyžaduje pět dalších specifikačních bajtů.

11,start_offset,end_offset,high_radius,radius,(-)0SC

poč_posun a konc_posun určují, jak daleko od hranice oktantu oblouk začíná nebo končí. význ_pol určuje nejvýznamnějších osm bitů poloměru; nejvýznamnější poloměr bude 0, pokud není poloměr větší než 255 jednotek. Vynásobte hodnotu význ_pol číslem 256 a výslednou hodnotu přičtěte k hodnotě poloměr . tím vygenerujete poloměr oblouku větší než 255. Poloměr a koncový specifikační bajt jsou stejné jako specifikace oblouku oktantu (kód 00A, viz popis výše).

Číslo počposun určíte tak, že vypočítáte rozdíl (ve stupních) mezi hranicí oktantu (tj. násobkem 45 stupňů) a počátkem oblouku. Tento rozdíl vynásobíte 256 a vydělíte 45. Pokud oblouk začíná na hranici oktantu, jeho počáteční posun je roven 0.

Kon_posun se vypočítá stejným způsobem - použijete rozdíl mezi hranicí posledního protnutého oktantu a konce oblouku. Pokud oblouk končí na hranici oktantu, jeho koncový posun je roven 0.

Například oblouk s poloměrem 3 začínající na 55 stupních a končící na 95 stupních se kóduje následovně:

11,(56,28,0,3,012)

Zde je vysvětlení:

start_offset     = 56 because ((55 - 45) * 256 / 45) = 56 
end_offset       = 28 because ((95 - 90) * 256 / 45) = 28
high_radius      = 0  because (radius < 255) 
radius           = 3 
starting octant  = 1  because arc starts in the 45 degree octant
ending octant    = 2  because arc ends in the 90 degree octant

00C

Oblouk definovaný posunutím a vyboulením X-Y

Jsou podobné kódům 8 a 9 v tom, že je můžete použít pro určení posunů X-Y. Kódy 00C a 00D ale kreslí oblouky pomocí aplikace faktoru vyboulení na vektor posunu. Kód 00C nakreslí segment oblouku, zatímco kód 00D kreslí více segmentů oblouku (polyoblouky), dokud není ukončen posunem (0,0).

Kód 00C musí být následován třemi bajty popisující oblouk:

0C,X-displacement,Y-displacement,Bulge

Jak hodnoty posunu X a Y tak hodnota vyboulení se mohou pohybovat v rozsahu od –127 do +127. Jestliže úsečkový segment určený posunutím má délku D a kolmá vzdálenost od bodu poloviny tohoto segmentu má výšku H, je velikost vyboulení určena vzorcem ((2* H / D) * 127). Pokud je oblouk z aktuálního umístění do nového umístění veden po směru pohybu hodinových ručiček, znaménko je záporné.

Polokruh má vyboulení 127 (nebo –127) a je to největší oblouk, který může být jednoobloukovým segmentem založeným na těchto kódech (pro větší oblouky používejte dva následující obloukové segmenty). Hodnota 0 je platným zápisem úsečkového segmentu. Popis úsečky kódem 8 je v popisu tvaru o bajt kratší.

Kód obloukové křivky (00D, neboli 13) je následován 0 nebo dalšími trojicemi obloukových segmentů a je ukončen posunutím (0,0). Za posledním posunutím již není určeno žádné vyboulení. Například písmeno S by mohlo být definováno touto sekvencí:

13,(0,5,127),(0,5,-127),(0,0)

Segmenty s nulovým vyboulením jsou užitečné v obloukových křivkách, kde znázorňují přímé segmenty; jsou efektivnější než ukončení obloukových křivek, vložení jednoho přímého segmentu a potom započetí další obloukové křivky.

V definicích obloukového segmentu a polyoblouku nelze použít číslo –128.

00D

Několik navazujících oblouků určených vyboulením

00E

Provést následující operaci pouze u vertikálního textu

Pokud je potřeba tento speciální kód použít v definici znaku, další kód se provede nebo vynechá v závislosti na orientaci. Jestliže je směr vertikální, je zpracován další kód; je-li horizontální, další kód je přeskočen.

V horizontálním textu je za počáteční bod každého znaku považován levý koncový bod účaří, ve vertikálním pak nejvyšší středový bod znaku. Ve vertikálním textu je počáteční bod horní střed znaku. Na konci každého znaku je obvykle kreslen segment s vypnutým perem až do umístění počátečního bodu dalšího znaku. U horizontálního textu je to doprava; u vertikálního textu dolů. Speciální kód 00E (14) se používá primárně pro úpravu rozdílů v počátečních a koncových bodech, umožňuje použít stejné definice tvaru znaku horizontálně i vertikálně. Například tato definice písmene D může být použita v definici textu pro horizontální i vertikální text.

*68,22,ucd 
2,14,8,(-2, 6),1,030,012,044,016,038,2,010,1,06C,2,050,
14,8,(-4,-3),0