Sintassi di base

In fase di aggiornamento alla versione 3

Indice

In breve

Commento multilinea

/* ... */

commenti singola linea

// ...
# ...

disegna un cerchio

CIRCLE []

disegna un quadrato

SQUARE []

disegna un triangolo (equilatero)

TRIANGLE []

trasla verso destra

x 1

trasla verso l’alto

y 1

ruota del numero di gradi specificato

r 30
rotate 30

ribalta rispetto all’asse specificato con un angolo

flip 30
TRIANGLE [ flip 180] // un triangolo con la punta verso il basso

stira rispetto agli assi, 0..+/-90, 0..+/-90

skew 30 0
SQUARE [ skew 30 0 ] // stira rispetto all'asse x

tonalità, colore, 0..360

hue 100

hue 0  // rosso
hue 30 // arancio
hue 60 // giallo

brillantezza, 0..1

b 0.5
brightness 0.5

b 0 // black
b 1 // white

saturarazione, 0..1

sat 0.5
saturation 0.5

sat 1   // colore pieno
sat 0.3 // colore slavato

trasparenza, 0..1

a 0.5
alpha 0.5 

a 1   // colore pieno 
a 0.3 // trasparente

colore sfondo

background [ /* ... */ ]

background [ b -1 ] // sfondo nero
background [ a -1 ] // sfondo trasparente

direttiva di inclusione (senza parentesi angolari…)

import sorgente.cfdg

background


Con la direttiva background si specifica il colore dello sfondo per l’immagine. È facoltativa.

La forma più complessa prevede tutti i parametri per il colore

background [ alpha ... brightness ... hue ... saturation ... ]

Altrimenti sono applicati i valori di default che producono bianco opaco.

Alcuni valori sono di uso più frequente

background [ brightness -1 ] // nero opaco
background [ alpha -1 ]      // trasparente

Coordinate colore


Il colore di un’immagine dipende da 4 parametri secondo il sistema HSBA

  • hue, [0, 360)
  • saturation, [0, 1] [-1, +1]
  • brightness, [0, 1] [-1, +1]
  • alpha, [0, 1] [-1, +1]

Per hue il valore specificato viene aggiunto mentre per gli altri tre viene aumentato della percentuale?!


Sostituzione


Una regola

rule FIGUREBASE{ /* ... */ }

specifica un elenco di nomi di figure primitive, eventualmente con parametri

startshape FIGUREBASE

rule FIGUREBASE
{
   SQUARE{}
   CIRCLE{x -1}
   TRIANGLE{x +1}
}

oppure un elenco di regole, eventualmente con parametri

startshape FIGUREBASE

rule FIGUREBASE
{
   FIGURA1{}
   FIGURA2{}
   FIGURA3{}
}
rule FIGURA1 { SQUARE{}       }
rule FIGURA2 { CIRCLE{x -1}   }
rule FIGURA3 { TRIANGLE{x +1} }

oppure sia nomi di figure che regole

startshape FIGUREBASE

rule FIGUREBASE
{
   SQUARE{}
   FIGURA2{}
}
rule FIGURA2
{
   CIRCLE{x -1}
   FIGURA3{}
}
rule FIGURA3
{
   TRIANGLE{x +1}
}

I tre codici precedenti producono la stessa immagine…

ContextFree segue il percorso delle regole, a partire da quella specificata con startshape, e effettuando una sorta di sostituzione di ogni regola con la definizione corrispondente, continua finché ottiene una sequenza di specifiche di figure primitive che costituiscono il risultato finale.

Nel primo caso

FIGUREBASE{} ⇒ SQUARE{}
             ⇒ CIRCLE{x -1}
             ⇒ TRIANGLE{x +1}

Nel secondo

FIGUREBASE{} ⇒ FIGURA1{} ⇒ SQUARE{}
             ⇒ FIGURA2{} ⇒ CIRCLE{x -1}
             ⇒ FIGURA3{} ⇒ TRIANGLE{x +1}

Nel terzo

