qwc2 2025.10.9 → 2025.10.14

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.
Files changed (241) hide show
  1. package/actions/display.js +30 -1
  2. package/actions/editing.js +22 -1
  3. package/actions/layerinfo.js +13 -1
  4. package/actions/layers.js +213 -3
  5. package/actions/localConfig.js +58 -1
  6. package/actions/locale.js +21 -1
  7. package/actions/locate.js +26 -1
  8. package/actions/logging.js +10 -1
  9. package/actions/map.js +105 -2
  10. package/actions/measurement.js +12 -1
  11. package/actions/processNotifications.js +37 -1
  12. package/actions/redlining.js +18 -1
  13. package/actions/redliningPick.js +12 -1
  14. package/actions/search.js +12 -1
  15. package/actions/serviceinfo.js +12 -1
  16. package/actions/task.js +55 -3
  17. package/actions/theme.js +339 -19
  18. package/actions/windows.js +164 -5
  19. package/components/AppMenu.js +435 -3
  20. package/components/AttributeForm.js +928 -32
  21. package/components/AttributeTableWidget.js +1105 -13
  22. package/components/AutoEditForm.js +189 -3
  23. package/components/CoordinateDisplayer.js +78 -2
  24. package/components/EditComboField.js +190 -6
  25. package/components/EditUploadField.js +315 -3
  26. package/components/ExportSelection.js +203 -2
  27. package/components/FullscreenSwitcher.js +90 -3
  28. package/components/Icon.js +81 -2
  29. package/components/IdentifyViewer.js +1161 -6
  30. package/components/ImportLayer.js +718 -20
  31. package/components/LayerInfoWindow.js +145 -2
  32. package/components/LinkFeatureForm.js +246 -5
  33. package/components/MapButton.js +88 -2
  34. package/components/MapSelection.js +287 -8
  35. package/components/MessageBar.js +68 -2
  36. package/components/NumericInputWindow.js +359 -2
  37. package/components/PickFeature.js +266 -2
  38. package/components/PluginsContainer.js +227 -8
  39. package/components/PrintSelection.js +620 -49
  40. package/components/ProcessNotifications.js +104 -2
  41. package/components/QtDesignerForm.js +1137 -18
  42. package/components/ResizeableWindow.js +591 -8
  43. package/components/SearchBox.js +1307 -20
  44. package/components/ServiceInfoWindow.js +107 -2
  45. package/components/SideBar.js +204 -4
  46. package/components/StandardApp.js +381 -20
  47. package/components/Swipeable.js +15 -1
  48. package/components/TaskBar.js +85 -2
  49. package/components/ThemeLayersListWindow.js +216 -4
  50. package/components/ThemeList.js +381 -7
  51. package/components/Toolbar.js +106 -2
  52. package/components/WindowManager.js +178 -2
  53. package/components/map/OlLayer.js +257 -6
  54. package/components/map/OlMap.js +405 -5
  55. package/components/map/layers/BingLayer.js +31 -2
  56. package/components/map/layers/GoogleLayer.js +222 -19
  57. package/components/map/layers/GraticuleLayer.js +21 -1
  58. package/components/map/layers/ImageLayer.js +15 -1
  59. package/components/map/layers/MVTLayer.js +52 -2
  60. package/components/map/layers/OSMLayer.js +24 -2
  61. package/components/map/layers/OverlayLayer.js +55 -3
  62. package/components/map/layers/VectorLayer.js +173 -8
  63. package/components/map/layers/WFSLayer.js +220 -6
  64. package/components/map/layers/WMSLayer.js +180 -6
  65. package/components/map/layers/WMTSLayer.js +67 -3
  66. package/components/map/layers/XYZLayer.js +24 -2
  67. package/components/map/layers/index.js +28 -1
  68. package/components/map3d/EditDataset3D.js +190 -3
  69. package/components/map3d/HeightProfile3D.js +402 -3
  70. package/components/map3d/ImportObjects3D.js +162 -2
  71. package/components/map3d/Map3D.js +1304 -38
  72. package/components/map3d/MapControls3D.js +392 -7
  73. package/components/map3d/SearchField3D.js +183 -11
  74. package/components/map3d/View3DSwitcher.js +98 -2
  75. package/components/map3d/drawtool/CreateTool3D.js +174 -4
  76. package/components/map3d/drawtool/EditTool3D.js +590 -6
  77. package/components/map3d/drawtool/NumericInput3D.js +336 -4
  78. package/components/map3d/layers/GeoTIFFLayer3D.js +15 -1
  79. package/components/map3d/layers/VectorLayer3D.js +53 -2
  80. package/components/map3d/layers/WFSLayer3D.js +109 -3
  81. package/components/map3d/layers/WMSLayer3D.js +70 -2
  82. package/components/map3d/layers/WMTSLayer3D.js +27 -3
  83. package/components/map3d/layers/index.js +14 -1
  84. package/components/map3d/utils/FirstPersonControls3D.js +423 -16
  85. package/components/map3d/utils/MiscUtils3D.js +221 -13
  86. package/components/map3d/utils/OrbitControls3D.js +176 -5
  87. package/components/map3d/utils/Tiles3DStyle.js +238 -9
  88. package/components/share/ShareLink.js +54 -2
  89. package/components/share/ShareQRCode.js +62 -2
  90. package/components/share/ShareSocials.js +125 -3
  91. package/components/timeline/FixedTimeline.js +236 -5
  92. package/components/timeline/InfiniteTimeline.js +347 -8
  93. package/components/timeline/TimelineFeaturesSlider.js +439 -5
  94. package/components/widgets/AccordeonWidget.js +96 -2
  95. package/components/widgets/ButtonBar.js +124 -2
  96. package/components/widgets/ColorButton.js +201 -3
  97. package/components/widgets/ComboBox.js +166 -2
  98. package/components/widgets/CopyButton.js +110 -2
  99. package/components/widgets/DateTimeInput.js +100 -3
  100. package/components/widgets/EditableSelect.js +230 -3
  101. package/components/widgets/FileSelector.js +128 -4
  102. package/components/widgets/Input.js +124 -2
  103. package/components/widgets/InputContainer.js +96 -2
  104. package/components/widgets/LayerCatalogWidget.js +219 -3
  105. package/components/widgets/MenuButton.js +157 -1
  106. package/components/widgets/ModalDialog.js +64 -2
  107. package/components/widgets/NavBar.js +119 -2
  108. package/components/widgets/NumberInput.js +226 -4
  109. package/components/widgets/PopupMenu.js +72 -1
  110. package/components/widgets/Primitives.js +6 -1
  111. package/components/widgets/ReCaptchaWidget.js +55 -1
  112. package/components/widgets/SearchWidget.js +255 -2
  113. package/components/widgets/Spinner.js +44 -2
  114. package/components/widgets/SuggestionInput.js +77 -2
  115. package/components/widgets/TextInput.js +308 -2
  116. package/components/widgets/ToggleSwitch.js +85 -2
  117. package/components/widgets/VectorLayerPicker.js +85 -3
  118. package/libs/openlayers.js +225 -5
  119. package/package.json +1 -1
  120. package/plugins/API.js +358 -15
  121. package/plugins/AttributeTable.js +109 -3
  122. package/plugins/Authentication.js +130 -5
  123. package/plugins/BackgroundSwitcher.js +218 -4
  124. package/plugins/Bookmark.js +289 -3
  125. package/plugins/BottomBar.js +298 -4
  126. package/plugins/CookiePopup.js +67 -3
  127. package/plugins/Cyclomedia.js +442 -5
  128. package/plugins/Editing.js +497 -9
  129. package/plugins/FeatureForm.js +366 -4
  130. package/plugins/FeatureSearch.js +458 -3
  131. package/plugins/GeometryDigitizer.js +664 -7
  132. package/plugins/HeightProfile.js +763 -15
  133. package/plugins/Help.js +102 -3
  134. package/plugins/HomeButton.js +80 -3
  135. package/plugins/Identify.js +543 -5
  136. package/plugins/LayerCatalog.js +215 -4
  137. package/plugins/LayerTree.js +1194 -6
  138. package/plugins/LocateButton.js +94 -3
  139. package/plugins/Map.js +320 -16
  140. package/plugins/MapCompare.js +94 -3
  141. package/plugins/MapCopyright.js +127 -5
  142. package/plugins/MapExport.js +613 -20
  143. package/plugins/MapFilter.js +868 -12
  144. package/plugins/MapInfoTooltip.js +277 -3
  145. package/plugins/MapLegend.js +253 -4
  146. package/plugins/MapTip.js +290 -4
  147. package/plugins/Measure.js +220 -4
  148. package/plugins/NewsPopup.js +137 -3
  149. package/plugins/OverviewMap.js +167 -7
  150. package/plugins/Panoramax.js +340 -2
  151. package/plugins/Portal.js +199 -4
  152. package/plugins/Print.js +1231 -15
  153. package/plugins/Redlining.js +750 -6
  154. package/plugins/Reports.js +332 -3
  155. package/plugins/Routing.js +1278 -15
  156. package/plugins/ScratchDrawing.js +173 -5
  157. package/plugins/Settings.js +241 -4
  158. package/plugins/Share.js +198 -3
  159. package/plugins/StartupMarker.js +84 -4
  160. package/plugins/TaskButton.js +88 -3
  161. package/plugins/ThemeSwitcher.js +164 -4
  162. package/plugins/TimeManager.js +971 -10
  163. package/plugins/TopBar.js +300 -7
  164. package/plugins/TourGuide.js +213 -2
  165. package/plugins/ValueTool.js +419 -4
  166. package/plugins/View3D.js +519 -14
  167. package/plugins/ZoomButtons.js +165 -3
  168. package/plugins/map/EditingSupport.js +199 -7
  169. package/plugins/map/LocateSupport.js +260 -4
  170. package/plugins/map/MeasurementSupport.js +216 -8
  171. package/plugins/map/RedliningPickSupport.js +201 -7
  172. package/plugins/map/RedliningSupport.js +726 -17
  173. package/plugins/map/SnapInteraction.js +101 -1
  174. package/plugins/map/SnapSupport.js +210 -2
  175. package/plugins/map/SnappingSupport.js +356 -17
  176. package/plugins/map3d/BackgroundSwitcher3D.js +44 -3
  177. package/plugins/map3d/BottomBar3D.js +118 -3
  178. package/plugins/map3d/Compare3D.js +422 -8
  179. package/plugins/map3d/Draw3D.js +353 -6
  180. package/plugins/map3d/ExportObjects3D.js +393 -18
  181. package/plugins/map3d/HideObjects3D.js +313 -12
  182. package/plugins/map3d/Identify3D.js +283 -12
  183. package/plugins/map3d/LayerTree3D.js +323 -3
  184. package/plugins/map3d/MapCopyright3D.js +128 -5
  185. package/plugins/map3d/MapExport3D.js +590 -10
  186. package/plugins/map3d/MapLight3D.js +553 -6
  187. package/plugins/map3d/Measure3D.js +571 -20
  188. package/plugins/map3d/OverviewMap3D.js +169 -3
  189. package/plugins/map3d/Settings3D.js +73 -3
  190. package/plugins/map3d/TopBar3D.js +207 -9
  191. package/plugins/redlining/RedliningBufferSupport.js +206 -3
  192. package/reducers/display.js +34 -2
  193. package/reducers/editing.js +68 -3
  194. package/reducers/index.js +9 -1
  195. package/reducers/layerinfo.js +26 -2
  196. package/reducers/layers.js +456 -9
  197. package/reducers/localConfig.js +122 -2
  198. package/reducers/locale.js +38 -2
  199. package/reducers/locate.js +40 -2
  200. package/reducers/map.js +176 -5
  201. package/reducers/measurement.js +42 -2
  202. package/reducers/processNotifications.js +49 -2
  203. package/reducers/redlining.js +50 -2
  204. package/reducers/redliningPick.js +27 -2
  205. package/reducers/search.js +20 -1
  206. package/reducers/serviceinfo.js +25 -2
  207. package/reducers/task.js +45 -2
  208. package/reducers/theme.js +51 -2
  209. package/reducers/windows.js +203 -2
  210. package/scripts/dist.sh +1 -1
  211. package/scripts/gen-plugin-docs.js +152 -2
  212. package/scripts/makeIconkit.js +85 -6
  213. package/scripts/themesConfig.js +742 -40
  214. package/scripts/updateTranslations.js +251 -10
  215. package/selectors/searchproviders.js +44 -2
  216. package/stores/StandardStore.js +42 -2
  217. package/utils/ConfigUtils.js +84 -3
  218. package/utils/CoordinatesUtils.js +234 -23
  219. package/utils/DxfUtils.js +237 -11
  220. package/utils/EditingInterface.js +421 -87
  221. package/utils/EditingUtils.js +357 -13
  222. package/utils/ElevationInterface.js +83 -22
  223. package/utils/FeatureStyles.js +429 -5
  224. package/utils/IdentifyUtils.js +443 -7
  225. package/utils/ImageEditor.js +79 -9
  226. package/utils/LayerUtils.js +1516 -50
  227. package/utils/LocaleUtils.js +117 -7
  228. package/utils/MapUtils.js +241 -59
  229. package/utils/MeasureUtils.js +323 -2
  230. package/utils/MiscUtils.js +189 -11
  231. package/utils/PermaLinkUtils.js +429 -6
  232. package/utils/PluginStore.js +27 -1
  233. package/utils/ResourceRegistry.js +15 -1
  234. package/utils/RoutingInterface.js +307 -7
  235. package/utils/SearchProviders.js +722 -19
  236. package/utils/ServiceLayerUtils.js +669 -14
  237. package/utils/Signal.js +32 -2
  238. package/utils/ThemeUtils.js +341 -7
  239. package/utils/VectorLayerUtils.js +589 -15
  240. package/utils/expr_grammar/grammar.js +2239 -2
  241. package/utils/expr_grammar/test.js +65 -3
