Blender V4.3
Canvas.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
12#include <cstring>
13#include <deque>
14#include <map>
15#include <vector>
16
17#include "StrokeLayer.h"
18
19#include "../geometry/BBox.h"
20#include "../geometry/Geom.h"
21
23
24#ifdef WITH_CXX_GUARDEDALLOC
25# include "MEM_guardedalloc.h"
26#endif
27
28namespace Freestyle {
29
30using namespace Geometry;
31
32struct ltstr {
33 bool operator()(const char *s1, const char *s2) const
34 {
35 return strcmp(s1, s2) < 0;
36 }
37};
38
39class InformationMap;
40class StrokeRenderer;
41class ViewMap;
42class ViewEdge;
43class FEdge;
44class RGBImage;
45class GrayImage;
46class QImage;
47class ImagePyramid;
48class SteerableViewMap;
49class StyleModule;
50
54class Canvas {
55 public:
58 {
59 return _pInstance;
60 }
61
62 typedef std::map<const char *, ImagePyramid *, ltstr> mapsMap;
63 static const int NB_STEERABLE_VIEWMAP = 5;
64
65 protected:
67 std::deque<StrokeLayer *> _Layers;
68 std::deque<StyleModule *> _StyleModules;
70
74 static const char *_MapsPath;
76 bool _basic;
78
79 public:
80 /* Builds the Canvas */
81 Canvas();
82 /* Copy constructor */
83 Canvas(const Canvas &iBrother);
84 /* Destructor */
85 virtual ~Canvas();
86
87 /* operations that need to be done before a draw */
88 virtual void preDraw();
89
90 /* Draw the canvas using the current shader */
91 virtual void Draw();
92
93 /* operations that need to be done after a draw */
94 virtual void postDraw();
95
96 /* Renders the created strokes */
97 virtual void Render(const StrokeRenderer *iRenderer);
98 /* Basic Renders the created strokes */
99 virtual void RenderBasic(const StrokeRenderer *iRenderer);
100 /* Renders a stroke */
101 virtual void RenderStroke(Stroke *iStroke) = 0;
102
103 /* init the canvas */
104 virtual void init() = 0;
105
106 /* Clears the Canvas (shaders stack, layers stack...) */
107 void Clear();
108
109 /* Erases the layers */
110 virtual void Erase();
111
112 /* Reads a pixel area from the canvas */
113 virtual void readColorPixels(int x, int y, int w, int h, RGBImage &oImage) const = 0;
114 /* Reads a depth pixel area from the canvas */
115 virtual void readDepthPixels(int x, int y, int w, int h, GrayImage &oImage) const = 0;
116
117 /* update the canvas (display) */
118 virtual void update() = 0;
119
120 /* checks whether the canvas is empty or not */
121 bool isEmpty() const
122 {
123 return (_Layers.empty());
124 }
125
126 /* Maps management */
138 void loadMap(const char *iFileName,
139 const char *iMapName,
140 uint iNbLevels = 4,
141 float iSigma = 1.0f);
142
156 float readMapPixel(const char *iMapName, int level, int x, int y);
157
160 {
161 _steerableViewMap = iSVM;
162 }
163
169
171 inline const FEdge *selectedFEdge() const
172 {
173 return _SelectedFEdge;
174 }
175
177 {
178 return _SelectedFEdge;
179 }
180
181 virtual int width() const = 0;
182 virtual int height() const = 0;
183 virtual BBox<Vec2i> border() const = 0;
184 virtual BBox<Vec3r> scene3DBBox() const = 0;
185
186 inline const StrokeRenderer *renderer() const
187 {
188 return _Renderer;
189 }
190
192 {
193 return _current_sm;
194 }
195
196 virtual bool getRecordFlag() const
197 {
198 return false;
199 }
200
201 inline int getStrokeCount() const
202 {
203 return stroke_count;
204 }
205
207 inline void setSelectedFEdge(FEdge *iFEdge)
208 {
209 _SelectedFEdge = iFEdge;
210 }
211
213 void PushBackStyleModule(StyleModule *iStyleModule);
214 void InsertStyleModule(uint index, StyleModule *iStyleModule);
215 void RemoveStyleModule(uint index);
216 void SwapStyleModules(uint i1, uint i2);
217 void ReplaceStyleModule(uint index, StyleModule *iStyleModule);
218 void setVisible(uint index, bool iVisible);
219
220#if 0
221 inline void setDensityMap(InformationMap<RGBImage> *iMap)
222 {
223 _DensityMap = iMap;
224 }
225#endif
226
227 inline void AddLayer(StrokeLayer *iLayer)
228 {
229 _Layers.push_back(iLayer);
230 }
231
232 void resetModified(bool iMod = false);
233 void causalStyleModules(std::vector<uint> &vec, uint index = 0);
234 void setModified(uint index, bool iMod);
235
236#ifdef WITH_CXX_GUARDEDALLOC
237 MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:Canvas")
238#endif
239};
240
241} /* namespace Freestyle */
A class to hold a bounding box.
unsigned int uint
Configuration definitions.
Vectors and Matrices (useful type definitions)
Read Guarded memory(de)allocation.
struct Render Render
Definition RE_pipeline.h:43
Class to define a layer of strokes.
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
virtual void Erase()
Definition Canvas.cpp:151
virtual BBox< Vec3r > scene3DBBox() const =0
virtual void postDraw()
Definition Canvas.cpp:115
virtual void readDepthPixels(int x, int y, int w, int h, GrayImage &oImage) const =0
void setVisible(uint index, bool iVisible)
Definition Canvas.cpp:256
FEdge * selectedFEdge()
Definition Canvas.h:176
virtual BBox< Vec2i > border() const =0
virtual void preDraw()
Definition Canvas.cpp:86
virtual void Draw()
Definition Canvas.cpp:88
FEdge * _SelectedFEdge
Definition Canvas.h:69
std::deque< StrokeLayer * > _Layers
Definition Canvas.h:67
SteerableViewMap * _steerableViewMap
Definition Canvas.h:75
void setModified(uint index, bool iMod)
Definition Canvas.cpp:261
void causalStyleModules(std::vector< uint > &vec, uint index=0)
Definition Canvas.cpp:274
void RemoveStyleModule(uint index)
Definition Canvas.cpp:190
void InsertStyleModule(uint index, StyleModule *iStyleModule)
Definition Canvas.cpp:177
void AddLayer(StrokeLayer *iLayer)
Definition Canvas.h:227
std::map< const char *, ImagePyramid *, ltstr > mapsMap
Definition Canvas.h:62
bool isEmpty() const
Definition Canvas.h:121
void SwapStyleModules(uint i1, uint i2)
Definition Canvas.cpp:226
float readMapPixel(const char *iMapName, int level, int x, int y)
Definition Canvas.cpp:452
virtual bool getRecordFlag() const
Definition Canvas.h:196
void PushBackStyleModule(StyleModule *iStyleModule)
Definition Canvas.cpp:170
virtual void RenderBasic(const StrokeRenderer *iRenderer)
Definition Canvas.cpp:295
virtual void readColorPixels(int x, int y, int w, int h, RGBImage &oImage) const =0
void loadMap(const char *iFileName, const char *iMapName, uint iNbLevels=4, float iSigma=1.0f)
Definition Canvas.cpp:305
virtual int height() const =0
StyleModule * _current_sm
Definition Canvas.h:72
virtual int width() const =0
void resetModified(bool iMod=false)
Definition Canvas.cpp:266
std::deque< StyleModule * > _StyleModules
Definition Canvas.h:68
void loadSteerableViewMap(SteerableViewMap *iSVM)
Definition Canvas.h:159
static Canvas * getInstance()
Definition Canvas.h:57
StyleModule * getCurrentStyleModule()
Definition Canvas.h:191
void ReplaceStyleModule(uint index, StyleModule *iStyleModule)
Definition Canvas.cpp:239
static const int NB_STEERABLE_VIEWMAP
Definition Canvas.h:63
SteerableViewMap * getSteerableViewMap()
Definition Canvas.h:165
virtual ~Canvas()
Definition Canvas.cpp:67
const FEdge * selectedFEdge() const
Definition Canvas.h:171
int getStrokeCount() const
Definition Canvas.h:201
static const char * _MapsPath
Definition Canvas.h:74
const StrokeRenderer * renderer() const
Definition Canvas.h:186
virtual void init()=0
StrokeRenderer * _Renderer
Definition Canvas.h:71
virtual void RenderStroke(Stroke *iStroke)=0
static Canvas * _pInstance
Definition Canvas.h:66
void setSelectedFEdge(FEdge *iFEdge)
Definition Canvas.h:207
mapsMap _maps
Definition Canvas.h:73
virtual void update()=0
inherits from class Rep
Definition AppCanvas.cpp:20
bool operator()(const char *s1, const char *s2) const
Definition Canvas.h:33