diff --git a/toonz/sources/tnztools/geometrictool.cpp b/toonz/sources/tnztools/geometrictool.cpp index a6fcc92..7d37c91 100644 --- a/toonz/sources/tnztools/geometrictool.cpp +++ b/toonz/sources/tnztools/geometrictool.cpp @@ -1460,7 +1460,7 @@ void GeometricTool::addRasterMyPaintStroke(const TToonzImageP &ti, m_workRaster = TRaster32P(dim); m_workRaster->lock(); - MyPaintToonzBrush toonz_brush(m_workRaster, *this, mypaintBrush); + MyPaintToonzBrush toonz_brush(m_workRaster, *this, mypaintBrush, true); m_lastRect.empty(); m_strokeRect.empty(); toonz_brush.beginStroke(); @@ -1531,7 +1531,7 @@ void GeometricTool::addFullColorMyPaintStroke(const TRasterImageP &ri, m_workRaster = TRaster32P(dim); m_workRaster->lock(); - MyPaintToonzBrush toonz_brush(m_workRaster, *this, mypaintBrush); + MyPaintToonzBrush toonz_brush(m_workRaster, *this, mypaintBrush, true); m_lastRect.empty(); m_strokeRect.empty(); toonz_brush.beginStroke(); @@ -1824,8 +1824,8 @@ TPointD Primitive::checkGuideSnapping(TPointD pos) { } if ((m_param->m_targetType & TTool::Vectors) && m_param->m_snap.getValue()) { int vGuideCount = 0, hGuideCount = 0; - double guideDistance = sqrt(m_param->m_minDistance2); - TToolViewer *viewer = m_tool->getViewer(); + double guideDistance = sqrt(m_param->m_minDistance2); + TToolViewer *viewer = m_tool->getViewer(); if (viewer) { vGuideCount = viewer->getVGuideCount(); hGuideCount = viewer->getHGuideCount(); diff --git a/toonz/sources/tnztools/modifiers/modifierline.cpp b/toonz/sources/tnztools/modifiers/modifierline.cpp index 561f636..ed923ce 100644 --- a/toonz/sources/tnztools/modifiers/modifierline.cpp +++ b/toonz/sources/tnztools/modifiers/modifierline.cpp @@ -2,94 +2,90 @@ #include - //***************************************************************************************** // TModifierLine implementation //***************************************************************************************** - static inline void calcFixedAngle(const TTrackPoint &p0, TTrackPoint &p1) { TPointD p = p1.position - p0.position; - double l = sqrt(p.x*p.x + p.y*p.y); + double l = sqrt(p.x * p.x + p.y * p.y); if (l < TConsts::epsilon) { p = TPointD(); } else { double a = atan2(p.y, p.x); - a = round(a*4/M_PI)*M_PI/4; - p.x = cos(a)*l; - p.y = sin(a)*l; + a = round(a * 4 / M_PI) * M_PI / 4; + p.x = cos(a) * l; + p.y = sin(a) * l; } p1.position = p0.position + p; } - TTrackPoint TModifierLine::Modifier::calcPoint(double originalIndex) { if (original.empty()) return TTrackPoint(); if (original.size() < 2) return original.front(); TTrackPoint p0 = original.front(); TTrackPoint p1 = original.back(); if (fixAngle) calcFixedAngle(p0, p1); - return TTrack::interpolationLinear(p0, p1, originalIndex/(original.size() - 1)); + return TTrack::interpolationLinear(p0, p1, + originalIndex / (original.size() - 1)); } -void -TModifierLine::modifyTrack( - const TTrack &track, - const TInputSavePoint::Holder &savePoint, - TTrackList &outTracks ) -{ +void TModifierLine::modifyTrack(const TTrack &track, + const TInputSavePoint::Holder &savePoint, + TTrackList &outTracks) { if (!track.handler) { - track.handler = new TTrackHandler(track); - Modifier *modifier = new Modifier(*track.handler); + track.handler = new TTrackHandler(track); + Modifier *modifier = new Modifier(*track.handler); modifier->savePoint = savePoint; - track.handler->tracks.push_back( new TTrack(modifier) ); + track.handler->tracks.push_back(new TTrack(modifier)); } - if (!track.changed()) - return; - if (track.handler->tracks.empty()) + if (!track.changed()) return; + if (track.handler->tracks.empty()) return; + + TTrack &subTrack = *track.handler->tracks.front(); + Modifier *modifier = dynamic_cast(subTrack.modifier.getPointer()); + if (!modifier) { + track.resetChanges(); return; - - TTrack &subTrack = *track.handler->tracks.front(); - Modifier* modifier = dynamic_cast(subTrack.modifier.getPointer()); - if (!modifier) - { track.resetChanges(); return; } - - bool fixAngle = track.getKeyState(track.back()).isPressed(TKey::shift); + } + + bool fixAngle = track.getKeyState(track.back()).isPressed(TKey::control); outTracks.push_back(track.handler->tracks.front()); - int i1 = track.size(); - int i0 = i1 - track.pointsAdded; + int i1 = track.size(); + int i0 = i1 - track.pointsAdded; double maxPressure = modifier->maxPressure; - if (track.pointsRemoved) - { maxPressure = 0; i0 = 0; } - for(int i = i0; i < i1; ++i) { + if (track.pointsRemoved) { + maxPressure = 0; + i0 = 0; + } + for (int i = i0; i < i1; ++i) { double p = track[i].pressure; if (maxPressure < p) maxPressure = p; } modifier->maxPressure = maxPressure; - modifier->fixAngle = fixAngle; - if (track.finished()) - modifier->savePoint.reset(); + modifier->fixAngle = fixAngle; + if (track.finished()) modifier->savePoint.reset(); subTrack.truncate(0); - + if (track.size() > 0) { - TTrackPoint p = track.front(); + TTrackPoint p = track.front(); p.originalIndex = 0; - p.pressure = maxPressure; - p.tilt = TPointD(); + p.pressure = maxPressure; + p.tilt = TPointD(); subTrack.push_back(p); } - + if (track.size() > 1) { - TTrackPoint p = track.back(); + TTrackPoint p = track.back(); p.originalIndex = track.size() - 1; - p.pressure = maxPressure; - p.tilt = TPointD(); + p.pressure = maxPressure; + p.tilt = TPointD(); if (fixAngle) calcFixedAngle(subTrack.front(), p); subTrack.push_back(p); } - + track.resetChanges(); } diff --git a/toonz/sources/tnztools/mypainttoonzbrush.cpp b/toonz/sources/tnztools/mypainttoonzbrush.cpp index 38c3b43..d886f13 100644 --- a/toonz/sources/tnztools/mypainttoonzbrush.cpp +++ b/toonz/sources/tnztools/mypainttoonzbrush.cpp @@ -38,10 +38,10 @@ void putOnRasterCM(const TRasterCM32P &out, const TRaster32P &in, int styleId, int tone = lockAlpha ? outPix->getTone() : sameStyleId ? outPix->getTone() * (255 - inPix->m) / 255 : std::min(255 - inPix->m, outPix->getTone()); - int ink = !sameStyleId && outPix->getTone() < 255 - inPix->m - ? outPix->getInk() - : styleId; - *outPix = TPixelCM32(ink, outPix->getPaint(), tone); + int ink = !sameStyleId && outPix->getTone() < 255 - inPix->m + ? outPix->getInk() + : styleId; + *outPix = TPixelCM32(ink, outPix->getPaint(), tone); } } } @@ -109,39 +109,37 @@ void Raster32PMyPaintSurface::setAntialiasing(bool value) { // //======================================================= -MyPaintToonzBrush::MyPaintToonzBrush( - const TRaster32P &ras, - RasterController &controller, - const mypaint::Brush &brush, - bool interpolation -) - : ras(ras) - , mypaintSurface(ras, controller) - , brush(brush) - , reset(true) - , interpolation(interpolation) -{ +MyPaintToonzBrush::MyPaintToonzBrush(const TRaster32P &ras, + RasterController &controller, + const mypaint::Brush &brush, + bool interpolation) + : m_ras(ras) + , m_mypaintSurface(ras, controller) + , m_brush(brush) + , m_reset(true) + , m_interpolation(interpolation) { // read brush antialiasing settings - float aa = this->brush.getBaseValue(MYPAINT_BRUSH_SETTING_ANTI_ALIASING); - mypaintSurface.setAntialiasing(aa > 0.5f); + float aa = this->m_brush.getBaseValue(MYPAINT_BRUSH_SETTING_ANTI_ALIASING); + m_mypaintSurface.setAntialiasing(aa > 0.5f); // reset brush antialiasing to zero to avoid radius and hardness correction - this->brush.setBaseValue(MYPAINT_BRUSH_SETTING_ANTI_ALIASING, 0.f); + this->m_brush.setBaseValue(MYPAINT_BRUSH_SETTING_ANTI_ALIASING, 0.f); for (int i = 0; i < MYPAINT_BRUSH_INPUTS_COUNT; ++i) - this->brush.setMappingN(MYPAINT_BRUSH_SETTING_ANTI_ALIASING, - (MyPaintBrushInput)i, 0); + this->m_brush.setMappingN(MYPAINT_BRUSH_SETTING_ANTI_ALIASING, + (MyPaintBrushInput)i, 0); } void MyPaintToonzBrush::beginStroke() { - brush.reset(); - brush.newStroke(); - reset = true; + m_brush.reset(); + m_brush.newStroke(); + m_reset = true; } void MyPaintToonzBrush::endStroke() { - if (!reset) { - if (interpolation) - strokeTo(TPointD(current.x, current.y), current.pressure, TPointD(current.tx, current.ty), 0.f); + if (!m_reset) { + if (m_interpolation) + strokeTo(TPointD(m_current.x, m_current.y), m_current.pressure, + TPointD(m_current.tx, m_current.ty), 0.f); beginStroke(); } } @@ -150,21 +148,21 @@ void MyPaintToonzBrush::strokeTo(const TPointD &position, double pressure, const TPointD &tilt, double dtime) { Params next(position.x, position.y, pressure, tilt.x, tilt.y, 0.0); - if (reset) { - current = next; - previous = current; - reset = false; + if (m_reset) { + m_current = next; + m_previous = m_current; + m_reset = false; // we need to jump to initial point (heuristic) - brush.setState(MYPAINT_BRUSH_STATE_X, current.x); - brush.setState(MYPAINT_BRUSH_STATE_Y, current.y); - brush.setState(MYPAINT_BRUSH_STATE_ACTUAL_X, current.x); - brush.setState(MYPAINT_BRUSH_STATE_ACTUAL_Y, current.y); + m_brush.setState(MYPAINT_BRUSH_STATE_X, m_current.x); + m_brush.setState(MYPAINT_BRUSH_STATE_Y, m_current.y); + m_brush.setState(MYPAINT_BRUSH_STATE_ACTUAL_X, m_current.x); + m_brush.setState(MYPAINT_BRUSH_STATE_ACTUAL_Y, m_current.y); return; } - if (interpolation) { - next.time = current.time + dtime; - + if (m_interpolation) { + next.time = m_current.time + dtime; + // accuracy const double threshold = 1.0; const double thresholdSqr = threshold * threshold; @@ -175,9 +173,9 @@ void MyPaintToonzBrush::strokeTo(const TPointD &position, double pressure, Params p0; Segment *segment = stack; Segment *maxSegment = segment + maxLevel; - p0.setMedian(previous, current); - segment->p1 = current; - segment->p2.setMedian(current, next); + p0.setMedian(m_previous, m_current); + segment->p1 = m_current; + segment->p2.setMedian(m_current, next); // process while (true) { @@ -190,9 +188,9 @@ void MyPaintToonzBrush::strokeTo(const TPointD &position, double pressure, sub->p2.setMedian(sub->p1, segment->p1); segment = sub; } else { - brush.strokeTo(mypaintSurface, segment->p2.x, segment->p2.y, - segment->p2.pressure, segment->p2.tx, segment->p2.ty, - segment->p2.time - p0.time); + m_brush.strokeTo(m_mypaintSurface, segment->p2.x, segment->p2.y, + segment->p2.pressure, segment->p2.tx, segment->p2.ty, + segment->p2.time - p0.time); if (segment == stack) break; p0 = segment->p2; --segment; @@ -200,14 +198,15 @@ void MyPaintToonzBrush::strokeTo(const TPointD &position, double pressure, } // keep parameters for future interpolation - previous = current; - current = next; + m_previous = m_current; + m_current = next; // shift time - previous.time = 0.0; - current.time = dtime; + m_previous.time = 0.0; + m_current.time = dtime; } else { - brush.strokeTo(mypaintSurface, position.x, position.y, pressure, tilt.x, tilt.y, dtime); + m_brush.strokeTo(m_mypaintSurface, position.x, position.y, pressure, tilt.x, + tilt.y, dtime); } } @@ -224,6 +223,6 @@ void MyPaintToonzBrush::updateDrawing(const TRasterCM32P rasCM, if (targetRect.isEmpty()) return; rasCM->copy(rasBackupCM->extract(targetRect), targetRect.getP00()); - putOnRasterCM(rasCM->extract(targetRect), ras->extract(targetRect), styleId, + putOnRasterCM(rasCM->extract(targetRect), m_ras->extract(targetRect), styleId, lockAlpha); } diff --git a/toonz/sources/tnztools/mypainttoonzbrush.h b/toonz/sources/tnztools/mypainttoonzbrush.h index 3eab55b..8986c5f 100644 --- a/toonz/sources/tnztools/mypainttoonzbrush.h +++ b/toonz/sources/tnztools/mypainttoonzbrush.h @@ -81,8 +81,7 @@ public: bool getAntialiasing() const; void setAntialiasing(bool value); - RasterController* getController() const - { return controller; } + RasterController *getController() const { return controller; } }; //======================================================= @@ -103,12 +102,13 @@ private: }; }; - inline explicit Params(double x = 0.0, double y = 0.0, double pressure = 0.0, - double tx = 0.0, double ty = 0.0, double time = 0.0) + inline explicit Params(double x = 0.0, double y = 0.0, + double pressure = 0.0, double tx = 0.0, + double ty = 0.0, double time = 0.0) : x(x), y(y), pressure(pressure), tx(tx), ty(ty), time(time) {} inline void setMedian(Params &a, Params &b) { - for (int i = 0; i < (int)sizeof(values) / sizeof(values[0]); ++i) + for (int i = 0; i < (int)sizeof(values) / sizeof(values[0]); ++i) values[i] = 0.5 * (a.values[i] + b.values[i]); } }; @@ -117,38 +117,31 @@ private: Params p1, p2; }; - TRaster32P ras; - Raster32PMyPaintSurface mypaintSurface; - mypaint::Brush brush; + TRaster32P m_ras; + Raster32PMyPaintSurface m_mypaintSurface; + mypaint::Brush m_brush; - bool reset; - Params previous, current; - bool interpolation; + bool m_reset; + Params m_previous, m_current; + bool m_interpolation; public: - MyPaintToonzBrush( - const TRaster32P &ras, - RasterController &controller, - const mypaint::Brush &brush, - bool interpolation = false ); + MyPaintToonzBrush(const TRaster32P &ras, RasterController &controller, + const mypaint::Brush &brush, bool interpolation = false); void beginStroke(); - void strokeTo( - const TPointD &position, - double pressure, - const TPointD &tilt, - double dtime ); + void strokeTo(const TPointD &position, double pressure, const TPointD &tilt, + double dtime); void endStroke(); // colormapped void updateDrawing(const TRasterCM32P rasCM, const TRasterCM32P rasBackupCM, const TRect &bbox, int styleId, bool lockAlpha) const; - const TRaster32P& getRaster() const - { return ras; } - RasterController& getController() - { return *mypaintSurface.getController(); } - const mypaint::Brush& getBrush() const - { return brush; } + const TRaster32P &getRaster() const { return m_ras; } + RasterController &getController() { + return *m_mypaintSurface.getController(); + } + const mypaint::Brush &getBrush() const { return m_brush; } }; #endif // T_BLUREDBRUSH diff --git a/toonz/sources/tnztools/toonzrasterbrushtool.cpp b/toonz/sources/tnztools/toonzrasterbrushtool.cpp index 58038af..f199b1a 100644 --- a/toonz/sources/tnztools/toonzrasterbrushtool.cpp +++ b/toonz/sources/tnztools/toonzrasterbrushtool.cpp @@ -1353,7 +1353,8 @@ void ToonzRasterBrushTool::leftButtonDown(const TPointD &pos, mypaintBrush.setBaseValue(MYPAINT_BRUSH_SETTING_RADIUS_LOGARITHMIC, baseSize + modifierSize); } - m_toonz_brush = new MyPaintToonzBrush(m_workRas, *this, mypaintBrush); + m_toonz_brush = + new MyPaintToonzBrush(m_workRas, *this, mypaintBrush, true); m_strokeRect.empty(); m_strokeSegmentRect.empty(); m_toonz_brush->beginStroke();