iMSTK
Interactive Medical Simulation Toolkit
VRPNDeviceClientExample.cpp
1 /*
2 ** This file is part of the Interactive Medical Simulation Toolkit (iMSTK)
3 ** iMSTK is distributed under the Apache License, Version 2.0.
4 ** See accompanying NOTICE for details.
5 */
6 
7 #include "imstkCamera.h"
8 #include "imstkCollidingObject.h"
9 #include "imstkDirectionalLight.h"
10 #include "imstkKeyboardDeviceClient.h"
11 #include "imstkKeyboardSceneControl.h"
12 #include "imstkLight.h"
13 #include "imstkLogger.h"
14 #include "imstkMouseDeviceClient.h"
15 #include "imstkMouseSceneControl.h"
16 #include "imstkNew.h"
17 #include "imstkOrientedBox.h"
18 #include "imstkScene.h"
19 #include "imstkSceneManager.h"
20 #include "imstkSceneObjectController.h"
21 #include "imstkSimulationManager.h"
22 #include "imstkSimulationUtils.h"
23 #include "imstkVRPNDeviceClient.h"
24 #include "imstkVRPNDeviceManager.h"
25 #include "imstkVTKViewer.h"
26 
27 using namespace imstk;
28 
38 int
39 main()
40 {
41  // Setup logger (write to file and stdout)
43 
44  // Create Scene
45  imstkNew<Scene> scene("ObjectController");
46 
48  const std::string serverIP = "localhost";
49 
51  const int serverPort = 38833;
52 
53  //VRPN Server
54  auto server = std::make_shared<VRPNDeviceManager>(serverIP, serverPort);
55 
56  auto client = server->makeDeviceClient("Tracker0", VRPNTracker);
57 
58  std::shared_ptr<AnalyticalGeometry> geometries[] = {
59  std::make_shared<OrientedBox>(Vec3d::Zero(), Vec3d(1.0, 5.0, 1.0)),
60  };
61 
62  imstkNew<SceneObject> object("VirtualObject");
63  object->setVisualGeometry(geometries[0]);
64  scene->addSceneObject(object);
65 
67  controller->setControlledObject(object);
68  controller->setDevice(client);
69  controller->setTranslationScaling(0.1);
70  scene->addControl(controller);
71 
72  // Update Camera position
73  std::shared_ptr<Camera> cam = scene->getActiveCamera();
74  cam->setPosition(Vec3d(0.0, 0.0, 10.0));
75  cam->setFocalPoint(geometries[0]->getPosition());
76 
77  // Light
79  light->setDirection(Vec3d(5.0, -8.0, -5.0));
80  light->setIntensity(1.0);
81  scene->addLight("light", light);
82 
83  //Run the simulation
84  {
85  // Setup a viewer to render
86  imstkNew<VTKViewer> viewer;
87  viewer->setActiveScene(scene);
88 
89  // Setup a scene manager to advance the scene
90  imstkNew<SceneManager> sceneManager;
91  sceneManager->setActiveScene(scene);
92 
94  driver->addModule(viewer);
95  driver->addModule(sceneManager);
96  driver->addModule(server);
97  driver->setDesiredDt(0.01);
98 
99  // Add default mouse and keyboard controls to the viewer
100  std::shared_ptr<Entity> mouseAndKeyControls =
101  SimulationUtils::createDefaultSceneControl(driver);
102  scene->addSceneObject(mouseAndKeyControls);
103 
104  driver->start();
105  }
106  return 0;
107 }
void setDesiredDt(const double dt)
Sets the target fixed timestep (may violate), seconds This ultimately effects the number of iteration...
void setActiveScene(std::shared_ptr< Scene > scene) override
Set scene to be rendered.
Compound Geometry.
void addModule(std::shared_ptr< Module > module) override
Add a module to run.
void setIntensity(const double intensity)
Set the light intensity. This value is unbounded.
Definition: imstkLight.h:71
std::shared_ptr<T> obj = std::make_shared<T>(); equivalent, convenience class for STL shared allocati...
Definition: imstkNew.h:29
void setDirection(const Vec3d &dir)
Set the direction of the light.
void setActiveScene(std::string newSceneName)
Sets the currently updating scene.
static LoggerG3 & startLogger()
Starts logger with default sinks, use getInstance to create a logger with no sinks.