[
https://issues.apache.org/jira/browse/SIS-318?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Martin Desruisseaux updated SIS-318:
------------------------------------
Fix Version/s: (was: 1.4)
> Support PassThroughTransform directly into AbstractMathTransform
> ----------------------------------------------------------------
>
> Key: SIS-318
> URL: https://issues.apache.org/jira/browse/SIS-318
> Project: Spatial Information Systems
> Issue Type: Improvement
> Components: Referencing
> Affects Versions: 0.5, 0.6, 0.7, 0.8, 1.0, 1.1, 1.2, 1.3, 1.4
> Reporter: Martin Desruisseaux
> Assignee: Martin Desruisseaux
> Priority: Minor
> Labels: performance
>
> Add the 4 variants (for {{float[]}} and {{double[]}} arrays) of the following
> method in {{AbstractMathTransform}}:
> {code:java}
> protected void transform(double[] srcPts, int srcOff, int srcInc,
> double[] dstPts, int dstOff, int dstInc, int numPts)
> throws TransformException;
> {code}
> The difference compared to existing methods is the addition of {{srcInc}} and
> {{dstInc}} parameters. Then, move the {{AbstractMathTransform}} default
> implementations of {{transform(…)}} methods under those 4 new methods. The
> default implementation of previous methods would redirect to the new ones
> like below:
> {code:java}
> @Override
> public void transform(double[] srcPts, int srcOff,
> double[] dstPts, int dstOff, int numPts) throws
> TransformException
> {
> transform(srcPts, srcOff, getSourceDimensions(),
> dstPts, dstOff, getTargetDimensions(), numPts);
> }
> {code}
> This approach should ensure {{MathTransform}} methods consistency no matter
> if a sub-class override the old methods or the new ones. Modify all Apache
> SIS implementations that override the old methods for overriding the new ones
> instead.
> With those news methods, we can modify {{PassThroughTransform}}
> implementation for invoking those methods on the sub-transform with
> {{srcInc}} and {{dstInc}} values increased by {{firstAffectedOrdinate}} +
> {{numTrailingOrdinates}}. The performance benefit may be important since
> {{PassThroughTransform}} can hardly implement the {{transform}} method in an
> efficient way otherwise. We will still need the current
> {{transformOverlapping}} private method however as a fallback when array
> regions overlap.
> This approach would also make easier to concatenate the matrices of linear
> transforms. In the current implementation we lost a concatenation opportunity
> if one linear transform is the last {{MathTransform}} (in a chain of a
> concatenated transforms) inside the {{PassThroughTransform}}, while the other
> linear transform is the first {{MathTransform}} outside the
> {{PassThroughTransform}}. We could move the former linear transform outside
> the {{PassThroughTransform}}, but it cause confusing WKT to be formatted if
> the transforms inside the {{PassThroughTransform}} have a
> {{ContextualParameters}}. We expect that this problem would be solved with
> the fix proposed in this issue.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)