Beschreibungen und Beispiele zum Raytracer POV-Ray von Friedrich A. Lohmüller
    POV-Ray Beispiele - Die Erstellung von Objekten für POV-Ray
English English English
Italiano Italiano
Français français

Home
- POV-Ray Tutorial

  - POV-Ray Beispiele
    Inhaltsübersicht
  - Geometrie
  - Architektur
  - Technik
    - Leiter
    - Masten
    - Geländer
    - Brücke
    - Röhren
    - Rohrabzweigung
    - Rohr-Absperrhahn
    - Kette
    - Drahtspule
    - Torpedo
    - Cruise Missile
    - Rakete
    - Rad
    - Truck
    - Propeller
    - Flugzeug
    - Kanu
    - Gitarrenbody
    - 7-Segment Display
    - Flachbandkabel
    - Kabelbaum
                                       
 
7-Segment_LCD


7-Segment Display (LCD)

Objekte: box, polygon.
Methoden: #declare, #local, union, #macro, #while, #if #else, #switch, array.

Erstellung eines 7-Segment Displayes (LCD - liquid crystal display) :
 

Schritt 1: Ein einzelnes 7-Segment-Element:

Zunächst bauen wir unter Verwendung eines Polygons ein einzelnes LCD-Element, wofür wir eine geschlossene Kette von Randpunkten benötigen:

// polygon { Anzahl der Punkte,
//                  Liste der <x,y>-Punkte
//                  in geschlossener Serie! }
#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

Schritt 2: Das 7-Segment-Element als ein Makro

Um die Farben des Elements von activ zu inactiv ändern zu können müssen wir die Definition in eine Makro-Definition verwandeln:

#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 --------------------------

Wir können dieses Macro mit jedere gewünschten Farbe aufrufen:

#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
7-Segment LCD Elemente

Schritt 3: 7-Segment-LED als Makro:

Das folgende Makro verwendet das vorhergehende Makro "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));
//---------------------------------------------
// The sequence of the elements:
//      -       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

Zusatz-Schritt:
      Geschertes 7-Segment-LCD.

Wenn wir bei der Marke "//*)" zu unserem Makro eine
Scherungs-Matrix hinzufügen:

 matrix< 1,  0,  0, // matrix-shear_z_to_x
         0,  1,  0,
     Shear_Factor, 0,  1,
         0,  0,  0 >
dann müssen wir das Hintergrund-Panel durch entsprechendes Skalieren anpassen:
< 1.70, 10, 1.40>
Seven_Segment_LCD
Eine gescherte 7-Segment LCD Anzeige.
Sicher können sie nun das gegenwärtige LCD dahingehend erweitern, dass es in der Lage ist auch einige wichtige nicht- numerische Zeichen darzustellen:
Seven_Segment_LCD
Ein Lo-7-Segment LCD. :-)



Szenenbeschreibung für
ein einfaches 7-Segment LCD
in POV-Ray:
"Seven_Segment_9.txt" or
"Seven_Segment_9.pov"



Und jetzt ist es an Ihnen ein Display mit mehreren Stellen und perfekter als dieses zu entwickeln:
Seven_Segment_LED
Ein 7-Segment LCD
mit 4 Stellen und Dezimalpunkt.
Gebrauchsferige POV-Ray Objekte als
Include-Dateien mit Beispieldateien findet man
auf der POV-Ray-Objects-Seite.
top
© Friedrich A. Lohmüller, 2009
www.f-lohmueller.de