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 ![]() |