FIGUREBASE{} ⇒ SQUARE{}
             ⇒ FIGURA2{} ⇒ CIRCLE{x -1}
                         ⇒ FIGURA3{}    ⇒ TRIANGLE{x +1}

Parametri


Se la chiamata di una regola ha dei parametri allora le alterazioni si ripercuotono a catena sulle chiamate successive

Il cerchio ha la dimensione, size, ridotta al 75% di quella del quadrato, il triangolo al 75% di quella del cerchio, quindi al 56,25% di quella del quadrato…

Analogamente per brightness aumenta la brillantezza del 33% ad ogni passo.

startshape FIGUREBASE

rule FIGUREBASE
{
   SQUARE {}
   FIGURA2{s 0.75 b 0.33}
}
rule FIGURA2
{
   CIRCLE {}
   FIGURA3{s 0.75 b 0.33}
}
rule FIGURA3
{ 
   TRIANGLE{}
}

In pratica

FIGUREBASE{} ⇒ SQUARE{}              
             ⇒ (s 0.75 b 0.33) FIGURA2{} 
                 ⇒ (s 0.75 b 0.33) CIRCLE{}
                 ⇒ (s 0.75 b 0.33) FIGURA3{}
                     ⇒ (s 0.75 b 0.33) (s 0.75 b 0.33) TRIANGLE{}

Il triangolo subisce gli effetti di due trasformazioni

(s 0.75 b 0.33) (s 0.75 b 0.33)

Si può ottenere lo stesso risultato con il codice seguente

startshape FIGUREBASE

rule FIGUREBASE
{
   SQUARE  {}
   CIRCLE  {s 0.75   b 0.33}
   TRIANGLE{s 0.5625 b 0.44} // da controllare...
}

Ripetizione


Quando si vuole ripetere la stessa figura più volte si può ripetere la chiamata, cambiando per esempio la proprietà x

startshape CERCHI4

rule CERCHI4
{
   CERCHI1{}
   CERCHI1{x +1}
   CERCHI1{x +2}
   CERCHI1{x +3}
}
rule CERCHI1
{
   CIRCLE {}
   CERCHI1{ s 0.75 b 0.2 }
}

Esiste la possibilità di indicare quante volte si vuole ripetere la chiamata e come cambiano le proprietà

startshape CERCHI4

rule CERCHI4
{
   4*{x +1}CERCHI1{}
}
rule CERCHI1
{
   CIRCLE {}
   CERCHI1{ s 0.75 b 0.2 }
}

Quando il numero di ripetizioni è elevato questa possibilità aiuta a non commettere errori!

Confronta il codice seguente con l’originale!

startshape COLORE

rule COLORE
{
    24*{r 15 hue 15 }SQUARE{ x +1 size 0.3 sat 1 b 1 }
}

A questo punto conviene approfittare della ripetizione: 360 volte con angolo 1°

startshape COLORE

rule COLORE
{
   360*{r 1 hue 1 }SQUARE{ x 1.5 size 1 0.1 sat 1 b 1 }
}

La semplicità con cui si possono posizionare le figure su una circonferenza permette spunti interessanti

startshape RUOTARER

rule RUOTARER
{
    CIRCLE { size 4 b 0.55 }
    12*{r +30}TRIANGLE { x +2 size 0.66 1 }
}

Traslazione


La figura primitiva è disegnata al centro in (0, 0) ma tramite i parametri x e y può essere traslata lungo i due assi

In questo esempio x e y assumono i valori -2 0 +2. L’ordinata non specificata vale 0.

startshape TRASLARE

rule TRASLARE
{
   SQUARE  { size 4 b 0.6 } // grigio chiaro, grande centrato
   QUADRATI{ }
}
rule QUADRATI
{
   SQUARE{ x -2 y -2 b 0.3 }
   SQUARE{      y -2 b 0.3 }
   SQUARE{ x +2 y -2 b 0.3 }
   SQUARE{ x -2      b 0.3 }
   SQUARE{                 } // nero, al centro
   SQUARE{ x +2      b 0.3 }
   SQUARE{ x -2 y +2 b 0.3 }
   SQUARE{      y +2 b 0.3 }
   SQUARE{ x +2 y +2 b 0.3 }
}

