PeriDyno 1.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Curve.cpp
Go to the documentation of this file.
1#include "Vector/Vector3D.h"
2#include "Vector/Vector2D.h"
3
4#include "Curve.h"
5
6namespace dyno {
7
9 {
10
11 }
12
13
14 Curve::Curve(const Curve& curve)
15 {
16
17 this->mCoord = curve.mCoord;
18
19 this->mFinalCoord = curve.mFinalCoord;
20 this->Originalcoord = curve.Originalcoord;
22
23 this->mBezierPoint = curve.mBezierPoint;
24 this->mResamplePoint = curve.mResamplePoint;
25 this->myHandlePoint = curve.myHandlePoint;
26
27 this->mLengthArray = curve.mLengthArray;
29
30 this->mInterpMode = curve.mInterpMode;
31
32 this->remapRange[8] = curve.mInterpMode;// "MinX","MinY","MaxX","MaxY"
33
34 this->lockSize = curve.lockSize;
36
37 this->useSquard = curve.useSquard;
38 this->curveClose = curve.curveClose;
39 this->resample = curve.resample;
40
41 this->useColseButton = curve.useColseButton;
42 this->useSquardButton = curve.useSquardButton;
43
44 this->Spacing = curve.Spacing;
45
46 this->NminX = curve.NminX;
47 this->NmaxX = curve.NmaxX;
48 this->mNewMinY = curve.mNewMinY;
49 this->NmaxY = curve.NmaxY;
50
51 this->segment = curve.segment;
53
54 }
55
56 // Update FinalCoord
58 {
59
60 mFinalCoord.clear();
61
62 //���ʹ�ñ�������ֵ
64 {
65 if (mCoord.size() >= 2)
66 {
68 }
69 if (resample)
70 {
71 std::vector<Coord2D> myBezierPoint_H;
72 updateResampleBezierCurve(myBezierPoint_H);
73 resamplePointFromLine(myBezierPoint_H);
74
75 mFinalCoord.assign(mResamplePoint.begin(), mResamplePoint.end());
76 }
77
78 }
79 //���ʹ�����Բ�ֵ
81 {
82 if (resample)
83 {
84 if (mCoord.size() >= 2)
85 {
86
88 }
89 mFinalCoord.assign(mResamplePoint.begin(), mResamplePoint.end());
90 }
91 else
92 {
93 mFinalCoord.assign(mCoord.begin(), mCoord.end());
94 }
95 }
96
97
98 for (size_t i = 0; i < mFinalCoord.size(); i++)
99 {
100 mFinalCoord[i].x = (NmaxX - NminX) * mFinalCoord[i].x + NminX;
102 }
103
104
105 }
106
107 //C++ Edit
108
109
110
111
112
113 // C++ Bezier ��ֵBezier����
114
115
116
117
118
119
120 void Curve::updateResampleBezierCurve(std::vector<Coord2D>& myBezierPoint_H)
121 {
122 float temp = segment;
124 myBezierPoint_H.clear();
125
126 int n = mCoord.size();
127 int bn = myHandlePoint.size();
128
129 //����ֱ���Ŀ���ԣ����¹����������ֱ�
130 if (bn != 2 * n)
131 {
133 }
134
135 //����ÿ���߶Σ����ա�F�㡢F���ֱ�2��E���ֱ�1��E�㡱 ��ֵ���������ߵ�
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];
142 updateBezierPointToBezierSet(p0, p1, p2, p3, myBezierPoint_H);
143 }
144 //������߱պϣ������γ��������Ρ��򽫵�һ���㡢���һ���㰴�������߼����� ��ֵ���������ߵ�
145 if (curveClose && n >= 3)
146 {
147 Coord2D p0 = mCoord[n - 1];
148 Coord2D p1 = myHandlePoint[bn - 1];
149 Coord2D p2 = myHandlePoint[0];
150 Coord2D p3 = mCoord[0];
151 updateBezierPointToBezierSet(p0, p1, p2, p3, myBezierPoint_H);
152 }
153 //������߱պ�
154 if (curveClose)
155 {
156 if (mCoord.size())
157 {
158 myBezierPoint_H.push_back(mCoord[0]);
159 }
160 }
161 //������߲��պϣ������һ���㷵��
162 else
163 {
164 if (mCoord.size())
165 {
166 myBezierPoint_H.push_back(mCoord[mCoord.size() - 1]);
167 }
168 }
169
170 buildSegMent_Length_Map(myBezierPoint_H);
171
172 segment = temp;
173 }
174
175
176
177
178 //bezier point
179
180
181
182
183
184 //widget to field;
185 //void Curve::addItemMyCoord(float x, float y)
186 //{
187 // Coord2D s;
188 // s.set(x, y);
189 // MyCoord.push_back(s);
190 //}
191
192
193
194
195
196
197
198
199
200
201
202
203 //template<typename TDataType>
204 //std::shared_ptr<PointSet<DataType3f>> getPoints()
205 //{
206 // int pointSize = this->getPointSize();
207 // PointSet<TDataType> mPointSet;
208 // Coord Location;
209 // for (size_t i = 0; i < pointSize; i++)
210 // {
211 // Location = Coord(floatCoordArray[i].x, floatCoordArray[i].y, 0);
212 // vertices.push_back(Location);
213 // }
214 // pointSet.setPoints(vertices);
215
216 //}
217}
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
void updateResampleBezierCurve(std::vector< Coord2D > &myBezierPoint_H)
Resample Bezier curve.
Definition Curve.cpp:120
void UpdateFieldFinalCoord() override
Updating the data of a Field.
Definition Curve.cpp:57
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25