Sunday, 30 April 2017
Armando copas (vpython)

Armando copas (animación)

Armando copas (vpython))
 
Ejercicio ilustrativo sobre el uso de los menúes en vpython. Utiliza una instancia de la clase  cylinder y otra de cone. Los items del menú controlan atributos de dichas instancias como color y posición.


#*****************************
from visual.controls import *
import os
def movercopa(a,m):
    if a.pos.x==0:
        #a.pos=(30,0,0)
        while a.pos.x<=30:
            rate(40)
            a.pos.x+=0.1
            a.pos.y-=0.1/3
    else:
        #a.pos=(0,10,0)
        while a.pos.x>=0:
            rate(40)
            a.pos.x-=0.1
            a.pos.y+=0.1/3
        a.pos.x=0   
   
def movertallo(a,m):
    if a.pos.x==0:
        while a.pos.x>=-20:
            rate(40)
            a.pos.x-=0.1
    else:
        while a.pos.x<=0:
            rate(40)
            a.pos.x+=0.1
   
def colorcopa(a):
    if a.color==color.green:
        a.color=color.blue
    else:
        a.color=color.green       

def colortallo(a):
    if a.color==color.magenta:
        a.color=color.cyan
    else:
        a.color=color.magenta

m11=1
m12=1
display(background=(1,0,0), title="Armando  copas", width=700, height=500, center=(10,5,0),autoscale = 1)
tallo= cylinder(radius=2,  length = 10, color=color.cyan, axis=(0,1,0), pos=(0,0,0))
copa= cone(pos=(0,10,0), axis=(0,1,0), length=20,radius=6, color= (0,1,0))

c = controls(x=150, y=400, width=450, height=350, range=90)

m1 = menu(pos=(0,0,0), heigth=7, width=55,height =8, text='Posiciones', color=color.orange, foreground=color.orange)
m2 = menu(pos=(50,0,0), heigth=7, width=55,height =8, text='Colores', color=color.blue, foreground=color.orange)
# After creating the menu heading, add menu items:
m1.items.append(('Mover copa', lambda: movercopa(copa,m11)) )# specify menu item
m1.items.append(('Mover tallo', lambda: movertallo(tallo,m12)))

m1.items.append(('---------',None)) # a dummy separator

m2.items.append(('Color copa', lambda: colorcopa(copa)) )# specify color
m2.items.append(('Color tallo', lambda: colortallo(tallo)) )# specify color

while 1:
    rate(4)
    c.interact( )
#********************************


{backbutton}