From cce1e8d4e321888bbdd971858107f9931f2fe95e Mon Sep 17 00:00:00 2001 From: Maire Nicolas Date: Wed, 10 Aug 2011 16:32:43 +0200 Subject: [PATCH] =?UTF-8?q?Rajout=20d'une=20option=20zigzag=20dans=20un=20?= =?UTF-8?q?des=20presets=20anim=C3=A9s.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Apps/Examples/clipping.cpp | 8 ++++--- include/Utils/clippingPresetsAnimated.h | 6 ++++- src/Utils/clippingPresetsAnimated.cpp | 30 ++++++++++++++++++++----- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/Apps/Examples/clipping.cpp b/Apps/Examples/clipping.cpp index 5f0195d0..bf275020 100644 --- a/Apps/Examples/clipping.cpp +++ b/Apps/Examples/clipping.cpp @@ -447,6 +447,7 @@ void Clipping::slot_pushButton_applyAnimatedClippingPreset() double size = (double)m_bb.maxSize()*0.1; int axis = 0; bool facing = false; + bool zigzag = false; if (inputValues(VarDbl(centerStartX - 100.0, centerStartX + 100.0, centerStartX, "Center Start X", VarDbl(centerStartY - 100.0, centerStartY + 100.0, centerStartY, "Center Start Y", VarDbl(centerStartZ - 100.0, centerStartZ + 100.0, centerStartZ, "Center Start Z", @@ -455,11 +456,12 @@ void Clipping::slot_pushButton_applyAnimatedClippingPreset() VarDbl(centerEndZ - 100.0, centerEndZ + 100.0, centerEndZ, "Center End Z", VarDbl(size - 100.0, size + 100.0, size, "Size", VarSlider(0, 2, axis, "Axis", - VarBool(facing, "Facing" - ))))))))), "Preset Setup")) + VarBool(facing, "Facing", + VarBool(zigzag, "Zigzag" + )))))))))), "Preset Setup")) preset = new Utils::ClippingPresetAnimatedDualPlanes( Geom::Vec3f((float)centerStartX, (float)centerStartY, (float)centerStartZ), Geom::Vec3f((float)centerEndX, (float)centerEndY, (float)centerEndZ), - (float)size, axis, facing); + (float)size, axis, facing, zigzag); animatedPreset = preset; } diff --git a/include/Utils/clippingPresetsAnimated.h b/include/Utils/clippingPresetsAnimated.h index f709c7ee..97ffb9de 100644 --- a/include/Utils/clippingPresetsAnimated.h +++ b/include/Utils/clippingPresetsAnimated.h @@ -127,9 +127,10 @@ public : * @param size distance between planes * @param axis axis on which planes are aligned (0 for x, 1 for y, 2 for z) * @param facing true means having facing planes + * @param zigzag true to enable zigzag mode */ ClippingPresetAnimatedDualPlanes( - Geom::Vec3f centerStart, Geom::Vec3f centerEnd, float size, int axis, bool facing); + Geom::Vec3f centerStart, Geom::Vec3f centerEnd, float size, int axis, bool facing, bool zigzag); /** * runs the animation some steps further @@ -148,6 +149,9 @@ private : /// end point of the animation Geom::Vec3f m_endPoint; + /// zigzag mode ? + bool m_zigzag; + }; diff --git a/src/Utils/clippingPresetsAnimated.cpp b/src/Utils/clippingPresetsAnimated.cpp index 5618f5ab..de2462ac 100644 --- a/src/Utils/clippingPresetsAnimated.cpp +++ b/src/Utils/clippingPresetsAnimated.cpp @@ -65,13 +65,14 @@ void ClippingPresetAnimated::apply(ClippingShader* clipShader, std::vector 2)) @@ -123,10 +124,29 @@ void ClippingPresetAnimatedDualPlanes::step(unsigned int amount) // Update animation parameter value m_animParam += (float)amount * m_animationOneStepIncrement * m_animationSpeedFactor; - while (m_animParam < 0.0f) - m_animParam += 1.0f; - while (m_animParam > 1.0f) - m_animParam -= 1.0f; + if (!m_zigzag) + { + while (m_animParam < 0.0f) + m_animParam += 1.0f; + while (m_animParam > 1.0f) + m_animParam -= 1.0f; + } + else + { + while ( (m_animParam < 0.0f) || (m_animParam > 1.0f) ) + { + if (m_animParam < 0.0f) + { + m_animParam = -m_animParam; + m_animationOneStepIncrement = -m_animationOneStepIncrement; + } + else if (m_animParam > 1.0f) + { + m_animParam = 1.0f - (m_animParam - 1.0f); + m_animationOneStepIncrement = -m_animationOneStepIncrement; + } + } + } // Calculate new center Geom::Vec3f newCenter = (1.0f - m_animParam)*m_startPoint + m_animParam*m_endPoint; -- GitLab