Welcome to mirror list, hosted at ThFree Co, Russian Federation.

Scene.py « doc « api2_2x « python « blender « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: caa5b56e8d56282577ec27af345c2174631ea7a4 (plain)
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
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
# Blender.Scene module and the Scene PyType object

"""
The Blender.Scene submodule.

B{New}:
	- L{Scene.clearScriptLinks<Scene.Scene.clearScriptLinks>} accepts a parameter now.
	- acess methods L{Scene.getLayers<Scene.Scene.getLayers>}, L{Scene.setLayers<Scene.Scene.setLayers>} via lists to complement the layers and
		Layers Scene attributes which use bitmasks. 

Scene
=====

This module provides access to B{Scenes} in Blender.

Example::
	import Blender
	from Blender import Scene, Object, Camera
	#
	camdata = Camera.New('persp')           # create new camera data
	camdata.name = 'newCam'
	camdata.lens = 16.0
	scene = Scene.New('NewScene')           # create a new scene
	scene.objects.new(camdata,'Camera')     # add a new object to the scene with newly-created data
	scene.makeCurrent()                     # make this the current scene

@warn: B{scene.objects.new} is the preferred way to add new objects to a scene.
	The older way is to create an object with B{Object.New()}, link the
	data to the new object, then link the object to the scene.  This way is
	not recommended since a forgotten step or run-time error in the script can 
	cause bad things to be done to Blender's database.

	If you use this older method, it's recommended to always perform the
	operations in this order.  This is because if
	there is no object data linked to an object B{ob}, B{scene.link(ob)} will
	automatically create the missing data.  This is OK on its own, but I{if
	after that} object B{ob} is linked to obdata, the automatically created one
	will be discarded -- as expected -- but will stay in Blender's memory
	space until the program is exited, since Blender doesn't really get rid of
	most kinds of data.  So first linking ObData to object, then object to
	scene is a tiny tiny bit faster than the other way around and also saves
	some realtime memory (if many objects are created from scripts, the
	savings become important).
"""

def New (name = 'Scene'):
	"""
	Create a new Scene in Blender.
	@type name: string
	@param name: The Scene name.
	@rtype: Blender Scene
	@return: The created Scene.
	"""

def Get (name = None):
	"""
	Get the Scene(s) from Blender.
	@type name: string
	@param name: The name of a Scene.
	@rtype: Blender Scene or a list of Blender Scenes
	@return: It depends on the I{name} parameter:
			- (name): The Scene with the given I{name};
			- ():     A list with all Scenes currently in Blender.
	"""

def GetCurrent():
	"""
	Get the currently active Scene in Blender.
	@rtype: Blender Scene
	@return: The currently active Scene.
	"""

def Unlink(scene):
	"""
	Unlink (delete) a Scene from Blender.
	@type scene: Blender Scene
	@param scene: The Scene to be unlinked.
	"""
	