@@ -1,7 +1,75 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ /**
2
8
  * Copyright 2024 Sourcepole AG
3
9
  * All rights reserved.
4
10
  *
5
11
  * This source code is licensed under the BSD-style license found in the
6
12
  * LICENSE file in the root directory of this source tree.
7
- */import ColorLayer from"@giro3d/giro3d/core/layer/ColorLayer";import TiledImageSource from"@giro3d/giro3d/sources/TiledImageSource.js";import ol from"openlayers";import{wmsImageLoadFunction,wmsToOpenlayersOptions}from"../../map/layers/WMSLayer";export default{create3d:function create3d(options,projection){var queryParameters=_objectSpread(_objectSpread({},wmsToOpenlayersOptions(options)),{},{__t:+new Date});return new ColorLayer({name:options.name,source:new TiledImageSource({source:new ol.source.TileWMS({url:options.url.split("?")[0],params:queryParameters,version:options.version,projection:projection,tileLoadFunction:function tileLoadFunction(imageTile,src){return wmsImageLoadFunction(imageTile.getImage(),src)}})})})},update3d:function update3d(layer,newOptions,oldOptions,projection){var _layer$source;if(oldOptions&&layer!==null&&layer!==void 0&&(_layer$source=layer.source)!==null&&_layer$source!==void 0&&_layer$source.updateParams){var changed=(oldOptions.rev||0)!==(newOptions.rev||0);var oldParams=wmsToOpenlayersOptions(oldOptions);var newParams=wmsToOpenlayersOptions(newOptions);Object.keys(oldParams).forEach(function(key){if(!(key in newParams)){newParams[key]=undefined}});if(!changed){changed=Object.keys(newParams).find(function(key){return newParams[key]!==oldParams[key]})!==undefined}changed|=newOptions.visibility!==oldOptions.visibility;if(changed){var queryParameters=_objectSpread(_objectSpread({},newParams),{},{__t:+new Date});if(layer.__updateTimeout){clearTimeout(layer.__updateTimeout)}if(!newOptions.visibility||!queryParameters.LAYERS){layer.visible=false}layer.__updateTimeout=setTimeout(function(){layer.visible=queryParameters.LAYERS&&newOptions.visibility;layer.source.updateParams(queryParameters);layer.update();layer.__updateTimeout=null},500)}}}};
13
+ */
14
+
15
+ import ColorLayer from '@giro3d/giro3d/core/layer/ColorLayer';
16
+ import TiledImageSource from '@giro3d/giro3d/sources/TiledImageSource.js';
17
+ import ol from 'openlayers';
18
+ import { wmsImageLoadFunction, wmsToOpenlayersOptions } from '../../map/layers/WMSLayer';
19
+ export default {
20
+ create3d: function create3d(options, projection) {
21
+ var queryParameters = _objectSpread(_objectSpread({}, wmsToOpenlayersOptions(options)), {}, {
22
+ __t: +new Date()
23
+ });
24
+ return new ColorLayer({
25
+ name: options.name,
26
+ source: new TiledImageSource({
27
+ source: new ol.source.TileWMS({
28
+ url: options.url.split("?")[0],
29
+ params: queryParameters,
30
+ version: options.version,
31
+ projection: projection,
32
+ tileLoadFunction: function tileLoadFunction(imageTile, src) {
33
+ return wmsImageLoadFunction(imageTile.getImage(), src);
34
+ }
35
+ })
36
+ })
37
+ });
38
+ },
39
+ update3d: function update3d(layer, newOptions, oldOptions, projection) {
40
+ var _layer$source;
41
+ if (oldOptions && layer !== null && layer !== void 0 && (_layer$source = layer.source) !== null && _layer$source !== void 0 && _layer$source.updateParams) {
42
+ var changed = (oldOptions.rev || 0) !== (newOptions.rev || 0);
43
+ var oldParams = wmsToOpenlayersOptions(oldOptions);
44
+ var newParams = wmsToOpenlayersOptions(newOptions);
45
+ Object.keys(oldParams).forEach(function (key) {
46
+ if (!(key in newParams)) {
47
+ newParams[key] = undefined;
48
+ }
49
+ });
50
+ if (!changed) {
51
+ changed = Object.keys(newParams).find(function (key) {
52
+ return newParams[key] !== oldParams[key];
53
+ }) !== undefined;
54
+ }
55
+ changed |= newOptions.visibility !== oldOptions.visibility;
56
+ if (changed) {
57
+ var queryParameters = _objectSpread(_objectSpread({}, newParams), {}, {
58
+ __t: +new Date()
59
+ });
60
+ if (layer.__updateTimeout) {
61
+ clearTimeout(layer.__updateTimeout);
62
+ }
63
+ if (!newOptions.visibility || !queryParameters.LAYERS) {
64
+ layer.visible = false;
65
+ }
66
+ layer.__updateTimeout = setTimeout(function () {
67
+ layer.visible = queryParameters.LAYERS && newOptions.visibility;
68
+ layer.source.updateParams(queryParameters);
69
+ layer.update();
70
+ layer.__updateTimeout = null;
71
+ }, 500);
72
+ }
73
+ }
74
+ }
75
+ };
@@ -1,9 +1,33 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ /**
2
8
  * Copyright 2015 GeoSolutions Sas
3
9
  * Copyright 2016-2024 Sourcepole AG
4
10
  * All rights reserved.
5
11
  *
6
12
  * This source code is licensed under the BSD-style license found in the
7
13
  * LICENSE file in the root directory of this source tree.
8
- */import ColorLayer from"@giro3d/giro3d/core/layer/ColorLayer";import TiledImageSource from"@giro3d/giro3d/sources/TiledImageSource.js";import{createWMTSSource}from"../../map/layers/WMTSLayer";export default{create3d:function create3d(options,projection){return new ColorLayer({name:options.name,source:new TiledImageSource({source:createWMTSSource(_objectSpread(_objectSpread({},options),{},{projection:projection}))})})},update3d:function update3d(layer,newOptions,oldOptions,projection){// pass
9
- }};
14
+ */
15
+
16
+ import ColorLayer from '@giro3d/giro3d/core/layer/ColorLayer';
17
+ import TiledImageSource from "@giro3d/giro3d/sources/TiledImageSource.js";
18
+ import { createWMTSSource } from '../../map/layers/WMTSLayer';
19
+ export default {
20
+ create3d: function create3d(options, projection) {
21
+ return new ColorLayer({
22
+ name: options.name,
23
+ source: new TiledImageSource({
24
+ source: createWMTSSource(_objectSpread(_objectSpread({}, options), {}, {
25
+ projection: projection
26
+ }))
27
+ })
28
+ });
29
+ },
30
+ update3d: function update3d(layer, newOptions, oldOptions, projection) {
31
+ // pass
32
+ }
33
+ };
@@ -5,4 +5,17 @@
5
5
  *
