Geometrize  1.0
An application for geometrizing images into geometric primitives
imagetask.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <functional>
4 #include <memory>
5 #include <string>
6 #include <vector>
7 
8 #include <QObject>
9 
10 #include "geometrize/core.h"
11 #include "geometrize/bitmap/bitmap.h"
12 #include "geometrize/bitmap/rgba.h"
13 #include "geometrize/model.h"
14 #include "geometrize/shaperesult.h"
15 #include "geometrize/runner/imagerunneroptions.h"
16 #include "geometrize/shape/shape.h"
17 
19 
20 namespace geometrize
21 {
22 
23 namespace script
24 {
25 class GeometrizerEngine;
26 }
27 
28 }
29 
30 namespace chaiscript
31 {
32 class ChaiScript;
33 }
34 
35 Q_DECLARE_METATYPE(std::vector<geometrize::ShapeResult>)
36 Q_DECLARE_METATYPE(geometrize::ImageRunnerOptions)
37 Q_DECLARE_METATYPE(std::function<std::shared_ptr<geometrize::Shape>()>)
38 Q_DECLARE_METATYPE(std::shared_ptr<geometrize::Shape>)
40 Q_DECLARE_METATYPE(geometrize::core::EnergyFunction);
41 Q_DECLARE_METATYPE(geometrize::ShapeAcceptancePreconditionFunction);
42 
43 namespace geometrize
44 {
45 
46 namespace task
47 {
48 
52 class ImageTask : public QObject
53 {
54  Q_OBJECT
55 public:
56  ImageTask(Bitmap& target, Qt::ConnectionType workerConnectionType = Qt::QueuedConnection);
57  ImageTask(Bitmap& target, Bitmap& background, Qt::ConnectionType workerConnectionType = Qt::QueuedConnection);
58  ImageTask(const std::string& displayName, Bitmap& bitmap, Qt::ConnectionType workerConnectionType = Qt::QueuedConnection);
59  ImageTask(const std::string& displayName, Bitmap& bitmap, const Bitmap& initial, Qt::ConnectionType workerConnectionType = Qt::QueuedConnection);
60 
61  ImageTask& operator=(const ImageTask&) = delete;
62  ImageTask(const ImageTask&) = delete;
63  virtual ~ImageTask();
64 
69  geometrize::script::GeometrizerEngine& getGeometrizer();
70 
75  Bitmap& getTargetMutable();
76 
81  Bitmap& getCurrentMutable();
82 
87  const Bitmap& getTarget() const;
88 
93  const Bitmap& getCurrent() const;
94 
99  std::uint32_t getWidth() const;
100 
105  std::uint32_t getHeight() const;
106 
111  std::string getDisplayName() const;
112 
117  std::size_t getTaskId() const;
118 
123  bool isStepping() const;
124 
128  void stepModel();
129 
135  void drawShape(const std::shared_ptr<geometrize::Shape> shape, geometrize::rgba color);
136 
141  void drawBackgroundRectangle(geometrize::rgba color);
142 
148 
153  void setPreferences(preferences::ImageTaskPreferences preferences);
154 
155 signals:
159  void signal_step(geometrize::ImageRunnerOptions options, std::function<std::shared_ptr<geometrize::Shape>()> shapeCreator, geometrize::core::EnergyFunction energyFunction, geometrize::ShapeAcceptancePreconditionFunction addShapePrecondition);
160 
166  void signal_drawShape(std::shared_ptr<geometrize::Shape> shape, geometrize::rgba color);
167 
172 
177  void signal_modelDidStep(std::vector<geometrize::ShapeResult> shapes);
178 
183 
184 private:
185  void modelWillStep();
186  void modelDidStep(std::vector<geometrize::ShapeResult> shapes);
187 
188  class ImageTaskImpl;
189  std::unique_ptr<ImageTaskImpl> d;
190 };
191 
192 }
193 
194 }
geometrize::task::ImageTask::ImageTaskImpl::getDisplayName
std::string getDisplayName() const
Definition: imagetask.cpp:97
geometrize::task::ImageTask::ImageTaskImpl
Definition: imagetask.cpp:34
geometrize::task::ImageTaskWorker::signal_willStep
void signal_willStep()
geometrize::task::ImageTask::~ImageTask
virtual ~ImageTask()
Definition: imagetask.cpp:318
geometrize::task::ImageTask::signal_modelWillStep
void signal_modelWillStep()
signal_modelWillStep Signal that is emitted immediately before the underlying image task model is ste...
geometrize::preferences::ImageTaskPreferences::isScriptModeEnabled
bool isScriptModeEnabled() const
Definition: imagetaskpreferences.cpp:320
geometrize::task::ImageTask::ImageTaskImpl::stepModel
void stepModel()
Definition: imagetask.cpp:112
geometrize::task::ImageTaskWorker::drawShape
void drawShape(std::shared_ptr< geometrize::Shape > shape, geometrize::rgba color)
drawShape Draws a shape with the given color to the image task. Emits the willStep signal when called...
Definition: imagetaskworker.cpp:40
geometrize::task::ImageTask::ImageTaskImpl::m_id
const std::size_t m_id
The display name of the image task.
Definition: imagetask.cpp:292
geometrize::task::ImageTask::getTarget
const Bitmap & getTarget() const
getTarget Gets the target bitmap, const-edition.
Definition: imagetask.cpp:332
geometrize::script::GeometrizerEngine::getEngine
chaiscript::ChaiScript * getEngine()
getEngine Gets a pointer to the script engine used by the shape mutation engine.
Definition: geometrizerengine.cpp:52
geometrize::task::ImageTask::ImageTaskImpl::~ImageTaskImpl
~ImageTaskImpl()
Definition: imagetask.cpp:48
geometrize::task::ImageTask::ImageTaskImpl::q
ImageTask * q
Definition: imagetask.cpp:289
geometrize::task::ImageTask::ImageTaskImpl::drawShape
void drawShape(const std::shared_ptr< geometrize::Shape > shape, const geometrize::rgba color)
Definition: imagetask.cpp:202
geometrize::task::ImageTask::ImageTaskImpl::init
void init(const Qt::ConnectionType connectionType)
Definition: imagetask.cpp:245
geometrize::task::ImageTask::ImageTaskImpl::drawBackgroundRectangle
void drawBackgroundRectangle(const geometrize::rgba color)
Definition: imagetask.cpp:207
geometrize::task::ImageTask::ImageTaskImpl::getWidth
std::uint32_t getWidth() const
Definition: imagetask.cpp:87
geometrize::task::ImageTask::ImageTaskImpl::ImageTaskImpl
ImageTaskImpl(const ImageTaskImpl &)=delete
geometrize::preferences::ImageTaskPreferences::getScripts
std::map< std::string, std::string > getScripts() const
Definition: imagetaskpreferences.cpp:335
geometrize::task::ImageTask::ImageTask
ImageTask(const ImageTask &)=delete
geometrize::task::ImageTask::ImageTaskImpl::getTarget
Bitmap & getTarget()
Definition: imagetask.cpp:67
geometrize::task::ImageTask::d
std::unique_ptr< ImageTaskImpl > d
Definition: imagetask.h:188
geometrize::task::ImageTask::ImageTaskImpl::getHeight
std::uint32_t getHeight() const
Definition: imagetask.cpp:92
geometrize::task::ImageTask::ImageTaskImpl::getCurrent
Bitmap & getCurrent()
Definition: imagetask.cpp:72
geometrize::task::ImageTask::getCurrent
const Bitmap & getCurrent() const
getCurrent Gets the current bitmap, const-edition.
Definition: imagetask.cpp:337
geometrize::task::ImageTask::drawBackgroundRectangle
void drawBackgroundRectangle(geometrize::rgba color)
drawBackgroundRectangle Convenience function that draws a background rectangle shape.
Definition: imagetask.cpp:377
geometrize::task::ImageTask::getHeight
std::uint32_t getHeight() const
getHeight Gets the height of the images used by the image task.
Definition: imagetask.cpp:347
geometrize::task::ImageTaskWorker::getCurrent
geometrize::Bitmap & getCurrent()
getCurrent Gets the current working bitmap.
Definition: imagetaskworker.cpp:49
geometrize::task::ImageTask::ImageTaskImpl::operator=
ImageTaskImpl & operator=(const ImageTaskImpl &)=delete
geometrize::task::ImageTask::ImageTask
ImageTask(Bitmap &target, Qt::ConnectionType workerConnectionType=Qt::QueuedConnection)
Definition: imagetask.cpp:298
chaiscript
Definition: commandlineedit.h:11
geometrize::task::ImageTask::getTaskId
std::size_t getTaskId() const
getTaskId Gets the unique id of the image task.
Definition: imagetask.cpp:357
geometrize::preferences::ImageTaskPreferences
The ImageTaskPreferences class models the preferences associated with an image task.
Definition: imagetaskpreferences.h:29
geometrize::preferences::ImageTaskPreferences::getImageRunnerOptions
geometrize::ImageRunnerOptions getImageRunnerOptions() const
getImageRunnerOptions Gets a copy of the image runner options.
Definition: imagetaskpreferences.cpp:235
geometrize::task::ImageTask::drawShape
void drawShape(const std::shared_ptr< geometrize::Shape > shape, geometrize::rgba color)
drawShape Draws a shape with the given color to the internal model.
Definition: imagetask.cpp:372
geometrize::task::ImageTask::ImageTaskImpl::disconnectAll
void disconnectAll()
Definition: imagetask.cpp:281
geometrize::task::ImageTask::ImageTaskImpl::getCurrent
const Bitmap & getCurrent() const
Definition: imagetask.cpp:82
geometrize::task::ImageTask::ImageTaskImpl::getPreferences
preferences::ImageTaskPreferences & getPreferences()
Definition: imagetask.cpp:227
geometrize::task::ImageTask::modelDidStep
void modelDidStep(std::vector< geometrize::ShapeResult > shapes)
Definition: imagetask.cpp:387
geometrize::task::ImageTaskWorker::getTarget
geometrize::Bitmap & getTarget()
getTarget Gets the current target bitmap.
Definition: imagetaskworker.cpp:54
imagetaskpreferences.h
geometrize::task::ImageTask::ImageTaskImpl::m_workerThread
QThread m_workerThread
A unique id for the image task.
Definition: imagetask.cpp:293
geometrize::task::ImageTask::ImageTaskImpl::getTarget
const Bitmap & getTarget() const
Definition: imagetask.cpp:77
geometrize::task::ImageTask::getCurrentMutable
Bitmap & getCurrentMutable()
getCurrent Gets the current bitmap, non-const edition.
Definition: imagetask.cpp:327
geometrizerengine.h
geometrize::task::ImageTask::ImageTaskImpl::modelWillStep
void modelWillStep()
Definition: imagetask.cpp:217
geometrize
Definition: commandlineparser.cpp:73
geometrize::task::ImageTask::ImageTaskImpl::setPreferences
void setPreferences(const preferences::ImageTaskPreferences preferences)
Definition: imagetask.cpp:232
geometrize::task::ImageTask::ImageTaskImpl::ImageTaskImpl
ImageTaskImpl(ImageTask *pQ, const std::string &displayName, Bitmap &bitmap, const Bitmap &initial, Qt::ConnectionType workerConnectionType)
Definition: imagetask.cpp:42
geometrize::task::ImageTaskWorker
The ImageTaskWorker class transforms a source image into a collection of shapes. It is made to be run...
Definition: imagetaskworker.h:25
geometrize::task::ImageTaskWorker::isStepping
bool isStepping() const
isStepping Returns true if the internal model is currently stepping.
Definition: imagetaskworker.cpp:74
geometrize::task::ImageTaskWorker::step
void step(geometrize::ImageRunnerOptions options, std::function< std::shared_ptr< geometrize::Shape >()> shapeCreator, geometrize::core::EnergyFunction energyFunction=nullptr, geometrize::ShapeAcceptancePreconditionFunction addShapePreconditionFunction=nullptr)
step Steps the image task worker. Emits the willStep signal when called, and didStep signal on comple...
Definition: imagetaskworker.cpp:28
Q_DECLARE_METATYPE
Q_DECLARE_METATYPE(std::vector< geometrize::ShapeResult >) Q_DECLARE_METATYPE(geometrize Q_DECLARE_METATYPE(geometrize::ShapeAcceptancePreconditionFunction)
< Energy function passed to the image task worker thread.
imagetask.h
geometrize::task::ImageTask::ImageTaskImpl::connectSignals
void connectSignals(const Qt::ConnectionType connectionType)
Definition: imagetask.cpp:273
geometrize::task::ImageTask::signal_step
void signal_step(geometrize::ImageRunnerOptions options, std::function< std::shared_ptr< geometrize::Shape >()> shapeCreator, geometrize::core::EnergyFunction energyFunction, geometrize::ShapeAcceptancePreconditionFunction addShapePrecondition)
signal_step Signal that the image task emits to make the internal model step.
geometrize::task::ImageTask::getTargetMutable
Bitmap & getTargetMutable()
getTarget Gets the target bitmap, non-const edition.
Definition: imagetask.cpp:322
geometrize::task::ImageTask::getGeometrizer
geometrize::script::GeometrizerEngine & getGeometrizer()
getGeometrizer Gets a reference to the script-based engine used to turn images into shapes.
Definition: imagetask.cpp:402
geometrize::task::ImageTask::ImageTaskImpl::m_displayName
const std::string m_displayName
Runtime configuration parameters for the runner.
Definition: imagetask.cpp:291
geometrize::task::ImageTaskWorker::signal_didStep
void signal_didStep(std::vector< geometrize::ShapeResult > shapes)
imagetaskworker.h
geometrize::task::ImageTask::getWidth
std::uint32_t getWidth() const
getWidth Gets the width of the images used by the image task.
Definition: imagetask.cpp:342
geometrize::task::ImageTask::ImageTaskImpl::m_preferences
preferences::ImageTaskPreferences m_preferences
Definition: imagetask.cpp:290
geometrize::task::ImageTask::setPreferences
void setPreferences(preferences::ImageTaskPreferences preferences)
setPreferences Sets the preferences for this task.
Definition: imagetask.cpp:397
geometrize::task::ImageTask::ImageTaskImpl::modelDidStep
void modelDidStep(const std::vector< geometrize::ShapeResult > shapes)
Definition: imagetask.cpp:222
geometrize::task::ImageTask
The ImageTask class transforms a source image into a collection of shapes approximating the source im...
Definition: imagetask.h:53
geometrize::script::GeometrizerEngine::installScripts
void installScripts(const std::map< std::string, std::string > &scripts)
Definition: geometrizerengine.cpp:57
geometrize::task::ImageTask::ImageTaskImpl::m_worker
ImageTaskWorker m_worker
Thread that the image task worker runs on.
Definition: imagetask.cpp:294
geometrize::task::ImageTask::ImageTaskImpl::getGeometrizer
geometrize::script::GeometrizerEngine & getGeometrizer()
Definition: imagetask.cpp:62
geometrize::task::ImageTask::operator=
ImageTask & operator=(const ImageTask &)=delete
geometrize::task::ImageTask::ImageTaskImpl::getTaskId
std::size_t getTaskId() const
Definition: imagetask.cpp:102
geometrize::task::ImageTask::ImageTaskImpl::m_geometrizer
geometrize::script::GeometrizerEngine m_geometrizer
The image task worker.
Definition: imagetask.cpp:295
geometrize::task::ImageTask::isStepping
bool isStepping() const
isStepping Returns true if the internal model is currently stepping.
Definition: imagetask.cpp:362
geometrize::task::ImageTask::ImageTaskImpl::isStepping
bool isStepping() const
Definition: imagetask.cpp:107
geometrize::script::GeometrizerEngine
The GeometrizerEngine class encapsulates script-based setup and mutation methods for geometrizing sha...
Definition: geometrizerengine.h:58
geometrize::task::ImageTask::signal_modelDidStep
void signal_modelDidStep(std::vector< geometrize::ShapeResult > shapes)
signal_modelDidStep Signal that is emitted immediately after the underlying image task model is stepp...
geometrize::task::ImageTask::modelWillStep
void modelWillStep()
Definition: imagetask.cpp:382
geometrize::task::ImageTask::ImageTaskImpl::ImageTaskImpl
ImageTaskImpl(ImageTask *pQ, const std::string &displayName, Bitmap &bitmap, Qt::ConnectionType workerConnectionType)
Definition: imagetask.cpp:36
geometrize::task::ImageTask::getPreferences
geometrize::preferences::ImageTaskPreferences & getPreferences()
getPreferences Gets a reference to the current preferences of this task.
Definition: imagetask.cpp:392
geometrize::task::ImageTask::signal_preferencesSet
void signal_preferencesSet()
signal_preferencesSet Signal that is emitted immediately after the image task preferences are set.
geometrize::task::ImageTask::stepModel
void stepModel()
stepModel Steps the internal model, typically adding a shape.
Definition: imagetask.cpp:367
geometrize::task::ImageTask::getDisplayName
std::string getDisplayName() const
getDisplayName Gets the display name of the image task.
Definition: imagetask.cpp:352
geometrize::task::ImageTask::signal_drawShape
void signal_drawShape(std::shared_ptr< geometrize::Shape > shape, geometrize::rgba color)
signal_drawShape Signal that the image task emits to draw a shape to the internal model.
geometrize::task::ImageTask::ImageTaskImpl::getId
static std::size_t getId()
Definition: imagetask.cpp:239