// main int main( int argc, char **argv ) { REPORT_MEMORY_LEAKS base = new DemoBase(); base->init(argc, argv, "Bar demo"); SimulationModel *model = new SimulationModel(); model->init(); Simulation::getCurrent()->setModel(model); buildModel(); initParameters(); Simulation::getCurrent()->setSimulationMethodChangedCallback([&]() { reset(); initParameters(); base->getSceneLoader()->readParameterObject(Simulation::getCurrent()->getTimeStep()); }); // OpenGL MiniGL::setClientIdleFunc (50, timeStep); MiniGL::setKeyFunc(0, 'r', reset); MiniGL::setClientSceneFunc(render); MiniGL::setViewport (40.0f, 0.1f, 500.0f, Vector3r (5.0, 10.0, 30.0), Vector3r (5.0, 0.0, 0.0)); TwType enumType2 = TwDefineEnum("SimulationMethodType", NULL, 0); TwAddVarCB(MiniGL::getTweakBar(), "SimulationMethod", enumType2, setSimulationMethod, getSimulationMethod, &simulationMethod, " label='Simulation method' enum='0 {None}, 1 {Volume constraints}, 2 {FEM based PBD}, 3 {Strain based dynamics (no inversion handling)}, 4 {Shape matching (no inversion handling)}' group=Simulation"); TwAddVarCB(MiniGL::getTweakBar(), "Stiffness", TW_TYPE_REAL, setStiffness, getStiffness, model, " label='Stiffness' min=0.0 step=0.1 precision=4 group='Simulation' "); TwAddVarCB(MiniGL::getTweakBar(), "PoissonRatio", TW_TYPE_REAL, setPoissonRatio, getPoissonRatio, model, " label='Poisson ratio XY' min=0.0 step=0.1 precision=4 group='Simulation' "); TwAddVarCB(MiniGL::getTweakBar(), "NormalizeStretch", TW_TYPE_BOOL32, setNormalizeStretch, getNormalizeStretch, model, " label='Normalize stretch' group='Strain based dynamics' "); TwAddVarCB(MiniGL::getTweakBar(), "NormalizeShear", TW_TYPE_BOOL32, setNormalizeShear, getNormalizeShear, model, " label='Normalize shear' group='Strain based dynamics' "); glutMainLoop (); Utilities::Timing::printAverageTimes(); Utilities::Timing::printTimeSums(); delete Simulation::getCurrent(); delete base; delete model; return 0; }
// main int main( int argc, char **argv ) { REPORT_MEMORY_LEAKS base = new DemoBase(); base->init(argc, argv, "Rigid body collision demo"); SimulationModel *model = new SimulationModel(); model->init(); Simulation::getCurrent()->setModel(model); buildModel(); initParameters(); Simulation::getCurrent()->setSimulationMethodChangedCallback([&]() { reset(); initParameters(); base->getSceneLoader()->readParameterObject(Simulation::getCurrent()->getTimeStep()); }); // OpenGL MiniGL::setClientIdleFunc (50, timeStep); MiniGL::setKeyFunc(0, 'r', reset); MiniGL::setClientSceneFunc(render); MiniGL::setViewport (40.0f, 0.1f, 500.0, Vector3r (5.0, 30.0, 70.0), Vector3r (5.0, 0.0, 0.0)); TwAddVarCB(MiniGL::getTweakBar(), "ContactTolerance", TW_TYPE_REAL, setContactTolerance, getContactTolerance, &cd, " label='Contact tolerance' min=0.0 step=0.001 precision=3 group=Simulation "); TwAddVarCB(MiniGL::getTweakBar(), "ContactStiffnessRigidBody", TW_TYPE_REAL, setContactStiffnessRigidBody, getContactStiffnessRigidBody, &model, " label='Contact stiffness RB' min=0.0 step=0.1 precision=2 group=Simulation "); TwAddVarCB(MiniGL::getTweakBar(), "ContactStiffnessParticleRigidBody", TW_TYPE_REAL, setContactStiffnessParticleRigidBody, getContactStiffnessParticleRigidBody, &model, " label='Contact stiffness Particle-RB' min=0.0 step=0.1 precision=2 group=Simulation "); glutMainLoop (); base->cleanup(); Utilities::Timing::printAverageTimes(); Utilities::Timing::printTimeSums(); delete Simulation::getCurrent(); delete base; delete model; return 0; }