diff --git a/include/Helpers/ConvertVec.hpp b/include/Helpers/ConvertVec.hpp index 4259f2b..f16cece 100644 --- a/include/Helpers/ConvertVec.hpp +++ b/include/Helpers/ConvertVec.hpp @@ -12,6 +12,10 @@ template S convert_vec2(const T& t) { return S{t[0], t[1]}; } +template S convert_vec2_narrow_double_to_float(const T& t) { + return S{static_cast(t[0]), static_cast(t[1])}; +} + template S convert_vec3(const T& t) { return S{t[0], t[1], t[2]}; } diff --git a/src/CanvasComponents/BrushStrokeCanvasComponent.cpp b/src/CanvasComponents/BrushStrokeCanvasComponent.cpp index cac1279..b247204 100644 --- a/src/CanvasComponents/BrushStrokeCanvasComponent.cpp +++ b/src/CanvasComponents/BrushStrokeCanvasComponent.cpp @@ -4,6 +4,7 @@ #include #include #include "Eigen/Core" +#include "Helpers/ConvertVec.hpp" #include "Helpers/MathExtras.hpp" #include "../TimePoint.hpp" #include @@ -333,7 +334,7 @@ void BrushStrokeCanvasComponent::create_triangles(const std::function circlePoints = gen_circle_points(pointsN.front().pos, pointsN.front().width / 2.0, CIRCLE_SMOOTHNESS); for(size_t i = 0; i < circlePoints.size(); i++) { if(passTriangleFunc(pointsN.front().pos, circlePoints[i], circlePoints[(i + 1) % circlePoints.size()])) return; - topPoints.emplace_back(convert_vec2(circlePoints[i])); + topPoints.emplace_back(convert_vec2_narrow_double_to_float(circlePoints[i])); } } @@ -358,9 +359,9 @@ void BrushStrokeCanvasComponent::create_triangles(const std::function(vertArray[0])); + topPoints.emplace_back(convert_vec2_narrow_double_to_float(vertArray[0])); vertArray[1] = points[pointsBegin].pos - perpPrev * points[pointsBegin].width * 0.5; - bottomPoints.emplace_back(convert_vec2(vertArray[1])); + bottomPoints.emplace_back(convert_vec2_narrow_double_to_float(vertArray[1])); newIndex = 2; if(d.hasRoundCaps && pointsBegin == 0) { @@ -372,9 +373,9 @@ void BrushStrokeCanvasComponent::create_triangles(const std::function(arcPoints[i])); + bottomPoints.emplace_back(convert_vec2_narrow_double_to_float(arcPoints[i])); } - bottomPoints.emplace_back(convert_vec2(arcPoints.back())); + bottomPoints.emplace_back(convert_vec2_narrow_double_to_float(arcPoints.back())); } for(size_t j = pointsBegin + 1; j < pointsEnd; j++) { @@ -396,12 +397,12 @@ void BrushStrokeCanvasComponent::create_triangles(const std::function(vertArray[newIndex])); + topPoints.emplace_back(convert_vec2_narrow_double_to_float(vertArray[newIndex])); newIndex = (newIndex + 1) % 3; if(passTriangleFunc(vertArray[0], vertArray[1], vertArray[2])) return; vertArray[newIndex] = points[j].pos - perp * 0.5 * points[j].width; - bottomPoints.emplace_back(convert_vec2(vertArray[newIndex])); + bottomPoints.emplace_back(convert_vec2_narrow_double_to_float(vertArray[newIndex])); newIndex = (newIndex + 1) % 3; if(passTriangleFunc(vertArray[0], vertArray[1], vertArray[2])) return; @@ -414,12 +415,12 @@ void BrushStrokeCanvasComponent::create_triangles(const std::function(vertArray[newIndex])); + topPoints.emplace_back(convert_vec2_narrow_double_to_float(vertArray[newIndex])); newIndex = (newIndex + 1) % 3; if(passTriangleFunc(vertArray[0], vertArray[1], vertArray[2])) return; vertArray[newIndex] = points[pointsEnd].pos - perp * points[pointsEnd].width * 0.5; - bottomPoints.emplace_back(convert_vec2(vertArray[newIndex])); + bottomPoints.emplace_back(convert_vec2_narrow_double_to_float(vertArray[newIndex])); newIndex = (newIndex + 1) % 3; if(passTriangleFunc(vertArray[0], vertArray[1], vertArray[2])) return; @@ -439,7 +440,7 @@ void BrushStrokeCanvasComponent::create_triangles(const std::function(wedgeP1) == topPoints.back(); + bool isTopWedge = convert_vec2_narrow_double_to_float(wedgeP1) == topPoints.back(); double arcRadius; @@ -462,14 +463,14 @@ void BrushStrokeCanvasComponent::create_triangles(const std::function(arcPoints[i])); + topPoints.emplace_back(convert_vec2_narrow_double_to_float(arcPoints[i])); else - bottomPoints.emplace_back(convert_vec2(arcPoints[i])); + bottomPoints.emplace_back(convert_vec2_narrow_double_to_float(arcPoints[i])); } if(isTopWedge) - topPoints.emplace_back(convert_vec2(arcPoints.back())); + topPoints.emplace_back(convert_vec2_narrow_double_to_float(arcPoints.back())); else - bottomPoints.emplace_back(convert_vec2(arcPoints.back())); + bottomPoints.emplace_back(convert_vec2_narrow_double_to_float(arcPoints.back())); } else if(d.hasRoundCaps) { // It's the last point, cap it off Vector2d arcDirStart = (vertArray[(newIndex + 1) % 3] - points.back().pos).normalized(); @@ -480,9 +481,9 @@ void BrushStrokeCanvasComponent::create_triangles(const std::function(arcPoints[i])); + topPoints.emplace_back(convert_vec2_narrow_double_to_float(arcPoints[i])); } - topPoints.emplace_back(convert_vec2(arcPoints.back())); + topPoints.emplace_back(convert_vec2_narrow_double_to_float(arcPoints.back())); } }