@eturnity/eturnity_3d 7.24.2 → 7.30.0--EPDM-11320.1

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 (45) hide show
  1. package/package.json +7 -6
  2. package/src/App.vue +12 -12
  3. package/src/Overlay/AirTeamOverlay.js +15 -15
  4. package/src/Overlay/ImageOverlay.js +17 -14
  5. package/src/Overlay/Overlay.js +24 -14
  6. package/src/Overlay/OverlayFactory.js +1 -1
  7. package/src/assets/theme.js +3 -3
  8. package/src/components/ThreeCanvasViewer.vue +289 -280
  9. package/src/config.js +48 -48
  10. package/src/helper/UpdateRoofModuleFieldRelations.js +5 -5
  11. package/src/helper/UpdateRoofObstacleRelations.js +1 -1
  12. package/src/helper/cameraMixin.js +34 -34
  13. package/src/helper/customProvider.js +0 -1
  14. package/src/helper/initializeThree.js +2 -2
  15. package/src/helper/materialMixin.js +17 -17
  16. package/src/helper/projectedMaterial.js +28 -26
  17. package/src/helper/render/base.js +4 -4
  18. package/src/helper/render/clear.js +9 -8
  19. package/src/helper/render/edge.js +2 -2
  20. package/src/helper/render/geometryHandler.js +15 -15
  21. package/src/helper/render/imageOverlay.js +4 -4
  22. package/src/helper/render/index.js +2 -2
  23. package/src/helper/render/loader.js +4 -5
  24. package/src/helper/render/margin.js +5 -5
  25. package/src/helper/render/mergedGeometry.js +2 -2
  26. package/src/helper/render/moduleField.js +2 -2
  27. package/src/helper/render/node.js +2 -2
  28. package/src/helper/render/obstacle.js +3 -3
  29. package/src/helper/render/overlay.js +3 -3
  30. package/src/helper/render/panel.js +4 -4
  31. package/src/helper/render/projectionMaterial.js +2 -2
  32. package/src/helper/render/roof.js +6 -6
  33. package/src/helper/render/texture.js +3 -3
  34. package/src/helper/render/tile.js +80 -72
  35. package/src/helper/render/tileProjection.js +8 -8
  36. package/src/helper/renderMixin.js +61 -57
  37. package/src/helper/threeMixin.js +10 -8
  38. package/src/main.js +4 -4
  39. package/src/store/hydrateData.js +30 -30
  40. package/src/store/nodesEdgesCreation.js +9 -9
  41. package/src/store/store.js +2 -2
  42. package/src/store/three-d-module.js +8 -8
  43. package/src/utils/constants.js +1 -1
  44. package/src/utils/layers.js +31 -31
  45. package/src/utils/leaflet-config.service.js +13 -13
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@eturnity/eturnity_3d",
3
3
  "private": false,
4
- "version": "7.24.2",
4
+ "version": "7.30.0--EPDM-11320.1",
5
5
  "files": [
6
6
  "dist",
7
7
  "src"
@@ -15,7 +15,7 @@
15
15
  "prettier": "prettier --write \"**/*.{js,vue}\""
16
16
  },
