From 565ca7f8bd609001a9f190bdab959435f490bfb2 Mon Sep 17 00:00:00 2001 From: Ivan Mahonin Date: Aug 28 2023 15:47:15 +0000 Subject: #assistants: replicators for fullcolor brush --- diff --git a/toonz/sources/tnztools/assistants/replicatoraffine.cpp b/toonz/sources/tnztools/assistants/replicatoraffine.cpp index af88571..876ce6f 100644 --- a/toonz/sources/tnztools/assistants/replicatoraffine.cpp +++ b/toonz/sources/tnztools/assistants/replicatoraffine.cpp @@ -114,16 +114,16 @@ protected: } - TAffine getAffine() const { + TAffine getAffine(const TAffine &toTool = TAffine()) const { TPointD c, x, y; - c = m_center0.position; - x = m_a0.position - c; - y = m_b0.position - c; + c = toTool*m_center0.position; + x = toTool*m_a0.position - c; + y = toTool*m_b0.position - c; TAffine t0( x.x, y.x, c.x, x.y, y.y, c.y ); - c = m_center1.position; - x = m_a1.position - c; - y = m_b1.position - c; + c = toTool*m_center1.position; + x = toTool*m_a1.position - c; + y = toTool*m_b1.position - c; TAffine t1( x.x, y.x, c.x, x.y, y.y, c.y ); return t1*t0.inv(); @@ -238,10 +238,10 @@ public: void getModifiers( - const TAffine&, + const TAffine &toTool, TInputModifier::List &outModifiers ) const override { - TAffine aff = getAffine(); + TAffine aff = getAffine(toTool); double pressure = getPressure(); double pressureInv = fabs(pressure) > TConsts::epsilon ? 1/pressure : 0; diff --git a/toonz/sources/tnztools/fullcolorbrushtool.cpp b/toonz/sources/tnztools/fullcolorbrushtool.cpp index d764b82..bf62676 100644 --- a/toonz/sources/tnztools/fullcolorbrushtool.cpp +++ b/toonz/sources/tnztools/fullcolorbrushtool.cpp @@ -8,6 +8,7 @@ #include "tools/toolutils.h" #include "tools/toolhandle.h" #include "tools/tooloptions.h" +#include "tools/replicator.h" #include "mypainttoonzbrush.h" @@ -210,6 +211,7 @@ void FullColorBrushTool::onActivate() { if (!m_notifier) m_notifier = new FullColorBrushToolNotifier(this); m_notifier->onActivate(); + updateModifiers(); updateCurrentStyle(); if (m_firstTime) { @@ -304,10 +306,14 @@ bool FullColorBrushTool::askWrite(const TRect &rect) { //-------------------------------------------------------------------------------------------------- -bool FullColorBrushTool::preLeftButtonDown() { +void FullColorBrushTool::updateModifiers() { m_modifierAssistants->magnetism = m_assistants.getValue() ? 1 : 0; m_inputmanager.drawPreview = false; //!m_modifierAssistants->drawOnly; + m_modifierReplicate.clear(); + if (m_assistants.getValue()) + TReplicator::scanReplicators(this, &m_modifierReplicate, false, true, false, nullptr); + m_inputmanager.clearModifiers(); m_inputmanager.addModifier(TInputModifierP(m_modifierTangents.getPointer())); m_inputmanager.addModifier( @@ -315,9 +321,16 @@ bool FullColorBrushTool::preLeftButtonDown() { #ifndef NDEBUG m_inputmanager.addModifier(TInputModifierP(m_modifierTest.getPointer())); #endif + for(TInputModifier::List::iterator i = m_modifierReplicate.begin(); i != m_modifierReplicate.end(); ++i) + m_inputmanager.addModifier(*i); m_inputmanager.addModifier( TInputModifierP(m_modifierSegmentation.getPointer())); +} +//-------------------------------------------------------------------------------------------------- + +bool FullColorBrushTool::preLeftButtonDown() { + updateModifiers(); touchImage(); if (m_isFrameCreated) { @@ -347,6 +360,8 @@ void FullColorBrushTool::handleMouseEvent(MouseEventType type, m_inputmanager.addModifier(TInputModifierP(m_modifierLine.getPointer())); m_inputmanager.addModifier( TInputModifierP(m_modifierAssistants.getPointer())); + for(TInputModifier::List::iterator i = m_modifierReplicate.begin(); i != m_modifierReplicate.end(); ++i) + m_inputmanager.addModifier(*i); m_inputmanager.addModifier( TInputModifierP(m_modifierSegmentation.getPointer())); m_inputmanager.drawPreview = true; diff --git a/toonz/sources/tnztools/fullcolorbrushtool.h b/toonz/sources/tnztools/fullcolorbrushtool.h index 3924388..46b57a7 100644 --- a/toonz/sources/tnztools/fullcolorbrushtool.h +++ b/toonz/sources/tnztools/fullcolorbrushtool.h @@ -61,8 +61,10 @@ public: ToolType getToolType() const override { return TTool::LevelWriteTool; } - unsigned int getToolHints() const override - { return (TTool::getToolHints() & ~HintAssistantsAll) | HintReplicatorsEnabled; } + unsigned int getToolHints() const override { + unsigned int h = TTool::getToolHints() & ~HintAssistantsAll; + return m_assistants.getValue() ? h | HintReplicatorsEnabled : h; + } ToolOptionsBox *createOptionsBox() override; @@ -115,6 +117,8 @@ public: TMyPaintBrushStyle *getBrushStyle(); private: + void updateModifiers(); + enum MouseEventType { ME_DOWN, ME_DRAG, ME_UP, ME_MOVE }; void handleMouseEvent(MouseEventType type, const TPointD &pos, const TMouseEvent &e); @@ -128,6 +132,7 @@ protected: TSmartPointerT m_modifierTangents; TSmartPointerT m_modifierAssistants; TSmartPointerT m_modifierSegmentation; + TInputModifier::List m_modifierReplicate; TPropertyGroup m_prop;