diff --git a/CurveTools/include/CurveTools/CPU/BSplineGenerator.hpp b/CurveTools/include/CurveTools/CPU/BSplineGenerator.hpp index 50e66aa6bb37a48b2ee3a0a9f1ee4f65240c9741..719b9d9c2e637f29e8416295e609738651baf5c6 100644 --- a/CurveTools/include/CurveTools/CPU/BSplineGenerator.hpp +++ b/CurveTools/include/CurveTools/CPU/BSplineGenerator.hpp @@ -2,8 +2,10 @@ #include "CurveGenerator.hpp" -namespace ct { - class CURVETOOLS_API BSplineGenerator : public CurveGenerator { +namespace ct +{ + class CURVETOOLS_API BSplineGenerator : public CurveGenerator + { private: CurveGenerator* m_generator; @@ -11,6 +13,6 @@ namespace ct { BSplineGenerator(CurveGenerator* generator); Point generate(const Curve& points, double u) const override; - std::vector<Point> generate(const Curve& points, const std::vector<double> & us) const override; + std::vector<Point> generate(const Curve& points, const std::vector<double>& us) const override; }; } \ No newline at end of file diff --git a/CurveTools/include/CurveTools/CPU/BezierGenerator.hpp b/CurveTools/include/CurveTools/CPU/BezierGenerator.hpp index fc7b4b70f678f7f142aaa0313f4805694c683291..4abf74b28502161c763918fab6cf629ac0df7417 100644 --- a/CurveTools/include/CurveTools/CPU/BezierGenerator.hpp +++ b/CurveTools/include/CurveTools/CPU/BezierGenerator.hpp @@ -2,12 +2,14 @@ #include "CurveGenerator.hpp" -namespace ct { - class CURVETOOLS_API BezierGenerator : public CurveGenerator { +namespace ct +{ + class CURVETOOLS_API BezierGenerator : public CurveGenerator + { public: BezierGenerator(unsigned int degree = 1); Point generate(const Curve& points, double t) const override; - std::vector<Point> generate(const Curve&, const std::vector<double> &) const override; + std::vector<Point> generate(const Curve& points, const std::vector<double>& ts) const override; }; } \ No newline at end of file diff --git a/CurveTools/include/CurveTools/CPU/CatmullRomGenerator.hpp b/CurveTools/include/CurveTools/CPU/CatmullRomGenerator.hpp index 4060a2fc67f0ddcbdccbf72616416e6cec040876..6c3a561e6d03ac9c0290eb53a78289a1fd2be240 100644 --- a/CurveTools/include/CurveTools/CPU/CatmullRomGenerator.hpp +++ b/CurveTools/include/CurveTools/CPU/CatmullRomGenerator.hpp @@ -10,6 +10,6 @@ namespace ct CatmullRomGenerator(); Point generate(const Curve& points, double t) const override; - std::vector<Point> generate(const Curve& points, const std::vector<double> & us) const override; + std::vector<Point> generate(const Curve& points, const std::vector<double>& us) const override; }; } \ No newline at end of file diff --git a/CurveTools/include/CurveTools/CPU/CurveGenerator.hpp b/CurveTools/include/CurveTools/CPU/CurveGenerator.hpp index 43c42f598d56e6d9f7c3ef579866be383849223a..502bde65144b0aa4d692cd74a543d64cceefc83d 100644 --- a/CurveTools/include/CurveTools/CPU/CurveGenerator.hpp +++ b/CurveTools/include/CurveTools/CPU/CurveGenerator.hpp @@ -5,11 +5,13 @@ #include <glm/glm.hpp> -namespace ct { +namespace ct +{ using Point = glm::dvec3; using Curve = std::vector<Point>; - class CURVETOOLS_API CurveGenerator : public Generator<Point, double> { + class CURVETOOLS_API CurveGenerator : public Generator<Point, double> + { public: CurveGenerator(uint16_t degree); diff --git a/CurveTools/include/CurveTools/CPU/HermiteGenerator.hpp b/CurveTools/include/CurveTools/CPU/HermiteGenerator.hpp index 6c4893e91d2ebd64f3ceaab75ad512c32738a25e..67ed418f0f8eadd34ff92da7cc43b8a4d1a3269e 100644 --- a/CurveTools/include/CurveTools/CPU/HermiteGenerator.hpp +++ b/CurveTools/include/CurveTools/CPU/HermiteGenerator.hpp @@ -10,7 +10,7 @@ namespace ct HermiteGenerator(); Point generate(const Curve& points, double t) const override; - std::vector<Point> generate(const Curve& points, const std::vector<double> & us) const override; + std::vector<Point> generate(const Curve& points, const std::vector<double>& us) const override; }; } \ No newline at end of file diff --git a/CurveTools/include/CurveTools/CPU/LinearGenerator.hpp b/CurveTools/include/CurveTools/CPU/LinearGenerator.hpp index a89e626e8514bd76d7a0b5066d8f96eb29faf2f0..975a090cfc397cf050b4d560342ef710f4e16c54 100644 --- a/CurveTools/include/CurveTools/CPU/LinearGenerator.hpp +++ b/CurveTools/include/CurveTools/CPU/LinearGenerator.hpp @@ -10,6 +10,6 @@ namespace ct LinearGenerator(); Point generate(const Curve& points, double t) const override; - std::vector<Point> generate(const Curve& points, const std::vector<double> & us) const override; + std::vector<Point> generate(const Curve& points, const std::vector<double>& us) const override; }; } \ No newline at end of file diff --git a/CurveTools/include/CurveTools/CPU/SmootherstepGenerator.hpp b/CurveTools/include/CurveTools/CPU/SmootherstepGenerator.hpp index 07bdf7abfc2218f54d72a79a91ea58f81be8d304..3abce86acb21030af1474b65c8f681f51979a020 100644 --- a/CurveTools/include/CurveTools/CPU/SmootherstepGenerator.hpp +++ b/CurveTools/include/CurveTools/CPU/SmootherstepGenerator.hpp @@ -10,6 +10,6 @@ namespace ct SmootherstepGenerator(); Point generate(const Curve& points, double t) const override; - std::vector<Point> generate(const Curve& points, const std::vector<double> & us) const override; + std::vector<Point> generate(const Curve& points, const std::vector<double>& us) const override; }; } \ No newline at end of file diff --git a/CurveTools/include/CurveTools/CPU/SmoothstepGenerator.hpp b/CurveTools/include/CurveTools/CPU/SmoothstepGenerator.hpp index 12dfa7c36289fcce2cc89395af1236cf941031b8..f4b06870bf38f555959ad6a3a1fc84f3c09830ba 100644 --- a/CurveTools/include/CurveTools/CPU/SmoothstepGenerator.hpp +++ b/CurveTools/include/CurveTools/CPU/SmoothstepGenerator.hpp @@ -10,6 +10,6 @@ namespace ct SmoothstepGenerator(); Point generate(const Curve& points, double t) const override; - std::vector<Point> generate(const Curve& points, const std::vector<double> & us) const override; + std::vector<Point> generate(const Curve& points, const std::vector<double>& us) const override; }; } \ No newline at end of file diff --git a/CurveTools/src/CPU/BSplineGenerator.cpp b/CurveTools/src/CPU/BSplineGenerator.cpp index ecfa90197e0b6f919788b96d4d0821dfa8716a32..96f35b38769c3e975b80b6b35eb92b6ee374d870 100644 --- a/CurveTools/src/CPU/BSplineGenerator.cpp +++ b/CurveTools/src/CPU/BSplineGenerator.cpp @@ -1,13 +1,16 @@ #include "CurveTools/CPU/BSplineGenerator.hpp" #include "CurveTools/CPU/CurveSampler.hpp" -namespace ct { +namespace ct +{ BSplineGenerator::BSplineGenerator(CurveGenerator* generator) : CurveGenerator(0), m_generator(generator) {} - Point BSplineGenerator::generate(const Curve& points, double u) const { + Point BSplineGenerator::generate(const Curve& points, double u) const + { unsigned int degree = m_generator->getDegree(); - if (points.size() < degree) { + if (points.size() < degree) + { return Point(0.0); } @@ -18,14 +21,16 @@ namespace ct { double t = std::modf(u, &k); std::vector<Point> generatorPoints(degree); - for (unsigned int i = 0; i < degree; ++i) { + for (unsigned int i = 0; i < degree; ++i) + { generatorPoints[i] = u == nbCurves ? points[static_cast<size_t>((degree - 1) * (k - 1) + i)] : points[static_cast<size_t>((degree - 1) * k + i)]; } return this->m_generator->generate(generatorPoints, t); } - std::vector<Point> BSplineGenerator::generate(const Curve& points, const std::vector<double> & us) const { + std::vector<Point> BSplineGenerator::generate(const Curve& points, const std::vector<double> & us) const + { return CurveSampler::SampleCurve(points, *this, us); } } \ No newline at end of file diff --git a/CurveTools/src/CPU/BezierGenerator.cpp b/CurveTools/src/CPU/BezierGenerator.cpp index c2b2c1e36a71059a81a31d64a174836f1ce63c9c..f6ad357bbc1593b110ec43f5010a2b479e824d39 100644 --- a/CurveTools/src/CPU/BezierGenerator.cpp +++ b/CurveTools/src/CPU/BezierGenerator.cpp @@ -1,20 +1,25 @@ #include "CurveTools/CPU/BezierGenerator.hpp" #include "CurveTools/CPU/CurveSampler.hpp" -namespace ct { +namespace ct +{ BezierGenerator::BezierGenerator(unsigned int degree) : CurveGenerator(degree) {} - Point BezierGenerator::generate(const Curve& points, double t) const { - if (points.size() < this->getDegree()) { + Point BezierGenerator::generate(const Curve& points, double t) const + { + if (points.size() < this->getDegree()) + { return Point(0.0); } std::vector<Point> currentPoints = points; - while (currentPoints.size() != 1) { + while (currentPoints.size() != 1) + { std::vector<Point> nextPoints; - for (size_t i = 0; i < currentPoints.size() - 1; ++i) { + for (size_t i = 0; i < currentPoints.size() - 1; ++i) + { Point a = currentPoints[i]; Point b = currentPoints[i + 1]; nextPoints.push_back(lerp(a, b, t)); @@ -26,7 +31,8 @@ namespace ct { return currentPoints.front(); } - std::vector<Point> BezierGenerator::generate(const Curve& points, const std::vector<double> & ts) const { + std::vector<Point> BezierGenerator::generate(const Curve& points, const std::vector<double> & ts) const + { return CurveSampler::SampleCurve(points, *this, ts); } } \ No newline at end of file diff --git a/CurveTools/src/CPU/CatmullRomGenerator.cpp b/CurveTools/src/CPU/CatmullRomGenerator.cpp index ca35e77571f7ab205eaaca4d5352a5615d5bc0b4..126ecd487ebb7e0be37b7cfdc5960295f04c1ae1 100644 --- a/CurveTools/src/CPU/CatmullRomGenerator.cpp +++ b/CurveTools/src/CPU/CatmullRomGenerator.cpp @@ -1,12 +1,15 @@ #include "CurveTools/CPU/CatmullRomGenerator.hpp" #include "CurveTools/CPU/CurveSampler.hpp" -namespace ct { +namespace ct +{ CatmullRomGenerator::CatmullRomGenerator() : CurveGenerator(4) {} - Point CatmullRomGenerator::generate(const Curve& points, double t) const { - if (points.size() < this->getDegree()) { + Point CatmullRomGenerator::generate(const Curve& points, double t) const + { + if (points.size() < this->getDegree()) + { return Point(0.0); } @@ -23,7 +26,8 @@ namespace ct { return (f1 * points[0] + f2 * points[1] + f3 * points[2] + f4 * points[3]) * 0.5; } - std::vector<Point> CatmullRomGenerator::generate(const Curve& points, const std::vector<double> & ts) const { + std::vector<Point> CatmullRomGenerator::generate(const Curve& points, const std::vector<double> & ts) const + { return CurveSampler::SampleCurve(points, *this, ts); } } \ No newline at end of file diff --git a/CurveTools/src/CPU/CurveGenerator.cpp b/CurveTools/src/CPU/CurveGenerator.cpp index 86a0505788786ad06fd6566227cc8521fca263e5..deca6f1481377c0596e2030b1e76c9bbf947fe2e 100644 --- a/CurveTools/src/CPU/CurveGenerator.cpp +++ b/CurveTools/src/CPU/CurveGenerator.cpp @@ -1,23 +1,27 @@ #include "CurveTools/CPU/CurveGenerator.hpp" -namespace ct { +namespace ct +{ CurveGenerator::CurveGenerator(uint16_t degree) : Generator(degree) {} - Point CurveGenerator::lerp(const Point& a, const Point& b, double t) { + Point CurveGenerator::lerp(const Point& a, const Point& b, double t) + { t = glm::clamp(t, 0.0, 1.0); return (1.0f - t) * a + t * b; } - Point CurveGenerator::smoothstep(const Point& a, const Point& b, double t) { + Point CurveGenerator::smoothstep(const Point& a, const Point& b, double t) + { t = glm::clamp(t, 0.0, 1.0); t = t * t * (3.0 - 2.0 * t); return lerp(a, b, t); } - Point CurveGenerator::smootherstep(const Point& a, const Point& b, double t) { + Point CurveGenerator::smootherstep(const Point& a, const Point& b, double t) + { t = glm::clamp(t, 0.0, 1.0); t = t * t * t * (6.0 * t * t - 15.0 * t + 10.0); diff --git a/CurveTools/src/CPU/CurveSampler.cpp b/CurveTools/src/CPU/CurveSampler.cpp index 37809a6bbe2d4e15efee20c22dd9a7211612aa50..4027e92cdcee3a1687cd724f2aec719161e82818 100644 --- a/CurveTools/src/CPU/CurveSampler.cpp +++ b/CurveTools/src/CPU/CurveSampler.cpp @@ -1,7 +1,9 @@ #include "CurveTools/CPU/CurveSampler.hpp" -namespace ct { - std::vector<double> CurveSampler::generateSampleValues(unsigned int count, double min, double max) { +namespace ct +{ + std::vector<double> CurveSampler::generateSampleValues(unsigned int count, double min, double max) + { std::vector<double> sampleValues(count); double step = (max - min) / static_cast<double>(count - 1); @@ -12,7 +14,8 @@ namespace ct { return sampleValues; } - Curve CurveSampler::SampleCurve(const Curve& curve, const CurveGenerator& generator, const std::vector<double>& t) { + Curve CurveSampler::SampleCurve(const Curve& curve, const CurveGenerator& generator, const std::vector<double>& t) + { ct::Curve sampledCurve(t.size()); for (unsigned int i = 0; i < t.size(); ++i) diff --git a/CurveTools/src/CPU/HermiteGenerator.cpp b/CurveTools/src/CPU/HermiteGenerator.cpp index c006e281707e918f9798a5ef9032428410fd66f7..55bd325cc5f73dc147cb7ec1f8c01f4e9ef0a147 100644 --- a/CurveTools/src/CPU/HermiteGenerator.cpp +++ b/CurveTools/src/CPU/HermiteGenerator.cpp @@ -1,11 +1,13 @@ #include "CurveTools/CPU/HermiteGenerator.hpp" #include "CurveTools/CPU/CurveSampler.hpp" -namespace ct { +namespace ct +{ HermiteGenerator::HermiteGenerator() : CurveGenerator(4) {} - Point HermiteGenerator::generate(const Curve& points, double t) const { + Point HermiteGenerator::generate(const Curve& points, double t) const + { if (points.size() < this->getDegree()) { return Point(0.0); } @@ -23,7 +25,8 @@ namespace ct { return f1 * points[0] + f2 * points[1] + f3 * points[3] + f4 * points[2]; } - std::vector<Point> HermiteGenerator::generate(const Curve& points, const std::vector<double> & ts) const { + std::vector<Point> HermiteGenerator::generate(const Curve& points, const std::vector<double> & ts) const + { return CurveSampler::SampleCurve(points, *this, ts); } } \ No newline at end of file diff --git a/CurveTools/src/CPU/LinearGenerator.cpp b/CurveTools/src/CPU/LinearGenerator.cpp index e3f9488e4b692893ad423a1b8309174b8d650367..4d3f4eac013fdafb12f2fa339708612db091414c 100644 --- a/CurveTools/src/CPU/LinearGenerator.cpp +++ b/CurveTools/src/CPU/LinearGenerator.cpp @@ -1,11 +1,13 @@ #include "CurveTools/CPU/LinearGenerator.hpp" #include "CurveTools/CPU/CurveSampler.hpp" -namespace ct { +namespace ct +{ LinearGenerator::LinearGenerator() : CurveGenerator(2) {} - Point LinearGenerator::generate(const Curve& points, double t) const { + Point LinearGenerator::generate(const Curve& points, double t) const + { if (points.size() < this->getDegree()) { return Point(0.0); } @@ -13,7 +15,8 @@ namespace ct { return lerp(points[0], points[1], t); } - std::vector<Point> LinearGenerator::generate(const Curve& points, const std::vector<double> & ts) const { + std::vector<Point> LinearGenerator::generate(const Curve& points, const std::vector<double> & ts) const + { return CurveSampler::SampleCurve(points, *this, ts); } } \ No newline at end of file diff --git a/CurveTools/src/CPU/SmootherstepGenerator.cpp b/CurveTools/src/CPU/SmootherstepGenerator.cpp index 70c7a3ffb7d072d8b410fbdd3cd44a1e139fd891..43778b6c1dc47f804b5e6751b62286ec2d021705 100644 --- a/CurveTools/src/CPU/SmootherstepGenerator.cpp +++ b/CurveTools/src/CPU/SmootherstepGenerator.cpp @@ -1,11 +1,13 @@ #include "CurveTools/CPU/SmootherstepGenerator.hpp" #include "CurveTools/CPU/CurveSampler.hpp" -namespace ct { +namespace ct +{ SmootherstepGenerator::SmootherstepGenerator() : CurveGenerator(2) {} - Point SmootherstepGenerator::generate(const Curve& points, double t) const { + Point SmootherstepGenerator::generate(const Curve& points, double t) const + { if (points.size() < this->getDegree()) { return Point(0.0); } @@ -13,7 +15,8 @@ namespace ct { return smootherstep(points[0], points[1], t); } - std::vector<Point> SmootherstepGenerator::generate(const Curve& points, const std::vector<double> & ts) const { + std::vector<Point> SmootherstepGenerator::generate(const Curve& points, const std::vector<double> & ts) const + { return CurveSampler::SampleCurve(points, *this, ts); } } \ No newline at end of file diff --git a/CurveTools/src/CPU/SmoothstepGenerator.cpp b/CurveTools/src/CPU/SmoothstepGenerator.cpp index 58d6026fc896e2430c044f57fc0a9d452850ef66..0296a79f1098f279358b698ec10da1a1bbde81a7 100644 --- a/CurveTools/src/CPU/SmoothstepGenerator.cpp +++ b/CurveTools/src/CPU/SmoothstepGenerator.cpp @@ -1,19 +1,23 @@ #include "CurveTools/CPU/SmoothstepGenerator.hpp" #include "CurveTools/CPU/CurveSampler.hpp" -namespace ct { +namespace ct +{ SmoothstepGenerator::SmoothstepGenerator() : CurveGenerator(2) {} - Point SmoothstepGenerator::generate(const Curve& points, double t) const { - if (points.size() < this->getDegree()) { + Point SmoothstepGenerator::generate(const Curve& points, double t) const + { + if (points.size() < this->getDegree()) + { return Point(0.0); } return smoothstep(points[0], points[1], t); } - std::vector<Point> SmoothstepGenerator::generate(const Curve& points, const std::vector<double> & ts) const { + std::vector<Point> SmoothstepGenerator::generate(const Curve& points, const std::vector<double> & ts) const + { return CurveSampler::SampleCurve(points, *this, ts); } } \ No newline at end of file