Links und Funktionen
Sprachumschaltung

Navigationspfad


Inhaltsbereich

verkehrsampel_4onX.py

verkehrsampel_4onX.py — text/python-source, 4 KB (4784 bytes)

Dateiinhalt

# -*- coding: cp1252 -*-
# Modellierung einer 3D-Verkehrsampel
# SH, 2009-10-19

from visual import *                    # Import 3D-Modul
from time   import *                    # Import des Zeitmoduls
from threading import *                 # Import des Nebenlaeufigkeitsmoduls

#zentrale Definitionen
LAMPEAUS = (0.2,0.2,0.2)                # dunkelgrau
GEHAEUSE = (0.2,0.3,0.25)               # dunkelgruen
SUED     = ( 1, 0, 0)               
NORD     = (-1, 0, 0)
WEST     = ( 0, 0, 1)
OST      = ( 0, 0,-1)
STRASSE  = (0.1,0.1,0.1)                # fast schwarz
FELD     = (0.4, 0.5, 0.2)              # naturgruen
HIMMEL   = (0.5,0.6,0.8)                # himmelblau

class Lampe(sphere):
    """Licht fuer Ampel"""

    def __init__(self, farbe=(1,0,0), pos=(1,1,1), frame=None,zustand=False):
        "Konstruktor f�r Ampellicht"
        sphere.__init__(self)           # Konstruktoraufruf Oberklasse
        self.farbe = farbe
        self.pos = pos
        self.frame = frame
        self.zustand = zustand
        self.material = materials.emissive
        if zustand:
            self.color = farbe
        else:
            self.color = LAMPEAUS

    def an(self):
        "schaltet Lampe an"
        self.color = self.farbe

    def aus(self):
        "schaltet Lampe aus"
        self.color = LAMPEAUS

    def schalten(self):
        "schaltet Lampe"
        if self.zustand:
            self.color = LAMPEAUS
            self.zustand = False
        else:
            self.color = self.farbe
            self.zustand = True

    def blinken(self, anzahl=10):
        "blinkt im Sekundentakt"
        anzahl = anzahl * 2
        while anzahl:
            self.schalten()
            sleep(1)
            anzahl = anzahl-1
            print anzahl,
            

class Ampel(Thread):                                # Oberklasse Thread ermoeglicht Nebenlaeufigkeit
    """Ampel mit 3 Lampen, Gehaeuse und Stange"""

    def __init__(self, pos=(0,0,0), blickRicht=(1,0,0)):
        "Konstruktor 3D-Verkehrsampel"
        Thread.__init__(self)                       # Aufruf des Konstruktor von Thread 
        self.f = frame(pos=pos, axis=blickRicht)    # 'Rahmen'-Objekt fasst alle Teilobjekte zusammen 
        self.rot  = Lampe(frame=self.f, farbe=(1,0,0), pos=(0,7,1))
        self.gelb = Lampe(frame=self.f, farbe=(1,1,0), pos=(0,5,1))
        self.gruen= Lampe(frame=self.f, farbe=(0,1,0), pos=(0,3,1))
        self.kasten=box(frame=self.f, pos=(0,5,0), height=7, width=3, length=3, color=GEHAEUSE, opacity=0.9)
        self.stange=cylinder(frame=self.f, color=GEHAEUSE, pos=(0,-10,0), radius=0.7, axis=(0,12,0))

    def posNeu(self, x,y,z):
        "Ampelposition neu setzen"
        self.f.pos = (x,y,z)

    def blickNeu(self, blickRicht):
        "Ampelausrichtung neu setzen"
        self.f.axis = blickRicht

    def stoerung(self,blinkZahl=10):
        "Gelblichtblinken bei Stoerung"
        self.rot.aus()
        self.gruen.aus()
        self.gelb.blinken(blinkZahl)

    def schalten(self):
        "Durchlauf Ampelzyklus: gelb->ge+ro->ro->ro+ge->gr"
        # gelb
        self.rot.aus()
        self.gelb.an()
        self.gruen.aus()
        sleep(1)                                    # Wartezeit in Sekunden
        # rot
        self.rot.an()
        self.gelb.aus()
        sleep(7)
        # rot + gelb
        self.gelb.an()
        sleep(2)
        # gruen
        self.rot.aus()
        self.gelb.aus()
        self.gruen.an()
        sleep(6)

    def run(self):
        "Anschalten der Ampel fuer Dauerbetrieb"
        while 1:                                    # fuer immer...
            self.schalten()
        


if __name__ == "__main__":


# Himmel und Hintergrundbeleuchtung
    scene.background = HIMMEL
    scene.ambient = color.gray(0.9)
    #scene.stereo = "redcyan"
    
    # Skalierung auf Ampel
    scene.autoscale = 1
    a1 = Ampel(pos=(10, 0,10),  blickRicht=SUED)

    a2 = Ampel(pos=(10,0,-10), blickRicht=OST)
    a3 = Ampel(pos=(-10,0,-10), blickRicht=NORD)
    a4 = Ampel(pos=(-10,0,10), blickRicht=WEST)

    # Untergrundgestaltung ohne Autoskalierung, kein Zoomen mehr
    scene.autoscale = 0
    strara_ns = box(pos=(0,-10.1,0), size=(1000,1,10.5), color=(1,1,1))
    stra_ns   = box(pos=(0,-10,0), size=(1000,1,10), color=STRASSE)
    strara_ow = box(pos=(0,-10.1,0), size=(10.5,1,1000), color=(1,1,1))
    stra_ow   = box(pos=(0,-10,0), size=(10,1,1000), color=STRASSE)
    wiese     = box(pos=(0,-15,0), size=(1000,10,1000), color=FELD)
    scene.userzoom = 0
    
    
    a1.start()
    a3.start()
    sleep(8)
    a2.start()
    a4.start()
        
""""""

Funktionsleiste