qwc2
Version:
QGIS Web Client
12 lines • 5.61 kB
JavaScript
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
* Copyright 2025 Sourcepole AG
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/import{Box3,BufferGeometry,Mesh,Vector2,Vector3}from"three";import{MeshLine,MeshLineMaterial}from"three.meshline";import{GLTFLoader}from"three/addons/loaders/GLTFLoader";import{CSS2DObject}from"three/addons/renderers/CSS2DRenderer";import{v4 as uuidv4}from"uuid";import ConfigUtils from"../../../utils/ConfigUtils";export function createLabelObject(text,pos,sceneContext,zoffset){var yoffset=arguments.length>4&&arguments[4]!==undefined?arguments[4]:0;var labelEl=document.createElement("span");labelEl.className="map3d-object-label";labelEl.textContent=text;var labelObject=new CSS2DObject(labelEl);labelObject.position.set(pos.x,pos.y+yoffset,pos.z+zoffset);labelObject.updateMatrixWorld();// Leader line
var linegeom=new MeshLine;linegeom.setGeometry(new BufferGeometry().setFromPoints([new Vector3(0,-yoffset,-zoffset),new Vector3(0,0,0)]));var resolution=new Vector2(sceneContext.scene.view.width,sceneContext.scene.view.height);var linemat=new MeshLineMaterial({color:3770564,resolution:resolution,lineWidth:2,sizeAttenuation:0});var linemesh=new Mesh(linegeom,linemat);labelObject.add(linemesh);linemesh.updateMatrixWorld();labelObject.userData.sceneResizeCallback=function(_ref){var width=_ref.width,height=_ref.height;linemat.resolution.set(width,height)};sceneContext.scene.view.addEventListener("view-resized",labelObject.userData.sceneResizeCallback);return labelObject}export function updateObjectLabel(sceneObject,sceneContext){var labelObject=sceneObject.children.find(function(child){return child.isCSS2DObject});if(sceneObject.userData.label){if(!labelObject){var _sceneObject$userData;labelObject=createLabelObject(sceneObject.userData.label,new Vector3(0,0,0),sceneContext,(_sceneObject$userData=sceneObject.userData.labelOffset)!==null&&_sceneObject$userData!==void 0?_sceneObject$userData:50);sceneObject.add(labelObject);sceneObject.updateMatrixWorld();labelObject.userData.removeCallback=function(){var _labelObject$element$,_labelObject$element$2;// Explicitly remove label DOM element
(_labelObject$element$=labelObject.element.parentNode)===null||_labelObject$element$===void 0||(_labelObject$element$2=_labelObject$element$.removeChild)===null||_labelObject$element$2===void 0||_labelObject$element$2.call(_labelObject$element$,labelObject.element)};sceneObject.addEventListener("removed",labelObject.userData.removeCallback)}else{labelObject.element.textContent=sceneObject.userData.label}}else if(labelObject){sceneObject.removeEventListener("removed",labelObject.userData.removeCallback);sceneContext.scene.view.removeEventListener("view-resized",labelObject.userData.sceneResizeCallback);// Remove leaderline first, as the remove trigger of the CSS2DObject assumes children are CSS2DObjects as well
labelObject.children[0].removeFromParent();labelObject.removeFromParent()}}export function importGltf(dataOrUrl,name,sceneContext){var options=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{};var loader=new GLTFLoader;var processor=function processor(gltf){// GLTF is Y-UP, we need Z-UP
gltf.scene.rotation.x=Math.PI/2;gltf.scene.updateMatrixWorld(true);var objectId=uuidv4();options=_objectSpread({layertree:true,title:name},options);gltf.scene.traverse(function(c){if(c.geometry){c.castShadow=true;c.receiveShadow=true}updateObjectLabel(c,sceneContext)});// Center group on object
var bbox=new Box3().setFromObject(gltf.scene);var center=bbox.getCenter(new Vector3);var offset=new Vector3().subVectors(center,gltf.scene.position).applyQuaternion(gltf.scene.quaternion.clone().invert());gltf.scene.children.forEach(function(child){child.position.sub(offset)});gltf.scene.position.copy(center);gltf.scene.updateMatrixWorld(true);sceneContext.addSceneObject(objectId,gltf.scene,options)};if(typeof dataOrUrl==="string"){loader.load(dataOrUrl,processor,function(){},function(err){/* eslint-disable-next-line */console.warn(err)})}else{loader.parse(dataOrUrl,ConfigUtils.getAssetsPath(),processor,function(err){/* eslint-disable-next-line */console.warn(err)})}}