diff --git a/examples/DeformableDemo/GraspDeformable.cpp b/examples/DeformableDemo/GraspDeformable.cpp index ddb47954b..a1952169d 100644 --- a/examples/DeformableDemo/GraspDeformable.cpp +++ b/examples/DeformableDemo/GraspDeformable.cpp @@ -28,6 +28,7 @@ #include "../Importers/ImportURDFDemo/BulletUrdfImporter.h" #include "../Importers/ImportURDFDemo/MyMultiBodyCreator.h" #include "../Importers/ImportURDFDemo/URDF2Bullet.h" +#include "../Utils/b3BulletDefaultFileIO.h" #include "../CommonInterfaces/CommonMultiBodyBase.h" #include "../CommonInterfaces/CommonGraphicsAppInterface.h" #include "../CommonInterfaces/CommonParameterInterface.h" @@ -270,25 +271,26 @@ void GraspDeformable::initPhysics() } // create a soft block - if(1) - { - char relative_path[1024]; -// b3FileUtils::findFile("banana.vtk", relative_path, 1024); -// b3FileUtils::findFile("ball.vtk", relative_path, 1024); -// b3FileUtils::findFile("deformable_crumpled_napkin_sim.vtk", relative_path, 1024); -// b3FileUtils::findFile("single_tet.vtk", relative_path, 1024); -// b3FileUtils::findFile("tube.vtk", relative_path, 1024); -// b3FileUtils::findFile("torus.vtk", relative_path, 1024); -// b3FileUtils::findFile("paper_roll.vtk", relative_path, 1024); -// b3FileUtils::findFile("bread.vtk", relative_path, 1024); - b3FileUtils::findFile("ditto.vtk", relative_path, 1024); -// b3FileUtils::findFile("boot.vtk", relative_path, 1024); -// btSoftBody* psb = btSoftBodyHelpers::CreateFromTetGenData(getDeformableDynamicsWorld()->getWorldInfo(), -// TetraCube::getElements(), -// 0, -// TetraCube::getNodes(), -// false, true, true); - btSoftBody* psb = btSoftBodyHelpers::CreateFromVtkFile(getDeformableDynamicsWorld()->getWorldInfo(), relative_path); + if (1) + { + char absolute_path[1024]; + b3BulletDefaultFileIO fileio; + fileio.findResourcePath("ditto.vtk", absolute_path, 1024); + // fileio.findResourcePath("banana.vtk", absolute_path, 1024); + // fileio.findResourcePath("ball.vtk", absolute_path, 1024); + // fileio.findResourcePath("deformable_crumpled_napkin_sim.vtk", absolute_path, 1024); + // fileio.findResourcePath("single_tet.vtk", absolute_path, 1024); + // fileio.findResourcePath("tube.vtk", absolute_path, 1024); + // fileio.findResourcePath("torus.vtk", absolute_path, 1024); + // fileio.findResourcePath("paper_roll.vtk", absolute_path, 1024); + // fileio.findResourcePath("bread.vtk", absolute_path, 1024); + // fileio.findResourcePath("boot.vtk", absolute_path, 1024); + // btSoftBody* psb = btSoftBodyHelpers::CreateFromTetGenData(getDeformableDynamicsWorld()->getWorldInfo(), + // TetraCube::getElements(), + // 0, + // TetraCube::getNodes(), + // false, true, true); + btSoftBody* psb = btSoftBodyHelpers::CreateFromVtkFile(getDeformableDynamicsWorld()->getWorldInfo(), absolute_path); // psb->scale(btVector3(30, 30, 30)); // for banana psb->scale(btVector3(.7, .7, .7)); diff --git a/src/BulletSoftBody/btDeformableBackwardEulerObjective.cpp b/src/BulletSoftBody/btDeformableBackwardEulerObjective.cpp index fee353a60..1b247641a 100644 --- a/src/BulletSoftBody/btDeformableBackwardEulerObjective.cpp +++ b/src/BulletSoftBody/btDeformableBackwardEulerObjective.cpp @@ -103,6 +103,7 @@ void btDeformableBackwardEulerObjective::applyForce(TVStack& force, bool setZero btSoftBody* psb = m_softBodies[i]; if (!psb->isActive()) { + counter += psb->m_nodes.size(); continue; } for (int j = 0; j < psb->m_nodes.size(); ++j) diff --git a/src/BulletSoftBody/btDeformableBodySolver.cpp b/src/BulletSoftBody/btDeformableBodySolver.cpp index 9af8e3f77..7b4c06303 100644 --- a/src/BulletSoftBody/btDeformableBodySolver.cpp +++ b/src/BulletSoftBody/btDeformableBodySolver.cpp @@ -18,7 +18,7 @@ #include "btDeformableBodySolver.h" #include "btSoftBodyInternals.h" #include "LinearMath/btQuickprof.h" -static const int kMaxConjugateGradientIterations = 200; +static const int kMaxConjugateGradientIterations = 50; btDeformableBodySolver::btDeformableBodySolver() : m_numNodes(0) , m_cg(kMaxConjugateGradientIterations) @@ -251,6 +251,7 @@ void btDeformableBodySolver::updateVelocity() psb->m_maxSpeedSquared = 0; if (!psb->isActive()) { + counter += psb->m_nodes.size(); continue; } for (int j = 0; j < psb->m_nodes.size(); ++j) @@ -275,6 +276,7 @@ void btDeformableBodySolver::updateTempPosition() btSoftBody* psb = m_softBodies[i]; if (!psb->isActive()) { + counter += psb->m_nodes.size(); continue; } for (int j = 0; j < psb->m_nodes.size(); ++j) @@ -307,6 +309,7 @@ void btDeformableBodySolver::setupDeformableSolve(bool implicit) btSoftBody* psb = m_softBodies[i]; if (!psb->isActive()) { + counter += psb->m_nodes.size(); continue; } for (int j = 0; j < psb->m_nodes.size(); ++j) diff --git a/src/BulletSoftBody/btDeformableNeoHookeanForce.h b/src/BulletSoftBody/btDeformableNeoHookeanForce.h index f607b8662..3d06e304d 100644 --- a/src/BulletSoftBody/btDeformableNeoHookeanForce.h +++ b/src/BulletSoftBody/btDeformableNeoHookeanForce.h @@ -175,7 +175,7 @@ public: btSoftBody::Tetra& tetra = psb->m_tetras[j]; btMatrix3x3 P; firstPiola(psb->m_tetraScratches[j],P); -#if USE_SVD +#ifdef USE_SVD if (max_p > 0) { // since we want to clamp the principal stress to max_p, we only need to