[ 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.1) 1.2 Affects Version/s: 1.1 1.0 > 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 > Reporter: Martin Desruisseaux > Assignee: Martin Desruisseaux > Priority: Minor > Labels: performance > Fix For: 1.2 > > > 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.3.4#803005)