Speciális kódok – összefoglalás

További geometriai alakok létrehozására és bizonyos műveletek megadására speciális kódok használhatók.

A három karakterből álló karakterlánc második karakterének (a vektorhosszt megadó karakternek) 0-nak kell lennie, ellenkező esetben meg kell adnia egy speciális kódszámot. Például a 008 és a 8 is érvényes.

Adatbájtkódok

Kód

Leírás

000

Az alakdefiníció vége

A Rajzmód az alak rajzolásának kezdetén mindig bekapcsolódik. Ha be van kapcsolva a Rajzmód (1-es kód), a vektorok vonalak rajzolását eredményezik. Ha ki van kapcsolva a Rajzmód (2-es kód), a vektorok új helyre mozdulnak el, rajzolás nélkül.

001

Rajzmód aktiválása (leengedett toll)

002

Rajzmód kikapcsolása (felemelt toll)

003

Vektorhosszak felosztása a következő bájttal

Az ALAK parancs használatával megadott magasságot kezdetben egyetlen ortogonális (0, 4, 8 vagy C irányú) vektor hosszaként értelmezi a program. A 3-as kód a vektor hosszát elosztja a következő bájttal. A 4-es kód a vektor hosszát megszorozza a következő bájttal. A 3-as és 4-es kódot egy adatbájt követi, amely egy egész értékű (1 és 255 közé eső) léptéktényezőt tartalmaz.

Ha például azt szeretné, hogy a megadott magasság az egész alak mérete legyen, és az alakot 10 vektorhosszban rajzolta meg, a 3,10 adatbájt sorozattal állíthatja be a megfelelő magasságot. Egy alakon belül a léptéktényezők halmozódnak, azaz egy 2-es szorzó utáni 6-os szorzó 12-es szorzónak felel meg. Az alak végén a léptéktényező értékét általában vissza kell állítani, főleg alalakok és szöveg-betűtípus esetében. A program magától nem állítja vissza a léptéktényezőt.

004

Vektorhosszak megsokszorozása a következő bájttal

005

Az aktuális pozíció mentése a verembe

Minden mentett adatot ki is kell olvasni. A mentett pozíciók verme csak négy elemnyi mély. Ha a verem a túl sok mentés vagy hiányzó kiolvasás miatt túlcsordul, a következő hibaüzenet jelenik meg az alak rajzolása közben:

Pozícióverem túlcsordulása az nnn alakban

Ugyanígy, ha több helyet próbál visszaállítani, mint ahányat mentett, az alak rajzolása közben a következő hibaüzenet jelenik meg:

Pozícióverem alulcsordulása az nnn alakban

006

Az aktuális pozíció kiolvasása a veremből

007

A következő bájt által megadott számú alalak megrajzolása

Unicode-tól eltérő betűtípus esetén a 7-es kódot követő adatbájt egy 1 és 255 közé eső alakszám. Unicode betűtípus esetén a 7-es kód után egy 1 és 65535 közé eső Unicode alakszám áll. Az Unicode alakszámokat két bájtnak kell számolni.

A program ekkor az ezzel a számmal azonosított (ugyanabban az alakfájlban lévő) alakot rajzolja meg. A program nem állítja vissza a rajzmódot az új alaknál. Amikor az alalak kész, folytatódik az aktuális alak megrajzolása.

008

A következő két bájt által megadott X-Y elmozdulás

A normál vektormeghatározó bájtok csak a 16 előre definiált irányba képesek rajzolni, legfeljebb 15 egységnyi hosszúsággal. Ezek a megszorítások teszik lehetővé az alakok hatékony használatát, de néha erősen korlátozzák alkalmazhatóságukat. A 8-as kód meghatározza a következő két bájt által megadott X-Y elmozdulást. A 8-as kódot két adatbájtnak kell követnie a következő formátumban:

8,X-displacement,Y-displacement

Az X-Y elmozdulás -128-tól +127-ig terjedhet. A kezdő + jel nem kötelező, az olvashatóság javítására pedig használhat kerek zárójeleket is. A következő példa egy 10 egységet balra és 3 egységet felfele mozgó (vagyis rajzoló) vektort eredményez.

8,(-10,3)

A két, elmozdulást megadó bájt után az alak visszatér Normál vektorrajzolási módba.

A 9-es kód segítségével szabványostól eltérő vektorok sorozatát rajzolhatja meg. A 9-es kód korlátlan mennyiségű X-Y elmozdulás-számpárt határoz meg. A kódsorozatot egy (0,0) pár zárja le. A következő példa három szabványostól eltérő vektor rajzolását, majd a Normál vektorrajzolási módba való visszatérést mutatja be.

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

Meg kell szakítania az X-Y elmozdulás-számpárok sorozatát egy (0,0) párral, hogy a program felismerhesse az azt követő normálvektorokat vagy speciális kódokat.

009

Több X-Y elmozdulás, lezárja (0,0)

00A

A következő két bájt által meghatározott nyolcadív

Az így meghatározott íveket nyolcadnak vagy nyolcadívnek nevezzük, mivel a teljes kör egy vagy több 45 fokos nyolcadára terjed ki, és mindig egy-egy nyolcadív határán kezdődik és végződik. A nyolcadívek az óramutató járásával ellentétes irányban, a 3 óra helyzetből vannak számozva, amint ezt az ábra mutatja.

Az ív leírása:

10,radius,(-)0SC

A sugár értéke bármilyen 1 és 255 közötti szám lehet. A második adatbájt az ív irányát (az óramutató járásával ellentétesen, ha pozitív, illetve azzal megegyezően, ha negatív), a kezdő nyolcadot ( s , 0 és 7 közé eső érték) és az ív által átfogott nyolcadok számát ( c , 0 és 7 közé eső érték, ahol 0 nyolc nyolcadívnek, vagyis egy teljes körnek felel meg) adja meg. Kerek zárójelekkel javíthatja az adatok olvashatóságát. Tekintse át például egy alakdefiníció alábbi részletét:

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

