diff --git a/vtm-web-app/src/org/oscim/web/client/BuildingSolutionControl.java b/vtm-web-app/src/org/oscim/web/client/BuildingSolutionControl.java
new file mode 100644
index 00000000..ef92219f
--- /dev/null
+++ b/vtm-web-app/src/org/oscim/web/client/BuildingSolutionControl.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2017 Izumi Kawashima
+ *
+ * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
+ *
+ * This program is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along with
+ * this program. If not, see .
+ */
+
+package org.oscim.web.client;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+public class BuildingSolutionControl {
+ private final String divQuerySelector;
+ public final int MAX_VALUE = 65536;
+ private Collection listeners = new HashSet<>();
+
+ public BuildingSolutionControl(String divQuerySelector) {
+ this.divQuerySelector = divQuerySelector;
+ }
+
+ public void init() {
+ initNative(divQuerySelector);
+ refresh();
+ }
+
+ private native void initNative(String divQuerySelector)/*-{
+var bsc = $doc.querySelector(divQuerySelector);
+var that = this;
+function onUpdate(val){
+that.@org.oscim.web.client.BuildingSolutionControl::fireValueChangeListeners(I)(val);
+}
+bsc.addEventListener("input",function(){onUpdate(this.value);});
+bsc.addEventListener("change",function(){onUpdate(this.value);});
+ }-*/;
+
+ private native void refresh()/*-{
+
+ }-*/;
+
+ public void addValueChangeListener(ValueChangeListener l) {
+ this.listeners.add(l);
+ }
+
+ public void removeValueChangeListener(ValueChangeListener l) {
+ this.listeners.remove(l);
+ }
+
+ private void fireValueChangeListeners(int val) {
+ for (ValueChangeListener l : this.listeners) {
+ l.onValueChange(val, MAX_VALUE);
+ }
+ }
+
+ public interface ValueChangeListener {
+ void onValueChange(int val, int max);
+ }
+}
diff --git a/vtm-web-app/src/org/oscim/web/client/GwtMap.java b/vtm-web-app/src/org/oscim/web/client/GwtMap.java
index 0942bf09..372939d5 100644
--- a/vtm-web-app/src/org/oscim/web/client/GwtMap.java
+++ b/vtm-web-app/src/org/oscim/web/client/GwtMap.java
@@ -1,6 +1,6 @@
/*
* Copyright 2013 Hannes Janetzek
- * Copyright 2016 Izumi Kawashima
+ * Copyright 2016-2017 Izumi Kawashima
* Copyright 2017 devemux86
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -36,6 +36,7 @@ import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.buildings.S3DBTileLayer;
import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer;
+import org.oscim.renderer.ExtrusionRenderer;
import org.oscim.renderer.MapRenderer;
import org.oscim.theme.StreamRenderTheme;
import org.oscim.theme.VtmThemes;
@@ -49,6 +50,8 @@ import org.slf4j.LoggerFactory;
class GwtMap extends GdxMap {
static final Logger log = LoggerFactory.getLogger(GwtMap.class);
+ BuildingLayer mBuildingLayer;
+ BuildingSolutionControl mBuildingSolutionControl;
SearchBox mSearchBox;
@Override
@@ -144,18 +147,34 @@ class GwtMap extends GdxMap {
boolean nolabels = mapUrl.params.containsKey("nolabels");
boolean nobuildings = mapUrl.params.containsKey("nobuildings");
- if (!nobuildings && !s3db)
- mMap.layers().add(new BuildingLayer(mMap, l));
+ if (!nobuildings && !s3db) {
+ mBuildingLayer = new BuildingLayer(mMap, l);
+ ((ExtrusionRenderer) mBuildingLayer.getRenderer()).setZLimit((float) 65536 / 10);
+ mMap.layers().add(mBuildingLayer);
+ }
if (!nolabels)
mMap.layers().add(new LabelLayer(mMap, l));
}
mSearchBox = new SearchBox(mMap);
-
}
@Override
protected void createLayers() {
+ mBuildingSolutionControl = new BuildingSolutionControl("#building-solution-input");
+ mBuildingSolutionControl.addValueChangeListener(new BuildingSolutionControl.ValueChangeListener() {
+ @Override
+ public void onValueChange(int val, int max) {
+ if (mBuildingLayer == null) {
+ return;
+ }
+
+ ((ExtrusionRenderer) mBuildingLayer.getRenderer()).setZLimit((float) val / 10);
+
+ mMap.updateMap(true);
+ }
+ });
+ mBuildingSolutionControl.init();
}
}
diff --git a/vtm-web-app/war/default.css b/vtm-web-app/war/default.css
index 8a06d633..179da49b 100644
--- a/vtm-web-app/war/default.css
+++ b/vtm-web-app/war/default.css
@@ -104,3 +104,17 @@ html,body {
background-color: #DDDDDD;
opacity: 0.5;
}
+
+#building-solution{
+ z-index: 20001;
+ position: absolute;
+ top: 40px;
+ left: 0px;
+}
+input[type=range][orient=vertical]{
+ writing-mode: bt-lr; /* IE */
+ -webkit-appearance: slider-vertical; /* WebKit */
+ width: 8px;
+ height: 175px;
+ padding: 0 5px;
+}
diff --git a/vtm-web-app/war/index.html b/vtm-web-app/war/index.html
index 0bdfe90e..917b0ed7 100644
--- a/vtm-web-app/war/index.html
+++ b/vtm-web-app/war/index.html
@@ -73,5 +73,8 @@
+
+
+