Rotazione


La figura può essere ruotata tramite il parametro rotate (rot, r)

Il quadrato è utilizzato per evidenziare la rotazione dei triangoli.

Il centro del triangolo è sempre sul lato.

startshape RUOTARE

rule RUOTARE
{
   SQUARE   { x 1.5 y 1.5 size 3 b 0.5 }
   TRIANGOLI{}
}

rule TRIANGOLI
{
   TRIANGOLO{ }
   TRIANGOLO{ x +1      rotate +30  }
   TRIANGOLO{ x +2      rotate +60  }
   TRIANGOLO{ x +3      rotate +90  }
   TRIANGOLO{ x +3 y +1 rotate +120 }
   TRIANGOLO{ x +3 y +2 rotate +150 }
   TRIANGOLO{ x +3 y +3 rotate +180 }

   TRIANGOLO{ y +1      rotate -30  }
   TRIANGOLO{ y +2      rotate -60  }
   TRIANGOLO{ y +3      rotate -90  }
   TRIANGOLO{ x +1 y +3 rotate -120 }
   TRIANGOLO{ x +2 y +3 rotate -150 }
}

rule TRIANGOLO 
{ 
   TRIANGLE{ size .66 1 }
}

Ribaltamento


La figura può essere ribaltata rispetto a un asse passante per il suo centro e con l’angolo specificato dal parametro tramite flip (f )

Il quadrato è utilizzato per evidenziare la rotazione dei triangoli.
Il centro del triangolo è sempre sul lato.

startshape RIBALTARE

rule RIBALTARE
{
    SQUARE { x 1.5 y 1.5 size 3 b 0.5 }
    TRIANGOLI{}
}

rule TRIANGOLI
{
    TRIANGOLO{                     }
    TRIANGOLO{ x +1      flip  +30 }
    TRIANGOLO{ x +2      flip  +60 } 
    TRIANGOLO{ x +3      flip  +90 }
    TRIANGOLO{ x +3 y +1 flip +120 }
    TRIANGOLO{ x +3 y +2 flip +150 } 
    TRIANGOLO{ x +3 y +3 flip +180 }

    TRIANGOLO{      y +1 flip  -30 }
    TRIANGOLO{      y +2 flip  -60 } 
    TRIANGOLO{      y +3 flip  -90 }
    TRIANGOLO{ x +1 y +3 flip -120 }
    TRIANGOLO{ x +2 y +3 flip -150 } 
}

rule TRIANGOLO
{ 
    TRIANGLE{ size .66 1 }
}

Ridimensionamento


La figura può essere ridimensionata rispetto agli assi x e y tramite il parametro size

Il valore di default per il quadrato nero centrale è size 1 1.
Se compare un solo valore si riferisce a entrambe le dimensioni.

startshape SCALARE

rule SCALARE
{
   SQUARE  { size 4 b 0.66 }
   QUADRATI{}
}
rule QUADRATI
{
   SQUARE{ x -2 y -2 size 0.5 0.5 b 0.33 }
   SQUARE{ y -2      size 1   0.5 b 0.33 }
   SQUARE{ x +2 y -2 size 2   0.5 b 0.33 }
   SQUARE{ x -2      size 0.5 1   b 0.33 }
   SQUARE{ }
   SQUARE{ x +2      size 2   1   b 0.33 }
   SQUARE{ x -2 y +2 size 0.5 2   b 0.33 }
   SQUARE{ y +2      size 1   2   b 0.33 }
   SQUARE{ x +2 y +2 size 2   2   b 0.33 }
}

Stiramento


A partire da una figura primitiva si possono ottenere versioni deformate tramite il parametro skew

Il quadrato centrale subisce la stiratura con angoli di -30° -15° 0° +15° +30° per entrambi gli assi

startshape STIRARE

rule STIRARE
{
   SQUARE  { size 8 b 0.66 }
   SQUARE  { size 4 b 0.33 }
   QUADRATI{ }
}

