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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release/scripts/scripttemplate_camer_object.py')
-rw-r--r--release/scripts/scripttemplate_camer_object.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/release/scripts/scripttemplate_camer_object.py b/release/scripts/scripttemplate_camer_object.py
new file mode 100644
index 00000000000..cacc35ed1a5
--- /dev/null
+++ b/release/scripts/scripttemplate_camer_object.py
@@ -0,0 +1,104 @@
+#!BPY
+"""
+Name: 'Camera/Object Example'
+Blender: 245
+Group: 'ScriptTemplate'
+Tooltip: 'Script template for setting the camera direction'
+"""
+
+from Blender import Window
+import bpy
+
+script_data = \
+'''#!BPY
+"""
+Name: 'My Camera script'
+Blender: 245
+Group: 'Object'
+Tooltip: 'Rotate the camera to center on the active object'
+"""
+
+import Blender
+from Blender import Window, Scene, Draw, Mathutils
+
+# Rotate the camera in such a way that it centers on the currently active object
+def RotCamToOb(cam, ob):
+
+ # Get the camera matrix
+ camMat = cam.getMatrix('worldspace');
+
+ # Get the location of the camera and object and make sure they're vectors
+ camLoc = Mathutils.Vector(cam.loc)
+ obLoc = Mathutils.Vector(ob.loc)
+
+ # Get the vector (direction) from the camera to the object
+ newVec = obLoc - camLoc
+
+ # Make a quaternion that points the camera along the vector
+ newQuat = newVec.toTrackQuat('-z', 'y')
+
+ # Convert the new quaternion to a rotation matrix (and resize it to 4x4 so it matches the other matrices)
+ rotMat = newQuat.toMatrix().resize4x4()
+
+ # Make a matrix with only the current location of the camera
+ transMat = Mathutils.TranslationMatrix(camMat.translationPart());
+
+ # Multiply the rotation and translation matrixes to make 1 matrix with all data
+ newMat = rotMat * transMat
+
+ # Now we make this matrix the camera matrix and voila done!
+ cam.setMatrix(newMat)
+
+#Make sure blender and the objects are in the right state and start doing stuff
+def SceneCheck():
+
+ # Show a neat waitcursor whilst the script runs
+ Window.WaitCursor(1)
+
+ # If we are in edit mode, go out of edit mode and store the status in a var
+ emode = int(Window.EditMode())
+ if emode: Window.EditMode(0)
+
+ # Get the scene, the camera and the currently active object
+ scn = Scene.GetCurrent()
+ cam = scn.getCurrentCamera()
+ ob = scn.getActiveObject()
+
+ # Lets do some checks to make sure we have everything
+ # And if we don't then call a return which stops the entire script
+ if not cam:
+ Draw.PupMenu('Error, no active camera, aborting.')
+ return
+
+ if not ob:
+ Draw.PupMenu('Error, no active object, aborting.')
+ return
+
+ if cam == ob:
+ Draw.PupMenu('Error, select an object other than the camera, aborting.')
+ return
+
+ # Start the main function of the script if we didn't encounter any errors
+ RotCamToOb(cam, ob)
+
+ # Update the scene
+ scn.update()
+
+ # Redraw the 3d view so we can instantly see what was changed
+ Window.Redraw(Window.Types.VIEW3D)
+
+ # If we were in edit mode when the script started, go back into edit mode
+ if emode: Window.EditMode(1)
+
+ # Remove the waitcursor
+ Window.WaitCursor(0)
+
+# Start the script
+SceneCheck()
+
+'''
+
+new_text = bpy.data.texts.new('camobject_template.py')
+new_text.write(script_data)
+bpy.data.texts.active = new_text
+Window.RedrawAll()