diff --git a/Examples/FEMSimulator/main.cpp b/Examples/FEMSimulator/main.cpp index 7c1be18c5321a7542dc72ab370ef41868d4e3eb6..1b9b25609285c05f5e45efb4730c5f5e909387f7 100644 --- a/Examples/FEMSimulator/main.cpp +++ b/Examples/FEMSimulator/main.cpp @@ -29,6 +29,7 @@ // Include required types scene objects #include "Simulators/VegaFemSceneObject.h" #include "SceneModels/StaticSceneObject.h" +#include "SceneModels/VegaFEMDeformableSceneObject.h" #include "Mesh/VegaVolumetricMesh.h" #include "Devices/VRPNForceDevice.h" // #include "Devices/VRPNDeviceServer.h" @@ -45,6 +46,7 @@ #include "ContactHandling/PenaltyContactFemToStatic.h" +#include "IO/IOMesh.h" #include "IO/InitIO.h" #include "VTKRendering/InitVTKRendering.h" @@ -88,12 +90,15 @@ int main(int ac, char** av) //------------------------------------------------------- // create a FEM simulator - auto femSimulator = std::make_shared<VegaFEMModelSimulator>(); +// auto femSimulator = std::make_shared<VegaFEMModelSimulator>(); + auto femSimulator = std::make_shared<ObjectSimulator>(); //femSimulator->setHapticTool(controller); // create a Vega based FEM object and attach it to the fem simulator - auto femObject = std::make_shared<VegaFemSceneObject>( - sdk->getErrorLog(),configFile); +// auto femObject = std::make_shared<VegaFemSceneObject>( +// nullptr,configFile); + auto femObject = std::make_shared<VegaFEMDeformableSceneObject>( + "./box.veg",configFile); femObject->setContactForcesOn(); auto meshRenderDetail = std::make_shared<RenderDetail>(SIMMEDTK_RENDER_WIREFRAME //| @@ -105,10 +110,20 @@ int main(int ac, char** av) meshRenderDetail->setSpecularColor(Color(1.0, 1.0, 1.0,0.5)); meshRenderDetail->setShininess(10.0); - auto renderingMesh = femObject->getVolumetricMesh()->getRenderingMesh(); - if(renderingMesh) + // Load rendering mesh + auto volumeMesh = std::static_pointer_cast<VegaVolumetricMesh>(femObject->getPhysicsModel()->getMesh()); + + auto visualModel = std::make_shared<MeshModel>(); + visualModel->load("./box.vtk"); + femObject->setVisualModel(visualModel); + + auto visualMesh = visualModel->getMeshAs<SurfaceMesh>(); + + if(visualMesh) { - renderingMesh->setRenderDetail(meshRenderDetail); + visualMesh->updateInitialVertices(); + visualMesh->setRenderDetail(meshRenderDetail); + volumeMesh->attachSurfaceMesh(visualMesh,"./box.interp"); } sdk->addSceneActor(femObject, femSimulator); @@ -172,12 +187,13 @@ int main(int ac, char** av) //------------------------------------------------------- auto meshModel = std::make_shared<MeshCollisionModel>(); - auto collisionMesh = femObject->getVolumetricMesh()->getCollisionMesh(); + auto collisionMesh = volumeMesh->getCollisionMesh(); if(collisionMesh) { meshModel->setMesh(collisionMesh); } - femObject->setModel(meshModel); + + femObject->setCollisionModel(meshModel); auto planeMeshCollisionPairs = std::make_shared<CollisionPair>();