Riferimenti per codici speciali

È possibile utilizzare codici speciali per creare forme geometriche e specificare determinate azioni.

Il secondo dei tre caratteri della stringa, quello relativo alla specifica della lunghezza del vettore, deve essere 0. In alternativa, è possibile specificare solo il numero di codice speciale. Ad esempio, 008 e 8 sono entrambe specifiche valide.

Codici dei byte di specifica

Codice

Descrizione

000

Fine della definizione della forma

La modalità Disegno viene attivata all'inizio di ogni forma. Quando tale modalità è attivata (codice 1), i vettori disegnano linee. Quando invece è disattivata (codice 2), i vettori si spostano senza eseguire alcun disegno.

001

Attivazione modalità Disegno (penna abbassata)

002

Disattivazione modalità Disegno (penna sollevata)

003

Divisione delle lunghezze dei vettori per il byte successivo

L'altezza specificata con il comando FORMA viene inizialmente considerata come la lunghezza di un singolo vettore ortogonale (direzioni 0, 4, 8 o C). Il codice 3 divide le lunghezze di vettore per il byte successivo. Il codice 4 moltiplica le lunghezze di vettore per il byte successivo. I codici 3 e 4 sono seguiti da un byte di specifica contenente un fattore di scala intero (compreso tra 1 e 255).

Se si desidera che l'altezza della forma specifichi la dimensione di tutta la forma e se si utilizzano 10 lunghezze di vettore per eseguirne il disegno, è possibile utilizzare il valore 3,10 per scalare la specifica dell'altezza. Il fattore di scala è cumulativo all'interno di una forma, ossia, moltiplicando per 2 e quindi ancora per 6, si ottiene un fattore di scala di 12. Generalmente l'effetto dei fattori di scala va annullato alla fine della forma, specialmente per le forme secondarie e per i font di testo. Il fattore di scala non viene reimpostato automaticamente.

004

Moltiplicazione delle lunghezze dei vettori per il byte successivo

005

Inserimento della posizione corrente nella pila

Tutto ciò che viene memorizzato deve essere ripristinato. La pila di posizione è dotata solo di quattro posizioni. Se si verifica un overflow dello stack a causa di una quantità eccessiva di memorizzazioni o di una quantità troppo ridotta di prelevamenti, durante il disegno della forma viene visualizzato il messaggio riportato di seguito.

Overflow della pila di posizione nella forma nnn

Analogamente, se si prova a prelevare più posizioni rispetto a quelle memorizzate nella pila, durante il disegno della forma verrà visualizzato il messaggio riportato di seguito.

Underflow della pila di posizione nella forma nnn

006

Prelevamento della posizione corrente dalla pila

007

Disegno del numero di forma secondaria specificato dal byte successivo

Per un font non Unicode il byte di specifica che segue il codice 7 è un numero di forma compreso tra 1 e 255. Per un font Unicode, il codice 7 è seguito da un numero di forma Unicode compreso tra 1 e 65535. I numeri di forma Unicode devono essere conteggiati come due byte.

In questa fase viene disegnata la forma alla quale è assegnato quel numero, nello stesso file di forma. La modalità Disegno non viene ripristinata per la nuova forma. Una volta completata la forma secondaria, riprende il disegno della forma corrente.

008

Spostamento X-Y specificato dai due byte successivi

I byte di specifica del vettore normale consentono di disegnare solo nelle 16 direzioni predefinite e la lunghezza massima è 15. Queste restrizioni rendono le definizioni delle forme più efficienti ma risultano talvolta limitative. Il codice 8 specifica lo spostamento X-Y dato dai due byte successivi. Il codice 8 deve essere seguito da due byte di specifica nel formato seguente:

8,X-displacement,Y-displacement

Gli spostamenti X-Y possono spaziare da -128 a +127. Il segno + iniziale è facoltativo ed è possibile facilitare la lettura utilizzando le parentesi. L'esempio riportato di seguito determina un vettore che disegna, o che si sposta, dieci unità a sinistra e tre in alto.

8,(-10,3)

Dopo i due byte di specifica di spostamento, la forma torna alla modalità Vettore normale.

Il codice 9 consente di disegnare una sequenza di vettori non standard e specifica qualsiasi numero di coppie di spostamento X-Y. La sequenza di codice termina con una coppia (0,0). L'esempio riportato di seguito disegna tre vettori non standard e torna alla modalità Vettore normale.

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

La sequenza di coppie di spostamento X-Y deve terminare con una coppia (0,0) affinché il programma possa riconoscere eventuali vettori normali o codici speciali che seguono.

009

Spostamenti X-Y multipli con terminazione nel punto (0,0)

00A

Arco ottante definito dai due byte successivi

Questo viene definito arco a ottanti in quanto racchiude uno o più ottanti da 45 gradi che iniziano e terminano con un contorno di ottante. Gli ottanti sono numerati in senso antiorario a partire dalla posizione delle ore 3, come illustrato nella figura riportata di seguito.

La specifica dell'arco è

10,radius,(-)0SC

