From f4ba920906edd19d062e8c365c914e403279fb0d Mon Sep 17 00:00:00 2001
From: Andrew Wilson <andx_roo@live.com>
Date: Mon, 1 Jun 2020 17:32:21 -0400
Subject: [PATCH] REFAC: Examples updated

---
 .../ManualCDWithOctreeExample.cpp             |   1 -
 .../CreateEnclosingMesh.cpp                   |   1 -
 .../DebugRendering/DebugRenderingExample.cpp  |   1 -
 .../DeformableBody/DeformableBodyExample.cpp  |  34 +---
 .../GeometryProcessingExample.cpp             |   1 -
 .../GeometryTransformsExample.cpp             |   1 -
 Examples/LineMesh/LineMeshExample.cpp         |   1 -
 Examples/MultipleScenes/multipleScenes.cpp    |  11 +-
 .../ObjectCtrlDummyClientExample.cpp          |   1 -
 Examples/PBD/PBDCloth/pbdClothExample.cpp     |   5 +-
 .../PBDCollisionMultipleObjectsExample.cpp    | 143 +++++---------
 .../PBDCollisionOneObjectExample.cpp          |  32 ++-
 .../PBDCollisionStairsExample.cpp             | 183 ++++++++++--------
 .../PBD3DDeformableObject.cpp                 |   9 +-
 Examples/PBD/PBDFluids/PBDFluidsExample.cpp   |  30 ++-
 Examples/PBD/PBDString/pbdStringExample.cpp   |   5 +-
 Examples/Rendering/RenderingExample.cpp       |   1 -
 Examples/SPHFluid/Fluid.hpp                   |   6 -
 Examples/SPHFluid/SPHFluidExample.hpp         |  16 +-
 .../SceneManagementExample.cpp                |   4 +-
 Examples/Screenshot/ScreenshotExample.cpp     |   1 -
 .../VolumeRenderingExample.cpp                |   1 -
 22 files changed, 192 insertions(+), 296 deletions(-)

diff --git a/Examples/CollisionDetection/ManualCDWithOctree/ManualCDWithOctreeExample.cpp b/Examples/CollisionDetection/ManualCDWithOctree/ManualCDWithOctreeExample.cpp
index a36fe291a..e936eaca3 100644
--- a/Examples/CollisionDetection/ManualCDWithOctree/ManualCDWithOctreeExample.cpp
+++ b/Examples/CollisionDetection/ManualCDWithOctree/ManualCDWithOctreeExample.cpp
@@ -33,7 +33,6 @@
 #include "imstkCollidingObject.h"
 #include "imstkSceneManager.h"
 #include "imstkSurfaceMesh.h"
-#include "imstkCollisionGraph.h"
 #include "imstkScene.h"
 #include "imstkVTKRenderer.h"
 
diff --git a/Examples/CreateEnclosingMesh/CreateEnclosingMesh.cpp b/Examples/CreateEnclosingMesh/CreateEnclosingMesh.cpp
index 48e14db1b..18f13d1a6 100644
--- a/Examples/CreateEnclosingMesh/CreateEnclosingMesh.cpp
+++ b/Examples/CreateEnclosingMesh/CreateEnclosingMesh.cpp
@@ -22,7 +22,6 @@
 #include "imstkSimulationManager.h"
 #include "imstkLight.h"
 #include "imstkCamera.h"
-#include "imstkCollisionGraph.h"
 #include "imstkAPIUtilities.h"
 #include "imstkSurfaceMesh.h"
 #include "imstkTetrahedralMesh.h"
diff --git a/Examples/DebugRendering/DebugRenderingExample.cpp b/Examples/DebugRendering/DebugRenderingExample.cpp
index fa36764c3..1dd76526a 100644
--- a/Examples/DebugRendering/DebugRenderingExample.cpp
+++ b/Examples/DebugRendering/DebugRenderingExample.cpp
@@ -24,7 +24,6 @@
 #include "imstkLight.h"
 #include "imstkCamera.h"
 #include "imstkSceneManager.h"
-#include "imstkCollisionGraph.h"
 #include "imstkDebugRenderGeometry.h"
 #include "imstkAPIUtilities.h"
 #include "imstkVTKViewer.h"
diff --git a/Examples/DeformableBody/DeformableBodyExample.cpp b/Examples/DeformableBody/DeformableBodyExample.cpp
index a49faf30d..e567f47c7 100644
--- a/Examples/DeformableBody/DeformableBodyExample.cpp
+++ b/Examples/DeformableBody/DeformableBodyExample.cpp
@@ -35,7 +35,6 @@
 #include "imstkLight.h"
 #include "imstkCamera.h"
 #include "imstkFEMDeformableBodyModel.h"
-#include "imstkCollisionGraph.h"
 #include "imstkSurfaceMesh.h"
 #include "imstkScene.h"
 
@@ -68,21 +67,16 @@ main()
 
     volTetMesh->extractSurfaceMesh(surfMesh, true);
 
-    // Construct a map
-
     // Construct one to one nodal map based on the above meshes
     auto oneToOneNodalMap = std::make_shared<OneToOneMap>(tetMesh, surfMesh);
 
-    // Scene object 1: Dragon
-
     // Configure dynamic model
     auto dynaModel = std::make_shared<FEMDeformableBodyModel>();
 
-    //dynaModel->configure(iMSTK_DATA_ROOT "/asianDragon/asianDragon.config");
-
     auto config = std::make_shared<FEMModelConfig>();
     config->m_fixedNodeIds = { 51, 127, 178 };
     dynaModel->configure(config);
+    //dynaModel->configure(iMSTK_DATA_ROOT "/asianDragon/asianDragon.config");
 
     dynaModel->setTimeStepSizeType(TimeSteppingType::Fixed);
     dynaModel->setModelGeometry(volTetMesh);
@@ -94,7 +88,7 @@ main()
     auto surfMeshModel = std::make_shared<VisualModel>(surfMesh);
     surfMeshModel->setRenderMaterial(material);
 
-    // Scene Object
+    // Scene object 1: Dragon
     auto deformableObj = std::make_shared<FeDeformableObject>("Dragon");
     deformableObj->addVisualModel(surfMeshModel);
     deformableObj->setPhysicsGeometry(volTetMesh);
