iMSTK
Interactive Medical Simulation Toolkit
imstkVisualModel.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 "imstkVisualModel.h"
8 #include "imstkRenderMaterial.h"
9 #include "imstkGeometry.h"
10 #include "imstkPointSet.h"
11 #include "imstkSurfaceMesh.h"
12 #include "imstkImageData.h"
13 #include "imstkLogger.h"
14 
15 namespace imstk
16 {
17 VisualModel::VisualModel(const std::string& name) : Component(name),
18  m_delegateHint(""),
19  m_geometry(nullptr),
20  m_renderMaterial(std::make_shared<RenderMaterial>()),
21  m_isVisible(true)
22 {
23 }
24 
25 const std::string
27 {
28  // Prioritize user set delegate hint
29  if (m_delegateHint != "")
30  {
31  return m_delegateHint;
32  }
33 
34  // Early Exit
35  if (m_geometry == nullptr)
36  {
37  return "";
38  }
39 
40  // Special Handling various rendermaterials
41  if (getRenderMaterial()->getDisplayMode() == RenderMaterial::DisplayMode::Fluid)
42  {
43  if (std::dynamic_pointer_cast<PointSet>(m_geometry) != nullptr)
44  {
45  return "Fluid";
46  }
47  else
48  {
49  LOG(WARNING) << "Requested DisplayMode::Fluid but <" << m_geometry->getTypeName()
50  << "> cannot be converted to PointSet using default render delegate.";
51  }
52  }
53 
54  if (getRenderMaterial()->getDisplayMode() == RenderMaterial::DisplayMode::SurfaceNormals)
55  {
56  if (std::dynamic_pointer_cast<SurfaceMesh>(m_geometry) != nullptr)
57  {
58  return "SurfaceNormals";
59  }
60  else
61  {
62  LOG(WARNING) << "Requested DisplayMode::SurfaceNormals but <" << m_geometry->getTypeName()
63  << "> cannot be converted to SurfaceMesh using default render delegate.";
64  }
65  }
66 
67  if (getRenderMaterial()->getDisplayMode() == RenderMaterial::DisplayMode::Points)
68  {
69  if (std::dynamic_pointer_cast<PointSet>(m_geometry) != nullptr)
70  {
71  return "PointSet"; // Match Point set Type name
72  }
73  else
74  {
75  LOG(WARNING) << "Requested DisplayMode::Points but <" << m_geometry->getTypeName()
76  << "> cannot be converted to PointSet using default render delegate.";
77  }
78  }
79 
80  return m_geometry->getTypeName();
81 }
82 
83 void
84 VisualModel::setRenderMaterial(std::shared_ptr<RenderMaterial> renderMaterial)
85 {
86  m_renderMaterial = renderMaterial;
87  this->postModified();
88 }
89 
90 void
91 VisualModel::setIsVisible(const bool visible)
92 {
93  m_isVisible = visible;
94  this->postModified();
95 }
96 
97 bool
99 {
100  if (m_renderDelegateCreated.count(ren) == 0)
101  {
102  m_renderDelegateCreated[ren] = false;
103  return false;
104  }
105  else
106  {
107  return m_renderDelegateCreated[ren];
108  }
109 }
110 } // namespace imstk
const std::string getDelegateHint() const
Get/Set the delegate hint, which helps indicate how to render this VisualModel.
Renders a set of points using a screen-space fluid renderer.
Compound Geometry.
Rendering window manager and contains user API to configure the rendering with various backends...
Definition: imstkRenderer.h:41
bool m_isVisible
true if mesh is shown, false if mesh is hidden
void setRenderMaterial(std::shared_ptr< RenderMaterial > renderMaterial)
Set/Get render material.
bool getRenderDelegateCreated(Renderer *ren)
Get/Set whether the delegate has been created.