iMSTK
Interactive Medical Simulation Toolkit
CreateEnclosingMesh.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 "imstkDirectionalLight.h"
9 #include "imstkGeometryUtilities.h"
10 #include "imstkKeyboardDeviceClient.h"
11 #include "imstkKeyboardSceneControl.h"
12 #include "imstkMeshIO.h"
13 #include "imstkMouseDeviceClient.h"
14 #include "imstkMouseSceneControl.h"
15 #include "imstkNew.h"
16 #include "imstkRenderMaterial.h"
17 #include "imstkScene.h"
18 #include "imstkSceneManager.h"
19 #include "imstkSceneObject.h"
20 #include "imstkSimulationManager.h"
21 #include "imstkSimulationUtils.h"
22 #include "imstkSurfaceMesh.h"
23 #include "imstkTetrahedralMesh.h"
24 #include "imstkVisualModel.h"
25 #include "imstkVTKViewer.h"
26 
27 using namespace imstk;
28 
29 const size_t nx = 80 / 2, ny = 40 / 2, nz = 40 / 2;
30 
31 int
32 main()
33 {
34  // Setup logger (write to file and stdout)
36 
37  // Create a sample scene
38  imstkNew<Scene> scene("renderMesh");
39  {
40  scene->getActiveCamera()->setPosition(0.0, 2.0, 15.0);
41 
42  // add scene object for surface object
43  imstkNew<SceneObject> surfObj("SurfaceObject");
44 
45  auto surfMesh = MeshIO::read<SurfaceMesh>(iMSTK_DATA_ROOT "/asianDragon/asianDragon.obj");
46 
47  // configure and add the render model to the scene object
48  imstkNew<RenderMaterial> material;
49  material->setDisplayMode(RenderMaterial::DisplayMode::Surface);
50  material->setColor(Color::LightGray);
51  imstkNew<VisualModel> visualModel;
52  visualModel->setGeometry(surfMesh);
53  visualModel->setRenderMaterial(material);
54  surfObj->addVisualModel(visualModel);
55 
56  // add the scene object to the scene
57  scene->addSceneObject(surfObj);
58 
59  std::shared_ptr<TetrahedralMesh> tetMesh =
60  GeometryUtils::createTetrahedralMeshCover(surfMesh, nx, ny, nz);
61 
62  // add scene object for surface object
63  imstkNew<SceneObject> volObject("VolObj");
64  imstkNew<RenderMaterial> tetMaterial;
65  tetMaterial->setDisplayMode(RenderMaterial::DisplayMode::Wireframe);
66  tetMaterial->setColor(Color::Teal);
67  tetMaterial->setPointSize(7.0);
68  tetMaterial->setLineWidth(3.0);
69  imstkNew<VisualModel> tetVisualModel;
70  tetVisualModel->setGeometry(tetMesh);
71  tetVisualModel->setRenderMaterial(tetMaterial);
72  volObject->addVisualModel(tetVisualModel);
73 
74  scene->addSceneObject(volObject);
75 
76  // Light
78  light->setFocalPoint(Vec3d(5.0, -8.0, -5.0));
79  light->setIntensity(1);
80  scene->addLight("light0", light);
81  }
82 
83  // Run the simulation
84  {
85  // Setup a viewer to render in its own thread
86  imstkNew<VTKViewer> viewer;
87  viewer->setActiveScene(scene);
88  viewer->setBackgroundColors(Color(0.3285, 0.3285, 0.6525), Color(0.13836, 0.13836, 0.2748), true);
89 
90  // Setup a scene manager to advance the scene in its own thread
91  imstkNew<SceneManager> sceneManager;
92  sceneManager->setActiveScene(scene);
93 
95  driver->addModule(viewer);
96  driver->addModule(sceneManager);
97 
98  // Add default mouse and keyboard controls to the viewer
99  std::shared_ptr<Entity> mouseAndKeyControls =
100  SimulationUtils::createDefaultSceneControl(driver);
101  scene->addSceneObject(mouseAndKeyControls);
102 
103  // Start viewer running, scene as paused
104  driver->start();
105  }
106 }
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.
virtual void setBackgroundColors(const Color color1, const Color color2=Color(0.0, 0.0, 0.0), const bool gradientBackground=false) override
Set the coloring of the screen background If &#39;gradientBackground&#39; is false or not supplied color1 wil...
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 setRenderMaterial(std::shared_ptr< RenderMaterial > renderMaterial)
Set/Get render material.
Color in RGB space.
Definition: imstkColor.h:24
std::shared_ptr< TetrahedralMesh > createTetrahedralMeshCover(std::shared_ptr< SurfaceMesh > surfMesh, const int nx, const int ny, int nz)
Create a tetrahedral mesh cover.
void setFocalPoint(const Vec3d &p)
Get/Set the light focal point.
Definition: imstkLight.h:33
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.