@eturnity/eturnity_3d 7.33.0 → 7.33.1-EPDM-10923.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.33.0",
|
|
4
|
+
"version": "7.33.1-EPDM-10923.0",
|
|
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.32.0",
|
|
18
|
+
"@eturnity/eturnity_maths": "7.32.0-EPDM-10923.1",
|
|
19
19
|
"@originjs/vite-plugin-commonjs": "1.0.3",
|
|
20
20
|
"core-js": "2.6.12",
|
|
21
21
|
"cors": "2.8.5",
|
|
@@ -159,7 +159,6 @@ export default {
|
|
|
159
159
|
method: this.renderEdges,
|
|
160
160
|
arg: [],
|
|
161
161
|
})
|
|
162
|
-
break
|
|
163
162
|
case 'marginIsSameChange': //params.polygon
|
|
164
163
|
case 'marginDifferentChange': //params.polygon,index
|
|
165
164
|
case 'marginSameChange': //params.polygon
|
|
@@ -177,7 +176,6 @@ export default {
|
|
|
177
176
|
method: this.renderOverlays,
|
|
178
177
|
arg: [],
|
|
179
178
|
})
|
|
180
|
-
break
|
|
181
179
|
case 'removeNodes': //params.nodes
|
|
182
180
|
case 'removeEdges': //params.edges
|
|
183
181
|
case 'translate': //params.edges
|
|
@@ -302,7 +300,6 @@ export default {
|
|
|
302
300
|
method: this.renderBuilding,
|
|
303
301
|
arg: [],
|
|
304
302
|
})
|
|
305
|
-
break
|
|
306
303
|
case 'selectedRoofChange':
|
|
307
304
|
case 'selectedObstacleChange':
|
|
308
305
|
methodList.push({
|
|
@@ -315,7 +312,6 @@ export default {
|
|
|
315
312
|
method: this.renderRoofsMargin,
|
|
316
313
|
arg: [],
|
|
317
314
|
})
|
|
318
|
-
break
|
|
319
315
|
case 'selectedModuleFieldChange':
|
|
320
316
|
methodList.push({
|
|
321
317
|
name: 'renderEdges',
|
package/src/store/hydrateData.js
CHANGED
|
@@ -24,9 +24,9 @@ function sanitizedOutline(outline) {
|
|
|
24
24
|
}, [])
|
|
25
25
|
}
|
|
26
26
|
export async function hydratePolygons({
|
|
27
|
-
roofsResponse,
|
|
28
|
-
obstaclesResponse,
|
|
29
|
-
moduleFieldsResponse
|
|
27
|
+
roofsResponse = [],
|
|
28
|
+
obstaclesResponse = [],
|
|
29
|
+
moduleFieldsResponse = []
|
|
30
30
|
}) {
|
|
31
31
|
//removing empty roof,obstacle and modulefield generated by BE on variant creation
|
|
32
32
|
roofsResponse = roofsResponse.reduce((acc, cur) => {
|
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
import { Point, Line } from '@eturnity/eturnity_maths'
|
|
2
|
-
import { mmTolerance, mmTolerance3dNode } from '../config'
|
|
3
|
-
import {
|
|
4
|
-
isAlmostSamePoint3D,
|
|
5
|
-
isAlmostSameSegment2D,
|
|
6
|
-
isAlmostSameSegment3D,
|
|
7
|
-
isAlmostSamePoint2D,
|
|
8
|
-
verticalProjectionOnPlane,
|
|
9
|
-
} from '@eturnity/eturnity_maths'
|
|
10
|
-
|
|
11
|
-
export function generateNodes2D(polygons) {
|
|
12
|
-
let nodes2D = []
|
|
13
|
-
polygons
|
|
14
|
-
.filter((poly) =>
|
|
15
|
-
[
|
|
16
|
-
'roof',
|
|
17
|
-
'obstacle',
|
|
18
|
-
'tmpModuleField',
|
|
19
|
-
'moduleField',
|
|
20
|
-
'construction',
|
|
21
|
-
].includes(poly.layer)
|
|
22
|
-
)
|
|
23
|
-
.forEach((polygon) => {
|
|
24
|
-
const outline = polygon.outline
|
|
25
|
-
outline.forEach((point, i) => {
|
|
26
|
-
//check if nodes2D already exist
|
|
27
|
-
let node2D = nodes2D.find(
|
|
28
|
-
(node) =>
|
|
29
|
-
isAlmostSamePoint2D(node, point, mmTolerance) &&
|
|
30
|
-
node.layer == polygon.layer
|
|
31
|
-
)
|
|
32
|
-
if (!node2D) {
|
|
33
|
-
node2D = new Point(point.x, point.y, point.z, polygon.layer)
|
|
34
|
-
node2D.belongsTo = []
|
|
35
|
-
node2D.id = 'node2D'
|
|
36
|
-
node2D.itemType = 'node2D'
|
|
37
|
-
node2D.layer = polygon.layer
|
|
38
|
-
node2D.masterHandle = {
|
|
39
|
-
id: node2D.id,
|
|
40
|
-
itemType: 'masterHandle',
|
|
41
|
-
open: null,
|
|
42
|
-
selected: null,
|
|
43
|
-
}
|
|
44
|
-
nodes2D.push(node2D)
|
|
45
|
-
}
|
|
46
|
-
node2D.belongsTo.push({
|
|
47
|
-
polygonId: polygon.id,
|
|
48
|
-
index: i,
|
|
49
|
-
polygon,
|
|
50
|
-
})
|
|
51
|
-
node2D.id += '_' + polygon.id + '_' + i
|
|
52
|
-
})
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
//all nodes has been created. now lets update open/selected field
|
|
56
|
-
nodes2D.forEach((node2D) => {
|
|
57
|
-
if (node2D.masterHandle) {
|
|
58
|
-
node2D.masterHandle.open = node2D.belongsTo.some(
|
|
59
|
-
(item) => item.index == null || item.polygon.outline[item.index].open
|
|
60
|
-
)
|
|
61
|
-
node2D.masterHandle.selected = node2D.belongsTo.every(
|
|
62
|
-
(item) =>
|
|
63
|
-
item.index == null || item.polygon.outline[item.index].selected
|
|
64
|
-
)
|
|
65
|
-
node2D.masterHandle.locked = node2D.belongsTo.every(
|
|
66
|
-
(item) => item.index == null || item.polygon.outline[item.index].locked
|
|
67
|
-
)
|
|
68
|
-
}
|
|
69
|
-
})
|
|
70
|
-
return nodes2D
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export function generateNodes3D(polygons) {
|
|
74
|
-
let nodes3D = []
|
|
75
|
-
polygons
|
|
76
|
-
.filter((poly) =>
|
|
77
|
-
['roof', 'obstacle', 'tmpModuleField', 'moduleField'].includes(poly.layer)
|
|
78
|
-
)
|
|
79
|
-
.forEach((polygon) => {
|
|
80
|
-
const outline = polygon.outline
|
|
81
|
-
outline.forEach((point, i) => {
|
|
82
|
-
//check if nodes2D already exist
|
|
83
|
-
let node3D = nodes3D.find((node) =>
|
|
84
|
-
isAlmostSamePoint3D(node, point, mmTolerance3dNode)
|
|
85
|
-
)
|
|
86
|
-
if (!node3D) {
|
|
87
|
-
node3D = new Point(point.x, point.y, point.z, polygon.layer)
|
|
88
|
-
node3D.belongsTo = []
|
|
89
|
-
node3D.id = 'node3D'
|
|
90
|
-
node3D.itemType = 'node3D'
|
|
91
|
-
node3D.layer = polygon.layer
|
|
92
|
-
node3D.masterHandle = {
|
|
93
|
-
id: node3D.id,
|
|
94
|
-
itemType: 'masterHandle',
|
|
95
|
-
open: null,
|
|
96
|
-
selected: null,
|
|
97
|
-
}
|
|
98
|
-
nodes3D.push(node3D)
|
|
99
|
-
}
|
|
100
|
-
node3D.belongsTo.push({
|
|
101
|
-
polygonId: polygon.id,
|
|
102
|
-
index: i,
|
|
103
|
-
polygon,
|
|
104
|
-
})
|
|
105
|
-
node3D.id += '_' + polygon.id + '_' + i
|
|
106
|
-
})
|
|
107
|
-
})
|
|
108
|
-
//all nodes has been created. now lets update open/selected field
|
|
109
|
-
nodes3D.forEach((node3D) => {
|
|
110
|
-
if (node3D.masterHandle) {
|
|
111
|
-
node3D.masterHandle.open = node3D.belongsTo.some(
|
|
112
|
-
(item) => item.polygon.outline[item.index].open
|
|
113
|
-
)
|
|
114
|
-
node3D.masterHandle.selected = node3D.belongsTo.every(
|
|
115
|
-
(item) => item.polygon.outline[item.index].selected
|
|
116
|
-
)
|
|
117
|
-
}
|
|
118
|
-
})
|
|
119
|
-
return nodes3D
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export function generateEdges2D(polygons, splitEdgesIds = []) {
|
|
123
|
-
let edges2D = []
|
|
124
|
-
polygons
|
|
125
|
-
.filter((poly) =>
|
|
126
|
-
['roof', 'obstacle', 'moduleField', 'construction'].includes(poly.layer)
|
|
127
|
-
)
|
|
128
|
-
.forEach((polygon) => {
|
|
129
|
-
const outline = polygon.outline
|
|
130
|
-
outline.forEach((point, i) => {
|
|
131
|
-
const isLastPointOfPolygon = i == outline.length - 1
|
|
132
|
-
if (!polygon.isClosed && isLastPointOfPolygon) {
|
|
133
|
-
return
|
|
134
|
-
}
|
|
135
|
-
//check if edge2D already exist
|
|
136
|
-
const nextPoint = outline[(i + 1) % outline.length]
|
|
137
|
-
let edge2D = edges2D.find((edge) => {
|
|
138
|
-
return (
|
|
139
|
-
isAlmostSameSegment2D(
|
|
140
|
-
[point, nextPoint],
|
|
141
|
-
edge.outline,
|
|
142
|
-
mmTolerance
|
|
143
|
-
) && edge.layer == polygon.layer
|
|
144
|
-
)
|
|
145
|
-
})
|
|
146
|
-
if (!edge2D) {
|
|
147
|
-
//create an edge at this position
|
|
148
|
-
edge2D = new Line(point, nextPoint, polygon.layer)
|
|
149
|
-
edge2D.id = 'edge2D'
|
|
150
|
-
edge2D.belongsTo = []
|
|
151
|
-
edge2D.layer = polygon.layer
|
|
152
|
-
edge2D.selected = false
|
|
153
|
-
edge2D.itemType = 'edge2D'
|
|
154
|
-
edges2D.push(edge2D)
|
|
155
|
-
}
|
|
156
|
-
//add BelongToPolygon
|
|
157
|
-
edge2D.belongsTo.push({
|
|
158
|
-
polygonId: polygon.id,
|
|
159
|
-
index: i,
|
|
160
|
-
polygon,
|
|
161
|
-
})
|
|
162
|
-
if (polygon.roofs && polygon.roofs.length > 0) {
|
|
163
|
-
polygon.roofs.forEach((supportRoof) => {
|
|
164
|
-
edge2D.belongsTo.push({
|
|
165
|
-
polygonId: supportRoof.id,
|
|
166
|
-
index: null,
|
|
167
|
-
polygon: supportRoof,
|
|
168
|
-
})
|
|
169
|
-
})
|
|
170
|
-
}
|
|
171
|
-
edge2D.id += '_' + polygon.id + '_' + i
|
|
172
|
-
})
|
|
173
|
-
})
|
|
174
|
-
edges2D.forEach((edge2D) => {
|
|
175
|
-
edge2D.isSplit = splitEdgesIds.includes(edge2D.id)
|
|
176
|
-
if (edge2D.belongsTo.length > 2) {
|
|
177
|
-
edge2D.belongsTo = edge2D.belongsTo.filter((i) => i.index !== null)
|
|
178
|
-
}
|
|
179
|
-
})
|
|
180
|
-
edges2D.forEach((edge2D) => {
|
|
181
|
-
const isNotSplit = edge2D.belongsTo.every((item, index, array) => {
|
|
182
|
-
if (index == 0) {
|
|
183
|
-
return true
|
|
184
|
-
}
|
|
185
|
-
const outline0 = array[0].polygon.outline
|
|
186
|
-
const outline1 = item.polygon.outline
|
|
187
|
-
let point0, point1, nextPoint0, nextPoint1
|
|
188
|
-
let pointNull = []
|
|
189
|
-
if (array[0].index !== null) {
|
|
190
|
-
point0 = outline0[array[0].index]
|
|
191
|
-
nextPoint0 = outline0[(array[0].index + 1) % outline0.length]
|
|
192
|
-
} else {
|
|
193
|
-
pointNull.push(0)
|
|
194
|
-
point0 = verticalProjectionOnPlane(
|
|
195
|
-
outline1[item.index],
|
|
196
|
-
array[0].polygon.normalVector,
|
|
197
|
-
array[0].polygon.flatOutline[0]
|
|
198
|
-
)
|
|
199
|
-
nextPoint0 = verticalProjectionOnPlane(
|
|
200
|
-
outline1[(item.index + 1) % outline1.length],
|
|
201
|
-
array[0].polygon.normalVector,
|
|
202
|
-
array[0].polygon.flatOutline[0]
|
|
203
|
-
)
|
|
204
|
-
}
|
|
205
|
-
if (item.index !== null) {
|
|
206
|
-
point1 = outline1[item.index]
|
|
207
|
-
nextPoint1 = outline1[(item.index + 1) % outline1.length]
|
|
208
|
-
} else {
|
|
209
|
-
pointNull.push(1)
|
|
210
|
-
point1 = verticalProjectionOnPlane(
|
|
211
|
-
outline0[array[0].index],
|
|
212
|
-
item.polygon.normalVector,
|
|
213
|
-
item.polygon.flatOutline[0]
|
|
214
|
-
)
|
|
215
|
-
nextPoint1 = verticalProjectionOnPlane(
|
|
216
|
-
outline0[(array[0].index + 1) % outline0.length],
|
|
217
|
-
item.polygon.normalVector,
|
|
218
|
-
item.polygon.flatOutline[0]
|
|
219
|
-
)
|
|
220
|
-
}
|
|
221
|
-
const isSameSeg = isAlmostSameSegment3D(
|
|
222
|
-
[point0, nextPoint0],
|
|
223
|
-
[point1, nextPoint1],
|
|
224
|
-
mmTolerance
|
|
225
|
-
)
|
|
226
|
-
return isSameSeg
|
|
227
|
-
})
|
|
228
|
-
if (!isNotSplit && edge2D.belongsTo.length == 2 && edge2D.layer == 'roof') {
|
|
229
|
-
edge2D.isSplit = true
|
|
230
|
-
}
|
|
231
|
-
})
|
|
232
|
-
return edges2D
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
export function generateEdges3D(polygons) {
|
|
236
|
-
let edges3D = []
|
|
237
|
-
polygons
|
|
238
|
-
.filter((poly) =>
|
|
239
|
-
['roof', 'obstacle', 'moduleField', 'construction'].includes(poly.layer)
|
|
240
|
-
)
|
|
241
|
-
.forEach((polygon) => {
|
|
242
|
-
const outline = polygon.outline
|
|
243
|
-
outline.forEach((point, i) => {
|
|
244
|
-
const isLastPointOfPolygon = i == outline.length - 1
|
|
245
|
-
if (!polygon.isClosed && isLastPointOfPolygon) {
|
|
246
|
-
return
|
|
247
|
-
}
|
|
248
|
-
//check if edge2D already exist
|
|
249
|
-
const nextPoint = outline[(i + 1) % outline.length]
|
|
250
|
-
let edge3D = edges3D.find((edge) => {
|
|
251
|
-
return (
|
|
252
|
-
isAlmostSameSegment3D(
|
|
253
|
-
[point, nextPoint],
|
|
254
|
-
edge.outline,
|
|
255
|
-
mmTolerance
|
|
256
|
-
) && edge.layer == polygon.layer
|
|
257
|
-
)
|
|
258
|
-
})
|
|
259
|
-
if (!edge3D) {
|
|
260
|
-
//create an edge at this position
|
|
261
|
-
edge3D = new Line(point, nextPoint, polygon.layer)
|
|
262
|
-
edge3D.id = 'edge3D'
|
|
263
|
-
edge3D.belongsTo = []
|
|
264
|
-
edge3D.layer = polygon.layer
|
|
265
|
-
edge3D.selected = false
|
|
266
|
-
edge3D.itemType = 'edge3D'
|
|
267
|
-
edges3D.push(edge3D)
|
|
268
|
-
}
|
|
269
|
-
//add BelongToPolygon
|
|
270
|
-
edge3D.belongsTo.push({
|
|
271
|
-
polygonId: polygon.id,
|
|
272
|
-
index: i,
|
|
273
|
-
polygon,
|
|
274
|
-
})
|
|
275
|
-
edge3D.id += '_' + polygon.id + '_' + i
|
|
276
|
-
})
|
|
277
|
-
})
|
|
278
|
-
return edges3D
|
|
279
|
-
}
|