Il raggio può essere un qualsiasi valore compreso tra 1 e 255. Il secondo byte di specifica indica la direzione dell'arco (in senso antiorario se positivo e in senso orario se negativo), l'ottante iniziale ( s , un valore compreso tra 0 e 7) e il numero di ottanti compresi ( c , un valore compreso tra 0 e 7, in cui 0 equivale a otto ottanti o a un cerchio completo). L'utilizzo delle parentesi migliora la leggibilità. Si prenda come esempio il frammento di una definizione di forma riportato di seguito:

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

Questo codice disegna un vettore da una unità in alto e a destra, un arco in senso orario dall'ottante 3 (con il raggio di una unità per due ottanti), quindi un vettore da una unità in basso e a destra, come illustrato nella figura riportata di seguito.

00B

Arco frazionario definito dai cinque byte successivi

La definizione utilizza cinque byte di specifica.

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

start_offset e end_offset rappresentano la distanza in cui inizia o termina un arco rispetto a un contorno di ottante. high_radius rappresenta gli otto bit del raggio più significativi. Il valore sarà 0, a meno che il valore radius non sia superiore a 255 unità. Moltiplicare il valore high_radius per 256 e aggiungere il valore ottenuto al valore radius per generare un raggio di arco maggiore di 255. Il byte di specifica finale e il valore radius sono gli stessi della specifica dell'arco a ottanti (codice 00A descritto in precedenza).

L'offset di inizio viene stabilito calcolando la differenza, in gradi, tra il contorno dell'ottante di inizio (un multiplo di 45 gradi) e l'inizio dell'arco. Questa differenza viene quindi moltiplicata per 256 e divisa per 45. Se l'arco inizia su un contorno di ottante, il rispettivo offset di inizio sarà 0.

L'offset di fine viene calcolato in modo analogo, utilizzando però il numero di gradi presenti tra l'ultimo contorno di ottante attraversato e la fine dell'arco. Se l'arco termina con un contorno di ottante, l'offset di fine sarà 0.

Ad esempio, un arco frazionario da 55 a 95 gradi con un raggio di 3 unità sarebbe codificato come segue:

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

Spiegazione

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

Arco definito dalla curvatura e dallo spostamento X-Y

La loro funzione è simile a quella dei codici 8 e 9, in quanto consentono di specificare gli spostamenti X-Y, anche se i codici 00C e 00D disegnano archi applicando un fattore di curvatura al vettore di spostamento. Il codice 00C disegna un solo segmento di arco, mentre il codice 00D disegna più segmenti di arco (poliarchi) fino al punto in cui viene terminato da uno spostamento (0,0).

Il codice 00C deve essere seguito da tre byte che descrivono l'arco:

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

Sia lo spostamento X e Y che la curvatura, che specifica la curvatura dell'arco, sono compresi tra –127 e +127. Se il segmento di linea specificato dallo spostamento ha lunghezza D e la distanza perpendicolare dal punto medio del segmento ha altezza H, l'apertura della curvatura sarà ((2* H / D) * 127). Il valore è negativo se l'arco che va dalla posizione corrente alla nuova posizione è in senso orario.

Un semicerchio ha curvatura 127 (oppure –127) e costituisce l'arco più grande che è possibile rappresentare come segmento di arco singolo che utilizza questi codici. Per archi di dimensioni maggiori utilizzare due segmenti di arco consecutivi. Una specifica di curvatura 0 è valida e rappresenta un segmento di linea retta. Tuttavia, l'utilizzo del codice 8 per un segmento di linea retta salva un byte nella descrizione della forma.

Il codice del poliarco (00D, oppure 13) è seguito da 0 o da più gruppi da tre di segmenti di arco e termina con uno spostamento (0,0). Dopo lo spostamento finale non sono specificate curvature. La lettera S potrebbe, ad esempio, essere definita dalla seguente sequenza:

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

I segmenti a curvatura zero sono utili all'interno di poliarchi per rappresentare segmenti retti e risultano più efficaci rispetto a terminare il poliarco, inserire un segmento retto e cominciare un altro poliarco.

Il numero -128 non può essere utilizzato nelle definizioni di poliarchi e segmenti di arco.

00D

Più archi definiti dalla curvatura

00E

Elaborazione del comando successivo solo in caso di testo verticale

Quando in una definizione di caratteri si incontra questo codice speciale, il codice successivo viene elaborato oppure ignorato, a seconda dell'orientamento. In caso di orientamento verticale, viene elaborato, in caso di orientamento orizzontale, viene ignorato.

Nel testo orizzontale, il punto di inizio di ciascun carattere è l'estremità sinistra della linea di base. Nel testo verticale, si considera come punto di inizio la parte centrale più alta del carattere. Alla fine di ciascun carattere, viene generalmente disegnato un segmento ottenuto con la condizione di penna alzata fino al punto di inizio del carattere successivo. Per il testo orizzontale, il segmento si trova a destra, per il testo verticale verso il basso. Il codice speciale 00E (14) viene utilizzato soprattutto per regolare le differenze dei punti di inizio e dei punti di fine, consentendo l'utilizzo della stessa definizione di forma di carattere sia in senso orizzontale sia in senso verticale. La definizione riportata di seguito di una D maiuscola potrebbe, ad esempio, essere utilizzata sia nel testo orizzontale sia nel testo verticale.

*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