Skip to content

Commit

Permalink
ttools: refactor Axis pan/zoom code
Browse files Browse the repository at this point in the history
Add new static utility methods pan and zoom to Axis class so that this
code can be used in absence of an Axis instance.
  • Loading branch information
mbtaylor committed Jan 3, 2014
1 parent b4038e3 commit df4c3fc
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 16 deletions.
56 changes: 49 additions & 7 deletions ttools/src/main/uk/ac/starlink/ttools/plot2/Axis.java
Expand Up @@ -289,13 +289,11 @@ public double graphicsToData( int g ) {
}

public double[] dataZoom( double d0, double factor ) {
return new double[] { d0 + ( dlo_ - d0 ) / factor,
d0 + ( dhi_ - d0 ) / factor };
return zoom( dlo_, dhi_, d0, factor, false );
}

public double[] dataPan( double d0, double d1 ) {
double d10 = d1 - d0;
return new double[] { dlo_ - d10, dhi_ - d10 };
return pan( dlo_, dhi_, d0, d1, false );
}
}

Expand Down Expand Up @@ -339,13 +337,57 @@ public double graphicsToData( int g ) {
}

public double[] dataZoom( double d0, double factor ) {
return new double[] { d0 * Math.pow( dlo_ / d0, 1. / factor ),
d0 * Math.pow( dhi_ / d0, 1. / factor ) };
return zoom( dlo_, dhi_, d0, factor, true );
}

public double[] dataPan( double d0, double d1 ) {
return pan( dlo_, dhi_, d0, d1, true );
}
}

/**
* Utility method for axis panning.
*
* @param dlo initial axis lower bound
* @param dhi initial axis upper bound
* @param d0 pan gesture start position
* @param d1 pan gesture end position
* @param isLog false for linear axis, true for logarithmic
* @return 2-element array giving final (panned) axis {lower,upper} bounds
*/
public static double[] pan( double dlo, double dhi,
double d0, double d1, boolean isLog ) {
if ( isLog ) {
double d10 = d0 / d1;
return new double[] { dlo_ * d10, dhi_ * d10 };
return new double[] { dlo * d10, dhi * d10 };
}
else {
double d10 = d1 - d0;
return new double[] { dlo - d10, dhi - d10 };
}
}

/**
* Utility method for axis zooming.
*
* @param dlo initial axis lower bound
* @param dhi initial axis upper bound
* @param d0 zoom gesture reference position
* @param factor zoom factor
* @param isLog false for linear axis, true for logarithmic
* @return 2-element array giving final (zoomed) axis {lower,upper} bounds
*/
public static double[] zoom( double dlo, double dhi,
double d0, double factor, boolean isLog ) {
if ( isLog ) {
double f1 = 1. / factor;
return new double[] { d0 * Math.pow( dlo / d0, f1 ),
d0 * Math.pow( dhi / d0, f1 ) };
}
else {
double f1 = 1. / factor;
return new double[] { d0 + ( dlo - d0 ) * f1,
d0 + ( dhi - d0 ) * f1 };
}
}
}
Expand Up @@ -638,15 +638,8 @@ private CubeAspect zoomData( double[] dpos0, double xFactor,
double[] factors = new double[] { xFactor, yFactor, zFactor };
double[][] limits = new double[ 3 ][];
for ( int i = 0; i < 3; i++ ) {
double d0 = dpos0[ i ];
double dlo = dlos_[ i ];
double dhi = dhis_[ i ];
double factor = factors[ i ];
limits[ i ] = logFlags_[ i ]
? new double[] { d0 * Math.pow( dlo / d0, 1. / factor ),
d0 * Math.pow( dhi / d0, 1. / factor ) }
: new double[] { d0 + ( dlo - d0 ) / factor,
d0 + ( dhi - d0 ) / factor };
limits[ i ] = Axis.zoom( dlos_[ i ], dhis_[ i ],
dpos0[ i ], factors[ i ], logFlags_[ i ] );
}
return new CubeAspect( limits[ 0 ], limits[ 1 ], limits[ 2 ],
rotmat_, zoom_, xoff_, yoff_ );
Expand Down

0 comments on commit df4c3fc

Please sign in to comment.