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,8 +1,407 @@
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 _construct(t,e,r){if(_isNativeReflectConstruct())return Reflect.construct.apply(null,arguments);var o=[null];o.push.apply(o,e);var p=new(t.bind.apply(t,o));return r&&_setPrototypeOf(p,r.prototype),p}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}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)}/**
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 _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }
3
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
4
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
7
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
8
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
9
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
10
+ 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); } }
11
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
12
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
13
+ 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); }
14
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
15
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
16
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
17
+ 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); }
18
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
19
+ 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; }
20
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
21
+ 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); }
22
+ /**
2
23
  * Copyright 2017-2024 Sourcepole AG
3
24
  * All rights reserved.
4
25
  *
5
26
  * This source code is licensed under the BSD-style license found in the
6
27
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import{Line}from"react-chartjs-2";import ReactDOM from"react-dom";import Shape from"@giro3d/giro3d/entities/Shape.js";import{Chart as ChartJS,CategoryScale,LinearScale,PointElement,LineElement,Title,Tooltip,Filler}from"chart.js";import FileSaver from"file-saver";import PropTypes from"prop-types";import{Vector3}from"three";import LocaleUtils from"../../utils/LocaleUtils";import MeasureUtils from"../../utils/MeasureUtils";import MiscUtils from"../../utils/MiscUtils";import ResizeableWindow from"../ResizeableWindow";import"../../plugins/style/HeightProfile.css";ChartJS.register(CategoryScale,LinearScale,PointElement,LineElement,Title,Tooltip,Filler);var HeightProfilePrintDialog=/*#__PURE__*/function(_React$PureComponent){function HeightProfilePrintDialog(props){var _this;_classCallCheck(this,HeightProfilePrintDialog);_this=_callSuper(this,HeightProfilePrintDialog,[props]);_defineProperty(_this,"state",{initialized:false,imageUrl:""});_defineProperty(_this,"closePrintWindow",function(){_this.externalWindow.close()});_defineProperty(_this,"setWindowContent",function(){_this.externalWindow.addEventListener("beforeunload",_this.props.onClose,false);var container=_this.externalWindow.document.getElementById("heightprofilecontainer");if(container){var printBtn=_this.externalWindow.document.createElement("div");printBtn.id="print";printBtn.style.marginBottom="1em";printBtn.innerHTML="<style type=\"text/css\">@media print{ #print { display: none; }}</style>"+"<button onClick=\"(function(){window.print();})()\">"+LocaleUtils.tr("heightprofile.print")+"</button>";container.appendChild(printBtn);_this.imageEl=_this.externalWindow.document.createElement("div");_this.imageEl.innerHTML=LocaleUtils.tr("heightprofile.loadingimage");container.appendChild(_this.imageEl);_this.portalEl=_this.externalWindow.document.createElement("div");_this.portalEl.id="profile";container.appendChild(_this.portalEl);_this.setState({initialized:true});_this.externalWindow.document.body.style.overflowX="hidden"}else{_this.externalWindow.document.body.innerHTML="Broken template. An element with id=heightprofilecontainer must exist."}});_defineProperty(_this,"scheduleRefreshImage",function(){clearTimeout(_this.refreshTimeout);_this.refreshTimeout=setTimeout(_this.refreshImage,500)});_defineProperty(_this,"refreshImage",function(){var src=_this.props.sceneContext.scene.renderer.domElement.toDataURL("image/png");var width=_this.props.sceneContext.scene.renderer.domElement.offsetWidth;_this.imageEl.innerHTML="<img src=\"".concat(src,"\" style=\"width: 100%; max-width: ").concat(width,"px\" />")});_defineProperty(_this,"windowResized",function(){if(_this.chart){_this.chart.resize()}});_this.externalWindow=null;_this.chart=null;_this.portalEl=null;_this.imageEl=null;return _this}_inherits(HeightProfilePrintDialog,_React$PureComponent);return _createClass(HeightProfilePrintDialog,[{key:"componentDidMount",value:function componentDidMount(){var templatePath=MiscUtils.resolveAssetsPath(this.props.templatePath);this.externalWindow=window.open(templatePath,LocaleUtils.tr("heightprofile.title"),"toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes");this.externalWindow.addEventListener("load",this.setWindowContent,false);this.externalWindow.addEventListener("resize",this.windowResized,false);window.addEventListener("beforeunload",this.closePrintWindow);this.props.sceneContext.scene.view.controls.addEventListener("change",this.scheduleRefreshImage)}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.state.initialized&&!prevState.initialized){this.refreshImage()}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.closePrintWindow();window.removeEventListener("beforeunload",this.closePrintWindow);this.props.sceneContext.scene.view.controls.removeEventListener("change",this.scheduleRefreshImage)}},{key:"render",value:function render(){var _this2=this;if(!this.state.initialized){return null}return/*#__PURE__*/ReactDOM.createPortal(this.props.children(function(el){_this2.chart=el},false),this.portalEl)}}])}(React.PureComponent);_defineProperty(HeightProfilePrintDialog,"propTypes",{children:PropTypes.func,onClose:PropTypes.func,sceneContext:PropTypes.object,templatePath:PropTypes.string});var HeightProfile=/*#__PURE__*/function(_React$Component){function HeightProfile(props){var _this3;_classCallCheck(this,HeightProfile);_this3=_callSuper(this,HeightProfile,[props]);_defineProperty(_this3,"state",{printdialog:false,visible:true});_defineProperty(_this3,"onClose",function(){_this3.setState({visible:false,printdialog:false});_this3.marker.visible=false});_defineProperty(_this3,"renderHeightProfile",function(saveRef,interactive){var distanceStr=LocaleUtils.tr("heightprofile.distance");var heightStr=LocaleUtils.tr("heightprofile.height");var aslStr=LocaleUtils.tr("heightprofile.asl");var data={labels:_this3.props.data.map(function(entry){return entry[3]}),datasets:[{data:_this3.props.data.map(function(entry){return entry[2]}),fill:true,backgroundColor:"rgba(255,0,0,0.5)",borderColor:"rgb(255,0,0)",borderWidth:2,pointRadius:0,order:1}]};// Approx 10 ticks
8
- var totLength=_this3.props.data[_this3.props.data.length-1][3];var maxHeight=Math.max.apply(Math,_toConsumableArray(_this3.props.data.map(function(x){return x[2]})));var stepSizeFact=Math.pow(10,Math.ceil(Math.log10(totLength/10)));var stepSize=Math.round(totLength/stepSizeFact)*stepSizeFact/10;var prec=_this3.props.heightProfilePrecision;var options={responsive:true,maintainAspectRatio:false,animation:{duration:0},plugins:{legend:{display:false},tooltip:{enabled:interactive,intersect:false,displayColors:false,bodyFont:{weight:"bold"},callbacks:{title:function title(ctx){return distanceStr+": "+MeasureUtils.formatMeasurement(ctx[0].parsed.x,false,"metric")},label:function label(ctx){return heightStr+": "+MeasureUtils.formatMeasurement(ctx.parsed.y,false,"m")+" "+aslStr}}}},scales:{x:{type:"linear",ticks:{stepSize:stepSize,font:{size:10},callback:function callback(value){return value}},title:{display:true,text:distanceStr+" [m]",padding:0},max:Math.ceil(totLength)},y:{ticks:{font:{size:10},callback:function callback(value){return value.toFixed(prec)}},title:{display:true,text:heightStr+" [m "+aslStr+"]"},max:Math.ceil(maxHeight)}},onHover:interactive?function(evt,activeEls,chart){var chartArea=chart.chartArea;var chartX=Math.min(Math.max(evt.x-chartArea.left),chartArea.width);_this3.updateMarker(chartX/chartArea.width*totLength)}:undefined};return/*#__PURE__*/React.createElement("div",{className:"height-profile-chart-container",onMouseLeave:_this3.hideMarker,role:"body",style:{position:"relative"}},/*#__PURE__*/React.createElement(Line,{data:data,options:options,ref:saveRef}))});_defineProperty(_this3,"resizeChart",function(){if(_this3.chart){_this3.chart.resize()}});_defineProperty(_this3,"updateMarker",function(dist){var data=_this3.props.data;var i=data.findIndex(function(x){return x[3]>=dist});if(i===0){_this3.marker.setPoints([_construct(Vector3,_toConsumableArray(data[0]))])}else{var lambda=(dist-data[i-1][3])/(data[i][3]-data[i-1][3]);var p=new Vector3(data[i-1][0]+lambda*(data[i][0]-data[i][0]),data[i-1][1]+lambda*(data[i][1]-data[i][1]),data[i-1][2]+lambda*(data[i][2]-data[i][2]));_this3.marker.setPoints([p])}_this3.marker.visible=true});_defineProperty(_this3,"hideMarker",function(){_this3.marker.visible=false});_defineProperty(_this3,"exportProfile",function(){var csv="";csv+="index"+"\t"+"distance"+"\t"+"elevation"+"\n";_this3.props.data.forEach(function(entry,idx){var sample={x:entry[3],y:entry[2]};var prec=_this3.props.heightProfilePrecision;var distance=Math.round(sample.x*Math.pow(10,prec))/Math.pow(10,prec);var height=Math.round(sample.y*Math.pow(10,prec))/Math.pow(10,prec);csv+=String(idx).replace("\"","\"\"")+"\t"+String(distance)+"\t"+String(height)+"\n"});FileSaver.saveAs(new Blob([csv],{type:"text/plain;charset=utf-8"}),"heightprofile.csv")});_this3.chart=null;_this3.profilePrintWindow=null;return _this3}_inherits(HeightProfile,_React$Component);return _createClass(HeightProfile,[{key:"componentDidMount",value:function componentDidMount(){this.marker=new Shape({showVertexLabels:true,showLine:false,showVertices:true,vertexLabelFormatter:function vertexLabelFormatter(_ref){var position=_ref.position;return MeasureUtils.formatMeasurement(position.z,false,"m")}});this.marker.visible=false;this.props.sceneContext.scene.add(this.marker)}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.props.sceneContext.scene.remove(this.marker)}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.data!==prevProps.data){this.setState({visible:true})}}},{key:"render",value:function render(){var _this4=this;if(!this.state.visible){return null}var extraControls=[{icon:"export",callback:this.exportProfile,title:LocaleUtils.tr("heightprofile.export")},{icon:"print",active:this.state.printdialog,callback:function callback(){return _this4.setState(function(state){return{printdialog:!state.printdialog}})},title:LocaleUtils.tr("heightprofile.print")}];return[/*#__PURE__*/React.createElement(ResizeableWindow,{dockable:"bottom",extraControls:extraControls,icon:"line",initialHeight:this.props.height,initialWidth:600,initiallyDocked:true,key:"ProfileDialog",onClose:this.onClose,onExternalWindowResized:this.resizeChart,splitScreenWhenDocked:true,title:LocaleUtils.tr("heightprofile.title"),usePortal:false},this.renderHeightProfile(function(el){_this4.chart=el},true)),this.state.printdialog?/*#__PURE__*/React.createElement(HeightProfilePrintDialog,{key:"ProfilePrintDialog",onClose:function onClose(){return _this4.setState({printdialog:false})},sceneContext:this.props.sceneContext,templatePath:this.props.templatePath},this.renderHeightProfile):null]}}])}(React.Component);_defineProperty(HeightProfile,"propTypes",{data:PropTypes.array,/** The height of the height profile widget in pixels. */height:PropTypes.number,/** The precision of displayed and exported values (0: no decimals, 1: 1 decimal position, etc). */heightProfilePrecision:PropTypes.number,sceneContext:PropTypes.object,/** Template location for the height profile print functionality */templatePath:PropTypes.string});_defineProperty(HeightProfile,"defaultProps",{heightProfilePrecision:0,height:150,templatePath:":/templates/heightprofileprint.html"});export{HeightProfile as default};
28
+ */
29
+
30
+ import React from 'react';
31
+ import { Line } from "react-chartjs-2";
32
+ import ReactDOM from 'react-dom';
33
+ import Shape from '@giro3d/giro3d/entities/Shape.js';
34
+ import { Chart as ChartJS, CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Filler } from 'chart.js';
35
+ import FileSaver from 'file-saver';
36
+ import PropTypes from 'prop-types';
37
+ import { Vector3 } from 'three';
38
+ import LocaleUtils from '../../utils/LocaleUtils';
39
+ import MeasureUtils from '../../utils/MeasureUtils';
40
+ import MiscUtils from '../../utils/MiscUtils';
41
+ import ResizeableWindow from '../ResizeableWindow';
42
+ import '../../plugins/style/HeightProfile.css';
43
+ ChartJS.register(CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Filler);
44
+ var HeightProfilePrintDialog = /*#__PURE__*/function (_React$PureComponent) {
45
+ function HeightProfilePrintDialog(props) {
46
+ var _this;
47
+ _classCallCheck(this, HeightProfilePrintDialog);
48
+ _this = _callSuper(this, HeightProfilePrintDialog, [props]);
49
+ _defineProperty(_this, "state", {
50
+ initialized: false,
51
+ imageUrl: ''
52
+ });
53
+ _defineProperty(_this, "closePrintWindow", function () {
54
+ _this.externalWindow.close();
55
+ });
56
+ _defineProperty(_this, "setWindowContent", function () {
57
+ _this.externalWindow.addEventListener('beforeunload', _this.props.onClose, false);
58
+ var container = _this.externalWindow.document.getElementById("heightprofilecontainer");
59
+ if (container) {
60
+ var printBtn = _this.externalWindow.document.createElement('div');
61
+ printBtn.id = "print";
62
+ printBtn.style.marginBottom = "1em";
63
+ printBtn.innerHTML = '<style type="text/css">@media print{ #print { display: none; }}</style>' + '<button onClick="(function(){window.print();})()">' + LocaleUtils.tr("heightprofile.print") + '</button>';
64
+ container.appendChild(printBtn);
65
+ _this.imageEl = _this.externalWindow.document.createElement('div');
66
+ _this.imageEl.innerHTML = LocaleUtils.tr("heightprofile.loadingimage");
67
+ container.appendChild(_this.imageEl);
68
+ _this.portalEl = _this.externalWindow.document.createElement('div');
69
+ _this.portalEl.id = 'profile';
70
+ container.appendChild(_this.portalEl);
71
+ _this.setState({
72
+ initialized: true
73
+ });
74
+ _this.externalWindow.document.body.style.overflowX = 'hidden';
75
+ } else {
76
+ _this.externalWindow.document.body.innerHTML = "Broken template. An element with id=heightprofilecontainer must exist.";
77
+ }
78
+ });
79
+ _defineProperty(_this, "scheduleRefreshImage", function () {
80
+ clearTimeout(_this.refreshTimeout);
81
+ _this.refreshTimeout = setTimeout(_this.refreshImage, 500);
82
+ });
83
+ _defineProperty(_this, "refreshImage", function () {
84
+ var src = _this.props.sceneContext.scene.renderer.domElement.toDataURL('image/png');
85
+ var width = _this.props.sceneContext.scene.renderer.domElement.offsetWidth;
86
+ _this.imageEl.innerHTML = "<img src=\"".concat(src, "\" style=\"width: 100%; max-width: ").concat(width, "px\" />");
87
+ });
88
+ _defineProperty(_this, "windowResized", function () {
89
+ if (_this.chart) {
90
+ _this.chart.resize();
91
+ }
92
+ });
93
+ _this.externalWindow = null;
94
+ _this.chart = null;
95
+ _this.portalEl = null;
96
+ _this.imageEl = null;
97
+ return _this;
98
+ }
99
+ _inherits(HeightProfilePrintDialog, _React$PureComponent);
100
+ return _createClass(HeightProfilePrintDialog, [{
101
+ key: "componentDidMount",
102
+ value: function componentDidMount() {
103
+ var templatePath = MiscUtils.resolveAssetsPath(this.props.templatePath);
104
+ this.externalWindow = window.open(templatePath, LocaleUtils.tr("heightprofile.title"), "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes");
105
+ this.externalWindow.addEventListener('load', this.setWindowContent, false);
106
+ this.externalWindow.addEventListener('resize', this.windowResized, false);
107
+ window.addEventListener('beforeunload', this.closePrintWindow);
108
+ this.props.sceneContext.scene.view.controls.addEventListener('change', this.scheduleRefreshImage);
109
+ }
110
+ }, {
111
+ key: "componentDidUpdate",
112
+ value: function componentDidUpdate(prevProps, prevState) {
113
+ if (this.state.initialized && !prevState.initialized) {
114
+ this.refreshImage();
115
+ }
116
+ }
117
+ }, {
118
+ key: "componentWillUnmount",
119
+ value: function componentWillUnmount() {
120
+ this.closePrintWindow();
121
+ window.removeEventListener('beforeunload', this.closePrintWindow);
122
+ this.props.sceneContext.scene.view.controls.removeEventListener('change', this.scheduleRefreshImage);
123
+ }
124
+ }, {
125
+ key: "render",
126
+ value: function render() {
127
+ var _this2 = this;
128
+ if (!this.state.initialized) {
129
+ return null;
130
+ }
131
+ return /*#__PURE__*/ReactDOM.createPortal(this.props.children(function (el) {
132
+ _this2.chart = el;
133
+ }, false), this.portalEl);
134
+ }
135
+ }]);
136
+ }(React.PureComponent);
137
+ _defineProperty(HeightProfilePrintDialog, "propTypes", {
138
+ children: PropTypes.func,
139
+ onClose: PropTypes.func,
140
+ sceneContext: PropTypes.object,
141
+ templatePath: PropTypes.string
142
+ });
143
+ var HeightProfile = /*#__PURE__*/function (_React$Component) {
144
+ function HeightProfile(props) {
145
+ var _this3;
146
+ _classCallCheck(this, HeightProfile);
147
+ _this3 = _callSuper(this, HeightProfile, [props]);
148
+ _defineProperty(_this3, "state", {
149
+ printdialog: false,
150
+ visible: true
151
+ });
152
+ _defineProperty(_this3, "onClose", function () {
153
+ _this3.setState({
154
+ visible: false,
155
+ printdialog: false
156
+ });
157
+ _this3.marker.visible = false;
158
+ });
159
+ _defineProperty(_this3, "renderHeightProfile", function (saveRef, interactive) {
160
+ var distanceStr = LocaleUtils.tr("heightprofile.distance");
161
+ var heightStr = LocaleUtils.tr("heightprofile.height");
162
+ var aslStr = LocaleUtils.tr("heightprofile.asl");
163
+ var data = {
164
+ labels: _this3.props.data.map(function (entry) {
165
+ return entry[3];
166
+ }),
167
+ datasets: [{
168
+ data: _this3.props.data.map(function (entry) {
169
+ return entry[2];
170
+ }),
171
+ fill: true,
172
+ backgroundColor: "rgba(255,0,0,0.5)",
173
+ borderColor: "rgb(255,0,0)",
174
+ borderWidth: 2,
175
+ pointRadius: 0,
176
+ order: 1
177
+ }]
178
+ };
179
+ // Approx 10 ticks
180
+ var totLength = _this3.props.data[_this3.props.data.length - 1][3];
181
+ var maxHeight = Math.max.apply(Math, _toConsumableArray(_this3.props.data.map(function (x) {
182
+ return x[2];
183
+ })));
184
+ var stepSizeFact = Math.pow(10, Math.ceil(Math.log10(totLength / 10)));
185
+ var stepSize = Math.round(totLength / stepSizeFact) * stepSizeFact / 10;
186
+ var prec = _this3.props.heightProfilePrecision;
187
+ var options = {
188
+ responsive: true,
189
+ maintainAspectRatio: false,
190
+ animation: {
191
+ duration: 0
192
+ },
193
+ plugins: {
194
+ legend: {
195
+ display: false
196
+ },
197
+ tooltip: {
198
+ enabled: interactive,
199
+ intersect: false,
200
+ displayColors: false,
201
+ bodyFont: {
202
+ weight: 'bold'
203
+ },
204
+ callbacks: {
205
+ title: function title(ctx) {
206
+ return distanceStr + ": " + MeasureUtils.formatMeasurement(ctx[0].parsed.x, false, 'metric');
207
+ },
208
+ label: function label(ctx) {
209
+ return heightStr + ": " + MeasureUtils.formatMeasurement(ctx.parsed.y, false, 'm') + " " + aslStr;
210
+ }
211
+ }
212
+ }
213
+ },
214
+ scales: {
215
+ x: {
216
+ type: 'linear',
217
+ ticks: {
218
+ stepSize: stepSize,
219
+ font: {
220
+ size: 10
221
+ },
222
+ callback: function callback(value) {
223
+ return value;
224
+ }
225
+ },
226
+ title: {
227
+ display: true,
228
+ text: distanceStr + " [m]",
229
+ padding: 0
230
+ },
231
+ max: Math.ceil(totLength)
232
+ },
233
+ y: {
234
+ ticks: {
235
+ font: {
236
+ size: 10
237
+ },
238
+ callback: function callback(value) {
239
+ return value.toFixed(prec);
240
+ }
241
+ },
242
+ title: {
243
+ display: true,
244
+ text: heightStr + " [m " + aslStr + "]"
245
+ },
246
+ max: Math.ceil(maxHeight)
247
+ }
248
+ },
249
+ onHover: interactive ? function (evt, activeEls, chart) {
250
+ var chartArea = chart.chartArea;
251
+ var chartX = Math.min(Math.max(evt.x - chartArea.left), chartArea.width);
252
+ _this3.updateMarker(chartX / chartArea.width * totLength);
253
+ } : undefined
254
+ };
255
+ return /*#__PURE__*/React.createElement("div", {
256
+ className: "height-profile-chart-container",
257
+ onMouseLeave: _this3.hideMarker,
258
+ role: "body",
259
+ style: {
260
+ position: 'relative'
261
+ }
262
+ }, /*#__PURE__*/React.createElement(Line, {
263
+ data: data,
264
+ options: options,
265
+ ref: saveRef
266
+ }));
267
+ });
268
+ _defineProperty(_this3, "resizeChart", function () {
269
+ if (_this3.chart) {
270
+ _this3.chart.resize();
271
+ }
272
+ });
273
+ _defineProperty(_this3, "updateMarker", function (dist) {
274
+ var data = _this3.props.data;
275
+ var i = data.findIndex(function (x) {
276
+ return x[3] >= dist;
277
+ });
278
+ if (i === 0) {
279
+ _this3.marker.setPoints([_construct(Vector3, _toConsumableArray(data[0]))]);
280
+ } else {
281
+ var lambda = (dist - data[i - 1][3]) / (data[i][3] - data[i - 1][3]);
282
+ var p = new Vector3(data[i - 1][0] + lambda * (data[i][0] - data[i][0]), data[i - 1][1] + lambda * (data[i][1] - data[i][1]), data[i - 1][2] + lambda * (data[i][2] - data[i][2]));
283
+ _this3.marker.setPoints([p]);
284
+ }
285
+ _this3.marker.visible = true;
286
+ });
287
+ _defineProperty(_this3, "hideMarker", function () {
288
+ _this3.marker.visible = false;
289
+ });
290
+ _defineProperty(_this3, "exportProfile", function () {
291
+ var csv = "";
292
+ csv += "index" + "\t" + "distance" + "\t" + "elevation" + "\n";
293
+ _this3.props.data.forEach(function (entry, idx) {
294
+ var sample = {
295
+ x: entry[3],
296
+ y: entry[2]
297
+ };
298
+ var prec = _this3.props.heightProfilePrecision;
299
+ var distance = Math.round(sample.x * Math.pow(10, prec)) / Math.pow(10, prec);
300
+ var height = Math.round(sample.y * Math.pow(10, prec)) / Math.pow(10, prec);
301
+ csv += String(idx).replace('"', '""') + "\t" + String(distance) + "\t" + String(height) + "\n";
302
+ });
303
+ FileSaver.saveAs(new Blob([csv], {
304
+ type: "text/plain;charset=utf-8"
305
+ }), "heightprofile.csv");
306
+ });
307
+ _this3.chart = null;
308
+ _this3.profilePrintWindow = null;
309
+ return _this3;
310
+ }
311
+ _inherits(HeightProfile, _React$Component);
312
+ return _createClass(HeightProfile, [{
313
+ key: "componentDidMount",
314
+ value: function componentDidMount() {
315
+ this.marker = new Shape({
316
+ showVertexLabels: true,
317
+ showLine: false,
318
+ showVertices: true,
319
+ vertexLabelFormatter: function vertexLabelFormatter(_ref) {
320
+ var position = _ref.position;
321
+ return MeasureUtils.formatMeasurement(position.z, false, 'm');
322
+ }
323
+ });
324
+ this.marker.visible = false;
325
+ this.props.sceneContext.scene.add(this.marker);
326
+ }
327
+ }, {
328
+ key: "componentWillUnmount",
329
+ value: function componentWillUnmount() {
330
+ this.props.sceneContext.scene.remove(this.marker);
331
+ }
332
+ }, {
333
+ key: "componentDidUpdate",
334
+ value: function componentDidUpdate(prevProps) {
335
+ if (this.props.data !== prevProps.data) {
336
+ this.setState({
337
+ visible: true
338
+ });
339
+ }
340
+ }
341
+ }, {
342
+ key: "render",
343
+ value: function render() {
344
+ var _this4 = this;
345
+ if (!this.state.visible) {
346
+ return null;
347
+ }
348
+ var extraControls = [{
349
+ icon: 'export',
350
+ callback: this.exportProfile,
351
+ title: LocaleUtils.tr("heightprofile.export")
352
+ }, {
353
+ icon: 'print',
354
+ active: this.state.printdialog,
355
+ callback: function callback() {
356
+ return _this4.setState(function (state) {
357
+ return {
358
+ printdialog: !state.printdialog
359
+ };
360
+ });
361
+ },
362
+ title: LocaleUtils.tr("heightprofile.print")
363
+ }];
364
+ return [/*#__PURE__*/React.createElement(ResizeableWindow, {
365
+ dockable: "bottom",
366
+ extraControls: extraControls,
367
+ icon: "line",
368
+ initialHeight: this.props.height,
369
+ initialWidth: 600,
370
+ initiallyDocked: true,
371
+ key: "ProfileDialog",
372
+ onClose: this.onClose,
373
+ onExternalWindowResized: this.resizeChart,
374
+ splitScreenWhenDocked: true,
375
+ title: LocaleUtils.tr("heightprofile.title"),
376
+ usePortal: false
377
+ }, this.renderHeightProfile(function (el) {
378
+ _this4.chart = el;
379
+ }, true)), this.state.printdialog ? /*#__PURE__*/React.createElement(HeightProfilePrintDialog, {
380
+ key: "ProfilePrintDialog",
381
+ onClose: function onClose() {
382
+ return _this4.setState({
383
+ printdialog: false
384
+ });
385
+ },
386
+ sceneContext: this.props.sceneContext,
387
+ templatePath: this.props.templatePath
388
+ }, this.renderHeightProfile) : null];
389
+ }
390
+ }]);
391
+ }(React.Component);
392
+ _defineProperty(HeightProfile, "propTypes", {
393
+ data: PropTypes.array,
394
+ /** The height of the height profile widget in pixels. */
395
+ height: PropTypes.number,
396
+ /** The precision of displayed and exported values (0: no decimals, 1: 1 decimal position, etc). */
397
+ heightProfilePrecision: PropTypes.number,
398
+ sceneContext: PropTypes.object,
399
+ /** Template location for the height profile print functionality */
400
+ templatePath: PropTypes.string
401
+ });
402
+ _defineProperty(HeightProfile, "defaultProps", {
403
+ heightProfilePrecision: 0,
404
+ height: 150,
405
+ templatePath: ":/templates/heightprofileprint.html"
406
+ });
407
+ export { HeightProfile as default };
@@ -1,7 +1,167 @@
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)}/**
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
+ /**
2
16
  * Copyright 2025 Sourcepole AG
3
17
  * All rights reserved.
4
18
  *
5
19
  * This source code is licensed under the BSD-style license found in the
6
20
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import{connect}from"react-redux";import axios from"axios";import PropTypes from"prop-types";import{v4 as uuidv4}from"uuid";import{processStarted,processFinished}from"../../actions/processNotifications";import ConfigUtils from"../../utils/ConfigUtils";import LocaleUtils from"../../utils/LocaleUtils";import FileSelector from"../widgets/FileSelector";import Spinner from"../widgets/Spinner";import{importGltf}from"./utils/MiscUtils3D";import"./style/ImportObjects3D.css";var ImportObjects3D=/*#__PURE__*/function(_React$Component){function ImportObjects3D(){var _this;_classCallCheck(this,ImportObjects3D);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,ImportObjects3D,[].concat(args));_defineProperty(_this,"state",{importing:false,selectedfile:null});_defineProperty(_this,"importFile",function(){if(!_this.state.selectedfile){return}var file=_this.state.selectedfile;var taskid=uuidv4();_this.setState({importing:true});_this.props.processStarted(taskid,LocaleUtils.tr("import3d.importing",file.name));if(file.name.endsWith(".gltf")||file.name.endsWith(".glb")){_this.importGltfFile(file,taskid)}else{_this.importTo3DTiles(file,taskid)}});_defineProperty(_this,"importGltfFile",function(file,taskid){var reader=new FileReader;reader.onload=function(ev){importGltf(ev.target.result,file.name,_this.props.sceneContext,{drawGroup:true,imported:true},true);_this.setState({selectedfile:null,importing:false});_this.props.processFinished(taskid,true)};reader.onerror=function(){_this.setState({selectedfile:null,importing:false});_this.props.processFinished(taskid,false)};reader.readAsArrayBuffer(_this.state.selectedfile)});_defineProperty(_this,"importTo3DTiles",function(file,taskid){var _this$props$sceneCont;var sceneTarget=_this.props.sceneContext.scene.view.controls.target.clone();sceneTarget.z=(_this$props$sceneCont=_this.props.sceneContext.getTerrainHeightFromMap([sceneTarget.x,sceneTarget.y]))!==null&&_this$props$sceneCont!==void 0?_this$props$sceneCont:0;var formData=new FormData;var jsonBlob=new Blob([JSON.stringify({inputs:[String(sceneTarget.x),String(sceneTarget.y),String(sceneTarget.z),_this.props.sceneContext.mapCrs]})],{type:"application/json"});formData.set("json",jsonBlob);formData.set("file",file);var headers={"Content-Type":"multipart/form-data"};var ogcProcessesUrl=ConfigUtils.getConfigProp("ogcProcessesUrl");if(!ogcProcessesUrl){_this.setState({selectedfile:null,importing:false});_this.props.processFinished(taskid,false,LocaleUtils.tr("import3d.noprocessesserver"));return}axios.post(ogcProcessesUrl.replace(/\/$/,"")+"/modelimport/execution_multipart",formData,{headers:headers}).then(function(response){var tilesetUrl=_this.props.importedTilesBaseUrl+response.data.result.value;_this.props.sceneContext.add3dTiles(tilesetUrl,taskid,{title:file.name},true);_this.setState({selectedfile:null,importing:false});_this.props.processFinished(taskid,true)})["catch"](function(err){_this.setState({selectedfile:null,importing:false});_this.props.processFinished(taskid,false)})});return _this}_inherits(ImportObjects3D,_React$Component);return _createClass(ImportObjects3D,[{key:"render",value:function render(){var _this2=this;return/*#__PURE__*/React.createElement("div",{className:"importobjects3d-widget"},/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement(FileSelector,{accept:".gltf,.glb,.ifc,.gml,.citygml,.cityjson,.gpkg",file:this.state.selectedfile,onFileSelected:function onFileSelected(file){return _this2.setState({selectedfile:file})},title:LocaleUtils.tr("layertree3d.supportedformats")})),/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("button",{className:"button",disabled:this.state.selectedfile===null||this.state.importing,onClick:this.importFile,type:"button"},this.state.importing?/*#__PURE__*/React.createElement(Spinner,null):null,LocaleUtils.tr("layertree3d.import"))))}}])}(React.Component);_defineProperty(ImportObjects3D,"propTypes",{importedTilesBaseUrl:PropTypes.string,processFinished:PropTypes.func,processStarted:PropTypes.func,sceneContext:PropTypes.object});export default connect(function(state){return{}},{processFinished:processFinished,processStarted:processStarted})(ImportObjects3D);
21
+ */
22
+
23
+ import React from 'react';
24
+ import { connect } from 'react-redux';
25
+ import axios from 'axios';
26
+ import PropTypes from 'prop-types';
27
+ import { v4 as uuidv4 } from 'uuid';
28
+ import { processStarted, processFinished } from '../../actions/processNotifications';
29
+ import ConfigUtils from '../../utils/ConfigUtils';
30
+ import LocaleUtils from '../../utils/LocaleUtils';
31
+ import FileSelector from '../widgets/FileSelector';
32
+ import Spinner from '../widgets/Spinner';
33
+ import { importGltf } from './utils/MiscUtils3D';
34
+ import './style/ImportObjects3D.css';
35
+ var ImportObjects3D = /*#__PURE__*/function (_React$Component) {
36
+ function ImportObjects3D() {
37
+ var _this;
38
+ _classCallCheck(this, ImportObjects3D);
39
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
40
+ args[_key] = arguments[_key];
41
+ }
42
+ _this = _callSuper(this, ImportObjects3D, [].concat(args));
43
+ _defineProperty(_this, "state", {
44
+ importing: false,
45
+ selectedfile: null
46
+ });
47
+ _defineProperty(_this, "importFile", function () {
48
+ if (!_this.state.selectedfile) {
49
+ return;
50
+ }
51
+ var file = _this.state.selectedfile;
52
+ var taskid = uuidv4();
53
+ _this.setState({
54
+ importing: true
55
+ });
56
+ _this.props.processStarted(taskid, LocaleUtils.tr("import3d.importing", file.name));
57
+ if (file.name.endsWith(".gltf") || file.name.endsWith(".glb")) {
58
+ _this.importGltfFile(file, taskid);
59
+ } else {
60
+ _this.importTo3DTiles(file, taskid);
61
+ }
62
+ });
63
+ _defineProperty(_this, "importGltfFile", function (file, taskid) {
64
+ var reader = new FileReader();
65
+ reader.onload = function (ev) {
66
+ importGltf(ev.target.result, file.name, _this.props.sceneContext, {
67
+ drawGroup: true,
68
+ imported: true
69
+ }, true);
70
+ _this.setState({
71
+ selectedfile: null,
72
+ importing: false
73
+ });
74
+ _this.props.processFinished(taskid, true);
75
+ };
76
+ reader.onerror = function () {
77
+ _this.setState({
78
+ selectedfile: null,
79
+ importing: false
80
+ });
81
+ _this.props.processFinished(taskid, false);
82
+ };
83
+ reader.readAsArrayBuffer(_this.state.selectedfile);
84
+ });
85
+ _defineProperty(_this, "importTo3DTiles", function (file, taskid) {
86
+ var _this$props$sceneCont;
87
+ var sceneTarget = _this.props.sceneContext.scene.view.controls.target.clone();
88
+ sceneTarget.z = (_this$props$sceneCont = _this.props.sceneContext.getTerrainHeightFromMap([sceneTarget.x, sceneTarget.y])) !== null && _this$props$sceneCont !== void 0 ? _this$props$sceneCont : 0;
89
+ var formData = new FormData();
90
+ var jsonBlob = new Blob([JSON.stringify({
91
+ inputs: [String(sceneTarget.x), String(sceneTarget.y), String(sceneTarget.z), _this.props.sceneContext.mapCrs]
92
+ })], {
93
+ type: 'application/json'
94
+ });
95
+ formData.set('json', jsonBlob);
96
+ formData.set('file', file);
97
+ var headers = {
98
+ "Content-Type": "multipart/form-data"
99
+ };
100
+ var ogcProcessesUrl = ConfigUtils.getConfigProp("ogcProcessesUrl");
101
+ if (!ogcProcessesUrl) {
102
+ _this.setState({
103
+ selectedfile: null,
104
+ importing: false
105
+ });
106
+ _this.props.processFinished(taskid, false, LocaleUtils.tr("import3d.noprocessesserver"));
107
+ return;
108
+ }
109
+ axios.post(ogcProcessesUrl.replace(/\/$/, '') + '/modelimport/execution_multipart', formData, {
110
+ headers: headers
111
+ }).then(function (response) {
112
+ var tilesetUrl = _this.props.importedTilesBaseUrl + response.data.result.value;
113
+ _this.props.sceneContext.add3dTiles(tilesetUrl, taskid, {
114
+ title: file.name
115
+ }, true);
116
+ _this.setState({
117
+ selectedfile: null,
118
+ importing: false
119
+ });
120
+ _this.props.processFinished(taskid, true);
121
+ })["catch"](function (err) {
122
+ _this.setState({
123
+ selectedfile: null,
124
+ importing: false
125
+ });
126
+ _this.props.processFinished(taskid, false);
127
+ });
128
+ });
129
+ return _this;
130
+ }
131
+ _inherits(ImportObjects3D, _React$Component);
132
+ return _createClass(ImportObjects3D, [{
133
+ key: "render",
134
+ value: function render() {
135
+ var _this2 = this;
136
+ return /*#__PURE__*/React.createElement("div", {
137
+ className: "importobjects3d-widget"
138
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(FileSelector, {
139
+ accept: ".gltf,.glb,.ifc,.gml,.citygml,.cityjson,.gpkg",
140
+ file: this.state.selectedfile,
141
+ onFileSelected: function onFileSelected(file) {
142
+ return _this2.setState({
143
+ selectedfile: file
144
+ });
145
+ },
146
+ title: LocaleUtils.tr("layertree3d.supportedformats")
147
+ })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("button", {
148
+ className: "button",
149
+ disabled: this.state.selectedfile === null || this.state.importing,
150
+ onClick: this.importFile,
151
+ type: "button"
152
+ }, this.state.importing ? /*#__PURE__*/React.createElement(Spinner, null) : null, LocaleUtils.tr("layertree3d.import"))));
153
+ }
154
+ }]);
155
+ }(React.Component);
156
+ _defineProperty(ImportObjects3D, "propTypes", {
157
+ importedTilesBaseUrl: PropTypes.string,
158
+ processFinished: PropTypes.func,
159
+ processStarted: PropTypes.func,
160
+ sceneContext: PropTypes.object
161
+ });
162
+ export default connect(function (state) {
163
+ return {};
164
+ }, {
165
+ processFinished: processFinished,
166
+ processStarted: processStarted
167
+ })(ImportObjects3D);