rule QUADRATI
{
   SQUARE{ x -4 y +4 skew -30 +30 }
   SQUARE{ x -2 y +4 skew -15 +30 }
   SQUARE{ y +4      skew   0 +30 }
   SQUARE{ x +2 y +4 skew +15 +30 }
   SQUARE{ x +4 y +4 skew +30 +30 }
   SQUARE{ x -4 y +2 skew -30 +15 }
   SQUARE{ x -2 y +2 skew -15 +15 }
   SQUARE{ y +2      skew   0 +15 }
   SQUARE{ x +2 y +2 skew +15 +15 }
   SQUARE{ x +4 y +2 skew +30 +15 }
   SQUARE{ x -4      skew -30   0 }
   SQUARE{ x -2      skew -15   0 }
   SQUARE{                        }
   SQUARE{ x +2      skew +15   0 }
   SQUARE{ x +4      skew +30   0 }
   SQUARE{ x +4 y -2 skew +30 -15 }
   SQUARE{ y -2      skew   0 -15 }
   SQUARE{ x +2 y -2 skew +15 -15 }
   SQUARE{ x -2 y -2 skew -15 -15 }
   SQUARE{ x -4 y -2 skew -30 -15 }
   SQUARE{ x -4 y -4 skew -30 -30 }
   SQUARE{ x -2 y -4 skew -15 -30 }
   SQUARE{ y -4      skew   0 -30 }
   SQUARE{ x +2 y -4 skew +15 -30 }
   SQUARE{ x +4 y -4 skew +30 -30 }
}

Note

  • skew -30 +30 equivale a rotate +30
  • skew +30 -30 equivale a rotate -30.

Brillantezza


La figura può essere disegnata con brillantezza variabile da 0.0 a 1.0 tramite il parametro brightness o b

startshape BRILLANTEZZA

rule BRILLANTEZZA
{
   SQUARE      { }
   BRILLANTEZZA{ size 0.9 brightness 0.1 }
}

Note

  • Il primo quadrato ha brillantezza a 0, nero
  • A ogni passo il valore aumenta del 10% fino a diventare 1, bianco.

Saturazione


La figura può avere una saturazione di colore variabile da 0.0 a 1.0 tramite il parametro saturation o sat

In ogni quadrato il risultato dipende anche dal parametro brightness

startshape SATURAZIONE

rule SATURAZIONE
{
   SATURAZIONE1{ }
   SATURAZIONE2{ x +1 }
   SATURAZIONE3{ x +2 }
   SATURAZIONE4{ x +3 }
}
rule SATURAZIONE1
{
   SQUARE      { b 0.25 }
   SATURAZIONE1{ size 0.9 saturation 0.1 }
}
rule SATURAZIONE2
{
   SQUARE      { b 0.5 }
   SATURAZIONE2{ size 0.9 saturation 0.1 }
}
rule SATURAZIONE3
{
   SQUARE      { b 0.75 }
   SATURAZIONE3{ size 0.9 saturation 0.1 }
}
rule SATURAZIONE4
{
   SQUARE      { b 1 }
   SATURAZIONE4{ size 0.9 saturation 0.1 }
}

Note

  • Il valore di default per hue è 0, rosso
  • brightness parte con 0, buio completo…

Tonalità


La figura può avere una tonalità di colore variabile da 0.0 a 360.0 tramite il parametro hue

La tonalità di colore dipende dall’angolo in gradi di una immaginaria ruota delle tonalità.
Tutti i quadrati hanno i parametri di colore saturation e brightness settati a 1 per avere colori saturi.

startshape COLORE

