blender/release/scripts/scripttemplate_pyconstraint.py

111 lines
3.3 KiB
Python
Raw Normal View History

#!BPY
"""
Name: 'Script Constraint'
Blender: 245
Group: 'ScriptTemplate'
Tooltip: 'Add a new script for custom constraints'
"""
from Blender import Window
import bpy
script_data = \
"""#BPYCONSTRAINT
'''
PyConstraint template, access this in the "add constraint" scripts submenu.
Add docstring here
'''
import Blender
from Blender import Draw
from Blender import Mathutils
import math
USE_TARGET = True
'''
This function is called to evaluate the constraint
obmatrix: (Matrix) copy of owner's worldspace matrix
targetmatrix: (Matrix) copy of target's worldspace matrix (where applicable)
idprop: (IDProperties) wrapped data referring to this
constraint instance's idproperties
'''
def doConstraint(obmatrix, targetmatrix, idprop):
# Separate out the tranformation components for easy access.
obloc = obmatrix.translationPart() # Translation
obrot = obmatrix.toEuler() # Rotation
obsca = obmatrix.scalePart() # Scale
# Define user-settable parameters.\
# Must also be defined in getSettings().
if not idprop.has_key('user_toggle'): idprop['user_toggle'] = 1
if not idprop.has_key('user_slider'): idprop['user_slider'] = 1.0
# Do stuff here, changing obloc, obrot, and obsca.
# Convert back into a matrix for loc, scale, rotation,
mtxloc = Mathutils.TranslationMatrix( obloc )
mtxrot = obrot.toMatrix().resize4x4()
mtxsca = Mathutils.Matrix([obsca[0],0,0,0], [0,obsca[1],0,0], [0,0,obsca[2],0], [0,0,0,1])
# Recombine the separate elements into a transform matrix.
outputmatrix = mtxsca * mtxrot * mtxloc
# Return the new matrix.
return outputmatrix
'''
This function manipulates the target matrix prior to sending it to doConstraint()
target_object: wrapped data, representing the target object
subtarget_bone: wrapped data, representing the subtarget pose-bone (where applicable)
target_matrix: (Matrix) the transformation matrix of the target
id_properties_of_constraint: (IDProperties) wrapped idproperties
'''
def doTarget(target_object, subtarget_bone, target_matrix, id_properties_of_constraint):
return target_matrix
'''
This function draws a pupblock that lets the user set
the values of custom settings the constraint defines.
This function is called when the user presses the settings button.
idprop: (IDProperties) wrapped data referring to this
constraint instance's idproperties
'''
def getSettings(idprop):
# Define user-settable parameters.
# Must also be defined in getSettings().
if not idprop.has_key('user_toggle'): idprop['user_toggle'] = 1
if not idprop.has_key('user_slider'): idprop['user_slider'] = 1.0
# create temporary vars for interface
utoggle = Draw.Create(idprop['user_toggle'])
uslider = Draw.Create(idprop['user_slider'])
# define and draw pupblock
block = []
block.append("Buttons: ")
block.append(("Toggle", utoggle, "This is a toggle button."))
block.append("More buttons: ")
block.append(("Slider", uslider, 0.0000001, 1000.0, "This is a number field."))
retval = Draw.PupBlock("Constraint Template", block)
# update id-property values after user changes settings
if (retval):
idprop['user_toggle']= utoggle.val
idprop['user_slider']= uslider.val
"""
new_text = bpy.data.texts.new('pyconstraint_template.py')
new_text.write(script_data)
bpy.data.texts.active = new_text
Window.RedrawAll()