From 9d1abfce15d55490e5f251fb98fdd3dc00982dd1 Mon Sep 17 00:00:00 2001 From: Michel Mastriani Date: Thu, 2 Jan 2020 15:02:57 -0300 Subject: [PATCH 1/2] Color&Filter --- Source/Fractorium/CurvesGraphicsView.cpp | 11 +-- Source/Fractorium/FractoriumEmberController.h | 10 ++- Source/Fractorium/FractoriumParams.cpp | 88 +++++++++++-------- 3 files changed, 64 insertions(+), 45 deletions(-) diff --git a/Source/Fractorium/CurvesGraphicsView.cpp b/Source/Fractorium/CurvesGraphicsView.cpp index 98dad2b..091bd03 100644 --- a/Source/Fractorium/CurvesGraphicsView.cpp +++ b/Source/Fractorium/CurvesGraphicsView.cpp @@ -218,16 +218,17 @@ void CurvesGraphicsView::paintEvent(QPaintEvent* e) void CurvesGraphicsView::mousePressEvent(QMouseEvent* e) { QGraphicsView::mousePressEvent(e); - auto thresh = devicePixelRatioF() * 10; - auto findpoint = [&](int x, int y) -> int + auto thresh = devicePixelRatioF() * 4; + auto findpoint = [&](int x, int y, bool incThresh = false) -> int { for (int i = 0; i < m_Points[m_Index].size(); i++) { auto item = m_Points[m_Index][i]; auto xdist = std::abs(item->pos().x() - x); auto ydist = std::abs(item->pos().y() - y); + auto threshAgain = incThresh ? thresh * 2 : thresh; - if (xdist < thresh && ydist < thresh) + if (xdist < threshAgain && ydist < threshAgain) return i; } @@ -241,7 +242,7 @@ void CurvesGraphicsView::mousePressEvent(QMouseEvent* e) if (i != -1) emit PointRemovedSignal(m_Index, i); } - else if (findpoint(e->pos().x(), e->pos().y()) == -1) + else if (findpoint(e->pos().x(), e->pos().y(), true) == -1) { QRectF rect = scene()->sceneRect(); auto points = m_Points[m_Index]; @@ -272,4 +273,4 @@ void CurvesGraphicsView::mousePressEvent(QMouseEvent* e) } } } -} \ No newline at end of file +} diff --git a/Source/Fractorium/FractoriumEmberController.h b/Source/Fractorium/FractoriumEmberController.h index d1ca72b..1e3f087 100644 --- a/Source/Fractorium/FractoriumEmberController.h +++ b/Source/Fractorium/FractoriumEmberController.h @@ -139,6 +139,10 @@ public: virtual void SequenceOpenButtonClicked() { } //Params. + virtual void ParamsToEmber(Ember& ember, bool basicParams = false) { }; +#ifdef DO_DOUBLE + virtual void ParamsToEmber(Ember& ember, bool basicParams = false) { }; +#endif virtual void SetCenter(double x, double y) { } virtual void FillParamTablesAndPalette() { } virtual void BrightnessChanged(double d) { } @@ -421,6 +425,10 @@ public: virtual void SequenceOpenButtonClicked() override; //Params. + virtual void ParamsToEmber(Ember& ember, bool basicParams = false) override; +#ifdef DO_DOUBLE + virtual void ParamsToEmber(Ember& ember, bool basicParams = false) override; +#endif virtual void SetCenter(double x, double y) override; virtual void FillParamTablesAndPalette() override; virtual void BrightnessChanged(double d) override; @@ -558,7 +566,7 @@ private: template void SetEmberPrivate(const Ember& ember, bool verbatim, bool updatePointer); //Params. - void ParamsToEmber(Ember& ember); + template void ParamsToEmberPrivate(Ember& ember, bool basicParams); //Xforms. void SetNormalizedWeightText(Xform* xform); diff --git a/Source/Fractorium/FractoriumParams.cpp b/Source/Fractorium/FractoriumParams.cpp index 516d88d..7d7c6b1 100644 --- a/Source/Fractorium/FractoriumParams.cpp +++ b/Source/Fractorium/FractoriumParams.cpp @@ -828,47 +828,57 @@ void FractoriumEmberController::FillParamTablesAndPalette() /// Copy all GUI widget values on the parameters tab to the passed in ember. /// /// The ember to copy values to. +/// true to get just filter and colors. +template void FractoriumEmberController::ParamsToEmber(Ember& ember, bool basicParams) { ParamsToEmberPrivate(ember, basicParams); } +#ifdef DO_DOUBLE +template void FractoriumEmberController::ParamsToEmber(Ember& ember, bool basicParams) { ParamsToEmberPrivate(ember, basicParams); } +#endif template -void FractoriumEmberController::ParamsToEmber(Ember& ember) +template +void FractoriumEmberController::ParamsToEmberPrivate(Ember& ember, bool basicParams) { - auto color = m_Fractorium->ui.ColorTable->item(5, 1)->backgroundColor(); - ember.m_Brightness = m_Fractorium->m_BrightnessSpin->value();//Color. - ember.m_Gamma = m_Fractorium->m_GammaSpin->value(); - ember.m_GammaThresh = m_Fractorium->m_GammaThresholdSpin->value(); - ember.m_Vibrancy = m_Fractorium->m_VibrancySpin->value(); - ember.m_HighlightPower = m_Fractorium->m_HighlightSpin->value(); - ember.m_K2 = m_Fractorium->m_K2Spin->value(); - ember.m_Background.r = color.red() / 255.0; - ember.m_Background.g = color.green() / 255.0; - ember.m_Background.b = color.blue() / 255.0; - ember.m_PaletteMode = ePaletteMode(m_Fractorium->m_PaletteModeCombo->currentIndex()); - ember.m_FinalRasW = m_Fractorium->m_WidthSpin->value();//Geometry. - ember.m_FinalRasH = m_Fractorium->m_HeightSpin->value(); - ember.m_CenterX = m_Fractorium->m_CenterXSpin->value(); - ember.m_CenterY = ember.m_RotCenterY = m_Fractorium->m_CenterYSpin->value(); - ember.m_PixelsPerUnit = m_Fractorium->m_ScaleSpin->value(); - ember.m_Zoom = m_Fractorium->m_ZoomSpin->value(); - ember.m_Rotate = m_Fractorium->m_RotateSpin->value(); - ember.m_CamZPos = m_Fractorium->m_ZPosSpin->value(); - ember.m_CamPerspective = m_Fractorium->m_PerspectiveSpin->value(); - ember.m_CamPitch = m_Fractorium->m_PitchSpin->value() * DEG_2_RAD_T; - ember.m_CamYaw = m_Fractorium->m_YawSpin->value() * DEG_2_RAD_T; - ember.m_CamDepthBlur = m_Fractorium->m_DepthBlurSpin->value(); - ember.m_SpatialFilterRadius = m_Fractorium->m_SpatialFilterWidthSpin->value();//Filter. - ember.m_SpatialFilterType = eSpatialFilterType(m_Fractorium->m_SpatialFilterTypeCombo->currentIndex()); - ember.m_TemporalFilterWidth = m_Fractorium->m_TemporalFilterWidthSpin->value(); - ember.m_TemporalFilterType = eTemporalFilterType(m_Fractorium->m_TemporalFilterTypeCombo->currentIndex()); - ember.m_MinRadDE = m_Fractorium->m_DEFilterMinRadiusSpin->value(); - ember.m_MaxRadDE = m_Fractorium->m_DEFilterMaxRadiusSpin->value(); - ember.m_CurveDE = m_Fractorium->m_DECurveSpin->value(); - ember.m_SubBatchSize = m_Fractorium->m_SbsSpin->value(); - ember.m_FuseCount = m_Fractorium->m_FuseSpin->value(); - ember.m_RandPointRange = m_Fractorium->m_RandRangeSpin->value(); - ember.m_Quality = m_Fractorium->m_QualitySpin->value(); - ember.m_Supersample = m_Fractorium->m_SupersampleSpin->value(); - ember.m_AffineInterp = eAffineInterp(m_Fractorium->m_AffineInterpTypeCombo->currentIndex()); - ember.m_Interp = eInterp(m_Fractorium->m_InterpTypeCombo->currentIndex()); - ember.SyncSize(); + ember.m_Brightness = m_Fractorium->m_BrightnessSpin->value();//Color. + ember.m_Gamma = m_Fractorium->m_GammaSpin->value(); + ember.m_GammaThresh = m_Fractorium->m_GammaThresholdSpin->value(); + ember.m_Vibrancy = m_Fractorium->m_VibrancySpin->value(); + ember.m_HighlightPower = m_Fractorium->m_HighlightSpin->value(); + ember.m_K2 = m_Fractorium->m_K2Spin->value(); + ember.m_SpatialFilterRadius = m_Fractorium->m_SpatialFilterWidthSpin->value();//Filter. + ember.m_SpatialFilterType = eSpatialFilterType(m_Fractorium->m_SpatialFilterTypeCombo->currentIndex()); + ember.m_TemporalFilterWidth = m_Fractorium->m_TemporalFilterWidthSpin->value(); + ember.m_TemporalFilterType = eTemporalFilterType(m_Fractorium->m_TemporalFilterTypeCombo->currentIndex()); + ember.m_MinRadDE = m_Fractorium->m_DEFilterMinRadiusSpin->value(); + ember.m_MaxRadDE = m_Fractorium->m_DEFilterMaxRadiusSpin->value(); + ember.m_CurveDE = m_Fractorium->m_DECurveSpin->value(); + + if(basicParams) + return; + + auto color = m_Fractorium->ui.ColorTable->item(5, 1)->backgroundColor(); + ember.m_Background.r = color.red() / 255.0; + ember.m_Background.g = color.green() / 255.0; + ember.m_Background.b = color.blue() / 255.0; + ember.m_PaletteMode = ePaletteMode(m_Fractorium->m_PaletteModeCombo->currentIndex()); + ember.m_FinalRasW = m_Fractorium->m_WidthSpin->value();//Geometry. + ember.m_FinalRasH = m_Fractorium->m_HeightSpin->value(); + ember.m_CenterX = m_Fractorium->m_CenterXSpin->value(); + ember.m_CenterY = ember.m_RotCenterY = m_Fractorium->m_CenterYSpin->value(); + ember.m_PixelsPerUnit = m_Fractorium->m_ScaleSpin->value(); + ember.m_Zoom = m_Fractorium->m_ZoomSpin->value(); + ember.m_Rotate = m_Fractorium->m_RotateSpin->value(); + ember.m_CamZPos = m_Fractorium->m_ZPosSpin->value(); + ember.m_CamPerspective = m_Fractorium->m_PerspectiveSpin->value(); + ember.m_CamPitch = m_Fractorium->m_PitchSpin->value() * DEG_2_RAD_T; + ember.m_CamYaw = m_Fractorium->m_YawSpin->value() * DEG_2_RAD_T; + ember.m_CamDepthBlur = m_Fractorium->m_DepthBlurSpin->value(); + ember.m_SubBatchSize = m_Fractorium->m_SbsSpin->value(); + ember.m_FuseCount = m_Fractorium->m_FuseSpin->value(); + ember.m_RandPointRange = m_Fractorium->m_RandRangeSpin->value(); + ember.m_Quality = m_Fractorium->m_QualitySpin->value(); + ember.m_Supersample = m_Fractorium->m_SupersampleSpin->value(); + ember.m_AffineInterp = eAffineInterp(m_Fractorium->m_AffineInterpTypeCombo->currentIndex()); + ember.m_Interp = eInterp(m_Fractorium->m_InterpTypeCombo->currentIndex()); + ember.SyncSize(); } /// From 7479aaa95d07b9753735a3c807fdcfe745616efe Mon Sep 17 00:00:00 2001 From: Michel Mastriani Date: Thu, 2 Jan 2020 15:04:32 -0300 Subject: [PATCH 2/2] Color&Filter --- Source/Fractorium/FinalRenderEmberController.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Source/Fractorium/FinalRenderEmberController.cpp b/Source/Fractorium/FinalRenderEmberController.cpp index 81f70c9..70931d0 100644 --- a/Source/Fractorium/FinalRenderEmberController.cpp +++ b/Source/Fractorium/FinalRenderEmberController.cpp @@ -297,6 +297,7 @@ FinalRenderEmberController::FinalRenderEmberController(FractoriumFinalRenderD { m_ImageCount = 1; m_Ember->m_TemporalSamples = 1; + m_Fractorium->m_Controller->ParamsToEmber(*m_Ember, true); // update color and filter params m_Renderer->SetEmber(*m_Ember, isBump ? eProcessAction::KEEP_ITERATING : eProcessAction::FULL_RENDER); m_Renderer->PrepFinalAccumVector(m_FinalImage);//Must manually call this first because it could be erroneously made smaller due to strips if called inside Renderer::Run(). m_Stats.Clear(); @@ -754,10 +755,16 @@ EmberNs::Renderer* FinalRenderEmberController::FirstOrDefaultRender template QString FinalRenderEmberController::SaveCurrentAgain() { - if (m_Ember) - return SaveCurrentRender(*m_Ember); - else - return ""; + if (!m_Ember) + return ""; + + m_Fractorium->m_Controller->ParamsToEmber(*m_Ember, true); // update color and filter params + m_Run = true; + m_Ember->m_TemporalSamples = 1; + m_Renderer->SetEmber(*m_Ember, eProcessAction::FILTER_AND_ACCUM); + m_Renderer->Run(m_FinalImage, 0, m_GuiState.m_Strips, m_GuiState.m_YAxisUp); + m_Run = false; + return SaveCurrentRender(*m_Ember); } ///