Descriptions et exemples pour le POV-Ray raytracer par Friedrich A. Lohmueller
      Objets POV-Ray - Comment faire des objets pour POV-Ray
English English English
Italiano  Italiano
Deutsch 

Page d'Accueil
- POV-Ray Tutorial

  - Exemples POV-Ray
   Table des matières
  - Architecture
  - Geometrie
  - Technique
    - Échelle
    - Pylônes
    - Garde-fou, Rambarde
    - Pont
    - Tuyaux
    - Bifurcation de Tuyau
    - Robinet d'Arrêt
    - Chaîne
    - Bobine de fil
    - Torpedo
    - Cruise Missile
    - Missile
    - Roue
    - Camion
    - Hélice
    - Avion
    - Canoë
    - Guitare
    - Afficheur 7 segments
    - Câble plat - Nappe plat
    - Harnais de câbles
                                       
 
7-Segment_LCD

Afficheur en 7 segments
(LCD - liquid crystal display)

Objets : box, polygon.
Méthodes : #declare, #local, union, #macro, #while,
                  #if #else, #switch, array.

Comment faire un afficheur numérique à cristaux liquides en sept segments
(7-segment LCD) :

 

Point 1 : Un seule élément à cristaux liquides : Pour construire un seule élément de LCD
polygon with closed serie of border points :
// polygon { nombre de points,
//                  liste de points <x,y> - une serie serrée !}
#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

Point 2 : Un élément de 7-segment-LCD comme macro

Pour rendre possible le changement du couleur de l'élément de actif à inactif nous devons convertir la définition dans une définition de 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 --------------------------

We can call this macro with any color we want:

#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
Un élément de 7-segment LCD

Point 3 : Seven_Segment_LED macro:

La macro suivant ha besoin delle macro précédée "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 sequence des éléments :
//      -       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
7-segment LCD

Part additionnel :
      Une transvection des segments.

Si nous ajoutons à macro au marquage "//*)"
une matrice de transvection

 matrix< 1,  0,  0, // matrix-shear_z_to_x
         0,  1,  0,
     Shear_Factor, 0,  1,
         0,  0,  0 >
nous devons addapter l'échelle du font par
< 1.70, 10, 1.40>
Seven_Segment_LCD
La transvection du 7-segment LCD.
Alors, bien sure vous êtes en état à ajouter à notre affichage à cristaux liquides quelques signes non-numériques importantes :
Seven_Segment_LCD
Un affichage à cristaux liquides parfait ! :-)



La description de la scène pour
un seule affichage à cristaux liquides
avec 7 segments en POV-Ray:
"Seven_Segment_9.txt" ou
"Seven_Segment_9.pov"



Maintenant c'est votre part ajouter plus des chiffres et perfectionner l'objet comme suivant :
Seven_Segment_LCD
Un affichage à cristaux liquides avec 7 segments à 4 chiffres et points.
Objets prêt à l'usage pour POV-Ray comme
fichiers include avec fichiers exemple
on peut trouver sur la POV-Ray Objects page.
top

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