This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit 98dd50f7ab7e1ed39f6c257fa36593e43e7bb570 Author: Martin Desruisseaux <[email protected]> AuthorDate: Fri May 27 10:58:55 2022 +0200 Revert commit 58cd2d406c5703fc029b0ad402bdbec30401e662 (removal of `sliceExtentProperty`) but without public access for now. We need this property for taking in account the slice selected by the slider. --- .../apache/sis/gui/coverage/CoverageCanvas.java | 86 +++++++++++++++++----- .../apache/sis/gui/coverage/CoverageControls.java | 11 +-- 2 files changed, 69 insertions(+), 28 deletions(-) diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageCanvas.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageCanvas.java index acb53c1a59..67bd1a3b66 100644 --- a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageCanvas.java +++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageCanvas.java @@ -161,6 +161,16 @@ public class CoverageCanvas extends MapCanvasAWT { */ private boolean isCoverageAdjusting; + /** + * A subspace of the grid coverage extent where all dimensions except two have a size of 1 cell. + * May be {@code null} if the grid coverage has only two dimensions with a size greater than 1 cell. + * + * @see #getSliceExtent() + * @see #setSliceExtent(GridExtent) + * @see GridCoverage#render(GridExtent) + */ + final ObjectProperty<GridExtent> sliceExtentProperty; + /** * The interpolation method to use for resampling the image. * @@ -243,9 +253,11 @@ public class CoverageCanvas extends MapCanvasAWT { derivedImages = new EnumMap<>(Stretching.class); resourceProperty = new SimpleObjectProperty<>(this, "resource"); coverageProperty = new SimpleObjectProperty<>(this, "coverage"); + sliceExtentProperty = new SimpleObjectProperty<>(this, "sliceExtent"); interpolationProperty = new SimpleObjectProperty<>(this, "interpolation", data.processor.getInterpolation()); resourceProperty .addListener((p,o,n) -> onPropertySpecified(n, null, coverageProperty)); coverageProperty .addListener((p,o,n) -> onPropertySpecified(null, n, resourceProperty)); + sliceExtentProperty .addListener((p,o,n) -> onPropertySpecified(getResource(), getCoverage(), null)); interpolationProperty.addListener((p,o,n) -> onInterpolationSpecified(n)); } @@ -342,21 +354,28 @@ public class CoverageCanvas extends MapCanvasAWT { } /** - * Sets both resource and coverage properties together. Typically only one of those properties is non-null. - * If both are non-null, then it is caller's responsibility to ensure that they are consistent. + * Returns a subspace of the grid coverage extent where all dimensions except two have a size of 1 cell. + * + * @return subspace of the grid coverage extent where all dimensions except two have a size of 1 cell. + * + * @see #sliceExtentProperty + * @see GridCoverage#render(GridExtent) */ - final void setCoverage(final GridCoverageResource resource, final GridCoverage coverage) { - if (getResource() != resource || getCoverage() != coverage) { - final boolean p = isCoverageAdjusting; - try { - isCoverageAdjusting = true; - setResource(resource); - setCoverage(coverage); - } finally { - isCoverageAdjusting = p; - } - onPropertySpecified(resource, coverage, null); - } + final GridExtent getSliceExtent() { + return sliceExtentProperty.get(); + } + + /** + * Sets a subspace of the grid coverage extent where all dimensions except two have a size of 1 cell. + * + * @param sliceExtent subspace of the grid coverage extent where all dimensions except two have a size of 1 cell. + * + * @see #sliceExtentProperty + * @see GridCoverage#render(GridExtent) + */ + final void setSliceExtent(final GridExtent sliceExtent) { + sliceExtentProperty.set(sliceExtent); + // Will indirectly invoke `onPropertySpecified(…)`. } /** @@ -454,6 +473,39 @@ public class CoverageCanvas extends MapCanvasAWT { clearIsolines(); } + /** + * Sets both resource and coverage properties together. Typically only one of those properties is non-null. + * If both are non-null, then it is caller's responsibility to ensure that they are consistent. + * + * @param request the resource or coverage to set, or {@code null} for clearing the view. + */ + final void setImage(final ImageRequest request) { + final GridCoverageResource resource; + final GridCoverage coverage; + final GridExtent sliceExtent; + if (request != null) { + resource = request.resource; + coverage = request.getCoverage().orElse(null); + sliceExtent = request.getSliceExtent().orElse(null); + } else { + resource = null; + coverage = null; + sliceExtent = null; + } + if (getResource() != resource || getCoverage() != coverage || getSliceExtent() != sliceExtent) { + final boolean p = isCoverageAdjusting; + try { + isCoverageAdjusting = true; + setResource(resource); + setCoverage(coverage); + setSliceExtent(sliceExtent); + } finally { + isCoverageAdjusting = p; + } + onPropertySpecified(resource, coverage, null); + } + } + /** * Invoked when a new value has been set on {@link #resourceProperty} or {@link #coverageProperty}. * This method fetches information such as the grid geometry and sample dimensions in a background thread. @@ -630,11 +682,8 @@ public class CoverageCanvas extends MapCanvasAWT { /** * The two-dimensional slice to display. - * - * @todo We do not yet have a mechanism for computing it. - * May become a non-static field in a future version. */ - private static final GridExtent sliceExtent = null; + private final GridExtent sliceExtent; /** * Value of {@link CoverageCanvas#data} at the time this worker has been initialized. @@ -718,6 +767,7 @@ public class CoverageCanvas extends MapCanvasAWT { resource = canvas.getResource(); coverage = canvas.getCoverage(); data = canvas.data.clone(); + sliceExtent = canvas.getSliceExtent(); objectiveCRS = canvas.getObjectiveCRS(); objectiveToDisplay = canvas.getObjectiveToDisplay(); displayBounds = canvas.getDisplayBounds(); diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageControls.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageControls.java index 9168dec7f0..76f630a8ca 100644 --- a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageControls.java +++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageControls.java @@ -181,15 +181,6 @@ final class CoverageControls extends ViewAndControls { */ @Override final void load(final ImageRequest request) { - final GridCoverageResource resource; - final GridCoverage coverage; - if (request != null) { - resource = request.resource; - coverage = request.getCoverage().orElse(null); - } else { - resource = null; - coverage = null; - } - view.setCoverage(resource, coverage); + view.setImage(request); } }