@@ -111,30 +105,6 @@ main()
     planeObj->setCollidingGeometry(planeGeom);
     scene->addSceneObject(planeObj);
 
-    // create a nonlinear system
-    auto nlSystem = std::make_shared<NonLinearSystem>(
-        dynaModel->getFunction(),
-        dynaModel->getFunctionGradient());
-
-    nlSystem->setUnknownVector(dynaModel->getUnknownVec());
-    nlSystem->setUpdateFunction(dynaModel->getUpdateFunction());
-    nlSystem->setUpdatePreviousStatesFunction(dynaModel->getUpdatePrevStateFunction());
-
-    // create a linear solver
-    auto linSolver = std::make_shared<ConjugateGradient>();
-
-    if (linSolver->getType() == imstk::LinearSolver<imstk::SparseMatrixd>::Type::GaussSeidel
-        && dynaModel->isFixedBCImplemented())
-    {
-        LOG(WARNING) << "The GS solver may not be viable!";
-    }
-
-    // create a non-linear solver and add to the scene
-    auto nlSolver = std::make_shared<NewtonSolver>();
-    nlSolver->setLinearSolver(linSolver);
-    nlSolver->setSystem(nlSystem);
-    scene->addNonlinearSolver(nlSolver);
-
     // Light
     auto light = std::make_shared<DirectionalLight>("light");
     light->setFocalPoint(Vec3d(5, -8, -5));
diff --git a/Examples/GeometryProcessing/GeometryProcessingExample.cpp b/Examples/GeometryProcessing/GeometryProcessingExample.cpp
index 7a7df7d81..13c67ddfd 100644
--- a/Examples/GeometryProcessing/GeometryProcessingExample.cpp
+++ b/Examples/GeometryProcessing/GeometryProcessingExample.cpp
@@ -31,7 +31,6 @@
 #include "imstkMeshIO.h"
 #include "imstkSurfaceMesh.h"
 #include "imstkTetrahedralMesh.h"
-#include "imstkCollisionGraph.h"
 #include "imstkScene.h"
 
 using namespace imstk;
diff --git a/Examples/GeometryTransforms/GeometryTransformsExample.cpp b/Examples/GeometryTransforms/GeometryTransformsExample.cpp
index a2656b5e9..b382a6506 100644
--- a/Examples/GeometryTransforms/GeometryTransformsExample.cpp
+++ b/Examples/GeometryTransforms/GeometryTransformsExample.cpp
@@ -21,7 +21,6 @@
 
 #include "imstkSimulationManager.h"
 #include "imstkSceneManager.h"
-#include "imstkCollisionGraph.h"
 #include "imstkSceneObject.h"
 #include "imstkCamera.h"
 #include "imstkLight.h"
diff --git a/Examples/LineMesh/LineMeshExample.cpp b/Examples/LineMesh/LineMeshExample.cpp
index 0aeb68af3..fdecd4d32 100644
--- a/Examples/LineMesh/LineMeshExample.cpp
+++ b/Examples/LineMesh/LineMeshExample.cpp
@@ -20,7 +20,6 @@
 =========================================================================*/
 
 #include "imstkSimulationManager.h"
-#include "imstkCollisionGraph.h"
 #include "imstkAPIUtilities.h"
 #include "imstkCamera.h"
 #include "imstkLineMesh.h"
diff --git a/Examples/MultipleScenes/multipleScenes.cpp b/Examples/MultipleScenes/multipleScenes.cpp
index ca7f47f62..fbe49abf2 100644
--- a/Examples/MultipleScenes/multipleScenes.cpp
+++ b/Examples/MultipleScenes/multipleScenes.cpp
@@ -28,7 +28,6 @@
 #include "imstkSurfaceMesh.h"
 #include "imstkMeshIO.h"
 #include "imstkTetrahedralMesh.h"
-#include "imstkCollisionGraph.h"
 #include "imstkPlane.h"
 #include "imstkScene.h"
 
