CTL  0.6.1
Computed Tomography Library
abstractpreparestep.h
1 #ifndef CTL_ABSTRACTPREPARESTEP_H
2 #define CTL_ABSTRACTPREPARESTEP_H
3 
5 #include <QDebug>
6 #include <memory>
7 #include <vector>
8 
9 /*
10  * NOTE: This is header only.
11  */
12 
13 namespace CTL {
14 
15 class AcquisitionSetup;
16 class CTSystem;
17 class SimpleCTSystem;
18 
47 {
49 
50  // abstract interface
51  public:virtual void prepare(SimpleCTSystem& system) const = 0;
52  public:virtual bool isApplicableTo(const CTSystem& system) const = 0;
53 
54 public:
55  void fromVariant(const QVariant& variant) override; // de-serialization
56  QVariant toVariant() const override; // serialization
57 
58  ~AbstractPrepareStep() override = default;
59 
60 protected:
61  AbstractPrepareStep() = default;
62  AbstractPrepareStep(const AbstractPrepareStep&) = default;
64  AbstractPrepareStep& operator=(const AbstractPrepareStep&) = default;
65  AbstractPrepareStep& operator=(AbstractPrepareStep&&) = default;
66 };
67 
85 {
86  // abstract interface
87  public:virtual std::vector<std::shared_ptr<AbstractPrepareStep>>
88  prepareSteps(uint viewNb, const AcquisitionSetup& setup) const = 0;
89 
90 public:
91  virtual bool isApplicableTo(const AcquisitionSetup& setup) const;
92  virtual ~AbstractPreparationProtocol() = default;
93 
94 protected:
95  AbstractPreparationProtocol() = default;
98  AbstractPreparationProtocol& operator=(const AbstractPreparationProtocol&) = default;
100 };
101 
102 // placeholder, implement meaningfully in sub-classes
104 {
105  return true;
106 }
107 
179 inline void AbstractPrepareStep::fromVariant(const QVariant &variant)
180 {
181  auto varMap = variant.toMap();
182  if(varMap.value(QStringLiteral("type-id")).toInt() != type())
183  {
184  qWarning() << QString(typeid(*this).name())
185  + "::fromVariant: Could not construct instance! "
186  "reason: incompatible variant passed";
187  return;
188  }
189 }
190 
194 inline QVariant AbstractPrepareStep::toVariant() const
195 {
196  QVariantMap ret = SerializationInterface::toVariant().toMap();
197 
198  ret.insert(QStringLiteral("name"), typeid(*this).name());
199 
200  return ret;
201 }
202 
203 } // namespace CTL
204 
205 #endif // CTL_ABSTRACTPREPARESTEP_H
virtual bool isApplicableTo(const CTSystem &system) const =0
Base class for entire preparation protocols (i.e. for multiple views) that can be used in combination...
Definition: abstractpreparestep.h:84
Base class for preparation steps used within an AcquisitionSetup.
Definition: abstractpreparestep.h:46
virtual bool isApplicableTo(const AcquisitionSetup &setup) const
Definition: abstractpreparestep.h:103
virtual void prepare(SimpleCTSystem &system) const =0
Holds a CTSystem together with the information about the system settings for all views from which pro...
Definition: acquisitionsetup.h:175
Specify an interface for de-/serialization from/to QVariants.
Definition: serializationinterface.h:17
The CTSystem class manages the list of all components of a system.
Definition: ctsystem.h:84
QVariant toVariant() const override
Definition: abstractpreparestep.h:194
void fromVariant(const QVariant &variant) override
Definition: abstractpreparestep.h:179
#define CTL_TYPE_ID(newIndex)
Definition: serializationinterface.h:189
unsigned int uint
Qt style alias for unsigned int.
Definition: modulelayout.h:6
int type() const override
Definition: abstractpreparestep.h:48
The SimpleCTSystem class is a specialized sub-class of CTSystem for simple systems (i....
Definition: simplectsystem.h:95
virtual QVariant toVariant() const
Definition: serializationinterface.h:83