/[escript]/trunk/pyvisi/py_src/scene.py
ViewVC logotype

Annotation of /trunk/pyvisi/py_src/scene.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 600 - (hide annotations)
Fri Mar 17 05:53:59 2006 UTC (13 years, 8 months ago) by gross
File MIME type: text/x-python
File size: 8346 byte(s)
some renaming
1 cochrane 337 # Copyright (C) 2004-2005 Paul Cochrane
2     #
3     # This program is free software; you can redistribute it and/or
4     # modify it under the terms of the GNU General Public License
5     # as published by the Free Software Foundation; either version 2
6     # of the License, or (at your option) any later version.
7     #
8     # This program is distributed in the hope that it will be useful,
9     # but WITHOUT ANY WARRANTY; without even the implied warranty of
10     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11     # GNU General Public License for more details.
12     #
13     # You should have received a copy of the GNU General Public License
14     # along with this program; if not, write to the Free Software
15     # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16    
17     # $Id: scene.py,v 1.23 2005/11/03 05:55:59 paultcochrane Exp $
18    
19     ## @file scene.py
20    
21     """
22     Class and functions associated with a pyvisi Scene
23     """
24    
25     # generic imports
26     from pyvisi.common import debugMsg, overrideWarning, fileCheck
27    
28     from pyvisi.renderer import Renderer
29    
30     __revision__ = '$Revision: 1.23 $'
31    
32     class Scene(object):
33     """
34     The main object controlling the scene.
35    
36     This is the base Scene object. It should be inherited, and then its
37     methods overridden.
38     """
39    
40     def __init__(self):
41     """
42     The init function
43     """
44     object.__init__(self)
45     debugMsg("Called Scene.__init__()")
46    
47     self.renderer = Renderer()
48    
49     self.xSize = 640
50     self.ySize = 480
51    
52     def add(self, obj):
53     """
54     Add a new item to the scene
55    
56     @param obj: The object to add to the scene
57     @type obj: object
58     """
59     debugMsg("Called Scene.add()")
60    
61     if obj is None:
62     raise ValueError, "You must specify an object to add"
63    
64     # print a warning message if get to here
65     overrideWarning("Scene.add")
66    
67     return
68    
69     def delete(self, obj):
70     """
71     Delete an item from the scene
72    
73     @param obj: The object to remove
74     @type obj: object
75     """
76     debugMsg("Called Scene.delete()")
77    
78     if obj is None:
79     raise ValueError, "You must specify an object to delete"
80    
81     # print a warning message if get to here
82     overrideWarning("Scene.delete")
83    
84     return
85    
86     def place(self, obj):
87     """
88     Place an object within a scene
89    
90     @param obj: The object to place within the scene
91     @type obj: object
92     """
93     debugMsg("Called Scene.place()")
94    
95     if obj is None:
96     raise ValueError, "You must specify an object to place"
97    
98     # print a warning message if get to here
99     overrideWarning("Scene.place")
100    
101     return
102    
103     def render(self, pause=False, interactive=False):
104     """
105     Render (or re-render) the scene
106    
107     Render the scene, either to screen, or to a buffer waiting for a save
108    
109     @param pause: Flag to wait at end of script evaluation for user input
110     @type pause: boolean
111    
112     @param interactive: Whether or not to have interactive use of the output
113     @type interactive: boolean
114     """
115     debugMsg("Called Scene.render()")
116     renderer = self.renderer
117    
118     # I don't yet know where to put this, but just to get stuff going...
119     renderer.runString("# Scene.render()\n")
120    
121     # optionally print out the evaluation stack to make sure we're doing
122     # the right thing
123     debugMsg("Here is the evaluation stack")
124     debugMsg(60*"#")
125     debugMsg(renderer.getEvalStack())
126     debugMsg(60*"#")
127    
128     # execute the eval stack
129     evalStack = renderer.getEvalStack()
130     exec evalStack in self.renderer.renderDict
131    
132     # flush the evaluation stack
133     debugMsg("Flusing evaluation stack")
134     renderer.resetEvalStack()
135    
136     # this is just to stop lint from complaining that pause and
137     # interactive aren't used
138     if pause is not True or pause is not False:
139     raise ValueError, "\'pause\' must be either True or False"
140    
141     if interactive is not True or pause is not False:
142     raise ValueError, "\'interactive\' must be either True or False"
143    
144     return
145    
146     def save(self, fname, format):
147     """
148     Save the scene to a file
149    
150     @param fname: The name of the file to save the scene to
151     @type fname: string
152    
153     @param format: The format in which to save the scene
154     @type format: Image object or string
155     """
156     debugMsg("Called Scene.save()")
157    
158     if fname is None or fname == "":
159     raise ValueError, "You must specify an output filename"
160    
161     if format is None or format == "":
162     raise ValueError, "You must specify an image format"
163    
164     # now check the type of arguments sent in
165     if __debug__:
166     assert isinstance(fname, str), "Incorrect data type; expected str"
167     assert isinstance(format, str), "Incorrect data type; expected str"
168    
169     # do a check to see if the file exists
170     fileCheck(fname)
171    
172     # print a warning message if get to here
173     overrideWarning("Scene.save")
174    
175     return
176    
177     write = save
178    
179     def setBackgroundColor(self, *color):
180     """
181     Sets the background color of the Scene
182    
183     @param color: The color to set the background to. Can be RGB or CMYK
184     @type color: tuple
185     """
186     debugMsg("Called Scene.setBackgroundColor()")
187    
188     # print a warning message if get to here
189     overrideWarning("Scene.setBackgroundColor")
190    
191     # pity this code doesn't work....
192     # need to check on the values given in the *color array.
193     # if they're greater than 1, scale so that the largest is 1
194     #maxColor = None
195     #for i in range(len(color)):
196     #if color[i] > 1:
197     #maxColor = color[i]
198     #print maxColor
199    
200     ## if a maximum colour is found, then scale the colours
201     #if maxColor is not None:
202     #for i in range(len(color)):
203     #color[i] = color[i]/maxColor
204    
205     # if color is of length 3, then we have rgb
206     # if length is 4 then cmyk
207     # if length is 1 then greyscale
208     # otherwise barf
209     if len(color) == 3:
210     # ok, using rgb
211     # probably should use a Color object or something
212     # this will do in the meantime
213     pass
214     else:
215     raise ValueError, "Sorry, only RGB color is supported at present"
216    
217     return
218    
219     def getBackgroundColor(self):
220     """
221     Gets the current background color setting of the Scene
222     """
223     debugMsg("Called Scene.getBackgroundColor()")
224    
225     # print a warning message if get to here
226     overrideWarning("Scene.getBackgroundColor")
227    
228     return
229    
230     def setSize(self, xSize, ySize):
231     """
232     Sets the size of the scene.
233    
234     This size is effectively the renderer window size.
235    
236     @param xSize: the size to set the x dimension
237     @type xSize: int
238    
239     @param ySize: the size to set the y dimension
240     @type ySize: int
241     """
242     debugMsg("Called Scene.setSize()")
243    
244     # make sure that the arguments are the right kind of thing
245     if __debug__:
246     assert isinstance(xSize, int), "Incorrect data type; expected int"
247     assert isinstance(ySize, int), "Incorrect data type; expected int"
248    
249     self.xSize = xSize
250     self.ySize = ySize
251    
252     return
253    
254     def getSize(self):
255     """
256     Gets the current size of the scene
257    
258     This size is effectively the renderer window size. Returns a tuple
259     of the x and y dimensions respectively, in pixel units(??).
260     """
261     debugMsg("Called Scene.getSize()")
262    
263     return (self.xSize, self.ySize)
264    
265     def rendererCommand(self, command):
266     """
267     Allows the user to run a low-level renderer-specific command directly
268    
269     @param command: The renderer command to run as a string
270     @type command: string
271     """
272     debugMsg("Called Scene.rendererCommand()")
273     # check that we get a string as input
274     if __debug__:
275     assert isinstance(command, str), "Incorrect data type; expected str"
276    
277     evalString = "%s" % command
278     self.renderer.runString(evalString)
279     return
280    
281     # vim: expandtab shiftwidth=4:

  ViewVC Help
Powered by ViewVC 1.1.26