diff --git a/Extras/MayaPlugin/dSolverCmd.cpp b/Extras/MayaPlugin/dSolverCmd.cpp index b5e9a5cff..225fadfb7 100644 --- a/Extras/MayaPlugin/dSolverCmd.cpp +++ b/Extras/MayaPlugin/dSolverCmd.cpp @@ -120,6 +120,11 @@ dSolverCmd::redoIt() m_dgModifier->connect(plgOutTime, plgInTime); m_dgModifier->doIt(); } + //force update of the solver on creation + MPlug plgRigidBodies(dSolverObj, dSolverNode::oa_rigidBodies); + bool update; + plgRigidBodies.getValue(update); + setResult(MFnDependencyNode(dSolverObj).name()); return stat; diff --git a/Extras/MayaPlugin/dSolverNode.cpp b/Extras/MayaPlugin/dSolverNode.cpp index 935913d78..4419b81ae 100644 --- a/Extras/MayaPlugin/dSolverNode.cpp +++ b/Extras/MayaPlugin/dSolverNode.cpp @@ -622,7 +622,7 @@ void dSolverNode::applyFields(MPlugArray &rbConnections, float dt) void dSolverNode::computeRigidBodies(const MPlug& plug, MDataBlock& data) { - // std::cout << "dSolverNode::computeRigidBodies" << std::endl; + // std::cout << "dSolverNode::computeRigidBodies" << std::endl; bool enabled = data.inputValue(ia_enabled).asBool(); if(!enabled) { diff --git a/Extras/MayaPlugin/rigidBodyNode.cpp b/Extras/MayaPlugin/rigidBodyNode.cpp index 8ef4ebe78..92527f22f 100644 --- a/Extras/MayaPlugin/rigidBodyNode.cpp +++ b/Extras/MayaPlugin/rigidBodyNode.cpp @@ -409,7 +409,7 @@ void rigidBodyNode::computeRigidBody(const MPlug& plug, MDataBlock& data) void rigidBodyNode::computeWorldMatrix(const MPlug& plug, MDataBlock& data) { - //std::cout << "rigidBodyNode::computeWorldMatrix" << std::endl; + // std::cout << "rigidBodyNode::computeWorldMatrix" << std::endl; MObject thisObject(thisMObject()); MFnDagNode fnDagNode(thisObject); @@ -421,8 +421,12 @@ void rigidBodyNode::computeWorldMatrix(const MPlug& plug, MDataBlock& data) vec3f pos; quatf rot; - MFnTransform fnParentTransform(fnDagNode.parent(0)); - MVector mtranslation = fnParentTransform.getTranslation(MSpace::kTransform); + MStatus status; + + MFnTransform fnParentTransform(fnDagNode.parent(0, &status)); + + MVector mtranslation = fnParentTransform.getTranslation(MSpace::kTransform, &status); + MQuaternion mrotation; fnParentTransform.getRotation(mrotation, MSpace::kTransform); double mscale[3]; diff --git a/Extras/MayaPlugin/scripts/dynamicaUI.mel b/Extras/MayaPlugin/scripts/dynamicaUI.mel index 0452f08d8..f5fa86b64 100644 --- a/Extras/MayaPlugin/scripts/dynamicaUI.mel +++ b/Extras/MayaPlugin/scripts/dynamicaUI.mel @@ -404,6 +404,9 @@ proc dynamicaUI_createRigidBody(int $active, int $collisionShapeType) connectAttr ($selection[$i * 2] + ".message") ($collisionShapeNode + ".inShape"); hide $shapeTransforms[0]; } + setAttr ($rigidBodyNode + ".active" ) $active; + setAttr ($collisionShapeNode + ".type" ) $collisionShapeType; + float $pos[]= `getAttr ($shapeTransforms[0] + ".translate")`; float $rot[]= `getAttr ($shapeTransforms[0] + ".rotate")`; @@ -412,9 +415,6 @@ proc dynamicaUI_createRigidBody(int $active, int $collisionShapeType) setAttr ($rigidBodyTransforms[0] + ".rotate") -type double3 $rot[0] $rot[1] $rot[2]; // setAttr ($rigidBodyNode + ".initialRotation") -type double3 $rot[0] $rot[1] $rot[2]; - - setAttr ($rigidBodyNode + ".active" ) $active; - setAttr ($collisionShapeNode + ".type" ) $collisionShapeType; $newBodies[$i] = $rigidBodyTransforms[0]; } @@ -426,7 +426,6 @@ proc dynamicaUI_createRigidBody(int $active, int $collisionShapeType) setAttr ($rigidBodyNode + ".active" ) $active; setAttr ($collisionShapeNode + ".type" ) $collisionShapeType; - $newBodies[0] = $rigidBodyTransforms[0]; }