DeformableBodyInplaceSolverIslandCallback.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. //
  2. // DeformableBodyInplaceSolverIslandCallback.h
  3. // BulletSoftBody
  4. //
  5. // Created by Xuchen Han on 12/16/19.
  6. //
  7. #ifndef DeformableBodyInplaceSolverIslandCallback_h
  8. #define DeformableBodyInplaceSolverIslandCallback_h
  9. struct DeformableBodyInplaceSolverIslandCallback : public MultiBodyInplaceSolverIslandCallback
  10. {
  11. btDeformableMultiBodyConstraintSolver* m_deformableSolver;
  12. DeformableBodyInplaceSolverIslandCallback(btDeformableMultiBodyConstraintSolver* solver,
  13. btDispatcher* dispatcher)
  14. : MultiBodyInplaceSolverIslandCallback(solver, dispatcher), m_deformableSolver(solver)
  15. {
  16. }
  17. virtual void processConstraints(int islandId = -1)
  18. {
  19. btCollisionObject** bodies = m_bodies.size() ? &m_bodies[0] : 0;
  20. btCollisionObject** softBodies = m_softBodies.size() ? &m_softBodies[0] : 0;
  21. btPersistentManifold** manifold = m_manifolds.size() ? &m_manifolds[0] : 0;
  22. btTypedConstraint** constraints = m_constraints.size() ? &m_constraints[0] : 0;
  23. btMultiBodyConstraint** multiBodyConstraints = m_multiBodyConstraints.size() ? &m_multiBodyConstraints[0] : 0;
  24. //printf("mb contacts = %d, mb constraints = %d\n", mbContacts, m_multiBodyConstraints.size());
  25. m_deformableSolver->solveDeformableBodyGroup(bodies, m_bodies.size(), softBodies, m_softBodies.size(), manifold, m_manifolds.size(), constraints, m_constraints.size(), multiBodyConstraints, m_multiBodyConstraints.size(), *m_solverInfo, m_debugDrawer, m_dispatcher);
  26. if (m_bodies.size() && (m_solverInfo->m_reportSolverAnalytics & 1))
  27. {
  28. m_deformableSolver->m_analyticsData.m_islandId = islandId;
  29. m_islandAnalyticsData.push_back(m_solver->m_analyticsData);
  30. }
  31. m_bodies.resize(0);
  32. m_softBodies.resize(0);
  33. m_manifolds.resize(0);
  34. m_constraints.resize(0);
  35. m_multiBodyConstraints.resize(0);
  36. }
  37. };
  38. #endif /* DeformableBodyInplaceSolverIslandCallback_h */