6
6
  * This source code is licensed under the BSD-style license found in the
7
7
  * LICENSE file in the root directory of this source tree.
8
- */import geotiffLayer from"./GeoTIFFLayer3D";import vectorLayer from"./VectorLayer3D";import wfsLayer from"./WFSLayer3D";import wmsLayer from"./WMSLayer3D";import wmtsLayer from"./WMTSLayer3D";export default{geotiff:geotiffLayer,vector:vectorLayer,wfs:wfsLayer,wms:wmsLayer,wmts:wmtsLayer};
8
+ */
9
+
10
+ import geotiffLayer from './GeoTIFFLayer3D';
11
+ import vectorLayer from './VectorLayer3D';
12
+ import wfsLayer from './WFSLayer3D';
13
+ import wmsLayer from './WMSLayer3D';
14
+ import wmtsLayer from './WMTSLayer3D';
15
+ export default {
16
+ geotiff: geotiffLayer,
17
+ vector: vectorLayer,
18
+ wfs: wfsLayer,
19
+ wms: wmsLayer,
20
+ wmts: wmtsLayer
21
+ };
@@ -1,16 +1,423 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}import{Controls,MOUSE,Raycaster,Vector2,Vector3}from"three";var _twoPI=2*Math.PI;var STATE={NONE:-1,ROTATE:0,PAN:1,TOUCH_ROTATE:2,TOUCH_PAN:3};var FirstPersonControls3D=/*#__PURE__*/function(_Controls){function FirstPersonControls3D(object,mouseButtons){var _this;_classCallCheck(this,FirstPersonControls3D);_this=_callSuper(this,FirstPersonControls3D,[object,null]);// Keyboard navigate
2
- _defineProperty(_this,"_handleKeyboardNav",function(){var lr=-_this._keyState.ArrowLeft+_this._keyState.ArrowRight;var du=-_this._keyState.ArrowDown+_this._keyState.ArrowUp;var pg=-_this._keyState.PageDown+_this._keyState.PageUp;var pitch=_this._keyState.Shift?du*_this.keyRotateStep:0;var yaw=_this._keyState.Control?0:-lr*_this.keyRotateStep;var dx=_this._keyState.Control?lr*_this.keyPanStep*0.75:0;var dy=_this._keyState.Shift?0:du*_this.keyPanStep;_this._rotate(yaw,pitch);_this._pan(dx,dy);if(pg){var newPersonHeight=Math.max(2,_this.personHeight+_this.personHeight*pg*0.05);_this.target.z+=newPersonHeight-_this.personHeight;_this.personHeight=newPersonHeight;_this._changed=true;_this.update()}});// Event listeners
3
- _defineProperty(_this,"_onKeyDown",function(event){if(event.key in _this._keyState){_this._keyState[event.key]=true;if(!_this._keyboardNavInterval){_this._keyboardNavInterval=setInterval(_this._handleKeyboardNav,50)}}});_defineProperty(_this,"_onKeyUp",function(event){if(event.key in _this._keyState){_this._keyState[event.key]=false;if(Object.values(_this._keyState).every(function(x){return!x})){clearInterval(_this._keyboardNavInterval);_this._keyboardNavInterval=null}}});_defineProperty(_this,"_onBlur",function(){_this._keyState={ArrowLeft:false,ArrowRight:false,ArrowUp:false,ArrowDown:false,PageUp:false,PageDown:false,Control:false,Shift:false};clearInterval(_this._keyboardNavInterval);_this._keyboardNavInterval=null});_defineProperty(_this,"_onPointerDown",function(event){if(!_this.enabled){return}if(_this._pointers.length===0){_this.domElement.setPointerCapture(event.pointerId);_this.domElement.addEventListener("pointermove",_this._onPointerMove);_this.domElement.addEventListener("pointerup",_this._onPointerUp);_this.domElement.addEventListener("pointercancel",_this._onPointerUp)}else if(_this._isTrackingPointer(event)){return}_this._addPointer(event);if(event.pointerType==="touch"){_this._onTouchStart(event)}else{_this._onMouseDown(event)}});_defineProperty(_this,"_onPointerMove",function(event){if(event.pointerType==="touch"){_this._onTouchMove(event)}else{_this._onMouseMove(event)}});_defineProperty(_this,"_onPointerUp",function(event){_this._removePointer(event);if(_this._pointers.length===0){_this.domElement.releasePointerCapture(event.pointerId);_this.domElement.removeEventListener("pointermove",_this._onPointerMove);_this.domElement.removeEventListener("pointerup",_this._onPointerUp);_this.domElement.removeEventListener("pointercancel",_this._onPointerUp);_this._interactionState=STATE.NONE}else if(_this._pointers.length===1){var pointerId=_this._pointers[0];var position=_this._pointerPositions[pointerId];// minimal placeholder event - allows state correction on pointer-up
4
- _this._onTouchStart({pointerId:pointerId,pageX:position.x,pageY:position.y})}});_defineProperty(_this,"_onMouseDown",function(event){var buttonMap={0:"LEFT",1:"MIDDLE",2:"RIGHT"};_this._interactionState=STATE.NONE;if(_this.mouseButtons[buttonMap[event.button]]===MOUSE.ROTATE){_this._interactionState=STATE.ROTATE;_this._interactionStart.set(event.clientX,event.clientY)}else if(_this.mouseButtons[buttonMap[event.button]]===MOUSE.PAN){_this._interactionState=STATE.PAN;_this._interactionStart.set(event.clientX,event.clientY)}});_defineProperty(_this,"_onMouseMove",function(event){var deltaX=event.clientX-_this._interactionStart.x;var deltaY=event.clientY-_this._interactionStart.y;_this._interactionStart.set(event.clientX,event.clientY);if(_this._interactionState===STATE.PAN){_this._pan(-deltaX*_this.mousePanSpeed,deltaY*_this.mousePanSpeed)}else if(_this._interactionState===STATE.ROTATE){_this._rotate(_twoPI*deltaX*_this.mouseRotateSpeed/_this.domElement.clientHeight,// yes, height
5
- _twoPI*deltaY*_this.mouseRotateSpeed/_this.domElement.clientHeight)}});_defineProperty(_this,"_onTouchStart",function(event){_this._interactionState=STATE.NONE;if(_this._pointers.length===1){_this._interactionState=STATE.TOUCH_PAN;_this._interactionStart.set(event.pageX,event.pageY)}else if(_this._pointers.length===2){_this._interactionState=STATE.TOUCH_ROTATE;var _this$_getTwoPointerP=_this._getTwoPointerPosition(event),x=_this$_getTwoPointerP.x,y=_this$_getTwoPointerP.y;_this._interactionStart.set(x,y)}});_defineProperty(_this,"_onTouchMove",function(event){_this._trackPointer(event);if(_this._interactionState===STATE.TOUCH_PAN){var deltaX=event.pageX-_this._interactionStart.x;var deltaY=event.pageY-_this._interactionStart.y;_this._interactionStart.set(event.pageX,event.pageY);_this._pan(-deltaX*_this.mousePanSpeed,deltaY*_this.mousePanSpeed)}else if(_this._interactionState===STATE.TOUCH_ROTATE){var _this$_getTwoPointerP2=_this._getTwoPointerPosition(event),x=_this$_getTwoPointerP2.x,y=_this$_getTwoPointerP2.y;var _deltaX=x-_this._interactionStart.x;var _deltaY=y-_this._interactionStart.y;_this._interactionStart.set(x,y);_this._rotate(_twoPI*_deltaX*_this.mouseRotateSpeed/_this.domElement.clientHeight,// yes, height
6
- _twoPI*_deltaY*_this.mouseRotateSpeed/_this.domElement.clientHeight)}});_defineProperty(_this,"_onContextMenu",function(event){event.preventDefault()});_this.mouseButtons=mouseButtons;// Step sizes
7
- _this.keyPanStep=1.5;_this.keyRotateStep=4/180*Math.PI;_this.mousePanSpeed=0.1;_this.mouseRotateSpeed=10/180*Math.PI;_this.personHeight=3;_this.sceneContext=null;_this.enabled=false;_this.yaw=0;_this.pitch=0;_this.lookAt=new Vector3(0,1,0);// Target is the actual collision detection point
8
- _this.target=new Vector3().addVectors(_this.object.position,_this.lookAt.clone().multiplyScalar(3));_this.isFirstPerson=true;// Internals
9
- _this._keyState={ArrowLeft:false,ArrowRight:false,ArrowUp:false,ArrowDown:false,PageUp:false,PageDown:false,Control:false,Shift:false};_this._keyboardNavInterval=null;_this._changed=false;_this._interactionState=STATE.NONE;_this._interactionStart=new Vector2;_this._pointers=[];_this._pointerPositions={};return _this}_inherits(FirstPersonControls3D,_Controls);return _createClass(FirstPersonControls3D,[{key:"connect",value:function connect(sceneContext){this.domElement=sceneContext.scene.domElement;this.sceneContext=sceneContext;this.domElement.addEventListener("pointerdown",this._onPointerDown);this.domElement.addEventListener("pointercancel",this._onPointerUp);this.domElement.addEventListener("contextmenu",this._onContextMenu);this.domElement.addEventListener("keydown",this._onKeyDown);this.domElement.addEventListener("keyup",this._onKeyUp);this.domElement.addEventListener("blur",this._onBlur);this.domElement.style.touchAction="none";// disable touch scroll
10
- this.object.near=0.1;this.sceneContext.scene.view.setControls(this);this.enabled=true}},{key:"disconnect",value:function disconnect(){this.enabled=false;this.sceneContext.scene.view.setControls(null);this.domElement.removeEventListener("pointerdown",this._onPointerDown);this.domElement.removeEventListener("pointermove",this._onPointerMove);this.domElement.removeEventListener("pointerup",this._onPointerUp);this.domElement.removeEventListener("pointercancel",this._onPointerUp);this.domElement.removeEventListener("contextmenu",this._onContextMenu);this.domElement.removeEventListener("keydown",this._onKeyDown);this.domElement.removeEventListener("keyup",this._onKeyUp);this.domElement.removeEventListener("blur",this._onBlur);this.domElement.style.touchAction="auto"}},{key:"setView",value:function setView(targetpos,lookAt){var personHeight=arguments.length>2&&arguments[2]!==undefined?arguments[2]:undefined;this.personHeight=personHeight!==null&&personHeight!==void 0?personHeight:this.personHeight;this.target.copy(targetpos);this.lookAt.copy(lookAt);this.object.position.subVectors(targetpos,lookAt.clone().multiplyScalar(3));this.pitch=Math.asin(Math.max(-1,Math.min(1,this.lookAt.z)));this.yaw=Math.atan2(-this.lookAt.x,this.lookAt.y);this.object.lookAt(this.target);this.dispatchEvent({type:"change"})}},{key:"panView",value:function panView(dx,dy){if(dx||dy){this._pan(dx,dy)}}},{key:"tiltView",value:function tiltView(yaw,pitch){this.yaw+=yaw;this.pitch+=pitch;if(yaw||pitch){this._changed=true;this.update()}}},{key:"dispose",value:function dispose(){this.disconnect()}},{key:"update",value:function update(){var deltaTime=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;if(!this._changed){return}this.lookAt.x=-Math.sin(this.yaw)*Math.cos(this.pitch);this.lookAt.y=Math.cos(this.yaw)*Math.cos(this.pitch);this.lookAt.z=Math.sin(this.pitch);this.object.position.subVectors(this.target,this.lookAt.clone().multiplyScalar(3));this.object.lookAt(this.target);this.dispatchEvent({type:"change"});this._changed=false}// Internals
11
- },{key:"_rotate",value:function _rotate(yaw,pitch){this.yaw+=yaw;this.pitch=Math.max(-0.5*Math.PI,Math.min(this.pitch+pitch,0.5*Math.PI));this._changed=true;this.update()}// deltaX and deltaY are in pixels; right and down are positive
12
- },{key:"_pan",value:function _pan(deltaX,deltaY){var cosY=Math.cos(this.yaw);var sinY=Math.sin(this.yaw);var dx=cosY*deltaX+-sinY*deltaY;var dy=sinY*deltaX+cosY*deltaY;var dir=new Vector2(dx,dy);var step=dir.length();if(step<0.001){return}dir.divideScalar(step);// Adjust step to avoid passing within any wall buffer zone
13
- var raycaster=new Raycaster;raycaster.set(this.target,new Vector3(dir.x,dir.y,0));var inter=raycaster.intersectObjects(this.sceneContext.collisionObjects,true)[0];var wallBuffer=0.5;if(inter&&inter.distance-wallBuffer<step){var overstep=step-(inter.distance-wallBuffer);step-=overstep;this.target.x+=step*dir.x;this.target.y+=step*dir.y;// Project overstep onto wall
14
- var tangent=new Vector2(-inter.normal.y,inter.normal.x).normalize();var slidestep=tangent.dot(dir)*overstep;if(slidestep<0){tangent.negate();slidestep*=-1}raycaster.set(this.target,new Vector3(tangent.x,tangent.y,0));var slideInter=raycaster.intersectObjects(this.sceneContext.collisionObjects,true)[0];if(slideInter&&slideInter.distance-wallBuffer<slidestep){slidestep=slideInter.distance-wallBuffer}this.target.x+=slidestep*tangent.x;this.target.y+=slidestep*tangent.y}else{this.target.x+=step*dir.x;this.target.y+=step*dir.y}// Stay above terrain // objects on terain
15
- var height=undefined;raycaster.set(this.target,new Vector3(0,0,-1));var vinter=raycaster.intersectObjects(this.sceneContext.collisionObjects,true)[0];if(vinter){height=vinter.point.z}else{height=this.sceneContext.getTerrainHeightFromMap([this.target.x,this.target.y])}if(height!==undefined){var newHeight=height+this.personHeight;this.target.z=0.75*this.target.z+0.25*newHeight}this._changed=true;this.update()}},{key:"_addPointer",value:// Touch pointer tracking
16
- function _addPointer(event){this._pointers.push(event.pointerId);this._pointerPositions[event.pointerId]=new Vector2(event.pageX,event.pageY)}},{key:"_removePointer",value:function _removePointer(event){delete this._pointerPositions[event.pointerId];this._pointers=this._pointers.filter(function(id){return id!==event.pointerId})}},{key:"_isTrackingPointer",value:function _isTrackingPointer(event){return this._pointers.find(function(id){return id===event.pointerId})!==undefined}},{key:"_trackPointer",value:function _trackPointer(event){this._pointerPositions[event.pointerId].set(event.pageX,event.pageY)}},{key:"_getTwoPointerPosition",value:function _getTwoPointerPosition(event){var otherPointerId=event.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];var otherPointerPos=this._pointerPositions[otherPointerId];return{x:0.5*(event.pageX+otherPointerPos.x),y:0.5*(event.pageY+otherPointerPos.y)}}}])}(Controls);export{FirstPersonControls3D as default};
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
3
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
4
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
5
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
6
+ function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
7
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
8
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
9
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
10
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
11
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
12
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
14
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
+ import { Controls, MOUSE, Raycaster, Vector2, Vector3 } from 'three';
16
+ var _twoPI = 2 * Math.PI;
17
+ var STATE = {
18
+ NONE: -1,
19
+ ROTATE: 0,
20
+ PAN: 1,
21
+ TOUCH_ROTATE: 2,
22
+ TOUCH_PAN: 3
23
+ };
24
+ var FirstPersonControls3D = /*#__PURE__*/function (_Controls) {
25
+ function FirstPersonControls3D(object, mouseButtons) {
26
+ var _this;
27
+ _classCallCheck(this, FirstPersonControls3D);
28
+ _this = _callSuper(this, FirstPersonControls3D, [object, null]);
29
+ // Keyboard navigate
30
+ _defineProperty(_this, "_handleKeyboardNav", function () {
31
+ var lr = -_this._keyState.ArrowLeft + _this._keyState.ArrowRight;
32
+ var du = -_this._keyState.ArrowDown + _this._keyState.ArrowUp;
33
+ var pg = -_this._keyState.PageDown + _this._keyState.PageUp;
34
+ var pitch = _this._keyState.Shift ? du * _this.keyRotateStep : 0;
35
+ var yaw = _this._keyState.Control ? 0 : -lr * _this.keyRotateStep;
36
+ var dx = _this._keyState.Control ? lr * _this.keyPanStep * 0.75 : 0;
37
+ var dy = _this._keyState.Shift ? 0 : du * _this.keyPanStep;
38
+ _this._rotate(yaw, pitch);
39
+ _this._pan(dx, dy);
40
+ if (pg) {
41
+ var newPersonHeight = Math.max(2, _this.personHeight + _this.personHeight * pg * 0.05);
42
+ _this.target.z += newPersonHeight - _this.personHeight;
43
+ _this.personHeight = newPersonHeight;
44
+ _this._changed = true;
45
+ _this.update();
46
+ }
47
+ });
48
+ // Event listeners
49
+ _defineProperty(_this, "_onKeyDown", function (event) {
50
+ if (event.key in _this._keyState) {
51
+ _this._keyState[event.key] = true;
52
+ if (!_this._keyboardNavInterval) {
53
+ _this._keyboardNavInterval = setInterval(_this._handleKeyboardNav, 50);
54
+ }
55
+ }
56
+ });
57
+ _defineProperty(_this, "_onKeyUp", function (event) {
58
+ if (event.key in _this._keyState) {
59
+ _this._keyState[event.key] = false;
60
+ if (Object.values(_this._keyState).every(function (x) {
61
+ return !x;
62
+ })) {
63
+ clearInterval(_this._keyboardNavInterval);
64
+ _this._keyboardNavInterval = null;
65
+ }
66
+ }
67
+ });
68
+ _defineProperty(_this, "_onBlur", function () {
69
+ _this._keyState = {
70
+ ArrowLeft: false,
71
+ ArrowRight: false,
72
+ ArrowUp: false,
73
+ ArrowDown: false,
74
+ PageUp: false,
75
+ PageDown: false,
76
+ Control: false,
77
+ Shift: false
78
+ };
79
+ clearInterval(_this._keyboardNavInterval);
80
+ _this._keyboardNavInterval = null;
81
+ });
82
+ _defineProperty(_this, "_onPointerDown", function (event) {
83
+ if (!_this.enabled) {
84
+ return;
85
+ }
86
+ if (_this._pointers.length === 0) {
87
+ _this.domElement.setPointerCapture(event.pointerId);
88
+ _this.domElement.addEventListener('pointermove', _this._onPointerMove);
89
+ _this.domElement.addEventListener('pointerup', _this._onPointerUp);
90
+ _this.domElement.addEventListener('pointercancel', _this._onPointerUp);
91
+ } else if (_this._isTrackingPointer(event)) {
92
+ return;
93
+ }
94
+ _this._addPointer(event);
95
+ if (event.pointerType === 'touch') {
96
+ _this._onTouchStart(event);
97
+ } else {
98
+ _this._onMouseDown(event);
99
+ }
100
+ });
101
+ _defineProperty(_this, "_onPointerMove", function (event) {
102
+ if (event.pointerType === 'touch') {
103
+ _this._onTouchMove(event);
104
+ } else {
105
+ _this._onMouseMove(event);
106
+ }
107
+ });
108
+ _defineProperty(_this, "_onPointerUp", function (event) {
109
+ _this._removePointer(event);
110
+ if (_this._pointers.length === 0) {
111
+ _this.domElement.releasePointerCapture(event.pointerId);
112
+ _this.domElement.removeEventListener('pointermove', _this._onPointerMove);
113
+ _this.domElement.removeEventListener('pointerup', _this._onPointerUp);
114
+ _this.domElement.removeEventListener('pointercancel', _this._onPointerUp);
115
+ _this._interactionState = STATE.NONE;
116
+ } else if (_this._pointers.length === 1) {
117
+ var pointerId = _this._pointers[0];
118
+ var position = _this._pointerPositions[pointerId];
119
+
120
+ // minimal placeholder event - allows state correction on pointer-up
121
+ _this._onTouchStart({
122
+ pointerId: pointerId,
123
+ pageX: position.x,
124
+ pageY: position.y
125
+ });
126
+ }
127
+ });
128
+ _defineProperty(_this, "_onMouseDown", function (event) {
129
+ var buttonMap = {
130
+ 0: 'LEFT',
131
+ 1: 'MIDDLE',
132
+ 2: 'RIGHT'
133
+ };
134
+ _this._interactionState = STATE.NONE;
135
+ if (_this.mouseButtons[buttonMap[event.button]] === MOUSE.ROTATE) {
136
+ _this._interactionState = STATE.ROTATE;
137
+ _this._interactionStart.set(event.clientX, event.clientY);
138
+ } else if (_this.mouseButtons[buttonMap[event.button]] === MOUSE.PAN) {
139
+ _this._interactionState = STATE.PAN;
140
+ _this._interactionStart.set(event.clientX, event.clientY);
141
+ }
142
+ });
143
+ _defineProperty(_this, "_onMouseMove", function (event) {
144
+ var deltaX = event.clientX - _this._interactionStart.x;
145
+ var deltaY = event.clientY - _this._interactionStart.y;
146
+ _this._interactionStart.set(event.clientX, event.clientY);
147
+ if (_this._interactionState === STATE.PAN) {
148
+ _this._pan(-deltaX * _this.mousePanSpeed, deltaY * _this.mousePanSpeed);
149
+ } else if (_this._interactionState === STATE.ROTATE) {
150
+ _this._rotate(_twoPI * deltaX * _this.mouseRotateSpeed / _this.domElement.clientHeight,
151
+ // yes, height
152
+ _twoPI * deltaY * _this.mouseRotateSpeed / _this.domElement.clientHeight);
153
+ }
154
+ });
155
+ _defineProperty(_this, "_onTouchStart", function (event) {
156
+ _this._interactionState = STATE.NONE;
157
+ if (_this._pointers.length === 1) {
158
+ _this._interactionState = STATE.TOUCH_PAN;
159
+ _this._interactionStart.set(event.pageX, event.pageY);
160
+ } else if (_this._pointers.length === 2) {
161
+ _this._interactionState = STATE.TOUCH_ROTATE;
162
+ var _this$_getTwoPointerP = _this._getTwoPointerPosition(event),
163
+ x = _this$_getTwoPointerP.x,
164
+ y = _this$_getTwoPointerP.y;
165
+ _this._interactionStart.set(x, y);
166
+ }
167
+ });
168
+ _defineProperty(_this, "_onTouchMove", function (event) {
169
+ _this._trackPointer(event);
170
+ if (_this._interactionState === STATE.TOUCH_PAN) {
171
+ var deltaX = event.pageX - _this._interactionStart.x;
172
+ var deltaY = event.pageY - _this._interactionStart.y;
173
+ _this._interactionStart.set(event.pageX, event.pageY);
174
+ _this._pan(-deltaX * _this.mousePanSpeed, deltaY * _this.mousePanSpeed);
175
+ } else if (_this._interactionState === STATE.TOUCH_ROTATE) {
176
+ var _this$_getTwoPointerP2 = _this._getTwoPointerPosition(event),
177
+ x = _this$_getTwoPointerP2.x,
178
+ y = _this$_getTwoPointerP2.y;
179
+ var _deltaX = x - _this._interactionStart.x;
180
+ var _deltaY = y - _this._interactionStart.y;
181
+ _this._interactionStart.set(x, y);
182
+ _this._rotate(_twoPI * _deltaX * _this.mouseRotateSpeed / _this.domElement.clientHeight,
183
+ // yes, height
184
+ _twoPI * _deltaY * _this.mouseRotateSpeed / _this.domElement.clientHeight);
185
+ }
186
+ });
187
+ _defineProperty(_this, "_onContextMenu", function (event) {
188
+ event.preventDefault();
189
+ });
190
+ _this.mouseButtons = mouseButtons;
191
+
192
+ // Step sizes
193
+ _this.keyPanStep = 1.5;
194
+ _this.keyRotateStep = 4 / 180 * Math.PI;
195
+ _this.mousePanSpeed = 0.1;
196
+ _this.mouseRotateSpeed = 10 / 180 * Math.PI;
197
+ _this.personHeight = 3;
198
+ _this.sceneContext = null;
199
+ _this.enabled = false;
200
+ _this.yaw = 0;
201
+ _this.pitch = 0;
202
+ _this.lookAt = new Vector3(0, 1, 0);
203
+ // Target is the actual collision detection point
204
+ _this.target = new Vector3().addVectors(_this.object.position, _this.lookAt.clone().multiplyScalar(3));
205
+ _this.isFirstPerson = true;
206
+
207
+ // Internals
208
+ _this._keyState = {
209
+ ArrowLeft: false,
210
+ ArrowRight: false,
211
+ ArrowUp: false,
212
+ ArrowDown: false,
213
+ PageUp: false,
214
+ PageDown: false,
215
+ Control: false,
216
+ Shift: false
217
+ };
218
+ _this._keyboardNavInterval = null;
219
+ _this._changed = false;
220
+ _this._interactionState = STATE.NONE;
221
+ _this._interactionStart = new Vector2();
222
+ _this._pointers = [];
223
+ _this._pointerPositions = {};
224
+ return _this;
225
+ }
226
+ _inherits(FirstPersonControls3D, _Controls);
227
+ return _createClass(FirstPersonControls3D, [{
228
+ key: "connect",
229
+ value: function connect(sceneContext) {
230
+ this.domElement = sceneContext.scene.domElement;
231
+ this.sceneContext = sceneContext;
232
+ this.domElement.addEventListener('pointerdown', this._onPointerDown);
233
+ this.domElement.addEventListener('pointercancel', this._onPointerUp);
234
+ this.domElement.addEventListener('contextmenu', this._onContextMenu);
235
+ this.domElement.addEventListener('keydown', this._onKeyDown);
236
+ this.domElement.addEventListener('keyup', this._onKeyUp);
237
+ this.domElement.addEventListener('blur', this._onBlur);
238
+ this.domElement.style.touchAction = 'none'; // disable touch scroll
239
+
240
+ this.object.near = 0.1;
241
+ this.sceneContext.scene.view.setControls(this);
242
+ this.enabled = true;
243
+ }
244
+ }, {
245
+ key: "disconnect",
246
+ value: function disconnect() {
247
+ this.enabled = false;
248
+ this.sceneContext.scene.view.setControls(null);
249
+ this.domElement.removeEventListener('pointerdown', this._onPointerDown);
250
+ this.domElement.removeEventListener('pointermove', this._onPointerMove);
251
+ this.domElement.removeEventListener('pointerup', this._onPointerUp);
252
+ this.domElement.removeEventListener('pointercancel', this._onPointerUp);
253
+ this.domElement.removeEventListener('contextmenu', this._onContextMenu);
254
+ this.domElement.removeEventListener('keydown', this._onKeyDown);
255
+ this.domElement.removeEventListener('keyup', this._onKeyUp);
256
+ this.domElement.removeEventListener('blur', this._onBlur);
257
+ this.domElement.style.touchAction = 'auto';
258
+ }
259
+ }, {
260
+ key: "setView",
261
+ value: function setView(targetpos, lookAt) {
262
+ var personHeight = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
263
+ this.personHeight = personHeight !== null && personHeight !== void 0 ? personHeight : this.personHeight;
264
+ this.target.copy(targetpos);
265
+ this.lookAt.copy(lookAt);
266
+ this.object.position.subVectors(targetpos, lookAt.clone().multiplyScalar(3));
267
+ this.pitch = Math.asin(Math.max(-1.0, Math.min(1.0, this.lookAt.z)));
268
+ this.yaw = Math.atan2(-this.lookAt.x, this.lookAt.y);
269
+ this.object.lookAt(this.target);
270
+ this.dispatchEvent({
271
+ type: 'change'
272
+ });
273
+ }
274
+ }, {
275
+ key: "panView",
276
+ value: function panView(dx, dy) {
277
+ if (dx || dy) {
278
+ this._pan(dx, dy);
279
+ }
280
+ }
281
+ }, {
282
+ key: "tiltView",
283
+ value: function tiltView(yaw, pitch) {
284
+ this.yaw += yaw;
285
+ this.pitch += pitch;
286
+ if (yaw || pitch) {
287
+ this._changed = true;
288
+ this.update();
289
+ }
290
+ }
291
+ }, {
292
+ key: "dispose",
293
+ value: function dispose() {
294
+ this.disconnect();
295
+ }
296
+ }, {
297
+ key: "update",
298
+ value: function update() {
299
+ var deltaTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
300
+ if (!this._changed) {
301
+ return;
302
+ }
303
+ this.lookAt.x = -Math.sin(this.yaw) * Math.cos(this.pitch);
304
+ this.lookAt.y = Math.cos(this.yaw) * Math.cos(this.pitch);
305
+ this.lookAt.z = Math.sin(this.pitch);
306
+ this.object.position.subVectors(this.target, this.lookAt.clone().multiplyScalar(3));
307
+ this.object.lookAt(this.target);
308
+ this.dispatchEvent({
309
+ type: 'change'
310
+ });
311
+ this._changed = false;
312
+ }
313
+ // Internals
314
+ }, {
315
+ key: "_rotate",
316
+ value: function _rotate(yaw, pitch) {
317
+ this.yaw += yaw;
318
+ this.pitch = Math.max(-0.5 * Math.PI, Math.min(this.pitch + pitch, 0.5 * Math.PI));
319
+ this._changed = true;
320
+ this.update();
321
+ }
322
+ // deltaX and deltaY are in pixels; right and down are positive
323
+ }, {
324
+ key: "_pan",
325
+ value: function _pan(deltaX, deltaY) {
326
+ var cosY = Math.cos(this.yaw);
327
+ var sinY = Math.sin(this.yaw);
328
+ var dx = cosY * deltaX + -sinY * deltaY;
329
+ var dy = sinY * deltaX + cosY * deltaY;
330
+ var dir = new Vector2(dx, dy);
331
+ var step = dir.length();
332
+ if (step < 0.001) {
333
+ return;
334
+ }
335
+ dir.divideScalar(step);
336
+
337
+ // Adjust step to avoid passing within any wall buffer zone
338
+ var raycaster = new Raycaster();
339
+ raycaster.set(this.target, new Vector3(dir.x, dir.y, 0));
340
+ var inter = raycaster.intersectObjects(this.sceneContext.collisionObjects, true)[0];
341
+ var wallBuffer = 0.5;
342
+ if (inter && inter.distance - wallBuffer < step) {
343
+ var overstep = step - (inter.distance - wallBuffer);
344
+ step -= overstep;
345
+ this.target.x += step * dir.x;
346
+ this.target.y += step * dir.y;
347
+
348
+ // Project overstep onto wall
349
+ var tangent = new Vector2(-inter.normal.y, inter.normal.x).normalize();
350
+ var slidestep = tangent.dot(dir) * overstep;
351
+ if (slidestep < 0) {
352
+ tangent.negate();
353
+ slidestep *= -1;
354
+ }
355
+ raycaster.set(this.target, new Vector3(tangent.x, tangent.y, 0));
356
+ var slideInter = raycaster.intersectObjects(this.sceneContext.collisionObjects, true)[0];
357
+ if (slideInter && slideInter.distance - wallBuffer < slidestep) {
358
+ slidestep = slideInter.distance - wallBuffer;
359
+ }
360
+ this.target.x += slidestep * tangent.x;
361
+ this.target.y += slidestep * tangent.y;
362
+ } else {
363
+ this.target.x += step * dir.x;
364
+ this.target.y += step * dir.y;
365
+ }
366
+
367
+ // Stay above terrain // objects on terain
368
+ var height = undefined;
369
+ raycaster.set(this.target, new Vector3(0, 0, -1));
370
+ var vinter = raycaster.intersectObjects(this.sceneContext.collisionObjects, true)[0];
371
+ if (vinter) {
372
+ height = vinter.point.z;
373
+ } else {
374
+ height = this.sceneContext.getTerrainHeightFromMap([this.target.x, this.target.y]);
375
+ }
376
+ if (height !== undefined) {
377
+ var newHeight = height + this.personHeight;
378
+ this.target.z = 0.75 * this.target.z + 0.25 * newHeight;
379
+ }
380
+ this._changed = true;
381
+ this.update();
382
+ }
383
+ }, {
384
+ key: "_addPointer",
385
+ value:
386
+ // Touch pointer tracking
387
+ function _addPointer(event) {
388
+ this._pointers.push(event.pointerId);
389
+ this._pointerPositions[event.pointerId] = new Vector2(event.pageX, event.pageY);
390
+ }
391
+ }, {
392
+ key: "_removePointer",
393
+ value: function _removePointer(event) {
394
+ delete this._pointerPositions[event.pointerId];
395
+ this._pointers = this._pointers.filter(function (id) {
396
+ return id !== event.pointerId;
397
+ });
398
+ }
399
+ }, {
400
+ key: "_isTrackingPointer",
401
+ value: function _isTrackingPointer(event) {
402
+ return this._pointers.find(function (id) {
403
+ return id === event.pointerId;
404
+ }) !== undefined;
405
+ }
406
+ }, {
407
+ key: "_trackPointer",
408
+ value: function _trackPointer(event) {
409
+ this._pointerPositions[event.pointerId].set(event.pageX, event.pageY);
410
+ }
411
+ }, {
412
+ key: "_getTwoPointerPosition",
413
+ value: function _getTwoPointerPosition(event) {
414
+ var otherPointerId = event.pointerId === this._pointers[0] ? this._pointers[1] : this._pointers[0];
415
+ var otherPointerPos = this._pointerPositions[otherPointerId];
416
+ return {
417
+ x: 0.5 * (event.pageX + otherPointerPos.x),
418
+ y: 0.5 * (event.pageY + otherPointerPos.y)
419
+ };
420
+ }
421
+ }]);
422
+ }(Controls);
423
+ export { FirstPersonControls3D as default };