diff --git a/rtengine/iptransform.cc b/rtengine/iptransform.cc index 22cfd9f27..aee7ae4e4 100644 --- a/rtengine/iptransform.cc +++ b/rtengine/iptransform.cc @@ -33,6 +33,8 @@ using namespace std; namespace { +constexpr double focal_length_in_px_factor = 0.0462; + float pow3 (float x) { return x * x * x; @@ -522,13 +524,13 @@ bool ImProcFunctions::transCoord (int W, int H, const std::vector &src, x_d /= params->perspective.camera_scale; y_d /= params->perspective.camera_scale; if (params->perspective.camera_defish) { - double const focal_source = params->perspective.camera_focal_length * maxRadius * 0.0462; + const double focal_source = params->perspective.camera_focal_length * maxRadius * focal_length_in_px_factor; double focal_dst = focal_source; x_d /= focal_dst; y_d /= focal_dst; - double const r = std::sqrt(x_d*x_d + y_d*y_d); - double const factor = focal_source * std::atan(r)/r; + const double r = std::sqrt(x_d * x_d + y_d * y_d); + const double factor = focal_source * std::atan(r) / r; x_d *= factor; y_d *= factor; @@ -1262,13 +1264,13 @@ void ImProcFunctions::transformGeneral(bool highQuality, Imagefloat *original, I x_d /= params->perspective.camera_scale; y_d /= params->perspective.camera_scale; if (params->perspective.camera_defish) { - double const focal_source = params->perspective.camera_focal_length * maxRadius * 0.0462; + const double focal_source = params->perspective.camera_focal_length * maxRadius * focal_length_in_px_factor; double focal_dst = focal_source; x_d /= focal_dst; y_d /= focal_dst; - double const r = std::sqrt(x_d*x_d + y_d*y_d); - double const factor = focal_source * std::atan(r)/r; + const double r = std::sqrt(x_d * x_d + y_d * y_d); + const double factor = focal_source * std::atan(r)/r; x_d *= factor; y_d *= factor; diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index 189f25ca0..44da781ef 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -197,7 +197,16 @@ void BatchToolPanelCoordinator::initSession () rotate->setAdjusterBehavior (options.baBehav[ADDSET_ROTATE_DEGREE]); resize->setAdjusterBehavior (options.baBehav[ADDSET_RESIZE_SCALE]); distortion->setAdjusterBehavior (options.baBehav[ADDSET_DIST_AMOUNT]); - perspective->setAdjusterBehavior (options.baBehav[ADDSET_PERSPECTIVE], options.baBehav[ADDSET_PERSP_CAM_FOCAL_LENGTH], options.baBehav[ADDSET_PERSP_CAM_SHIFT], options.baBehav[ADDSET_PERSP_CAM_ANGLE], options.baBehav[ADDSET_PERSP_PROJ_ANGLE], options.baBehav[ADDSET_PERSP_PROJ_SHIFT], options.baBehav[ADDSET_PERSP_PROJ_ROTATE], options.baBehav[ADDSET_PERSP_CAM_SCALE]); + perspective->setAdjusterBehavior ( + options.baBehav[ADDSET_PERSPECTIVE], + options.baBehav[ADDSET_PERSP_CAM_FOCAL_LENGTH], + options.baBehav[ADDSET_PERSP_CAM_SHIFT], + options.baBehav[ADDSET_PERSP_CAM_ANGLE], + options.baBehav[ADDSET_PERSP_PROJ_ANGLE], + options.baBehav[ADDSET_PERSP_PROJ_SHIFT], + options.baBehav[ADDSET_PERSP_PROJ_ROTATE], + options.baBehav[ADDSET_PERSP_CAM_SCALE] + ); gradient->setAdjusterBehavior (options.baBehav[ADDSET_GRADIENT_DEGREE], options.baBehav[ADDSET_GRADIENT_FEATHER], options.baBehav[ADDSET_GRADIENT_STRENGTH], options.baBehav[ADDSET_GRADIENT_CENTER]); pcvignette->setAdjusterBehavior (options.baBehav[ADDSET_PCVIGNETTE_STRENGTH], options.baBehav[ADDSET_PCVIGNETTE_FEATHER], options.baBehav[ADDSET_PCVIGNETTE_ROUNDNESS]); cacorrection->setAdjusterBehavior (options.baBehav[ADDSET_CA]); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 2bad80c37..bd1264ae3 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -3312,7 +3312,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng } if (perspective.camera_scale) { - toEdit.perspective.camera_scale = dontforceSet && options.baBehav[ADDSET_PERSP_CAM_FOCAL_LENGTH] ? toEdit.perspective.camera_scale + mods.perspective.camera_scale : mods.perspective.camera_scale; + toEdit.perspective.camera_scale = + dontforceSet && options.baBehav[ADDSET_PERSP_CAM_FOCAL_LENGTH] + ? toEdit.perspective.camera_scale + mods.perspective.camera_scale + : mods.perspective.camera_scale; } if (perspective.camera_focal_length) { diff --git a/rtgui/perspective.cc b/rtgui/perspective.cc index aee2af69c..6a4266d22 100644 --- a/rtgui/perspective.cc +++ b/rtgui/perspective.cc @@ -474,7 +474,7 @@ void PerspCorrection::setDefaults (const ProcParams* defParams, const ParamsEdit camera_crop_factor->setDefaultEditedState (pedited->perspective.camera_crop_factor ? Edited : UnEdited); camera_focal_length->setDefaultEditedState (pedited->perspective.camera_focal_length ? Edited : UnEdited); camera_pitch->setDefaultEditedState (pedited->perspective.camera_pitch ? Edited : UnEdited); - camera_scale->setDefaultEditedState (std::abs(pedited->perspective.camera_scale-1) > 1e-6 ? Edited : UnEdited); + camera_scale->setDefaultEditedState (std::abs(pedited->perspective.camera_scale - 1.0) > 1e-6 ? Edited : UnEdited); camera_roll->setDefaultEditedState (pedited->perspective.camera_roll ? Edited : UnEdited); camera_shift_horiz->setDefaultEditedState (pedited->perspective.camera_shift_horiz ? Edited : UnEdited); camera_shift_vert->setDefaultEditedState (pedited->perspective.camera_shift_vert ? Edited : UnEdited); @@ -651,7 +651,16 @@ void PerspCorrection::defishChanged() } } -void PerspCorrection::setAdjusterBehavior (bool badd, bool camera_focal_length_add, bool camera_shift_add, bool camera_angle_add, bool projection_angle_add, bool projection_shift_add, bool projection_rotate_add, bool projection_scale_add) +void PerspCorrection::setAdjusterBehavior ( + bool badd, + bool camera_focal_length_add, + bool camera_shift_add, + bool camera_angle_add, + bool projection_angle_add, + bool projection_shift_add, + bool projection_rotate_add, + bool projection_scale_add +) { horiz->setAddMode(badd); diff --git a/rtgui/perspective.h b/rtgui/perspective.h index 69a0ce7c9..0cca2ecbf 100644 --- a/rtgui/perspective.h +++ b/rtgui/perspective.h @@ -65,7 +65,7 @@ protected: Adjuster* projection_pitch; Adjuster* projection_rotate; Adjuster* camera_scale; - Gtk::CheckButton *camera_defish; + Gtk::CheckButton* camera_defish; Adjuster* projection_shift_horiz; Adjuster* projection_shift_vert; Adjuster* projection_yaw; @@ -129,7 +129,16 @@ public: void methodChanged (void); void defishChanged (void); void requestApplyControlLines(void); - void setAdjusterBehavior (bool badd, bool camera_focal_length_add, bool camera_shift_add, bool camera_angle_add, bool projection_angle_add, bool projection_shift_add, bool projection_rotate_add, bool projection_scale_add); + void setAdjusterBehavior ( + bool badd, + bool camera_focal_length_add, + bool camera_shift_add, + bool camera_angle_add, + bool projection_angle_add, + bool projection_shift_add, + bool projection_rotate_add, + bool projection_scale_add + ); void setControlLineEditMode(bool active); void setEditProvider (EditDataProvider* provider) override; void setLensGeomListener (LensGeomListener* listener)