From f508459fe049cc639c01971c7f5044a5d2f2d1c9 Mon Sep 17 00:00:00 2001
From: Alexis Girault <alexis.girault@kitware.com>
Date: Tue, 17 May 2016 19:07:03 -0400
Subject: [PATCH] ENH: Update example with object controller

Reset sceneManager loop delay to 0 (fast loop)
and remove LOG info to avoid too much printing.
---
 Base/SimulationManager/imstkSceneManager.cpp | 11 +---
 Base/SimulationManager/imstkSceneManager.h   |  2 +-
 Examples/Sandbox/main.cpp                    | 61 +++++++++++++++++---
 3 files changed, 56 insertions(+), 18 deletions(-)

diff --git a/Base/SimulationManager/imstkSceneManager.cpp b/Base/SimulationManager/imstkSceneManager.cpp
index e811101d..8fcf18e0 100644
--- a/Base/SimulationManager/imstkSceneManager.cpp
+++ b/Base/SimulationManager/imstkSceneManager.cpp
@@ -37,9 +37,7 @@ SceneManager::getScene()
 void
 SceneManager::initModule()
 {
-    LOG(DEBUG) << m_name << " manager : init";
-
-
+    // Start Camera Controller (asynchronous)
     if (auto camController = m_scene->getCamera()->getController())
     {
         this->startModuleInNewThread(camController);
@@ -49,8 +47,7 @@ SceneManager::initModule()
 void
 SceneManager::runModule()
 {
-    LOG(DEBUG) << m_name << " manager : running";
-
+    // Update virtualCoupling objects based on devices
     for (auto obj : m_scene->getSceneObjects())
     {
         if (auto virtualCoupling = std::dynamic_pointer_cast<VirtualCouplingObject>(obj))
@@ -60,12 +57,10 @@ SceneManager::runModule()
     }
 }
 
-
 void
 SceneManager::cleanUpModule()
 {
-    LOG(DEBUG) << m_name << " manager : cleanUp";
-
+    // End Camera Controller
     if (auto camController = m_scene->getCamera()->getController())
     {
         camController->end();
diff --git a/Base/SimulationManager/imstkSceneManager.h b/Base/SimulationManager/imstkSceneManager.h
index dc37ecf0..63986187 100644
--- a/Base/SimulationManager/imstkSceneManager.h
+++ b/Base/SimulationManager/imstkSceneManager.h
@@ -36,7 +36,7 @@ class SceneManager : public Module
 public:
 
     SceneManager(std::shared_ptr<Scene> scene) :
-        Module(scene->getName(), 1000),
+        Module(scene->getName()),
         m_scene(scene)
     {}
 
diff --git a/Examples/Sandbox/main.cpp b/Examples/Sandbox/main.cpp
index b3de2b25..750d57c3 100644
--- a/Examples/Sandbox/main.cpp
+++ b/Examples/Sandbox/main.cpp
@@ -6,14 +6,18 @@
 
 #include "imstkMath.h"
 #include "imstkSimulationManager.h"
+
+// Objects
 #include "imstkSceneObject.h"
-#include "imstkPlane.h"
-#include "imstkSphere.h"
-#include "imstkCube.h"
+#include "imstkCollidingObject.h"
+#include "imstkVirtualCouplingObject.h"
 #include "imstkLight.h"
 #include "imstkCamera.h"
 
 // Geometry
+#include "imstkPlane.h"
+#include "imstkSphere.h"
+#include "imstkCube.h"
 #include "imstkTetrahedralMesh.h"
 #include "imstkSurfaceMesh.h"
 #include "imstkMeshReader.h"
@@ -30,7 +34,8 @@
 
 #include "g3log/g3log.hpp"
 
-void testDevices();
+void testObjectController();
+void testCameraController();
 void testReadMesh();
 void testViewer();
 void testAnalyticalGeometry();
@@ -47,7 +52,8 @@ int main()
               << "Starting Sandbox\n"
               << "****************\n";
 
-    testDevices();
+    testObjectController();
+    //testCameraController();
     //testViewer();
     //testReadMesh();
     //testAnalyticalGeometry();
@@ -61,7 +67,7 @@ int main()
     return 0;
 }
 
-void testDevices()
+void testObjectController()
 {
     // SDK and Scene
     auto sdk = std::make_shared<imstk::SimulationManager>();
@@ -78,17 +84,54 @@ void testDevices()
     client->setLoopDelay(1);
     sdk->addDeviceClient(client);
 
+    // Plane
+    auto planeGeom = std::make_shared<imstk::Plane>();
+    planeGeom->scale(5);
+    auto planeObj = std::make_shared<imstk::VisualObject>("VisualPlane");
+    planeObj->setVisualGeometry(planeGeom);
+    scene->addSceneObject(planeObj);
+
     // Sphere
     auto sphereGeom = std::make_shared<imstk::Sphere>();
-    sphereGeom->scale(0.1);
-    auto sphereObj = std::make_shared<imstk::VisualObject>("VisualSphere");
+    sphereGeom->setPosition(imstk::UP_VECTOR); //does not matter, need to set offset on object if controlled
+    sphereGeom->scale(0.2);
+    auto sphereObj = std::make_shared<imstk::VirtualCouplingObject>("VirtualSphere", client, 20);
     sphereObj->setVisualGeometry(sphereGeom);
+    sphereObj->setCollidingGeometry(sphereGeom);
+    sphereObj->setTranslationOffset(imstk::UP_VECTOR); // this will work though
     scene->addSceneObject(sphereObj);
 
+    // Update Camera position
+    auto cam = scene->getCamera();
+    cam->setPosition(imstk::Vec3d(0,3,10));
+    cam->setFocalPoint(sphereGeom->getPosition());
+
+    // Run
+    sdk->setCurrentScene("SceneTestDevice");
+    sdk->startSimulation(true);
+}
+
+void testCameraController()
+{
+    // SDK and Scene
+    auto sdk = std::make_shared<imstk::SimulationManager>();
+    auto scene = sdk->createNewScene("SceneTestDevice");
+
+    // Device server
+    auto server = std::make_shared<imstk::VRPNDeviceServer>("127.0.0.1");
+    server->addDevice("device0", imstk::DeviceType::NOVINT_FALCON);
+    server->setLoopDelay(1);
+    sdk->addDeviceServer(server);
+
+    // Device Client
+    auto client = std::make_shared<imstk::VRPNDeviceClient>("device0", "localhost"); // localhost = 127.0.0.1
+    client->setLoopDelay(1);
+    sdk->addDeviceClient(client);
+
     // Mesh
     auto mesh = imstk::MeshReader::read("/home/virtualfls/Projects/IMSTK/resources/asianDragon/asianDragon.obj");
     auto meshObject = std::make_shared<imstk::VisualObject>("meshObject");
-    meshObject->setVisualGeometry(mesh); // change to any mesh created above
+    meshObject->setVisualGeometry(mesh);
     scene->addSceneObject(meshObject);
 
     // Update Camera position
-- 
GitLab