diff --git a/Extras/MayaPlugin/BulletMayaPlugin.sln b/Extras/MayaPlugin/BulletMayaPlugin.sln index 2c9a13658..4ac9ee3cb 100644 --- a/Extras/MayaPlugin/BulletMayaPlugin.sln +++ b/Extras/MayaPlugin/BulletMayaPlugin.sln @@ -1,29 +1,47 @@ Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BulletMayaPlugin", "BulletMayaPlugin.vcproj", "{681412B0-F197-4A2F-9263-DEA2E8690146}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection ProjectSection(ProjectDependencies) = postProject - {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} - {ED51AA4D-82EF-089C-CD6D-91CF224E2A9E} = {ED51AA4D-82EF-089C-CD6D-91CF224E2A9E} - {B1B5F775-54A9-2437-E4AC-7E817E492142} = {B1B5F775-54A9-2437-E4AC-7E817E492142} - {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} - {6AB01C9C-9163-F400-B5C3-20D046631E17} = {6AB01C9C-9163-F400-B5C3-20D046631E17} - {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} {A0958CD9-0E39-4A77-3711-9B488F508FBF} = {A0958CD9-0E39-4A77-3711-9B488F508FBF} + {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} + {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319} + {B1B5F775-54A9-2437-E4AC-7E817E492142} = {B1B5F775-54A9-2437-E4AC-7E817E492142} + {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbulletcollision", "..\..\msvc\8\libbulletcollision.vcproj", "{6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbulletdynamics", "..\..\msvc\8\libbulletdynamics.vcproj", "{61BD1097-CF2E-B296-DAA9-73A6FE135319}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbulletmath", "..\..\msvc\8\libbulletmath.vcproj", "{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libGIMPACTUtils", "..\..\msvc\8\libGIMPACTUtils.vcproj", "{B1B5F775-54A9-2437-E4AC-7E817E492142}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libBulletColladaConverter", "..\..\msvc\8\libBulletColladaConverter.vcproj", "{ED51AA4D-82EF-089C-CD6D-91CF224E2A9E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcolladadom", "..\..\msvc\8\libcolladadom.vcproj", "{6AB01C9C-9163-F400-B5C3-20D046631E17}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblibxml", "..\..\msvc\8\liblibxml.vcproj", "{A0958CD9-0E39-4A77-3711-9B488F508FBF}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -51,14 +69,6 @@ Global {B1B5F775-54A9-2437-E4AC-7E817E492142}.DebugDll|Win32.Build.0 = DebugDll|Win32 {B1B5F775-54A9-2437-E4AC-7E817E492142}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32 {B1B5F775-54A9-2437-E4AC-7E817E492142}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32 - {ED51AA4D-82EF-089C-CD6D-91CF224E2A9E}.DebugDll|Win32.ActiveCfg = DebugDll|Win32 - {ED51AA4D-82EF-089C-CD6D-91CF224E2A9E}.DebugDll|Win32.Build.0 = DebugDll|Win32 - {ED51AA4D-82EF-089C-CD6D-91CF224E2A9E}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32 - {ED51AA4D-82EF-089C-CD6D-91CF224E2A9E}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32 - {6AB01C9C-9163-F400-B5C3-20D046631E17}.DebugDll|Win32.ActiveCfg = DebugDll|Win32 - {6AB01C9C-9163-F400-B5C3-20D046631E17}.DebugDll|Win32.Build.0 = DebugDll|Win32 - {6AB01C9C-9163-F400-B5C3-20D046631E17}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32 - {6AB01C9C-9163-F400-B5C3-20D046631E17}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32 {A0958CD9-0E39-4A77-3711-9B488F508FBF}.DebugDll|Win32.ActiveCfg = DebugDll|Win32 {A0958CD9-0E39-4A77-3711-9B488F508FBF}.DebugDll|Win32.Build.0 = DebugDll|Win32 {A0958CD9-0E39-4A77-3711-9B488F508FBF}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32 diff --git a/Extras/MayaPlugin/bt_solver.cpp b/Extras/MayaPlugin/bt_solver.cpp index fb1bc80fa..5ffba6cc6 100644 --- a/Extras/MayaPlugin/bt_solver.cpp +++ b/Extras/MayaPlugin/bt_solver.cpp @@ -36,6 +36,8 @@ btVector3 maxWorld(10000,10000,10000); int maxNumObj=32768; + + void bt_solver_t::export_bullet_file(const char* fileName) { // ColladaConverter tmpConverter(m_dynamicsWorld.get()); @@ -62,6 +64,36 @@ void bt_solver_t::import_bullet_file(const char* filename) } +class bt_debug_draw : public btIDebugDraw +{ + int m_debugMode; +public: + virtual void drawLine(const btVector3& from,const btVector3& to,const btVector3& color) + { + glBegin(GL_LINES); + glColor3f(color.getX(), color.getY(), color.getZ()); + glVertex3d(from.getX(), from.getY(), from.getZ()); + glVertex3d(to.getX(), to.getY(), to.getZ()); + glEnd(); + } + virtual void drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color) + { + return; + } + virtual void reportErrorWarning(const char* warningString) + { + return; + } + virtual void draw3dText(const btVector3& location,const char* textString) + { + return; + } + virtual void setDebugMode(int debugMode) { m_debugMode = debugMode; } + virtual int getDebugMode() const { return m_debugMode; } +}; + + + bt_solver_t::bt_solver_t(): // m_broadphase(new btAxisSweep3(minWorld,maxWorld,maxNumObj)), m_broadphase(new btDbvtBroadphase()), @@ -80,4 +112,15 @@ bt_solver_t::bt_solver_t(): m_dynamicsWorld->setGravity(btVector3(0, -9.81f, 0)); // m_dynamicsWorld->getSolverInfo().m_splitImpulse = true; + + bt_debug_draw* dbgDraw = new bt_debug_draw(); + m_dynamicsWorld->setDebugDrawer(dbgDraw); } + + +void bt_solver_t::debug_draw(int dbgMode) +{ + m_dynamicsWorld->getDebugDrawer()->setDebugMode(dbgMode); + m_dynamicsWorld->debugDrawWorld(); +} + diff --git a/Extras/MayaPlugin/bt_solver.h b/Extras/MayaPlugin/bt_solver.h index 74abcb91b..bd9eb9efa 100644 --- a/Extras/MayaPlugin/bt_solver.h +++ b/Extras/MayaPlugin/bt_solver.h @@ -152,6 +152,8 @@ public: m_dynamicsWorld->stepSimulation(dt, 1000, 1.0f / 120.0f); } + virtual void debug_draw(int dbgMode); + virtual void export_bullet_file(const char* fileName); virtual void import_bullet_file(const char* filename); diff --git a/Extras/MayaPlugin/constraint/hingeConstraintNode.cpp b/Extras/MayaPlugin/constraint/hingeConstraintNode.cpp index e080c49b3..1fcce934c 100644 --- a/Extras/MayaPlugin/constraint/hingeConstraintNode.cpp +++ b/Extras/MayaPlugin/constraint/hingeConstraintNode.cpp @@ -92,13 +92,13 @@ MStatus hingeConstraintNode::initialize() status = addAttribute(ia_damping); MCHECKSTATUS(status, "adding damping attribute") - ia_lowerLimit = fnNumericAttr.create("lowerLimit", "llmt", MFnNumericData::kDouble, -90.0, &status); + ia_lowerLimit = fnNumericAttr.create("lowerLimit", "llmt", MFnNumericData::kDouble, 1.0, &status); MCHECKSTATUS(status, "creating lower limit attribute") fnNumericAttr.setKeyable(true); status = addAttribute(ia_lowerLimit); MCHECKSTATUS(status, "adding lower limit attribute") - ia_upperLimit = fnNumericAttr.create("upperLimit", "ulmt", MFnNumericData::kDouble, 90.0, &status); + ia_upperLimit = fnNumericAttr.create("upperLimit", "ulmt", MFnNumericData::kDouble, -1.0, &status); MCHECKSTATUS(status, "creating upper limit attribute") fnNumericAttr.setKeyable(true); status = addAttribute(ia_upperLimit); diff --git a/Extras/MayaPlugin/dSolverCmd.cpp b/Extras/MayaPlugin/dSolverCmd.cpp index 225fadfb7..9e234a6c4 100644 --- a/Extras/MayaPlugin/dSolverCmd.cpp +++ b/Extras/MayaPlugin/dSolverCmd.cpp @@ -106,9 +106,19 @@ dSolverCmd::redoIt() } } - m_dgModifier = new MDGModifier; + m_dgModifier = new MDagModifier; - MObject dSolverObj = m_dgModifier->createNode(dSolverNode::typeId); + + MObject parentObj = m_dgModifier->createNode("transform"); + m_dgModifier->renameNode(parentObj, "dDebugDraw"); + m_dgModifier->doIt(); + + MObject dSolverObj = m_dgModifier->createNode(dSolverNode::typeId, parentObj, &stat); + if(stat != MStatus::kSuccess) + { + MString errStr = stat.errorString(); + fprintf(stderr, "ERROR : %s\n", errStr.asChar()); + } m_dgModifier->doIt(); // connect the time attribute diff --git a/Extras/MayaPlugin/dSolverCmd.h b/Extras/MayaPlugin/dSolverCmd.h index 92e1dc6fc..93c769e78 100644 --- a/Extras/MayaPlugin/dSolverCmd.h +++ b/Extras/MayaPlugin/dSolverCmd.h @@ -50,7 +50,8 @@ public: protected: MArgDatabase *m_argDatabase; - MDGModifier *m_dgModifier; + MDagModifier *m_dgModifier; +// MDGModifier *m_dgModifier; }; #endif diff --git a/Extras/MayaPlugin/dSolverNode.cpp b/Extras/MayaPlugin/dSolverNode.cpp index b54156e5a..235f571e4 100644 --- a/Extras/MayaPlugin/dSolverNode.cpp +++ b/Extras/MayaPlugin/dSolverNode.cpp @@ -77,6 +77,21 @@ MObject dSolverNode::ssSolverType; bool dSolverNode::isStartTime; +MObject dSolverNode::ia_DBG_DrawWireframe; +MObject dSolverNode::ia_DBG_DrawAabb; +MObject dSolverNode::ia_DBG_DrawFeaturesText; +MObject dSolverNode::ia_DBG_DrawContactPoints; +MObject dSolverNode::ia_DBG_NoDeactivation; +MObject dSolverNode::ia_DBG_NoHelpText; +MObject dSolverNode::ia_DBG_DrawText; +MObject dSolverNode::ia_DBG_ProfileTimings; +MObject dSolverNode::ia_DBG_EnableSatComparison; +MObject dSolverNode::ia_DBG_DisableBulletLCP; +MObject dSolverNode::ia_DBG_EnableCCD; +MObject dSolverNode::ia_DBG_DrawConstraints; +MObject dSolverNode::ia_DBG_DrawConstraintLimits; +MObject dSolverNode::ia_DBG_FastWireframe; + #define ATTR_POSITION "position" //#define ATTR_POSITION_TYPE VECTOR_ATTR #define ATTR_VELOCITY "velocity" @@ -94,6 +109,74 @@ bool dSolverNode::isStartTime; //#define ATTR_IN_RANGLENEXT_TYPE FLOAT_ATTR + +static int getDbgDrawVal(const MObject& thisObj, const MObject& attr, int flag) +{ + MPlug plug(thisObj, attr); + bool retVal = false; + plug.getValue(retVal); + return retVal ? (1 << flag) : 0; +} + + + +void dSolverNode::draw( M3dView & view, const MDagPath & path, + M3dView::DisplayStyle style, + M3dView::DisplayStatus status ) +{ + view.beginGL(); + glPushAttrib( GL_ALL_ATTRIB_BITS ); + + glDisable(GL_LIGHTING); + + if( !(status == M3dView::kActive || + status == M3dView::kLead || + status == M3dView::kHilite || + ( style != M3dView::kGouraudShaded && style != M3dView::kFlatShaded )) ) { + glColor3f(1.0, 1.0, 0.0); + } +/* + glBegin(GL_LINES); + + glColor3f(1.0, 0.5, 0.5); + glVertex3f(0.0, 0.0, 0.0); + glColor3f(0.5, 0.5, 1.0); + glVertex3f(1.f, 1.f, 1.f); + + glEnd(); +*/ + MObject thisObject = thisMObject(); + MFnDagNode fnDagNode(thisObject); + MFnTransform fnParentTransform(fnDagNode.parent(0)); + fnParentTransform.setTranslation(MVector(0.f, 0.f, 0.f), MSpace::kObject); // lock translation + fnParentTransform.setRotation(MEulerRotation(0., 0., 0.)); // lock rotation + double fixScale[3] = { 1., 1., 1. }; // lock scale + fnParentTransform.setScale(fixScale); + + + int dbgMode = 0; + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_DrawWireframe, 0); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_DrawAabb, 1); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_DrawFeaturesText, 2); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_DrawContactPoints, 3); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_NoDeactivation, 4); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_NoHelpText, 5); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_DrawText, 6); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_ProfileTimings, 7); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_EnableSatComparison, 8); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_DisableBulletLCP, 9); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_EnableCCD, 10); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_DrawConstraints, 11); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_DrawConstraintLimits, 12); + dbgMode |= getDbgDrawVal(thisObject,ia_DBG_FastWireframe, 13); + solver_t::debug_draw(dbgMode); + + glPopAttrib(); + view.endGL(); + +} + + static void sceneLoadedCB(void* clientData) { dSolverNode::updateAllRigidBodies(); @@ -312,6 +395,65 @@ MStatus dSolverNode::initialize() status = addAttribute(ia_splitImpulse); MCHECKSTATUS(status, "adding ia_splitImpulse attribute") + ia_DBG_DrawWireframe = fnNumericAttr.create("drawWireframe", "dwfr", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_DrawWireframe attribute") + status = addAttribute(ia_DBG_DrawWireframe); + MCHECKSTATUS(status, "adding ia_DBG_DrawWireframe attribute") + ia_DBG_DrawAabb = fnNumericAttr.create("drawAabb", "daabb", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_DrawAabb attribute") + status = addAttribute(ia_DBG_DrawAabb); + MCHECKSTATUS(status, "adding ia_DBG_DrawAabb attribute") + ia_DBG_DrawFeaturesText = fnNumericAttr.create("drawFeaturesText", "dft", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_DrawFeaturesText attribute") + status = addAttribute(ia_DBG_DrawFeaturesText); + MCHECKSTATUS(status, "adding ia_DBG_DrawFeaturesText attribute") + ia_DBG_DrawContactPoints = fnNumericAttr.create("drawContactPoints", "dcp", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_DrawContactPoints attribute") + status = addAttribute(ia_DBG_DrawContactPoints); + MCHECKSTATUS(status, "adding ia_DBG_DrawContactPoints attribute") + ia_DBG_NoDeactivation = fnNumericAttr.create("noDeactivation", "dnda", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_NoDeactivation attribute") + status = addAttribute(ia_DBG_NoDeactivation); + MCHECKSTATUS(status, "adding ia_DBG_NoDeactivation attribute") + ia_DBG_NoHelpText = fnNumericAttr.create("noHelpText", "dnht", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_NoHelpText attribute") + status = addAttribute(ia_DBG_NoHelpText); + MCHECKSTATUS(status, "adding ia_DBG_NoHelpText attribute") + ia_DBG_DrawText = fnNumericAttr.create("drawText", "dtxt", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_DrawText attribute") + status = addAttribute(ia_DBG_DrawText); + MCHECKSTATUS(status, "adding ia_DBG_DrawText attribute") + ia_DBG_ProfileTimings = fnNumericAttr.create("pProfileTimings", "dptm", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_ProfileTimings attribute") + status = addAttribute(ia_DBG_ProfileTimings); + MCHECKSTATUS(status, "adding ia_DBG_ProfileTimings attribute") + ia_DBG_EnableSatComparison = fnNumericAttr.create("enableSatComparison", "desc", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_EnableSatComparison attribute") + status = addAttribute(ia_DBG_EnableSatComparison); + MCHECKSTATUS(status, "adding ia_DBG_EnableSatComparison attribute") + ia_DBG_DisableBulletLCP = fnNumericAttr.create("disableBulletLCP", "dblcp", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_DisableBulletLCP attribute") + status = addAttribute(ia_DBG_DisableBulletLCP); + MCHECKSTATUS(status, "adding ia_DBG_DisableBulletLCP attribute") + ia_DBG_EnableCCD = fnNumericAttr.create("enableCCD", "deccd", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_EnableCCD attribute") + status = addAttribute(ia_DBG_EnableCCD); + MCHECKSTATUS(status, "adding ia_DBG_EnableCCD attribute") + ia_DBG_DrawConstraints = fnNumericAttr.create("drawConstraints", "dcnst", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_DrawConstraints attribute") + status = addAttribute(ia_DBG_DrawConstraints); + MCHECKSTATUS(status, "adding ia_DBG_DrawConstraints attribute") + ia_DBG_DrawConstraintLimits = fnNumericAttr.create("drawConstraintLimits", "dcsl", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_DrawConstraintLimits attribute") + status = addAttribute(ia_DBG_DrawConstraintLimits); + MCHECKSTATUS(status, "adding ia_DBG_DrawConstraintLimits attribute") + ia_DBG_FastWireframe = fnNumericAttr.create("fastWireframe", "dfwf", MFnNumericData::kBoolean, false, &status); + MCHECKSTATUS(status, "creating ia_DBG_FastWireframe attribute") + status = addAttribute(ia_DBG_FastWireframe); + MCHECKSTATUS(status, "adding ia_DBG_FastWireframe attribute") + + + status = attributeAffects(ia_time, oa_rigidBodies); MCHECKSTATUS(status, "adding attributeAffects(ia_time, oa_rigidBodies)") diff --git a/Extras/MayaPlugin/dSolverNode.h b/Extras/MayaPlugin/dSolverNode.h index 2e456b508..bffb5cf71 100644 --- a/Extras/MayaPlugin/dSolverNode.h +++ b/Extras/MayaPlugin/dSolverNode.h @@ -31,18 +31,42 @@ Modified by Roman Ponomarev #include #include #include +#include #include #include #include "mathUtils.h" -class dSolverNode : public MPxNode +//class dSolverNode : public MPxNode +class dSolverNode : public MPxLocatorNode { public: dSolverNode(); virtual ~dSolverNode(); virtual void postConstructor(); + virtual void draw( M3dView & view, const MDagPath & path, + M3dView::DisplayStyle style, + M3dView::DisplayStatus status ); + + + virtual bool isBounded() const { + return false; + } +virtual MBoundingBox boundingBox() const +{ + MObject node = thisMObject(); + MPoint corner1(-1, -1, -1); + MPoint corner2(1, 1, 1); + return MBoundingBox(corner1, corner2); +} + + virtual bool excludeAsLocator() const { + return false; + } + virtual bool isTransparent() const { + return false; + } static void * creator(); static MStatus initialize(); @@ -61,6 +85,22 @@ public: //Solver Settings static MObject ssSolverType; +// + + static MObject ia_DBG_DrawWireframe; + static MObject ia_DBG_DrawAabb; + static MObject ia_DBG_DrawFeaturesText; + static MObject ia_DBG_DrawContactPoints; + static MObject ia_DBG_NoDeactivation; + static MObject ia_DBG_NoHelpText; + static MObject ia_DBG_DrawText; + static MObject ia_DBG_ProfileTimings; + static MObject ia_DBG_EnableSatComparison; + static MObject ia_DBG_DisableBulletLCP; + static MObject ia_DBG_EnableCCD; + static MObject ia_DBG_DrawConstraints; + static MObject ia_DBG_DrawConstraintLimits; + static MObject ia_DBG_FastWireframe; // @@ -90,7 +130,6 @@ protected: void updateActiveRigidBodies(MPlugArray &rbConnections); void applyFields(MPlugArray &rbConnections, float dt); void updateConstraint(MObject& bodyNode); - protected: MTime m_prevTime; }; diff --git a/Extras/MayaPlugin/pluginMain.cpp b/Extras/MayaPlugin/pluginMain.cpp index 876b12d1f..1cf287db1 100644 --- a/Extras/MayaPlugin/pluginMain.cpp +++ b/Extras/MayaPlugin/pluginMain.cpp @@ -135,7 +135,8 @@ MStatus initializePlugin( MObject obj ) status = plugin.registerNode( dSolverNode::typeName, dSolverNode::typeId, dSolverNode::creator, dSolverNode::initialize, - MPxNode::kDependNode ); +// MPxNode::kDependNode ); + MPxNode::kLocatorNode ); MCHECKSTATUS(status, "registering dSolverNode") status = plugin.registerCommand( dSolverCmd::typeName, diff --git a/Extras/MayaPlugin/scripts/AEdSolverTemplate.mel b/Extras/MayaPlugin/scripts/AEdSolverTemplate.mel index 3b283405e..b783f5e21 100644 --- a/Extras/MayaPlugin/scripts/AEdSolverTemplate.mel +++ b/Extras/MayaPlugin/scripts/AEdSolverTemplate.mel @@ -40,6 +40,21 @@ global proc AEdSolverTemplate( string $nodeName ) editorTemplate -addControl startTime; editorTemplate -addControl rigidBodies; + + editorTemplate -addControl drawWireframe; + editorTemplate -addControl drawAabb; + editorTemplate -addControl drawFeaturesText; + editorTemplate -addControl drawContactPoints; + editorTemplate -addControl noDeactivation; + editorTemplate -addControl noHelpText; + editorTemplate -addControl drawText; + editorTemplate -addControl profileTimings; + editorTemplate -addControl enableSatComparison; + editorTemplate -addControl disableBulletLCP; + editorTemplate -addControl enableCCD; + editorTemplate -addControl drawConstraints; + editorTemplate -addControl drawConstraintLimits; + editorTemplate -addControl fastWireframe; AEdependNodeTemplate $nodeName; diff --git a/Extras/MayaPlugin/solver.cpp b/Extras/MayaPlugin/solver.cpp index fe49edf41..7c5ca46de 100644 --- a/Extras/MayaPlugin/solver.cpp +++ b/Extras/MayaPlugin/solver.cpp @@ -195,3 +195,9 @@ void solver_t::step_simulation(float dt) { m_impl->step_simulation(dt); } + + +void solver_t::debug_draw(int dbgMode) +{ + m_impl->debug_draw(dbgMode); +} diff --git a/Extras/MayaPlugin/solver.h b/Extras/MayaPlugin/solver.h index 13ddd7646..30e6c698c 100644 --- a/Extras/MayaPlugin/solver.h +++ b/Extras/MayaPlugin/solver.h @@ -99,6 +99,8 @@ public: // static void step_simulation(float dt); + static void debug_draw(int dbgMode); + static shared_ptr get_solver(); private: diff --git a/Extras/MayaPlugin/solver_impl.h b/Extras/MayaPlugin/solver_impl.h index 653476ec7..a0d4a9d3f 100644 --- a/Extras/MayaPlugin/solver_impl.h +++ b/Extras/MayaPlugin/solver_impl.h @@ -83,6 +83,8 @@ public: virtual void step_simulation(float dt) = 0; + virtual void debug_draw(int dbgMode) {} + public: virtual ~solver_impl_t() { } }; diff --git a/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp b/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp index c055392ae..172e36910 100644 --- a/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp +++ b/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp @@ -49,7 +49,7 @@ m_useLinearReferenceFrameA(useLinearReferenceFrameA), m_useOffsetForConstraintFrame(D6_USE_FRAME_OFFSET), m_useSolveConstraintObsolete(D6_USE_OBSOLETE_METHOD) { - + calculateTransforms(); } @@ -62,6 +62,7 @@ btGeneric6DofConstraint::btGeneric6DofConstraint(btRigidBody& rbB, const btTrans { ///not providing rigidbody A means implicitly using worldspace for body A m_frameInA = rbB.getCenterOfMassTransform() * m_frameInB; + calculateTransforms(); } diff --git a/src/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp b/src/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp index 1b1de2647..30b89b705 100755 --- a/src/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp +++ b/src/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp @@ -64,7 +64,7 @@ void btSliderConstraint::initParams() m_useLinearReferenceFrameA = USE_OFFSET_FOR_CONSTANT_FRAME; - + calculateTransforms(m_rbA.getCenterOfMassTransform(),m_rbB.getCenterOfMassTransform()); }