VolViz
A volume visualization tool
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
Visualizer.h
Go to the documentation of this file.
1 #ifndef VolViz_Visualizer_h
2 #define VolViz_Visualizer_h
3 
4 #include "AtomicWrapper.h"
5 #include "Camera.h"
6 #include "GeometryDescriptor.h"
7 #include "Light.h"
8 #include "Types.h"
9 #include "Volume.h"
10 
11 #include <Eigen/Core>
12 
13 #include <atomic>
14 #include <memory>
15 #include <functional>
16 
17 namespace VolViz {
18 
19 namespace Private_ {
20 class VisualizerImpl;
21 } // namespace Private_
22 
23 class Visualizer {
24  template <class T>
26 
27 public:
28  using LightName = std::uint16_t;
30 
31  static auto constexpr kTitle = "Volume Visualizer";
32 
33  Visualizer();
34 
35  ~Visualizer();
36 
37  Visualizer(Visualizer const &) = delete;
39 
40  Visualizer &operator=(Visualizer const &) = delete;
42 
43  void start();
44 
45  void enableMultithreading() noexcept;
46 
47  void renderOneFrame();
48 
50 
51  void renderAtFPS(double fps = 60.0);
52 
53  void renderOnUserInteraction(double maxFps = 60.0);
54 
55  operator bool() const noexcept;
56 
57  template <class T>
58  void setVolume(VolumeDescriptor const &descriptor, span<T> data);
59 
60  void addLight(LightName name, Light const &light);
61 
62  template <class Descriptor,
63  typename = std::enable_if_t<std::is_base_of<
64  GeometryDescriptor, std::decay_t<Descriptor>>::value>>
65  void addGeometry(GeometryName name, Descriptor const &geom);
66 
67  template <class Descriptor,
68  typename = std::enable_if_t<std::is_base_of<
69  GeometryDescriptor, std::decay_t<Descriptor>>::value>>
70  bool updateGeometry(GeometryName name, Descriptor &&geom);
71 
72  std::atomic<bool> showGrid{true};
73  std::atomic<bool> showVolumeBoundingBox{true};
74  AtomicProperty<Length> scale{1 * milli * meter};
76 
79 
80 private:
81  std::unique_ptr<Private_::VisualizerImpl> impl_;
82 };
83 
84 // Explicit template instaciation declarations
85 #pragma mark Explicit template instanciation declarations
86 extern template void Visualizer::addGeometry<AxisAlignedPlaneDescriptor>(
87  GeometryName, AxisAlignedPlaneDescriptor const &);
88 
89 extern template void
90 Visualizer::addGeometry<CubeDescriptor>(GeometryName, CubeDescriptor const &);
91 
92 extern template void
93 Visualizer::addGeometry<MeshDescriptor>(GeometryName, MeshDescriptor const &);
94 
95 extern template void
96 Visualizer::setVolume<float const>(VolumeDescriptor const &, span<float const>);
97 extern template void
98 Visualizer::setVolume<Color const>(VolumeDescriptor const &, span<Color const>);
99 
100 extern template bool
101 Visualizer::updateGeometry<AxisAlignedPlaneDescriptor const &>(
102  GeometryName name, AxisAlignedPlaneDescriptor const &);
103 extern template bool Visualizer::updateGeometry<AxisAlignedPlaneDescriptor &&>(
104  GeometryName name, AxisAlignedPlaneDescriptor &&);
105 extern template bool Visualizer::updateGeometry<AxisAlignedPlaneDescriptor &>(
106  GeometryName name, AxisAlignedPlaneDescriptor &);
107 
108 extern template bool
109 Visualizer::updateGeometry<CubeDescriptor const &>(GeometryName name,
110  CubeDescriptor const &);
111 extern template bool
112 Visualizer::updateGeometry<CubeDescriptor &&>(GeometryName name,
113  CubeDescriptor &&);
114 extern template bool
115 Visualizer::updateGeometry<CubeDescriptor &>(GeometryName name,
116  CubeDescriptor &);
117 
118 extern template bool
119 Visualizer::updateGeometry<MeshDescriptor const &>(GeometryName name,
120  MeshDescriptor const &);
121 extern template bool
122 Visualizer::updateGeometry<MeshDescriptor &&>(GeometryName name,
123  MeshDescriptor &&);
124 extern template bool
125 Visualizer::updateGeometry<MeshDescriptor &>(GeometryName name,
126  MeshDescriptor &);
127 
128 } // namespace VolViz
129 
130 #endif // VolViz_Visualizer_h
GLenum GLenum GLenum GLenum GLenum scale
Definition: glad.h:13107
static auto constexpr kTitle
Definition: Visualizer.h:31
void start()
Definition: Visualizer.cpp:35
AtomicProperty< Color > backgroundColor
Definition: Visualizer.h:75
Visualizer & operator=(Visualizer const &)=delete
void enableMultithreading() noexcept
Definition: Visualizer.cpp:37
void renderOneFrameAndWaitForEvents()
Definition: Visualizer.cpp:55
Definition: AtomicWrapper.h:48
A geomentry descriptor describing an axis aligned cube.
Definition: GeometryDescriptor.h:85
GLboolean * data
Definition: glad.h:2184
GLsizei const GLchar *const * string
Definition: glad.h:2514
GLsizei const GLfloat * value
Definition: glad.h:2544
std::atomic< bool > showVolumeBoundingBox
Definition: Visualizer.h:73
auto Black() noexcept
Definition: Types.h:43
Visualizer()
Definition: Visualizer.cpp:15
std::uint16_t LightName
Definition: Visualizer.h:28
Definition: Visualizer.h:23
Definition: Camera.h:20
GLuint const GLchar * name
Definition: glad.h:2430
Camera camera
The camera.
Definition: Visualizer.h:78
Definition: GeometryDescriptor.h:33
void renderOneFrame()
Definition: Visualizer.cpp:53
void addLight(LightName name, Light const &light)
Definition: Visualizer.cpp:97
A geometry descriptor describing a axis aligned plane.
Definition: GeometryDescriptor.h:50
std::unique_ptr< Private_::VisualizerImpl > impl_
Definition: Visualizer.h:81
Definition: Volume.h:12
bool updateGeometry(GeometryName name, Descriptor &&geom)
Definition: Visualizer.cpp:116
void addGeometry(GeometryName name, Descriptor const &geom)
Definition: Visualizer.cpp:102
Directional light.
Definition: Light.h:9
std::string GeometryName
Definition: Visualizer.h:29
std::atomic< bool > showGrid
Definition: Visualizer.h:72
void renderAtFPS(double fps=60.0)
Definition: Visualizer.cpp:59
void setVolume(VolumeDescriptor const &descriptor, span< T > data)
Definition: Visualizer.cpp:44
A geometry descriptor describing an arbitrary triangle mesh.
Definition: GeometryDescriptor.h:68
GLenum GLenum GLsizei void GLsizei void void * span
Definition: glad.h:4220
void renderOnUserInteraction(double maxFps=60.0)
Definition: Visualizer.cpp:78