diff --git a/CMake/External/External_VTK.cmake b/CMake/External/External_VTK.cmake index d664264ff024cfbae4703d69d2d1ce98509ffa6d..c9a55f7313cb6cf38f7d3ad8a1e96ce77450e552 100644 --- a/CMake/External/External_VTK.cmake +++ b/CMake/External/External_VTK.cmake @@ -10,78 +10,47 @@ endif() set(${PROJECT_NAME}_VTK_REPO_SOURCE "9.0" CACHE STRING "Select VTK Source Branch/Tag") -set(VTK_SOURCES "8.2;8.9;9.0;master;release;nightly-master" CACHE INTERNAL "List of available VTK branch,tags to get") +set(VTK_SOURCES "9.0;master;release;nightly-master" CACHE INTERNAL "List of available VTK branch,tags to get") set_property(CACHE ${PROJECT_NAME}_VTK_REPO_SOURCE PROPERTY STRINGS ${VTK_SOURCES}) + +if (${${PROJECT_NAME}_ENABLE_OPENVR}) + set(VTK_OPENVR "WANT") +else() + set(VTK_OPENVR "DONT_WANT") +endif() +set(VTK_MODULE_SETTINGS + -DVTK_MODULE_ENABLE_VTK_ChartsCore:STRING=YES + -DVTK_MODULE_ENABLE_VTK_RenderingOpenGL2:STRING=YES + -DVTK_MODULE_ENABLE_VTK_IOExport:STRING=YES + -DVTK_MODULE_ENABLE_VTK_IOImport:STRING=YES + -DVTK_MODULE_ENABLE_VTK_IOParallel:STRING=YES + -DVTK_MODULE_ENABLE_VTK_IOParallelXML:STRING=YES + -DVTK_MODULE_ENABLE_VTK_IOXML:STRING=YES + -DVTK_MODULE_ENABLE_VTK_IOLegacy:STRING=YES + -DVTK_MODULE_ENABLE_VTK_IOPLY:STRING=YES + -DVTK_MODULE_ENABLE_VTK_IOGeometry:STRING=YES + -DVTK_MODULE_ENABLE_VTK_InteractionStyle:STRING=YES + -DVTK_MODULE_ENABLE_VTK_RenderingAnnotation:STRING=YES + -DVTK_MODULE_ENABLE_VTK_RenderingOpenVR:STRING=${VTK_OPENVR} + -DVTK_MODULE_ENABLE_VTK_InteractionWidgets:STRING=YES + -DVTK_MODULE_ENABLE_VTK_glew:STRING=YES + -DVTK_MODULE_ENABLE_VTK_RenderingContext2D:STRING=YES + -DVTK_MODULE_ENABLE_VTK_RenderingVolumeOpenGL2:STRING=YES + -DVTK_MODULE_ENABLE_VTK_ViewsContext2D:STRING=YES + -DVTK_BUILD_EXAMPLES:STRING=DONT_WANT + -DVTK_BUILD_TESTING:STRING=OFF + -DVTK_GROUP_ENABLE_StandAlone:STRING=DONT_WANT + -DVTK_GROUP_ENABLE_Rendering:STRING=DONT_WANT +-DVTK_MODULE_ENABLE_MODULE_FiltersModeling:STRING=YES +-DVTK_MODULE_ENABLE_MODULE_FiltersExtraction:STRING=YES + ) +set(${PROJECT_NAME}_VTK_SOURCE GIT_REPOSITORY https://gitlab.kitware.com/vtk/vtk.git) -if(${PROJECT_NAME}_VTK_REPO_SOURCE EQUAL "8.2") - set(VTK_MODULE_SETTINGS - -DModule_vtkChartsCore:BOOL=ON - -DModule_vtkRenderingOpenGL2:BOOL=ON - -DModule_vtkIOXML:BOOL=ON - -DModule_vtkIOLegacy:BOOL=ON - -DModule_vtkIOPLY:BOOL=ON - -DModule_vtkIOGeometry:BOOL=ON - -DModule_vtkInteractionStyle:BOOL=ON - -DModule_vtkRenderingAnnotation:BOOL=ON - -DModule_vtkRenderingOpenVR:BOOL=${${PROJECT_NAME}_ENABLE_VR} - -DModule_vtkInteractionWidgets:BOOL=ON - -DModule_vtkglew:BOOL=ON - -DModule_vtkRenderingContext2D:BOOL=ON - -DModule_vtkRenderingVolumeOpenGL2:BOOL=ON - -DModule_vtkViewsContext2D:BOOL=ON - -DBUILD_EXAMPLES:BOOL=OFF - -DBUILD_TESTING:BOOL=OFF - -DVTK_Group_StandAlone:BOOL=OFF - -DVTK_Group_Rendering:BOOL=OFF - ) - set(${PROJECT_NAME}_VTK_SOURCE URL https://gitlab.kitware.com/vtk/vtk/-/archive/v8.2.0/vtk-v8.2.0.tar.gz) - set(${PROJECT_NAME}_VTK_HASH URL_HASH MD5=4115fb396f99466fe444472f412118cd) +if(${PROJECT_NAME}_VTK_REPO_SOURCE EQUAL "9.0") + set(${PROJECT_NAME}_VTK_HASH GIT_TAG ab278e87b181e3a02082bea7361fbaa3ddafb3ad) else() - - if (${${PROJECT_NAME}_ENABLE_OPENVR}) - set(VTK_OPENVR "WANT") - else() - set(VTK_OPENVR "DONT_WANT") - endif() - - set(VTK_MODULE_SETTINGS - -DVTK_MODULE_ENABLE_VTK_ChartsCore:STRING=YES - -DVTK_MODULE_ENABLE_VTK_RenderingOpenGL2:STRING=YES - -DVTK_MODULE_ENABLE_VTK_IOExport:STRING=YES - -DVTK_MODULE_ENABLE_VTK_IOImport:STRING=YES - -DVTK_MODULE_ENABLE_VTK_IOParallel:STRING=YES - -DVTK_MODULE_ENABLE_VTK_IOParallelXML:STRING=YES - -DVTK_MODULE_ENABLE_VTK_IOXML:STRING=YES - -DVTK_MODULE_ENABLE_VTK_IOLegacy:STRING=YES - -DVTK_MODULE_ENABLE_VTK_IOPLY:STRING=YES - -DVTK_MODULE_ENABLE_VTK_IOGeometry:STRING=YES - -DVTK_MODULE_ENABLE_VTK_InteractionStyle:STRING=YES - -DVTK_MODULE_ENABLE_VTK_RenderingAnnotation:STRING=YES - -DVTK_MODULE_ENABLE_VTK_RenderingOpenVR:STRING=${VTK_OPENVR} - -DVTK_MODULE_ENABLE_VTK_InteractionWidgets:STRING=YES - -DVTK_MODULE_ENABLE_VTK_glew:STRING=YES - -DVTK_MODULE_ENABLE_VTK_RenderingContext2D:STRING=YES - -DVTK_MODULE_ENABLE_VTK_RenderingVolumeOpenGL2:STRING=YES - -DVTK_MODULE_ENABLE_VTK_ViewsContext2D:STRING=YES - -DVTK_BUILD_EXAMPLES:STRING=DONT_WANT - -DVTK_BUILD_TESTING:STRING=OFF - -DVTK_GROUP_ENABLE_StandAlone:STRING=DONT_WANT - -DVTK_GROUP_ENABLE_Rendering:STRING=DONT_WANT - -DVTK_MODULE_ENABLE_MODULE_FiltersModeling:STRING=YES - -DVTK_MODULE_ENABLE_MODULE_FiltersExtraction:STRING=YES - ) - set(${PROJECT_NAME}_VTK_SOURCE GIT_REPOSITORY https://gitlab.kitware.com/vtk/vtk.git) - - # TODO Update to a zip download when there is a new version after 8.2 - if(${PROJECT_NAME}_VTK_REPO_SOURCE EQUAL "8.9") - set(${PROJECT_NAME}_VTK_HASH GIT_TAG 9b6a039f43404053a0653f742148d123f6ada7d6) - elseif(${PROJECT_NAME}_VTK_REPO_SOURCE EQUAL "9.0") - set(${PROJECT_NAME}_VTK_HASH GIT_TAG ab278e87b181e3a02082bea7361fbaa3ddafb3ad) - else() - set(${PROJECT_NAME}_VTK_HASH GIT_TAG origin/${${PROJECT_NAME}_VTK_REPO_SOURCE}) - endif() - + set(${PROJECT_NAME}_VTK_HASH GIT_TAG origin/${${PROJECT_NAME}_VTK_REPO_SOURCE}) endif() #----------------------------------------------------------------------------- @@ -100,6 +69,6 @@ imstk_add_external_project( VTK #VERBOSE ) if(NOT USE_SYSTEM_VTK) - set(VTK_DIR ${CMAKE_INSTALL_PREFIX}/lib/cmake/vtk-8.2) + set(VTK_DIR ${CMAKE_INSTALL_PREFIX}/lib/cmake/vtk-9.0) #message(STATUS "VTK_DIR : ${VTK_DIR}") endif() diff --git a/CMake/External/Patches/vtk-8.2.cmake b/CMake/External/Patches/vtk-8.2.cmake deleted file mode 100644 index 3992e6d06e1a088b1ed83591765de6cc45ea3d02..0000000000000000000000000000000000000000 --- a/CMake/External/Patches/vtk-8.2.cmake +++ /dev/null @@ -1,6 +0,0 @@ -message(STATUS "Patching VTK") - -file(COPY ${VTK_SOURCE_DIR}/Common/Core/vtkEventData.h - DESTINATION ${CMAKE_INSTALL_PREFIX}/include/vtk-8.2/) -file(COPY ${VTK_SOURCE_DIR}/Rendering/OpenVR/vtkOpenVROverlayInternal.h - DESTINATION ${CMAKE_INSTALL_PREFIX}/include/vtk-8.2/) \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 99332186cf2b736c3d4c69d75d426b6ae8bbbfcb..c1f28d9cf750c655f7e9068e9d423071bfabc46c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -274,37 +274,30 @@ endif() # VTK find_package(VTK CONFIG) -if (VTK_VERSION VERSION_LESS "8.90") - # Modules are linked via `vtkCommonCore` - # VTK_DEFINITIONS has autoinit information - find_package(VTK REQUIRED) - include(${VTK_USE_FILE}) -else() - # modules are linked via `VTK::CommonCore` - # vtk_module_autoinit is needed - find_package(VTK COMPONENTS - ChartsCore - CommonCore - CommonDataModel - FiltersGeneral - FiltersSources - FiltersModeling - FiltersExtraction - IOExport - IOImport - IOPLY - IOParallel - IOParallelXML - ImagingCore - InteractionStyle - RenderingAnnotation - RenderingCore - RenderingOpenGL2 - RenderingVolume - RenderingVolumeOpenGL2 - ViewsContext2D - ) -endif() +# modules are linked via `VTK::CommonCore` +# vtk_module_autoinit is needed +find_package(VTK COMPONENTS + ChartsCore + CommonCore + CommonDataModel + FiltersGeneral + FiltersSources +FiltersModeling +FiltersExtraction + IOExport + IOImport + IOPLY + IOParallel + IOParallelXML + ImagingCore + InteractionStyle + RenderingAnnotation + RenderingCore + RenderingOpenGL2 + RenderingVolume + RenderingVolumeOpenGL2 + ViewsContext2D +) # Vulkan set(Vulkan_Dependency) diff --git a/Data/armadillo/armadillo_volume.vtk.sha512 b/Data/armadillo/armadillo_volume.vtk.sha512 new file mode 100644 index 0000000000000000000000000000000000000000..67c4809c3b251ea7a3f613f3b7518ae3d6f60e20 --- /dev/null +++ b/Data/armadillo/armadillo_volume.vtk.sha512 @@ -0,0 +1 @@ +8e9f278002a3a17b2bb3471523672947034de0ed87d07dd6a422e2b9157bd6f91e4be5df4b3e820ab3f722b599b10d0a77c68ac0d320d1a2ecc94515aefb11fe \ No newline at end of file diff --git a/Data/textured_organs/heart_volume.vtk.sha512 b/Data/textured_organs/heart_volume.vtk.sha512 new file mode 100644 index 0000000000000000000000000000000000000000..6aad13a1eddd08c93756ce38c08d09c1603558b9 --- /dev/null +++ b/Data/textured_organs/heart_volume.vtk.sha512 @@ -0,0 +1 @@ +30c084333b758578905445e55918095b12979fc50bebe4d23f7903f6aae50c1bc4e9aceec22ea1c62491f64db509835d3c0e8310ecbdb2ee4f4fd6af401f5e85 \ No newline at end of file diff --git a/Examples/PBD/PBDCollisionStairs/PBDCollisionStairsExample.cpp b/Examples/PBD/PBDCollisionStairs/PBDCollisionStairsExample.cpp index a88d0e31303a06d79fe6f767371ea597f7a474be..987eb8aed29b4009e83d34be20e42794301b9738 100644 --- a/Examples/PBD/PBDCollisionStairs/PBDCollisionStairsExample.cpp +++ b/Examples/PBD/PBDCollisionStairs/PBDCollisionStairsExample.cpp @@ -96,17 +96,17 @@ buildStairs(int nSteps, double width, double height, double depth) } static std::shared_ptr<PbdObject> -makeDragonPbdObject(const std::string& name) +makeArmadilloPbdObject(const std::string& name) { auto pbdObj = std::make_shared<PbdObject>(name); - // Read in the dragon mesh - auto highResSurfMesh = std::dynamic_pointer_cast<SurfaceMesh>(MeshIO::read(iMSTK_DATA_ROOT "/asianDragon/asianDragon.obj")); - auto coarseTetMesh = std::dynamic_pointer_cast<TetrahedralMesh>(MeshIO::read(iMSTK_DATA_ROOT "/asianDragon/asianDragon.veg")); - highResSurfMesh->translate(Vec3d(0.0f, 10.0f, 0.0f), Geometry::TransformType::ApplyToData); - coarseTetMesh->translate(Vec3d(0.0f, 10.0f, 0.0f), Geometry::TransformType::ApplyToData); - auto coarseSurfMesh = std::make_shared<SurfaceMesh>(); - coarseTetMesh->extractSurfaceMesh(coarseSurfMesh, true); + // Read in the armadillo mesh + auto tetMesh = std::dynamic_pointer_cast<TetrahedralMesh>(MeshIO::read(iMSTK_DATA_ROOT "armadillo/armadillo_volume.vtk")); + tetMesh->scale(0.07, Geometry::TransformType::ApplyToData); + tetMesh->rotate(Vec3d(1.0, 0.0, 0.0), 1.3, Geometry::TransformType::ApplyToData); + tetMesh->translate(Vec3d(0.0f, 10.0f, 0.0f), Geometry::TransformType::ApplyToData); + auto surfMesh = std::make_shared<SurfaceMesh>(); + tetMesh->extractSurfaceMesh(surfMesh, true); // Setup the Parameters auto pbdParams = std::make_shared<PBDModelConfig>(); @@ -117,27 +117,26 @@ makeDragonPbdObject(const std::string& name) pbdParams->m_uniformMassValue = 1.0; pbdParams->m_gravity = Vec3d(0, -10.0, 0); pbdParams->m_defaultDt = 0.01; - pbdParams->m_iterations = 10; + pbdParams->m_iterations = 5; pbdParams->collisionParams->m_proximity = 0.3; pbdParams->collisionParams->m_stiffness = 0.1; // Setup the Model auto pbdModel = std::make_shared<PbdModel>(); - pbdModel->setModelGeometry(coarseTetMesh); + pbdModel->setModelGeometry(tetMesh); pbdModel->configure(pbdParams); // Setup the VisualModel auto material = std::make_shared<RenderMaterial>(); material->setDisplayMode(RenderMaterial::DisplayMode::WireframeSurface); - auto surfMeshModel = std::make_shared<VisualModel>(highResSurfMesh); + auto surfMeshModel = std::make_shared<VisualModel>(surfMesh); surfMeshModel->setRenderMaterial(material); // Setup the Object pbdObj->addVisualModel(surfMeshModel); - pbdObj->setCollidingGeometry(coarseSurfMesh); - pbdObj->setPhysicsGeometry(coarseTetMesh); - pbdObj->setPhysicsToCollidingMap(std::make_shared<OneToOneMap>(coarseTetMesh, coarseSurfMesh)); - pbdObj->setPhysicsToVisualMap(std::make_shared<TetraTriangleMap>(coarseTetMesh, highResSurfMesh)); + pbdObj->setCollidingGeometry(surfMesh); + pbdObj->setPhysicsGeometry(tetMesh); + pbdObj->setPhysicsToVisualMap(std::make_shared<TetraTriangleMap>(tetMesh, surfMesh)); pbdObj->setDynamicalModel(pbdModel); return pbdObj; @@ -189,7 +188,7 @@ main() scene->getCamera()->setFocalPoint(0.0, 0.0, 0.0); // Create and add the dragon to the scene - auto pbdDragon1 = makeDragonPbdObject("PbdDragon1"); + auto pbdDragon1 = makeArmadilloPbdObject("PbdArmadillo1"); scene->addSceneObject(pbdDragon1); auto stairObj = makeStairsPbdObject("PbdStairs", 12, 20.0, 10.0, 20.0); diff --git a/Examples/PBD/PBDDeformableObject/PBD3DDeformableObject.cpp b/Examples/PBD/PBDDeformableObject/PBD3DDeformableObject.cpp index 2d411318e30509d6480df164ba8c1352e820e3c7..f28f17b79e46ee29f84e63e04495b9d26ca599d5 100644 --- a/Examples/PBD/PBDDeformableObject/PBD3DDeformableObject.cpp +++ b/Examples/PBD/PBDDeformableObject/PBD3DDeformableObject.cpp @@ -41,12 +41,10 @@ using namespace imstk; /// \brief Create a PbdObject and add it to a \p scene /// std::shared_ptr<PbdObject> createAndAddPbdObject(std::shared_ptr<Scene> scene, - const std::string& surfMeshName, const std::string& tetMeshName); // mesh file names -const std::string& surfMeshFileName = iMSTK_DATA_ROOT "/asianDragon/asianDragon.obj"; -const std::string& tetMeshFileName = iMSTK_DATA_ROOT "/asianDragon/asianDragon.veg"; +const std::string& tetMeshFileName = iMSTK_DATA_ROOT "textured_organs/heart_volume.vtk"; /// /// \brief This example demonstrates the soft body simulation @@ -60,7 +58,7 @@ main() scene->getCamera()->setPosition(0, 2.0, 15.0); // create and add a PBD object - createAndAddPbdObject(scene, surfMeshFileName, tetMeshFileName); + createAndAddPbdObject(scene, tetMeshFileName); // Setup plane auto planeGeom = std::make_shared<Plane>(); @@ -86,17 +84,21 @@ main() std::shared_ptr<PbdObject> createAndAddPbdObject(std::shared_ptr<Scene> scene, - const std::string& surfMeshName, const std::string& tetMeshName) { - auto surfMesh = std::dynamic_pointer_cast<SurfaceMesh>(MeshIO::read(surfMeshName)); auto tetMesh = std::dynamic_pointer_cast<TetrahedralMesh>(MeshIO::read(tetMeshName)); - //auto tetMesh = TetrahedralMesh::createTetrahedralMeshCover(surfMesh, 10, 6, 6); + tetMesh->rotate(Vec3d(1.0, 0.0, 0.0), -1.3, Geometry::TransformType::ApplyToData); + auto surfMesh = std::make_shared<SurfaceMesh>(); + tetMesh->extractSurfaceMesh(surfMesh, true); auto map = std::make_shared<TetraTriangleMap>(tetMesh, surfMesh); auto material = std::make_shared<RenderMaterial>(); material->setDisplayMode(RenderMaterial::DisplayMode::Surface); + material->setColor(Color(147.0 / 255.0, 32.0 / 255.0, 30.0 / 255.0)); + material->setMetalness(0.9f); + material->setRoughness(0.5); + material->setShadingModel(RenderMaterial::ShadingModel::PBR); auto surfMeshModel = std::make_shared<VisualModel>(surfMesh); surfMeshModel->setRenderMaterial(material); @@ -108,15 +110,15 @@ createAndAddPbdObject(std::shared_ptr<Scene> scene, auto pbdParams = std::make_shared<PBDModelConfig>(); // FEM constraint - pbdParams->m_femParams->m_YoungModulus = 1000.0; + pbdParams->m_femParams->m_YoungModulus = 500.0; pbdParams->m_femParams->m_PoissonRatio = 0.3; - pbdParams->m_fixedNodeIds = { 50, 126, 177 }; + pbdParams->m_fixedNodeIds = { 350 }; pbdParams->enableFEMConstraint(PbdConstraint::Type::FEMTet, PbdFEMConstraint::MaterialType::StVK); // Other parameters pbdParams->m_uniformMassValue = 1.0; pbdParams->m_gravity = Vec3d(0, -9.8, 0); - pbdParams->m_iterations = 15; + pbdParams->m_iterations = 10; // pbdParams->m_solverType = PbdConstraint::SolverType::PBD; // Set the parameters diff --git a/Examples/PBD/PBDString/pbdStringExample.cpp b/Examples/PBD/PBDString/pbdStringExample.cpp index 5bc8bace73eed6e96a42669c5c43ccaa8537a842..d59f975374963f11c0d44569947846b1e78d5a9d 100644 --- a/Examples/PBD/PBDString/pbdStringExample.cpp +++ b/Examples/PBD/PBDString/pbdStringExample.cpp @@ -95,7 +95,6 @@ makePbdString( // Setup the VisualModel std::shared_ptr<RenderMaterial> material = std::make_shared<RenderMaterial>(); material->setBackFaceCulling(false); - material->setColor(color); material->setEdgeColor(color); material->setLineWidth(2.0f); material->setPointSize(6.0f); diff --git a/Examples/TaskGraph/Timing/taskGraphTimingExample.cpp b/Examples/TaskGraph/Timing/taskGraphTimingExample.cpp index c438c94549a04b57a805af7c4a541b16578d3597..7c7149ad35eb5d39eefbaab42126980c61352ce4 100644 --- a/Examples/TaskGraph/Timing/taskGraphTimingExample.cpp +++ b/Examples/TaskGraph/Timing/taskGraphTimingExample.cpp @@ -68,11 +68,11 @@ makeStringGeometry(const Vec3d& pos, const size_t numVerts, const double stringL static std::shared_ptr<PbdObject> makePbdString( const std::string& name, - const Vec3d& pos, + const Vec3d& pos, const size_t numVerts, const double stringLength, const double bendStiffness, - const Color& color) + const Color& color) { std::shared_ptr<PbdObject> stringObj = std::make_shared<PbdObject>(name); @@ -83,10 +83,10 @@ makePbdString( auto pbdParams = std::make_shared<PBDModelConfig>(); pbdParams->enableConstraint(PbdConstraint::Type::Distance, 1e7); pbdParams->enableConstraint(PbdConstraint::Type::Bend, bendStiffness); - pbdParams->m_fixedNodeIds = { 0 }; + pbdParams->m_fixedNodeIds = { 0 }; pbdParams->m_uniformMassValue = 5.0; - pbdParams->m_gravity = Vec3d(0, -9.8, 0); - pbdParams->m_defaultDt = 0.0005; + pbdParams->m_gravity = Vec3d(0, -9.8, 0); + pbdParams->m_defaultDt = 0.0005; pbdParams->m_iterations = 5; // Setup the Model @@ -97,7 +97,7 @@ makePbdString( // Setup the VisualModel std::shared_ptr<RenderMaterial> material = std::make_shared<RenderMaterial>(); material->setBackFaceCulling(false); - material->setColor(color); + material->setEdgeColor(color); material->setLineWidth(2.0f); material->setDisplayMode(RenderMaterial::DisplayMode::Wireframe); @@ -114,11 +114,11 @@ makePbdString( static std::vector<std::shared_ptr<PbdObject>> makePbdStrings(const size_t numStrings, - const size_t numVerts, - const double stringSpacing, - const double stringLength, - const Color& startColor, - const Color& endColor) + const size_t numVerts, + const double stringSpacing, + const double stringLength, + const Color& startColor, + const Color& endColor) { std::vector<std::shared_ptr<PbdObject>> pbdStringObjs(numStrings); @@ -127,7 +127,7 @@ makePbdStrings(const size_t numStrings, for (unsigned int i = 0; i < numStrings; i++) { const Vec3d tipPos = Vec3d(static_cast<double>(i) * stringSpacing - size * 0.5, stringLength * 0.5, 0.0); - const double t = static_cast<double>(i) / (numStrings - 1); + const double t = static_cast<double>(i) / (numStrings - 1); pbdStringObjs[i] = makePbdString( "String " + std::to_string(i), @@ -141,14 +141,14 @@ makePbdStrings(const size_t numStrings, return pbdStringObjs; } -const double dt = 0.0005; -const double radius = 1.5; -const size_t numStrings = 8; // Number of strings -const size_t numVerts = 30; // Number of vertices on each string +const double dt = 0.0005; +const double radius = 1.5; +const size_t numStrings = 8; // Number of strings +const size_t numVerts = 30; // Number of vertices on each string const double stringSpacing = 2.0; // How far each string is apart -const double stringLength = 10.0; // Total length of string -const Color startColor = Color(1.0, 0.0, 0.0); // Color of first string -const Color endColor = Color(0.0, 1.0, 0.0); // Color of last string +const double stringLength = 10.0; // Total length of string +const Color startColor = Color(1.0, 0.0, 0.0); // Color of first string +const Color endColor = Color(0.0, 1.0, 0.0); // Color of last string /// /// \brief This examples uses the timing features of the task graph. This allows one @@ -165,6 +165,7 @@ main() // Setup N separate strings with varying bend stiffnesses std::vector<std::shared_ptr<PbdObject>> pbdStringObjs = makePbdStrings(numStrings, numVerts, stringSpacing, stringLength, startColor, endColor); + // Add them to the scene for (std::shared_ptr<PbdObject> obj : pbdStringObjs) { scene->addSceneObject(obj); @@ -176,7 +177,6 @@ main() // Move the points every frame double t = 0.0; - auto movePoints = [&pbdStringObjs, &t](Module* module) { diff --git a/Source/Geometry/imstkGeometry.cpp b/Source/Geometry/imstkGeometry.cpp index abca330a03cb9322b88f2fb9a0dd56b47383cb85..3d56ecfde0073d3ff0e6595053ef4994330ff866 100644 --- a/Source/Geometry/imstkGeometry.cpp +++ b/Source/Geometry/imstkGeometry.cpp @@ -124,9 +124,9 @@ Geometry::rotate(const Quatd& q, TransformType type) } void -Geometry::rotate(const Vec3d& axis, double angle, TransformType type) +Geometry::rotate(const Vec3d& axis, double radians, TransformType type) { - this->rotate(Rotd(angle, axis).toRotationMatrix(), type); + this->rotate(Rotd(radians, axis).toRotationMatrix(), type); } void diff --git a/Source/Geometry/imstkGeometry.h b/Source/Geometry/imstkGeometry.h index 4f20faceae37cf412f7e6a4fbed0e20065b98b2a..038dc8bffa68e05b9b26b1272379b0a803153bb7 100644 --- a/Source/Geometry/imstkGeometry.h +++ b/Source/Geometry/imstkGeometry.h @@ -118,7 +118,7 @@ public: /// void rotate(const Quatd& q, TransformType type = TransformType::ConcatenateToTransform); void rotate(const Mat3d& m, TransformType type = TransformType::ConcatenateToTransform); - void rotate(const Vec3d& axis, double angle, TransformType type = TransformType::ConcatenateToTransform); + void rotate(const Vec3d& axis, double radians, TransformType type = TransformType::ConcatenateToTransform); /// /// \brief Scale in Cartesian directions diff --git a/Source/Rendering/VTKRenderer/imstkVTKRenderer.cpp b/Source/Rendering/VTKRenderer/imstkVTKRenderer.cpp index f2606e9e083bb2fea8e19fc84bf8b8b3ce627464..60a92b28d55a506065484e52917880b4fe17fe07 100644 --- a/Source/Rendering/VTKRenderer/imstkVTKRenderer.cpp +++ b/Source/Rendering/VTKRenderer/imstkVTKRenderer.cpp @@ -419,76 +419,76 @@ VTKRenderer::getAxesVisibility() const return m_AxesActor->GetVisibility(); } -void -VTKRenderer::setTimeTable(const std::unordered_map<std::string, double>& timeTable) -{ - // Sort by elapsed times - std::vector<std::pair<std::string, double>> nameToTimesVec(timeTable.begin(), timeTable.end()); - std::sort(nameToTimesVec.begin(), nameToTimesVec.end(), - [](const std::pair<std::string, double>& a, const std::pair<std::string, double>& b) { return a.second < b.second; }); - - // Construct vtkTable from provided data - vtkSmartPointer<vtkDoubleArray> xIndices = vtkDoubleArray::SafeDownCast(m_timeTable->GetColumn(0)); - vtkSmartPointer<vtkDoubleArray> yElapsedTimes = vtkDoubleArray::SafeDownCast(m_timeTable->GetColumn(1)); - vtkSmartPointer<vtkStringArray> labels = vtkStringArray::SafeDownCast(m_timeTable->GetColumn(2)); - - labels->SetNumberOfValues(nameToTimesVec.size()); - xIndices->SetNumberOfValues(nameToTimesVec.size()); - yElapsedTimes->SetNumberOfValues(nameToTimesVec.size()); - for (size_t i = 0; i < nameToTimesVec.size(); i++) - { - labels->SetValue(i, nameToTimesVec[i].first.c_str()); - xIndices->SetValue(i, i + 1); - yElapsedTimes->SetValue(i, nameToTimesVec[i].second); - } - - // The range for the x axis is based on history of the elapsed times - vtkAxis* botAxis = m_timeTableChart->GetAxis(vtkAxis::BOTTOM); - - // Get the previous and current range - double newMaxElapsed = yElapsedTimes->GetRange()[1]; - yElapsedTimes->Modified(); - double currMaxElapsed = botAxis->GetMaximum(); - - // Always respect the max as all information should be shown - if (newMaxElapsed > currMaxElapsed) - { - botAxis->SetRange(0.0, newMaxElapsed); - } - // But if current elapsed is less than the existing one we can lag - else - { - // Lag downscaling by 400 iterations - if (m_timeTableIter % 400 == 0) - { - botAxis->SetRange(0.0, newMaxElapsed); - } - else - { - botAxis->SetRange(0.0, currMaxElapsed); - } - m_timeTableIter++; - } - botAxis->Modified(); - - vtkAxis* leftAxis = m_timeTableChart->GetAxis(vtkAxis::LEFT); - leftAxis->SetRange(xIndices->GetRange()); - leftAxis->SetCustomTickPositions(xIndices, labels); - - m_timeTable->Modified(); -} - -void -VTKRenderer::setTimeTableVisibility(const bool visible) -{ - m_timeTableChartActor->SetVisibility(visible); -} - -bool -VTKRenderer::getTimeTableVisibility() const -{ - return m_timeTableChartActor->GetVisibility(); -} +//void +//VTKRenderer::setTimeTable(const std::unordered_map<std::string, double>& timeTable) +//{ +// // Sort by elapsed times +// std::vector<std::pair<std::string, double>> nameToTimesVec(timeTable.begin(), timeTable.end()); +// std::sort(nameToTimesVec.begin(), nameToTimesVec.end(), +// [](const std::pair<std::string, double>& a, const std::pair<std::string, double>& b) { return a.second < b.second; }); +// +// // Construct vtkTable from provided data +// vtkSmartPointer<vtkDoubleArray> xIndices = vtkDoubleArray::SafeDownCast(m_timeTable->GetColumn(0)); +// vtkSmartPointer<vtkDoubleArray> yElapsedTimes = vtkDoubleArray::SafeDownCast(m_timeTable->GetColumn(1)); +// vtkSmartPointer<vtkStringArray> labels = vtkStringArray::SafeDownCast(m_timeTable->GetColumn(2)); +// +// labels->SetNumberOfValues(nameToTimesVec.size()); +// xIndices->SetNumberOfValues(nameToTimesVec.size()); +// yElapsedTimes->SetNumberOfValues(nameToTimesVec.size()); +// for (size_t i = 0; i < nameToTimesVec.size(); i++) +// { +// labels->SetValue(i, nameToTimesVec[i].first.c_str()); +// xIndices->SetValue(i, i + 1); +// yElapsedTimes->SetValue(i, nameToTimesVec[i].second); +// } +// +// // The range for the x axis is based on history of the elapsed times +// vtkAxis* botAxis = m_timeTableChart->GetAxis(vtkAxis::BOTTOM); +// +// // Get the previous and current range +// double newMaxElapsed = yElapsedTimes->GetRange()[1]; +// yElapsedTimes->Modified(); +// double currMaxElapsed = botAxis->GetMaximum(); +// +// // Always respect the max as all information should be shown +// if (newMaxElapsed > currMaxElapsed) +// { +// botAxis->SetRange(0.0, newMaxElapsed); +// } +// // But if current elapsed is less than the existing one we can lag +// else +// { +// // Lag downscaling by 400 iterations +// if (m_timeTableIter % 400 == 0) +// { +// botAxis->SetRange(0.0, newMaxElapsed); +// } +// else +// { +// botAxis->SetRange(0.0, currMaxElapsed); +// } +// m_timeTableIter++; +// } +// botAxis->Modified(); +// +// vtkAxis* leftAxis = m_timeTableChart->GetAxis(vtkAxis::LEFT); +// leftAxis->SetRange(xIndices->GetRange()); +// leftAxis->SetCustomTickPositions(xIndices, labels); +// +// m_timeTable->Modified(); +//} +// +//void +//VTKRenderer::setTimeTableVisibility(const bool visible) +//{ +// m_timeTableChartActor->SetVisibility(visible); +//} +// +//bool +//VTKRenderer::getTimeTableVisibility() const +//{ +// return m_timeTableChartActor->GetVisibility(); +//} void VTKRenderer::updateSceneCamera(std::shared_ptr<Camera> imstkCam) diff --git a/Source/Rendering/VTKRenderer/imstkVTKRenderer.h b/Source/Rendering/VTKRenderer/imstkVTKRenderer.h index 22e13ea70d9067b8c6234cdad61bba07251450b7..65db5794a405dd505205a17080a69cf5eabf8882 100644 --- a/Source/Rendering/VTKRenderer/imstkVTKRenderer.h +++ b/Source/Rendering/VTKRenderer/imstkVTKRenderer.h @@ -102,17 +102,17 @@ public: /// /// \brief Sets the benchmarking table using unordered_map /// - void setTimeTable(const std::unordered_map<std::string, double>& timeTable); + //void setTimeTable(const std::unordered_map<std::string, double>& timeTable); /// /// \brief Set the visibility of the benchmark graph /// - void setTimeTableVisibility(const bool visible); + //void setTimeTableVisibility(const bool visible); /// /// \brief Get the visibility of the benchmark graph /// - bool getTimeTableVisibility() const; + //bool getTimeTableVisibility() const; /// /// \brief Updates the scene camera's position and orientation diff --git a/Source/SimulationManager/VTKRenderer/imstkVTKViewer.cpp b/Source/SimulationManager/VTKRenderer/imstkVTKViewer.cpp index e53ca868bf6ea18f80a3479c8f6749eae1ae272e..d5ab9f6b983c4d52c82ff1f0134a3b480bfacf23 100644 --- a/Source/SimulationManager/VTKRenderer/imstkVTKViewer.cpp +++ b/Source/SimulationManager/VTKRenderer/imstkVTKViewer.cpp @@ -80,9 +80,9 @@ VTKViewer::VTKViewer(SimulationManager* manager /*= nullptr*/, bool enableVR /*= #endif // Setup callback for timer on the interactor - timerCallbackCommand = vtkSmartPointer<vtkCallbackCommand>::New(); + /*timerCallbackCommand = vtkSmartPointer<vtkCallbackCommand>::New(); timerCallbackCommand->SetCallback(timerCallback); - timerCallbackCommand->SetClientData(this); + timerCallbackCommand->SetClientData(this);*/ } void @@ -190,13 +190,13 @@ VTKViewer::startRenderingLoop() m_vtkRenderWindow->GetInteractor()->CreateOneShotTimer(0); // If the Scene wants benchmarking hookup timer to update the table - auto vtkRen = std::dynamic_pointer_cast<VTKRenderer>(getActiveRenderer()); + /*auto vtkRen = std::dynamic_pointer_cast<VTKRenderer>(getActiveRenderer()); vtkRen->setTimeTableVisibility(m_activeScene->getConfig()->taskTimingEnabled); if (m_activeScene->getConfig()->taskTimingEnabled) { m_vtkRenderWindow->GetInteractor()->AddObserver(vtkCommand::TimerEvent, timerCallbackCommand); m_vtkRenderWindow->GetInteractor()->CreateRepeatingTimer(500); - } + }*/ m_vtkRenderWindow->SetWindowName(m_config->m_windowName.c_str()); m_vtkRenderWindow->GetInteractor()->Start(); @@ -254,17 +254,17 @@ VTKViewer::getTextStatusManager() return m_vtkInteractorStyle->getTextStatusManager(); } -void -VTKViewer::timerCallback(vtkObject* caller, long unsigned int vtkNotUsed(eventId), void* clientData, void* vtkNotUsed(callData)) -{ - VTKViewer* self = static_cast<VTKViewer*>(clientData); - - if (self->getActiveScene()->getConfig()->taskTimingEnabled) - { - auto vtkRen = std::dynamic_pointer_cast<VTKRenderer>(self->getActiveRenderer()); - self->getActiveScene()->lockComputeTimes(); - vtkRen->setTimeTable(self->getActiveScene()->getTaskComputeTimes()); - self->getActiveScene()->unlockComputeTimes(); - } -} +//void +//VTKViewer::timerCallback(vtkObject* caller, long unsigned int vtkNotUsed(eventId), void* clientData, void* vtkNotUsed(callData)) +//{ +// VTKViewer* self = static_cast<VTKViewer*>(clientData); +// +// if (self->getActiveScene()->getConfig()->taskTimingEnabled) +// { +// auto vtkRen = std::dynamic_pointer_cast<VTKRenderer>(self->getActiveRenderer()); +// self->getActiveScene()->lockComputeTimes(); +// vtkRen->setTimeTable(self->getActiveScene()->getTaskComputeTimes()); +// self->getActiveScene()->unlockComputeTimes(); +// } +//} } // imstk diff --git a/Source/SimulationManager/VTKRenderer/imstkVTKViewer.h b/Source/SimulationManager/VTKRenderer/imstkVTKViewer.h index 5280057247dc4684ddddba2b2681000f43f7aed3..2cc0c11031e4f73775d04d3e31c919adbc423eef 100644 --- a/Source/SimulationManager/VTKRenderer/imstkVTKViewer.h +++ b/Source/SimulationManager/VTKRenderer/imstkVTKViewer.h @@ -111,13 +111,13 @@ public: protected: /// \brief TODO - static void timerCallback(vtkObject* caller, long unsigned int eventId, void* clientData, void* callData); + //static void timerCallback(vtkObject* caller, long unsigned int eventId, void* clientData, void* callData); vtkSmartPointer<vtkRenderWindow> m_vtkRenderWindow; std::shared_ptr<VTKInteractorStyle> m_vtkInteractorStyle; bool m_enableVR; - vtkSmartPointer<vtkCallbackCommand> timerCallbackCommand; + //vtkSmartPointer<vtkCallbackCommand> timerCallbackCommand; #ifdef iMSTK_ENABLE_VR vtkSmartPointer<OpenVRCommand> m_openVRCommand;