Blender  V3.3
AdvancedFunctions1D.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
8 #include "AdvancedFunctions1D.h"
9 #include "Canvas.h"
10 
11 #include "../view_map/SteerableViewMap.h"
12 
14 
16 {
18  Interface0DIterator it = inter.pointsBegin(_sampling);
19  Interface0DIterator itnext = it;
20  ++itnext;
21  FEdge *fe;
22  unsigned nSVM;
23  vector<float> values;
24 
25  while (!itnext.isEnd()) {
26  Interface0D &i0D = (*it);
27  Interface0D &i0Dnext = (*itnext);
28  fe = i0D.getFEdge(i0Dnext);
29  if (fe == nullptr) {
30  cerr << "GetSteerableViewMapDensityF1D warning: no FEdge between " << i0D.getId() << " and "
31  << i0Dnext.getId() << endl;
32  // compute the direction between these two ???
33  Vec2f dir = i0Dnext.getPoint2D() - i0D.getPoint2D();
34  nSVM = svm->getSVMNumber(dir);
35  }
36  else {
37  nSVM = svm->getSVMNumber(fe->getId().getFirst());
38  }
39  Vec2r m((i0D.getProjectedX() + i0Dnext.getProjectedX()) / 2.0,
40  (i0D.getProjectedY() + i0Dnext.getProjectedY()) / 2.0);
41  values.push_back(svm->readSteerableViewMapPixel(nSVM, _level, (int)m[0], (int)m[1]));
42  ++it;
43  ++itnext;
44  }
45 
46  float res, res_tmp;
47  vector<float>::iterator v = values.begin(), vend = values.end();
48  unsigned size = 1;
49  switch (_integration) {
50  case MIN:
51  res = *v;
52  ++v;
53  for (; v != vend; ++v) {
54  res_tmp = *v;
55  if (res_tmp < res) {
56  res = res_tmp;
57  }
58  }
59  break;
60  case MAX:
61  res = *v;
62  ++v;
63  for (; v != vend; ++v) {
64  res_tmp = *v;
65  if (res_tmp > res) {
66  res = res_tmp;
67  }
68  }
69  break;
70  case FIRST:
71  res = *v;
72  break;
73  case LAST:
74  --vend;
75  res = *vend;
76  break;
77  case MEAN:
78  default:
79  res = *v;
80  ++v;
81  for (; v != vend; ++v, ++size) {
82  res += *v;
83  }
84  res /= (size ? size : 1);
85  break;
86  }
87  result = res;
88  return 0;
89 }
90 
92 {
93  // soc unsigned size;
94  result = integrate(_fun, inter.pointsBegin(_sampling), inter.pointsEnd(_sampling), _integration);
95  return 0;
96 }
97 
99 {
100  // soc unsigned size;
101  // Id id = inter.getId(); /* UNUSED */
102  result = integrate(_fun, inter.pointsBegin(_sampling), inter.pointsEnd(_sampling), _integration);
103  return 0;
104 }
105 
107 {
108  result = integrate(
109  _func, inter.pointsBegin(_sampling), inter.pointsEnd(_sampling), _integration);
110  return 0;
111 }
112 
113 } // namespace Freestyle::Functions1D
Functions taking 1D input.
Class to define a canvas designed to draw style modules.
ATTR_WARN_UNUSED_RESULT const BMVert * v
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
SteerableViewMap * getSteerableViewMap()
Definition: Canvas.h:163
static Canvas * getInstance()
Definition: Canvas.h:55
virtual Id getId() const
Definition: Silhouette.h:483
id_type getFirst() const
Definition: Id.h:62
virtual bool isEnd() const
Definition: Interface0D.h:282
virtual real getProjectedX() const
Definition: Interface0D.cpp:41
virtual Geometry::Vec2r getPoint2D() const
Definition: Interface0D.cpp:59
virtual FEdge * getFEdge(Interface0D &)
Definition: Interface0D.cpp:65
virtual Id getId() const
Definition: Interface0D.cpp:71
virtual real getProjectedY() const
Definition: Interface0D.cpp:47
virtual Interface0DIterator pointsEnd(float t=0.0f)
Definition: Interface1D.cpp:33
virtual Interface0DIterator pointsBegin(float t=0.0f)
Definition: Interface1D.cpp:27
float readSteerableViewMapPixel(unsigned iOrientation, int iLevel, int x, int y)
unsigned getSVMNumber(Vec2f dir)
T integrate(UnaryFunction0D< T > &fun, Interface0DIterator it, Interface0DIterator it_end, IntegrationType integration_type=MEAN)
Definition: Interface1D.h:73