Descrizioni ed esempi per il raytracer POV-Ray di Friedrich A. Lohmüller
Esempi POV-Ray - Come fare oggetti per POV-Ray
English English English
Français français
Deutsch Deutsch

Home
- POV-Ray Tutorial

  - Esempi per POV-Ray
   Indice generale
  - Geometria
  - Architettura
  - Tecnica
    - Scala a Pioli
    - Piloni e Tralicci
    - Parapetto
    - Ponte
    - Tubature
    - Bifucazione di Tubi
    - Rubinetto di Arresto
    - Catena
    - Bobina di filo
    - Torpedo
    - Cruise Missile
    - Razzo, Missile
    - Ruota
    - Camion
    - Elica
    - Aeroplano
    - Canoa
    - Chitarra
    - Display a 7 Segmenti
    - Cavo piatto
    - Fascio di cavi
                                       
 
7-Segment_LCD

Display a sette segmenti
La costruzione di un display a cristalli liquidi a 7 segmenti.
Oggetti: box, polygon.
Metodi: #declare, #local, union, #macro, #while, #if #else, #switch, array.


Come si fa un display a cristalli liquidi a sette segmenti:

Passo 1: Un ingsolo segmento:

Dapprima facciamo un elemento singolo usando un
poligono con una una serie chiusa di punti delimitanti :
// polygon { numero dei punti,
//                  lista dei punti <x,y> - serie chiusa! }
#local SS_Width = 1.2;
#local SS_Length = 6.0;
#local SS_Diag = sqrt(SS_Width*SS_Width)/2;

#declare Seven_Segment_Element = //---------
polygon {  7,
  <-SS_Length/2, 0>,
  <-SS_Length/2+SS_Diag, -SS_Width/2>,
  < SS_Length/2-SS_Diag, -SS_Width/2>,
  < SS_Length/2, 0>,
  < SS_Length/2-SS_Diag,  SS_Width/2>,
  <-SS_Length/2+SS_Diag,  SS_Width/2>,
  <-SS_Length/2, 0>
  texture{
    pigment{ color rgb< 1, 0, 0> }
    finish { ambient 0.9 diffuse 0.1 phong 1}
         } // end of texture
  rotate<90,0,0>//turn it on the floor !!
} // end of polygon --------------------------
Seven_Segment_Element

Passo 2: Il singolo segmento come macro

Per avere l'occasione di cambiare from il colore di attivo a inattivo dobbiamo convertire questa definizione di un segmento a una definizone con un macro:

#macro SS7_Element( SS_Color__ )
#local SS_Width = 1.2;
#local SS_Length = 6.0;
#local SS_Diag = sqrt(SS_Width*SS_Width)/2;

polygon {  7,
  <-SS_Length/2, 0>,
  <-SS_Length/2+SS_Diag, -SS_Width/2>,
  < SS_Length/2-SS_Diag, -SS_Width/2>,
  < SS_Length/2, 0>,
  < SS_Length/2-SS_Diag,  SS_Width/2>,
  <-SS_Length/2+SS_Diag,  SS_Width/2>,
  <-SS_Length/2, 0>
  texture{SS_Color__}
  rotate<90,0,0>//turn it on the floor !!
} // end of polygon --------------------------

Possiamo usare questo macro con ogni colore desirato:

#declare Active =   // red
  texture{
     pigment{ color rgb< 1, 0, 0>}
     finish { ambient 0.9 diffuse 0.1}
  } // end of texture
#declare Inactive =   //gray
  texture{
     pigment{ color rgb<1,1,1>*0.2}
  } // end of texture

object{
  S7_Element( Active )
  translate<0,0.001, 0.7>}
object{
  S7_Element(Inactive)
  translate<0,0.001,-0.7>}
Seven_Segment_Element
Singoli segmenti di un display a cristalli liquidi

Passo 3: Seven_Segment_LED macro:

Il macro seguente usa il macro precedente "SS7_Element(...)"!
//--------------------------------------------
#macro Seven_Segment( SS_Number,
                      SS_Angle,
                      SS_Background_Scale,
                      SS_Light_Color,
                      SS_Shade_Color,
                      SS_Background_Color,
                    ) //----------------------
//--------------------------------------------
#local SS_Len = 6.2;
#local D = 0.0001;  // just a little bit !!
#local Shear_Factor =  tan(radians(SS_Angle));
//--------------------------------------------
// La sequenza degli elementi:
//      -       1
//    /  /   6    2
//     -        7
//  /  /     5    3
//   -          4
//--------------------------------------------
#switch (SS_Number)
#case(0)
 #local Lights_On = array [7] {1,1,1,1,1,1,0}
