@eturnity/eturnity_3d 7.8.0-splitLine.0 → 7.10.0-EPDM-10188.0

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@eturnity/eturnity_3d",
3
3
  "private": false,
4
- "version": "7.8.0-splitLine.0",
4
+ "version": "7.10.0-EPDM-10188.0",
5
5
  "main": "dist/main.js",
6
6
  "scripts": {
7
7
  "dev": "vue-cli-service serve --skip-plugins @vue/cli-plugin-eslint",
@@ -10,7 +10,7 @@
10
10
  "prettier": "prettier --write \"**/*.{js,vue}\""
11
11
  },
12
12
  "dependencies": {
13
- "@eturnity/eturnity_maths": "7.4.0-EPDM-7379.4",
13
+ "@eturnity/eturnity_maths": "7.10.0",
14
14
  "core-js": "^2.6.12",
15
15
  "cors": "^2.8.5",
16
16
  "earcut": "^2.2.4",
@@ -35,7 +35,7 @@ export function UpdateRoofModuleFieldRelations(state) {
35
35
  const intersection = intersectOutlines(moduleField.outline, roof.outline)
36
36
  if (intersection.length == 0) return false
37
37
  const intersectionArea = calculateArea(intersection[0])
38
- return intersectionArea > 100 && moduleField.area <= roof.area
38
+ return intersectionArea > 100 && moduleField.area <= roof.area + 0.1
39
39
  })
40
40
  //roofs on roof can lead to multiple roof under a point. moduleField is on the smallest
41
41
  let smallestRoof = null
@@ -25,6 +25,23 @@ export default {
25
25
  if (obj.material.dispose) obj.material.dispose()
26
26
  }
27
27
  },
