iMSTK
Interactive Medical Simulation Toolkit
ObjectCtrlDummyClientExample.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 "imstkDummyClient.h"
10 #include "imstkKeyboardDeviceClient.h"
11 #include "imstkKeyboardSceneControl.h"
12 #include "imstkLogger.h"
13 #include "imstkMouseDeviceClient.h"
14 #include "imstkMouseSceneControl.h"
15 #include "imstkNew.h"
16 #include "imstkOrientedBox.h"
17 #include "imstkScene.h"
18 #include "imstkSceneManager.h"
19 #include "imstkSceneObjectController.h"
20 #include "imstkSimulationManager.h"
21 #include "imstkSimulationUtils.h"
22 #include "imstkVTKViewer.h"
23 
24 using namespace imstk;
25 
30 int
31 main()
32 {
34 
35  imstkNew<Scene> scene("ObjectControllerDummyClient");
36 
37  imstkNew<OrientedBox> geom(Vec3d(0.0, 1.0, 0.0), Vec3d(1.0, 1.0, 1.0));
38 
39  imstkNew<CollidingObject> object("VirtualObject");
40  object->setVisualGeometry(geom);
41  object->setCollidingGeometry(geom);
42  scene->addSceneObject(object);
43 
44  // Update Camera position
45  scene->getActiveCamera()->setPosition(0.0, 0.0, 10.0);
46  scene->getActiveCamera()->setFocalPoint(geom->getPosition());
47 
48  // Device Client
49  imstkNew<DummyClient> client("DummyClient");
51  controller->setControlledObject(object);
52  controller->setDevice(client);
53  scene->addControl(controller);
54 
55  // Run the simulation
56  {
57  // Setup a viewer to render in its own thread
58  imstkNew<VTKViewer> viewer;
59  viewer->setActiveScene(scene);
60 
61  // Setup a scene manager to advance the scene in its own thread
62  imstkNew<SceneManager> sceneManager;
63  sceneManager->setActiveScene(scene);
64  double t = 0.0;
65  connect<Event>(sceneManager, &SceneManager::postUpdate,
66  [&](Event*)
67  {
68  t += sceneManager->getDt();
69  client->setPosition(Vec3d(cos(t) * 2.0, 0.0, 0.0));
70  });
71 
73  driver->addModule(viewer);
74  driver->addModule(sceneManager);
75 
76  // Add default mouse and keyboard controls to the viewer
77  std::shared_ptr<Entity> mouseAndKeyControls =
78  SimulationUtils::createDefaultSceneControl(driver);
79  scene->addSceneObject(mouseAndKeyControls);
80 
81  driver->start();
82  }
83 
84  return 0;
85 }
void setActiveScene(std::shared_ptr< Scene > scene) override
Set scene to be rendered.
Base class for events which contain a type, priority, and data priority defaults to 0 and uses a grea...
Compound Geometry.
double getDt() const
Get/Set the time step.
Definition: imstkModule.h:63
std::shared_ptr<T> obj = std::make_shared<T>(); equivalent, convenience class for STL shared allocati...
Definition: imstkNew.h:29
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.