@@ -66,15 +65,15 @@ createSoftBodyScene(std::shared_ptr<SimulationManager> simManager, const char* s
     auto pbdParams = std::make_shared<PBDModelConfig>();
 
     // FEM constraint
-    pbdParams->m_YoungModulus = 100.0;
-    pbdParams->m_PoissonRatio = 0.3;
+    pbdParams->femParams->m_YoungModulus = 100.0;
+    pbdParams->femParams->m_PoissonRatio = 0.3;
     pbdParams->m_fixedNodeIds = { 51, 127, 178 };
     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_maxIter = 45;
+    pbdParams->m_iterations = 45;
 
     // Set the parameters
     pbdModel->configure(pbdParams);
@@ -165,8 +164,8 @@ createClothScene(std::shared_ptr<SimulationManager> simManager, const char* scen
     // Other parameters
     pbdParams->m_uniformMassValue = 1.0;
     pbdParams->m_gravity   = Vec3d(0, -9.8, 0);
-    pbdParams->m_DefaultDt = 0.03;
-    pbdParams->m_maxIter   = 5;
+    pbdParams->m_defaultDt = 0.03;
+    pbdParams->m_iterations   = 5;
 
     // Set the parameters
     pbdModel->configure(pbdParams);
diff --git a/Examples/ObjectControllerDummyClient/ObjectCtrlDummyClientExample.cpp b/Examples/ObjectControllerDummyClient/ObjectCtrlDummyClientExample.cpp
index 87b0344db..632019b2a 100644
--- a/Examples/ObjectControllerDummyClient/ObjectCtrlDummyClientExample.cpp
+++ b/Examples/ObjectControllerDummyClient/ObjectCtrlDummyClientExample.cpp
@@ -21,7 +21,6 @@
 
 #include "imstkSimulationManager.h"
 #include "imstkCollidingObject.h"
-#include "imstkCollisionGraph.h"
 #include "imstkCamera.h"
 #include "imstkLight.h"
 #include "imstkSceneManager.h"
diff --git a/Examples/PBD/PBDCloth/pbdClothExample.cpp b/Examples/PBD/PBDCloth/pbdClothExample.cpp
index 6ccbf0a2c..0477de140 100644
--- a/Examples/PBD/PBDCloth/pbdClothExample.cpp
+++ b/Examples/PBD/PBDCloth/pbdClothExample.cpp
@@ -24,7 +24,6 @@
 #include "imstkPbdObject.h"
 #include "imstkAPIUtilities.h"
 #include "imstkSurfaceMesh.h"
-#include "imstkCollisionGraph.h"
 #include "imstkCamera.h"
 #include "imstkLight.h"
 #include "imstkScene.h"
@@ -112,8 +111,8 @@ main()
     // Other parameters
     pbdParams->m_uniformMassValue = 1.0;
     pbdParams->m_gravity   = Vec3d(0, -9.8, 0);
-    pbdParams->m_DefaultDt = 0.005;
-    pbdParams->m_maxIter   = 5;
+    pbdParams->m_defaultDt = 0.005;
+    pbdParams->m_iterations   = 5;
 
     // Set the parameters
     pbdModel->configure(pbdParams);
diff --git a/Examples/PBD/PBDCollisionMultipleObjects/PBDCollisionMultipleObjectsExample.cpp b/Examples/PBD/PBDCollisionMultipleObjects/PBDCollisionMultipleObjectsExample.cpp
index e620279b5..98da44f06 100644
--- a/Examples/PBD/PBDCollisionMultipleObjects/PBDCollisionMultipleObjectsExample.cpp
+++ b/Examples/PBD/PBDCollisionMultipleObjects/PBDCollisionMultipleObjectsExample.cpp
@@ -19,22 +19,17 @@
 
 =========================================================================*/
 
-#include "imstkSimulationManager.h"
-#include "imstkLight.h"
 #include "imstkCamera.h"
 #include "imstkCollisionGraph.h"
-#include "imstkSceneManager.h"
-#include "imstkPbdModel.h"
-#include "imstkPbdObject.h"
-#include "imstkTetrahedralMesh.h"
+#include "imstkLight.h"
 #include "imstkMeshIO.h"
+#include "imstkObjectInteractionFactory.h"
 #include "imstkOneToOneMap.h"
-#include "imstkSurfaceMeshToSurfaceMeshCD.h"
-#include "imstkPBDCollisionHandling.h"
-#include "imstkVTKTextStatusManager.h"
-#include "imstkCollisionData.h"
-#include "imstkSurfaceMesh.h"
+#include "imstkPbdModel.h"
 #include "imstkScene.h"
+#include "imstkSimulationManager.h"
+#include "imstkSurfaceMesh.h"
+#include "imstkTetrahedralMesh.h"
 
 // Enable this macro to generate many dragons
 #define BIG_SCENE
@@ -124,17 +119,16 @@ generateDragon(const std::shared_ptr<imstk::Scene>& scene,
     auto pbdParams = std::make_shared<PBDModelConfig>();
 
     // FEM constraint
-    pbdParams->m_YoungModulus = 1000.0;
-    pbdParams->m_PoissonRatio = 0.3;
+    pbdParams->femParams->m_YoungModulus = 1000.0;
+    pbdParams->femParams->m_PoissonRatio = 0.3;
     pbdParams->enableFEMConstraint(PbdConstraint::Type::FEMTet, PbdFEMConstraint::MaterialType::StVK);
 
     // Other parameters
     pbdParams->m_uniformMassValue = 5.0;
     pbdParams->m_gravity   = Vec3d(0, -1.0, 0);
-    pbdParams->m_DefaultDt = 0.01;
-    pbdParams->m_maxIter   = 20;
-    pbdParams->m_proximity = 0.5;
-    pbdParams->m_contactStiffness = 0.1;
+    pbdParams->m_defaultDt = 0.01;
+    pbdParams->m_iterations = 20;
+    pbdParams->collisionParams->m_proximity = 0.5;
 
     pbdModel->configure(pbdParams);
     deformableObj->setDynamicalModel(pbdModel);
@@ -156,10 +150,6 @@ main()
     auto viewer = std::dynamic_pointer_cast<VTKViewer>(simManager->getViewer());
     viewer->getVtkRenderWindow()->SetSize(1920, 1080);
 
-    auto statusManager = viewer->getTextStatusManager();
-    statusManager->setStatusFontSize(VTKTextStatusManager::Custom, 25);
-    statusManager->setStatusFontColor(VTKTextStatusManager::Custom, Color::Orange);
-
     // Build floor geometry
     const double width  = 100.0;
     const double height = 100.0;
@@ -194,48 +184,45 @@ main()
         }
     }
 
-    auto floorMesh = std::make_shared<SurfaceMesh>();
-    floorMesh->initialize(vertList, triangles);
-
-    auto materialFloor = std::make_shared<RenderMaterial>();
-    materialFloor->setDisplayMode(RenderMaterial::DisplayMode::WireframeSurface);
-    auto floorMeshModel = std::make_shared<VisualModel>(floorMesh);
-    floorMeshModel->setRenderMaterial(materialFloor);
-
-    auto floor = std::make_shared<PbdObject>("Floor");
-    floor->setCollidingGeometry(floorMesh);
-    floor->setVisualGeometry(floorMesh);
-    floor->setPhysicsGeometry(floorMesh);
-
-    auto pbdModel2 = std::make_shared<PbdModel>();
-    pbdModel2->setModelGeometry(floorMesh);
-
-    // configure model
-    auto pbdParams2 = std::make_shared<PBDModelConfig>();
-    pbdParams2->m_uniformMassValue = 0.0;
-    pbdParams2->m_proximity = 0.1;
-    pbdParams2->m_contactStiffness = 0.1;
-    pbdParams2->m_maxIter = 0;
-
-    // Set the parameters
-    pbdModel2->configure(pbdParams2);
-    floor->setDynamicalModel(pbdModel2);
-    scene->addSceneObject(floor);
+    auto floorObj = std::make_shared<PbdObject>("Floor");
+    {
+        auto floorMesh = std::make_shared<SurfaceMesh>();
+        floorMesh->initialize(vertList, triangles);
+
+        auto materialFloor = std::make_shared<RenderMaterial>();
+        materialFloor->setDisplayMode(RenderMaterial::DisplayMode::WireframeSurface);
+        auto floorMeshModel = std::make_shared<VisualModel>(floorMesh);
+        floorMeshModel->setRenderMaterial(materialFloor);
+
+        floorObj->setCollidingGeometry(floorMesh);
+        floorObj->setVisualGeometry(floorMesh);
+        floorObj->setPhysicsGeometry(floorMesh);
+
+        auto pbdFloorModel = std::make_shared<PbdModel>();
+        pbdFloorModel->setModelGeometry(floorMesh);
+
+        // Configure floor
+        auto pbdFloorConfig = std::make_shared<PBDModelConfig>();
+        pbdFloorConfig->m_uniformMassValue = 0.0;
+        pbdFloorConfig->collisionParams->m_proximity = -0.1;
+        pbdFloorConfig->m_iterations = 0;
+
+        // Set the parameters
+        pbdFloorModel->configure(pbdFloorConfig);
+        floorObj->setDynamicalModel(pbdFloorModel);
+        scene->addSceneObject(floorObj);
+    }
 
 #ifdef BIG_SCENE
     const int expandsXZ = 1;
-    const int expandsY  = 4;
+    const int expandsY  = 2;
 #endif
     const double shiftX     = 5.0;
     const double distanceXZ = 10.0;
     const double distanceY  = 5.0;
     const double minHeight  = -5.0;
 
-    std::vector<std::shared_ptr<SurfaceMesh>> surfaceMeshes;
     std::vector<std::shared_ptr<PbdObject>>   pbdObjs;
-    //std::vector<std::shared_ptr<PbdSolver>>     pbdSolvers;
-    std::vector<std::shared_ptr<CollisionData>> allCollisionData;
-    size_t                                      numTriangles = 0;
 
 #ifdef BIG_SCENE
     for (int i = -expandsXZ; i < expandsXZ; ++i)
@@ -260,59 +247,23 @@ main()
                 std::shared_ptr<PbdSolver>   solver;
                 Vec3d                        translation(shiftX + i * distanceXZ, minHeight + j * distanceY, k * distanceXZ);
                 generateDragon(scene, translation, mesh, pbdObj, solver);
-                surfaceMeshes.push_back(mesh);
                 pbdObjs.push_back(pbdObj);
-                //pbdSolvers.push_back(solver);
-                numTriangles += mesh->getNumTriangles();
-
-                // Collision between dragon with floor
-                const auto colData = std::make_shared<CollisionData>();
-                const auto CD      = std::make_shared<SurfaceMeshToSurfaceMeshCD>(mesh, floorMesh, colData);
-                const auto CH      = std::make_shared<PBDCollisionHandling>(CollisionHandling::Side::A,
-                                                                            colData, pbdObj, floor);
-                scene->getCollisionGraph()->addInteractionPair(pbdObj, floor, CD, CH, nullptr);
-                allCollisionData.push_back(colData);
+
+                scene->getCollisionGraph()->addInteraction(makeObjectInteractionPair(pbdObj, floorObj,
+                    InteractionType::PbdObjToPbdObj_Collision, CollisionDetection::Type::SurfaceMeshToSurfaceMesh));
             }
         }
     }
 
