Blender V4.3
Functions1D.cpp
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2009-2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
10#include "Functions1D.h"
11
12using namespace std;
13
14namespace Freestyle::Functions1D {
15
17{
18 result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
19 return 0;
20}
21
23{
24 result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
25 return 0;
26}
27
29{
30 result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
31 return 0;
32}
33
35{
36 result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
37 return 0;
38}
39
41{
42 result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
43 return 0;
44}
45
47{
48 result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
49 return 0;
50}
51
53{
54 FEdge *fe = dynamic_cast<FEdge *>(&inter);
55 if (fe) {
56 Vec3r res = fe->orientation2d();
57 result = Vec2f(res[0], res[1]);
58 }
59 else {
60 result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
61 }
62 return 0;
63}
64
66{
67 result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
68 return 0;
69}
70
72{
73 result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
74 return 0;
75}
76
78{
79 ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
80 if (ve) {
81 result = ve->qi();
82 return 0;
83 }
84 FEdge *fe = dynamic_cast<FEdge *>(&inter);
85 if (fe) {
86 result = fe->qi();
87 return 0;
88 }
89 result = integrate(_func, inter.verticesBegin(), inter.verticesEnd(), _integration);
90 return 0;
91}
92
94{
95 ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
96 if (ve) {
97 result = ve->getNature();
98 }
99 else {
100 // we return a nature that contains every natures of the viewedges spanned by the chain.
103 while (!it.isEnd()) {
104 nat |= _func(it);
105 ++it;
106 }
107 result = nat;
108 }
109 return 0;
110}
111
113{
114 TimeStamp *timestamp = TimeStamp::instance();
115 inter.setTimeStamp(timestamp->getTimeStamp());
116 return 0;
117}
118
120{
121 TimeStamp *timestamp = TimeStamp::instance();
122 ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
123 if (ve) {
124 ve->setChainingTimeStamp(timestamp->getTimeStamp());
125 }
126 return 0;
127}
128
130{
131 ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
132 if (ve) {
134 }
135 return 0;
136}
137
139{
140 vector<ViewShape *> shapesVector;
141 set<ViewShape *> shapesSet;
142 ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
143 if (ve) {
144 shapesVector.push_back(ve->viewShape());
145 }
146 else {
147 Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
148 for (; it != itend; ++it) {
149 shapesSet.insert(Functions0D::getShapeF0D(it));
150 }
151 shapesVector.insert<set<ViewShape *>::iterator>(
152 shapesVector.begin(), shapesSet.begin(), shapesSet.end());
153 }
154 result = shapesVector;
155 return 0;
156}
157
159{
160 vector<ViewShape *> shapesVector;
161 set<ViewShape *> shapesSet;
162 ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
163 if (ve) {
164 result = ve->occluders();
165 }
166 else {
167 Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
168 for (; it != itend; ++it) {
169 Functions0D::getOccludersF0D(it, shapesSet);
170 }
171 shapesVector.insert(shapesVector.begin(), shapesSet.begin(), shapesSet.end());
172 result = shapesVector;
173 }
174 return 0;
175}
176
178{
179 vector<ViewShape *> shapesVector;
180 set<ViewShape *> shapesSet;
181 ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
182 if (ve) {
183 ViewShape *aShape = ve->aShape();
184 if (aShape) {
185 shapesVector.push_back(aShape);
186 }
187 }
188 else {
189 Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
190 for (; it != itend; ++it) {
191 shapesSet.insert(Functions0D::getOccludeeF0D(it));
192 }
193 shapesVector.insert<set<ViewShape *>::iterator>(
194 shapesVector.begin(), shapesSet.begin(), shapesSet.end());
195 }
196 result = shapesVector;
197 return 0;
198}
199
200// Internal
202
203void getOccludeeF1D(Interface1D &inter, set<ViewShape *> &oShapes)
204{
205 ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
206 if (ve) {
207 ViewShape *aShape = ve->aShape();
208 if (aShape == nullptr) {
209 oShapes.insert((ViewShape *)nullptr);
210 return;
211 }
212 oShapes.insert(aShape);
213 }
214 else {
215 Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
216 for (; it != itend; ++it) {
217 oShapes.insert(Functions0D::getOccludeeF0D(it));
218 }
219 }
220}
221
222void getOccludersF1D(Interface1D &inter, set<ViewShape *> &oShapes)
223{
224 ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
225 if (ve) {
226 vector<ViewShape *> &occluders = ve->occluders();
227 oShapes.insert<vector<ViewShape *>::iterator>(occluders.begin(), occluders.end());
228 }
229 else {
230 Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
231 for (; it != itend; ++it) {
232 set<ViewShape *> shapes;
234 for (set<ViewShape *>::iterator s = shapes.begin(), send = shapes.end(); s != send; ++s) {
235 oShapes.insert(*s);
236 }
237 }
238 }
239}
240
241void getShapeF1D(Interface1D &inter, set<ViewShape *> &oShapes)
242{
243 ViewEdge *ve = dynamic_cast<ViewEdge *>(&inter);
244 if (ve) {
245 oShapes.insert(ve->viewShape());
246 }
247 else {
248 Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
249 for (; it != itend; ++it) {
250 oShapes.insert(Functions0D::getShapeF0D(it));
251 }
252 }
253}
254
255} // namespace Freestyle::Functions1D
Functions taking 1D input.
const int qi() const
Definition Silhouette.h:872
Vec3r orientation2d() const
Definition Silhouette.h:910
int operator()(Interface1D &inter)
int operator()(Interface1D &inter)
int operator()(Interface1D &inter)
int operator()(Interface1D &inter)
int operator()(Interface1D &inter)
virtual Interface0DIterator verticesEnd()
virtual Interface0DIterator verticesBegin()
void setTimeStamp(uint iTimeStamp)
uint getTimeStamp() const
Definition TimeStamp.h:27
static TimeStamp * instance()
Definition TimeStamp.h:22
int qi() const
Definition ViewMap.h:1280
ViewShape * aShape()
Definition ViewMap.h:1095
uint getChainingTimeStamp()
Definition ViewMap.h:1110
virtual Nature::EdgeNature getNature() const
Definition ViewMap.h:910
ViewShape * viewShape()
Definition ViewMap.h:1087
vector< ViewShape * > & occluders()
Definition ViewMap.h:1125
void setChainingTimeStamp(uint ts)
Definition ViewMap.h:1199
ViewShape * getShapeF0D(Interface0DIterator &it)
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:22
static const EdgeNature NO_FEATURE
Definition Nature.h:38
ushort EdgeNature
Definition Nature.h:36
T integrate(UnaryFunction0D< T > &fun, Interface0DIterator it, Interface0DIterator it_end, IntegrationType integration_type=MEAN)
Definition Interface1D.h:75