yskang

threejs-viewer-29

Apr 20th, 2022
932
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class SensorManager {
  2.     constructor(viewer) {
  3.         this.viewer = viewer;
  4.     }
  5.  
  6.     guid(format = 'xxxxxxxxxx') {
  7.         let d = new Date().getTime();
  8.         return format.replace(
  9.              /[xy]/g,
  10.              function (c) {
  11.                  let r = (d + Math.random() * 16) % 16 | 0;
  12.                  d = Math.floor(d / 16);
  13.                  return (c == 'x' ? r : (r & 0x7 | 0x8)).toString(16);
  14.              });
  15.     }
  16.  
  17.     getModifiedWorldBoundingBox(objectId) {
  18.         const mesh = this.viewer.scene.getObjectById(objectId);
  19.         if (!mesh.geometry.boundingBox)
  20.             mesh.geometry.computeBoundingBox();
  21.  
  22.         return mesh.geometry.boundingBox.clone().applyMatrix4(mesh.matrixWorld);
  23.     }
  24.  
  25.     async addSensorAsync(objectId) {
  26.          const data = { objectId, code: this.guid() };
  27.         //fetch POST sensors
  28.         this.drawSensorMarkup(data);
  29.     }
  30.  
  31.     async removeSensorAsync(objectId) {
  32.         //fetch DELETE sensors
  33.         this.removeSensorMarkup(objectId);
  34.     }
  35.  
  36.     async showAllMarkups() {
  37.         this.clearAllMarkups();
  38.        //fetch GET sensors
  39.         for (let sensor of sensors) {
  40.             this.drawSensorMarkup(sensor);
  41.         }
  42.     }
  43.  
  44.     removeSensorMarkup(objectId) {
  45.         const markup = document.querySelector(`label.markup[data-objectId="${objectId}"]`);
  46.         if (!markup) return;
  47.         this.viewer.container.removeChild(markup);
  48.     }
  49.  
  50.  
  51.     clearAllMarkups() {
  52.         const markups = document.querySelectorAll(`#${this.viewer.container.id} label.markup.update`);
  53.  
  54.         for (let markup of markups)
  55.             this.viewer.container.removeChild(markup);
  56.     }
  57.  
  58.     drawSensorMarkup(data) {
  59.         if (!data || !data.objectId) return;
  60.         const markup = document.createElement('label');
  61.         let guid = data.code || this.guid();
  62.         data.code = guid;
  63.         data.label = 'Nan';
  64.         console.log('Markup created:', data);
  65.  
  66.         markup.id = `sensor-markup-${guid}`;
  67.         markup.classList.add('markup', 'update');
  68.         markup.setAttribute('data-code', guid);
  69.         markup.setAttribute('data-dbId', data.dbId);
  70.         markup.setAttribute('data-objectId', data.objectId);
  71.         markup.style.display = 'block';
  72.         this.viewer.container.appendChild(markup);
  73.         const markupContent = document.createElement('span');      
  74.         markupContent.classList.add('temperatureBorder', 'temperatureOk', 'fas', 'fa-thermometer-empty');
  75.         markupContent.innerHTML = data.label;//'450°C';
  76.         markup.appendChild(markupContent);
  77.     }
  78.  
  79.  
  80.     calibrateSensorMakeups() {
  81.         const markups = document.querySelectorAll(`#${this.viewer.container.id} label.markup.update`);
  82.  
  83.         for (let markup of markups) {
  84.             const objectId = parseInt(markup.getAttribute('data-objectId'));
  85.             const bounds = this.getModifiedWorldBoundingBox(objectId);
  86.             const pos = new THREE.Vector3();
  87.             bounds.getCenter(pos);
  88.  
  89.            const markupPos = this.viewer.worldToClient(pos);
  90.  
  91.            markup.style.left = `${Math.floor(markupPos.x - markup.offsetWidth / 2)}px`;
  92.            markup.style.top = `${Math.floor(markupPos.y - markup.offsetHeight / 2)}px`;
  93.         }
  94.     }
  95. }
  96.  
Advertisement
Add Comment
Please, Sign In to add comment