17
17
  "dependencies": {
18
- "@eturnity/eturnity_maths": "7.24.1",
18
+ "@eturnity/eturnity_maths": "7.24.1-EPDM-11320.2",
19
19
  "@originjs/vite-plugin-commonjs": "1.0.3",
20
20
  "core-js": "2.6.12",
21
21
  "cors": "2.8.5",
@@ -27,7 +27,6 @@
27
27
  "lodash": "4.17.21",
28
28
  "svd-js": "1.1.1",
29
29
  "three": "0.149.0",
30
- "three-projected-material": "2.2.1",
31
30
  "tween": "0.9.0",
32
31
  "uuid": "9.0.0",
33
32
  "vite-plugin-require": "1.1.14",
@@ -37,12 +36,14 @@
37
36
  "devDependencies": {
38
37
  "@vitejs/plugin-vue": "2.0.1",
39
38
  "@vue/compiler-sfc": "3.3.4",
39
+ "@vue/eslint-config-standard": "8.0.1",
40
40
  "eslint": "8.0.1",
41
- "eslint-config-prettier": "6.15.0",
42
- "eslint-plugin-prettier": "3.4.1",
41
+ "eslint-config-prettier": "8.8.0",
42
+ "eslint-plugin-prettier": "4.2.1",
43
43
  "eslint-plugin-vue": "9.14.1",
44
44
  "html-webpack-plugin": "3.2.0",
45
- "prettier": "2.8.4",
45
+ "prettier": "^2.8.4",
46
+ "prettier-plugin-vue": "^1.1.6",
46
47
  "vite": "2.7.2",
47
48
  "vite-plugin-env-compatible": "^2.0.1",
48
49
  "webpack": "4.46.0",
package/src/App.vue CHANGED
@@ -8,17 +8,17 @@
8
8
  </template>
9
9
 
10
10
  <script>
11
- import { mapState } from 'vuex'
12
- import ThreeCanvas from './components/ThreeCanvasViewer.vue'
13
- export default {
14
- components: {
15
- ThreeCanvas
16
- },
17
- computed: {
18
- ...mapState({
19
- uuid: (state) => state.uuid,
20
- view_mode: (state) => state.view_mode
21
- })
11
+ import { mapState } from 'vuex'
12
+ import ThreeCanvas from './components/ThreeCanvasViewer.vue'
13
+ export default {
14
+ components: {
15
+ ThreeCanvas,
16
+ },
17
+ computed: {
18
+ ...mapState({
19
+ uuid: (state) => state.uuid,
20
+ view_mode: (state) => state.view_mode,
21
+ }),
22
+ },
22
23
  }
23
- }
24
24
  </script>
@@ -14,7 +14,7 @@ import {
14
14
  verticalProjectionOnPlane,
15
15
  vectorLength2D,
16
16
  deltaLatLngToDistance,
17
- rotateTransformation
17
+ rotateTransformation,
18
18
  } from '@eturnity/eturnity_maths'
19
19
  let Paper
20
20
  export default class AirTeamOverlay extends Overlay {
@@ -78,7 +78,7 @@ export default class AirTeamOverlay extends Overlay {
78
78
  'textured_facade',
79
79
  'textured_environment',
80
80
  'textured_roof',
81
- 'plain_roof_simplified'
81
+ 'plain_roof_simplified',
82
82
  ].includes(child.name)
83
83
  )
84
84
  model.children.forEach((child) => {
@@ -101,7 +101,7 @@ export default class AirTeamOverlay extends Overlay {
101
101
  obj.children.forEach((child) => {
102
102
  this.set3DObjectMaterialOpacity(child, this.opacity)
103
103
  })
104
- if (obj.material && obj.name!='plain_roof_simplified') {
104
+ if (obj.material && obj.name != 'plain_roof_simplified') {
105
105
  obj.visible = this.opacity > 0
106
106
  obj.material.opacity = this.opacity
107
107
  obj.material.transparent = this.opacity < 1
@@ -120,7 +120,7 @@ export default class AirTeamOverlay extends Overlay {
120
120
  const material = new THREE.MeshBasicMaterial({
121
121
  color: 0xffffff, // Grey color
122
122
  transparent: true,
123
- opacity // 50% transparent
123
+ opacity, // 50% transparent
124
124
  })
125
125
  // Create the mesh and add it to the scene
126
126
  waitingBall = new THREE.Mesh(geometry, material)
@@ -264,7 +264,7 @@ export default class AirTeamOverlay extends Overlay {
264
264
  const circle = new Paper.Path.Circle({
265
265
  center: toCanvasRef({ x: 0, y: 0 }),
266
266
  radius: 50,
267
- fillColor: '#ffffff80'
267
+ fillColor: '#ffffff80',
268
268
  })
269
269
  circle.radius = 70
270
270
  circle.itemData = 'circle'
@@ -301,7 +301,7 @@ export default class AirTeamOverlay extends Overlay {
301
301
  loadImageOverlay(url, corners) {
302
302
  let rasterImageOverlay = new Paper.Raster({
303
303
  source: url,
304
- crossOrigin: 'Anonymous'
304
+ crossOrigin: 'Anonymous',
305
305
  })
306
306
  rasterImageOverlay.visible = false
307
307
  rasterImageOverlay.onLoad = () => {
@@ -407,7 +407,7 @@ export default class AirTeamOverlay extends Overlay {
407
407
  this.positionOffset.z = 0
408
408
  this.emit('overlay-offset-position-error', { id: this.id })
409
409
  }
410
- this.geoLocalisation={x,y}
410
+ this.geoLocalisation = { x, y }
411
411
  }
412
412
  }
413
413
  initialiseVerticalProjectionImg() {
@@ -427,23 +427,23 @@ export default class AirTeamOverlay extends Overlay {
427
427
  {
428
428
  x: 1000 * (boxCenter.x + left),
429
429
  y: 1000 * (boxCenter.y + top),
430
- z: 0
430
+ z: 0,
431
431
  },
432
432
  {
433
433
  x: 1000 * (boxCenter.x + right),
434
434
  y: 1000 * (boxCenter.y + top),
435
- z: 0
435
+ z: 0,
436
436
  },
437
437
  {
438
438
  x: 1000 * (boxCenter.x + right),
439
439
  y: 1000 * (boxCenter.y + bottom),
440
- z: 0
440
+ z: 0,
441
441
  },
442
442
  {
443
443
  x: 1000 * (boxCenter.x + left),
444
444
  y: 1000 * (boxCenter.y + bottom),
445
- z: 0
446
- }
445
+ z: 0,
446
+ },
447
447
  ]
448
448
  this.corners = []
449
449
  initialCorners.forEach((corner, index) => {
@@ -471,7 +471,7 @@ export default class AirTeamOverlay extends Overlay {
471
471
 
472
472
  const renderer = new THREE.WebGLRenderer({
473
473
  canvas: canvas,
474
- alpha: true
474
+ alpha: true,
475
475
  })
476
476
  renderer.setSize(this.canvasWidth, this.canvasHeight)
477
477
  renderer.setClearColor(0x000000, 0) // Make background transparent
@@ -540,7 +540,7 @@ export default class AirTeamOverlay extends Overlay {
540
540
  for (let j = 0; j < stepNum; j++) {
541
541
  const testPoint = {
542
542
  x: xMin + (i * (xMax - xMin)) / stepNum,
543
- y: yMin + (j * (yMax - yMin)) / stepNum
543
+ y: yMin + (j * (yMax - yMin)) / stepNum,
544
544
  }
545
545
  if (isInsidePolygon(testPoint, outline)) {
546
546
  RayCaster.set(
@@ -599,7 +599,7 @@ export default class AirTeamOverlay extends Overlay {
599
599
  return {
600
600
  version: this.version,
601
601
  corners: this.corners,
602
- geoLocalisation: this.geoLocalisation
602
+ geoLocalisation: this.geoLocalisation,
603
603
  }
604
604
  }
605
605
  }
@@ -7,7 +7,7 @@ import {
7
7
  substractVector,
8
8
  getAngleInDegFromCanvasVector,
9
9
  normalize2DVector,
10
- vectorLength2D
10
+ vectorLength2D,
11
11
  } from '@eturnity/eturnity_maths'
12
12
  let Paper
13
13
  export default class ImageOverlay extends Overlay {
@@ -53,15 +53,16 @@ export default class ImageOverlay extends Overlay {
53
53
  }
54
54
  async initialiseImage(url) {
55
55
  const img = new Image()
56
+ img.crossOrigin = 'Anonymous'
56
57
  const _this = this
57
58
  const promise = new Promise((resolve, reject) => {
58
59
  img.onload = function () {
59
60
  _this.width = this.width
60
61
  _this.height = this.height
62
+ _this.img = this
61
63
  resolve(true)
62
64
  }
63
65
  img.onerror = reject
64
- this.img = img
65
66
  })
66
67
  img.src = url
67
68
  return promise
@@ -72,25 +73,25 @@ export default class ImageOverlay extends Overlay {
72
73
  const initialHeightMm = ratio * initialWidthMm
73
74
  const cornersTopLeft = {
74
75
  x: -initialWidthMm / 2,
75
- y: initialHeightMm / 2
76
+ y: initialHeightMm / 2,
76
77
  }
77
78
  const cornersTopRight = {
78
79
  x: initialWidthMm / 2,
79
- y: initialHeightMm / 2
80
+ y: initialHeightMm / 2,
80
81
  }
81
82
  const cornersBottomLeft = {
82
83
  x: -initialWidthMm / 2,
83
- y: -initialHeightMm / 2
84
+ y: -initialHeightMm / 2,
84
85
  }
85
86
  const cornersBottomRight = {
86
87
  x: initialWidthMm / 2,
87
- y: -initialHeightMm / 2
88
+ y: -initialHeightMm / 2,
88
89
  }
89
90
  const corners = [
90
91
  cornersTopLeft,
91
92
  cornersTopRight,
92
93
  cornersBottomRight,
93
- cornersBottomLeft
94
+ cornersBottomLeft,
94
95
  ]
95
96
  return corners
96
97
  }
@@ -166,10 +167,12 @@ export default class ImageOverlay extends Overlay {
166
167
  handles.visible = isRotationHandleVisible
167
168
  }
168
169
  loadImageOverlay(url, corners) {
169
- let rasterImageOverlay = new Paper.Raster({
170
- source: url,
171
- crossOrigin: 'Anonymous'
172
- })
170
+ let rasterImageOverlay = this.img
171
+ ? new Paper.Raster(this.img)
172
+ : new Paper.Raster({
173
+ source: url,
174
+ crossOrigin: 'Anonymous',
175
+ })
173
176
  rasterImageOverlay.onLoad = () => {
174
177
  this.applyRasterToCorners(rasterImageOverlay, corners)
175
178
  }
@@ -262,7 +265,7 @@ export default class ImageOverlay extends Overlay {
262
265
  addVector(
263
266
  addVector(corners[k], multiplyVector(squareSize / 2, u)),
264
267
  multiplyVector(squareSize / 2, v)
265
- )
268
+ ),
266
269
  ]
267
270
  let squareHandle
268
271
 
@@ -300,10 +303,10 @@ export default class ImageOverlay extends Overlay {
300
303
  scaleParams: {
301
304
  points: this.points,
302
305
  distance: this.distance,
303
- mmPerPx: this.mmPerPx
306
+ mmPerPx: this.mmPerPx,
304
307
  },
305
308
  corners: this.corners,
306
- version: this.version
309
+ version: this.version,
307
310
  }
308
311
  }
309
312
  }
@@ -6,14 +6,14 @@ import {
6
6
  rotateTransformation,
7
7
  substractVector,
8
8
  getDistanceBetweenPoints,
9
- getAngleInDegFromCanvasVector
9
+ getAngleInDegFromCanvasVector,
10
10
  } from '@eturnity/eturnity_maths'
11
11
  import {
12
12
  updateBufferRoofGeometry,
13
- getBufferRoofGeometry
13
+ getBufferRoofGeometry,
14
14
  } from '../helper/render/geometryHandler'
15
15
  import * as THREE from 'three'
16
- import ProjectedMaterial from 'three-projected-material'
16
+ import ProjectedMaterial from '../helper/projectedMaterial'
17
17
  export default class Overlay extends Item {
18
18
  constructor(overlay, emit) {
19
19
  super(emit)
@@ -30,12 +30,12 @@ export default class Overlay extends Item {
30
30
  { x: 10000, y: 7000 },
31
31
  { x: 10000, y: -7000 },
32
32
  { x: -10000, y: -7000 },
33
- { x: -10000, y: 7000 }
33
+ { x: -10000, y: 7000 },
34
34
  ]
35
35
  this.positionOffset = overlay.settings.positionOffset || {
36
36
  x: 0,
37
37
  y: 0,
38
- z: 0
38
+ z: 0,
39
39
  }
40
40
  this.angleOffset = overlay.settings.angleOffset || 0
41
41
  this.imageUrl = null
@@ -148,14 +148,15 @@ export default class Overlay extends Item {
148
148
  resolve(this.imageOverlayProjectionMaterial)
149
149
  return
150
150
  }
151
- const loader = new THREE.TextureLoader()
152
- loader.load(url, (texture) => {
151
+
152
+ const callback = (texture) => {
153
+ texture.needsUpdate = true
153
154
  this.setImageOverlayCameraPosition()
154
155
  let imageOverlayProjectionMaterial = new ProjectedMaterial({
155
156
  camera: this.overlayProjectionCamera,
156
157
  texture,
157
158
  transparent: true,
158
- side: THREE.DoubleSide
159
+ side: THREE.DoubleSide,
159
160
  })
160
161
 
161
162
  imageOverlayProjectionMaterial.userData = {}
@@ -166,7 +167,14 @@ export default class Overlay extends Item {
166
167
  imageOverlayProjectionMaterial.opacity = this.opacity
167
168
  this.imageOverlayProjectionMaterial = imageOverlayProjectionMaterial
168
169
  resolve(imageOverlayProjectionMaterial)
169
- })
170
+ }
171
+
172
+ if (this.img) {
173
+ callback(new THREE.Texture(this.img))
174
+ } else {
175
+ const loader = new THREE.TextureLoader()
176
+ loader.load(url, callback)
177
+ }
170
178
  })
171
179
  }
172
180
  getBackgroundGeometry() {
@@ -194,7 +202,7 @@ export default class Overlay extends Item {
194
202
  const boxSize = {
195
203
  x: getDistanceBetweenPoints(this.corners[0], this.corners[1]) / 1000,
196
204
  y: getDistanceBetweenPoints(this.corners[1], this.corners[2]) / 1000,
197
- z: 0
205
+ z: 0,
198
206
  }
199
207
  if (
200
208
  this.overlayProjectionCamera.left != -boxSize.x / 2 ||
@@ -216,17 +224,19 @@ export default class Overlay extends Item {
216
224
  cameraChanged = true
217
225
  }
218
226
  this.overlayProjectionCamera.rotation.set(0, 0, (zAngle * Math.PI) / 180)
227
+ const CAMERA_HEIGHT_OFFSET = 50
219
228
  if (
220
229
  this.overlayProjectionCamera.position.x != boxCenter.x / 1000 ||
221
230
  this.overlayProjectionCamera.position.y != boxCenter.y / 1000 ||
222
- this.overlayProjectionCamera.position.z != boxCenter.z / 1000 + 50
231
+ this.overlayProjectionCamera.position.z !=
232
+ boxCenter.z / 1000 + CAMERA_HEIGHT_OFFSET
223
233
  ) {
224
234
  cameraChanged = true
225
235
  }
226
236
  this.overlayProjectionCamera.position.set(
227
237
  boxCenter.x / 1000,
228
238
  boxCenter.y / 1000,
229
- boxCenter.z / 1000 + 50
239
+ boxCenter.z / 1000 + CAMERA_HEIGHT_OFFSET
230
240
  )
231
241
  this.overlayProjectionCamera.updateProjectionMatrix()
232
242
  return cameraChanged
@@ -238,11 +248,11 @@ export default class Overlay extends Item {
238
248
  ...this.settings,
239
249
  positionOffset: this.positionOffset,
240
250
  angleOffset: this.angleOffset,
241
- ...this.serializeSettings()
251
+ ...this.serializeSettings(),
242
252
  },
243
253
  type: this.type,
244
254
  is_active: this.isActive,
245
- resources: this.resources
255
+ resources: this.resources,
246
256
  }
247
257
  return serializedOverlay
248
258
  }
@@ -13,7 +13,7 @@ const OverlayFactory = {
13
13
  overlayInstance = new Overlay(serializedOverlay, emit)
14
14
  }
15
15
  return overlayInstance
16
- }
16
+ },
17
17
  }
18
18
 
19
19
  export default OverlayFactory
@@ -27,7 +27,7 @@ const theme = {
27
27
  transparentBlack1: '#263238e6',
28
28
  transparentBlue1: '#20a4cae6',
29
29
  blueElectric: '#66dffa',
30
- eturnityGrey: '#263238'
30
+ eturnityGrey: '#263238',
31
31
  },
32
32
 
33
33
  screen: {
@@ -35,9 +35,9 @@ const theme = {
35
35
  mobile: '425px',
36
36
  mobileLarge: '530px',
37
37
  tablet: '768px',
38
- tabletLarge: '950px'
38
+ tabletLarge: '950px',
39
39
  },
40
- borderRadius: '4px'
40
+ borderRadius: '4px',
41
41
  }
42
42
 
43
43
  export default theme