#break
#case(1)
 #local Lights_On = array [7] {0,1,1,0,0,0,0}
#break
#case(2)
 #local Lights_On = array [7] {1,1,0,1,1,0,1}
#break
#case(3)
 #local Lights_On = array [7] {1,1,1,1,0,0,1}
#break
#case(4)
 #local Lights_On = array [7] {0,1,1,0,0,1,1}
#break
#case(5)
 #local Lights_On = array [7] {1,0,1,1,0,1,1}
#break
#case(6)
 #local Lights_On = array [7] {1,0,1,1,1,1,1}
#break
#case(7)
 #local Lights_On = array [7] {1,1,1,0,0,0,0}
#break
#case(8)
 #local Lights_On = array [7] {1,1,1,1,1,1,1}
#break
#case(9)
 #local Lights_On = array [7] {1,1,1,1,0,1,1}
#break
#else // nothing - all off!!!
 #local Lights_On = array [7] {0,0,0,0,0,0,0}
#break
#end //  end of switch for arrays
//---------------------------------------
#macro Light_Color(Num)
#if(Lights_On[Num] = 1)  SS_Light_Color
#else                    SS_Shade_Color
#end
#end //--------------------- end of macro
union{

 union{
 object{ S7_Element( Light_Color(1-1)) 
translate<0,0, SS_Len> } object{ S7_Element( Light_Color(7-1)) translate<0,0, 0> } object{ S7_Element( Light_Color(4-1)) translate<0,0,-SS_Len> } object{ S7_Element( Light_Color(2-1)) rotate<0,90,0> translate< SS_Len/2,0, SS_Len/2>} object{ S7_Element( Light_Color(3-1)) rotate<0,90,0> translate< SS_Len/2,0,-SS_Len/2>} object{ S7_Element( Light_Color(6-1)) rotate<0,90,0> translate<-SS_Len/2,0, SS_Len/2>} object{ S7_Element( Light_Color(5-1)) rotate<0,90,0> translate<-SS_Len/2,0,-SS_Len/2>} //*) } // end LEDs box{ <-SS_Len/2,-0.01 ,-SS_Len>, < SS_Len/2,-0.0000001, SS_Len> scale SS_Background_Scale texture {SS_Background_Color}} translate<0,D,0> } // end of union #end //---------------------- end of macro //---------------------------------------- #declare Active_Texture = // red texture{ pigment{ color rgb< 1,0,0>*1.2} finish { ambient .9 diffuse .1 phong 1} } // end of texture #declare Inactive_Texture = // gray texture{ pigment{ color rgb<1,1,1>*0.3} finish { phong 1 reflection 0.00} } // end of texture #declare Background_Texture = // ~black texture{ pigment{ color rgb<1,1,1>*0.05} finish { phong 1 reflection 0.10} } // end of texture //---------------------------------------- //---------------------------------------- object{ Seven_Segment( 9, // 0~9, integer !!! SS_Number, 0, // 0~10, SS_Angle for shearing, < 1.5, 10, 1.40>, // SS_Background_Scale, // < 1.70, 10, 1.40>, //for SS_Angle=10 Active_Texture, // SS_Light_Color, Inactive_Texture, //SS_Shade_Color, Background_Texture, //SS_Background_Color, ) //------------------------------------ scale 0.1 rotate< 0,0,0> translate<0,0.05,0> } //----------------------------------------
Seven_Segment_LCD
Display a cristalli liquidi a sette segmenti

Passo Addizionale:
     Scorrimento elastico dei sette segmenti

Per questo dobbiamo inserire nel macro alla marca "//*)"
una matrice di scorrimento elastico:

 matrix< 1,  0,  0, // matrix-shear_z_to_x
         0,  1,  0,
     Shear_Factor, 0,  1,
         0,  0,  0 >
ma poi dobbiamo adattare la scala del fondo con
< 1.70, 10, 1.40>
Seven_Segment_LCD
Scorrimento elastico dei sette segmenti
Adesso siamo sicuro in grado di fare un LCD che posso anche presentare altri simboli non-numerici molto importanti:
Seven_Segment_LCD
Un 7 segment LCD tipo Lo. :-)



Descizione della scena per
un singolo display a cristalli liquidi
a sette segmenti
per POV-Ray:
"Seven_Segment_9.txt" o
"Seven_Segment_9.pov"



Allora, tocca a lei fare un display con più di cifre e con una apparenza più perfetta come questo:
Seven_Segment_LCD
Un display a sette segmenti LCD
con 4 cifre e punti.
Oggetti pronto per l'uso per POV-Ray
come Archivi include con archivi esempio
si trova su la Paggina POV-Ray Objects.
top

© Friedrich A. Lohmüller, 2011
www.f-lohmueller.de