qwc2 2026.8.13 → 2026.8.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/components/AttributeTableWidget.js +121 -285
- package/components/BookmarkPanel.js +3 -2
- package/components/IdentifyViewer.js +39 -20
- package/components/ImportLayer.js +6 -392
- package/components/QtDesignerForm.js +1 -1
- package/components/ResizeableWindow.js +10 -0
- package/components/map3d/style/Map3D.css +1 -0
- package/components/style/AttributeTableWidget.css +1 -140
- package/components/widgets/FeaturesTable.js +30 -31
- package/components/widgets/MenuButton.js +10 -10
- package/components/widgets/TextInput.js +0 -10
- package/components/widgets/style/FeaturesTable.css +46 -19
- package/icons/public.svg +63 -0
- package/package.json +1 -1
- package/plugins/BottomBar.js +123 -111
- package/plugins/MapDropImport.js +135 -0
- package/plugins/map3d/Viewshed3D.js +171 -52
- package/plugins/map3d/style/Viewshed3D.css +4 -0
- package/plugins/style/BottomBar.css +10 -3
- package/plugins/style/MapDropImport.css +19 -0
- package/static/translations/bg-BG.json +8 -0
- package/static/translations/ca-ES.json +8 -0
- package/static/translations/cs-CZ.json +8 -0
- package/static/translations/de-CH.json +8 -0
- package/static/translations/de-DE.json +8 -0
- package/static/translations/en-US.json +8 -0
- package/static/translations/es-ES.json +8 -0
- package/static/translations/fi-FI.json +8 -0
- package/static/translations/fr-FR.json +8 -0
- package/static/translations/hu-HU.json +8 -0
- package/static/translations/it-IT.json +8 -0
- package/static/translations/ja-JP.json +8 -0
- package/static/translations/nl-NL.json +8 -0
- package/static/translations/no-NO.json +8 -0
- package/static/translations/pl-PL.json +8 -0
- package/static/translations/pt-BR.json +8 -0
- package/static/translations/pt-PT.json +8 -0
- package/static/translations/ro-RO.json +8 -0
- package/static/translations/ru-RU.json +8 -0
- package/static/translations/sv-SE.json +8 -0
- package/static/translations/tr-TR.json +8 -0
- package/static/translations/tsconfig.json +4 -0
- package/static/translations/uk-UA.json +8 -0
- package/utils/FileImportUtils.js +390 -0
- package/utils/LayerUtils.js +2 -2
|
@@ -27,10 +27,13 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
27
27
|
|
|
28
28
|
import React from 'react';
|
|
29
29
|
import PropTypes from 'prop-types';
|
|
30
|
-
import { Color, CubeCamera, DoubleSide, HalfFloatType, LinearFilter, Mesh, MeshStandardMaterial, ShaderMaterial, SphereGeometry,
|
|
30
|
+
import { Color, CubeCamera, DoubleSide, HalfFloatType, LinearFilter, Mesh, MeshStandardMaterial, ShaderMaterial, SphereGeometry, Vector4, WebGLCubeRenderTarget } from 'three';
|
|
31
31
|
import { TransformControls } from 'three/addons/controls/TransformControls';
|
|
32
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
33
|
+
import Icon from '../../components/Icon';
|
|
32
34
|
import SideBar from '../../components/SideBar';
|
|
33
35
|
import ColorButton from '../../components/widgets/ColorButton';
|
|
36
|
+
import MenuButton from '../../components/widgets/MenuButton';
|
|
34
37
|
import NumberInput from '../../components/widgets/NumberInput';
|
|
35
38
|
import CoordinatesUtils from '../../utils/CoordinatesUtils';
|
|
36
39
|
import LocaleUtils from '../../utils/LocaleUtils';
|
|
@@ -49,6 +52,8 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
49
52
|
_classCallCheck(this, Viewshed3D);
|
|
50
53
|
_this = _callSuper(this, Viewshed3D, [props]);
|
|
51
54
|
_defineProperty(_this, "state", {
|
|
55
|
+
mode: 'off',
|
|
56
|
+
panelVisible: false,
|
|
52
57
|
maxDistance: 500,
|
|
53
58
|
cubeTextureSize: 2048,
|
|
54
59
|
observerPos: {
|
|
@@ -56,11 +61,13 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
56
61
|
y: 0,
|
|
57
62
|
z: 0
|
|
58
63
|
},
|
|
59
|
-
|
|
60
|
-
|
|
64
|
+
inputHeight: 0,
|
|
65
|
+
zMode: 'terrain',
|
|
66
|
+
visibleColor: [51, 255, 51, 0.9],
|
|
67
|
+
occludedColor: [255, 51, 51, 0.9],
|
|
61
68
|
gizmoVisible: true
|
|
62
69
|
});
|
|
63
|
-
_defineProperty(_this, "
|
|
70
|
+
_defineProperty(_this, "setupCubemapViewshed", function () {
|
|
64
71
|
_this.overriddenMaterials = [];
|
|
65
72
|
var scene = _this.props.sceneContext.scene;
|
|
66
73
|
var camera = _this.props.sceneContext.scene.view.camera;
|
|
@@ -129,33 +136,50 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
129
136
|
_this.props.sceneContext.eventDispatcher.addEventListener('cameraChanged', _this.updateTransformHelper);
|
|
130
137
|
_this.props.sceneContext.scene.notifyChange();
|
|
131
138
|
});
|
|
132
|
-
_defineProperty(_this, "
|
|
139
|
+
_defineProperty(_this, "reset", function () {
|
|
133
140
|
_this.props.sceneContext.removeObjectAddedListener(_this.overrideMaterial);
|
|
134
|
-
_this.transformControls
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
141
|
+
if (_this.transformControls) {
|
|
142
|
+
_this.transformControls.removeEventListener('dragging-changed', _this.onControlDrag);
|
|
143
|
+
_this.transformControls.removeEventListener('objectChange', _this.onControlChange);
|
|
144
|
+
_this.transformControls.removeEventListener('change', _this.onControlChange);
|
|
145
|
+
_this.props.sceneContext.eventDispatcher.removeEventListener('cameraChanged', _this.updateTransformHelper);
|
|
146
|
+
_this.props.sceneContext.scene.remove(_this.transformControls.getHelper());
|
|
147
|
+
_this.transformControls.detach();
|
|
148
|
+
_this.transformControls = null;
|
|
149
|
+
}
|
|
138
150
|
_this.overriddenMaterials.forEach(function (material) {
|
|
139
151
|
material.onBeforeCompile = material.userData.originalOnBeforeCompile;
|
|
140
152
|
delete material.userData.originalOnBeforeCompile;
|
|
153
|
+
material.customProgramCacheKey = material.userData.originalCustomProgramCacheKey;
|
|
154
|
+
delete material.userData.originalCustomProgramCacheKey;
|
|
141
155
|
material.needsUpdate = true;
|
|
142
156
|
});
|
|
143
157
|
_this.overriddenMaterials = [];
|
|
144
|
-
_this.
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
_this.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
158
|
+
if (_this.cubeCamera) {
|
|
159
|
+
_this.props.sceneContext.scene.remove(_this.cubeCamera);
|
|
160
|
+
_this.cubeCamera = null;
|
|
161
|
+
}
|
|
162
|
+
if (_this.cubemapTarget) {
|
|
163
|
+
_this.cubemapTarget.dispose();
|
|
164
|
+
_this.cubemapTarget = null;
|
|
165
|
+
}
|
|
166
|
+
if (_this.observerMesh) {
|
|
167
|
+
_this.props.sceneContext.scene.remove(_this.observerMesh);
|
|
168
|
+
_this.observerMesh = null;
|
|
169
|
+
}
|
|
170
|
+
if (_this.distanceMaterial) {
|
|
171
|
+
_this.distanceMaterial.dispose();
|
|
172
|
+
_this.distanceMaterial = null;
|
|
173
|
+
}
|
|
174
|
+
_this.props.sceneContext.scene.notifyChange();
|
|
152
175
|
});
|
|
153
176
|
_defineProperty(_this, "updateObserverPos", function (diff) {
|
|
154
177
|
_this.setState(function (state) {
|
|
155
178
|
var newPos = _objectSpread(_objectSpread({}, state.observerPos), diff);
|
|
156
|
-
|
|
179
|
+
newPos.z = state.inputHeight;
|
|
180
|
+
if (state.zMode === 'terrain') {
|
|
157
181
|
var _this$props$sceneCont2;
|
|
158
|
-
newPos.z
|
|
182
|
+
newPos.z += (_this$props$sceneCont2 = _this.props.sceneContext.getTerrainHeightFromMap([newPos.x, newPos.y])) !== null && _this$props$sceneCont2 !== void 0 ? _this$props$sceneCont2 : 0;
|
|
159
183
|
}
|
|
160
184
|
if (_this.observerMesh) {
|
|
161
185
|
_this.observerMesh.position.setX(newPos.x);
|
|
@@ -172,6 +196,34 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
172
196
|
};
|
|
173
197
|
});
|
|
174
198
|
});
|
|
199
|
+
_defineProperty(_this, "updateObserverHeight", function (z) {
|
|
200
|
+
if (_this.state.zMode === 'absolute') {
|
|
201
|
+
var _this$props$sceneCont3;
|
|
202
|
+
var p = _this.state.observerPos;
|
|
203
|
+
var terrH = (_this$props$sceneCont3 = _this.props.sceneContext.getTerrainHeightFromMap([p.x, p.y])) !== null && _this$props$sceneCont3 !== void 0 ? _this$props$sceneCont3 : 0;
|
|
204
|
+
z = Math.max(z, terrH);
|
|
205
|
+
} else {
|
|
206
|
+
z = Math.max(z, 0);
|
|
207
|
+
}
|
|
208
|
+
_this.setState({
|
|
209
|
+
inputHeight: z
|
|
210
|
+
}, _this.updateObserverPos);
|
|
211
|
+
});
|
|
212
|
+
_defineProperty(_this, "setZMode", function (mode) {
|
|
213
|
+
_this.setState(function (state) {
|
|
214
|
+
if (state.zMode !== mode) {
|
|
215
|
+
var _this$props$sceneCont4;
|
|
216
|
+
var p = state.observerPos;
|
|
217
|
+
var terrH = (_this$props$sceneCont4 = _this.props.sceneContext.getTerrainHeightFromMap([p.x, p.y])) !== null && _this$props$sceneCont4 !== void 0 ? _this$props$sceneCont4 : 0;
|
|
218
|
+
return {
|
|
219
|
+
zMode: mode,
|
|
220
|
+
inputHeight: mode === 'absolute' ? state.inputHeight + terrH : state.inputHeight - terrH
|
|
221
|
+
};
|
|
222
|
+
} else {
|
|
223
|
+
return {};
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
});
|
|
175
227
|
_defineProperty(_this, "updateTransformHelper", function () {
|
|
176
228
|
_this.transformControls.getHelper().updateMatrixWorld();
|
|
177
229
|
_this.props.sceneContext.scene.notifyChange();
|
|
@@ -180,15 +232,19 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
180
232
|
_this.props.sceneContext.scene.view.controls.enabled = !event.value;
|
|
181
233
|
});
|
|
182
234
|
_defineProperty(_this, "onControlChange", function () {
|
|
183
|
-
var _this$props$
|
|
235
|
+
var _this$props$sceneCont5;
|
|
184
236
|
var p = _this.observerMesh.position;
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
237
|
+
var terrH = (_this$props$sceneCont5 = _this.props.sceneContext.getTerrainHeightFromMap([p.x, p.y])) !== null && _this$props$sceneCont5 !== void 0 ? _this$props$sceneCont5 : 0;
|
|
238
|
+
p.z = Math.max(p.z, terrH);
|
|
239
|
+
_this.setState(function (state) {
|
|
240
|
+
return {
|
|
241
|
+
observerPos: {
|
|
242
|
+
x: p.x,
|
|
243
|
+
y: p.y,
|
|
244
|
+
z: p.z
|
|
245
|
+
},
|
|
246
|
+
inputHeight: state.zMode === 'terrain' ? p.z - terrH : p.z
|
|
247
|
+
};
|
|
192
248
|
});
|
|
193
249
|
_this.observerMesh.updateMatrixWorld(true);
|
|
194
250
|
_this.transformControls.getHelper().updateMatrixWorld();
|
|
@@ -212,7 +268,7 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
212
268
|
_this.cubeCamera.renderTarget.clear(renderer, true, true, true);
|
|
213
269
|
_this.cubeCamera.update(renderer, scene);
|
|
214
270
|
_this.observerMesh.visible = true;
|
|
215
|
-
_this.transformControls.getHelper().visible = _this.state.gizmoVisible;
|
|
271
|
+
_this.transformControls.getHelper().visible = _this.state.panelVisible && _this.state.gizmoVisible;
|
|
216
272
|
scene.overrideMaterial = prevOverrideMaterial;
|
|
217
273
|
_this.overrideMaterial(scene);
|
|
218
274
|
_this.recomputing = false;
|
|
@@ -230,36 +286,46 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
230
286
|
(_obj$children = obj.children) === null || _obj$children === void 0 || (_obj$children$forEach = _obj$children.forEach) === null || _obj$children$forEach === void 0 || _obj$children$forEach.call(_obj$children, _this.overrideMaterial);
|
|
231
287
|
if (obj.material && obj.material.onBeforeCompile !== _this.injectShader) {
|
|
232
288
|
obj.material.userData.originalOnBeforeCompile = obj.material.onBeforeCompile;
|
|
289
|
+
obj.material.userData.originalCustomProgramCacheKey = obj.material.customProgramCacheKey;
|
|
233
290
|
obj.material.onBeforeCompile = _this.injectShader;
|
|
291
|
+
obj.material.customProgramCacheKey = function () {
|
|
292
|
+
return uuidv4();
|
|
293
|
+
};
|
|
234
294
|
obj.material.needsUpdate = true;
|
|
235
295
|
_this.overriddenMaterials.push(obj.material);
|
|
236
296
|
}
|
|
237
297
|
});
|
|
238
298
|
_defineProperty(_this, "injectShader", function (shader) {
|
|
239
|
-
shader.uniforms.
|
|
299
|
+
shader.uniforms.viewshedVisibilityMap = {
|
|
240
300
|
value: _this.cubemapTarget.texture
|
|
241
301
|
};
|
|
242
|
-
shader.uniforms.
|
|
302
|
+
shader.uniforms.viewshedObserverPos = {
|
|
243
303
|
value: _this.observerMesh.position
|
|
244
304
|
};
|
|
245
|
-
shader.uniforms.
|
|
305
|
+
shader.uniforms.viewshedMaxDist = {
|
|
246
306
|
value: _this.maxDistance
|
|
247
307
|
};
|
|
248
|
-
shader.uniforms.
|
|
308
|
+
shader.uniforms.viewshedVisibleColor = {
|
|
249
309
|
value: _this.visibleColor
|
|
250
310
|
};
|
|
251
|
-
shader.uniforms.
|
|
311
|
+
shader.uniforms.viewshedOccludedColor = {
|
|
252
312
|
value: _this.occludedColor
|
|
253
313
|
};
|
|
254
314
|
shader.vertexShader = 'varying vec3 vVisWorld;\n' + shader.vertexShader;
|
|
255
315
|
shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', "\n #include <begin_vertex>\n\n vec4 worldPos = modelMatrix * vec4(transformed, 1.0);\n vVisWorld = worldPos.xyz;\n ");
|
|
256
|
-
shader.fragmentShader = 'varying vec3 vVisWorld;\n' + 'uniform samplerCube
|
|
257
|
-
shader.fragmentShader = shader.fragmentShader.replace('#include <dithering_fragment>', "\n vec3 dir = vVisWorld -
|
|
316
|
+
shader.fragmentShader = 'varying vec3 vVisWorld;\n' + 'uniform samplerCube viewshedVisibilityMap;\n' + 'uniform vec3 viewshedObserverPos;\n' + 'uniform vec2 viewshedMaxDist;\n' + 'uniform vec4 viewshedVisibleColor;\n' + 'uniform vec4 viewshedOccludedColor;\n' + shader.fragmentShader;
|
|
317
|
+
shader.fragmentShader = shader.fragmentShader.replace('#include <dithering_fragment>', "\n vec3 dir = vVisWorld - viewshedObserverPos;\n float dist = length(dir);\n vec3 ray = normalize(dir);\n\n float enc = textureCube(viewshedVisibilityMap, ray).r;\n float stored = enc * viewshedMaxDist.x;\n\n bool visible = dist <= stored + 0.5;\n vec4 tint = visible ? viewshedVisibleColor : viewshedOccludedColor;\n\n gl_FragColor.rgb = mix(gl_FragColor.rgb, tint.rgb / 255.0, tint.a);\n\n #include <dithering_fragment>\n ");
|
|
258
318
|
});
|
|
259
319
|
_this.recomputing = false;
|
|
260
|
-
_this.visibleColor = new
|
|
261
|
-
_this.occludedColor = new
|
|
320
|
+
_this.visibleColor = new Vector4().fromArray(_this.state.visibleColor);
|
|
321
|
+
_this.occludedColor = new Vector4().fromArray(_this.state.occludedColor);
|
|
262
322
|
_this.maxDistance = [_this.state.maxDistance, 0];
|
|
323
|
+
_this.overriddenMaterials = [];
|
|
324
|
+
_this.observerMesh = null;
|
|
325
|
+
_this.cubemapTarget = null;
|
|
326
|
+
_this.cubeCamera = null;
|
|
327
|
+
_this.distanceMaterial = null;
|
|
328
|
+
_this.transformControls = null;
|
|
263
329
|
return _this;
|
|
264
330
|
}
|
|
265
331
|
_inherits(Viewshed3D, _React$Component);
|
|
@@ -288,6 +354,16 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
288
354
|
this.maxDistance[0] = this.state.maxDistance;
|
|
289
355
|
this.recompute();
|
|
290
356
|
}
|
|
357
|
+
if (this.state.panelVisible !== prevState.panelVisible && this.transformControls) {
|
|
358
|
+
this.transformControls.getHelper().visible = this.state.panelVisible && this.state.gizmoVisible;
|
|
359
|
+
this.props.sceneContext.scene.notifyChange(this.transformControls.getHelper());
|
|
360
|
+
}
|
|
361
|
+
if (this.state.mode !== prevState.mode) {
|
|
362
|
+
this.reset();
|
|
363
|
+
if (this.state.mode === "cubemap") {
|
|
364
|
+
this.setupCubemapViewshed();
|
|
365
|
+
}
|
|
366
|
+
}
|
|
291
367
|
}
|
|
292
368
|
}, {
|
|
293
369
|
key: "render",
|
|
@@ -296,8 +372,16 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
296
372
|
return /*#__PURE__*/React.createElement(SideBar, {
|
|
297
373
|
icon: "eye",
|
|
298
374
|
id: "Viewshed3D",
|
|
299
|
-
onHide:
|
|
300
|
-
|
|
375
|
+
onHide: function onHide() {
|
|
376
|
+
return _this2.setState({
|
|
377
|
+
panelVisible: false
|
|
378
|
+
});
|
|
379
|
+
},
|
|
380
|
+
onShow: function onShow() {
|
|
381
|
+
return _this2.setState({
|
|
382
|
+
panelVisible: true
|
|
383
|
+
});
|
|
384
|
+
},
|
|
301
385
|
title: LocaleUtils.tr("appmenu.items.Viewshed3D"),
|
|
302
386
|
width: "20em"
|
|
303
387
|
}, function () {
|
|
@@ -315,9 +399,24 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
315
399
|
className: "viewshed3d-body"
|
|
316
400
|
}, /*#__PURE__*/React.createElement("table", {
|
|
317
401
|
className: "viewshed3d-optionstable"
|
|
318
|
-
}, /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", {
|
|
402
|
+
}, /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, LocaleUtils.tr("common.mode")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement("select", {
|
|
403
|
+
onChange: function onChange(ev) {
|
|
404
|
+
return _this3.setState({
|
|
405
|
+
mode: ev.target.value
|
|
406
|
+
});
|
|
407
|
+
},
|
|
408
|
+
value: this.state.mode
|
|
409
|
+
}, /*#__PURE__*/React.createElement("option", {
|
|
410
|
+
value: "off"
|
|
411
|
+
}, LocaleUtils.tr("common.disabled")), /*#__PURE__*/React.createElement("option", {
|
|
412
|
+
value: "cubemap"
|
|
413
|
+
}, LocaleUtils.tr("viewshed.cubemap"))))), this.state.mode === "cubemap" ? [/*#__PURE__*/React.createElement("tr", {
|
|
414
|
+
key: "observerpos"
|
|
415
|
+
}, /*#__PURE__*/React.createElement("td", {
|
|
319
416
|
colSpan: "2"
|
|
320
|
-
}, LocaleUtils.tr("viewshed3d.observerpos"))), /*#__PURE__*/React.createElement("tr",
|
|
417
|
+
}, LocaleUtils.tr("viewshed3d.observerpos"))), /*#__PURE__*/React.createElement("tr", {
|
|
418
|
+
key: "observerposinput"
|
|
419
|
+
}, /*#__PURE__*/React.createElement("td", {
|
|
321
420
|
colSpan: "2"
|
|
322
421
|
}, /*#__PURE__*/React.createElement("div", {
|
|
323
422
|
className: "viewshed3d-posinputs"
|
|
@@ -337,28 +436,46 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
337
436
|
value: this.state.observerPos.y
|
|
338
437
|
}), /*#__PURE__*/React.createElement(NumberInput, {
|
|
339
438
|
onChange: function onChange(z) {
|
|
340
|
-
return _this3.
|
|
341
|
-
z: z
|
|
342
|
-
});
|
|
439
|
+
return _this3.updateObserverHeight(z);
|
|
343
440
|
},
|
|
344
|
-
value: this.state.
|
|
345
|
-
})
|
|
346
|
-
|
|
441
|
+
value: this.state.inputHeight
|
|
442
|
+
}), /*#__PURE__*/React.createElement(MenuButton, {
|
|
443
|
+
menuIcon: this.state.zMode === 'absolute' ? 'above_zero' : 'above_terr'
|
|
444
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
445
|
+
onClick: function onClick() {
|
|
446
|
+
return _this3.setZMode('absolute');
|
|
447
|
+
}
|
|
448
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
449
|
+
icon: "above_zero"
|
|
450
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
451
|
+
onClick: function onClick() {
|
|
452
|
+
return _this3.setZMode('terrain');
|
|
453
|
+
}
|
|
454
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
455
|
+
icon: "above_terr"
|
|
456
|
+
})))))), /*#__PURE__*/React.createElement("tr", {
|
|
457
|
+
key: "visiblecolor"
|
|
458
|
+
}, /*#__PURE__*/React.createElement("td", null, LocaleUtils.tr("viewshed3d.visiblecolor")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(ColorButton, {
|
|
459
|
+
alpha: true,
|
|
347
460
|
color: this.state.visibleColor,
|
|
348
461
|
onColorChanged: function onColorChanged(color) {
|
|
349
462
|
return _this3.setState({
|
|
350
463
|
visibleColor: color
|
|
351
464
|
});
|
|
352
465
|
}
|
|
353
|
-
}))), /*#__PURE__*/React.createElement("tr",
|
|
354
|
-
|
|
466
|
+
}))), /*#__PURE__*/React.createElement("tr", {
|
|
467
|
+
key: "occludedcolor"
|
|
468
|
+
}, /*#__PURE__*/React.createElement("td", null, LocaleUtils.tr("viewshed3d.occludedcolor")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(ColorButton, {
|
|
469
|
+
alpha: true,
|
|
355
470
|
color: this.state.occludedColor,
|
|
356
471
|
onColorChanged: function onColorChanged(color) {
|
|
357
472
|
return _this3.setState({
|
|
358
473
|
occludedColor: color
|
|
359
474
|
});
|
|
360
475
|
}
|
|
361
|
-
}))), /*#__PURE__*/React.createElement("tr",
|
|
476
|
+
}))), /*#__PURE__*/React.createElement("tr", {
|
|
477
|
+
key: "maxdist"
|
|
478
|
+
}, /*#__PURE__*/React.createElement("td", null, LocaleUtils.tr("viewshed3d.maxDistance")), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(NumberInput, {
|
|
362
479
|
min: 10,
|
|
363
480
|
onChange: function onChange(d) {
|
|
364
481
|
return _this3.setState({
|
|
@@ -367,7 +484,9 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
367
484
|
},
|
|
368
485
|
suffix: " " + units,
|
|
369
486
|
value: this.state.maxDistance
|
|
370
|
-
}))), /*#__PURE__*/React.createElement("tr",
|
|
487
|
+
}))), /*#__PURE__*/React.createElement("tr", {
|
|
488
|
+
key: "gizmo"
|
|
489
|
+
}, /*#__PURE__*/React.createElement("td", {
|
|
371
490
|
colSpan: "2"
|
|
372
491
|
}, /*#__PURE__*/React.createElement("label", null, /*#__PURE__*/React.createElement("input", {
|
|
373
492
|
checked: this.state.gizmoVisible,
|
|
@@ -377,7 +496,7 @@ var Viewshed3D = /*#__PURE__*/function (_React$Component) {
|
|
|
377
496
|
});
|
|
378
497
|
},
|
|
379
498
|
type: "checkbox"
|
|
380
|
-
}), ' ', LocaleUtils.tr("viewshed3d.showgizmo")))))));
|
|
499
|
+
}), ' ', LocaleUtils.tr("viewshed3d.showgizmo"))))] : null)));
|
|
381
500
|
}
|
|
382
501
|
}]);
|
|
383
502
|
}(React.Component);
|
|
@@ -5,13 +5,20 @@
|
|
|
5
5
|
bottom: 0;
|
|
6
6
|
height: 3em;
|
|
7
7
|
z-index: 100;
|
|
8
|
+
font-size: 75%;
|
|
9
|
+
display: flex;
|
|
10
|
+
align-items: center;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
#BottomBar:not(.bottombar-fullscreen) {
|
|
8
14
|
color: var(--panel-text-color);
|
|
9
15
|
background-color: var(--panel-bg-color);
|
|
10
16
|
box-shadow: 0 -2px 4px rgba(136, 136, 136, 0.5);
|
|
11
17
|
backdrop-filter: blur(3px);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
#BottomBar.bottombar-fullscreen {
|
|
21
|
+
pointer-events: none;
|
|
15
22
|
}
|
|
16
23
|
|
|
17
24
|
#BottomBar > * {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
div.map-drop-import-overlay {
|
|
2
|
+
position: fixed;
|
|
3
|
+
inset: 0;
|
|
4
|
+
z-index: 100;
|
|
5
|
+
pointer-events: none;
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
justify-content: center;
|
|
9
|
+
background-color: rgba(0, 0, 0, 0.25);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
div.map-drop-import-overlay > span {
|
|
13
|
+
background-color: var(--panel-bg-color);
|
|
14
|
+
color: var(--panel-text-color);
|
|
15
|
+
border: 2px dashed var(--panel-text-color);
|
|
16
|
+
border-radius: 0.25em;
|
|
17
|
+
padding: 1em 2em;
|
|
18
|
+
font-size: large;
|
|
19
|
+
}
|
|
@@ -133,6 +133,7 @@
|
|
|
133
133
|
"dataloadfailed": "",
|
|
134
134
|
"date": "",
|
|
135
135
|
"delete": "Изтриване на",
|
|
136
|
+
"disabled": "",
|
|
136
137
|
"download": "Изтегляне",
|
|
137
138
|
"ellipse": "Елипса",
|
|
138
139
|
"export": "Експорт",
|
|
@@ -142,6 +143,7 @@
|
|
|
142
143
|
"line": "Линия",
|
|
143
144
|
"loading": "Зареждане...",
|
|
144
145
|
"lock2dview": "",
|
|
146
|
+
"mode": "",
|
|
145
147
|
"noresults": "Няма резултати",
|
|
146
148
|
"pick": "Изберете",
|
|
147
149
|
"point": "Точка",
|
|
@@ -417,6 +419,9 @@
|
|
|
417
419
|
"terrain": "Земя",
|
|
418
420
|
"title": "3D изглед"
|
|
419
421
|
},
|
|
422
|
+
"mapdropimport": {
|
|
423
|
+
"dropfiles": ""
|
|
424
|
+
},
|
|
420
425
|
"mapexport": {
|
|
421
426
|
"configuration": "Конфигурация",
|
|
422
427
|
"projection": "",
|
|
@@ -912,6 +917,9 @@
|
|
|
912
917
|
"view3d": {
|
|
913
918
|
"storingstate": ""
|
|
914
919
|
},
|
|
920
|
+
"viewshed": {
|
|
921
|
+
"cubemap": ""
|
|
922
|
+
},
|
|
915
923
|
"viewshed3d": {
|
|
916
924
|
"maxDistance": "",
|
|
917
925
|
"observerpos": "",
|
|
@@ -133,6 +133,7 @@
|
|
|
133
133
|
"dataloadfailed": "Error en carregar les dades",
|
|
134
134
|
"date": "",
|
|
135
135
|
"delete": "Eliminar",
|
|
136
|
+
"disabled": "",
|
|
136
137
|
"download": "Descarregar",
|
|
137
138
|
"ellipse": "El·lipse",
|
|
138
139
|
"export": "Exportar",
|
|
@@ -142,6 +143,7 @@
|
|
|
142
143
|
"line": "Línia",
|
|
143
144
|
"loading": "Carregant",
|
|
144
145
|
"lock2dview": "Moure amb la vista 2D",
|
|
146
|
+
"mode": "",
|
|
145
147
|
"noresults": "Cap resultat",
|
|
146
148
|
"pick": "Escollir",
|
|
147
149
|
"point": "Punt",
|
|
@@ -417,6 +419,9 @@
|
|
|
417
419
|
"terrain": "Terreny",
|
|
418
420
|
"title": "Vista 3D"
|
|
419
421
|
},
|
|
422
|
+
"mapdropimport": {
|
|
423
|
+
"dropfiles": ""
|
|
424
|
+
},
|
|
420
425
|
"mapexport": {
|
|
421
426
|
"configuration": "Configuració",
|
|
422
427
|
"projection": "Projecció",
|
|
@@ -912,6 +917,9 @@
|
|
|
912
917
|
"view3d": {
|
|
913
918
|
"storingstate": "Desant l'estat 3D..."
|
|
914
919
|
},
|
|
920
|
+
"viewshed": {
|
|
921
|
+
"cubemap": ""
|
|
922
|
+
},
|
|
915
923
|
"viewshed3d": {
|
|
916
924
|
"maxDistance": "",
|
|
917
925
|
"observerpos": "",
|
|
@@ -133,6 +133,7 @@
|
|
|
133
133
|
"dataloadfailed": "",
|
|
134
134
|
"date": "",
|
|
135
135
|
"delete": "",
|
|
136
|
+
"disabled": "",
|
|
136
137
|
"download": "",
|
|
137
138
|
"ellipse": "",
|
|
138
139
|
"export": "Export",
|
|
@@ -142,6 +143,7 @@
|
|
|
142
143
|
"line": "Linie",
|
|
143
144
|
"loading": "Načítání...",
|
|
144
145
|
"lock2dview": "",
|
|
146
|
+
"mode": "",
|
|
145
147
|
"noresults": "Nenalezeno",
|
|
146
148
|
"pick": "",
|
|
147
149
|
"point": "Bod",
|
|
@@ -417,6 +419,9 @@
|
|
|
417
419
|
"terrain": "",
|
|
418
420
|
"title": ""
|
|
419
421
|
},
|
|
422
|
+
"mapdropimport": {
|
|
423
|
+
"dropfiles": ""
|
|
424
|
+
},
|
|
420
425
|
"mapexport": {
|
|
421
426
|
"configuration": "",
|
|
422
427
|
"projection": "",
|
|
@@ -912,6 +917,9 @@
|
|
|
912
917
|
"view3d": {
|
|
913
918
|
"storingstate": ""
|
|
914
919
|
},
|
|
920
|
+
"viewshed": {
|
|
921
|
+
"cubemap": ""
|
|
922
|
+
},
|
|
915
923
|
"viewshed3d": {
|
|
916
924
|
"maxDistance": "",
|
|
917
925
|
"observerpos": "",
|
|
@@ -133,6 +133,7 @@
|
|
|
133
133
|
"dataloadfailed": "Daten konnten nicht geladen werden",
|
|
134
134
|
"date": "Datum",
|
|
135
135
|
"delete": "Löschen",
|
|
136
|
+
"disabled": "Deaktiviert",
|
|
136
137
|
"download": "Herunterladen",
|
|
137
138
|
"ellipse": "Ellipse",
|
|
138
139
|
"export": "Exportieren",
|
|
@@ -142,6 +143,7 @@
|
|
|
142
143
|
"line": "Linie",
|
|
143
144
|
"loading": "Laden...",
|
|
144
145
|
"lock2dview": "Mit 2D Ansicht bewegen",
|
|
146
|
+
"mode": "Modus",
|
|
145
147
|
"noresults": "Keine Ergebnisse",
|
|
146
148
|
"pick": "Auswählen",
|
|
147
149
|
"point": "Punkt",
|
|
@@ -417,6 +419,9 @@
|
|
|
417
419
|
"terrain": "Gelände",
|
|
418
420
|
"title": "3D Ansicht"
|
|
419
421
|
},
|
|
422
|
+
"mapdropimport": {
|
|
423
|
+
"dropfiles": "Dateien hierher ziehen, um sie als Kartenebenen zu importieren"
|
|
424
|
+
},
|
|
420
425
|
"mapexport": {
|
|
421
426
|
"configuration": "Konfiguration",
|
|
422
427
|
"projection": "Projektion",
|
|
@@ -912,6 +917,9 @@
|
|
|
912
917
|
"view3d": {
|
|
913
918
|
"storingstate": "3D Ansicht wird gespeichert..."
|
|
914
919
|
},
|
|
920
|
+
"viewshed": {
|
|
921
|
+
"cubemap": "360° Sichtbereich"
|
|
922
|
+
},
|
|
915
923
|
"viewshed3d": {
|
|
916
924
|
"maxDistance": "Maximale Distanz",
|
|
917
925
|
"observerpos": "Beobachterposition",
|
|
@@ -133,6 +133,7 @@
|
|
|
133
133
|
"dataloadfailed": "Daten konnten nicht geladen werden",
|
|
134
134
|
"date": "Datum",
|
|
135
135
|
"delete": "Löschen",
|
|
136
|
+
"disabled": "Deaktiviert",
|
|
136
137
|
"download": "Herunterladen",
|
|
137
138
|
"ellipse": "Ellipse",
|
|
138
139
|
"export": "Exportieren",
|
|
@@ -142,6 +143,7 @@
|
|
|
142
143
|
"line": "Linie",
|
|
143
144
|
"loading": "Laden...",
|
|
144
145
|
"lock2dview": "Mit 2D Ansicht bewegen",
|
|
146
|
+
"mode": "Modus",
|
|
145
147
|
"noresults": "Keine Ergebnisse",
|
|
146
148
|
"pick": "Auswählen",
|
|
147
149
|
"point": "Punkt",
|
|
@@ -417,6 +419,9 @@
|
|
|
417
419
|
"terrain": "Gelände",
|
|
418
420
|
"title": "3D Ansicht"
|
|
419
421
|
},
|
|
422
|
+
"mapdropimport": {
|
|
423
|
+
"dropfiles": "Dateien hierher ziehen, um sie als Kartenebenen zu importieren"
|
|
424
|
+
},
|
|
420
425
|
"mapexport": {
|
|
421
426
|
"configuration": "Konfiguration",
|
|
422
427
|
"projection": "Projektion",
|
|
@@ -912,6 +917,9 @@
|
|
|
912
917
|
"view3d": {
|
|
913
918
|
"storingstate": "3D Ansicht wird gespeichert..."
|
|
914
919
|
},
|
|
920
|
+
"viewshed": {
|
|
921
|
+
"cubemap": "360° Sichtbereich"
|
|
922
|
+
},
|
|
915
923
|
"viewshed3d": {
|
|
916
924
|
"maxDistance": "Maximale Distanz",
|
|
917
925
|
"observerpos": "Beobachterposition",
|
|
@@ -133,6 +133,7 @@
|
|
|
133
133
|
"dataloadfailed": "Failed to load data",
|
|
134
134
|
"date": "Date",
|
|
135
135
|
"delete": "Delete",
|
|
136
|
+
"disabled": "Disabled",
|
|
136
137
|
"download": "Download",
|
|
137
138
|
"ellipse": "Ellipse",
|
|
138
139
|
"export": "Export",
|
|
@@ -142,6 +143,7 @@
|
|
|
142
143
|
"line": "Line",
|
|
143
144
|
"loading": "Loading...",
|
|
144
145
|
"lock2dview": "Move with 2D view",
|
|
146
|
+
"mode": "Mode",
|
|
145
147
|
"noresults": "No results",
|
|
146
148
|
"pick": "Pick",
|
|
147
149
|
"point": "Point",
|
|
@@ -417,6 +419,9 @@
|
|
|
417
419
|
"terrain": "Terrain",
|
|
418
420
|
"title": "3D View"
|
|
419
421
|
},
|
|
422
|
+
"mapdropimport": {
|
|
423
|
+
"dropfiles": "Drop files to import them as map layers"
|
|
424
|
+
},
|
|
420
425
|
"mapexport": {
|
|
421
426
|
"configuration": "Configuration",
|
|
422
427
|
"projection": "Projection",
|
|
@@ -912,6 +917,9 @@
|
|
|
912
917
|
"view3d": {
|
|
913
918
|
"storingstate": "Storing 3D state..."
|
|
914
919
|
},
|
|
920
|
+
"viewshed": {
|
|
921
|
+
"cubemap": "360° viewshed"
|
|
922
|
+
},
|
|
915
923
|
"viewshed3d": {
|
|
916
924
|
"maxDistance": "Maximum distance",
|
|
917
925
|
"observerpos": "Observer position",
|