PeriDyno 1.0.0
Loading...
Searching...
No Matches
Ramp.cpp
Go to the documentation of this file.
1#include "Ramp.h"
2
3namespace dyno {
4
6 {
7
8 }
9
11 {
12 Dirmode= dir;
13 useSquard = false;
14 }
15
16 Ramp::Ramp(const Ramp& ramp)
17 {
18 useSquard = false;
19 this->Dirmode = ramp.Dirmode;
20 //this->Bordermode = ramp.Bordermode;
21 this->mCoord = ramp.mCoord;
22 this->FE_MyCoord = ramp.FE_MyCoord;
23 this->FE_HandleCoord = ramp.FE_HandleCoord;
24 this->mFinalCoord = ramp.mFinalCoord;
25 this->Originalcoord = ramp.Originalcoord;
27
28 this->mBezierPoint = ramp.mBezierPoint;
30 this->mResamplePoint = ramp.mResamplePoint;
31 this->myHandlePoint = ramp.myHandlePoint;
32
33 this->mLengthArray = ramp.mLengthArray;
35
36 this->mInterpMode = ramp.mInterpMode;
37
38 this->remapRange[8] = ramp.mInterpMode;// "MinX","MinY","MaxX","MaxY"
39
40 this->lockSize = ramp.lockSize;
42
43 this->useSquard = ramp.useSquard;
44 this->curveClose = ramp.curveClose;
45 this->resample = ramp.resample;
46
47 this->useColseButton = ramp.useColseButton;
49
50 this->Spacing = ramp.Spacing;
51
52 this->NminX = ramp.NminX;
53 this->NmaxX = ramp.NmaxX;
54 this->mNewMinY = ramp.mNewMinY;
55 this->NmaxY = ramp.NmaxY;
56
57 this->segment = ramp.segment;
59
60 this->xLess = ramp.xLess;
61 this->xGreater = ramp.xGreater;
62 this->yLess = ramp.yLess;
63 this->yGreater = ramp.yGreater;
64
65 }
66
67 float Ramp::getCurveValueByX(float inputX)
68 {
69 if (mFinalCoord.size())
70 {
71 int l = mFinalCoord.size();
72 for (size_t i = 0; i < l;i ++)
73 {
74 xLess = (mFinalCoord[i].x > inputX) ? xLess : mFinalCoord[i].x;
75 yLess = (mFinalCoord[i].x > inputX) ? yLess : mFinalCoord[i].y;
76
77 xGreater = (mFinalCoord[l - i - 1].x < inputX) ? xGreater : mFinalCoord[l - i - 1].x;
78 yGreater = (mFinalCoord[l - i - 1].x < inputX) ? yGreater : mFinalCoord[l - i - 1].y;
79 }
80 if (xGreater !=xLess)
81 {
82 float pr = (inputX - xLess) / (xGreater - xLess);
83 float f = pr * (yGreater - yLess) + yLess;
84
85 return f;
86 }
87 else
88 {
89 return yGreater;
90 }
91 }
92 return -1;
93 }
94
95
96
97
98
99
100 // C++ Bezier
102 {
104
105 if (resample)
106 {
108 {
111 }
112 else
113 {
115 }
116
117 }
118 }
119
120
121
123 {
124 float temp = segment;
126 myBezierPoint_H.clear();
127
128 int n = mCoord.size();
129 int bn = myHandlePoint.size();
130
131 if (bn != 2 * n)
132 {
134 }
135
136 for (int i = 0; i < n - 1; i++)
137 {
138 Coord2D p0 = mCoord[i];
139 Coord2D p1 = myHandlePoint[2 * i + 1];
140 Coord2D p2 = myHandlePoint[2 * (i + 1)];
141 Coord2D p3 = mCoord[i + 1];
143 }
144 if (curveClose && n >= 3)
145 {
146 Coord2D p0 = mCoord[n - 1];
147 Coord2D p1 = myHandlePoint[bn - 1];
148 Coord2D p2 = myHandlePoint[0];
149 Coord2D p3 = mCoord[0];
151 }
152 if (curveClose)
153 {
154 if (mCoord.size())
155 {
156 myBezierPoint_H.push_back(mCoord[0]);
157 }
158 }
159 else
160 {
161 if (mCoord.size())
162 {
163 myBezierPoint_H.push_back(mCoord[mCoord.size() - 1]);
164 }
165 }
166
168
169 segment = temp;
170 }
171
172
173
174
175
176 //bezier point
177
178 double Ramp::calculateLengthForPointSet(std::vector<Coord2D> BezierPtSet)
179 {
180 double length = 0;
181 int n = BezierPtSet.size();
182 for (size_t k = 0; k < n - 1; k++)
183 {
184 int e = k ;
185 int f = k + 1;
186 length += sqrt(std::pow((BezierPtSet[f].x - BezierPtSet[e].x), 2) + std::pow((BezierPtSet[f].y - BezierPtSet[e].y), 2));
187 }
188 return length;
189 }
190
191
192
193 //widget to field;
194
195
196
197
198
199
200
202 {
203
204 std::vector<Coord2D> tempHandle;
205 tempHandle.assign(myHandlePoint.begin(), myHandlePoint.end());
206 FE_HandleCoord.clear();
207 FE_MyCoord.clear();
208
209 Coord2D Cfirst(-1, -1, -1);
210 Coord2D Cend(-1, -1, -1);
211 Coord2D F1(-1, -1, -1);
212 Coord2D F2(-1, -1, -1);
213 Coord2D E1(-1, -1, -1);
214 Coord2D E2(-1, -1, -1);
215
216 for (int i = 0; i < mCoord.size(); i++)
217 {
218 if (mCoord[i].x == 0)
219 {
220 Cfirst = mCoord[i];
221 F1 = tempHandle[2 * i];
222 F2 = tempHandle[2 * i + 1];
223 }
224 else if (mCoord[i].x == 1)
225 {
226 Cend = mCoord[i];
227 E1 = tempHandle[2 * i];
228 E2 = tempHandle[2 * i + 1];
229 }
230 else
231 {
232 FE_MyCoord.push_back(mCoord[i]);
233 FE_HandleCoord.push_back(tempHandle[2 * i]);
234 FE_HandleCoord.push_back(tempHandle[2 * i + 1]);
235 }
236 }
237
238
239 if (Cend.x != -1)
240 {
241 FE_MyCoord.insert(FE_MyCoord.begin(), Cend);
242 FE_HandleCoord.insert(FE_HandleCoord.begin(), E2);
243 FE_HandleCoord.insert(FE_HandleCoord.begin(), E1);
244 }
245 else
246 {
247 FE_MyCoord.insert(FE_MyCoord.begin(), Coord2D(1, 0.5));
248 FE_HandleCoord.insert(FE_HandleCoord.begin(), Coord2D(1, 0.5));
249 FE_HandleCoord.insert(FE_HandleCoord.begin(), Coord2D(0.9, 0.5));
250 }
251
252
253 if (Cfirst.x != -1)
254 {
255 FE_MyCoord.insert(FE_MyCoord.begin(), Cfirst);
256 FE_HandleCoord.insert(FE_HandleCoord.begin(), F2);
257 FE_HandleCoord.insert(FE_HandleCoord.begin(), F1);
258 }
259 else
260 {
261 FE_MyCoord.insert(FE_MyCoord.begin(), Coord2D(0, 0.5));
262 FE_HandleCoord.insert(FE_HandleCoord.begin(), Coord2D(0.1, 0.5));
263 FE_HandleCoord.insert(FE_HandleCoord.begin(), Coord2D(0, 0.5));
264 }
265
266
267 }
268
270 {
271
273
274
275 mFinalCoord.clear();
276
278 {
279 if (resample)
280 {
281 if (mCoord.size() >= 2)
282 {
284 }
285 mFinalCoord.assign(mResamplePoint.begin(), mResamplePoint.end());
286 }
287 else
288 {
289 mFinalCoord.assign(mBezierPoint.begin(), mBezierPoint.end());
290 }
291 }
292 else if ( !useBezierInterpolation)
293 {
294
295 if (resample)
296 {
297 if (mCoord.size() >= 2)
298 {
299
301 }
302 mFinalCoord.assign(mResamplePoint.begin(), mResamplePoint.end());
303 }
304 else
305 {
306 mFinalCoord.assign(mCoord.begin(), mCoord.end());
307 }
308 }
309
310
311 for (size_t i = 0; i < mFinalCoord.size(); i++)
312 {
313 mFinalCoord[i].x = (NmaxX - NminX) * mFinalCoord[i].x + NminX;
315 }
316
317
318 }
319}
std::vector< Coord2D > mFinalCoord
Definition Canvas.h:245
void updateResampleLinearLine()
Definition Canvas.cpp:130
std::vector< Coord2D > mResamplePoint
Definition Canvas.h:246
Canvas::Interpolation mInterpMode
Definition Canvas.h:242
std::map< float, EndPoint > length_EndPoint_Map
Definition Canvas.h:271
bool lockSize
Definition Canvas.h:260
bool resample
Definition Canvas.h:262
void rebuildHandlePoint(std::vector< Coord2D > coordSet)
Definition Canvas.cpp:205
std::vector< Coord2D > mBezierPoint
Definition Canvas.h:244
bool useBezierInterpolation
Definition Canvas.h:261
std::vector< OriginalCoord > OriginalHandlePoint
Definition Canvas.h:251
double NmaxX
Definition Canvas.h:256
double NmaxY
Definition Canvas.h:258
std::vector< Coord2D > mCoord
Definition Canvas.h:243
bool curveClose
Definition Canvas.h:263
float resampleResolution
Definition Canvas.h:269
bool useSquardButton
Definition Canvas.h:266
std::vector< double > mLengthArray
Definition Canvas.h:247
float segment
Definition Canvas.h:268
float remapRange[8]
Definition Canvas.h:253
double mNewMinY
Definition Canvas.h:257
bool useSquard
Definition Canvas.h:265
virtual void updateBezierCurve()
Definition Canvas.cpp:51
double NminX
Definition Canvas.h:255
void buildSegMent_Length_Map(std::vector< Coord2D > BezierPtSet)
Definition Canvas.cpp:255
bool useColseButton
Definition Canvas.h:264
void resamplePointFromLine(std::vector< Coord2D > pointSet)
Definition Canvas.cpp:143
void updateBezierPointToBezierSet(Coord2D p0, Coord2D p1, Coord2D p2, Coord2D p3, std::vector< Coord2D > &bezierSet)
Definition Canvas.cpp:95
float Spacing
Definition Canvas.h:267
std::vector< Coord2D > myHandlePoint
Definition Canvas.h:248
std::vector< OriginalCoord > Originalcoord
Definition Canvas.h:250
float xGreater
Definition Ramp.h:61
float getCurveValueByX(float inputX)
Get the value value"Y" of the curve by value"X" .
Definition Ramp.cpp:67
std::vector< Coord2D > FE_MyCoord
Definition Ramp.h:55
void updateBezierCurve() override
Update the data of the Bezier curve points.
Definition Ramp.cpp:101
void updateResampleBezierCurve()
Resample Bezier curve.
Definition Ramp.cpp:122
float xLess
Definition Ramp.h:60
float yGreater
Definition Ramp.h:63
std::vector< Coord2D > FE_HandleCoord
Definition Ramp.h:56
double calculateLengthForPointSet(std::vector< Coord2D > BezierPtSet)
Definition Ramp.cpp:178
void borderCloseResort()
Reordering points on canvas boundaries.
Definition Ramp.cpp:201
Direction Dirmode
Definition Ramp.h:50
float yLess
Definition Ramp.h:62
std::vector< Coord2D > myBezierPoint_H
Definition Ramp.h:53
void UpdateFieldFinalCoord() override
Updating the data of a Field.
Definition Ramp.cpp:269
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
DYN_FUNC Complex< Real > sqrt(const Complex< Real > &)
Definition Complex.inl:321