iMSTK
Interactive Medical Simulation Toolkit
imstkRenderDelegateObjectFactory.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 "imstkRenderDelegateObjectFactory.h"
8 #include "imstkCapsule.h"
9 #include "imstkCylinder.h"
10 #include "imstkGeometry.h"
11 #include "imstkHexahedralMesh.h"
12 #include "imstkImageData.h"
13 #include "imstkLineMesh.h"
14 #include "imstkLogger.h"
15 #include "imstkOrientedBox.h"
16 #include "imstkPlane.h"
17 #include "imstkRenderMaterial.h"
18 #include "imstkSphere.h"
19 #include "imstkSurfaceMesh.h"
20 #include "imstkTetrahedralMesh.h"
21 #include "imstkVisualModel.h"
22 #include "imstkVTKAxesRenderDelegate.h"
23 #include "imstkVTKCapsuleRenderDelegate.h"
24 #include "imstkVTKCylinderRenderDelegate.h"
25 #include "imstkVTKFluidRenderDelegate.h"
26 #include "imstkVTKHexahedralMeshRenderDelegate.h"
27 #include "imstkVTKImageDataRenderDelegate.h"
28 #include "imstkVTKLineMeshRenderDelegate.h"
29 #include "imstkVTKOrientedBoxRenderDelegate.h"
30 #include "imstkVTKPlaneRenderDelegate.h"
31 #include "imstkVTKPointSetRenderDelegate.h"
32 #include "imstkVTKSphereRenderDelegate.h"
33 #include "imstkVTKSurfaceMeshRenderDelegate.h"
34 #include "imstkVTKSurfaceNormalRenderDelegate.h"
35 #include "imstkVTKTetrahedralMeshRenderDelegate.h"
36 #include "imstkVTKTextRenderDelegate.h"
37 #include "imstkVTKVertexLabelRenderDelegate.h"
38 
39 namespace imstk
40 {
44 IMSTK_REGISTER_RENDERDELEGATE(SurfaceMesh, VTKSurfaceMeshRenderDelegate)
45 IMSTK_REGISTER_RENDERDELEGATE(Cylinder, VTKCylinderRenderDelegate)
46 IMSTK_REGISTER_RENDERDELEGATE(TetrahedralMesh, VTKTetrahedralMeshRenderDelegate)
47 IMSTK_REGISTER_RENDERDELEGATE(LineMesh, VTKLineMeshRenderDelegate)
48 IMSTK_REGISTER_RENDERDELEGATE(HexahedralMesh, VTKHexahedralMeshRenderDelegate)
49 IMSTK_REGISTER_RENDERDELEGATE(PointSet, VTKPointSetRenderDelegate)
50 IMSTK_REGISTER_RENDERDELEGATE(Plane, VTKPlaneRenderDelegate)
51 IMSTK_REGISTER_RENDERDELEGATE(Sphere, VTKSphereRenderDelegate)
52 IMSTK_REGISTER_RENDERDELEGATE(Capsule, VTKCapsuleRenderDelegate)
53 IMSTK_REGISTER_RENDERDELEGATE(OrientedBox, VTKOrientedCubeRenderDelegate)
54 IMSTK_REGISTER_RENDERDELEGATE(ImageData, VTKImageDataRenderDelegate)
55 IMSTK_REGISTER_RENDERDELEGATE(VertexLabel, VTKVertexLabelRenderDelegate)
56 IMSTK_REGISTER_RENDERDELEGATE(TextRenderDelegate, VTKTextRenderDelegate)
57 
58 // Custom algorithms
59 RenderDelegateRegistrar<VTKAxesRenderDelegate> _imstk_registerrenderdelegate_axes("AxesModel");
60 RenderDelegateRegistrar<VTKFluidRenderDelegate> _imstk_registerrenderdelegate_fluid("Fluid");
61 RenderDelegateRegistrar<VTKSurfaceNormalRenderDelegate> _imstk_registerrenderdelegate_surfacenormals("SurfaceNormals");
62 
63 std::shared_ptr<VTKRenderDelegate>
64 RenderDelegateObjectFactory::makeRenderDelegate(std::shared_ptr<VisualModel> visualModel)
65 {
66  if (visualModel == nullptr)
67  {
68  LOG(FATAL) << "RenderDelegate::makeDelegate error: Called with null visualModel";
69  return nullptr;
70  }
71 
72  // If delegate hint is provided & it exists in map, override the creation of the delegate
73  const std::string& delegateHint = visualModel->getDelegateHint();
74  if (delegateHint == "")
75  {
76  LOG(FATAL) << "RenderDelegate::makeDelegate error: No hint defined for visualModel "
77  << visualModel->getName();
78  return nullptr;
79  }
80 
81  if (!contains(delegateHint))
82  {
83  LOG(FATAL) << "RenderDelegate::makeDelegate error: can't find delegate with hint: "
84  << delegateHint << " for visual model " << visualModel->getName();
85  return nullptr;
86  }
87 
88  // Still a bug, should be able to copy the visual model ptr as well
89  return create(delegateHint);
90 }
91 } // namespace imstk
Compound Geometry.
RenderDelegateRegistrar< VTKAxesRenderDelegate > _imstk_registerrenderdelegate_axes("AxesModel")
static std::shared_ptr< VTKRenderDelegate > create(const std::string &name, Args &&... args)
tries to construct the object give name, it will forward the given paramters
Definition: imstkFactory.h:35
static std::shared_ptr< VTKRenderDelegate > makeRenderDelegate(std::shared_ptr< VisualModel > visualModel)
attempt to create a delegate for the given visual model