@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 +2 -2
- package/src/helper/UpdateRoofModuleFieldRelations.js +1 -1
- package/src/helper/render/clear.js +17 -0
- package/src/helper/render/edge.js +0 -2
- package/src/helper/render/panel.js +55 -44
- package/src/helper/renderMixin.js +8 -0
- package/src/store/nodesEdgesCreation.js +1 -22
- package/src/store/three-d-module.js +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eturnity/eturnity_3d",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "7.
|
|
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.
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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 (
|
|
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(
|
|
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
|
|
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
|
|