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ék meghatá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 ![]() |