-    for (size_t i = 0; i < surfaceMeshes.size(); ++i)
+    for (size_t i = 0; i < pbdObjs.size(); ++i)
     {
-        for (size_t j = 0; j < surfaceMeshes.size(); ++j)
+        for (size_t j = i + 1; j < pbdObjs.size(); ++j)
         {
-            if (i == j)
-            {
-                continue;
-            }
-
-            // Collision between two dragons
-            const auto colData = std::make_shared<CollisionData>();
-            const auto CD      = std::make_shared<SurfaceMeshToSurfaceMeshCD>(surfaceMeshes[i], surfaceMeshes[j], colData);
-            const auto CH      = std::make_shared<PBDCollisionHandling>(CollisionHandling::Side::A,
-                                                                        colData, pbdObjs[i], pbdObjs[j]);
-            scene->getCollisionGraph()->addInteractionPair(pbdObjs[i], pbdObjs[j], CD, CH, nullptr);
+            scene->getCollisionGraph()->addInteraction(makeObjectInteractionPair(pbdObjs[i], pbdObjs[j],
+                InteractionType::PbdObjToPbdObj_Collision, CollisionDetection::Type::SurfaceMeshToSurfaceMesh));
         }
     }
 
-    auto updateFunc =
-        [&](Module*) {
-            size_t numVTCollisions = 0;
-            size_t numEECollisions = 0;
-            for (const auto& colData: allCollisionData)
-            {
-                numVTCollisions += colData->VTColData.getSize();
-                numEECollisions += colData->EEColData.getSize();
-            }
-
-            std::stringstream ss;
-            ss << "Num. dragons: " << surfaceMeshes.size()
-               << "\nNum. surface triangles: " << numTriangles
-               << "\nNum. collision: " << numVTCollisions << " (VT) | "
-               << numEECollisions << " (EE)";
-            statusManager->setCustomStatus(ss.str());
-        };
-    simManager->getSceneManager(scene)->setPostUpdateCallback(updateFunc);
-
     // Light
     auto light = std::make_shared<DirectionalLight>("light");
     light->setFocalPoint(Vec3d(5, -8, -5));
diff --git a/Examples/PBD/PBDCollisionOneObject/PBDCollisionOneObjectExample.cpp b/Examples/PBD/PBDCollisionOneObject/PBDCollisionOneObjectExample.cpp
index 8a09a5c06..8616bf08b 100644
--- a/Examples/PBD/PBDCollisionOneObject/PBDCollisionOneObjectExample.cpp
+++ b/Examples/PBD/PBDCollisionOneObject/PBDCollisionOneObjectExample.cpp
@@ -24,15 +24,13 @@
 #include "imstkCamera.h"
 #include "imstkLight.h"
 #include "imstkPbdModel.h"
-#include "imstkPbdObject.h"
-#include "imstkTetrahedralMesh.h"
 #include "imstkMeshIO.h"
 #include "imstkOneToOneMap.h"