rule COLORE
{
   QUADRATO [ rotate   0 x +1 hue   0 ] // rosso
   QUADRATO [ rotate  15 x +1 hue  15 ] 
   QUADRATO [ rotate  30 x +1 hue  30 ]
   QUADRATO [ rotate  45 x +1 hue  45 ]
   QUADRATO [ rotate  60 x +1 hue  60 ] // giallo
   QUADRATO [ rotate  75 x +1 hue  75 ]
   QUADRATO [ rotate  90 x +1 hue  90 ] // verde
   QUADRATO [ rotate 105 x +1 hue 105 ] 
   QUADRATO [ rotate 120 x +1 hue 120 ] 
   QUADRATO [ rotate 135 x +1 hue 135 ] 
   QUADRATO [ rotate 150 x +1 hue 150 ] 
   QUADRATO [ rotate 165 x +1 hue 165 ] 
   QUADRATO [ rotate 180 x +1 hue 180 ] 
   QUADRATO [ rotate 195 x +1 hue 195 ] 
   QUADRATO [ rotate 210 x +1 hue 210 ]
   QUADRATO [ rotate 225 x +1 hue 225 ]
   QUADRATO [ rotate 240 x +1 hue 240 ]
   QUADRATO [ rotate 255 x +1 hue 255 ]
   QUADRATO [ rotate 270 x +1 hue 270 ] 
   QUADRATO [ rotate 285 x +1 hue 285 ] 
   QUADRATO [ rotate 300 x +1 hue 300 ] 
   QUADRATO [ rotate 315 x +1 hue 315 ] 
   QUADRATO [ rotate 330 x +1 hue 330 ] 
   QUADRATO [ rotate 345 x +1 hue 345 ] 
 //QUADRATO [ rotate 360 x +1 hue 360 ] 
}
rule QUADRATO
{
   SQUARE{ size .33 saturation 1 brightness 1 }
}

Trasparenza


Una figura può avere un certo grado di trasparenza per il suo colore tramite il parametro alpha che varia tra -1.0 e 0.0

I rettangoli di colore grigio e nero si intravedono attraverso i quadrati rossi semitrasparenti.
Il valore di default è 0, non trasparente.
I 5 quadrati hanno i parametri di colore saturation e brightness settati a 1 per essere di colore saturo.

startshape TRASPARENZA

rule TRASPARENZA
{
   SQUARE  { size 6 0.5 brightness 0.5 } // striscia grigia
   SQUARE  { y -0.5 size 6 0.5         } // striscia nera
   QUADRATI{                           }
}
rule QUADRATI
{
   QUADRATO{ x -2 alpha -0.10 } // trasparenza al 10%
   QUADRATO{ x -1 alpha -0.30 }
   QUADRATO{ alpha -0.50      }
   QUADRATO{ x +1 alpha -0.70 }
   QUADRATO{ x +2 alpha -0.90 } // trasparenza al 90%
}
rule QUADRATO 
{ 
   SQUARE { saturation 1 brightness 1 } 
}

Ordine di valutazione dei parametri


I parametri possono essere racchiusi tra parentesi graffe oppure quadre.
L’ordine di valutazione dei parametri cambia e determina risultati diversi

Le parentesi graffe portano a un ordine di valutazione dei parametri fisso TRSSF

  1. translate
  2. rotate
  3. scale
  4. skew
  5. flip

mentre le parentesi quadre forzano la valutazione da sinistra a destra.

startshape VALUTAZIONE

rule VALUTAZIONE
{
   VALUTAZIONE1{           }
   VALUTAZIONE2{ x +5      }
   VALUTAZIONE3{      y -5 }
   VALUTAZIONE4{ x +5 y -5 }
}
rule VALUTAZIONE1
{

   SQUARE {      x +1       }
   SQUARE { r 15 x +2 b .25 }
   SQUARE { r 30 x +3 b .50 }
   SQUARE { r 45 x +4 b .75 }
}
rule VALUTAZIONE2
{
   SQUARE { x +1            }
   SQUARE { x +2 r 15 b .25 }
   SQUARE { x +3 r 30 b .50 }
   SQUARE { x +4 r 45 b .75 }
}
rule VALUTAZIONE3
{
   SQUARE [ x +1            ]
   SQUARE [ x +2 r 15 b .25 ]
   SQUARE [ x +3 r 30 b .50 ]
   SQUARE [ x +4 r 45 b .75 ]
}
rule VALUTAZIONE4
{
   SQUARE [      x +1       ]
   SQUARE [ r 15 x +2 b .25 ]
   SQUARE [ r 30 x +3 b .50 ]
   SQUARE [ r 45 x +4 b .75 ]
}

Lascia un commento