Commit f34d5a05 authored by iSergio's avatar iSergio
Browse files

Fix SliderBox and fix examples

parent f2d0a716
Loading
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -17,9 +17,9 @@
package org.cesiumjs.cs.core;

import jsinterop.annotations.JsConstructor;
import jsinterop.annotations.JsFunction;
import jsinterop.annotations.JsMethod;
import jsinterop.annotations.JsType;
import org.cesiumjs.cs.scene.Scene;

/**
 * A set of functions to detect whether the current browser supports various
@@ -37,6 +37,14 @@ public class FeatureDetection {
    private FeatureDetection() {
    }

    /**
     * Detects whether the current browser supports Basis Universal textures and the web assembly modules needed
     * to transcode them.
     * @param scene Scene
     * @return true if the browser supports web assembly modules and the scene supports Basis Universal textures, false if not.
     */
    public static native boolean supportsBasis(Scene scene);

    /**
     * Detects whether the current browser supports BigInt.
     * @return true if the browser supports BigInt, false if not.
+56 −31
Original line number Diff line number Diff line
@@ -18,11 +18,12 @@ package org.cleanlogic.cesiumjs4gwt.showcase.examples;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.ListBox;
import org.cesiumjs.cs.core.Cartesian3;
import org.cesiumjs.cs.core.FeatureDetection;
import org.cesiumjs.cs.core.Math;
import org.cesiumjs.cs.core.Quaternion;
import org.cesiumjs.cs.core.Transforms;
@@ -55,7 +56,8 @@ public class Models3D extends AbstractExample {
        ViewerOptions csViewerOptions = new ViewerOptions();
        csViewerOptions.infoBox = false;
        csViewerOptions.selectionIndicator = false;
        csViewerOptions.shadows = false;
        csViewerOptions.shadows = true;
        csViewerOptions.shouldAnimate = true;
        csVPanel = new ViewerPanel(csViewerOptions);

        ModelGraphicsOptions modelGraphicsOptions = new ModelGraphicsOptions();
@@ -80,51 +82,74 @@ public class Models3D extends AbstractExample {

        final ListBox modelsLBox = new ListBox();
        modelsLBox.addItem("Aircraft", "0");
        modelsLBox.addItem("Ground vehicle", "1");
        modelsLBox.addItem("Hot Air Balloon", "2");
        modelsLBox.addItem("Milk truck", "3");
        modelsLBox.addItem("Skinned character", "4");
        modelsLBox.addChangeHandler(new ChangeHandler() {
        modelsLBox.addItem("Drone", "1");
        modelsLBox.addItem("Ground vehicle", "2");
        modelsLBox.addItem("Hot Air Balloon", "3");
        modelsLBox.addItem("Milk truck", "4");
        modelsLBox.addItem("Skinned character", "5");
        modelsLBox.addItem("Unlit Box", "6");
        modelsLBox.addItem("Draco Compressed Model", "7");
        modelsLBox.addItem("KTX2 Compressed Balloon", "8");
        modelsLBox.addItem("Instanced Box", "9");
        modelsLBox.addChangeHandler(this::onChange);

        AbsolutePanel aPanel = new AbsolutePanel();
        aPanel.add(csVPanel);
        aPanel.add(modelsLBox, 20, 20);

        contentPanel.add(new HTML("<p>Create 3D models using glTF.</p>"));
        contentPanel.add(aPanel);

        initWidget(contentPanel);
    }

    @Override
            public void onChange(ChangeEvent changeEvent) {
    public String[] getSourceCodeURLs() {
        String[] sourceCodeURLs = new String[1];
        sourceCodeURLs[0] = GWT.getModuleBaseURL() + "examples/" + "Models3D.txt";
        return sourceCodeURLs;
    }

    private void onChange(ChangeEvent event) {
        csVPanel.getViewer().entities().removeAll();
                switch (modelsLBox.getSelectedValue()) {
        ListBox source = (ListBox) event.getSource();
        switch (source.getSelectedValue()) {
            case "0":
                createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumAir/Cesium_Air.glb", 5000.0);
                break;
            case "1":
                        createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumGround/Cesium_Ground.glb", 0);
                createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumDrone/CesiumDrone.glb", 150.0);
                break;
            case "2":
                        createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumBalloon/CesiumBalloon.glb", 1000.0);
                createModel(GWT.getModuleBaseURL() + "SampleData/models/GroundVehicle/GroundVehicle.glb", 0);
                break;
            case "3":
                        createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumMilkTruck/CesiumMilkTruck-kmc.glb", 0);
                createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumBalloon/CesiumBalloon.glb", 1000.0);
                break;
            case "4":
                createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumMilkTruck/CesiumMilkTruck.glb", 0);
                break;
            case "5":
                createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumMan/Cesium_Man.glb", 0);
                break;
                    default:
            case "6":
                createModel(GWT.getModuleBaseURL() + "SampleData/models/BoxUnlit/BoxUnlit.gltf", 10.0);
                break;
            case "7":
                createModel(GWT.getModuleBaseURL() + "SampleData/models/DracoCompressed/CesiumMilkTruck.gltf", 0);
                break;
            case "8":
                if (!FeatureDetection.supportsBasis(csVPanel.getViewer().scene())) {
                    Window.alert("This browser does not support Basis Universal compressed textures");
                }
                createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumBalloonKTX2/CesiumBalloonKTX2.glb", 1000.0);
                break;
            case "9":
                createModel(GWT.getModuleBaseURL() + "SampleData/models/BoxInstanced/BoxInstanced.gltf", 15);
                break;
            default:
                break;
        }
        });

        AbsolutePanel aPanel = new AbsolutePanel();
        aPanel.add(csVPanel);
        aPanel.add(modelsLBox, 20, 20);

        contentPanel.add(new HTML("<p>Create 3D models using glTF.</p>"));
        contentPanel.add(aPanel);

        initWidget(contentPanel);
    }

    @Override
    public String[] getSourceCodeURLs() {
        String[] sourceCodeURLs = new String[1];
        sourceCodeURLs[0] = GWT.getModuleBaseURL() + "examples/" + "Models3D.txt";
        return sourceCodeURLs;
    }

    private void createModel(String url, double height) {
+6 −5
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ public class Models3DColoring extends AbstractExample {
    private String colorStr = "red";
    private float alpha = 1.0f;
    private Number colorBlendMode = ColorBlendMode.HIGHLIGHT();
    private float colorBlendAmount = 0.5f;
    private double colorBlendAmount = 0.5f;

    private Color silhouetteColor = Color.RED();
    private String silhouetteColorStr = "red";
@@ -76,6 +76,7 @@ public class Models3DColoring extends AbstractExample {
        csViewerOptions.infoBox = false;
        csViewerOptions.selectionIndicator = false;
        csViewerOptions.shadows = false;
        csViewerOptions.shouldAnimate = true;
        csVPanel = new ViewerPanel(csViewerOptions);

        ModelGraphicsOptions modelGraphicsOptions = new ModelGraphicsOptions();
@@ -245,7 +246,7 @@ public class Models3DColoring extends AbstractExample {
        if (source == alphaSlider) {
            onAlphaInput(value);
        } else if (source == mixSlider) {
            onMixInput(value);
            onMixInput((double) value);
        } else if (source == silhouetteAlphaSlider) {
            onSilhouetteAlphaInput(value);
        } else if (source == silhouetteSizeSlider) {
@@ -259,7 +260,7 @@ public class Models3DColoring extends AbstractExample {
        csVPanel.getViewer().trackedEntity.model.color = new ConstantProperty<>(getColor(colorStr, alpha));
    }

    private void onMixInput(float value) {
    private void onMixInput(double value) {
        mixTBox.setValue(String.valueOf(value));
        colorBlendAmount = value;
        csVPanel.getViewer().trackedEntity.model.colorBlendAmount = new ConstantProperty<>(colorBlendAmount);
@@ -354,13 +355,13 @@ public class Models3DColoring extends AbstractExample {
                createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumAir/Cesium_Air.glb", 5000.0);
                break;
            case "1":
                createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumGround/Cesium_Ground.glb", 0);
                createModel(GWT.getModuleBaseURL() + "SampleData/models/GroundVehicle/GroundVehicle.glb", 0);
                break;
            case "2":
                createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumBalloon/CesiumBalloon.glb", 1000.0);
                break;
            case "3":
                createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumMilkTruck/CesiumMilkTruck-kmc.glb", 0);
                createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumMilkTruck/CesiumMilkTruck.glb", 0);
                break;
            case "4":
                createModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumMan/Cesium_Man.glb", 0);
+6 −15
Original line number Diff line number Diff line
@@ -17,8 +17,6 @@
package org.cleanlogic.cesiumjs4gwt.showcase.examples;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlexTable;
@@ -95,24 +93,24 @@ public class PostProcessing extends AbstractExample {

        silhouetteCBox = new CheckBox();
        silhouetteCBox.setValue(true);
        silhouetteCBox.addValueChangeHandler(new MValueChangeHandler());
        silhouetteCBox.addValueChangeHandler(event -> updatePostProcess(null));

        blackAndWhiteCBox = new CheckBox();
        blackAndWhiteCBox.addValueChangeHandler(new MValueChangeHandler());
        blackAndWhiteCBox.addValueChangeHandler(event -> updatePostProcess(null));

        blackAndWhiteSlider = new SliderBox(1, 5, 10, 1);
        blackAndWhiteSlider.setWidth("150px");
        blackAndWhiteSlider.addInputHandler(this::updatePostProcess);

        brightnessCBox = new CheckBox();
        brightnessCBox.addValueChangeHandler(new MValueChangeHandler());
        brightnessCBox.addValueChangeHandler(event -> updatePostProcess(null));

        brightnessSlider = new SliderBox(0, 0.5, 1, 0.01);
        brightnessSlider.setWidth("150px");
        brightnessSlider.addInputHandler(this::updatePostProcess);

        nightVisionCBox = new CheckBox();
        nightVisionCBox.addValueChangeHandler(new MValueChangeHandler());
        nightVisionCBox.addValueChangeHandler(event -> updatePostProcess(null));

        FlexTable flexTable = new FlexTable();
        flexTable.setHTML(1, 0, "<font color=\"white\">Silhouette</font>");
@@ -142,10 +140,10 @@ public class PostProcessing extends AbstractExample {
        silhouette.uniforms.setProperty("color", Color.YELLOW());

        blackAndWhite.enabled = blackAndWhiteCBox.getValue();
        blackAndWhite.uniforms().setProperty("gradations", blackAndWhiteSlider.getValue());
        blackAndWhite.uniforms().setProperty("gradations", Double.parseDouble(blackAndWhiteSlider.getValue()));

        brightness.enabled = brightnessCBox.getValue();
        brightness.uniforms().setProperty("brightness", brightnessSlider.getValue());
        brightness.uniforms().setProperty("brightness", Double.parseDouble(brightnessSlider.getValue()));

        nightVision.enabled = nightVisionCBox.getValue();
    }
@@ -156,11 +154,4 @@ public class PostProcessing extends AbstractExample {
        sourceCodeURLs[0] = GWT.getModuleBaseURL() + "examples/" + "PostProcessing.txt";
        return sourceCodeURLs;
    }

    private class MValueChangeHandler implements ValueChangeHandler<Boolean> {
        @Override
        public void onValueChange(ValueChangeEvent<Boolean> event) {
            updatePostProcess(null);
        }
    }
}
+54 −9
Original line number Diff line number Diff line
@@ -18,12 +18,13 @@ package org.cleanlogic.cesiumjs4gwt.showcase.examples;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.IntegerBox;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.PushButton;
import org.cesiumjs.cs.Cesium;
@@ -55,7 +56,8 @@ 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.Slider;
import org.cleanlogic.cesiumjs4gwt.showcase.examples.slider.InputEvent;
import org.cleanlogic.cesiumjs4gwt.showcase.examples.slider.SliderBox;

import javax.inject.Inject;

@@ -65,7 +67,10 @@ public class SceneRenderingPerformance extends AbstractExample {
    private Cesium3DTileset tileset;
    private ScreenSpaceEventHandler handler;
    private CheckBox timeChangeEnabledCBox;
    private Slider maxDeltaTimeSlider;
    private SliderBox maxDeltaTimeSlider;
    private Label maxDeltaTimeLbl;
    private Label autoRenderInfoLbl;
    private IntegerBox maxDeltaTimeIBox;

    @Inject
    public SceneRenderingPerformance(ShowcaseExampleStore store) {
@@ -87,7 +92,7 @@ public class SceneRenderingPerformance extends AbstractExample {

        PushButton renderButton = new PushButton();
        renderButton.setHTML("<font color=\"white\">Render new frame</font>");
        renderButton.addClickHandler(handler -> scene.requestRender());
        renderButton.addClickHandler(clickHandler -> scene.requestRender());

        CheckBox requestRenderModeCBox = new CheckBox();
        requestRenderModeCBox.setHTML("<font color=\"white\">requestRenderMode enabled</font>");
@@ -109,9 +114,23 @@ public class SceneRenderingPerformance extends AbstractExample {
        timeChangeEnabledCBox = new CheckBox();
        timeChangeEnabledCBox.setHTML("<font color=\"white\">Render when simulation time changes</font>");
        timeChangeEnabledCBox.setEnabled(false);
        timeChangeEnabledCBox.setVisible(false);

        maxDeltaTimeSlider = new Slider("maxDeltaTime", 0, 200, 0);
        maxDeltaTimeSlider = new SliderBox(0, 10, 20, 1);
        maxDeltaTimeSlider.setStep(1);
        maxDeltaTimeSlider.addInputHandler(this::setMaxDeltaTime);
        maxDeltaTimeSlider.setVisible(false);

        maxDeltaTimeIBox = new IntegerBox();
        maxDeltaTimeIBox.setWidth("22px");
        maxDeltaTimeIBox.setValue(10);
        maxDeltaTimeIBox.setVisible(false);

        maxDeltaTimeLbl = new Label();
        maxDeltaTimeLbl.getElement().setInnerHTML("<font color=\"white\">Max delta time</font>");

        autoRenderInfoLbl = new Label();
        autoRenderInfoLbl.getElement().setInnerHTML("<i><font size=\"-2\" color=\"white\">Automatically render when the simulation time<br> changes by \"Max delta time\". Adjust the<br> simulation time on the animation widget and<br> \"Max delta time\" value to see their relationship.</font></i>");

        FlexTable flexTable = new FlexTable();
        flexTable.setHTML(1, 0, "<font color=\"white\"></font>");
@@ -121,9 +140,13 @@ public class SceneRenderingPerformance extends AbstractExample {
        flexTable.setHTML(5, 0, "<i><font size=\"-2\" color=\"white\">When enabled, a new frame is only rendered<br> when scene updates occur, or a new frame is<br> explicitly rendered.</font></t>");
        flexTable.setWidget(6, 0, scenariosLBox);
        flexTable.setWidget(7, 0, timeChangeEnabledCBox);
        flexTable.setHTML(8, 0, "<i><font size=\"-2\" color=\"white\">Automatically render when the simulation time<br> changes by \"Max delta time\". Adjust the<br> simulation time on the animation widget and<br> \"Max delta time\" value to see their relationship.</font></i>");
        flexTable.setHTML(9, 0, "<font color=\"white\">Max delta time</font>");
        flexTable.setWidget(8, 0, autoRenderInfoLbl);
        flexTable.setWidget(9, 0, maxDeltaTimeLbl);
        flexTable.setWidget(10, 0, maxDeltaTimeSlider);
        flexTable.setWidget(10, 1, maxDeltaTimeIBox);

        maxDeltaTimeLbl.setVisible(false);
        autoRenderInfoLbl.setVisible(false);

        AbsolutePanel aPanel = new AbsolutePanel();
        aPanel.add(csVPanel);
@@ -181,6 +204,12 @@ public class SceneRenderingPerformance extends AbstractExample {
        timeChangeEnabledCBox.setEnabled(false);
        timeChangeEnabledCBox.setValue(false);
        maxDeltaTimeSlider.setValue(0);

        timeChangeEnabledCBox.setVisible(false);
        maxDeltaTimeSlider.setVisible(false);
        maxDeltaTimeIBox.setVisible(false);
        maxDeltaTimeLbl.setVisible(false);
        autoRenderInfoLbl.setVisible(false);
    }

    // Load a tileset and set the view.
@@ -201,6 +230,13 @@ public class SceneRenderingPerformance extends AbstractExample {
        resetScene();
        timeChangeEnabledCBox.setEnabled(true);
        timeChangeEnabledCBox.setValue(true);
        maxDeltaTimeSlider.setValue(0);
        maxDeltaTimeLbl.setVisible(true);
        autoRenderInfoLbl.setVisible(true);
        maxDeltaTimeSlider.setVisible(true);
        maxDeltaTimeIBox.setVisible(true);
        maxDeltaTimeIBox.setValue(0);
        scene.maximumRenderTimeChange = 0;

        ModelGraphicsOptions modelOptions = new ModelGraphicsOptions();
        modelOptions.uri = new ConstantProperty<>(GWT.getModuleBaseURL() + "SampleData/models/CesiumAir/Cesium_Air.glb");
@@ -213,7 +249,6 @@ public class SceneRenderingPerformance extends AbstractExample {
        entityOptions.model = new ModelGraphics(modelOptions);
        csVPanel.getViewer().trackedEntity = csVPanel.getViewer().entities().add(entityOptions);
        csVPanel.getViewer().clock().shouldAnimate = true;
        scene.requestRender();
    }

    // Load CZML DataSource with a model and set the trackedEntity.
@@ -224,7 +259,11 @@ public class SceneRenderingPerformance extends AbstractExample {
        resetScene();
        timeChangeEnabledCBox.setEnabled(true);
        timeChangeEnabledCBox.setValue(true);
        maxDeltaTimeSlider.setValue(100);
        maxDeltaTimeSlider.setValue(10);
        maxDeltaTimeLbl.setVisible(true);
        autoRenderInfoLbl.setVisible(true);
        maxDeltaTimeSlider.setVisible(true);
        maxDeltaTimeIBox.setVisible(true);

        scene.maximumRenderTimeChange = 10.;

@@ -282,4 +321,10 @@ public class SceneRenderingPerformance extends AbstractExample {
        scene.backgroundColor = Color.CORNFLOWERBLUE();
        scene.requestRender();
    }

    private void setMaxDeltaTime(InputEvent event) {
        double value = Double.parseDouble(((SliderBox) event.getSource()).getValue());
        maxDeltaTimeIBox.setValue((int) value);
        scene.maximumRenderTimeChange = value;
    }
}
 No newline at end of file
Loading