28
+ clearPanelsFromChangingRoofs(roofIds) {
29
+ const roofs = this.polygons.filter((polygon) =>
30
+ roofIds.includes(polygon.id)
31
+ )
32
+ roofs.forEach((roof) =>
33
+ roof.moduleFields.forEach((mf) =>
34
+ mf.panels.forEach((panel) => {
35
+ let meshTop = this.meshes.panelsMeshes[panel.id + '_top']
36
+ let meshSide = this.meshes.panelsMeshes[panel.id + '_side']
37
+ if (meshTop || meshSide) {
38
+ this.clearMeshFromScene(meshTop, this.scene)
39
+ this.clearMeshFromScene(meshSide, this.scene)
40
+ }
41
+ })
42
+ )
43
+ )
44
+ },
28
45
  clearMeshFromScene(mesh, scene) {
29
46
  if (!mesh || !scene) {
30
47
  return
@@ -87,8 +87,6 @@ export default {
87
87
  cylinder.userData.edgeId = edge.id
88
88
  cylinder.userData.type = 'edgeMeshes'
89
89
  cylinder.userData.layer = edge.layer
90
- cylinder.frustumCulled = false
91
- cylinder.renderOrder = 10
92
90
 
93
91
  cylinder.frustumCulled = false
94
92
  cylinder.renderOrder = 10
@@ -73,6 +73,7 @@ export default {
73
73
  //2. create or update individual meshes
74
74
  // 2a. Fill in panelTopGeometries & panelSideGeometries
75
75
  if (!panelPolygon.visible) {
76
+ console.log('panelPolygon hidden', panelPolygon)
76
77
  return
77
78
  }
78
79
  if (panelPolygon.moduleField.data.number_of_panels_override) {
@@ -95,7 +96,7 @@ export default {
95
96
 
96
97
  materialId = 'default_' + moduleTextureId
97
98
  material = this.material.panel[materialId]
98
-
99
+
99
100
  if (panelPolygon.moduleField.data) {
100
101
  if (
101
102
  this.material.panel[
@@ -115,67 +116,74 @@ export default {
115
116
  material.opacity = this.panelOpacity
116
117
  }
117
118
  //2. create or update individual meshes
118
- if (
119
- !this.meshes.panelsMeshes[panelPolygon.id + '_top'] ||
120
- !this.meshes.panelsMeshes[panelPolygon.id + '_side']
121
- ) {
122
- //mesh creation
123
- const geometry = getBufferPanelGeometry(panelPolygon)
124
- const geometrySide = getBufferPanelSideGeometry(panelPolygon)
125
- //2a.Fill in panelTopGeometries & panelSideGeometries
119
+ //update existing geometry
120
+ if (this.meshes.panelsMeshes[panelPolygon.id + '_top']) {
121
+ const topMesh = this.meshes.panelsMeshes[panelPolygon.id + '_top']
122
+ if (panelPolygon.version > topMesh.userData.version) {
123
+ let topGeometry = updateBufferPanelGeometry(
124
+ panelPolygon,
125
+ topMesh.geometry
126
+ )
127
+ topMesh.geometry = topGeometry
128
+ }
129
+
130
+ if (!panelTopGeometries[materialId]) {
131
+ panelTopGeometries[materialId] = []
132
+ }
133
+ panelTopGeometries[materialId].push(topMesh.geometry)
134
+ topMesh.material = material
135
+ }
136
+ if (this.meshes.panelsMeshes[panelPolygon.id + '_side']) {
137
+ const sideMesh = this.meshes.panelsMeshes[panelPolygon.id + '_side']
138
+ if (panelPolygon.version > sideMesh.userData.version) {
139
+ let sideGeometry = updateBufferPanelSideGeometry(
140
+ panelPolygon,
141
+ sideMesh.geometry
142
+ )
143
+ sideMesh.geometry = sideGeometry
144
+ }
145
+ if (panelPolygon.layer != 'user_deactivated_panel') {
146
+ panelSideGeometries.push(sideMesh.geometry)
147
+ }
148
+ }
149
+ //2a.Fill in panelTopGeometries & panelSideGeometries
150
+ //mesh creation
151
+ if (!this.meshes.panelsMeshes[panelPolygon.id + '_top']) {
126
152
  //gather all geometry with similar material together to merge them for faster rendering
153
+ const geometry = getBufferPanelGeometry(panelPolygon)
127
154
  if (!panelTopGeometries[materialId]) {
128
155
  panelTopGeometries[materialId] = []
129
156
  }
130
157
  panelTopGeometries[materialId].push(geometry)
158
+ if (geometry) {
159
+ const mesh = new THREE.Mesh(geometry, this.material.hidden)
160
+ mesh.userData.version = panelPolygon.version
161
+ mesh.userData.type = 'panelsMeshes'
162
+ mesh.userData.meshId = panelPolygon.id + '_top'
163
+ mesh.userData.polygonId = panelPolygon.id
164
+ this.scene.add(mesh)
165
+ mesh.matrixAutoUpdate = false
166
+ this.meshes.panelsMeshes[panelPolygon.id + '_top'] = mesh
167
+ }
168
+ }
169
+ if (!this.meshes.panelsMeshes[panelPolygon.id + 'side']) {
170
+ //sidemesh creation
171
+ const geometrySide = getBufferPanelSideGeometry(panelPolygon)
131
172
  if (panelPolygon.layer != 'user_deactivated_panel') {
132
173
  panelSideGeometries.push(geometrySide)
133
174
  }
134
- if (geometry && geometrySide) {
135
- const mesh = new THREE.Mesh(geometry, this.material.hidden)
175
+ if (geometrySide) {
136
176
  const meshSide = new THREE.Mesh(
137
177
  geometrySide,
138
178
  this.material.panelSide
139
179
  )
140
- mesh.userData.version = panelPolygon.version
141
- mesh.userData.type = 'panelsMeshes'
142
- mesh.userData.meshId = panelPolygon.id + '_top'
143
- mesh.userData.polygonId = panelPolygon.id
144
- this.scene.add(mesh)
145
180
  meshSide.userData.version = panelPolygon.version
146
181
  meshSide.userData.type = 'panelsMeshes'
147
182
  meshSide.userData.meshId = panelPolygon.id + '_side'
148
183
  meshSide.userData.polygonId = panelPolygon.id
149
- mesh.matrixAutoUpdate = false
150
184
  meshSide.matrixAutoUpdate = false
151
- this.meshes.panelsMeshes[panelPolygon.id + '_top'] = mesh
152
185
  this.meshes.panelsMeshes[panelPolygon.id + '_side'] = meshSide
153
186
  }
154
- } else {
155
- //update existing geometry
156
- const topMesh = this.meshes.panelsMeshes[panelPolygon.id + '_top']
157
- const sideMesh = this.meshes.panelsMeshes[panelPolygon.id + '_side']
158
- if (panelPolygon.version > topMesh.userData.version) {
159
- let topGeometry = updateBufferPanelGeometry(
160
- panelPolygon,
161
- topMesh.geometry
162
- )
163
- let sideGeometry = updateBufferPanelSideGeometry(
164
- panelPolygon,
165
- sideMesh.geometry
166
- )
167
-
168
- topMesh.geometry = topGeometry
169
- sideMesh.geometry = sideGeometry
170
- }
171
- if (panelPolygon.layer != 'user_deactivated_panel') {
172
- panelSideGeometries.push(sideMesh.geometry)
173
- }
174
- if (!panelTopGeometries[materialId]) {
175
- panelTopGeometries[materialId] = []
176
- }
177
- panelTopGeometries[materialId].push(topMesh.geometry)
178
- topMesh.material = material
179
187
  }
180
188
  })
181
189
 
@@ -186,7 +194,10 @@ export default {
186
194
  )
187
195
  //if no panels, no materialIds,
188
196
  for (let materialId of materialIdsToRemove) {
189
- this.clearMeshFromScene(this.mergedPanelTopMeshes[materialId], this.scene)
197
+ this.clearMeshFromScene(
198
+ this.mergedPanelTopMeshes[materialId],
199
+ this.scene
200
+ )
190
201
  delete this.mergedPanelTopMeshes[materialId]
191
202
  }
192
203
  this.mergedPanelSideMesh = this.updateOrCreateMergedMesh(
@@ -296,6 +296,7 @@ export default {
296
296
  method: this.renderRoofsMargin,
297
297
  arg: []
298
298
  })
299
+ break
299
300
  case 'selectedModuleFieldChange':
300
301
  methodList.push({
301
302
  name: 'renderEdges',
@@ -379,6 +380,13 @@ export default {
379
380
  arg: []
380
381
  })
381
382
  break
383
+ case 'clearPanelFromChangingRoofs':
384
+ methodList.push({
385
+ name: 'clearPanelsFromChangingRoofs',
386
+ method: this.clearPanelsFromChangingRoofs,
387
+ arg: [params.roofIds]
388
+ })
389
+ break
382
390
  case 'selectedPanelChange':
383
391
  methodList.push({
384
392
  name: 'renderModuleFields',
@@ -119,7 +119,7 @@ export function generateNodes3D(polygons) {
119
119
  return nodes3D
120
120
  }
121
121
 
122
- export function generateEdges2D(polygons, splitEdgesIds = []) {
122
+ export function generateEdges2D(polygons) {
123
123
  let edges2D = []
124
124
  polygons
125
125
  .filter((poly) =>
@@ -162,27 +162,6 @@ export function generateEdges2D(polygons, splitEdgesIds = []) {
162
162
  edge2D.id += '_' + polygon.id + '_' + i
163
163
  })
164
164
  })
165
- edges2D.forEach((edge2D) => {
166
- edge2D.isSplit = splitEdgesIds.includes(edge2D.id)
167
- })
168
- edges2D.forEach((edge2D) => {
169
- const isNotSplit = edge2D.belongsTo.every((item, index, array) => {
170
- const outline0 = array[0].polygon.outline
171
- const outline1 = item.polygon.outline
172
- const point0 = outline0[array[0].index]
173
- const nextPoint0 = outline0[(array[0].index + 1) % outline0.length]
174
- const point1 = outline1[item.index]
175
- const nextPoint1 = outline1[(item.index + 1) % outline1.length]
176
- return isAlmostSameSegment3D(
177
- [point0, nextPoint0],
178
- [point1, nextPoint1],
179
- mmTolerance
180
- )
181
- })
182
- if (!isNotSplit && edge2D.belongsTo.length == 2) {
183
- edge2D.isSplit = true
184
- }
185
- })
186
165
  return edges2D
187
166
  }
188
167
 
@@ -8,7 +8,7 @@ import { hydrateData } from './hydrateData.js'
8
8
 
9
9
  const init_state = {
10
10
  isLoading: false,
11
-
11
+
12
12
  polygons: [],
13
13
  nodes: [],
14
14
  edges: [],