diff --git a/src/canvas_modes.cpp b/src/canvas_modes.cpp index aca50ee..ceebf7e 100644 --- a/src/canvas_modes.cpp +++ b/src/canvas_modes.cpp @@ -625,7 +625,7 @@ void CanvasModeMaskLine::leave() std::vector points; for (int i = 0; i < (int)m_points2d.size(); i++) points.emplace_back(m_points2d[i]); - auto v = canvas->triangulate(points); + auto v = canvas->triangulate(poly_remove_duplicate(points)); canvas->project2Dpoints(v); LOG("%d points", (int)v.size()); @@ -698,6 +698,8 @@ void CanvasModeMaskLine::on_MouseEvent(MouseEvent* me, glm::vec2& loc) { if (m_dragging) { + if (glm::distance(m_points2d.front(), loc) < 10) + loc = m_points2d.front(); m_points.back().pos = glm::vec4(loc, 0, 1); m_points2d.back() = loc; m_shape.update_vertices(m_points.data(), (int)m_points.size()); @@ -725,7 +727,7 @@ void CanvasModeMaskLine::on_MouseEvent(MouseEvent* me, glm::vec2& loc) void CanvasModeMaskLine::on_Draw(const glm::mat4& ortho, const glm::mat4& proj, const glm::mat4& camera) { - if (m_points.size() > 3) + if (m_points.size() > 1) { if (m_active_tool) {