PeriDyno 1.2.1
Loading...
Searching...
No Matches
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->mUserCoord = curve.mUserCoord;
18
19 this->mFinalCoord = curve.mFinalCoord;
20
21 this->mBezierPoint = curve.mBezierPoint;
22 this->mResamplePoint = curve.mResamplePoint;
23 this->mUserHandle = curve.mUserHandle;
24
25 this->mLengthArray = curve.mLengthArray;
27
28 this->mInterpMode = curve.mInterpMode;
29
30
31 this->mClose = curve.mClose;
32 this->mResample = curve.mResample;
33
34 this->mSpacing = curve.mSpacing;
35
36
37 }
38
39 // Update FinalCoord
41 {
42
43 mFinalCoord.clear();
44
45 //Bezier Mode
47 {
48 if (mUserCoord.size() >= 2)
49 {
51 }
52 if (mResample)
53 {
54 std::vector<Coord2D> myBezierPoint_H;
55 updateResampleBezierCurve(myBezierPoint_H);
56 resamplePointFromLine(myBezierPoint_H);
57
58 mFinalCoord.assign(mResamplePoint.begin(), mResamplePoint.end());
59 }
60
61 }
62
63 //LinearMode
65 {
66 if (mResample)
67 {
68 if (mUserCoord.size() >= 2)
69 {
70
72 }
73 mFinalCoord.assign(mResamplePoint.begin(), mResamplePoint.end());
74 }
75 else
76 {
77 mFinalCoord.assign(mUserCoord.begin(), mUserCoord.end());
78 }
79 }
80
81 }
82
83
84
85 void Curve::updateResampleBezierCurve(std::vector<Coord2D>& myBezierPoint_H)
86 {
87
88 myBezierPoint_H.clear();
89
90 int n = mUserCoord.size();
91 int bn = mUserHandle.size();
92
93 //check handle number
94 if (bn != 2 * n)
95 {
97 }
98
99 //build bezier
100 for (int i = 0; i < n - 1; i++)
101 {
102 Coord2D p0 = mUserCoord[i];
103 Coord2D p1 = mUserHandle[2 * i + 1];
104 Coord2D p2 = mUserHandle[2 * (i + 1)];
105 Coord2D p3 = mUserCoord[i + 1];
106 updateBezierPointToBezierSet(p0, p1, p2, p3, myBezierPoint_H);
107 }
108 //close bezier
109 if (mClose && n >= 3)
110 {
111 Coord2D p0 = mUserCoord[n - 1];
112 Coord2D p1 = mUserHandle[bn - 1];
113 Coord2D p2 = mUserHandle[0];
114 Coord2D p3 = mUserCoord[0];
115 updateBezierPointToBezierSet(p0, p1, p2, p3, myBezierPoint_H);
116 }
117 if (mClose)
118 {
119 if (mUserCoord.size())
120 {
121 myBezierPoint_H.push_back(mUserCoord[0]);
122 }
123 }
124 else
125 {
126 if (mUserCoord.size())
127 {
128 myBezierPoint_H.push_back(mUserCoord[mUserCoord.size() - 1]);
129 }
130 }
131
132 buildSegMent_Length_Map(myBezierPoint_H);
133
134 }
135
136}
std::vector< Coord2D > mFinalCoord
Definition Canvas.h:228
void updateResampleLinearLine()
Definition Canvas.cpp:117
std::vector< Coord2D > mResamplePoint
Definition Canvas.h:229
std::map< float, EndPoint > mLength_EndPoint_Map
Definition Canvas.h:230
Canvas::Interpolation mInterpMode
Definition Canvas.h:219
void rebuildHandlePoint(std::vector< Coord2D > coordSet)
Definition Canvas.cpp:192
std::vector< Coord2D > mBezierPoint
Definition Canvas.h:227
float mSpacing
Definition Canvas.h:220
std::vector< Coord2D > mUserHandle
Definition Canvas.h:224
std::vector< double > mLengthArray
Definition Canvas.h:231
bool mResample
Definition Canvas.h:221
std::vector< Coord2D > mUserCoord
Definition Canvas.h:223
virtual void updateBezierCurve()
Definition Canvas.cpp:38
bool mClose
Definition Canvas.h:222
void buildSegMent_Length_Map(std::vector< Coord2D > BezierPtSet)
Definition Canvas.cpp:242
void resamplePointFromLine(std::vector< Coord2D > pointSet)
Definition Canvas.cpp:130
void updateBezierPointToBezierSet(Coord2D p0, Coord2D p1, Coord2D p2, Coord2D p3, std::vector< Coord2D > &bezierSet)
Definition Canvas.cpp:82
void updateResampleBezierCurve(std::vector< Coord2D > &myBezierPoint_H)
Resample Bezier curve.
Definition Curve.cpp:85
void UpdateFieldFinalCoord() override
Updating the data of a Field.
Definition Curve.cpp:40
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25