From bbd970f14e193d018c37f97f367513ab82513869 Mon Sep 17 00:00:00 2001 From: iSergio Date: Mon, 22 Jan 2024 10:09:23 +0300 Subject: [PATCH] New 3D Tiles Vertical Exaggeration example --- .../showcase/config/InjectorModule.java | 3 +- .../examples/Tiles3DVerticalExaggeration.java | 145 ++++++++++++++++++ .../3D Tiles Vertical Exaggeration.jpg | Bin 0 -> 16500 bytes .../examples/Tiles3DVerticalExaggeration.txt | 129 ++++++++++++++++ 4 files changed, 276 insertions(+), 1 deletion(-) create mode 100644 cesiumjs4gwt-showcase/src/main/java/org/cleanlogic/cesiumjs4gwt/showcase/examples/Tiles3DVerticalExaggeration.java create mode 100644 cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/examples/3D Tiles Vertical Exaggeration.jpg create mode 100644 cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/examples/Tiles3DVerticalExaggeration.txt diff --git a/cesiumjs4gwt-showcase/src/main/java/org/cleanlogic/cesiumjs4gwt/showcase/config/InjectorModule.java b/cesiumjs4gwt-showcase/src/main/java/org/cleanlogic/cesiumjs4gwt/showcase/config/InjectorModule.java index d9c56e6c..250b2305 100644 --- a/cesiumjs4gwt-showcase/src/main/java/org/cleanlogic/cesiumjs4gwt/showcase/config/InjectorModule.java +++ b/cesiumjs4gwt-showcase/src/main/java/org/cleanlogic/cesiumjs4gwt/showcase/config/InjectorModule.java @@ -133,8 +133,9 @@ public class InjectorModule extends AbstractGinModule { bind(I3S3DObjectLayer.class).asEagerSingleton(); bind(I3SFeaturePicking.class).asEagerSingleton(); bind(AerometrexSanFrancisco.class).asEagerSingleton(); - bind(GooglePhotorealistic3DTiles.class).asEagerSingleton(); bind(GooglePhotorealistic3DTilesWithBuildingInsert.class).asEagerSingleton(); + + bind(Tiles3DVerticalExaggeration.class).asEagerSingleton(); } } diff --git a/cesiumjs4gwt-showcase/src/main/java/org/cleanlogic/cesiumjs4gwt/showcase/examples/Tiles3DVerticalExaggeration.java b/cesiumjs4gwt-showcase/src/main/java/org/cleanlogic/cesiumjs4gwt/showcase/examples/Tiles3DVerticalExaggeration.java new file mode 100644 index 00000000..d2a94584 --- /dev/null +++ b/cesiumjs4gwt-showcase/src/main/java/org/cleanlogic/cesiumjs4gwt/showcase/examples/Tiles3DVerticalExaggeration.java @@ -0,0 +1,145 @@ +/* + * Copyright 2024 iSergio, Gis4Fun. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.cleanlogic.cesiumjs4gwt.showcase.examples; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.*; +import org.cesiumjs.cs.Cesium; +import org.cesiumjs.cs.core.Cartesian3; +import org.cesiumjs.cs.scene.Scene; +import org.cesiumjs.cs.scene.options.ViewOptions; +import org.cesiumjs.cs.widgets.Viewer; +import org.cesiumjs.cs.widgets.ViewerPanel; +import org.cesiumjs.cs.widgets.options.ViewerOptions; +import org.cleanlogic.cesiumjs4gwt.showcase.basic.AbstractExample; +import org.cleanlogic.cesiumjs4gwt.showcase.components.store.ShowcaseExampleStore; +import org.cleanlogic.cesiumjs4gwt.showcase.examples.slider.InputEvent; +import org.cleanlogic.cesiumjs4gwt.showcase.examples.slider.SliderBox; + +import javax.inject.Inject; + +public class Tiles3DVerticalExaggeration extends AbstractExample { + private SliderBox exaggerationSlider; + private TextBox exaggerationTBox; + private SliderBox relativeHeightSlider; + private TextBox relativeHeightTBox; + + private Scene scene; + + @Inject + public Tiles3DVerticalExaggeration(ShowcaseExampleStore store) { + super("3D Tiles Vertical Exaggeration", "Apply Vertical Exaggeration to 3D Tiles.", + new String[]{"Showcase", "Cesium", "3D Tiles", "Exaggeration"}, store, "1.113"); + } + + @Override + public void buildPanel() { + ViewerOptions options = new ViewerOptions(); + options.timeline = false; + options.animation = false; + options.sceneModePicker = false; + options.baseLayerPicker = false; + // The globe does not need to be displayed, + options.globe = null; + // since the Photorealistic 3D Tiles include terrain + ViewerPanel csVPanel = new ViewerPanel(options); + + Viewer viewer = csVPanel.getViewer(); + scene = viewer.scene(); + scene.verticalExaggeration = 3.0; + + ViewOptions viewOptions = new ViewOptions(); + viewOptions.destinationPos = new Cartesian3(-2710292.813384663, -4360657.061518585, 3793571.786860543); + viewOptions.orientation = new org.cesiumjs.cs.core.HeadingPitchRoll(5.794062761901799, -0.30293409742984756, 0.0009187098191985044); + scene.camera().setView(viewOptions); + + scene.skyAtmosphere.show = true; + + Cesium.createGooglePhotorealistic3DTileset().then(value -> scene.primitives().add(value)); + + HorizontalPanel exaggerationHPanel = new HorizontalPanel(); + exaggerationHPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); + exaggerationHPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); + exaggerationHPanel.setSpacing(10); + exaggerationSlider = new SliderBox(1., scene.verticalExaggeration, 5., 0.01); + exaggerationSlider.setStep(0.01); + exaggerationSlider.setWidth("150px"); + exaggerationSlider.addInputHandler(this::onSliderInput); + exaggerationTBox = new TextBox(); + exaggerationTBox.setText(scene.verticalExaggeration + ""); + exaggerationTBox.setSize("30px", "12px"); + exaggerationHPanel.add(exaggerationSlider); + exaggerationHPanel.add(exaggerationTBox); + + HorizontalPanel relativeHeightHPanel = new HorizontalPanel(); + relativeHeightHPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); + relativeHeightHPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); + relativeHeightHPanel.setSpacing(10); + relativeHeightSlider = new SliderBox(-1000, scene.verticalExaggerationRelativeHeight, 9000, 1.); + relativeHeightSlider.setStep(1); + relativeHeightSlider.setWidth("150px"); + relativeHeightSlider.addInputHandler(this::onSliderInput); + relativeHeightTBox = new TextBox(); + relativeHeightTBox.setText(scene.verticalExaggerationRelativeHeight + ""); + relativeHeightTBox.setSize("30px", "12px"); + relativeHeightHPanel.add(relativeHeightSlider); + relativeHeightHPanel.add(relativeHeightTBox); + + FlexTable flexTable = new FlexTable(); + flexTable.setHTML(1, 0, "Exaggeration"); + flexTable.setWidget(1, 1, exaggerationHPanel); + flexTable.setWidget(2, 0, new HTML("Relative Height")); + flexTable.setWidget(2, 1, relativeHeightHPanel); + + AbsolutePanel aPanel = new AbsolutePanel(); + aPanel.add(csVPanel); + aPanel.add(flexTable, 20, 20); + + contentPanel.add(new HTML( + "

3D Tiles Vertical Exaggeration.

")); + contentPanel.add(aPanel); + + initWidget(contentPanel); + } + + @Override + public String[] getSourceCodeURLs() { + String[] sourceCodeURLs = new String[1]; + sourceCodeURLs[0] = GWT.getModuleBaseURL() + "examples/" + "Tiles3DVerticalExaggeration.txt"; + return sourceCodeURLs; + } + + private void onSliderInput(InputEvent event) { + SliderBox source = (SliderBox) event.getSource(); + double value = source.getValue(); + if (source.equals(exaggerationSlider)) { + onExaggerationInput(value); + } else if (source.equals(relativeHeightSlider)) { + onRelativeHeightInput(value); + } + } + + private void onExaggerationInput(double value) { + scene.verticalExaggeration = value; + exaggerationTBox.setText(String.valueOf(value)); + } + + private void onRelativeHeightInput(double value) { + scene.verticalExaggerationRelativeHeight = value; + relativeHeightTBox.setText(String.valueOf(value)); + } +} diff --git a/cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/examples/3D Tiles Vertical Exaggeration.jpg b/cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/examples/3D Tiles Vertical Exaggeration.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3db48e2ae825ed23191573d505438428c4023fab GIT binary patch literal 16500 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⁢*T@^P^{ut-lf~i4y|lEyhu((3aF;DX*slFf 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 awzBpqF{#LdNg})#!oMTEY<_^B=l(Aijxh89 literal 0 HcmV?d00001 diff --git a/cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/examples/Tiles3DVerticalExaggeration.txt b/cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/examples/Tiles3DVerticalExaggeration.txt new file mode 100644 index 00000000..763ea15a --- /dev/null +++ b/cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/examples/Tiles3DVerticalExaggeration.txt @@ -0,0 +1,129 @@ +package org.cleanlogic.cesiumjs4gwt.showcase.examples; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.*; +import org.cesiumjs.cs.Cesium; +import org.cesiumjs.cs.core.Cartesian3; +import org.cesiumjs.cs.scene.Scene; +import org.cesiumjs.cs.scene.options.ViewOptions; +import org.cesiumjs.cs.widgets.Viewer; +import org.cesiumjs.cs.widgets.ViewerPanel; +import org.cesiumjs.cs.widgets.options.ViewerOptions; +import org.cleanlogic.cesiumjs4gwt.showcase.basic.AbstractExample; +import org.cleanlogic.cesiumjs4gwt.showcase.components.store.ShowcaseExampleStore; +import org.cleanlogic.cesiumjs4gwt.showcase.examples.slider.InputEvent; +import org.cleanlogic.cesiumjs4gwt.showcase.examples.slider.SliderBox; + +import javax.inject.Inject; + +public class Tiles3DVerticalExaggeration extends AbstractExample { + private SliderBox exaggerationSlider; + private TextBox exaggerationTBox; + private SliderBox relativeHeightSlider; + private TextBox relativeHeightTBox; + + private Scene scene; + + @Inject + public Tiles3DVerticalExaggeration(ShowcaseExampleStore store) { + super("3D Tiles Vertical Exaggeration", "Apply Vertical Exaggeration to 3D Tiles.", + new String[]{"Showcase", "Cesium", "3D Tiles", "Exaggeration"}, store, "1.113"); + } + + @Override + public void buildPanel() { + ViewerOptions options = new ViewerOptions(); + options.timeline = false; + options.animation = false; + options.sceneModePicker = false; + options.baseLayerPicker = false; + // The globe does not need to be displayed, + options.globe = null; + // since the Photorealistic 3D Tiles include terrain + ViewerPanel csVPanel = new ViewerPanel(options); + + Viewer viewer = csVPanel.getViewer(); + scene = viewer.scene(); + scene.verticalExaggeration = 3.0; + + ViewOptions viewOptions = new ViewOptions(); + viewOptions.destinationPos = new Cartesian3(-2710292.813384663, -4360657.061518585, 3793571.786860543); + viewOptions.orientation = new org.cesiumjs.cs.core.HeadingPitchRoll(5.794062761901799, -0.30293409742984756, 0.0009187098191985044); + scene.camera().setView(viewOptions); + + scene.skyAtmosphere.show = true; + + Cesium.createGooglePhotorealistic3DTileset().then(value -> scene.primitives().add(value)); + + HorizontalPanel exaggerationHPanel = new HorizontalPanel(); + exaggerationHPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); + exaggerationHPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); + exaggerationHPanel.setSpacing(10); + exaggerationSlider = new SliderBox(1., scene.verticalExaggeration, 5., 0.01); + exaggerationSlider.setStep(0.01); + exaggerationSlider.setWidth("150px"); + exaggerationSlider.addInputHandler(this::onSliderInput); + exaggerationTBox = new TextBox(); + exaggerationTBox.setText(scene.verticalExaggeration + ""); + exaggerationTBox.setSize("30px", "12px"); + exaggerationHPanel.add(exaggerationSlider); + exaggerationHPanel.add(exaggerationTBox); + + HorizontalPanel relativeHeightHPanel = new HorizontalPanel(); + relativeHeightHPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); + relativeHeightHPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); + relativeHeightHPanel.setSpacing(10); + relativeHeightSlider = new SliderBox(-1000, scene.verticalExaggerationRelativeHeight, 9000, 1.); + relativeHeightSlider.setStep(1); + relativeHeightSlider.setWidth("150px"); + relativeHeightSlider.addInputHandler(this::onSliderInput); + relativeHeightTBox = new TextBox(); + relativeHeightTBox.setText(scene.verticalExaggerationRelativeHeight + ""); + relativeHeightTBox.setSize("30px", "12px"); + relativeHeightHPanel.add(relativeHeightSlider); + relativeHeightHPanel.add(relativeHeightTBox); + + FlexTable flexTable = new FlexTable(); + flexTable.setHTML(1, 0, "Exaggeration"); + flexTable.setWidget(1, 1, exaggerationHPanel); + flexTable.setWidget(2, 0, new HTML("Relative Height")); + flexTable.setWidget(2, 1, relativeHeightHPanel); + + AbsolutePanel aPanel = new AbsolutePanel(); + aPanel.add(csVPanel); + aPanel.add(flexTable, 20, 20); + + contentPanel.add(new HTML( + "

3D Tiles Vertical Exaggeration.

")); + contentPanel.add(aPanel); + + initWidget(contentPanel); + } + + @Override + public String[] getSourceCodeURLs() { + String[] sourceCodeURLs = new String[1]; + sourceCodeURLs[0] = GWT.getModuleBaseURL() + "examples/" + "Tiles3DVerticalExaggeration.txt"; + return sourceCodeURLs; + } + + private void onSliderInput(InputEvent event) { + SliderBox source = (SliderBox) event.getSource(); + double value = source.getValue(); + if (source.equals(exaggerationSlider)) { + onExaggerationInput(value); + } else if (source.equals(relativeHeightSlider)) { + onRelativeHeightInput(value); + } + } + + private void onExaggerationInput(double value) { + scene.verticalExaggeration = value; + exaggerationTBox.setText(String.valueOf(value)); + } + + private void onRelativeHeightInput(double value) { + scene.verticalExaggerationRelativeHeight = value; + relativeHeightTBox.setText(String.valueOf(value)); + } +} -- GitLab