@mapless/core 0.1.0 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +407 -131
- package/dist/types/Mapless/icons/icons.d.ts +1 -0
- package/dist/types/Mapless/icons/icons.d.ts.map +1 -1
- package/dist/types/Mapless/mana/newstation.d.ts.map +1 -1
- package/dist/types/Mapless/mana-3d/airspace.d.ts +28 -12
- package/dist/types/Mapless/mana-3d/airspace.d.ts.map +1 -1
- package/dist/types/Mapless/mana-3d/index.d.ts +4 -3
- package/dist/types/Mapless/mana-3d/index.d.ts.map +1 -1
- package/dist/types/Mapless/mana-3d/mapModel.d.ts +81 -3
- package/dist/types/Mapless/mana-3d/mapModel.d.ts.map +1 -1
- package/dist/types/Mapless/mana-three/line2Manager.d.ts +1 -1
- package/dist/types/Mapless/mana-three/line2Manager.d.ts.map +1 -1
- package/dist/types/Mapless/mana-three/three.d.ts +86 -0
- package/dist/types/Mapless/mana-three/three.d.ts.map +1 -1
- package/dist/types/Mapless/path/PathTracker.d.ts.map +1 -1
- package/dist/types/Mapless/path/attach.d.ts +1 -1
- package/dist/types/Mapless/path/attach.d.ts.map +1 -1
- package/dist/types/Mapless/path/strategies/click.d.ts.map +1 -1
- package/dist/types/Mapless/path/strategies/free.d.ts.map +1 -1
- package/dist/types/Three/ModelCache.d.ts +68 -0
- package/dist/types/Three/ModelCache.d.ts.map +1 -0
- package/dist/types/Three/types.d.ts +7 -12
- package/dist/types/Three/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { area as turf_area, center as turf_center, centroid, circle, distance as turf_distance, ellipse, length as turf_length, pointsWithinPolygon, polygon as turf_polygon } from "@turf/turf";
|
|
2
2
|
import mapbox_gl, { LngLat, MapMouseEvent, Marker, MercatorCoordinate, Popup } from "mapbox-gl";
|
|
3
|
-
import { AmbientLight, AnimationMixer, BoxGeometry, BufferGeometry, CatmullRomCurve3, Clock, Color, ConeGeometry, CurvePath, CylinderGeometry, DirectionalLight, DoubleSide, Group, Line, LineBasicMaterial, LineCurve3, LoopRepeat, Matrix4, Mesh, MeshBasicMaterial, PerspectiveCamera, PointLight, Scene, SphereGeometry, SpotLight, TorusGeometry, TubeGeometry, Vector3, WebGLRenderer } from "three";
|
|
3
|
+
import { AmbientLight, AnimationMixer, BoxGeometry, BoxHelper, BufferGeometry, CatmullRomCurve3, Clock, Color, ConeGeometry, CurvePath, CylinderGeometry, DirectionalLight, DoubleSide, Group, Line, LineBasicMaterial, LineCurve3, LoopRepeat, Matrix4, Mesh, MeshBasicMaterial, PerspectiveCamera, PointLight, Scene, SphereGeometry, SpotLight, TorusGeometry, TubeGeometry, Vector3, WebGLRenderer } from "three";
|
|
4
4
|
import gcoord from "gcoord";
|
|
5
5
|
import mapbox_gl_draw from "@mapbox/mapbox-gl-draw";
|
|
6
6
|
import "@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css";
|
|
@@ -832,6 +832,7 @@ const mona_loading_default_namespaceObject = "data:image/gif;base64,R0lGODlhgAGA
|
|
|
832
832
|
const center_namespaceObject = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIxMTZBRkZCNkJFRDExRUY4RTc4ODI1OTI5RDg2NEIzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIxMTZBRkZDNkJFRDExRUY4RTc4ODI1OTI5RDg2NEIzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MjExNkFGRjk2QkVEMTFFRjhFNzg4MjU5MjlEODY0QjMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjExNkFGRkE2QkVEMTFFRjhFNzg4MjU5MjlEODY0QjMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7kzyMtAAAGuElEQVR42uxd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";
|
|
833
833
|
const fly_namespaceObject = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFGODkyQTNFNkJFRDExRUZCQzQzOTRDMjJCMTlEMDU3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFGODkyQTNGNkJFRDExRUZCQzQzOTRDMjJCMTlEMDU3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUY4OTJBM0M2QkVEMTFFRkJDNDM5NEMyMkIxOUQwNTciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MUY4OTJBM0Q2QkVEMTFFRkJDNDM5NEMyMkIxOUQwNTciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6Kn+fFAAAJmElEQVR42uxd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";
|
|
834
834
|
const car_namespaceObject = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFFQjNCNEQ4NkJFRDExRUY5RDFCQzVGRTFERTM5QURDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFFQjNCNEQ5NkJFRDExRUY5RDFCQzVGRTFERTM5QURDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MUVCM0I0RDY2QkVEMTFFRjlEMUJDNUZFMURFMzlBREMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MUVCM0I0RDc2QkVEMTFFRjlEMUJDNUZFMURFMzlBREMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4N8EJcAAAKr0lEQVR42uxdB5AURRT9eAeCwIHAnQHUU8AAqAgCJhQBERHFVGbMlqFK0RIzZgurRC0VtAoEFUOJCTEHDJhKMYKRM6AeGZEgIneAnP9V/6mbG3Z2NrLdO/9Vvbqd3WHp2Xnd8/v3/78b1dXVUa6x93nLyRI0Z+6JJjE7MXcQtmU2ZbZkljBrmWuZq5lLmfOZ1cwq5tfyd4MNFzR7Ypucfl8pFRe2YvZjDhR2ZW6Rg++tYX7OnC7E6/+K4QcrLZJrGMQ8nXm09PpcA6NFX+GtzEXMKcwnmV+6/ONt4XDbWzOvZP7GfJV5Sp5ufiJsx7yc+YWMBie72plcFABu8o3ynL6T2aHA7dmX+RTzZ+ZpzEYqgPzhDOYvzFs2Y29PFZXMJ2RE2E8FkFu0l2F+MnNby9vak/kxc4zYDiqALDGA+Q1ziGMj60jmJ8ydVACZ4xLmm0xMfuvk9U3McTJntwl/y8xgKnOVvNddDMW+Og1MH9cyR8trjABnMmf5Psfz9lNL2vqX3Oz5ctxMZig3MNuJcIcy39URIDXc6rv5L4tRNStwzkzmZ5a092HfzQfWyjX0l5EBgnhF/BUqgAicJj2HZPg8UX7QRFhkSZt/DHn/QzLOqQ0igmeYu6sAwtGDOdHXi04i44YNgy0zgm2SfPa++C2AVsyXmGUqgE3RWKZ53tQJ06i5Sc7Hj7mPJW0/MOLzu5g/yevOzDtUAImNvm7yej1zbMT5cP02saTteLaXJ/l8vYjAw8XMg1QA9YClfFVg2FyW5PxmgfMLjSYptOd5ariCeLsKoB5XUEPX7tcR59/G3Nky++Uy5l5JPl8eeKQdQmbpOvYCQEDG2YH31iU5f7gIxkafytSIR8G/geOLVABmrhy0onuFnHs+81GyFx3JOHvahzwmgm5hTBFbxF0AQ0OMKowK3tIqhtYXmBPIfvd1N3mEnSEzG5LrgG+jdeDcptIBYi2AsN4O7xri8xYzZzOPIXdQLlPahcy3mXOYo0LO7VPo51ahsU/E7MBloP0DIs7pHucRoCU5sGaeZ1TEWQBbk6KNCiDeKImzABrp/Vc/gEIFoFABKFQAis2P0hhcI5Zg4ZFbQCZubwlzhby/0meMIsAErlu4a5H6BX9+B3ndSAXgBjaS8cN/QCaSGC5kxOvVZPGdWKZGljHWI+C1O5hMyrkKwBKgNz/HfJ05Q45ziTVkoo/9Ecjw9cPFeyTzWLIvTa3oBYDhexqZ3ADc+NrN/P//SSYJBERNgmFkVv8OJ00OzSswlN9HJhroBBFBbYHbhCAPZAcfQSbkezxZUk2kmASAtLBHmLuQCb2aZ2k7Efl7IXMPMvELKoAcoEoMr3PInkSQKCCF/TgywS4LVQCZA894pFt/5Kit8qrMGN5QAaQPZNMMFyvcZSyXkWCcCiA9LCsi/wRmLUtUAOmPAM2KRACIexipAkgPSPwcUSQCuJqMq1kFkMbcGriGNg2ldg1YS7jUdzxDBRCNYfIXveYqxwVwne9RNolMuLgKIAKIpZ8ir0dIL3IRyAS6QF4jQ/hmfQSkjjvlL3ztoxwVAOoZetlBKHUz37YG2rwYhGVdLOXCrYqcwHuYv2bwPRh+sXqH/ENv1a7MJ/7m4muoEaL62DqZvy+VnpsJ0O7TfcdTbPyRbV8NfEl+yMYyfA5PcA6MxK5y3q5k1gt2JJNwUZGDqSRW/pCetlAIN2+ViLOKwquGo0iUF/K9UR5rKoA08ZZMoQAUjxojr5FQicphveSG5xPlwkRBIKhjhMATFISEu9orbIF0txMCo9kKFUBDdPRZ+2GYKT0MPQnr7F9RgRMpEjxe+gixSolVy89p0wCRZPUMK8TemS4iWlusAiiXnutt5lCZwr/Bs/l7qq+8UUJ2AyLtneD9LyJEdKUQsQ0fy+PiLRF8XT4bnO9ZQIkM3YjRWyKG0Hkp3nwP35L7+DHF87aUTjJaRPM7GWdYcxcF0EUuAku6fSnzUKmqIhDAnCSfJevhMGbvkH+/v0sC2FsMo0S575hizZC5/TkpfNcPjt98BLGsSvJ5tdgBp5IpilGd4ByEp79D4cU0rLMBxlN9NUwofLZcAAwdlE/1fP3dYzACzElxqvmUEEAxycPEVjpUprqwFe4mEx1lvQCg6Elyw9+VC8wUPzsugOoMrxl8UOyoniKI7q6MALmcm8MyRjn2tg4/ArIBpsHBvARnZgG5wkKHR4B5NjdOBZB/LFYBxFsAGhZuwXO0kFiqAsgeKxwWwEoVQPZY5bAAVqkA4iuANWT5LuOuCGClowKwvt06AsS83a4I4F9HBbBeBZAbrHZUAH+rAOKNjSqA3OAfRwVQqwLIDTY4KoC1KoB4C4BUAPF+BKgAFCqAXKC13iodARQqAEWuUao/QV6B2gaVgffaqQCiMS1w3NhRASCU+zcdAdLHMFKoDaCI7whweeAY27eMdPD3/Y42LSxxFpnK5yqAJLg3cNzbUQG01EdATH7IELRSAcRbADoCxKUnhaBEfAEqgCzRhtxFWxVA9mjnsAAqVABF3ot0BFABJEO5CiB7dHBYAB1UANmjvQogvgJAfcHtHBbA9iqA7IC9g1yOW6hUAWSHTgneszHjBqHrM1NsvwogCwGg7i5Kxb9JeS6knCKQ/4d6ft2YJyUQZ5nNM4FSBwUwgUxJ9sHMHeTvAGYPMiXo8y1qFH5E/f8vyZS8/YQaJq5gk4tjAv9mN8quWGasBdDF9xq5do/5jlGD7yEhgHKqKLO6oxAGWBvxI7QgU3W7Rch1/yM3cqX0anCR3LgFZCp3Y8uamoj23p9AAIgJ+EgFkBn85VGfJbOXTxi8HTy+KWB73yNT4LpLyDWoDZAGWgWs6AmOWP5jk4hYBZAGegaMvw8dEcDj1LA8DPYQ2koFkD4OdrD3A6gO5o/7Q1j7ASqA9NEvxPhzAeMC09R+KoD0n//7p2j82QjMGF73HR+rAkgP2HeviYPDf5gx2IUS7z2oAgjBKQ4af0HAW/mT7/hcFUBqwKZTAxzv/SQ2wIO+Y2yZ10kFEI1nHTb+gsBswCtxA0/k9SqAaHR22PgLAi7lybY2zvZp4AQqDkxTAWSGIyn77d8LCWwFezHzaRVAZrha5tM3+x4LtgMu38EyBZzPfIAsTmxxYTUQ8YA3Cf8gswaPpVXsRopVtzUF7uG7yqylh3A/ed8JuBZrtxPzTKE3zfpdWC1cIIYjNpvEWv5qYS1FF5zEiFgmvbjMR0T0ILagQgSJdiD4xOVoZScFEAQihncWpgMIwb+VS3OKacGsuFYJa0EKK4xArQFc4E2lCi0AGHU1MRfAr3EWAPbUmRxzAUyMux/gWrHe44gXqX7dI7YCwLawWPmbF7ObP515KhU4ucUWT+AvZJwoL8fgxiNzaDRzCFmwHZ5NruBlzKOZxzPnFunNf0+EjiVhK7bBsXEtYCqZVKrhzFlF0uNfIRPh3J+MC1v9ABFA73iCTDw9cgO8hRWXgBs9iozb+CiyNKzNBU/gV8IRzF7MQcyBZN+iC4zZ95nvMF9z5THmkisY1vJnwtvJRAwj5Qp1hLEah/TsrrR5qnMuYX7L/J5MljCylavIjnT1ohVAEOt8gvADK3dYHKoks3K3rbzXTsTRUsTTVOjByw6GZe6tIC6Tm72Y6jOE51IRubD/F2AAvqsAD0FVlU8AAAAASUVORK5CYII=";
|
|
835
|
+
const controller_namespaceObject = "data:image/png;base64,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";
|
|
835
836
|
const flight_namespaceObject = "data:image/png;base64,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";
|
|
836
837
|
const ship_namespaceObject = "data:image/png;base64,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";
|
|
837
838
|
const circle_namespaceObject = "data:image/png;base64,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";
|
|
@@ -879,7 +880,8 @@ const icons = {
|
|
|
879
880
|
mobileRect: mobile_rect_namespaceObject,
|
|
880
881
|
otherCircle: other_circle_namespaceObject,
|
|
881
882
|
movableRect: movable_rect_namespaceObject,
|
|
882
|
-
portableRect: portable_rect_namespaceObject
|
|
883
|
+
portableRect: portable_rect_namespaceObject,
|
|
884
|
+
controllerRect: controller_namespaceObject
|
|
883
885
|
};
|
|
884
886
|
const borderIcon = {
|
|
885
887
|
circle: {
|
|
@@ -13925,8 +13927,8 @@ class MovableManager extends EmitManager {
|
|
|
13925
13927
|
],
|
|
13926
13928
|
true
|
|
13927
13929
|
],
|
|
13928
|
-
|
|
13929
|
-
|
|
13930
|
+
10,
|
|
13931
|
+
8
|
|
13930
13932
|
],
|
|
13931
13933
|
'circle-color': stateColorRule,
|
|
13932
13934
|
'circle-stroke-width': [
|
|
@@ -14511,6 +14513,7 @@ class NewStationManager extends EmitManager {
|
|
|
14511
14513
|
'portable',
|
|
14512
14514
|
'movable'
|
|
14513
14515
|
].includes(station.category?.toLowerCase())) return station.category?.toLowerCase() || '';
|
|
14516
|
+
if (station.category && 'controller' === station.category.toLowerCase()) return 'controller';
|
|
14514
14517
|
return 'other';
|
|
14515
14518
|
};
|
|
14516
14519
|
getFeatures = (stations)=>stations.filter((station)=>{
|
|
@@ -16425,36 +16428,26 @@ const getTrack = (mapless, name)=>mapless?.get(TrackManager, name);
|
|
|
16425
16428
|
const detachTrack = (mapless, name)=>mapless?.unuse(TrackManager, name);
|
|
16426
16429
|
class AirspaceManager extends manager_Manager {
|
|
16427
16430
|
zones = {};
|
|
16428
|
-
config
|
|
16431
|
+
config = {
|
|
16432
|
+
opacity: 0.3,
|
|
16433
|
+
defaultColor: '#4a90e2',
|
|
16434
|
+
defaultEdgeColor: '#ff00ff',
|
|
16435
|
+
defaultEdgeOpacity: 0.8,
|
|
16436
|
+
defaultEdgeWidth: 2,
|
|
16437
|
+
defaultMinAltitude: 0,
|
|
16438
|
+
defaultMaxAltitude: 1000,
|
|
16439
|
+
defaultFillColor: 'rgba(74, 144, 226, 0.3)',
|
|
16440
|
+
defaultFillOpacity: 0.3
|
|
16441
|
+
};
|
|
16429
16442
|
originalProperties = {};
|
|
16430
16443
|
constructor(mapless, options){
|
|
16431
16444
|
super(mapless, options, 'airspace');
|
|
16432
|
-
this.config = {
|
|
16433
|
-
minAltitude: 0,
|
|
16434
|
-
maxAltitude: 1000,
|
|
16435
|
-
color: 0x4a90e2,
|
|
16436
|
-
opacity: 0.3,
|
|
16437
|
-
edgeColor: 0xff00ff,
|
|
16438
|
-
edgeOpacity: 0.8,
|
|
16439
|
-
edgeWidth: 2
|
|
16440
|
-
};
|
|
16441
16445
|
this.onInitialized();
|
|
16442
16446
|
}
|
|
16443
|
-
setConfig(
|
|
16444
|
-
|
|
16445
|
-
|
|
16446
|
-
|
|
16447
|
-
color: config.color ?? this.config.color,
|
|
16448
|
-
opacity: config.opacity ?? this.config.opacity,
|
|
16449
|
-
edgeColor: config.edgeColor ?? this.config.edgeColor,
|
|
16450
|
-
edgeOpacity: config.edgeOpacity ?? this.config.edgeOpacity,
|
|
16451
|
-
edgeWidth: config.edgeWidth ?? this.config.edgeWidth
|
|
16452
|
-
};
|
|
16453
|
-
if (this.map && this.idHub?.lineLayerId) {
|
|
16454
|
-
this.map.setPaintProperty(this.idHub.lineLayerId, 'line-color', this.numberToColor(this.config.edgeColor));
|
|
16455
|
-
this.map.setPaintProperty(this.idHub.lineLayerId, 'line-opacity', this.config.edgeOpacity);
|
|
16456
|
-
this.map.setPaintProperty(this.idHub.lineLayerId, 'line-width', this.config.edgeWidth);
|
|
16457
|
-
this.map.setPaintProperty(this.idHub.fillLayerId, 'fill-extrusion-opacity', this.config.opacity);
|
|
16447
|
+
setConfig(options) {
|
|
16448
|
+
if (void 0 !== options.opacity) {
|
|
16449
|
+
this.config.opacity = options.opacity;
|
|
16450
|
+
if (this.map && this.idHub?.fillLayerId) this.map.setPaintProperty(this.idHub.fillLayerId, 'fill-extrusion-opacity', this.config.opacity);
|
|
16458
16451
|
}
|
|
16459
16452
|
}
|
|
16460
16453
|
handleCoordSystemChange(_system) {
|
|
@@ -16467,6 +16460,7 @@ class AirspaceManager extends manager_Manager {
|
|
|
16467
16460
|
const newHub = new core_IdHub({
|
|
16468
16461
|
layers: {
|
|
16469
16462
|
fillLayerId: 'dzmap-airspace-fill-layer',
|
|
16463
|
+
fill2DLayerId: 'dzmap-airspace-fill-2d-layer',
|
|
16470
16464
|
lineLayerId: 'dzmap-airspace-line-layer'
|
|
16471
16465
|
},
|
|
16472
16466
|
sources: {
|
|
@@ -16479,14 +16473,38 @@ class AirspaceManager extends manager_Manager {
|
|
|
16479
16473
|
if (!this.mapless) return;
|
|
16480
16474
|
const sid = this.idHub?.sourceId;
|
|
16481
16475
|
this.mapless.addEmptySource(sid);
|
|
16476
|
+
this.mapless.addLayer({
|
|
16477
|
+
id: this.idHub?.fill2DLayerId,
|
|
16478
|
+
type: 'fill',
|
|
16479
|
+
source: sid,
|
|
16480
|
+
paint: {
|
|
16481
|
+
'fill-color': [
|
|
16482
|
+
'get',
|
|
16483
|
+
'fillColor'
|
|
16484
|
+
],
|
|
16485
|
+
'fill-opacity': [
|
|
16486
|
+
'get',
|
|
16487
|
+
'fillOpacity'
|
|
16488
|
+
]
|
|
16489
|
+
}
|
|
16490
|
+
});
|
|
16482
16491
|
this.mapless.addLayer({
|
|
16483
16492
|
id: this.idHub?.lineLayerId,
|
|
16484
16493
|
type: 'line',
|
|
16485
16494
|
source: sid,
|
|
16486
16495
|
paint: {
|
|
16487
|
-
'line-color':
|
|
16488
|
-
|
|
16489
|
-
|
|
16496
|
+
'line-color': [
|
|
16497
|
+
'get',
|
|
16498
|
+
'edgeColor'
|
|
16499
|
+
],
|
|
16500
|
+
'line-opacity': [
|
|
16501
|
+
'get',
|
|
16502
|
+
'edgeOpacity'
|
|
16503
|
+
],
|
|
16504
|
+
'line-width': [
|
|
16505
|
+
'get',
|
|
16506
|
+
'edgeWidth'
|
|
16507
|
+
]
|
|
16490
16508
|
}
|
|
16491
16509
|
});
|
|
16492
16510
|
this.mapless.addLayer({
|
|
@@ -16498,7 +16516,7 @@ class AirspaceManager extends manager_Manager {
|
|
|
16498
16516
|
'get',
|
|
16499
16517
|
'color'
|
|
16500
16518
|
],
|
|
16501
|
-
'fill-extrusion-opacity': this.config.opacity
|
|
16519
|
+
'fill-extrusion-opacity': this.config.opacity,
|
|
16502
16520
|
'fill-extrusion-height': [
|
|
16503
16521
|
'get',
|
|
16504
16522
|
'maxAltitude'
|
|
@@ -16510,15 +16528,11 @@ class AirspaceManager extends manager_Manager {
|
|
|
16510
16528
|
}
|
|
16511
16529
|
});
|
|
16512
16530
|
}
|
|
16513
|
-
numberToColor(num) {
|
|
16514
|
-
return `#${num.toString(16).padStart(6, '0')}`;
|
|
16515
|
-
}
|
|
16516
16531
|
generateId() {
|
|
16517
16532
|
return `airspace-${Object.keys(this.zones).length}`;
|
|
16518
16533
|
}
|
|
16519
16534
|
drawZone(id, options) {
|
|
16520
|
-
const { name = '', geometry, minAltitude = this.config.
|
|
16521
|
-
const zoneColor = this.numberToColor(color);
|
|
16535
|
+
const { name = '', geometry, minAltitude = this.config.defaultMinAltitude, maxAltitude = this.config.defaultMaxAltitude, color = this.config.defaultColor, edgeColor = this.config.defaultEdgeColor, edgeOpacity = this.config.defaultEdgeOpacity, edgeWidth = this.config.defaultEdgeWidth, fillColor = this.config.defaultFillColor, fillOpacity = this.config.defaultFillOpacity } = options;
|
|
16522
16536
|
const feature = {
|
|
16523
16537
|
type: 'Feature',
|
|
16524
16538
|
geometry: {
|
|
@@ -16530,8 +16544,12 @@ class AirspaceManager extends manager_Manager {
|
|
|
16530
16544
|
name,
|
|
16531
16545
|
minAltitude,
|
|
16532
16546
|
maxAltitude,
|
|
16533
|
-
color
|
|
16534
|
-
|
|
16547
|
+
color,
|
|
16548
|
+
edgeColor,
|
|
16549
|
+
edgeOpacity,
|
|
16550
|
+
edgeWidth,
|
|
16551
|
+
fillColor,
|
|
16552
|
+
fillOpacity
|
|
16535
16553
|
}
|
|
16536
16554
|
};
|
|
16537
16555
|
this.zones[id] = {
|
|
@@ -16541,20 +16559,38 @@ class AirspaceManager extends manager_Manager {
|
|
|
16541
16559
|
minAltitude,
|
|
16542
16560
|
maxAltitude,
|
|
16543
16561
|
color,
|
|
16544
|
-
|
|
16562
|
+
edgeColor,
|
|
16563
|
+
edgeOpacity,
|
|
16564
|
+
edgeWidth,
|
|
16565
|
+
fillColor,
|
|
16566
|
+
fillOpacity,
|
|
16545
16567
|
feature
|
|
16546
16568
|
};
|
|
16547
16569
|
this.originalProperties[id] = {
|
|
16548
|
-
color
|
|
16549
|
-
opacity
|
|
16570
|
+
color
|
|
16550
16571
|
};
|
|
16551
16572
|
this.updateSource();
|
|
16552
16573
|
}
|
|
16553
16574
|
updateSource() {
|
|
16554
|
-
|
|
16575
|
+
const featureCollection = {
|
|
16555
16576
|
type: 'FeatureCollection',
|
|
16556
16577
|
features: Object.values(this.zones).map((z)=>z.feature)
|
|
16557
|
-
}
|
|
16578
|
+
};
|
|
16579
|
+
this.mapless?.setData(this.idHub?.sourceId, featureCollection);
|
|
16580
|
+
if (this.map && this.idHub?.lineLayerId && Object.keys(this.zones).length > 0) {
|
|
16581
|
+
this.map.setPaintProperty(this.idHub.lineLayerId, 'line-color', [
|
|
16582
|
+
'get',
|
|
16583
|
+
'edgeColor'
|
|
16584
|
+
]);
|
|
16585
|
+
this.map.setPaintProperty(this.idHub.lineLayerId, 'line-opacity', [
|
|
16586
|
+
'get',
|
|
16587
|
+
'edgeOpacity'
|
|
16588
|
+
]);
|
|
16589
|
+
this.map.setPaintProperty(this.idHub.lineLayerId, 'line-width', [
|
|
16590
|
+
'get',
|
|
16591
|
+
'edgeWidth'
|
|
16592
|
+
]);
|
|
16593
|
+
}
|
|
16558
16594
|
}
|
|
16559
16595
|
addZone(options) {
|
|
16560
16596
|
const id = options.id || this.generateId();
|
|
@@ -16575,44 +16611,36 @@ class AirspaceManager extends manager_Manager {
|
|
|
16575
16611
|
this.originalProperties = {};
|
|
16576
16612
|
this.mapless?.setEmptyData(this.idHub?.sourceId);
|
|
16577
16613
|
}
|
|
16578
|
-
|
|
16614
|
+
updateZone(id, options) {
|
|
16579
16615
|
const zone = this.zones[id];
|
|
16580
16616
|
if (!zone) return;
|
|
16581
|
-
zone
|
|
16582
|
-
|
|
16583
|
-
if (
|
|
16617
|
+
Object.assign(zone, options);
|
|
16618
|
+
if (zone.feature.properties) Object.assign(zone.feature.properties, options);
|
|
16619
|
+
if (options.color && !this.originalProperties[id]) this.originalProperties[id] = {
|
|
16620
|
+
color: zone.color
|
|
16621
|
+
};
|
|
16584
16622
|
this.updateSource();
|
|
16585
16623
|
}
|
|
16586
|
-
|
|
16587
|
-
|
|
16588
|
-
|
|
16589
|
-
|
|
16590
|
-
if (zone.feature.properties) zone.feature.properties.opacity = opacity;
|
|
16591
|
-
this.updateSource();
|
|
16624
|
+
updateZoneColor(id, color) {
|
|
16625
|
+
this.updateZone(id, {
|
|
16626
|
+
color
|
|
16627
|
+
});
|
|
16592
16628
|
}
|
|
16593
16629
|
updateZoneAltitude(id, minAltitude, maxAltitude) {
|
|
16594
|
-
|
|
16595
|
-
|
|
16596
|
-
|
|
16597
|
-
|
|
16598
|
-
if (zone.feature.properties) {
|
|
16599
|
-
zone.feature.properties.minAltitude = minAltitude;
|
|
16600
|
-
zone.feature.properties.maxAltitude = maxAltitude;
|
|
16601
|
-
}
|
|
16602
|
-
this.updateSource();
|
|
16630
|
+
this.updateZone(id, {
|
|
16631
|
+
minAltitude,
|
|
16632
|
+
maxAltitude
|
|
16633
|
+
});
|
|
16603
16634
|
}
|
|
16604
16635
|
highlightZone(id, highlighted = true) {
|
|
16605
|
-
|
|
16606
|
-
|
|
16607
|
-
|
|
16608
|
-
|
|
16609
|
-
this.updateZoneOpacity(id, 0.6);
|
|
16610
|
-
} else {
|
|
16636
|
+
if (highlighted) this.updateZone(id, {
|
|
16637
|
+
color: '#ff0000'
|
|
16638
|
+
});
|
|
16639
|
+
else {
|
|
16611
16640
|
const original = this.originalProperties[id];
|
|
16612
|
-
if (original) {
|
|
16613
|
-
|
|
16614
|
-
|
|
16615
|
-
}
|
|
16641
|
+
if (original) this.updateZone(id, {
|
|
16642
|
+
color: original.color
|
|
16643
|
+
});
|
|
16616
16644
|
}
|
|
16617
16645
|
}
|
|
16618
16646
|
getZone(id) {
|
|
@@ -16798,10 +16826,18 @@ const elevatedLine = ElevatedLineManager;
|
|
|
16798
16826
|
const attachElevatedLine = (mapless, name, options)=>mapless?.use(ElevatedLineManager, name, options);
|
|
16799
16827
|
const getElevatedLine = (mapless, name)=>mapless?.get(ElevatedLineManager, name);
|
|
16800
16828
|
const detachElevatedLine = (mapless, name)=>mapless?.unuse(ElevatedLineManager, name);
|
|
16801
|
-
class MapModelManager extends
|
|
16829
|
+
class MapModelManager extends EmitManager {
|
|
16802
16830
|
models = new Map();
|
|
16803
16831
|
modelCounter = 0;
|
|
16804
16832
|
_idHub;
|
|
16833
|
+
globalClickHandler;
|
|
16834
|
+
selectedModelId = null;
|
|
16835
|
+
defaultSelectedColor = [
|
|
16836
|
+
1,
|
|
16837
|
+
0,
|
|
16838
|
+
0
|
|
16839
|
+
];
|
|
16840
|
+
themeColorModels = new Set();
|
|
16805
16841
|
constructor(mapless, options){
|
|
16806
16842
|
super(mapless, options, 'mapModel');
|
|
16807
16843
|
this.map = mapless.map;
|
|
@@ -16809,11 +16845,76 @@ class MapModelManager extends manager_Manager {
|
|
|
16809
16845
|
sources: {},
|
|
16810
16846
|
layers: {}
|
|
16811
16847
|
});
|
|
16812
|
-
this.
|
|
16848
|
+
this.onInitialized();
|
|
16849
|
+
this.setupGlobalClickHandler();
|
|
16813
16850
|
}
|
|
16814
|
-
|
|
16815
|
-
if (!this.map)
|
|
16851
|
+
setupGlobalClickHandler() {
|
|
16852
|
+
if (!this.map) return;
|
|
16853
|
+
this.globalClickHandler = (e)=>{
|
|
16854
|
+
if (!this.map) return;
|
|
16855
|
+
const modelLayerIds = Array.from(this.models.values()).map((m)=>m.layerId);
|
|
16856
|
+
if (0 === modelLayerIds.length) return;
|
|
16857
|
+
const features = this.map.queryRenderedFeatures(e.point, {
|
|
16858
|
+
layers: modelLayerIds
|
|
16859
|
+
});
|
|
16860
|
+
if (!features || 0 === features.length) return;
|
|
16861
|
+
const feature = features[0];
|
|
16862
|
+
const layerId = feature.layer?.id;
|
|
16863
|
+
const modelData = Array.from(this.models.values()).find((m)=>m.layerId === layerId);
|
|
16864
|
+
if (modelData) {
|
|
16865
|
+
const clickEvent = {
|
|
16866
|
+
id: modelData.id,
|
|
16867
|
+
url: modelData.url,
|
|
16868
|
+
lngLat: modelData.config.position || modelData.config.lngLat || [
|
|
16869
|
+
0,
|
|
16870
|
+
0
|
|
16871
|
+
],
|
|
16872
|
+
altitude: modelData.config.altitude || 0,
|
|
16873
|
+
rotation: modelData.config.orientation,
|
|
16874
|
+
scale: modelData.config.scale,
|
|
16875
|
+
originalEvent: e
|
|
16876
|
+
};
|
|
16877
|
+
this.emit('modelClick', clickEvent);
|
|
16878
|
+
}
|
|
16879
|
+
};
|
|
16880
|
+
this.map.on('click', this.globalClickHandler);
|
|
16881
|
+
}
|
|
16882
|
+
getDefaultThemeColor() {
|
|
16883
|
+
const isDark = this.mapless?.isDark();
|
|
16884
|
+
if (isDark) return [
|
|
16885
|
+
68 / 255,
|
|
16886
|
+
233 / 255,
|
|
16887
|
+
234 / 255
|
|
16888
|
+
];
|
|
16889
|
+
return null;
|
|
16890
|
+
}
|
|
16891
|
+
removeModelColor(id) {
|
|
16892
|
+
const modelData = this.models.get(id);
|
|
16893
|
+
if (!modelData) return;
|
|
16894
|
+
if (!this.map) return;
|
|
16895
|
+
if (this.map.getLayer(modelData.layerId)) {
|
|
16896
|
+
this.map.setPaintProperty(modelData.layerId, 'model-color', void 0);
|
|
16897
|
+
this.map.setPaintProperty(modelData.layerId, 'model-color-mix-intensity', void 0);
|
|
16898
|
+
}
|
|
16899
|
+
}
|
|
16900
|
+
updateAllModelsThemeColor() {
|
|
16901
|
+
const themeColor = this.getDefaultThemeColor();
|
|
16902
|
+
this.themeColorModels.forEach((modelId)=>{
|
|
16903
|
+
const modelData = this.models.get(modelId);
|
|
16904
|
+
if (!modelData) return void this.themeColorModels.delete(modelId);
|
|
16905
|
+
if (modelId !== this.selectedModelId) if (themeColor) this.updateModelColor(modelId, themeColor, 0.8);
|
|
16906
|
+
else this.removeModelColor(modelId);
|
|
16907
|
+
});
|
|
16816
16908
|
}
|
|
16909
|
+
onStyleChanged = (_tag)=>{
|
|
16910
|
+
if (!this.map) return;
|
|
16911
|
+
this.updateAllModelsThemeColor();
|
|
16912
|
+
this.map.once('style.load', ()=>{
|
|
16913
|
+
setTimeout(()=>{
|
|
16914
|
+
this.updateAllModelsThemeColor();
|
|
16915
|
+
}, 100);
|
|
16916
|
+
});
|
|
16917
|
+
};
|
|
16817
16918
|
generateSourceId() {
|
|
16818
16919
|
const id = `dzmap-model-source-${this.modelCounter}`;
|
|
16819
16920
|
this._idHub.addSource(`model-${this.modelCounter}`, id);
|
|
@@ -16841,7 +16942,6 @@ class MapModelManager extends manager_Manager {
|
|
|
16841
16942
|
};
|
|
16842
16943
|
if (materialOverrides && Object.keys(materialOverrides).length > 0) sourceConfig.models[modelId].materialOverrideNames = Object.keys(materialOverrides);
|
|
16843
16944
|
if (nodeOverrides && Object.keys(nodeOverrides).length > 0) sourceConfig.models[modelId].nodeOverrideNames = Object.keys(nodeOverrides);
|
|
16844
|
-
console.log('Adding model source:', sourceConfig);
|
|
16845
16945
|
this.map.addSource(sourceId, sourceConfig);
|
|
16846
16946
|
const layerConfig = {
|
|
16847
16947
|
id: layerId,
|
|
@@ -16949,7 +17049,6 @@ class MapModelManager extends manager_Manager {
|
|
|
16949
17049
|
rotationMatch.push(defaultRotation);
|
|
16950
17050
|
layerConfig.paint['model-rotation'] = rotationMatch;
|
|
16951
17051
|
}
|
|
16952
|
-
console.log('Adding model layer:', layerConfig);
|
|
16953
17052
|
this.map.addLayer(layerConfig);
|
|
16954
17053
|
return {
|
|
16955
17054
|
sourceId,
|
|
@@ -16964,34 +17063,27 @@ class MapModelManager extends manager_Manager {
|
|
|
16964
17063
|
0
|
|
16965
17064
|
], scale = 1, materialOverrides, nodeOverrides } = options;
|
|
16966
17065
|
this.removeModel(id);
|
|
16967
|
-
|
|
16968
|
-
|
|
16969
|
-
|
|
16970
|
-
|
|
16971
|
-
|
|
16972
|
-
|
|
16973
|
-
|
|
16974
|
-
|
|
16975
|
-
|
|
16976
|
-
|
|
16977
|
-
|
|
16978
|
-
|
|
16979
|
-
|
|
16980
|
-
|
|
16981
|
-
|
|
16982
|
-
|
|
16983
|
-
|
|
16984
|
-
|
|
16985
|
-
|
|
16986
|
-
|
|
16987
|
-
|
|
16988
|
-
altitude,
|
|
16989
|
-
rotation,
|
|
16990
|
-
scale
|
|
16991
|
-
});
|
|
16992
|
-
} catch (error) {
|
|
16993
|
-
console.error(`Failed to add model ${id}:`, error);
|
|
16994
|
-
throw error;
|
|
17066
|
+
const mainConfig = {
|
|
17067
|
+
uri: url,
|
|
17068
|
+
position: lngLat,
|
|
17069
|
+
altitude,
|
|
17070
|
+
orientation: rotation,
|
|
17071
|
+
scale
|
|
17072
|
+
};
|
|
17073
|
+
const { sourceId, layerId } = this.addSingleModel(id, mainConfig, materialOverrides, nodeOverrides);
|
|
17074
|
+
this.models.set(id, {
|
|
17075
|
+
id,
|
|
17076
|
+
sourceId,
|
|
17077
|
+
layerId,
|
|
17078
|
+
url,
|
|
17079
|
+
config: mainConfig,
|
|
17080
|
+
materialOverrides,
|
|
17081
|
+
nodeOverrides
|
|
17082
|
+
});
|
|
17083
|
+
if (!materialOverrides || 0 === Object.keys(materialOverrides).length) {
|
|
17084
|
+
this.themeColorModels.add(id);
|
|
17085
|
+
const themeColor = this.getDefaultThemeColor();
|
|
17086
|
+
if (themeColor) this.updateModelColor(id, themeColor, 0.8);
|
|
16995
17087
|
}
|
|
16996
17088
|
}
|
|
16997
17089
|
addModels(models) {
|
|
@@ -17001,7 +17093,7 @@ class MapModelManager extends manager_Manager {
|
|
|
17001
17093
|
}
|
|
17002
17094
|
updateModelPosition(id, lngLat, altitude = 0) {
|
|
17003
17095
|
const modelData = this.models.get(id);
|
|
17004
|
-
if (!modelData) return
|
|
17096
|
+
if (!modelData) return;
|
|
17005
17097
|
if (!this.map) return;
|
|
17006
17098
|
const source = this.map.getSource(modelData.sourceId);
|
|
17007
17099
|
if (source?.models?.[id]) {
|
|
@@ -17013,25 +17105,18 @@ class MapModelManager extends manager_Manager {
|
|
|
17013
17105
|
0,
|
|
17014
17106
|
altitude
|
|
17015
17107
|
]);
|
|
17016
|
-
console.log(`MapModel position updated: ${id}`, {
|
|
17017
|
-
lngLat,
|
|
17018
|
-
altitude
|
|
17019
|
-
});
|
|
17020
17108
|
}
|
|
17021
17109
|
updateModelRotation(id, rotation) {
|
|
17022
17110
|
const modelData = this.models.get(id);
|
|
17023
|
-
if (!modelData) return
|
|
17111
|
+
if (!modelData) return;
|
|
17024
17112
|
if (!this.map) return;
|
|
17025
17113
|
const source = this.map.getSource(modelData.sourceId);
|
|
17026
17114
|
if (source?.models?.[id]) source.models[id].orientation = rotation;
|
|
17027
17115
|
if (this.map.getLayer(modelData.layerId)) this.map.setPaintProperty(modelData.layerId, 'model-rotation', rotation);
|
|
17028
|
-
console.log(`MapModel rotation updated: ${id}`, {
|
|
17029
|
-
rotation
|
|
17030
|
-
});
|
|
17031
17116
|
}
|
|
17032
17117
|
updateModelScale(id, scale) {
|
|
17033
17118
|
const modelData = this.models.get(id);
|
|
17034
|
-
if (!modelData) return
|
|
17119
|
+
if (!modelData) return;
|
|
17035
17120
|
if (!this.map) return;
|
|
17036
17121
|
const source = this.map.getSource(modelData.sourceId);
|
|
17037
17122
|
if (source?.models?.[id]) source.models[id].scale = scale;
|
|
@@ -17040,9 +17125,6 @@ class MapModelManager extends manager_Manager {
|
|
|
17040
17125
|
scale,
|
|
17041
17126
|
scale
|
|
17042
17127
|
]);
|
|
17043
|
-
console.log(`MapModel scale updated: ${id}`, {
|
|
17044
|
-
scale
|
|
17045
|
-
});
|
|
17046
17128
|
}
|
|
17047
17129
|
removeModel(id) {
|
|
17048
17130
|
const modelData = this.models.get(id);
|
|
@@ -17051,7 +17133,8 @@ class MapModelManager extends manager_Manager {
|
|
|
17051
17133
|
if (this.map.getLayer(modelData.layerId)) this.map.removeLayer(modelData.layerId);
|
|
17052
17134
|
if (this.map.getSource(modelData.sourceId)) this.map.removeSource(modelData.sourceId);
|
|
17053
17135
|
this.models.delete(id);
|
|
17054
|
-
|
|
17136
|
+
this.themeColorModels.delete(id);
|
|
17137
|
+
if (this.selectedModelId === id) this.selectedModelId = null;
|
|
17055
17138
|
}
|
|
17056
17139
|
clearModels() {
|
|
17057
17140
|
const modelIds = Array.from(this.models.keys());
|
|
@@ -17059,7 +17142,6 @@ class MapModelManager extends manager_Manager {
|
|
|
17059
17142
|
this.removeModel(id);
|
|
17060
17143
|
});
|
|
17061
17144
|
this.models.clear();
|
|
17062
|
-
console.log('All MapModels cleared');
|
|
17063
17145
|
}
|
|
17064
17146
|
getModelCount() {
|
|
17065
17147
|
return this.models.size;
|
|
@@ -17070,7 +17152,40 @@ class MapModelManager extends manager_Manager {
|
|
|
17070
17152
|
getModelIds() {
|
|
17071
17153
|
return Array.from(this.models.keys());
|
|
17072
17154
|
}
|
|
17155
|
+
updateModelColor(id, color, intensity = 1) {
|
|
17156
|
+
const modelData = this.models.get(id);
|
|
17157
|
+
if (!modelData) return;
|
|
17158
|
+
if (!this.map) return;
|
|
17159
|
+
if (this.map.getLayer(modelData.layerId)) {
|
|
17160
|
+
this.map.setPaintProperty(modelData.layerId, 'model-color', `rgb(${255 * color[0]}, ${255 * color[1]}, ${255 * color[2]})`);
|
|
17161
|
+
this.map.setPaintProperty(modelData.layerId, 'model-color-mix-intensity', intensity);
|
|
17162
|
+
}
|
|
17163
|
+
}
|
|
17164
|
+
setDefaultSelectedColor(color) {
|
|
17165
|
+
this.defaultSelectedColor = color;
|
|
17166
|
+
}
|
|
17167
|
+
getSelectedModelId() {
|
|
17168
|
+
return this.selectedModelId;
|
|
17169
|
+
}
|
|
17170
|
+
selectModel(id, color) {
|
|
17171
|
+
const previousId = this.selectedModelId;
|
|
17172
|
+
const selectColor = color || this.defaultSelectedColor;
|
|
17173
|
+
if (previousId && previousId !== id) if (this.themeColorModels.has(previousId)) {
|
|
17174
|
+
const themeColor = this.getDefaultThemeColor();
|
|
17175
|
+
if (themeColor) this.updateModelColor(previousId, themeColor, 0.8);
|
|
17176
|
+
else this.removeModelColor(previousId);
|
|
17177
|
+
} else this.removeModelColor(previousId);
|
|
17178
|
+
this.selectedModelId = id;
|
|
17179
|
+
if (id) this.updateModelColor(id, selectColor, 1);
|
|
17180
|
+
this.emit('modelSelect', {
|
|
17181
|
+
id,
|
|
17182
|
+
previousId
|
|
17183
|
+
});
|
|
17184
|
+
}
|
|
17073
17185
|
destroy() {
|
|
17186
|
+
if (this.map && this.globalClickHandler) this.map.off('click', this.globalClickHandler);
|
|
17187
|
+
this.selectedModelId = null;
|
|
17188
|
+
this.themeColorModels.clear();
|
|
17074
17189
|
this.clearModels();
|
|
17075
17190
|
}
|
|
17076
17191
|
}
|
|
@@ -17632,11 +17747,6 @@ class Line2Manager extends manager_Manager {
|
|
|
17632
17747
|
points: config.points,
|
|
17633
17748
|
transform
|
|
17634
17749
|
});
|
|
17635
|
-
console.log(`Line2 added: ${id}`, {
|
|
17636
|
-
pointsCount: config.points.length,
|
|
17637
|
-
linewidth: lineConfig.linewidth,
|
|
17638
|
-
color: lineConfig.color
|
|
17639
|
-
});
|
|
17640
17750
|
}
|
|
17641
17751
|
addLines(lines) {
|
|
17642
17752
|
lines.forEach((line)=>{
|
|
@@ -18168,6 +18278,18 @@ class ThreeManager extends manager_Manager {
|
|
|
18168
18278
|
scale: 1
|
|
18169
18279
|
};
|
|
18170
18280
|
userScale = 1;
|
|
18281
|
+
baseRotation = [
|
|
18282
|
+
0,
|
|
18283
|
+
0,
|
|
18284
|
+
0
|
|
18285
|
+
];
|
|
18286
|
+
currentOrientation = {
|
|
18287
|
+
heading: 0,
|
|
18288
|
+
pitch: 0,
|
|
18289
|
+
roll: 0
|
|
18290
|
+
};
|
|
18291
|
+
boxHelper = null;
|
|
18292
|
+
isSelected = false;
|
|
18171
18293
|
constructor(mapless){
|
|
18172
18294
|
super(mapless);
|
|
18173
18295
|
this.map = mapless.map;
|
|
@@ -18210,17 +18332,23 @@ class ThreeManager extends manager_Manager {
|
|
|
18210
18332
|
}
|
|
18211
18333
|
});
|
|
18212
18334
|
this.userScale = scale;
|
|
18335
|
+
this.baseRotation = [
|
|
18336
|
+
...rotation
|
|
18337
|
+
];
|
|
18213
18338
|
const modelAsMercator = mapbox_gl.MercatorCoordinate.fromLngLat(lngLat, altitude);
|
|
18214
18339
|
this.modelTransform = {
|
|
18215
18340
|
translateX: modelAsMercator.x,
|
|
18216
18341
|
translateY: modelAsMercator.y,
|
|
18217
18342
|
translateZ: modelAsMercator.z,
|
|
18218
|
-
rotateX: rotation[0],
|
|
18219
|
-
rotateY: rotation[1],
|
|
18220
|
-
rotateZ: rotation[2],
|
|
18221
18343
|
scale: modelAsMercator.meterInMercatorCoordinateUnits() * scale
|
|
18222
18344
|
};
|
|
18345
|
+
this.currentOrientation = {
|
|
18346
|
+
heading: 0,
|
|
18347
|
+
pitch: 0,
|
|
18348
|
+
roll: 0
|
|
18349
|
+
};
|
|
18223
18350
|
mapThree.addRenderableObject(this.modelId, this.model, this.modelTransform);
|
|
18351
|
+
this._applyBaseRotation();
|
|
18224
18352
|
this.animations = gltf.animations || [];
|
|
18225
18353
|
if (this.animations.length > 0) {
|
|
18226
18354
|
this.mixer = new AnimationMixer(gltf.scene);
|
|
@@ -18253,6 +18381,21 @@ class ThreeManager extends manager_Manager {
|
|
|
18253
18381
|
this.currentAction = action;
|
|
18254
18382
|
console.log(`Playing animation: ${animationName}`);
|
|
18255
18383
|
}
|
|
18384
|
+
stopAnimation() {
|
|
18385
|
+
if (!this.mixer || !this.currentAction) return void console.warn('No animation to stop');
|
|
18386
|
+
this.currentAction.stop();
|
|
18387
|
+
console.log('Animation stopped');
|
|
18388
|
+
}
|
|
18389
|
+
pauseAnimation() {
|
|
18390
|
+
if (!this.currentAction) return void console.warn('No animation to pause');
|
|
18391
|
+
this.currentAction.paused = true;
|
|
18392
|
+
console.log('Animation paused');
|
|
18393
|
+
}
|
|
18394
|
+
resumeAnimation() {
|
|
18395
|
+
if (!this.currentAction) return void console.warn('No animation to resume');
|
|
18396
|
+
this.currentAction.paused = false;
|
|
18397
|
+
console.log('Animation resumed');
|
|
18398
|
+
}
|
|
18256
18399
|
updatePosition(lngLat, altitude = 0) {
|
|
18257
18400
|
const mapThree = this.getMapThree();
|
|
18258
18401
|
if (!mapThree || !this.model) return;
|
|
@@ -18261,8 +18404,98 @@ class ThreeManager extends manager_Manager {
|
|
|
18261
18404
|
this.modelTransform.translateY = modelAsMercator.y;
|
|
18262
18405
|
this.modelTransform.translateZ = modelAsMercator.z;
|
|
18263
18406
|
this.modelTransform.scale = modelAsMercator.meterInMercatorCoordinateUnits() * this.userScale;
|
|
18407
|
+
this._buildFullTransformMatrix(this.currentOrientation.heading, this.currentOrientation.pitch, this.currentOrientation.roll);
|
|
18408
|
+
}
|
|
18409
|
+
_applyBaseRotation() {
|
|
18410
|
+
const mapThree = this.getMapThree();
|
|
18411
|
+
if (!mapThree || !this.model) return;
|
|
18412
|
+
const fullTransform = new Matrix4();
|
|
18413
|
+
fullTransform.makeTranslation(this.modelTransform.translateX, this.modelTransform.translateY, this.modelTransform.translateZ);
|
|
18414
|
+
const scaleVec = new Vector3(this.modelTransform.scale, -this.modelTransform.scale, this.modelTransform.scale);
|
|
18415
|
+
fullTransform.scale(scaleVec);
|
|
18416
|
+
const baseRotationMatrix = new Matrix4();
|
|
18417
|
+
if (0 !== this.baseRotation[0]) baseRotationMatrix.multiply(new Matrix4().makeRotationX(this.baseRotation[0]));
|
|
18418
|
+
if (0 !== this.baseRotation[1]) baseRotationMatrix.multiply(new Matrix4().makeRotationY(this.baseRotation[1]));
|
|
18419
|
+
if (0 !== this.baseRotation[2]) baseRotationMatrix.multiply(new Matrix4().makeRotationZ(this.baseRotation[2]));
|
|
18420
|
+
const headingRad = -this.currentOrientation.heading * Math.PI / 180;
|
|
18421
|
+
const pitchRad = this.currentOrientation.pitch * Math.PI / 180;
|
|
18422
|
+
const rollRad = this.currentOrientation.roll * Math.PI / 180;
|
|
18423
|
+
const headingMatrix = new Matrix4().makeRotationZ(headingRad);
|
|
18424
|
+
const pitchMatrix = new Matrix4().makeRotationX(pitchRad);
|
|
18425
|
+
const rollMatrix = new Matrix4().makeRotationY(rollRad);
|
|
18426
|
+
const orientationMatrix = new Matrix4();
|
|
18427
|
+
orientationMatrix.multiply(rollMatrix).multiply(pitchMatrix).multiply(headingMatrix);
|
|
18428
|
+
const fullRotation = new Matrix4();
|
|
18429
|
+
fullRotation.multiply(orientationMatrix).multiply(baseRotationMatrix);
|
|
18430
|
+
fullTransform.multiply(fullRotation);
|
|
18431
|
+
this.modelTransform.matrix = fullTransform;
|
|
18432
|
+
this.modelTransform.rotateX = void 0;
|
|
18433
|
+
this.modelTransform.rotateY = void 0;
|
|
18434
|
+
this.modelTransform.rotateZ = void 0;
|
|
18435
|
+
mapThree.updateRenderableObjectTransform(this.modelId, this.modelTransform);
|
|
18436
|
+
}
|
|
18437
|
+
_buildFullTransformMatrix(heading, pitch, roll) {
|
|
18438
|
+
const mapThree = this.getMapThree();
|
|
18439
|
+
if (!mapThree || !this.model) return;
|
|
18440
|
+
this.currentOrientation = {
|
|
18441
|
+
heading,
|
|
18442
|
+
pitch,
|
|
18443
|
+
roll
|
|
18444
|
+
};
|
|
18445
|
+
const fullTransform = new Matrix4();
|
|
18446
|
+
fullTransform.makeTranslation(this.modelTransform.translateX, this.modelTransform.translateY, this.modelTransform.translateZ);
|
|
18447
|
+
const scaleVec = new Vector3(this.modelTransform.scale, -this.modelTransform.scale, this.modelTransform.scale);
|
|
18448
|
+
fullTransform.scale(scaleVec);
|
|
18449
|
+
const baseRotationMatrix = new Matrix4();
|
|
18450
|
+
if (0 !== this.baseRotation[0]) baseRotationMatrix.multiply(new Matrix4().makeRotationX(this.baseRotation[0]));
|
|
18451
|
+
if (0 !== this.baseRotation[1]) baseRotationMatrix.multiply(new Matrix4().makeRotationY(this.baseRotation[1]));
|
|
18452
|
+
if (0 !== this.baseRotation[2]) baseRotationMatrix.multiply(new Matrix4().makeRotationZ(this.baseRotation[2]));
|
|
18453
|
+
const headingRad = -heading * Math.PI / 180;
|
|
18454
|
+
const pitchRad = pitch * Math.PI / 180;
|
|
18455
|
+
const rollRad = roll * Math.PI / 180;
|
|
18456
|
+
const headingMatrix = new Matrix4().makeRotationZ(headingRad);
|
|
18457
|
+
const pitchMatrix = new Matrix4().makeRotationX(pitchRad);
|
|
18458
|
+
const rollMatrix = new Matrix4().makeRotationY(rollRad);
|
|
18459
|
+
const orientationMatrix = new Matrix4();
|
|
18460
|
+
orientationMatrix.multiply(rollMatrix).multiply(pitchMatrix).multiply(headingMatrix);
|
|
18461
|
+
const fullRotation = new Matrix4();
|
|
18462
|
+
fullRotation.multiply(orientationMatrix).multiply(baseRotationMatrix);
|
|
18463
|
+
fullTransform.multiply(fullRotation);
|
|
18464
|
+
this.modelTransform.matrix = fullTransform;
|
|
18465
|
+
this.modelTransform.rotateX = void 0;
|
|
18466
|
+
this.modelTransform.rotateY = void 0;
|
|
18467
|
+
this.modelTransform.rotateZ = void 0;
|
|
18264
18468
|
mapThree.updateRenderableObjectTransform(this.modelId, this.modelTransform);
|
|
18265
18469
|
}
|
|
18470
|
+
setRotation(rotation) {
|
|
18471
|
+
const mapThree = this.getMapThree();
|
|
18472
|
+
if (!mapThree || !this.model) return;
|
|
18473
|
+
this.modelTransform.rotateX = rotation[0];
|
|
18474
|
+
this.modelTransform.rotateY = rotation[1];
|
|
18475
|
+
this.modelTransform.rotateZ = rotation[2];
|
|
18476
|
+
mapThree.updateRenderableObjectTransform(this.modelId, this.modelTransform);
|
|
18477
|
+
}
|
|
18478
|
+
setOrientation(heading, pitch, roll) {
|
|
18479
|
+
this._buildFullTransformMatrix(heading, pitch, roll);
|
|
18480
|
+
}
|
|
18481
|
+
resetToBaseOrientation() {
|
|
18482
|
+
this.currentOrientation = {
|
|
18483
|
+
heading: 0,
|
|
18484
|
+
pitch: 0,
|
|
18485
|
+
roll: 0
|
|
18486
|
+
};
|
|
18487
|
+
this._applyBaseRotation();
|
|
18488
|
+
}
|
|
18489
|
+
getBaseRotation() {
|
|
18490
|
+
return [
|
|
18491
|
+
...this.baseRotation
|
|
18492
|
+
];
|
|
18493
|
+
}
|
|
18494
|
+
getOrientation() {
|
|
18495
|
+
return {
|
|
18496
|
+
...this.currentOrientation
|
|
18497
|
+
};
|
|
18498
|
+
}
|
|
18266
18499
|
enable() {
|
|
18267
18500
|
const mapThree = this.getMapThree();
|
|
18268
18501
|
if (mapThree) mapThree.setRenderableObjectVisible(this.modelId, true);
|
|
@@ -18271,7 +18504,39 @@ class ThreeManager extends manager_Manager {
|
|
|
18271
18504
|
const mapThree = this.getMapThree();
|
|
18272
18505
|
if (mapThree) mapThree.setRenderableObjectVisible(this.modelId, false);
|
|
18273
18506
|
}
|
|
18507
|
+
select() {
|
|
18508
|
+
if (!this.model || this.isSelected) return;
|
|
18509
|
+
this.boxHelper = new BoxHelper(this.model, 0xffff00);
|
|
18510
|
+
this.model.add(this.boxHelper);
|
|
18511
|
+
this.isSelected = true;
|
|
18512
|
+
this._updateBoxHelper();
|
|
18513
|
+
}
|
|
18514
|
+
deselect() {
|
|
18515
|
+
if (!this.isSelected || !this.boxHelper) return;
|
|
18516
|
+
if (this.model) this.model.remove(this.boxHelper);
|
|
18517
|
+
this.boxHelper = null;
|
|
18518
|
+
this.isSelected = false;
|
|
18519
|
+
}
|
|
18520
|
+
toggleSelect() {
|
|
18521
|
+
if (this.isSelected) this.deselect();
|
|
18522
|
+
else this.select();
|
|
18523
|
+
}
|
|
18524
|
+
setSelectionColor(color) {
|
|
18525
|
+
if (this.boxHelper) {
|
|
18526
|
+
const boxColor = 'string' == typeof color ? new Color(color) : color;
|
|
18527
|
+
const material = this.boxHelper.material;
|
|
18528
|
+
if (material) material.color.set(boxColor);
|
|
18529
|
+
}
|
|
18530
|
+
}
|
|
18531
|
+
getSelected() {
|
|
18532
|
+
return this.isSelected;
|
|
18533
|
+
}
|
|
18534
|
+
_updateBoxHelper() {
|
|
18535
|
+
if (!this.boxHelper || !this.model) return;
|
|
18536
|
+
this.boxHelper.update();
|
|
18537
|
+
}
|
|
18274
18538
|
dispose() {
|
|
18539
|
+
this.deselect();
|
|
18275
18540
|
const mapThree = this.getMapThree();
|
|
18276
18541
|
if (mapThree && this.modelId) mapThree.removeRenderableObject(this.modelId);
|
|
18277
18542
|
this.model = null;
|
|
@@ -19549,6 +19814,8 @@ class ClickStrategy extends PathCollectionStrategy {
|
|
|
19549
19814
|
onStopCollection() {
|
|
19550
19815
|
if (!this.map) return;
|
|
19551
19816
|
this.map.getCanvas().style.cursor = '';
|
|
19817
|
+
this.clearPoints();
|
|
19818
|
+
this.updateLayers();
|
|
19552
19819
|
}
|
|
19553
19820
|
handleClick = (e)=>{
|
|
19554
19821
|
if (!this.isActive) return void console.log('[ClickStrategy] Click ignored, not active');
|
|
@@ -19709,6 +19976,9 @@ class FreeStrategy extends PathCollectionStrategy {
|
|
|
19709
19976
|
if (!this.map) return;
|
|
19710
19977
|
this.map.getCanvas().style.cursor = '';
|
|
19711
19978
|
this.isDragging = false;
|
|
19979
|
+
this.clearPoints();
|
|
19980
|
+
this.lastPoint = null;
|
|
19981
|
+
this.updateLayer();
|
|
19712
19982
|
}
|
|
19713
19983
|
handleMouseDown = (e)=>{
|
|
19714
19984
|
if (!this.isActive || !this.map) return;
|
|
@@ -19937,6 +20207,9 @@ class PathTracker {
|
|
|
19937
20207
|
type: pathType,
|
|
19938
20208
|
segments: [],
|
|
19939
20209
|
style: {
|
|
20210
|
+
color: '#1890ff',
|
|
20211
|
+
width: 2,
|
|
20212
|
+
opacity: 0.8,
|
|
19940
20213
|
...this.options.defaultStyle
|
|
19941
20214
|
}
|
|
19942
20215
|
};
|
|
@@ -19995,10 +20268,12 @@ class PathTracker {
|
|
|
19995
20268
|
if (0 === this.currentPath.segments.length) {
|
|
19996
20269
|
this.currentPath = null;
|
|
19997
20270
|
this.isTracking = false;
|
|
20271
|
+
this.updateResultLayer();
|
|
19998
20272
|
}
|
|
19999
20273
|
} else {
|
|
20000
20274
|
this.currentPath = null;
|
|
20001
20275
|
this.isTracking = false;
|
|
20276
|
+
this.updateResultLayer();
|
|
20002
20277
|
}
|
|
20003
20278
|
this.callbacks.onCancel?.();
|
|
20004
20279
|
}
|
|
@@ -20052,6 +20327,7 @@ class PathTracker {
|
|
|
20052
20327
|
cancelTracking() {
|
|
20053
20328
|
this.stopTracking();
|
|
20054
20329
|
this.currentPath = null;
|
|
20330
|
+
this.updateResultLayer();
|
|
20055
20331
|
}
|
|
20056
20332
|
clearPaths() {
|
|
20057
20333
|
this.triggerOnClear();
|