-#include "imstkMeshToMeshBruteForceCD.h"
-#include "imstkPBDCollisionHandling.h"
 #include "imstkTetraTriangleMap.h"
 #include "imstkSurfaceMesh.h"
 #include "imstkScene.h"
+#include "imstkComputeGraphVizWriter.h"
+#include "imstkObjectInteractionFactory.h"
 
 using namespace imstk;
 
@@ -44,8 +42,7 @@ int
 main()
 {
     auto simManager = std::make_shared<SimulationManager>();
-    auto scene      = simManager->createNewScene("PbdCollision");
-
+    auto scene      = simManager->createNewScene("PbdCollisionOneDragon");
     scene->getCamera()->setPosition(0, 3.0, 20.0);
     scene->getCamera()->setFocalPoint(0.0, -10.0, 0.0);
 
@@ -81,18 +78,18 @@ main()
     auto pbdParams = std::make_shared<PBDModelConfig>();
 
     // FEM constraint
-    pbdParams->m_YoungModulus = 1000.0;
-    pbdParams->m_PoissonRatio = 0.3;
+    pbdParams->femParams->m_YoungModulus = 1000.0;
+    pbdParams->femParams->m_PoissonRatio = 0.3;
     pbdParams->enableFEMConstraint(PbdConstraint::Type::FEMTet,
                                    PbdFEMConstraint::MaterialType::Corotation);
 
     // Other parameters
     pbdParams->m_uniformMassValue = 1.0;
     pbdParams->m_gravity   = Vec3d(0, -10.0, 0);
-    pbdParams->m_DefaultDt = 0.01;
-    pbdParams->m_maxIter   = 5;
-    pbdParams->m_proximity = 0.3;
-    pbdParams->m_contactStiffness = 0.1;
+    pbdParams->m_defaultDt = 0.01;
+    pbdParams->m_iterations   = 5;
+    pbdParams->collisionParams->m_proximity = 0.3;
+    pbdParams->collisionParams->m_stiffness = 0.1;
 
     pbdModel->configure(pbdParams);
     deformableObj->setDynamicalModel(pbdModel);
@@ -152,9 +149,8 @@ main()
     // configure model
     auto pbdParams2 = std::make_shared<PBDModelConfig>();
     pbdParams2->m_uniformMassValue = 0.0;
-    pbdParams2->m_proximity = 0.1;
-    pbdParams2->m_contactStiffness = 1.0;
-    pbdParams2->m_maxIter = 0;
+    pbdParams2->m_iterations = 0;
+    pbdParams2->collisionParams->m_proximity = -0.1;
 
     // Set the parameters
     pbdModel2->configure(pbdParams2);
@@ -163,10 +159,8 @@ main()
     scene->addSceneObject(floor);
 
     // Collision
-    scene->getCollisionGraph()->addInteractionPair(deformableObj, floor,
-        CollisionDetection::Type::MeshToMeshBruteForce,
-        CollisionHandling::Type::PBD,
-        CollisionHandling::Type::None);
+    scene->getCollisionGraph()->addInteraction(makeObjectInteractionPair(deformableObj, floor,
+        InteractionType::PbdObjToPbdObj_Collision, CollisionDetection::Type::MeshToMeshBruteForce));
 
     // Light
     auto light = std::make_shared<DirectionalLight>("light");
diff --git a/Examples/PBD/PBDCollisionStairs/PBDCollisionStairsExample.cpp b/Examples/PBD/PBDCollisionStairs/PBDCollisionStairsExample.cpp
index 7ae559e88..bbc2c685a 100644
--- a/Examples/PBD/PBDCollisionStairs/PBDCollisionStairsExample.cpp
+++ b/Examples/PBD/PBDCollisionStairs/PBDCollisionStairsExample.cpp
@@ -20,6 +20,8 @@
 //=========================================================================*/
 
 #include "imstkCamera.h"
+#include "imstkCollisionGraph.h"
+#include "imstkLight.h"
 #include "imstkMeshIO.h"
 #include "imstkMeshToMeshBruteForceCD.h"
 #include "imstkOneToOneMap.h"
@@ -27,13 +29,12 @@
 #include "imstkPbdModel.h"
 #include "imstkPbdObject.h"
 #include "imstkPbdSolver.h"
+#include "imstkScene.h"
 #include "imstkSimulationManager.h"
+#include "imstkSurfaceMesh.h"
 #include "imstkTetrahedralMesh.h"
 #include "imstkTetraTriangleMap.h"
-#include "imstkCollisionGraph.h"
-#include "imstkSurfaceMesh.h"
-#include "imstkLight.h"
-#include "imstkScene.h"
+#include "imstkObjectInteractionFactory.h"
 
 using namespace imstk;
 
@@ -92,6 +93,87 @@ buildStairs(int nSteps, double width, double height, double depth)
     return stairMesh;
 }
 
+static std::shared_ptr<PbdObject>
+makeDragonPbdObject(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);
+
+    // Setup the Parameters
+    auto pbdParams = std::make_shared<PBDModelConfig>();
+    pbdParams->femParams->m_YoungModulus = 1000.0;
+    pbdParams->femParams->m_PoissonRatio = 0.3;
+    pbdParams->enableFEMConstraint(PbdConstraint::Type::FEMTet,
+        PbdFEMConstraint::MaterialType::StVK);
+    pbdParams->m_uniformMassValue = 1.0;
+    pbdParams->m_gravity   = Vec3d(0, -10.0, 0);
+    pbdParams->m_defaultDt = 0.01;
+    pbdParams->m_iterations = 10;
+    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->configure(pbdParams);
+
+    // Setup the VisualModel
+    auto material = std::make_shared<RenderMaterial>();
+    material->setDisplayMode(RenderMaterial::DisplayMode::WireframeSurface);
+    auto surfMeshModel = std::make_shared<VisualModel>(highResSurfMesh);
+    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->setDynamicalModel(pbdModel);
+
+    return pbdObj;
+}
+
+static std::shared_ptr<PbdObject>
+makeStairsPbdObject(const std::string& name, int numSteps, double width, double height, double depth)
+{
+    auto stairObj = std::make_shared<PbdObject>(name);
+
+    std::shared_ptr<SurfaceMesh> stairMesh(std::move(buildStairs(numSteps, width, height, depth)));
+
+    // Setup the parameters
+    auto pbdParams = std::make_shared<PBDModelConfig>();
+    pbdParams->m_uniformMassValue = 0.0;
+    pbdParams->collisionParams->m_proximity = -0.1;
+    pbdParams->m_iterations = 0;
+
+    // Setup the model
+    auto pbdModel = std::make_shared<PbdModel>();
+    pbdModel->setModelGeometry(stairMesh);
+    pbdModel->configure(pbdParams);
+
+    // Setup the VisualModel
+    auto stairMaterial = std::make_shared<RenderMaterial>();
+    stairMaterial->setDisplayMode(RenderMaterial::DisplayMode::WireframeSurface);
+    auto stairMeshModel = std::make_shared<VisualModel>(stairMesh);
+    stairMeshModel->setRenderMaterial(stairMaterial);
+
+    stairObj->addVisualModel(stairMeshModel);
+    stairObj->setDynamicalModel(pbdModel);
+    stairObj->setCollidingGeometry(stairMesh);
+    stairObj->setVisualGeometry(stairMesh);
+    stairObj->setPhysicsGeometry(stairMesh);
+
+    return stairObj;
+}
+
 ///
 /// \brief This example demonstrates the collision interaction
 /// using Position based dynamic on a more complex mesh
