Blender  V3.3
Functions1D.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
8 #include "Functions1D.h"
9 
10 using namespace std;
11 
12 namespace Freestyle::Functions1D {
13 
15 {
16  result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
17  return 0;
18 }
19 
21 {
22  result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
23  return 0;
24 }
25 
27 {
28  result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
29  return 0;
30 }
31 
33 {
34  result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
35  return 0;
36 }
37 
39 {
40  result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
41  return 0;
42 }
43 
45 {
46  result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
47  return 0;
48 }
49 
51 {
52  FEdge *fe = dynamic_cast<FEdge *>(&inter);
53  if (fe) {
54  Vec3r res = fe->orientation2d();
55  result = Vec2f(res[0], res[1]);
56  }
57  else {
58  result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
59  }
60  return 0;
61 }
62 
64 {
65  result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
66  return 0;
67 }
68 
70 {
71  result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
72  return 0;
73 }
74 
76 {
77  ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
78  if (ve) {
79  result = ve->qi();
80  return 0;
81  }
82  FEdge *fe = dynamic_cast<FEdge *>(&inter);
83  if (fe) {
84  result = fe->qi();
85  return 0;
86  }
87  result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
88  return 0;
89 }
90 
92 {
93  ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
94  if (ve) {
95  result = ve->getNature();
96  }
97  else {
98  // we return a nature that contains every natures of the viewedges spanned by the chain.
100  Interface0DIterator it = inter.verticesBegin();
101  while (!it.isEnd()) {
102  nat |= _func(it);
103  ++it;
104  }
105  result = nat;
106  }
107  return 0;
108 }
109 
111 {
112  TimeStamp *timestamp = TimeStamp::instance();
113  inter.setTimeStamp(timestamp->getTimeStamp());
114  return 0;
115 }
116 
118 {
119  TimeStamp *timestamp = TimeStamp::instance();
120  ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
121  if (ve) {
122  ve->setChainingTimeStamp(timestamp->getTimeStamp());
123  }
124  return 0;
125 }
126 
128 {
129  ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
130  if (ve) {
132  }
133  return 0;
134 }
135 
137 {
138  vector<ViewShape *> shapesVector;
139  set<ViewShape *> shapesSet;
140  ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
141  if (ve) {
142  shapesVector.push_back(ve->viewShape());
143  }
144  else {
145  Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
146  for (; it != itend; ++it) {
147  shapesSet.insert(Functions0D::getShapeF0D(it));
148  }
149  shapesVector.insert<set<ViewShape *>::iterator>(
150  shapesVector.begin(), shapesSet.begin(), shapesSet.end());
151  }
152  result = shapesVector;
153  return 0;
154 }
155 
157 {
158  vector<ViewShape *> shapesVector;
159  set<ViewShape *> shapesSet;
160  ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
161  if (ve) {
162  result = ve->occluders();
163  }
164  else {
165  Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
166  for (; it != itend; ++it) {
167  Functions0D::getOccludersF0D(it, shapesSet);
168  }
169  shapesVector.insert(shapesVector.begin(), shapesSet.begin(), shapesSet.end());
170  result = shapesVector;
171  }
172  return 0;
173 }
174 
176 {
177  vector<ViewShape *> shapesVector;
178  set<ViewShape *> shapesSet;
179  ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
180  if (ve) {
181  ViewShape *aShape = ve->aShape();
182  if (aShape) {
183  shapesVector.push_back(aShape);
184  }
185  }
186  else {
187  Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
188  for (; it != itend; ++it) {
189  shapesSet.insert(Functions0D::getOccludeeF0D(it));
190  }
191  shapesVector.insert<set<ViewShape *>::iterator>(
192  shapesVector.begin(), shapesSet.begin(), shapesSet.end());
193  }
194  result = shapesVector;
195  return 0;
196 }
197 
198 // Internal
200 
201 void getOccludeeF1D(Interface1D &inter, set<ViewShape *> &oShapes)
202 {
203  ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
204  if (ve) {
205  ViewShape *aShape = ve->aShape();
206  if (aShape == nullptr) {
207  oShapes.insert((ViewShape *)nullptr);
208  return;
209  }
210  oShapes.insert(aShape);
211  }
212  else {
213  Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
214  for (; it != itend; ++it) {
215  oShapes.insert(Functions0D::getOccludeeF0D(it));
216  }
217  }
218 }
219 
220 void getOccludersF1D(Interface1D &inter, set<ViewShape *> &oShapes)
221 {
222  ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
223  if (ve) {
224  vector<ViewShape *> &occluders = ve->occluders();
225  oShapes.insert<vector<ViewShape *>::iterator>(occluders.begin(), occluders.end());
226  }
227  else {
228  Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
229  for (; it != itend; ++it) {
230  set<ViewShape *> shapes;
231  Functions0D::getOccludersF0D(it, shapes);
232  for (set<ViewShape *>::iterator s = shapes.begin(), send = shapes.end(); s != send; ++s) {
233  oShapes.insert(*s);
234  }
235  }
236  }
237 }
238 
239 void getShapeF1D(Interface1D &inter, set<ViewShape *> &oShapes)
240 {
241  ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
242  if (ve) {
243  oShapes.insert(ve->viewShape());
244  }
245  else {
246  Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
247  for (; it != itend; ++it) {
248  oShapes.insert(Functions0D::getShapeF0D(it));
249  }
250  }
251 }
252 
253 } // namespace Freestyle::Functions1D
Functions taking 1D input.
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object instance
SIMD_FORCE_INLINE btVector3 operator()(const btVector3 &x) const
Return the transform of the vector.
Definition: btTransform.h:90
const int qi() const
Definition: Silhouette.h:872
Vec3r orientation2d() const
Definition: Silhouette.h:912
virtual bool isEnd() const
Definition: Interface0D.h:282
virtual Interface0DIterator verticesEnd()
Definition: Interface1D.cpp:21
virtual Interface0DIterator verticesBegin()
Definition: Interface1D.cpp:15
void setTimeStamp(unsigned iTimeStamp)
Definition: Interface1D.h:192
unsigned getTimeStamp() const
Definition: TimeStamp.h:23
int qi() const
Definition: ViewMap.h:1282
ViewShape * viewShape()
Definition: ViewMap.h:1091
virtual Nature::EdgeNature getNature() const
Definition: ViewMap.h:914
vector< ViewShape * > & occluders()
Definition: ViewMap.h:1129
void setChainingTimeStamp(unsigned ts)
Definition: ViewMap.h:1203
ViewShape * aShape()
Definition: ViewMap.h:1099
unsigned getChainingTimeStamp()
Definition: ViewMap.h:1114
ViewShape * getShapeF0D(Interface0DIterator &it)
Definition: Functions0D.cpp:93
ViewShape * getOccludeeF0D(Interface0DIterator &it)
void getOccludersF0D(Interface0DIterator &it, set< ViewShape * > &oOccluders)
void getOccludeeF1D(Interface1D &inter, set< ViewShape * > &oShapes)
void getShapeF1D(Interface1D &inter, set< ViewShape * > &oShapes)
void getOccludersF1D(Interface1D &inter, set< ViewShape * > &oShapes)
VecMat::Vec2< float > Vec2f
Definition: Geom.h:20
static const EdgeNature NO_FEATURE
Definition: Nature.h:34
unsigned short EdgeNature
Definition: Nature.h:32
T integrate(UnaryFunction0D< T > &fun, Interface0DIterator it, Interface0DIterator it_end, IntegrationType integration_type=MEAN)
Definition: Interface1D.h:73