diff --git a/CMakeLists.txt b/CMakeLists.txt index f08bcb8a560744f97a0ff6980f6fa33a9c23757d..2e42aed6c5c4e2a885aae5aaf6ab51de14218d9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -186,4 +186,4 @@ install(EXPORT ${PROJECT_NAME}_TARGETS #-------------------------------------------------------------------------- # Add Examples subdirectories #-------------------------------------------------------------------------- -add_subdirectory(Examples/Sandbox) +add_subdirectory(Examples) diff --git a/Examples/Sandbox/main.cpp b/Examples/Sandbox/main.cpp index c35a9206badb43ee3fa6975af62ba746b08f04a2..97a218f21100fda9a3813705112ba710b870d829 100644 --- a/Examples/Sandbox/main.cpp +++ b/Examples/Sandbox/main.cpp @@ -50,6 +50,19 @@ // logger #include "g3log/g3log.hpp" +// testVTKTexture +#include <vtkOBJReader.h> +#include <vtkPolyDataMapper.h> +#include <vtkActor.h> +#include <vtkRenderer.h> +#include <vtkRenderWindow.h> +#include <vtkRenderWindowInteractor.h> +#include <vtkSmartPointer.h> +#include <string> +#include <vtkJPEGReader.h> + + + using namespace imstk; void testMultiTextures(); @@ -68,31 +81,145 @@ void testOneToOneNodalMap(); void testExtractSurfaceMesh(); void testSurfaceMeshOptimizer(); void testDeformableBody(); +void testVTKTexture(); +void testMultiObjectWithTextures(); int main() { - std::cout << "****************\n" - << "Starting Sandbox\n" - << "****************\n"; - - //testMultiTextures(); - //testMeshCCD(); - //testPenaltyRigidCollision(); - //testTwoFalcons(); - //testObjectController(); - //testCameraController(); - //testViewer(); - //testReadMesh(); - //testAnalyticalGeometry(); - //testScenesManagement(); - //testIsometricMap(); - //testTetraTriangleMap(); - //testExtractSurfaceMesh(); - //testOneToOneNodalMap(); - //testSurfaceMeshOptimizer(); - testDeformableBody(); - - return 0; + std::cout << "****************\n" + << "Starting Sandbox\n" + << "****************\n"; + + //testMultiTextures(); + //testMeshCCD(); + //testPenaltyRigidCollision(); + //testTwoFalcons(); + //testObjectController(); + //testCameraController(); + //testViewer(); + //testReadMesh(); + //testAnalyticalGeometry(); + //testScenesManagement(); + //testIsometricMap(); + //testTetraTriangleMap(); + //testExtractSurfaceMesh(); + //testOneToOneNodalMap(); + //testSurfaceMeshOptimizer(); + //testDeformableBody(); + //testVTKTexture(); + testMultiObjectWithTextures(); + return 0; +} + +void testVTKTexture() +{ + // Parse command line arguments + + std::string inputFilename = "../ETI/resources/OperatingRoom/cloth.obj"; + std::string texturename = "../ETI/resources/TextureOR/cloth.jpg"; + + std::string inputFilename1 = "../ETI/resources/OperatingRoom/bed1.obj"; + std::string texturename1 = "../ETI/resources/TextureOR/bed-1.jpg"; + + vtkSmartPointer<vtkOBJReader> reader = + vtkSmartPointer<vtkOBJReader>::New(); + reader->SetFileName(inputFilename.c_str()); + reader->Update(); + + + vtkSmartPointer<vtkOBJReader> reader1 = + vtkSmartPointer<vtkOBJReader>::New(); + reader1->SetFileName(inputFilename1.c_str()); + reader1->Update(); + + // Visualize + vtkSmartPointer<vtkPolyDataMapper> mapper = + vtkSmartPointer<vtkPolyDataMapper>::New(); + mapper->SetInputConnection(reader->GetOutputPort()); + + vtkSmartPointer<vtkPolyDataMapper> mapper1 = + vtkSmartPointer<vtkPolyDataMapper>::New(); + mapper1->SetInputConnection(reader1->GetOutputPort()); + + vtkSmartPointer<vtkActor> actor = + vtkSmartPointer<vtkActor>::New(); + actor->SetMapper(mapper); + + vtkSmartPointer<vtkActor> actor1 = + vtkSmartPointer<vtkActor>::New(); + actor1->SetMapper(mapper1); + + vtkSmartPointer<vtkJPEGReader> jpgReader = + vtkSmartPointer<vtkJPEGReader>::New(); + jpgReader->SetFileName(texturename.c_str()); + jpgReader->Update(); + vtkSmartPointer<vtkTexture> texture = vtkSmartPointer<vtkTexture>::New(); + texture->SetInputConnection(jpgReader->GetOutputPort()); + texture->InterpolateOn(); + actor->SetTexture(texture); + + vtkSmartPointer<vtkJPEGReader> jpgReader1 = + vtkSmartPointer<vtkJPEGReader>::New(); + jpgReader1->SetFileName(texturename1.c_str()); + jpgReader1->Update(); + vtkSmartPointer<vtkTexture> texture1 = vtkSmartPointer<vtkTexture>::New(); + texture1->SetInputConnection(jpgReader1->GetOutputPort()); + texture1->InterpolateOn(); + actor1->SetTexture(texture1); + + vtkSmartPointer<vtkRenderer> renderer = + vtkSmartPointer<vtkRenderer>::New(); + renderer->AddActor(actor); + renderer->AddActor(actor1); + renderer->SetBackground(.3, .6, .3); // Background color green + + vtkSmartPointer<vtkRenderWindow> renderWindow = + vtkSmartPointer<vtkRenderWindow>::New(); + renderWindow->AddRenderer(renderer); + + vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = + vtkSmartPointer<vtkRenderWindowInteractor>::New(); + renderWindowInteractor->SetRenderWindow(renderWindow); + + renderWindowInteractor->Start(); + +} + + +void testMultiObjectWithTextures() +{ + // SDK and Scene + auto sdk = std::make_shared<SimulationManager>(); + auto scene = sdk->createNewScene("multiObjectWithTexturesTest"); + + // Read surface mesh + auto objMesh = imstk::MeshReader::read("../ETI/resources/OperatingRoom/cloth.obj"); + auto surfaceMesh = std::dynamic_pointer_cast<imstk::SurfaceMesh>(objMesh); + surfaceMesh->addTexture("../ETI/resources/TextureOR/cloth.jpg"); + + // Create object and add to scene + auto object = std::make_shared<imstk::VisualObject>("meshObject"); + object->setVisualGeometry(surfaceMesh); // change to any mesh created above + scene->addSceneObject(object); + + bool secondObject = true; + bool secondObjectTexture = false; + + if (secondObject){ + // Read surface mesh1 + auto objMesh1 = imstk::MeshReader::read("../ETI/resources/OperatingRoom/bed1.obj"); + auto surfaceMesh1 = std::dynamic_pointer_cast<imstk::SurfaceMesh>(objMesh1); + if (secondObjectTexture) + surfaceMesh1->addTexture("../ETI/resources/TextureOR/bed-1.jpg"); + + // Create object and add to scene + auto object1 = std::make_shared<imstk::VisualObject>("meshObject1"); + object1->setVisualGeometry(surfaceMesh1); // change to any mesh created above + scene->addSceneObject(object1); + } + // Run + sdk->setCurrentScene("multiObjectWithTexturesTest"); + sdk->startSimulation(true); } void testMultiTextures()