Ez a kódrészlet egységnyi vektort rajzol felfelé és jobbra, majd az óramutató járásával megegyező irányban egy ívet a harmadik nyolcadból, két nyolcad hosszan, egy egységnyi sugárral, s végül egy egységnyi hosszú vektort jobbra le, a következő ábra szerint:

00B

A következő öt bájt által meghatározott törtív

A definícióban ehhez öt adatbájtra van szükség.

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

A kezdőérték és végérték szám azt jelzi, hogy az adott nyolcadhatártól milyen messze kezdődik, illetve végződik az ív. A sugár_felső a sugár magasabb helyiértékű nyolc bitjét tartalmazza; értéke 0, hacsak a sugár nem nagyobb 255 egységnél. 255-nél nagyobb sugarú ív létrehozásához szorozza meg a sugár_felső értékét 256-tal, majd adja a sugár értékéhez. A sugár és a lezáró adatbájt ugyanaz, mint a nyolcadívek megadásának esetében (az előzőleg ismertetett 00A-s kód esetén).

A kezdőértékmeghatározásához ki kell számítania a kezdő nyolcadhatár (a 45 fok többszöröse) és az ív kezdetének különbségét fokokban. Ezt a különbséget szorozza meg 256-tal, majd ossza el 45-tel. Ha az ív nyolcadhatáron kezdődik, akkor a kezdőérték nulla.

A végérték a kezdőértékhez hasonlóan számítható ki, azzal az eltéréssel, hogy az ív vége és az utolsó átlépett nyolcadhatár közötti szögkülönbségből kell kiindulnia. Ha az ív nyolcadhatáron végződik, akkor a végérték nulla.

Az a 3 egység sugarú törtív például, amely az 55 foktól a 95 fokig terjed, a következőképpen kódolható:

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

Íme a magyarázat:

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

Az X-Y elmozdulás és kitüremkedés által meghatározott ív

A 8-as és 9-es kódokhoz annyiban hasonlítanak, hogy X-Y elmozdulás megadására használhatók. A 00C és 00D kód azonban úgy rajzol ívet, hogy az elmozdulásvektorra kitüremkedési tényezőt alkalmaz. A 00C-s kód segítségével egy, a 00D-s kóddal több ívszakaszt (ívláncot) rajzolhat. Ezt a sorozatot is a (0,0) elmozdulással kell lezárni.

A 00C-s kódot három, az ívet leíró adatbájt követi:

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

Az ívet meghatározó X és Y elmozdulásnak és az ív „hasasságát” megadó kitüremkedésnek egyaránt -127 és +127 közé kell esnie. Ha az elmozdulással meghatározott egyenes vonalszakasz (húr) hossza D, és az ív felezőpontjából erre a húrra bocsátott merőleges szakasz hossza (húrmagasság) H, akkor a kitüremkedés nagysága ((2 * H / D) * 127) lesz. Ennek előjele negatív, ha az aktuális pozícióból az új pozícióba az ív az óramutató járásával megegyező irányba halad.

A félkör kitüremkedése 127 (vagy –127), és ez a legnagyobb ilyen kódokkal megjeleníthető egy szakaszból álló ív (két egymást követő ívszakasz használatával nagyobb íveket is megjeleníthet). A 0 kitüremkedési érték is érvényes, és egyenes szakaszt jelöl. Ha azonban 8-as kódot használ az egyenes szakaszhoz, azzal megtakarít egy bájtot az alakleírásban.

Az ívlánc kódját (00D vagy 13) 0 vagy több ívszakaszt meghatározó értékhármas követheti; ezt a sorozatot is a (0,0) elmozdulás zárja le. Az utolsó elmozdulás után kitüremkedés nincs megadva. Az S karakter alakját például a következő sorozattal lehetne megadni:

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

A nulla kitüremkedésű szakaszokat jól használhatja az ívláncokon belül egyenes szakaszok definiálására. Ez jóval hatékonyabb módszer, mint az ív rajzolását megszakítva egy egyenes szakaszt beilleszteni, majd egy újabb ívláncot kezdeni.

A –128 szám ívszakasz- és ívlánc-definícióban nem használható.

00D

Több kitüremkedéssel megadott ív

00E

A következő parancs feldolgozását csak függőleges szöveg esetén végezze el

Ha egy karakter definíciójában ez a speciális kód szerepel, a következő kódot az iránytól függően vagy átugorja a program vagy feldolgozza. Függőleges szöveg esetében a program feldolgozza, vízszintes szövegnél pedig átugorja a soron következő kódot.

Vízszintes szöveg esetében a karakterek kezdőpontja az alapvonal bal oldali végpontja. Függőleges szöveg esetében a karakter kezdőpontja a karakter tetejének a közepére esik. A karakteralakok megrajzolásának végén általában egy felemelt tollal rajzolt szakasszal jutunk el a következő karakter kezdőpontjához. Vízszintes irányú szövegnél ez jobbra, függőlegesnél lefelé esik. A 00E-s (14-es) speciális kód elsősorban arra szolgál, hogy a függőleges és vízszintes szövegek kezdő- és végpontjai közötti különbséget ellensúlyozza, vagyis lehetővé tegye, hogy ugyanazt a karakteralak-definíciót függőleges és vízszintes szöveg esetében ugyanúgy lehessen használni. A nagy D következő definícióját például mindkét irányú szövegben ugyanúgy lehet használni:

*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