donut_drehend.py
                   Ein drehender Donut, bestehend aus zwei Ringen, kann mit Mausklick garniert werden. Ein Skriptparameter kontrolliert  die maximale Streuselanzahl.
                
            
            
        
                             
                             
                             donut_drehend.py — text/python-source, 1 KB (1854 bytes)
Dateiinhalt
# -*- coding: utf-8 -*-
# 3D-Donut
# Einbinden der Module: 3D, Zufall, System (argumentvektor)
from visual import *
from random import random
from sys    import argv
# Abfrage Argumentvektor, ansonsten Standard einsetzen
if len(argv) > 1:
    maxstreusel = int(argv[1]) # String wird in int umgewandelt!
else:
    maxstreusel = 20
# Fenstertitel, Kameraposition, Stereodarstellung
scene.title = "Streusel auf den Donut!"
scene.forward = (0,-.5,-1)
#scene.stereo = "redcyan"
# Teig und Glasur werden im Rahmen donut gefangen
donut = frame()
teig = ring(thickness=0.55, color=(.9,.8,.2), axis=(0,1,0), frame=donut)
glasur= ring(thickness=0.56, color=(.3,.2,.1),\
             material=materials.plastic, y=0.1, axis=(0,1,0), frame=donut)
# Konstanten
winkel=0.5
streuselzahl=0
# Streuselverbrauch
anzeige = label(pos=donut.pos, text="Streuselverbrauch", \
               box=False, line=False, yoffset=150, height=10)
while streuselzahl < maxstreusel:
    # max. 50 Bilder pro Sekunde
    rate(50)
    # Rotation des Frames um y-Achse um 'winkel' pro Bild
    donut.rotate(angle=radians(winkel), axis=(0,1,0))
    # Abgfrage: Maus-Event ereignet?
    if scene.mouse.events:
        # Maus-Event in Variable speichern
        sme = scene.mouse.getevent()
        # Verarbeitung des Maus-Events: Maus über Glasur und Taste gedrückt?
        if sme.pick == glasur and sme.press:
            # Streuselprotokoll
            streuselzahl += 1
            # erzeuge Streusel relativ zu 'donut'
            sphere(pos=donut.world_to_frame(sme.pickpos), color=color.hsv_to_rgb((random(),1,1)), \
                   radius=0.05, material=materials.plastic, frame=donut)   
            anzeige.text="Verbrauch: "+str(streuselzahl)+" Streusel"
            print streuselzahl,
# Mögliche weitere Aufgaben:
# Rotationsrichtung per Pfeiltasten ändern
#...
            
