From b6ae1c9cddb25d4c973017ad49ac5c1cff289415 Mon Sep 17 00:00:00 2001 From: shun-iwasawa Date: Thu, 27 Feb 2020 16:36:33 +0900 Subject: [PATCH] actual pixel view in cleanup preview --- toonz/sources/toonz/sceneviewer.cpp | 73 +++++++++++++++++------------ 1 file changed, 43 insertions(+), 30 deletions(-) diff --git a/toonz/sources/toonz/sceneviewer.cpp b/toonz/sources/toonz/sceneviewer.cpp index c59c111a..a28857c3 100644 --- a/toonz/sources/toonz/sceneviewer.cpp +++ b/toonz/sources/toonz/sceneviewer.cpp @@ -2016,7 +2016,7 @@ double SceneViewer::projectToZ(const TPointD &delta) { GLint viewport[4]; double modelview[16], projection[16]; glGetIntegerv(GL_VIEWPORT, viewport); - for (int i = 0; i < 16; i++) + for (int i = 0; i < 16; i++) projection[i] = (double)m_projectionMatrix.constData()[i]; glGetDoublev(GL_MODELVIEW_MATRIX, modelview); @@ -2178,8 +2178,9 @@ void SceneViewer::zoomQt(bool forward, bool reset) { if (reset || ((m_zoomScale3D < 500 || !forward) && (m_zoomScale3D > 0.01 || forward))) { double oldZoomScale = m_zoomScale3D; - m_zoomScale3D = reset ? 1 : ImageUtils::getQuantizedZoomFactor( - m_zoomScale3D, forward); + m_zoomScale3D = + reset ? 1 + : ImageUtils::getQuantizedZoomFactor(m_zoomScale3D, forward); m_pan3D = -(m_zoomScale3D / oldZoomScale) * -m_pan3D; } @@ -2200,17 +2201,18 @@ void SceneViewer::zoomQt(bool forward, bool reset) { int i; for (i = 0; i < 2; i++) { - TAffine &viewAff = m_viewAff[i]; + TAffine &viewAff = m_viewAff[i]; if (m_isFlippedX) viewAff = viewAff * TScale(-1, 1); if (m_isFlippedX) viewAff = viewAff * TScale(1, -1); - double scale2 = std::abs(viewAff.det()); + double scale2 = std::abs(viewAff.det()); if (m_isFlippedX) viewAff = viewAff * TScale(-1, 1); if (m_isFlippedX) viewAff = viewAff * TScale(1, -1); if (reset || ((scale2 < 100000 || !forward) && (scale2 > 0.001 * 0.05 || forward))) { double oldZoomScale = sqrt(scale2) * dpiFactor; - double zoomScale = reset ? 1 : ImageUtils::getQuantizedZoomFactor( - oldZoomScale, forward); + double zoomScale = + reset ? 1 + : ImageUtils::getQuantizedZoomFactor(oldZoomScale, forward); // threshold value -0.001 is intended to absorb the error of calculation if ((oldZoomScale - zoomScaleFittingWithScreen) * @@ -2268,17 +2270,27 @@ double SceneViewer::getDpiFactor() { // If the option "ActualPixelViewOnSceneEditingMode" is ON, // use current level's DPI set in the level settings. else if (Preferences::instance() - ->isActualPixelViewOnSceneEditingModeEnabled() && - !CleanupPreviewCheck::instance()->isEnabled() && - !CameraTestCheck::instance()->isEnabled()) { - TXshSimpleLevel *sl; - sl = TApp::instance()->getCurrentLevel()->getSimpleLevel(); - if (!sl) return Stage::inch / cameraDpi; - if (sl->getType() == PLI_XSHLEVEL) return Stage::inch / cameraDpi; - if (sl->getDpi() == TPointD()) return Stage::inch / cameraDpi; - // use default value for the argument of getDpi() (=TFrameId::NO_FRAME) - // so that the dpi of the first frame in the level will be returned. - return Stage::inch / sl->getDpi().x; + ->isActualPixelViewOnSceneEditingModeEnabled()) { + if (CleanupPreviewCheck::instance()->isEnabled() || + CameraTestCheck::instance()->isEnabled()) { + double cleanupCameraDpi = TApp::instance() + ->getCurrentScene() + ->getScene() + ->getProperties() + ->getCleanupParameters() + ->m_camera.getDpi() + .x; + return Stage::inch / cleanupCameraDpi; + } else { + TXshSimpleLevel *sl; + sl = TApp::instance()->getCurrentLevel()->getSimpleLevel(); + if (!sl) return Stage::inch / cameraDpi; + if (sl->getType() == PLI_XSHLEVEL) return Stage::inch / cameraDpi; + if (sl->getDpi() == TPointD()) return Stage::inch / cameraDpi; + // use default value for the argument of getDpi() (=TFrameId::NO_FRAME) + // so that the dpi of the first frame in the level will be returned. + return Stage::inch / sl->getDpi().x; + } } // When the scene editing mode without any option, use the camera dpi else { @@ -2501,9 +2513,9 @@ void SceneViewer::fitToCamera() { TPointD P11 = cameraAff * cameraRect.getP11(); TPointD p0 = TPointD(std::min({P00.x, P01.x, P10.x, P11.x}), std::min({P00.y, P01.y, P10.y, P11.y})); - TPointD p1 = TPointD(std::max({P00.x, P01.x, P10.x, P11.x}), + TPointD p1 = TPointD(std::max({P00.x, P01.x, P10.x, P11.x}), std::max({P00.y, P01.y, P10.y, P11.y})); - cameraRect = TRectD(p0.x, p0.y, p1.x, p1.y); + cameraRect = TRectD(p0.x, p0.y, p1.x, p1.y); // Pan if (!is3DView()) { @@ -2556,8 +2568,8 @@ void SceneViewer::resetZoom() { TPointD realCenter(m_viewAff[m_viewMode].a13, m_viewAff[m_viewMode].a23); TAffine aff = getNormalZoomScale() * TRotation(realCenter, m_rotationAngle[m_viewMode]); - aff.a13 = realCenter.x; - aff.a23 = realCenter.y; + aff.a13 = realCenter.x; + aff.a23 = realCenter.y; if (m_isFlippedX) aff = aff * TScale(-1, 1); if (m_isFlippedY) aff = aff * TScale(1, -1); setViewMatrix(aff, m_viewMode); @@ -2614,16 +2626,17 @@ void SceneViewer::setActualPixelSize() { } else dpi = sl->getDpi(fid); - const double inch = Stage::inch; - TAffine tempAff = getNormalZoomScale(); - if (m_isFlippedX) tempAff = tempAff * TScale(-1, 1); - if (m_isFlippedY) tempAff = tempAff * TScale(1, -1); - TPointD tempScale = dpi; + const double inch = Stage::inch; + TAffine tempAff = getNormalZoomScale(); + if (m_isFlippedX) tempAff = tempAff * TScale(-1, 1); + if (m_isFlippedY) tempAff = tempAff * TScale(1, -1); + TPointD tempScale = dpi; if (m_isFlippedX) tempScale.x = -tempScale.x; if (m_isFlippedY) tempScale.y = -tempScale.y; for (int i = 0; i < m_viewAff.size(); ++i) - setViewMatrix(dpi == TPointD(0, 0) ? tempAff : TScale(tempScale.x / inch, - tempScale.y / inch), + setViewMatrix(dpi == TPointD(0, 0) + ? tempAff + : TScale(tempScale.x / inch, tempScale.y / inch), i); m_pos = QPoint(0, 0); @@ -2906,7 +2919,7 @@ void drawSpline(const TAffine &viewMatrix, const TRect &clipRect, bool camera3d, TStageObject *pegbar = objId != TStageObjectId::NoneId ? xsh->getStageObject(objId) : 0; - const TStroke *stroke = 0; + const TStroke *stroke = 0; if (pegbar && pegbar->getSpline()) stroke = pegbar->getSpline()->getStroke(); if (!stroke) return;