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() """"""