diff --git a/src/brush.cpp b/src/brush.cpp index 9168f6d..1c752ac 100644 --- a/src/brush.cpp +++ b/src/brush.cpp @@ -53,7 +53,7 @@ void Stroke::randomize_prng() std::vector Stroke::compute_samples() { - if (m_keypoints.empty()) return {}; + if (m_keypoints.size() < 2) return {}; int nsamples = (int)glm::floor((m_keypoints.back().dist - m_dist) / m_step); std::vector samples; samples.reserve(nsamples); // preallocate the estimate number of samples @@ -62,7 +62,7 @@ std::vector Stroke::compute_samples() m_dist += m_step; m_dir_dist += m_step; int old_kp = m_last_kp; - while (m_dist > m_keypoints[m_last_kp + 1].dist) + while (m_dist > m_keypoints[m_last_kp + 1].dist && m_last_kp < m_keypoints.size()) m_last_kp++; const auto& A = m_keypoints[old_kp]; const auto& B = m_keypoints[m_last_kp == old_kp ? m_last_kp + 1 : m_last_kp]; // NOTE: this should be true when while is true @@ -127,6 +127,14 @@ std::vector Stroke::compute_samples() } else { + static bool invalid_logged = false; + if (!invalid_logged) + { + for (auto const& p : m_keypoints) + LOG("point dist %f pos %f %f %f", p.dist, p.pos.x, p.pos.y, p.pos.z); + invalid_logged = true; + } + LOG("A.dist %f B.dist %f", A.dist, B.dist); LOG("Invalid sample"); } } @@ -134,7 +142,7 @@ std::vector Stroke::compute_samples() } bool Stroke::has_sample() { - return m_keypoints.empty() ? false : // no keypoints + return m_keypoints.size() < 2 ? false : // no keypoints (m_keypoints.back().dist > (m_dist + m_step)); // check if next kp is closer than spacing } void Stroke::reset(bool clear_keypoints /*= false*/)