mercoledì 18 settembre 2013

Guida a Jgraph programma che serve a tracciare grafici e diagrammi strutturati: poligoni e curve di Bézier.

Maria Susana Diaz | 16:33 |
Jgraph è un programma che serve a tracciare grafici e diagrammi strutturati.

Diversamente da altri strumenti per il disegno, Jgraph è un programma non interattivo: legge un file di input (il sorgente) e produce un file di output (la presentazione) in formato PostScript oppure EPS.

L'output può in seguito essere quindi visualizzato, stampato, incorporato in un altro file per ulteriori elaborazioni oppure convertito in altri formati.

Inoltre, si noti che Alml (il sistema di composizione SGML di Daniele Giacomini) offre supporto - a partire da gennaio 2006 - per il linguaggio Jgraph.

Questo capitolo costituisce una introduzione di livello elementare all'uso e alle caratteristiche principali del programma, senza alcuna prestesa di essere esauriente.

La documentazione di riferimento più completa per Jgraph è costituita dalla pagina di manuale, cui si rinvia il lettore interessato per gli eventuali approfondimenti.
jgraph galfiltered
Poligoni.
La possibilità di tracciare dei poligoni estende non poco le capacità grafiche del programma Jgraph: è sufficiente applicare l'attributo poly alla curva da tracciare. Gli attributi pfill e pcfill permettono inoltre di specificare una scala di grigio o un colore per la campitura del poligono. L'attributo linethickness consente di controllare lo spessore del perimetro.





È possibile campire il poligono con un disegno a strisce in alternativa alla campitura solida mediante ppattern stripe inclinazione, ove inclinazione controlla l'inclinazione delle strisce. Infine, se si indica -1 come colore di campitura del poligono viene tracciato solamente il bordo mentre l'interno rimane vuoto, il che può essere talvolta desiderabile.
newgraph
xaxis min 0 max 10 size 5
yaxis min 0 max 10 size 5
(* Draw a red trapezoid -- setting both the fill and color to be red means
   that the entire trapezoid, and not just the interior, will be red. *)
newline poly pcfill 1 0 0 color 1 0 0
   pts 1 1  3 1   2.5 2  1.5 2
(* Draw a big black square *)
newline poly pfill 0 pts 3 3  10 3  10 10  3 10
(* Draw a thick yellow triangle with a purple, striped interior inside the black
   square *)
newline poly linethickness 5 color 1 1 0 pcfill 1 0 1 ppattern stripe 60
   pts  4 4   8 4  6 6
(* Draw a blue triangle with a thick border no fill *)

newline poly linethickness 10 color 0 0 1 pfill -1 pts 4 9  6 5 8 8
f-poly-jgrCurve di Bézier.
Si possono generare delle linee curve con Jgraph se si interpretano alcuni dei punti indicati come punti di controllo per una curva di Bézier.
newgraph
xaxis min 0 max 10 nodraw
yaxis min 0 max 10 nodraw
(* Draw the outline of the football *)
newline bezier poly pcfill .543 .270 .074 pts
  0 5   3 10   7 10    10 5
        7 0    3 0     0 5
(* Draw the main thread *)
newline bezier linethickness 4 gray 1 pts
  3 7 4.5 8 5.5 8 7 7
(* Draw the crossthreads *)
copycurve nobezier pts 3.5 6.7 3.3 7.5
copycurve pts 6.5 6.7 6.7 7.5
copycurve pts 4.2 7.1 4.1 7.9
copycurve pts 5.8 7.1 5.9 7.9
copycurve pts 5 7.3  5 8
.1
f-football-jgrAltre caratteristiche.
Dall'interno di un sorgente Jgraph è possibile invocare un comando della shell o un programma esterno scrivendo shell : comando; l'output generato viene contestualmente incluso nel sorgente.

Ovviamente si tratta di una caratteristica estremamente interessante e potente, poiché permette di utilizzare strumenti come Perl, Awk e simili per il tracciamento di grafici di funzione, estrazione e manipolazione di dati, ecc.; parallelamente si tratta di una caratteristica potenzialmente pericolosa, in quanto Jgraph non effettua nessun controllo sul comando che viene eseguito, aprendo così il varco a possibili cavalli di Troia.

Prestare dunque un'adeguata cautela!
Un'altra caratteristica interessante di Jgraph è quella di poter utilizzare una qualunque immagine in formato EPS come indicatore, utilizzando l'attributo di curva eps.

Infine, si noti che è possibile tracciare più di un grafico nella stessa immagine mediante un ulteriore newgraph oppure mediante copygraph: in quest'ultimo caso il grafico successivo eredita gli assi dal precedente. Il posizionamento relativo dei vari grafici è gestibile mediante gli attributi di grafico x_translate e y_translate.
newgraph
xaxis min 0 max 10 size 1 label fontsize 16 font Times-Italic : Graph 1
yaxis min 0 max 10 size 1
newcurve marktype box linetype solid pts 1 10 2 8 5 5 8 3 10 2
copygraph
x_translate 2
xaxis label : Graph 2
newcurve marktype box linetype solid pts 10 10 8 8 5 5 8 3 10 2
f-copygraph-jgrUtilizzo programmatico.
Il punto di forza dei programmi non interattivi è quello di poter essere facilmente utilizzati come anelli di una catena di strumenti o processi; la connessione delle varie parti può essere gestita semplicemente mediante generiche pipeline, o addirittura mediante specifici programmi «wrapper», progettati per uno scopo preciso, che costruiscano programmaticamente l'input da far elaborare.

«njgraph.pl»
Un esempio interessante è il programma njgraph.pl di Neil Spring. Si tratta di un piccolo sorgente in Perl che in pratica realizza una specie di programma frontale per Jgraph: esso legge dallo standard input una singola serie di dati da rappresentare graficamente, e dopo averli opportunamente passati a Jgraph per l'elaborazione invoca GV, a meno che lo standard output non venga rediretto. Il programma njgraph.pl riconosce altresì gli attributi marktype, linetype e color (e relativi valori) facoltativamente presenti sulla riga di comando, e li posiziona opportunamente all'interno del sorgente Jgraph prima dell'elaborazione.
$ njgraph.pl[Invio]
automatically invoking gv; redirect if you want something else
1 7 2 3 3 8 4 6 5 3 6 2 7 4 8 7 9 5 10 7[Invio]
[Ctrl d]
[q]
$ njgraph.pl marktype box linetype dashed color 1 0 0[Invio]
automatically invoking gv; redirect if you want something else
1 7 2 3 3 8 4 6 5 3 6 2 7 4 8 7 9 5 10 7[Invio]
[Ctrl d]
[q]
$
njgraph-output-1 njgraph-output-2

Se ti è piaciuto l'articolo, iscriviti al feed per tenerti sempre aggiornato sui nuovi contenuti del blog:


Trovato questo articolo interessante? Condividilo sulla tua rete di contatti in Twitter, sulla tua bacheca su Facebook, in Linkedin, Instagram o Pinterest. Diffondere contenuti che trovi rilevanti aiuta questo blog a crescere. Grazie!

LINKEDIN