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