/
actions.py
250 lines (182 loc) · 7.08 KB
/
actions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
""" The various actions for the Scene plugin. """
# Author: Prabhu Ramachandran <prabhu_r@users.sf.net>
# Copyright (c) 2005-2007, Enthought, Inc.
# License: BSD Style.
# Enthought library imports.
from pyface.api import FileDialog, OK
from pyface.action.api import Action
from traits.api import Instance, Property, Str
class SceneAction(Action):
""" Base class for actions that require a scene manager. """
#### 'SceneAction' interface ##############################################
# The scene manager.
scene_manager = Property(Instance(
'tvtk.plugins.scene.i_scene_manager import ISceneManager'
))
def _get_scene_manager(self):
""" Trait property getter. """
from tvtk.plugins.scene.i_scene_manager import (
ISceneManager
)
return self.window.get_service(ISceneManager)
class NewScene(Action):
""" An action that creates a new TVTK scene. """
#### 'Action' interface ###################################################
name = 'Scene'
def perform(self, event):
""" Performs the action. """
from tvtk.plugins.scene.scene_editor import SceneEditor
editor = self.window.edit(object(), kind=SceneEditor)
return editor
class SaveScene(SceneAction):
""" An action that saves a scene to an image. """
#### 'Action' interface ###################################################
name = 'Save Scene'
def perform(self, event):
""" Performs the action. """
extensions = [
'*.png', '*.jpg', '*.jpeg', '*.tiff', '*.bmp', '*.ps', '*.eps',
'*.tex', '*.rib', '*.wrl', '*.oogl', '*.pdf', '*.vrml', '*.obj',
'*.iv'
]
wildcard = '|'.join(extensions)
dialog = FileDialog(
parent = self.window.control,
title = 'Save scene to image',
action = 'save as',
wildcard = wildcard
)
if dialog.open() == OK:
scene = self.scene_manager.current_scene
if scene is not None:
scene.save(dialog.path)
return
class SaveSceneToImage(SceneAction):
""" An action that saves a scene to an image. """
#### 'Action' interface ###################################################
# Name of the action.
name = 'Image'
#### 'SaveSceneToImage' interface #########################################
# The save method name.
save_method = Str('save')
# The wildcard for the file dialog.
wildcard = Str("All files (*.*)|*.*")
###########################################################################
# 'Action' interface.
###########################################################################
def perform(self, event):
""" Perform the action. """
dialog = FileDialog(
parent = self.window.control,
title = 'Save scene to %s' % self.name,
action = 'save as',
wildcard = self.wildcard
)
if dialog.open() == OK:
scene = self.scene_manager.current_scene
if scene is not None:
method = getattr(scene, self.save_method)
method(dialog.path)
return
# These are all specific subclasses that save particular images.
class SaveSceneToPNG(SaveSceneToImage):
name = 'PNG Image'
save_method = 'save_png'
wildcard = 'PNG images (*.png)|*.png|' \
'All files (*.*)|*.*'
class SaveSceneToJPEG(SaveSceneToImage):
name = 'JPEG Image'
save_method = 'save_jpg'
wildcard = 'JPEG images (*.jpg)|*.jpg|' \
'JPEG images (*.jpeg)|*.jpeg|' \
'All files (*.*)|*.*'
class SaveSceneToBMP(SaveSceneToImage):
name = 'BMP Image'
save_method = 'save_bmp'
wildcard = 'BMP images (*.bmp)|*.bmp|' \
'All files (*.*)|*.*'
class SaveSceneToTIFF(SaveSceneToImage):
name = 'TIFF Image'
save_method = 'save_tiff'
wildcard = 'TIFF images (*.tif)|*.tif|' \
'TIFF images (*.tiff)|*.tiff|' \
'All files (*.*)|*.*'
class SaveSceneToPS(SaveSceneToImage):
name = 'PostScript bitmap Image'
save_method = 'save_ps'
wildcard = 'PostScript bitmap images (*.ps)|*.ps|' \
'All files (*.*)|*.*'
class SaveSceneToGL2PS(SaveSceneToImage):
name = 'Vector PS/EPS/PDF/TeX'
save_method = 'save_gl2ps'
wildcard = 'All files (*.*)|*.*|' \
'EPS files (*.eps)|*.eps|' \
'PS files (*.ps)|*.ps|' \
'PDF files (*.pdf)|*.pdf|' \
'TeX files (*.tex)|*.tex'
class SaveSceneToRIB(SaveSceneToImage):
name = 'RenderMan RIB file'
save_method = 'save_rib'
wildcard = 'RIB files (*.rib)|*.rib|' \
'All files (*.*)|*.*'
class SaveSceneToOOGL(SaveSceneToImage):
name = 'GeomView OOGL file'
save_method = 'save_oogl'
wildcard = 'OOGL files (*.oogl)|*.oogl|' \
'All files (*.*)|*.*'
class SaveSceneToIV(SaveSceneToImage):
name = 'OpenInventor file'
save_method = 'save_iv'
wildcard = 'OpenInventor files (*.iv)|*.iv|' \
'All files (*.*)|*.*'
class SaveSceneToVRML(SaveSceneToImage):
name = 'VRML file'
save_method = 'save_vrml'
wildcard = 'VRML files (*.wrl)|*.wrl|' \
'All files (*.*)|*.*'
class SaveSceneToOBJ(SaveSceneToImage):
name = 'Wavefront OBJ file'
save_method = 'save_wavefront'
wildcard = 'OBJ files (*.obj)|*.obj|' \
'All files (*.*)|*.*'
class SetView(SceneAction):
""" An action that sets the current scene to a particular view."""
#### 'SetView' interface ##################################################
# The method to invoke on the scene that will set the view.
view_method = Str
###########################################################################
# 'Action' interface.
###########################################################################
def perform(self, event):
""" Perform the action. """
scene = self.scene_manager.current_scene
if scene is not None:
method = getattr(scene, self.view_method)
method()
return
# These are all specific subclasses that invoke particular views.
class ResetZoom(SetView):
name = '&Reset Zoom'
view_method = 'reset_zoom'
class IsometricView(SetView):
name = '&Isometric View'
view_method = 'isometric_view'
class XPlusView(SetView):
name = '&X+ View'
view_method = 'x_plus_view'
class XMinusView(SetView):
name = '&X- View'
view_method = 'x_minus_view'
class YPlusView(SetView):
name = '&Y+ View'
view_method = 'y_plus_view'
class YMinusView(SetView):
name = '&Y- View'
view_method = 'y_minus_view'
class ZPlusView(SetView):
name = '&Z+ View'
view_method = 'z_plus_view'
class ZMinusView(SetView):
name = '&Z- View'
view_method = 'z_minus_view'
#### EOF ######################################################################