| Home | Trees | Indices | Help |
|
|---|
|
|
1 #!/usr/bin/env python
2 #
3 # The Vision Egg: ScreenPositionServer
4 #
5 # Copyright (C) 2001-2003 Andrew Straw.
6 # Author: Andrew Straw <astraw@users.sourceforge.net>
7 # URL: <http://www.visionegg.org/>
8 #
9 # Distributed under the terms of the GNU Lesser General Public License
10 # (LGPL). See LICENSE.TXT that came with this file.
11 #
12 # $Id$
13
14 """Handle 3D perspective projection (server-side)"""
15
16 import Pyro.core
17
18 import sys, os, string
19 import VisionEgg.Core
20 import VisionEgg.FlowControl
21 import VisionEgg.SphereMap
22 import VisionEgg.Textures
23 import VisionEgg.PyroHelpers
24
25 from VisionEgg.PyroApps.ScreenPositionGUI import ScreenPositionParameters
26
27 __version__ = VisionEgg.release_name
28 __cvs__ = string.split('$Revision$')[1]
29 __date__ = string.join(string.split('$Date$')[1:3], ' ')
30 __author__ = 'Andrew Straw <astraw@users.sourceforge.net>'
31
33 """Encapsulates all parameters controlling screen position"""
35 Pyro.core.ObjBase.__init__(self)
36 self.meta_params = ScreenPositionParameters()
37 if not isinstance(presentation,VisionEgg.FlowControl.Presentation):
38 raise ValueError("Expecting instance of VisionEgg.FlowControl.Presentation")
39 if not isinstance(projection,VisionEgg.Core.PerspectiveProjection):
40 raise ValueError("Expecting instance of VisionEgg.Core.PerspectiveProjection")
41 self.p = presentation
42 self.proj = projection
43
46
48 if isinstance(new_parameters, ScreenPositionParameters):
49 self.meta_params = new_parameters
50 else:
51 raise ValueError("Argument to set_parameters must be instance of ScreenPositionParameters")
52 self.update()
53
55 left = self.meta_params.left
56 right = self.meta_params.right
57 bottom = self.meta_params.bottom
58 top = self.meta_params.top
59 near = self.meta_params.near
60 far = self.meta_params.far
61
62 eye = (self.meta_params.eye[0],
63 self.meta_params.eye[1],
64 self.meta_params.eye[2])
65
66 center = (self.meta_params.center[0],
67 self.meta_params.center[1],
68 self.meta_params.center[2])
69
70 up = (self.meta_params.up[0],
71 self.meta_params.up[1],
72 self.meta_params.up[2])
73
74 temp = VisionEgg.Core.PerspectiveProjection(left,right,bottom,top,near,far)
75 temp.look_at(eye,center,up)
76 self.proj.parameters.matrix = temp.get_matrix()
77
80
82 self.p.parameters.quit = 1
83
84 # Don't do anything unless this script is being run
85 if __name__ == '__main__':
86
87 pyro_server = VisionEgg.PyroHelpers.PyroServer()
88
89 # get Vision Egg stimulus ready to go
90 screen = VisionEgg.Core.Screen.create_default()
91 filename = os.path.join(VisionEgg.config.VISIONEGG_SYSTEM_DIR,"data/az_el.png")
92 texture = VisionEgg.Textures.Texture(filename)
93 sphere_map = VisionEgg.SphereMap.SphereMap(texture=texture,
94 shrink_texture_ok=1,
95 stacks=100,
96 slices=100)
97 temp = ScreenPositionParameters()
98
99 projection = VisionEgg.Core.PerspectiveProjection(temp.left,
100 temp.right,
101 temp.bottom,
102 temp.top,
103 temp.near,
104 temp.far)
105 viewport = VisionEgg.Core.Viewport(screen=screen,stimuli=[sphere_map],projection=projection)
106 p = VisionEgg.FlowControl.Presentation(viewports=[viewport])
107
108 # now hand over control of stimulus to GratingExperimentMetaController
109 projection_controller = ScreenPositionMetaController(p,projection)
110 pyro_server.connect(projection_controller,"projection_controller")
111
112 # get listener controller and register it
113 p.add_controller(None,None, pyro_server.create_listener_controller())
114
115 # enter endless loop
116 p.run_forever()
117
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Sat Jun 7 09:06:51 2008 | http://epydoc.sourceforge.net |