diff --git a/toonz/sources/tnztools/editassistantstool.cpp b/toonz/sources/tnztools/editassistantstool.cpp index a6a0b47..25299d9 100644 --- a/toonz/sources/tnztools/editassistantstool.cpp +++ b/toonz/sources/tnztools/editassistantstool.cpp @@ -11,6 +11,8 @@ #include <toonz/tapplication.h> #include <toonz/txshlevelhandle.h> #include <toonz/txsheethandle.h> +#include <toonz/tframehandle.h> +#include <toonz/dpiscale.h> // TnzCore includes #include <tgl.h> @@ -579,9 +581,16 @@ public: m_dragging = false; } + void mouseMove(const TPointD &position, const TMouseEvent&) override { + m_currentPosition = position; + m_currentPointOffset = TPointD(); + getViewer()->GLInvalidateAll(); + } + void draw() override { m_currentGuidelines.clear(); - + TPointD position = m_currentPosition + m_currentPointOffset; + // draw assistants if (Closer closer = read(ModeImage)) for(TMetaObjectListCW::iterator i = (*m_reader)->begin(); i != (*m_reader)->end(); ++i) @@ -594,6 +603,48 @@ public: TAffine(), m_currentGuidelines ); } + + // draw assistans from other layers + TImage *currentImage = getImage(false); + if (TToolViewer *viewer = getViewer()) + if (TApplication *application = getApplication()) + if (TXshLevelHandle *levelHandle = application->getCurrentLevel()) + if (TXshLevel *level = levelHandle->getLevel()) + if (TXshSimpleLevel *simpleLevel = level->getSimpleLevel()) + if (TFrameHandle *frameHandle = application->getCurrentFrame()) + if (TXsheetHandle *XsheetHandle = application->getCurrentXsheet()) + if (TXsheet *Xsheet = XsheetHandle->getXsheet()) + { + TPointD dpiScale = getCurrentDpiScale(simpleLevel, getCurrentFid()); + int frame = frameHandle->getFrame(); + int count = Xsheet->getColumnCount(); + TAffine worldToTrack; + worldToTrack.a11 /= dpiScale.x; + worldToTrack.a22 /= dpiScale.y; + + for(int i = 0; i < count; ++i) + if (TXshColumn *column = Xsheet->getColumn(i)) + if (column->isCamstandVisible()) + if (column->isPreviewVisible()) + if (TImageP image = Xsheet->getCell(frame, i).getImage(false)) + if (image->getType() == TImage::META) + if (image != currentImage) + if (TMetaImage *metaImage = dynamic_cast<TMetaImage*>(image.getPointer())) + { + TAffine imageToTrack = worldToTrack * getColumnMatrix(i); + glPushMatrix(); tglMultMatrix(imageToTrack); + + TMetaImage::Reader reader(*metaImage); + for(TMetaObjectListCW::iterator i = reader->begin(); i != reader->end(); ++i) + if (*i) + if (const TAssistant *assistant = (*i)->getHandler<TAssistant>()) { + assistant->getGuidelines(position, imageToTrack, m_currentGuidelines); + assistant->draw(viewer, false); + } + + glPopMatrix(); + } + } // draw guidelines for(TGuidelineList::const_iterator i = m_currentGuidelines.begin(); i != m_currentGuidelines.end(); ++i)