from IDProp import IDGroup, IDArray
class Scene:
	"""
	The Scene object
	================
		This object gives access to Scene data in Blender.
	@type Layers: integer (bitmask)
	@ivar Layers: The Scene layers (check also the easier to use
		L{layers}).  This value is a bitmask with at least
		one position set for the 20 possible layers starting from the low order
		bit.  The easiest way to deal with these values in in hexadecimal 
		notation.
		Example::
			scene.Layers = 0x04 # sets layer 3 ( bit pattern 0100 )
			scene.Layers |= 0x01
			print scene.Layers # will print: 5 ( meaning bit pattern 0101)
		After setting the Layers value, the interface (at least the 3d View and
		the Buttons window) needs to be redrawn to show the changes.
	@type layers: list of integers
	@ivar layers: The Scene layers (check also L{Layers}).
		This attribute accepts and returns a list of integer values in the
		range [1, 20].
		Example::
			scene.layers = [3] # set layer 3
			scene.layers = scene.layers.append(1)
			print scene.layers # will print: [1, 3]
	@type objects: sequence of objects
	@ivar objects: The scene's objects. The sequence supports the methods .link(ob), .unlink(ob), and .new(obdata), and can be iterated over.
	@type cursor: Vector (wrapped)
	@ivar cursor: the 3d cursor location for this scene.
	@type camera: Camera or None
	@ivar camera: The active camera for this scene (can be set)
	@type world: World or None
	@ivar world: The world that this scene uses (if any)
	@type timeline: Timeline
	@ivar timeline: The L{timeline<TimeLine.TimeLine>} for this scene, named markers are stored here. (read only)
	@type render: RenderData
	@ivar render: The scenes L{render<Render.RenderData>} settings. (read only)
	@type radiosity: RenderData
	@ivar radiosity: The scenes L{radiosity<Radio>} settings. (read only)
	@type halfFloat: OpenEXR's half float option
	@ivar halfFloat: boolean
	@type zbuf: OpenEXR's save zbuf option
	@ivar zbuf: boolean
	@type preview: OpenEXR's save preview option
	@ivar preview: boolean
	@type touch: enable creating empty image files while they are rendered.
	@ivar touch: boolean
	@type noOverwrite: Skip rendering existing image files
	@ivar noOverwrite: boolean
	"""

	def getName():
		"""
		Get the name of this Scene.
		@rtype: string
		"""

	def setName(name):
		"""
		Set the name of this Scene.
		@type name: string
		@param name: The new name.
		"""

	def getLayers():
		"""
		Get the layers set for this Scene.
		@rtype: list of integers
		@return: a list where each number means the layer with that number is set.
		"""

	def setLayers(layers):
		"""
		Set the visible layers for this scene.
		@type layers: list of integers
		@param layers: a list of integers in the range [1, 20], where each available
			index makes the layer with that number visible.
		@note: if this Scene is the current one, the 3D View layers are also
			updated, but the screen needs to be redrawn (at least 3D Views and
			Buttons windows) for the changes to be seen.
		"""

	def copy(duplicate_objects = 1):
		"""
		Make a copy of this Scene.
		@type duplicate_objects: int
		@param duplicate_objects: Defines how the Scene children are duplicated:
				- 0: Link Objects;
				- 1: Link Object Data;
				- 2: Full copy.
		@rtype: Scene
		@return: The copied Blender Scene.
		"""

	def makeCurrent():
		"""
		Make this Scene the currently active one in Blender.
		"""

	def update(full = 0):
		"""
		Update this Scene in Blender.
		@type full: int
		@param full: A bool to control the level of updating:
				- 0: sort the base list of objects.
				- 1: sort and also regroup, do ipos, keys, script links, etc.
		@warn: When in doubt, try with I{full = 0} first, since it is faster.
				The "full" update is a recent addition to this method.
		"""

	def getRenderingContext():
		"""
		Get the rendering context for this scene, see L{Render}.
		@rtype: RenderData
		@return: the render data object for this scene.
		"""

	def getRadiosityContext():
		"""
		Get the radiosity context for this scene, see L{Radio}.
		@rtype: Blender Radiosity
		@return: the radiosity object for this scene.
		@note: only the current scene can return a radiosity context.
		"""

	def getChildren():
		"""
		Get all objects linked to this Scene. (B{deprecated}).  B{Note}: new scripts
		should use the L{objects} attribute instead. In cases where a list is
		required use list(scn.objects).
		@rtype: list of Blender Objects
		@return: A list with all Blender Objects linked to this Scene.
		@note: L{Object.Get} will return all objects currently in Blender, which
			means all objects from all available scenes.  In most cases (exporter
			scripts, for example), it's probably better to use this
			scene.GetChildren instead, since it will only access objects from this
			particular scene.
		@warn: Depricated! use scene.objects instead.
		"""

	def getActiveObject():
		"""
		Get this scene's active object.
		@note: the active object, if selected, can also be retrieved with
			L{Object.GetSelected} -- it is the first item in the returned
			list.  But even when no object is selected in Blender, there can be
			an active one (if the user enters editmode, for example, this is the
			object that should become available for edition).  So what makes this
			scene method different from C{Object.GetSelected()[0]} is that it can
			return the active object even when no objects are selected.
		@rtype: Blender Object or None
		@return: the active object or None if not available.
		@warn: Depricated! use scene.objects.active instead.
		"""

	def getCurrentCamera():
		"""
		Get the currently active Camera for this Scene.
		@note: The active camera can be any object type, not just a camera object.
		@rtype: Blender Object
		@return: The currently active Camera object.
		"""

	def setCurrentCamera(camera):
		"""
		Set the currently active Camera in this Scene.
		@type camera: Blender Camera
		@param camera: The new active Camera.
		"""

	def link(object):
		"""
		Link an Object to this Scene.
		@type object: Blender Object
		@param object: A Blender Object.
		"""

	def unlink(object):
		"""
		Unlink an Object from this Scene.
		@type object: Blender Object
		@param object: A Blender Object.
		@rtype: boolean
		@return: true if object was found in the scene.
		"""

	def getScriptLinks (event):
		"""
		Get a list with this Scene's script links of type 'event'.
		@type event: string
		@param event: "FrameChanged", "OnLoad", "OnSave", "Redraw" or "Render".
		@rtype: list
		@return: a list with Blender L{Text} names (the script links of the given
				'event' type) or None if there are no script links at all.
		"""

	def clearScriptLinks (links = None):
		"""
		Delete script links from this Scene.  If no list is specified, all
		script links are deleted.
		@type links: list of strings
		@param links: None (default) or a list of Blender L{Text} names.
		"""

	def addScriptLink (text, event):
		"""
		Add a new script link to this Scene.
		
		Using OpenGL functions within a scene ScriptLink will draw graphics over the 3D view.
		There is an issue with the zoom of the floating panels also scaling graphics drawn by your scriptlink.
		This makes matching OpenGL graphics to mouse location impossible.
		Make sure that you use floating point for operations that you would usually use int functions for: glRasterPos2f rather then glRasterPos2i.
		
		The following example shows how you can use the OpenGL model view matrix to obtain the scale value.
		
		Example::
			from Blender import BGL
			view_matrix = BGL.Buffer(BGL.GL_FLOAT, 16)
			BGL.glGetFloatv(BGL.GL_MODELVIEW_MATRIX, view_matrix)
			gl_scale = 1/viewMatrix[0]
			
			# Now that we have the scale we can draw to the correct scale.
			BGL.glRect2f(10*gl_scale, 10*gl_scale, 110*gl_scale, 110*gl_scale)
			
			
		@type text: string
		@param text: the name of an existing Blender L{Text}.
		@type event: string
		@param event: "FrameChanged", "OnLoad", "OnSave", "Redraw" or "Render".
		"""

	def play (mode = 0, win = '<VIEW3D>'):
		"""
		Play a realtime animation.  This is the "Play Back Animation" function in
		Blender, different from playing a sequence of rendered images (for that
		check L{Render.RenderData.play}).
		@type mode: int
		@param mode: controls playing:
				- 0: keep playing in the biggest 'win' window;
				- 1: keep playing in all 'win', VIEW3D and SEQ windows;
				- 2: play once in the biggest VIEW3D;
				- 3: play once in all 'win', VIEW3D and SEQ windows.
		@type win: int
		@param win: window type, see L{Window.Types}.  Only some of them are
			meaningful here: VIEW3D, SEQ, IPO, ACTION, NLA, SOUND.  But the others
			are also accepted, since this function can be used simply as an
			interruptible timer.  If 'win' is not visible or invalid, VIEW3D is
			tried, then any bigger visible window.
		@rtype: bool
		@return: 0 on normal exit or 1 when play back is canceled by user input.
		"""

