//- // ========================================================================== // Copyright 1995,2006,2008 Autodesk, Inc. All rights reserved. // // Use of this software is subject to the terms of the Autodesk // license agreement provided at the time of installation or download, // or which otherwise accompanies this software in either electronic // or hard copy form. // ========================================================================== //+ //============================= DESCRIPTION ================================= // This is an example of how to write an API spring node. // //=========================================================================== #include <maya/MIOStream.h> #include <math.h> #include <simpleSpring.h> #include <maya/MFnDependencyNode.h> #include <maya/MFnNumericAttribute.h> //================================================================= // Implement your new attributes here if your node has. // Here is an example code. //================================================================= MObject simpleSpring::aSpringFactor; MTypeId simpleSpring::id( 0x80017 ); simpleSpring::simpleSpring() : factor(0.0) { } simpleSpring::~simpleSpring() { } void *simpleSpring::creator() { return new simpleSpring; } MStatus simpleSpring::initialize() // // Descriptions: // Initialize the node, attributes. // { MStatus status; MFnNumericAttribute numAttr; //================================================================= // Initialize your new attributes here. Here is an example. //================================================================= aSpringFactor = numAttr.create("springFactor","sf",MFnNumericData::kDouble); numAttr.setDefault( 1.0 ); numAttr.setKeyable( true ); status = addAttribute( aSpringFactor ); McheckErr(status, "ERROR adding aSpringFactor attribute.\n"); return( MS::kSuccess ); } MStatus simpleSpring::compute(const MPlug& /*plug*/, MDataBlock& block) // // Descriptions: // In this simple example, do nothing in this method. But get the // spring factor here for "applySpringLaw" to compute output force. // // Note: always let this method return "kUnknownParameter" so that // "applySpringLaw" can be called when Maya needs to compute spring force. // // It is recommended to only override compute() to get user defined // attributes. // { // Get spring factor, // factor = springFactor( block ); // Note: return "kUnknownParameter" so that Maya spring node can // compute spring force for this plug-in simple spring node. // return( MS::kUnknownParameter ); } MStatus simpleSpring::applySpringLaw ( double /*stiffness*/, double /*damping*/, double restLength, double /*endMass1*/, double /*endMass2*/, const MVector &endP1, const MVector &endP2, const MVector &/*endV1*/, const MVector &/*endV2*/, MVector &forceV1, MVector &forceV2 ) // // Descriptions: // In this overridden method, the attribute, aSpringFactor, is used // to compute output force with a simple spring law. // // F = - factor * (L - restLength) * Vector of (endP1 - endP2). // { MVector distV = endP1 - endP2; double L = distV.length(); distV.normalize(); double F = factor * (L - restLength); forceV1 = - F * distV; forceV2 = - forceV1; return( MS::kSuccess ); } MStatus initializePlugin(MObject obj) { MStatus status; MFnPlugin plugin(obj, PLUGIN_COMPANY, "3.0", "Any"); status = plugin.registerNode( "simpleSpring", simpleSpring::id, &simpleSpring::creator, &simpleSpring::initialize, MPxNode::kSpringNode ); if (!status) { status.perror("registerNode"); return status; } return status; } MStatus uninitializePlugin(MObject obj) { MStatus status; MFnPlugin plugin(obj); status = plugin.deregisterNode( simpleSpring::id ); if (!status) { status.perror("deregisterNode"); return status; } return status; }
Autodesk® Maya® 2009 © 1997-2008 Autodesk, Inc. All rights reserved. | Generated with 1.5.6 |