CTL  0.6.1
Computed Tomography Library
abstractprojector.h
Go to the documentation of this file.
1 #ifndef CTL_ABSTRACTPROJECTOR_H
2 #define CTL_ABSTRACTPROJECTOR_H
3 
4 #include "img/projectiondata.h"
5 #include "img/spectralvolumedata.h"
7 
8 #include <memory>
9 
10 namespace CTL {
11 
12 // forward declarations
13 class AcquisitionSetup;
14 class CompositeVolume;
15 class SparseVoxelVolume;
16 typedef SpectralVolumeData VolumeData;
17 
53 class ProjectorNotifier : public QObject
54 {
55  Q_OBJECT
56 
57 public:
58  void connectToMessageHandler(bool includeProgress);
59 
60 Q_SIGNALS:
61  void projectionFinished(int viewNb);
62  void information(QString info);
63 
64 private:
65  QMetaObject::Connection _progressConnection;
66 };
67 
69 {
71 
72  // abstract interface
73  public:virtual void configure(const AcquisitionSetup& setup) = 0;
74  public:virtual ProjectionData project(const VolumeData& volume) = 0;
75 
76 public:
77  AbstractProjector() = default;
78  AbstractProjector(const AbstractProjector&) = delete;
80  AbstractProjector& operator=(const AbstractProjector&) = delete;
81  AbstractProjector& operator=(AbstractProjector&&) = default;
82  ~AbstractProjector() override = default;
83 
84  virtual bool isLinear() const;
85  virtual ProjectionData projectComposite(const CompositeVolume& volume);
86  virtual ProjectionData projectSparse(const SparseVoxelVolume& volume);
87 
91 
92  void fromVariant(const QVariant& variant) override;
93  QVariant toVariant() const override;
94  virtual QVariant parameter() const;
95  virtual void setParameter(const QVariant& parameter);
96 
97  virtual ProjectorNotifier* notifier();
98  void connectNotifierToMessageHandler(bool includeProgress = false);
99 
100 private:
101  std::unique_ptr<ProjectorNotifier> _notifier{
103  };
104 };
105 
106 // factory function `makeProjector`
107 template <typename ProjectorType, typename... ConstructorArguments>
108 auto makeProjector(ConstructorArguments&&... arguments) ->
109  typename std::enable_if<std::is_convertible<ProjectorType*, AbstractProjector*>::value,
110  std::unique_ptr<ProjectorType>>::type
111 {
112  return std::unique_ptr<ProjectorType>(new ProjectorType(
113  std::forward<ConstructorArguments>(arguments)...));
114 }
115 
116 } // namespace CTL
117 
119 
143 
145 #endif // CTL_ABSTRACTPROJECTOR_H
void information(QString info)
virtual bool isLinear() const
Returns true if the projection operation is linear.
Definition: abstractprojector.cpp:52
virtual ProjectionData projectComposite(const CompositeVolume &volume)
Provides the functionality to forward project CompositeVolume data.
Definition: abstractprojector.cpp:69
QVariant toVariant() const override
Stores the contents of this instance in a QVariant.
Definition: abstractprojector.cpp:218
void connectToMessageHandler(bool includeProgress)
Connects this instance's signals to the CTL's MessageHandler.
Definition: abstractprojector.cpp:308
void fromVariant(const QVariant &variant) override
Sets the contents of the object based on the QVariant variant.
Definition: abstractprojector.cpp:233
virtual void setParameter(const QVariant &parameter)
Sets the parameters of this instance based on the passed QVariant parameter. Parameters need to follo...
Definition: abstractprojector.cpp:208
void projectionFinished(int viewNb)
virtual ProjectionData project(const VolumeData &volume)=0
Provides the actual forward projection functionality.
Holds a CTSystem together with the information about the system settings for all views from which pro...
Definition: acquisitionsetup.h:175
The ProjectionData class is the container class used to store all projections from all views.
Definition: projectiondata.h:19
Definition: sparsevoxelvolume.h:14
The AbstractProjector class is the abstract base class defining the interfaces for forward projectors...
Definition: abstractprojector.h:68
Specify an interface for de-/serialization from/to QVariants.
Definition: serializationinterface.h:17
std::unique_ptr< ProjectorNotifier > _notifier
The notifier object used for signal emission.
Definition: abstractprojector.h:101
The CompositeVolume class is a container to hold multiple volume datasets of any type from the CTL.
Definition: compositevolume.h:108
#define CTL_TYPE_ID(newIndex)
Definition: serializationinterface.h:189
The SpectralVolumeData class holds voxelized data (for a single material) along with information on i...
Definition: spectralvolumedata.h:40
virtual ProjectionData projectSparse(const SparseVoxelVolume &volume)
Provides the functionality to forward project SparseVoxelVolume data.
Definition: abstractprojector.cpp:97
void connectNotifierToMessageHandler(bool includeProgress=false)
Connects the notifier to the CTL's MessageHandler.
Definition: abstractprojector.cpp:285
virtual void configure(const AcquisitionSetup &setup)=0
Configures the projector.
Helper class that can emit signals during calculations of a certain projector.
Definition: abstractprojector.h:53
ProjectionData configureAndProject(const AcquisitionSetup &setup, const VolumeData &volume)
Performs a forward projection with a precedent configuration of the projector.
Definition: abstractprojector.cpp:129
virtual ProjectorNotifier * notifier()
Returns a pointer to the notifier of the projector.
Definition: abstractprojector.cpp:273
virtual QVariant parameter() const
Returns the parameters of this instance as QVariant.
Definition: abstractprojector.cpp:199