}
/*
* Finds the axis for the two dimensional parts. We infer them from the grid range.
* If no grid range were specified, then we assume that they are the 2 first dimensions.
*/
final DimensionFilter filter = DimensionFilter.getInstance(hints);
if (gridRange != null) {
final int dimension = gridRange.getDimension();
for (int i=0; i<dimension; i++) {
if (gridRange.getSpan(i) > 1) {
filter.addSourceDimension(i);
}
}
} else {
filter.addSourceDimensionRange(0, 2);
}
Exception cause = null;
int[] dimensions = filter.getSourceDimensions();
/*
* Select a math transform that operate only on the two dimensions choosen above.
* If such a math transform doesn't have exactly 2 output dimensions, then select
* the same output dimensions than the input ones.
*/
MathTransform candidate;
if (dimensions.length == 2) {
axis[0] = dimensions[0]; // gridDimensionX
axis[1] = dimensions[1]; // gridDimensionY
try {
candidate = filter.separate(transform);
if (candidate.getTargetDimensions() != 2) {
filter.clear();
filter.addSourceDimensions(dimensions);
filter.addTargetDimensions(dimensions);
candidate = filter.separate(transform);
}
dimensions = filter.getTargetDimensions();
axis[2] = dimensions[0]; // axisDimensionX
axis[3] = dimensions[1]; // axisDimensionY
try {
return (MathTransform2D) candidate;
} catch (ClassCastException exception) {