@@ -100,96 +182,25 @@ int
 main()
 {
     auto simManager = std::make_shared<SimulationManager>();
-    auto scene      = simManager->createNewScene("PbdCollision");
+    auto scene      = simManager->createNewScene("PbdStairsCollision");
     scene->getCamera()->setPosition(0.0, 0.0, -30.0);
     scene->getCamera()->setFocalPoint(0.0, 0.0, 0.0);
 
-    auto deformableObj = std::make_shared<PbdObject>("DeformableObj");
-    {
-        // 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);
-
-        // Setup parameters
-        auto pbdParams = std::make_shared<PBDModelConfig>();
-        pbdParams->m_YoungModulus = 1000.0;
-        pbdParams->m_PoissonRatio = 0.3;
-        pbdParams->enableFEMConstraint(PbdConstraint::Type::FEMTet,
-                        PbdFEMConstraint::MaterialType::StVK);
-        pbdParams->m_uniformMassValue = 1.0;
-        pbdParams->m_gravity   = Vec3d(0, -10.0, 0);
-        pbdParams->m_DefaultDt = 0.01;
-        pbdParams->m_maxIter   = 5;
-        pbdParams->m_proximity = 0.3;
-        pbdParams->m_contactStiffness = 0.1;
-
-        // Setup Model
-        auto pbdModel = std::make_shared<PbdModel>();
-        pbdModel->setModelGeometry(coarseTetMesh);
-        pbdModel->configure(pbdParams);
-
-        // Setup VisualModel
-        auto material = std::make_shared<RenderMaterial>();
-        material->setDisplayMode(RenderMaterial::DisplayMode::WireframeSurface);
-        auto surfMeshModel = std::make_shared<VisualModel>(highResSurfMesh);
-        surfMeshModel->setRenderMaterial(material);
-
-        // Setup Object
-        deformableObj->addVisualModel(surfMeshModel);
-        deformableObj->setCollidingGeometry(coarseSurfMesh);
-        deformableObj->setPhysicsGeometry(coarseTetMesh);
-        deformableObj->setPhysicsToCollidingMap(std::make_shared<OneToOneMap>(coarseTetMesh, coarseSurfMesh));
-        deformableObj->setPhysicsToVisualMap(std::make_shared<TetraTriangleMap>(coarseTetMesh, highResSurfMesh));
-        deformableObj->setDynamicalModel(pbdModel);
-
-        // Add to scene
-        scene->addSceneObject(deformableObj);
-    }
+    // Create and add the dragon to the scene
+    auto pbdDragon1 = makeDragonPbdObject("PbdDragon1");
+    scene->addSceneObject(pbdDragon1);
 
-    auto stairObj = std::make_shared<PbdObject>("Floor");
-    {
-        std::shared_ptr<SurfaceMesh> stairMesh(std::move(buildStairs(15, 20.0, 10.0, 20.0)));
-
-        // Setup parameters
-        auto pbdParams2 = std::make_shared<PBDModelConfig>();
-        pbdParams2->m_uniformMassValue = 0.0;
-        pbdParams2->m_proximity = 0.1;
-        pbdParams2->m_contactStiffness = 1.0;
-        pbdParams2->m_maxIter = 0;
-
-        // Setup model
-        auto pbdModel2 = std::make_shared<PbdModel>();
-        pbdModel2->setModelGeometry(stairMesh);
-        pbdModel2->configure(pbdParams2);
-
-        // Setup VisualModel
-        auto stairMaterial = std::make_shared<RenderMaterial>();
-        stairMaterial->setDisplayMode(RenderMaterial::DisplayMode::WireframeSurface);
-        auto stairMeshModel = std::make_shared<VisualModel>(stairMesh);
-        stairMeshModel->setRenderMaterial(stairMaterial);
-
-        stairObj->addVisualModel(stairMeshModel);
-        stairObj->setDynamicalModel(pbdModel2);
-        stairObj->setCollidingGeometry(stairMesh);
-        stairObj->setVisualGeometry(stairMesh);
-        stairObj->setPhysicsGeometry(stairMesh);
-
-        scene->addSceneObject(stairObj);
-    }
+    auto stairObj = makeStairsPbdObject("PbdStairs", 12, 20.0, 10.0, 20.0);
+    scene->addSceneObject(stairObj);
 
     // Collision
-    scene->getCollisionGraph()->addInteractionPair(deformableObj, stairObj,
-                CollisionDetection::Type::MeshToMeshBruteForce,
-                CollisionHandling::Type::PBD,
-                CollisionHandling::Type::None);
+    scene->getCollisionGraph()->addInteraction(makeObjectInteractionPair(pbdDragon1, stairObj,
+        InteractionType::PbdObjToPbdObj_Collision, CollisionDetection::Type::MeshToMeshBruteForce));
 
     // Light
-    auto light = std::make_shared<DirectionalLight>("light");
-    light->setFocalPoint(Vec3d(5, -8, 5));
+    auto light = std::make_shared<DirectionalLight>("Light");
+    light->setFocalPoint(Vec3d(5.0, -8.0, 5.0));
+    light->setIntensity(1.0);
     scene->addLight(light);
 
     simManager->setActiveScene(scene);
diff --git a/Examples/PBD/PBDDeformableObject/PBD3DDeformableObject.cpp b/Examples/PBD/PBDDeformableObject/PBD3DDeformableObject.cpp
index 46f8788b6..b52a57a9e 100644
--- a/Examples/PBD/PBDDeformableObject/PBD3DDeformableObject.cpp
+++ b/Examples/PBD/PBDDeformableObject/PBD3DDeformableObject.cpp
@@ -27,7 +27,6 @@
 #include "imstkOneToOneMap.h"
 #include "imstkAPIUtilities.h"
 #include "imstkTetraTriangleMap.h"
-#include "imstkCollisionGraph.h"
 #include "imstkSurfaceMesh.h"
 #include "imstkCamera.h"
 #include "imstkPlane.h"
@@ -67,15 +66,15 @@ main()
     auto pbdParams = std::make_shared<PBDModelConfig>();
 
     // FEM constraint
-    pbdParams->m_YoungModulus = 100.0;
-    pbdParams->m_PoissonRatio = 0.3;
+    pbdParams->femParams->m_YoungModulus = 100.0;
+    pbdParams->femParams->m_PoissonRatio = 0.3;
     pbdParams->m_fixedNodeIds = { 51, 127, 178 };
     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_maxIter = 45;
+    pbdParams->m_iterations = 45;
 
     // Set the parameters
     pbdModel->configure(pbdParams);
@@ -87,8 +86,6 @@ main()
     deformableObj->setPhysicsGeometry(tetMesh);
     deformableObj->setPhysicsToVisualMap(map); //assign the computed map
 
-    deformableObj->setDynamicalModel(pbdModel);
-
     scene->addSceneObject(deformableObj);
 
     // Setup plane
diff --git a/Examples/PBD/PBDFluids/PBDFluidsExample.cpp b/Examples/PBD/PBDFluids/PBDFluidsExample.cpp
index 50e7ee13e..46c002e16 100644
--- a/Examples/PBD/PBDFluids/PBDFluidsExample.cpp
+++ b/Examples/PBD/PBDFluids/PBDFluidsExample.cpp
@@ -19,18 +19,19 @@
 
 =========================================================================*/
 
-#include "imstkSimulationManager.h"
-#include "imstkCollisionGraph.h"
+#include "imstkAPIUtilities.h"
 #include "imstkCamera.h"
+#include "imstkCollisionGraph.h"
 #include "imstkLight.h"
 #include "imstkMeshIO.h"
-#include "imstkPbdModel.h"
-#include "imstkPbdObject.h"
-#include "imstkAPIUtilities.h"
 #include "imstkMeshToMeshBruteForceCD.h"
+#include "imstkObjectInteractionFactory.h"
 #include "imstkPBDCollisionHandling.h"
-#include "imstkSurfaceMesh.h"
+#include "imstkPbdModel.h"
+#include "imstkPbdObject.h"
 #include "imstkScene.h"
+#include "imstkSimulationManager.h"
+#include "imstkSurfaceMesh.h"
 
 using namespace imstk;
 
@@ -76,10 +77,9 @@ main()
     // Other parameters
     pbdParams->m_uniformMassValue = 1.0;
     pbdParams->m_gravity   = Vec3d(0, -9.8, 0);
-    pbdParams->m_DefaultDt = 0.01;
-    pbdParams->m_maxIter   = 2;
-    pbdParams->m_proximity = 0.01;
-    pbdParams->m_contactStiffness = 0.2;
+    pbdParams->m_defaultDt = 0.01;
+    pbdParams->m_iterations   = 2;
+    pbdParams->collisionParams->m_proximity = 0.01;
 
     // Set the parameters
     pbdModel->configure(pbdParams);
@@ -211,8 +211,7 @@ main()
     // Configure model
     auto pbdParams2 = std::make_shared<PBDModelConfig>();
     pbdParams2->m_uniformMassValue = 0.0;
-    pbdParams2->m_proximity = 0.1;
-    pbdParams2->m_contactStiffness = 1.0;
+    pbdParams2->collisionParams->m_proximity = 0.1;
 
     pbdModel2->configure(pbdParams2);
     floor->setDynamicalModel(pbdModel2);
@@ -220,11 +219,8 @@ main()
     scene->addSceneObject(floor);
 
     // Collisions
-    auto colGraph = scene->getCollisionGraph();
-    auto CD       = std::make_shared<MeshToMeshBruteForceCD>(fluidMesh, floorMeshColliding, nullptr);
-    auto CH       = std::make_shared<PBDCollisionHandling>(CollisionHandling::Side::A,
-                CD->getCollisionData(), deformableObj, floor);
-    colGraph->addInteractionPair(deformableObj, floor, CD, CH, nullptr);
+    scene->getCollisionGraph()->addInteraction(makeObjectInteractionPair(deformableObj, floor,
+        InteractionType::PbdObjToPbdObj_Collision, CollisionDetection::Type::MeshToMeshBruteForce));
 
     // Light (white)
     auto whiteLight = std::make_shared<DirectionalLight>("whiteLight");
diff --git a/Examples/PBD/PBDString/pbdStringExample.cpp b/Examples/PBD/PBDString/pbdStringExample.cpp
index 94a4a4a41..9d34aa312 100644
--- a/Examples/PBD/PBDString/pbdStringExample.cpp
+++ b/Examples/PBD/PBDString/pbdStringExample.cpp
@@ -25,7 +25,6 @@
 #include "imstkPbdObject.h"
 #include "imstkSimulationManager.h"
 #include "imstkSceneManager.h"
-#include "imstkCollisionGraph.h"
 #include "imstkCamera.h"
 #include "imstkScene.h"
 
@@ -97,8 +96,8 @@ main()
         sims[i].params->m_fixedNodeIds     = { 0 };
         sims[i].params->m_uniformMassValue = 5.0;
         sims[i].params->m_gravity   = Vec3d(0, -9.8, 0);
-        sims[i].params->m_DefaultDt = 0.0005;
-        sims[i].params->m_maxIter   = 5;
+        sims[i].params->m_defaultDt = 0.0005;
+        sims[i].params->m_iterations   = 5;
 
         // Set the parameters
         sims[i].model->configure(sims[i].params);
diff --git a/Examples/Rendering/RenderingExample.cpp b/Examples/Rendering/RenderingExample.cpp
index 2d5ff2a29..e9ba71efc 100644
--- a/Examples/Rendering/RenderingExample.cpp
+++ b/Examples/Rendering/RenderingExample.cpp
@@ -22,7 +22,6 @@
 #include "imstkSimulationManager.h"
 #include "imstkAPIUtilities.h"
 #include "imstkVisualObjectImporter.h"
-#include "imstkCollisionGraph.h"
 #include "imstkIBLProbe.h"
 #include "imstkCamera.h"
 #include "imstkLight.h"
diff --git a/Examples/SPHFluid/Fluid.hpp b/Examples/SPHFluid/Fluid.hpp
index 48ab27fa6..4b9eb3702 100644
--- a/Examples/SPHFluid/Fluid.hpp
+++ b/Examples/SPHFluid/Fluid.hpp
@@ -21,7 +21,6 @@
 
 #include "imstkSimulationManager.h"
 #include "imstkSPHObject.h"
-#include "imstkSPHSolver.h"
 #include "imstkSPHModel.h"
 #include "imstkPointSet.h"
 #include "imstkScene.h"
@@ -175,10 +174,5 @@ generateFluid(const std::shared_ptr<Scene>& scene, const double particleRadius)
     fluidObj->setPhysicsGeometry(fluidGeometry); // TODO: Look into API duplication and resulting conflicts
     scene->addSceneObject(fluidObj);
 
-    // Configure the solver
-    auto sphSolver = std::make_shared<SPHSolver>();
-    sphSolver->setSPHObject(fluidObj);
-    scene->addNonlinearSolver(sphSolver);
-
     return fluidObj;
 }
