Strange, it is python file that I rename into a pdf in order to post it on 
my blog( it can be found in the download section...)

the meat of this plugin is:

    def compute(self,Plug,Data):
        targetPosition_Hdle = Data.inputValue(self.targetPosition)
        outputHandle = Data.outputValue(self.outRotate )

        theTargetVector = targetPosition_Hdle.asVector().normal()
        referenceVector = OpenMaya.MVector(1,0,0)

        aimQuaternion = OpenMaya.MQuaternion()
        aimQuaternion = referenceVector.rotateTo(theTargetVector)
        eulerRotationValue = aimQuaternion.asEulerRotation()

        outputHandle.set3Double( 
eulerRotationValue.x,eulerRotationValue.y,eulerRotationValue.z )
            
        Data.setClean(Plug)
( the euler value is in radians and the output attribute is directly 3 
MAngle value in order to prevent maya to insert a unitconversion node( 
which is logical ))
This node expect the Driven object to be at position 0 0 0 under an offset 
group.


Le lundi 12 novembre 2012 11:00:31 UTC+1, Roy Nieterau a écrit :
>
> Hey Guys,
>
> I'm looking into creating a custom Stretchy Spline IK setup that doesn't 
> pop (over & under extends in extreme situations). 
> But I seem to be unable to wrap my head around how to calculate 
> orientations on points on the curve. 
> Since the points on the curve don't have any orientation (well, they do 
> have tangents or something like that?) I have no clue on how to actually 
> start with this.
>
> My main references of tools in Maya would be the Motion Path and the 
> Spline IK (with Advanced Twist controlled by a start and end object). 
> If anybody has any starting points for this it would be greatly 
> appreciated!
>
> Thanks in advance.
>
> Regards,
> Roy
>

-- 
view archives: http://groups.google.com/group/python_inside_maya
change your subscription settings: 
http://groups.google.com/group/python_inside_maya/subscribe
import math, sys
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx

kPluginNodeName = "quatermainNode"
kPluginNodeId = OpenMaya.MTypeId(0xAAC0F773) 

class quatermainNode(OpenMayaMPx.MPxNode):
    targetPosition  = OpenMaya.MObject()
    rotate          = OpenMaya.MObject() 
 
    def __init__(self):
        OpenMayaMPx.MPxNode.__init__(self)
    def compute(self,Plug,Data):
        targetPosition_Hdle = Data.inputValue(self.targetPosition)
        outputHandle = Data.outputValue(self.outRotate )

        theTargetVector = targetPosition_Hdle.asVector().normal()
        referenceVector = OpenMaya.MVector(1,0,0)

        aimQuaternion = OpenMaya.MQuaternion()
        aimQuaternion = referenceVector.rotateTo(theTargetVector)
        eulerRotationValue = aimQuaternion.asEulerRotation()

        outputHandle.set3Double( eulerRotationValue.x,eulerRotationValue.y,eulerRotationValue.z )
            
        Data.setClean(Plug)
        return OpenMaya.kUnknownParameter

def nodeCreator():
    return OpenMayaMPx.asMPxPtr(quatermainNode())

def nodeInitializer():
    nAttr = OpenMaya.MFnNumericAttribute()
    mAttr = OpenMaya.MFnMatrixAttribute()
    unitAttr = OpenMaya.MFnUnitAttribute()

    quatermainNode.targetPosition = nAttr.create( "targetPosition", "trgPos", OpenMaya.MFnNumericData.k3Double )
    nAttr.setStorable(0)
    nAttr.setKeyable(1)
    nAttr.setHidden(0)
    quatermainNode.addAttribute( quatermainNode.targetPosition )

    defaultAngle = OpenMaya.MAngle ( 0.0, OpenMaya.MAngle.kDegrees )
    quatermainNode.outRotateX = unitAttr.create( "outRotateX", "orx", defaultAngle)
    quatermainNode.outRotateY = unitAttr.create( "outRotateY", "ory", defaultAngle)
    quatermainNode.outRotateZ = unitAttr.create( "outRotateZ", "orz", defaultAngle)
    quatermainNode.outRotate = nAttr.create( "outRotate", "or", quatermainNode.outRotateX,quatermainNode.outRotateY,quatermainNode.outRotateZ)
    nAttr.setStorable(1)
    nAttr.setKeyable(0)
    nAttr.setHidden(0)
    quatermainNode.addAttribute( quatermainNode.outRotate )

    quatermainNode.attributeAffects( quatermainNode.targetPosition, quatermainNode.outRotate )

    return OpenMaya.MStatus.kSuccess	

	
	
def initializePlugin(mobject):
    mplugin = OpenMayaMPx.MFnPlugin(mobject, "Bazillou cedric2009", "1.0", "Any")
    try:
        mplugin.registerNode( kPluginNodeName, kPluginNodeId, nodeCreator, nodeInitializer, OpenMayaMPx.MPxNode.kDependNode)
    except:
        sys.stderr.write( "Failed to register node: %s" % kPluginNodeName ); raise


def uninitializePlugin(mobject):
    mplugin = OpenMayaMPx.MFnPlugin(mobject)
    try:
        mplugin.deregisterNode( kPluginNodeId )
    except:
        sys.stderr.write( "Failed to deregister node: %s" % kPluginNodeName ); raise





Reply via email to