Script templates, metaball creation script from forTe, and camera script from macouno
This commit is contained in:
104
release/scripts/scripttemplate_camer_object.py
Normal file
104
release/scripts/scripttemplate_camer_object.py
Normal file
@@ -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('pyconstraint_template.py')
|
||||
new_text.write(script_data)
|
||||
bpy.data.texts.active = new_text
|
||||
Window.RedrawAll()
|
||||
Reference in New Issue
Block a user