From c66edd9b98fe5be8b7e80235c7fd0bd5f8d41385 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Tue, 26 Feb 2019 16:48:13 +0100 Subject: [PATCH] reset direction smoothing when angle is big --- src/brush.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/brush.cpp b/src/brush.cpp index 157c4c8..6c6152e 100644 --- a/src/brush.cpp +++ b/src/brush.cpp @@ -188,15 +188,18 @@ std::vector Stroke::compute_samples() { glm::vec2 v = glm::normalize(m_keypoints[m_last_kp].pos - m_keypoints[m_dir_kp].pos); m_dir_angle = -glm::orientedAngle(v, m_dir_ref); - if (m_brush->m_tip_angle_smooth > 0 && (glm::abs(m_dir_angle) > glm::pi() / 2.f || !m_dir_valid)) + if (m_brush->m_tip_angle_smooth > 0 && (glm::abs(m_dir_angle) > glm::radians(30.f) || !m_dir_valid)) { - //if (glm::abs(m_dir_angle) > glm::radians(110.f)) - // LOG("BIG ANGLE"); + if (glm::abs(m_dir_angle) > glm::radians(100.f)) + { + //LOG("BIG ANGLE"); + m_direction.clear(); + } + auto old_dir = m_dir_ref; m_dir_ref = v; m_dir_ref_angle = -glm::orientedAngle(m_dir_ref, { 1, 0 }); m_dir_angle = 0; - //m_direction.clear(); auto angle_diff = -glm::orientedAngle(m_dir_ref, old_dir); for (int i = 0; i < m_direction.m_count; i++) m_direction.m_vec[i] -= angle_diff;