import id_generics
Scene.__doc__ += id_generics.attributes


class SceneObjects:
	"""
	The SceneObjects (Scene ObjectSeq) object
	=========================================
		This object gives access to the Objects in a Scene in Blender.

		Example::
			from Blender import Scene
			scn = Scene.GetCurrent()
			
			scn.objects.selected = [] # select none
			scn.objects.selected = scn.objects # select all
			scn.objects.context = scn.objects # select all and move into the scenes display layer
			
			# get a list of mesh objects
			obs = [ob for ob in scn.objects if ob.type == 'Mesh']
			
			# Select only these mesh objects
			scn.objects.selected = obs
			
			# print all object names
			for ob in scn.objects: print ob.name
			
			# make a list of objects that you can add and remove to
			# will not affect the current scene
			scene_obs = list(scn.objects)

	@ivar selected: an iterator over all the selected objects in a scene.
	@type selected: sequence of L{Object}
	@ivar context: an iterator over all the visible selected objects in a scene.
	@type context: sequence of L{Object}
	@ivar active: the active object in the scene.
	@type active: L{Object}
	@ivar camera: the active camera in the scene.
	@type camera: L{Object}
	"""

	def new(data):
		"""
		Adds a new object to the scene.  Data is either object data such as a
		L{Mesh} or L{Curve}, or the string "Empty" for an Empty object.  The
		type of the object is determined by the type of the data.
		@type data: string or object data
		@param data: the object data for the new object
		@return: the new object.
		@rtype: L{Object}
		"""

	def link(object):
		"""
		Adds an existing object to the scene.  If the object is already linked
		to the scene, no action is taken and no exception is raised.
		@type object: L{Object}
		@param object: the object
		@rtype: None
		"""

	def unlink(object):
		"""
		Removes an object from the scene.  If the object is not linked
		to the scene, no action is taken and no exception is raised.
		@type object: L{Object}
		@param object: the object
		@rtype: None
		"""