|
From: Poul R. <Pou...@sk...> - 2011-10-13 06:24:50
|
Bru...@nc... writes:
>To hide a Visual object just make it invisible: ball.visible = False.
>This does not delete the object from computer memory, and you can make
>it visible again later.
>
>If however you later re-use the name ball, for example by creating a
>new object and naming it ball, Python will be free to release the
>memory used by the object formerly named ball (assuming no other names
>currently refer to that object). If the object is visible when you
>re-use the name ball, the original object will not be deleted from
>computer memory, and it will remain visible in the window.
>
>After you make an object named ball invisible, you can delete it
>immediately with del ball.
Oh, yes, that's from the manual. Nevertheless, I cannot make it work (see
below).
Poul Riis
## Demonstrates some techniques for working with "faces", and
## shows how to build a height field (a common feature request)
## with it.
## David Scherer July 2001
## Revised January 2010 by Bruce Sherwood to use faces.smooth() function
## introduced with VPython 5.2
## Revised March 2010 by Bruce Sherwood to use faces.make_normals() and
## faces.make_twosided() functions introduced with VPython 5.3
from visual import *
from time import *
class Model:
def __init__(self):
self.frame = frame()
self.model = faces(frame=self.frame, color=color.cyan)
self.vertices = []
def FacetedTriangle(self, v1, v2, v3, color=color.white):
"""Add a triangle to the model"""
for v in (v1,v2,v3):
self.vertices.append(v)
def FacetedPolygon(self, *v):
"""Appends a planar polygon of any number of vertices to the
model"""
for t in range(len(v)-2):
self.FacetedTriangle( v[0], v[t+1], v[t+2] )
def DrawNormals(self, scale):
pos = self.model.pos
normal = self.model.normal
for i in range(len(pos)):
arrow(pos=pos[i], axis=normal[i]*scale)
class Mesh (Model):
def __init__(self, xvalues, yvalues, zvalues):
Model.__init__(self)
points = zeros( xvalues.shape + (3,), float )
points[...,0] = xvalues
points[...,1] = yvalues
points[...,2] = zvalues
for i in range(zvalues.shape[0]-1):
for j in range(zvalues.shape[1]-1):
self.FacetedPolygon( points[i,j], points[i,j+1],
points[i+1,j+1], points[i+1,j] )
self.model.pos = self.vertices
self.model.make_normals()
self.model.smooth()
self.model.make_twosided()
## Graph a function of two variables (a height field)
x = arange(-1,1,2./20)
y = arange(-1,1,2./20)
z = zeros( (len(x),len(y)), float )
x,y = x[:,None]+z, y+z
surface=Mesh( x, (sin(x*pi)+sin(y*pi))*0.2, y )
sleep(1)
surface.visible=False
del surface
surface=Mesh( x, (sin(x*pi)+sin(2*y*pi))*0.2, y )
|