[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2612] contrib/py/scripts/addons/ space_view3d_add_surround_cameras.py: initial commit.

Cole Ingraham coledingraham at gmail.com
Tue Nov 15 04:00:47 CET 2011


Revision: 2612
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2612
Author:   coledingraham
Date:     2011-11-15 03:00:46 +0000 (Tue, 15 Nov 2011)
Log Message:
-----------
initial commit. made changes suggested in patch tracker. removing cameras now does not remove "CameraOrigin" and adding cameras checks if "CameraOrigin" already exists for maintaining camera animation.

Added Paths:
-----------
    contrib/py/scripts/addons/space_view3d_add_surround_cameras.py

Added: contrib/py/scripts/addons/space_view3d_add_surround_cameras.py
===================================================================
--- contrib/py/scripts/addons/space_view3d_add_surround_cameras.py	                        (rev 0)
+++ contrib/py/scripts/addons/space_view3d_add_surround_cameras.py	2011-11-15 03:00:46 UTC (rev 2612)
@@ -0,0 +1,230 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+bl_info = {
+    'name': "Surround Projection Tools",
+    'author': "Cole Ingraham",
+    'location': "View3D > Tool Shelf > Surround Projection panel",
+    'description': "Setup cameras and create rendering scenes for n-screen surround projection.",
+    'wiki_url': "http://coleingraham.com/2011/11/14/using-the-surround-projection-tools-addon-for-blender-2-6/",
+    'version': (0,1,1),
+    'blender': (2, 6, 0),
+    'api': 41769,
+    'category': '3D View'
+}
+
+import bpy
+from bpy.props import IntProperty
+from bpy.props import BoolProperty
+from math import pi
+import re
+
+# property for how many screens to add
+bpy.types.WindowManager.num_surround_screens = IntProperty(
+    name="Number of screens",
+    description="How many screens to add",
+    default=4,
+    min=3)
+
+# safeguard for removing previous cameras/scenes
+bpy.types.WindowManager.previous_num_surround_screens = IntProperty(
+    name="Previous number of screens",
+    description="used for removing cameras/scenes",
+    default=-1)
+
+# used to enable/disable make/remove scenes and cameras
+bpy.types.WindowManager.surround_screens_init = BoolProperty(
+    name="SurroundScenesInit",
+    default=False)
+
+# GUI panel
+class AddSurroundCamerasPanel(bpy.types.Panel):
+   bl_space_type = 'VIEW_3D'
+   bl_region_type = 'TOOLS'
+   bl_label = "Surround Projection"
+   
+   def draw(self, context):
+      layout = self.layout
+      col = layout.column(align=True)
+      
+      row = col.row()
+      row.prop(context.window_manager, "num_surround_screens")
+      row = col.row()
+      row.operator('objects.add_surround_cameras', icon='CAMERA_DATA')
+      row = col.row()
+      row.operator('scene.add_linked_scenes_for_surround_cameras', icon='SCENE_DATA')
+      
+      col = layout.column(align=True)
+      row = col.row()
+      row.operator('objects.remove_surround_cameras', icon='X')
+      row = col.row()
+      row.operator('objects.remove_linked_scenes_for_surround_cameras', icon='X')
+	
+
+# operator for adding cameras
+class AddSurroundCamerasOperator(bpy.types.Operator):
+   bl_idname = 'objects.add_surround_cameras'
+   bl_label = "Add Cameras"
+   bl_description = "Add n cameras"
+   bl_options = {'REGISTER', 'UNDO'}
+   
+   @classmethod
+   def poll(cls, context):
+      return context.window_manager.previous_num_surround_screens is -1
+   
+   def execute(self, context):
+      
+      numScreens = context.window_manager.num_surround_screens
+      
+      # add an empty for the camera origin if not already present
+      originExists = False
+      for object in bpy.data.objects:
+         if object.name == "CameraOrigin":
+            bpy.ops.object.select_name(name="CameraOrigin")
+            origin = bpy.context.active_object
+            originExists = True
+            break
+      
+      if not originExists:
+         bpy.ops.object.add()
+         origin = bpy.context.active_object
+         origin.name = "CameraOrigin"
+         origin.location = bpy.context.scene.cursor_location
+      
+      for i in range(0,numScreens):
+         
+         # add a new camer
+         bpy.ops.object.camera_add()
+            
+         # get the current camera
+         cam = bpy.context.active_object
+         
+         # name the camera
+         cameraName = "Camera" + str(i)
+         cam.name = cameraName
+         cam.data.name = cameraName
+         
+         # position camera
+         cam.location = 0,0,0
+         cam.rotation_euler = (pi/2), 0, ((-2*pi)/numScreens) * i
+         
+         # set the field of view angle
+         cam.data.angle = (2*pi)/numScreens
+            
+         # make the parent of the camera the origin
+         cam.parent = origin
+     
+      bpy.ops.object.select_name(name="CameraOrigin")
+      context.window_manager.previous_num_surround_screens = numScreens
+      return {'FINISHED'}
+
+
+# operator for creating new linked scenes for each camera
+class AddSurroundScenesOperator(bpy.types.Operator):
+   bl_idname = 'scene.add_linked_scenes_for_surround_cameras'
+   bl_label = "Make Scenes"
+   bl_description = "Creates new scenes with linked object data for each camera"
+   bl_options = {'REGISTER', 'UNDO'}
+   
+   @classmethod
+   def poll(cls, context):
+      if context.window_manager.previous_num_surround_screens is not -1 and context.window_manager.surround_screens_init is False:
+         return True
+      return False
+   
+   def execute(self, context):
+      numScreens = context.window_manager.previous_num_surround_screens
+      sceneName = bpy.context.scene.name
+      renderpath = bpy.context.scene.render.filepath
+      
+      for i in range(0, numScreens):
+         
+         thisScene = sceneName + "-Camera" + str(i)
+         
+         bpy.ops.scene.new(type='LINK_OBJECTS')
+         bpy.context.scene.name = thisScene
+         
+         bpy.context.scene.camera = bpy.data.objects["Camera" + str(i)]
+         
+         bpy.context.scene.render.filepath = renderpath + thisScene
+
+      bpy.context.screen.scene = bpy.data.scenes[sceneName]
+      context.window_manager.surround_screens_init = True
+      return {'FINISHED'}
+
+
+# operator for removing the surround scenes
+class RemoveSurroundScenesOperator(bpy.types.Operator):
+   bl_idname = 'objects.remove_linked_scenes_for_surround_cameras'
+   bl_label = "Remove Scenes"
+   bl_description = "Removes all surround scenes"
+   bl_options = {'REGISTER', 'UNDO'}
+   
+   @classmethod
+   def poll(cls, context):
+      return context.window_manager.surround_screens_init is True
+   
+   def execute(self, context):
+      numScreens = context.window_manager.previous_num_surround_screens
+
+      for scene in list(bpy.data.scenes):
+         if re.search("-Camera",scene.name):
+            bpy.data.scenes.remove(scene)
+      
+      context.window_manager.surround_screens_init = False
+      return {'FINISHED'}
+
+
+# operator for removing the surround cameras/scenes
+class RemoveSurroundCamerasOperator(bpy.types.Operator):
+   bl_idname = 'objects.remove_surround_cameras'
+   bl_label = "Remove Cameras"
+   bl_description = "Removes all surround cameras"
+   bl_options = {'REGISTER', 'UNDO'}
+   
+   @classmethod
+   def poll(cls, context):
+      if context.window_manager.previous_num_surround_screens is not -1 and context.window_manager.surround_screens_init is False:
+         return True
+      return False
+   
+   def execute(self, context):
+      numScreens = context.window_manager.previous_num_surround_screens
+      
+      for object in bpy.data.objects:
+         if object.type == 'CAMERA':
+            bpy.ops.object.select_name(name=object.name)
+            bpy.ops.object.delete()
+      
+      context.window_manager.previous_num_surround_screens = -1
+      return {'FINISHED'}
+
+
+
+def register():
+    bpy.utils.register_module(__name__)
+    
+    pass
+    
+def unregister():
+    bpy.utils.unregister_module(__name__)
+    
+    pass
+    
+if __name__ == "__main__":
+    register()


Property changes on: contrib/py/scripts/addons/space_view3d_add_surround_cameras.py
___________________________________________________________________
Added: svn:eol-style
   + native



More information about the Bf-extensions-cvs mailing list