Blender  V2.93
FEdgeXDetector.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
17 #pragma once
18 
24 #include <vector>
25 
26 #include "../geometry/Geom.h"
27 
28 #include "../system/FreestyleConfig.h"
29 #include "../system/ProgressBar.h"
30 #include "../system/RenderMonitor.h"
31 
32 #include "../winged_edge/Curvature.h"
33 #include "../winged_edge/WXEdge.h"
34 
35 #include "BLI_math.h"
36 
37 #ifdef WITH_CXX_GUARDEDALLOC
38 # include "MEM_guardedalloc.h"
39 #endif
40 
41 namespace Freestyle {
42 
43 using namespace Geometry;
44 
47  public:
49  {
50  _pProgressBar = NULL;
51  _pRenderMonitor = NULL;
52  _computeViewIndependent = true;
53 #if 0
54  _bbox_diagonal = 1.0;
55 #endif
56  _meanEdgeSize = 0;
57  _computeRidgesAndValleys = true;
58  _computeSuggestiveContours = true;
59  _computeMaterialBoundaries = true;
60  _sphereRadius = 1.0;
61  _orthographicProjection = false;
62  _faceSmoothness = false;
63  _changes = false;
64  _kr_derivative_epsilon = 0.0;
65  _creaseAngle = 0.7; // angle of 134.43 degrees
66  }
67 
68  virtual ~FEdgeXDetector()
69  {
70  }
71 
73  virtual void processShapes(WingedEdge &);
74 
75  // GENERAL STUFF
76  virtual void preProcessShape(WXShape *iWShape);
77  virtual void preProcessFace(WXFace *iFace);
78  virtual void computeCurvatures(WXVertex *iVertex);
79 
80  // SILHOUETTE
81  virtual void processSilhouetteShape(WXShape *iWShape);
82  virtual void ProcessSilhouetteFace(WXFace *iFace);
83  virtual void ProcessSilhouetteEdge(WXEdge *iEdge);
84 
85  // CREASE
86  virtual void processCreaseShape(WXShape *iWShape);
87  virtual void ProcessCreaseEdge(WXEdge *iEdge);
88 
95  // XXX angle should be in radian...
96  inline void setCreaseAngle(float angle)
97  {
98  if (angle < 0.0) {
99  angle = 0.0;
100  }
101  else if (angle > 180.0) {
102  angle = 180.0;
103  }
104  angle = cos(M_PI * (180.0 - angle) / 180.0);
105  if (angle != _creaseAngle) {
106  _creaseAngle = angle;
107  _changes = true;
108  }
109  }
110 
111  // BORDER
112  virtual void processBorderShape(WXShape *iWShape);
113  virtual void ProcessBorderEdge(WXEdge *iEdge);
114 
115  // RIDGES AND VALLEYS
116  virtual void processRidgesAndValleysShape(WXShape *iWShape);
117  virtual void ProcessRidgeFace(WXFace *iFace);
118 
119  // SUGGESTIVE CONTOURS
120  virtual void processSuggestiveContourShape(WXShape *iWShape);
121  virtual void ProcessSuggestiveContourFace(WXFace *iFace);
122  virtual void postProcessSuggestiveContourShape(WXShape *iShape);
123  virtual void postProcessSuggestiveContourFace(WXFace *iFace);
129  {
130  if (dkr != _kr_derivative_epsilon) {
131  _kr_derivative_epsilon = dkr;
132  _changes = true;
133  }
134  }
135 
136  // MATERIAL BOUNDARY
137  virtual void processMaterialBoundaryShape(WXShape *iWShape);
138  virtual void ProcessMaterialBoundaryEdge(WXEdge *iEdge);
139 
140  // EDGE MARKS
141  virtual void processEdgeMarksShape(WXShape *iShape);
142  virtual void ProcessEdgeMarks(WXEdge *iEdge);
143 
144  // EVERYBODY
145  virtual void buildSmoothEdges(WXShape *iShape);
146 
148  inline void setViewpoint(const Vec3f &ivp)
149  {
150  _Viewpoint = ivp;
151  }
152 
153  inline void enableOrthographicProjection(bool b)
154  {
155  _orthographicProjection = b;
156  }
157 
158  inline void enableRidgesAndValleysFlag(bool b)
159  {
160  _computeRidgesAndValleys = b;
161  }
162 
163  inline void enableSuggestiveContours(bool b)
164  {
165  _computeSuggestiveContours = b;
166  }
167 
168  inline void enableMaterialBoundaries(bool b)
169  {
170  _computeMaterialBoundaries = b;
171  }
172 
173  inline void enableFaceSmoothness(bool b)
174  {
175  if (b != _faceSmoothness) {
176  _faceSmoothness = b;
177  _changes = true;
178  }
179  }
180 
181  inline void enableFaceMarks(bool b)
182  {
183  if (b != _faceMarks) {
184  _faceMarks = b;
185  _changes = true;
186  }
187  }
188 
193  inline void setSphereRadius(float r)
194  {
195  if (r != _sphereRadius) {
196  _sphereRadius = r;
197  _changes = true;
198  }
199  }
200 
201  inline void setProgressBar(ProgressBar *iProgressBar)
202  {
203  _pProgressBar = iProgressBar;
204  }
205 
206  inline void setRenderMonitor(RenderMonitor *iRenderMonitor)
207  {
208  _pRenderMonitor = iRenderMonitor;
209  }
210 
211  protected:
213 #if 0
214  real _bbox_diagonal; // diagonal of the current processed shape bbox
215 #endif
216  // oldtmp values
224  unsigned _nPoints;
227 
233  float _sphereRadius; // expressed as a ratio of the mean edge size
234  float _creaseAngle; // [-1, 1] compared with the inner product of face normals
235  bool _changes;
236 
238 
241 
242 #ifdef WITH_CXX_GUARDEDALLOC
243  MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:FEdgeXDetector")
244 #endif
245 };
246 
247 } /* namespace Freestyle */
#define M_PI
Definition: BLI_math_base.h:38
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
Read Guarded memory(de)allocation.
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
Definition: btVector3.h:356
void enableMaterialBoundaries(bool b)
void enableSuggestiveContours(bool b)
void setSuggestiveContourKrDerivativeEpsilon(float dkr)
void setCreaseAngle(float angle)
void setProgressBar(ProgressBar *iProgressBar)
RenderMonitor * _pRenderMonitor
void enableFaceSmoothness(bool b)
void enableOrthographicProjection(bool b)
void setViewpoint(const Vec3f &ivp)
void setRenderMonitor(RenderMonitor *iRenderMonitor)
void enableRidgesAndValleysFlag(bool b)
inherits from class Rep
Definition: AppCanvas.cpp:32
double real
Definition: Precision.h:26
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
Definition: rall1d.h:319