diff --git a/Examples/SPHFluid/SPHFluidExample.hpp b/Examples/SPHFluid/SPHFluidExample.hpp
index d86ee4588..4111cc156 100644
--- a/Examples/SPHFluid/SPHFluidExample.hpp
+++ b/Examples/SPHFluid/SPHFluidExample.hpp
@@ -31,6 +31,7 @@
 #include "imstkCollisionGraph.h"
 #include "imstkSceneManager.h"
 #include "imstkCamera.h"
+#include "imstkObjectInteractionFactory.h"
 
 #include "Fluid.hpp"
 #include "Solid.hpp"
@@ -101,23 +102,18 @@ main(int argc, char* argv[])
     });
 
     // Collision between fluid and solid objects
-    auto colGraph = scene->getCollisionGraph();
-
+    std::shared_ptr<CollisionGraph> collisionGraph = scene->getCollisionGraph();
     for (auto& solid: solids)
     {
         if (std::dynamic_pointer_cast<Plane>(solid->getCollidingGeometry()))
         {
-            colGraph->addInteractionPair(fluidObj, solid,
-                                 CollisionDetection::Type::PointSetToPlane,
-                                 CollisionHandling::Type::SPH,
-                                 CollisionHandling::Type::None);
+            collisionGraph->addInteraction(makeObjectInteractionPair(fluidObj, solid,
+                InteractionType::SphObjToCollidingObj_Collision, CollisionDetection::Type::PointSetToPlane));
         }
         else if (std::dynamic_pointer_cast<Sphere>(solid->getCollidingGeometry()))
         {
-            colGraph->addInteractionPair(fluidObj, solid,
-                                         CollisionDetection::Type::PointSetToSphere,
-                                         CollisionHandling::Type::SPH,
-                                         CollisionHandling::Type::None);
+            collisionGraph->addInteraction(makeObjectInteractionPair(fluidObj, solid,
+                InteractionType::SphObjToCollidingObj_Collision, CollisionDetection::Type::PointSetToSphere));
         }
         else
         {
diff --git a/Examples/SceneManagement/SceneManagementExample.cpp b/Examples/SceneManagement/SceneManagementExample.cpp
index 45418a5f9..f0c4668a3 100644
--- a/Examples/SceneManagement/SceneManagementExample.cpp
+++ b/Examples/SceneManagement/SceneManagementExample.cpp
@@ -19,10 +19,10 @@
 
 =========================================================================*/
 
-#include "imstkSimulationManager.h"
-#include "imstkCollisionGraph.h"
 #include "imstkCamera.h"
+#include "imstkCollisionGraph.h"
 #include "imstkScene.h"
+#include "imstkSimulationManager.h"
 
 using namespace imstk;
 
diff --git a/Examples/Screenshot/ScreenshotExample.cpp b/Examples/Screenshot/ScreenshotExample.cpp
index b34ce731d..9b88ed1ac 100644
--- a/Examples/Screenshot/ScreenshotExample.cpp
+++ b/Examples/Screenshot/ScreenshotExample.cpp
@@ -21,7 +21,6 @@
 
 #include "imstkSimulationManager.h"
 #include "imstkSceneObject.h"
-#include "imstkCollisionGraph.h"
 #include "imstkCamera.h"
 #include "imstkLight.h"
 #include "imstkCube.h"
diff --git a/Examples/VolumeRendering/VolumeRenderingExample.cpp b/Examples/VolumeRendering/VolumeRenderingExample.cpp
index f5d5dff50..97e96ed9d 100644
--- a/Examples/VolumeRendering/VolumeRenderingExample.cpp
+++ b/Examples/VolumeRendering/VolumeRenderingExample.cpp
@@ -28,7 +28,6 @@
 #include "imstkVolumeRenderMaterialPresets.h"
 #include "imstkVTKTextStatusManager.h"
 #include "imstkSceneManager.h"
-#include "imstkCollisionGraph.h"
 #include "imstkScene.h"
 #include "imstkVTKRenderer.h"
 
-- 
GitLab