From 8074a509094d05b7c31ae7435a6a6ca3b23b446b Mon Sep 17 00:00:00 2001 From: Ivan Mahonin Date: May 01 2023 08:50:45 +0000 Subject: #assistants: visualize enabled status of assistants --- diff --git a/toonz/sources/include/tools/assistant.h b/toonz/sources/include/tools/assistant.h index c908f7d..3ec9c7f 100644 --- a/toonz/sources/include/tools/assistant.h +++ b/toonz/sources/include/tools/assistant.h @@ -57,19 +57,31 @@ typedef std::vector TAssistantPointList; class DVAPI TGuideline : public TSmartObject { public: + const bool enabled; const double magnetism; - TGuideline(double magnetism): magnetism(magnetism) { } + + TGuideline(bool enabled, double magnetism): + enabled(enabled), magnetism(magnetism) { } virtual TTrackPoint transformPoint(const TTrackPoint &point) const { return point; } - TTrackPoint smoothTransformPoint(const TTrackPoint &point, double magnetism = 1.0) const - { return TTrack::interpolationLinear(point, transformPoint(point), magnetism*this->magnetism); } - virtual void draw(bool active) const + virtual void draw(bool active, bool enabled) const { } - void draw() const - { draw(false); } + void draw(bool active = false) const + { draw(active, true); } + + TTrackPoint smoothTransformPoint(const TTrackPoint &point, double magnetism = 1.0) const { + return enabled + ? TTrack::interpolationLinear(point, transformPoint(point), magnetism*this->magnetism) + : point; + } - void drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize, bool active) const; + void drawSegment( + const TPointD &p0, + const TPointD &p1, + double pixelSize, + bool active, + bool enabled = true) const; double calcTrackWeight(const TTrack &track, const TAffine &toScreen, bool &outLongEnough) const; static TGuidelineP findBest(const TGuidelineList &guidelines, const TTrack &track, const TAffine &toScreen, bool &outLongEnough); @@ -242,7 +254,7 @@ protected: //! put value from property to variant virtual void onPropertyChanged(const TStringId &name); - void drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize) const; + void drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize, bool enabled = true) const; void drawPoint(const TAssistantPoint &point, double pixelSize) const; void addProperty(TProperty *p); @@ -251,7 +263,8 @@ protected: public: virtual void updateTranslation() const; virtual void getGuidelines(const TPointD &position, const TAffine &toTool, TGuidelineList &outGuidelines) const; - virtual void draw(TToolViewer *viewer) const; + virtual void draw(TToolViewer *viewer, bool enabled) const; + void draw(TToolViewer *viewer) const { draw(viewer, true); } virtual void drawEdit(TToolViewer *viewer) const; }; diff --git a/toonz/sources/tnztools/assistant.cpp b/toonz/sources/tnztools/assistant.cpp index 2a4af8a..b4f669f 100644 --- a/toonz/sources/tnztools/assistant.cpp +++ b/toonz/sources/tnztools/assistant.cpp @@ -12,10 +12,20 @@ //************************************************************************ void -TGuideline::drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize, bool active) const { +TGuideline::drawSegment( + const TPointD &p0, + const TPointD &p1, + double pixelSize, + bool active, + bool enabled ) const +{ double colorBlack[4] = { 0.0, 0.0, 0.0, 0.5 }; double colorWhite[4] = { 1.0, 1.0, 1.0, 0.5 }; - if (!active) colorBlack[3] = (colorWhite[3] *= 0.5); + + if (!this->enabled || !enabled) + colorBlack[3] = (colorWhite[3] = 0.25); + else if (!active) + colorBlack[3] = (colorWhite[3] = 0.75); glPushAttrib(GL_ALL_ATTRIB_BITS); tglEnableBlending(); @@ -38,7 +48,7 @@ TGuideline::drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize, double TGuideline::calcTrackWeight(const TTrack &track, const TAffine &toScreen, bool &outLongEnough) const { outLongEnough = false; - if (track.size() < 2) + if (!enabled || track.size() < 2) return std::numeric_limits::infinity(); const double snapLenght = 20.0; @@ -320,9 +330,11 @@ TAssistant::onPropertyChanged(const TStringId &name) { //--------------------------------------------------------------------------------------------------- void -TAssistant::drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize) const { +TAssistant::drawSegment(const TPointD &p0, const TPointD &p1, double pixelSize, bool enabled) const { double colorBlack[4] = { 0.0, 0.0, 0.0, 0.5 }; double colorWhite[4] = { 1.0, 1.0, 1.0, 0.5 }; + if (!enabled || !this->getEnabled()) + colorBlack[3] = (colorWhite[3] *= 0.5); glPushAttrib(GL_ALL_ATTRIB_BITS); tglEnableBlending(); @@ -400,7 +412,7 @@ TAssistant::getGuidelines(const TPointD &position, const TAffine &toTool, TGuide //--------------------------------------------------------------------------------------------------- void -TAssistant::draw(TToolViewer *viewer) const +TAssistant::draw(TToolViewer *viewer, bool enabled) const { } //--------------------------------------------------------------------------------------------------- diff --git a/toonz/sources/tnztools/assistants/assistantvanishingpoint.cpp b/toonz/sources/tnztools/assistants/assistantvanishingpoint.cpp index bae4abf..0c4a3f9 100644 --- a/toonz/sources/tnztools/assistants/assistantvanishingpoint.cpp +++ b/toonz/sources/tnztools/assistants/assistantvanishingpoint.cpp @@ -33,18 +33,19 @@ public: { outGuidelines.push_back(TGuidelineP( new TGuidelineInfiniteLine( + getEnabled(), getMagnetism(), toTool*m_points.front().position, position ))); } - void draw(TToolViewer *viewer) const override { + void draw(TToolViewer *viewer, bool enabled) const override { double pixelSize = sqrt(tglGetPixelSize2()); const TPointD &p = m_points.front().position; TPointD dx(20.0*pixelSize, 0.0); TPointD dy(0.0, 10.0*pixelSize); - drawSegment(p-dx-dy, p+dx+dy, pixelSize); - drawSegment(p-dx+dy, p+dx-dy, pixelSize); + drawSegment(p-dx-dy, p+dx+dy, pixelSize, enabled); + drawSegment(p-dx+dy, p+dx-dy, pixelSize, enabled); } }; diff --git a/toonz/sources/tnztools/assistants/guidelineline.cpp b/toonz/sources/tnztools/assistants/guidelineline.cpp index fe18b80..9ae3bf2 100644 --- a/toonz/sources/tnztools/assistants/guidelineline.cpp +++ b/toonz/sources/tnztools/assistants/guidelineline.cpp @@ -10,8 +10,8 @@ // TGuidelineLineBase implementation //***************************************************************************************** -TGuidelineLineBase::TGuidelineLineBase(double magnetism, const TPointD &p0, const TPointD &p1): - TGuideline(magnetism), p0(p0), p1(p1) { } +TGuidelineLineBase::TGuidelineLineBase(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1): + TGuideline(enabled, magnetism), p0(p0), p1(p1) { } TPointD TGuidelineLineBase::calcDirection(const TPointD &p0, const TPointD &p1) { @@ -40,7 +40,7 @@ TGuidelineLineBase::truncateInfiniteLine(const TRectD &bounds, TPointD &p0, TPoi } void -TGuidelineLineBase::drawInliniteLine(const TPointD &p0, const TPointD &p1, bool ray, bool active) const { +TGuidelineLineBase::drawInliniteLine(const TPointD &p0, const TPointD &p1, bool ray, bool active, bool enabled) const { TAffine4 modelview, projection; glGetDoublev(GL_MODELVIEW_MATRIX, modelview.a); glGetDoublev(GL_PROJECTION_MATRIX, projection.a); @@ -52,7 +52,7 @@ TGuidelineLineBase::drawInliniteLine(const TPointD &p0, const TPointD &p1, bool double pixelSize = sqrt(tglGetPixelSize2()); TAffine matrixInv = matrix.inv(); - drawSegment((ray ? p0 : matrixInv*pp0), matrixInv*pp1, pixelSize, active); + drawSegment((ray ? p0 : matrixInv*pp0), matrixInv*pp1, pixelSize, active, enabled); } @@ -60,8 +60,8 @@ TGuidelineLineBase::drawInliniteLine(const TPointD &p0, const TPointD &p1, bool // TGuidelineLine implementation //***************************************************************************************** -TGuidelineLine::TGuidelineLine(double magnetism, const TPointD &p0, const TPointD &p1): - TGuidelineLineBase(magnetism, p0, p1), +TGuidelineLine::TGuidelineLine(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1): + TGuidelineLineBase(enabled, magnetism, p0, p1), dir(calcDirection(p0, p1)), dist(norm(p1 - p0)) { } @@ -73,16 +73,16 @@ TGuidelineLine::transformPoint(const TTrackPoint &point) const { } void -TGuidelineLine::draw(bool active) const - { drawSegment(p0, p1, sqrt(tglGetPixelSize2()), active); } +TGuidelineLine::draw(bool active, bool enabled) const + { drawSegment(p0, p1, sqrt(tglGetPixelSize2()), active, enabled); } //***************************************************************************************** // TGuidelineInfiniteLine implementation //***************************************************************************************** -TGuidelineInfiniteLine::TGuidelineInfiniteLine(double magnetism, const TPointD &p0, const TPointD &p1): - TGuidelineLineBase(magnetism, p0, p1), +TGuidelineInfiniteLine::TGuidelineInfiniteLine(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1): + TGuidelineLineBase(enabled, magnetism, p0, p1), dir(calcDirection(p0, p1)) { } TTrackPoint @@ -93,16 +93,16 @@ TGuidelineInfiniteLine::transformPoint(const TTrackPoint &point) const { } void -TGuidelineInfiniteLine::draw(bool active) const - { drawInliniteLine(p0, p1, false, active); } +TGuidelineInfiniteLine::draw(bool active, bool enabled) const + { drawInliniteLine(p0, p1, false, active, enabled); } //***************************************************************************************** // TGuidelineRay implementation //***************************************************************************************** -TGuidelineRay::TGuidelineRay(double magnetism, const TPointD &p0, const TPointD &p1): - TGuidelineLineBase(magnetism, p0, p1), +TGuidelineRay::TGuidelineRay(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1): + TGuidelineLineBase(enabled, magnetism, p0, p1), dir(calcDirection(p0, p1)) { } TTrackPoint @@ -113,6 +113,6 @@ TGuidelineRay::transformPoint(const TTrackPoint &point) const { } void -TGuidelineRay::draw(bool active) const - { drawInliniteLine(p0, p1, true, active); } +TGuidelineRay::draw(bool active, bool enabled) const + { drawInliniteLine(p0, p1, true, active, enabled); } diff --git a/toonz/sources/tnztools/assistants/guidelineline.h b/toonz/sources/tnztools/assistants/guidelineline.h index 6719453..cb2d76d 100644 --- a/toonz/sources/tnztools/assistants/guidelineline.h +++ b/toonz/sources/tnztools/assistants/guidelineline.h @@ -31,8 +31,8 @@ public: const TPointD p0; const TPointD p1; - TGuidelineLineBase(double magnetism, const TPointD &p0, const TPointD &p1); - void drawInliniteLine(const TPointD &p0, const TPointD &p1, bool ray, bool active) const; + TGuidelineLineBase(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1); + void drawInliniteLine(const TPointD &p0, const TPointD &p1, bool ray, bool active, bool enabled) const; static TPointD calcDirection(const TPointD &p0, const TPointD &p1); static void truncateInfiniteLine(const TRectD &bounds, TPointD &p0, TPointD &p1); }; @@ -47,9 +47,9 @@ public: const TPointD dir; const double dist; - TGuidelineLine(double magnetism, const TPointD &p0, const TPointD &p1); + TGuidelineLine(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1); TTrackPoint transformPoint(const TTrackPoint &point) const override; - void draw(bool active) const override; + void draw(bool active, bool enabled) const override; }; @@ -61,9 +61,9 @@ class DVAPI TGuidelineInfiniteLine : public TGuidelineLineBase { public: const TPointD dir; - TGuidelineInfiniteLine(double magnetism, const TPointD &p0, const TPointD &p1); + TGuidelineInfiniteLine(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1); TTrackPoint transformPoint(const TTrackPoint &point) const override; - void draw(bool active) const override; + void draw(bool active, bool enabled) const override; }; @@ -75,9 +75,9 @@ class DVAPI TGuidelineRay : public TGuidelineLineBase { public: const TPointD dir; - TGuidelineRay(double magnetism, const TPointD &p0, const TPointD &p1); + TGuidelineRay(bool enabled, double magnetism, const TPointD &p0, const TPointD &p1); TTrackPoint transformPoint(const TTrackPoint &point) const override; - void draw(bool active) const override; + void draw(bool active, bool enabled) const override; }; #endif diff --git a/toonz/sources/tnztools/modifiers/modifierassistants.cpp b/toonz/sources/tnztools/modifiers/modifierassistants.cpp index 317d71b..1a62e44 100644 --- a/toonz/sources/tnztools/modifiers/modifierassistants.cpp +++ b/toonz/sources/tnztools/modifiers/modifierassistants.cpp @@ -99,7 +99,7 @@ TModifierAssistants::scanAssistants( if (findGuidelines) for(int i = 0; i < positionsCount; ++i) assistant->getGuidelines(positions[i], imageToTrack, *outGuidelines); - if (draw) assistant->draw(viewer); + if (draw) assistant->draw(viewer, !drawOnly); if (!doSomething) return true; } @@ -202,7 +202,8 @@ void TModifierAssistants::draw(const TTrackList &tracks, const THoverList &hovers) { THoverList allHovers; allHovers.reserve(hovers.size() + tracks.size()); - allHovers.insert(allHovers.end(), hovers.begin(), hovers.end()); + if (tracks.empty()) // hide hovers if track exists + allHovers.insert(allHovers.end(), hovers.begin(), hovers.end()); for(TTrackList::const_iterator i = tracks.begin(); i != tracks.end(); ++i) if ((*i)->handler && !(*i)->handler->tracks.empty() && !(*i)->handler->tracks.front()->empty()) allHovers.push_back( (*i)->handler->tracks.front()->back().position ); @@ -218,7 +219,7 @@ TModifierAssistants::draw(const TTrackList &tracks, const THoverList &hovers) { // draw guidelines for(TGuidelineList::const_iterator i = guidelines.begin(); i != guidelines.end(); ++i) - (*i)->draw(); + (*i)->draw(false, !drawOnly); // draw tracks TInputModifier::drawTracks(tracks);