diff --git a/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx b/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx index 87e21aba125b8a9f753e01c63023a974b1c7be52..2371d985bdbfaa6248c96c20279a6af437472624 100644 --- a/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx +++ b/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx @@ -412,18 +412,17 @@ private: ComputeIndexFromExtent() { assert( GetParameterString( "mode" ) == "extent" ); - int pixelValue = -1 ; // Compute standard parameter depending on the unit chosen by the user if (GetParameterString( "mode.extent.unit" ) == "pxl" ) { - pixelValue = std::round( GetParameterFloat( "mode.extent.ulx" ) ); + int pixelValue = std::round( GetParameterFloat( "mode.extent.ulx" ) ); SetParameterInt( "startx", pixelValue); - pixelValue = std::round( GetParameterFloat( "mode.extent.lrx" ) \ + pixelValue = std::round( GetParameterFloat( "mode.extent.lrx" ) - pixelValue ) + 1 ; SetParameterInt( "sizex", pixelValue); pixelValue = std::round( GetParameterFloat( "mode.extent.uly" ) ); SetParameterInt( "starty", pixelValue); - pixelValue = std::round( GetParameterFloat( "mode.extent.lry" ) \ + pixelValue = std::round( GetParameterFloat( "mode.extent.lry" ) - pixelValue ) + 1 ; SetParameterInt( "sizey", pixelValue); } @@ -447,7 +446,7 @@ private: SetParameterInt( "sizey", lri[1] - uli[1] + 1); } - else if( GetParameterString( "mode.extent.unit" ) == "lonlat" ) + else // if( GetParameterString( "mode.extent.unit" ) == "lonlat" ) { RSTransformType::Pointer rsTransform = RSTransformType::New(); ImageType* inImage = GetParameterImage("in"); @@ -484,24 +483,24 @@ private: lri[ 1 ] = largestRegion.GetSize()[1]; if ( GetParameterString( "mode.extent.unit" ) == "pxl" ) { - SetParameterFloat("mode.extent.ulx", uli[0]); - SetParameterFloat("mode.extent.uly", uli[1]); - SetParameterFloat("mode.extent.lrx", lri[0]); - SetParameterFloat("mode.extent.lry", lri[1]); + SetDefaultParameterFloat("mode.extent.ulx", uli[0]); + SetDefaultParameterFloat("mode.extent.uly", uli[1]); + SetDefaultParameterFloat("mode.extent.lrx", lri[0]); + SetDefaultParameterFloat("mode.extent.lry", lri[1]); } else if ( GetParameterString( "mode.extent.unit" ) == "phy" ) { itk::Point<float, 2> ulp, lrp; input->TransformIndexToPhysicalPoint(uli,ulp); - SetParameterFloat("mode.extent.ulx",ulp[0]); - SetParameterFloat("mode.extent.uly",ulp[1]); + SetDefaultParameterFloat("mode.extent.ulx",ulp[0]); + SetDefaultParameterFloat("mode.extent.uly",ulp[1]); input->TransformIndexToPhysicalPoint(lri,lrp); - SetParameterFloat("mode.extent.lrx",lrp[0]); - SetParameterFloat("mode.extent.lry",lrp[1]); + SetDefaultParameterFloat("mode.extent.lrx",lrp[0]); + SetDefaultParameterFloat("mode.extent.lry",lrp[1]); } - else if ( GetParameterString( "mode.extent.unit" ) == "lonlat" ) + else // if ( GetParameterString( "mode.extent.unit" ) == "lonlat" ) { RSTransformType::Pointer rsTransform = RSTransformType::New(); rsTransform->SetInputKeywordList( input->GetImageKeywordlist() ); @@ -510,14 +509,26 @@ private: itk::Point<float, 2> ulp_in, lrp_in , ulp_out , lrp_out; input->TransformIndexToPhysicalPoint(uli,ulp_in); ulp_out = rsTransform->TransformPoint( ulp_in ); - SetParameterFloat( "mode.extent.ulx" , ulp_out[ 0 ]); - SetParameterFloat( "mode.extent.uly" , ulp_out[ 1 ]); + SetDefaultParameterFloat( "mode.extent.ulx" , ulp_out[ 0 ]); + SetDefaultParameterFloat( "mode.extent.uly" , ulp_out[ 1 ]); input->TransformIndexToPhysicalPoint( lri , lrp_in ); lrp_out = rsTransform->TransformPoint( lrp_in ); - SetParameterFloat( "mode.extent.lrx" , lrp_out[ 0 ]); - SetParameterFloat( "mode.extent.lry" , lrp_out[ 1 ]); + SetDefaultParameterFloat( "mode.extent.lrx" , lrp_out[ 0 ]); + SetDefaultParameterFloat( "mode.extent.lry" , lrp_out[ 1 ]); } + if ( !HasUserValue( "mode.extent.ulx" ) ) + SetParameterFloat( "mode.extent.ulx" , + GetDefaultParameterFloat( "mode.extent.ulx" ) ); + if ( !HasUserValue( "mode.extent.uly" ) ) + SetParameterFloat( "mode.extent.uly" , + GetDefaultParameterFloat( "mode.extent.uly" ) ); + if ( !HasUserValue( "mode.extent.lrx" ) ) + SetParameterFloat( "mode.extent.lrx" , + GetDefaultParameterFloat( "mode.extent.lrx" ) ); + if ( !HasUserValue( "mode.extent.lry" ) ) + SetParameterFloat( "mode.extent.lry" , + GetDefaultParameterFloat( "mode.extent.lry" ) ); } void @@ -526,7 +537,7 @@ private: int pixelValue = -1; assert( GetParameterString( "mode" ) == "radius" ); // First compute sizex sizey thanks to the radius - if ( HasUserValue( "mode.radius.r" ) ) + if ( HasValue( "mode.radius.r" ) ) { if ( GetParameterString( "mode.radius.unitr" ) == "pxl" ) { @@ -577,20 +588,19 @@ private: } // Then compute startx and starty - bool size = ( HasValue("sizex") && HasValue("sizey") ); - if ( size ) + if ( HasValue("sizex") && HasValue("sizey") ) { int radiusxi = GetParameterInt("sizex") / 2 ; int radiusyi = GetParameterInt("sizey") / 2 ; - if ( GetParameterString( "mode.radius.unitc" ) == "pxl" && size ) + if ( GetParameterString( "mode.radius.unitc" ) == "pxl" ) { pixelValue = std::round(GetParameterFloat( "mode.radius.cx" )); SetParameterInt( "startx", pixelValue - radiusxi); pixelValue = std::round(GetParameterFloat( "mode.radius.cy" )); SetParameterInt( "starty", pixelValue - radiusyi); } - if ( GetParameterString( "mode.radius.unitc" ) == "phy" && size ) + else if ( GetParameterString( "mode.radius.unitc" ) == "phy" ) { ImageType * inImage = GetParameterImage("in"); itk::Point<float, 2> centerp; @@ -604,7 +614,7 @@ private: SetParameterInt( "starty", centeri[1] - radiusyi); } } - if ( GetParameterString( "mode.radius.unitc" ) == "lonlat" && size ) + else // if ( GetParameterString( "mode.radius.unitc" ) == "lonlat" ) { ImageType* inImage = GetParameterImage("in"); RSTransformType::Pointer rsTransform = RSTransformType::New(); @@ -645,7 +655,7 @@ private: int rad = std::min( centeri[ 0 ], centeri[ 1 ] ); SetDefaultParameterFloat( "mode.radius.r" , rad); } - if ( GetParameterString("mode.radius.unitr") == "phy" ) + else // if ( GetParameterString("mode.radius.unitr") == "phy" ) { itk::Point<float, 2> centerp , helpRxp, helpRyp; input->TransformIndexToPhysicalPoint(centeri,centerp); @@ -654,22 +664,25 @@ private: float rad = std::min( helpRxp[0] - helpRyp[0] , helpRyp[1] - helpRxp[1] ); SetDefaultParameterFloat( "mode.radius.r" , rad); } - // if ( !HasUserValue( "mode.radius.r" ) - // setvalueasdefault + if ( !HasUserValue( "mode.radius.r" ) ) + SetParameterFloat( "mode.radius.r" , + GetDefaultParameterFloat( "mode.radius.r" ) ); + + // Center if ( GetParameterString("mode.radius.unitc") == "pxl" ) { SetDefaultParameterFloat( "mode.radius.cx" , centeri[0] ); SetDefaultParameterFloat( "mode.radius.cy" , centeri[1] ); } - if ( GetParameterString("mode.radius.unitc") == "phy" ) + else if ( GetParameterString("mode.radius.unitc") == "phy" ) { itk::Point<float, 2> centerp ; input->TransformIndexToPhysicalPoint(centeri,centerp); SetDefaultParameterFloat( "mode.radius.cx" , centerp[0] ); SetDefaultParameterFloat( "mode.radius.cy" , centerp[1] ); } - if ( GetParameterString("mode.radius.unitc") == "lonlat" ) + else // if ( GetParameterString("mode.radius.unitc") == "lonlat" ) { RSTransformType::Pointer rsTransform = RSTransformType::New(); rsTransform->SetInputKeywordList( input->GetImageKeywordlist() ); @@ -681,10 +694,12 @@ private: SetDefaultParameterFloat( "mode.radius.cx" , centerp_out[ 0 ]); SetDefaultParameterFloat( "mode.radius.cy" , centerp_out[ 1 ]); } - // if ( !HasUserValue( "mode.radius.cx")) - //setasdefault - // if ( !HasUserValue( "mode.radius.cy")) - //setasdefault + if ( !HasUserValue( "mode.radius.cx") ) + SetParameterFloat( "mode.radius.cx" , + GetDefaultParameterFloat( "mode.radius.cx" ) ); + if ( !HasUserValue( "mode.radius.cy") ) + SetParameterFloat( "mode.radius.cy" , + GetDefaultParameterFloat( "mode.radius.cy" ) ); } void