rm-graphical-computing 1.0.65 → 1.0.66
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/dist/index.cjs +1 -1
- package/dist/index.js +1066 -1051
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
var Qn = Object.defineProperty;
|
|
2
2
|
var Jn = (n, t, e) => t in n ? Qn(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
|
|
3
3
|
var Oe = (n, t, e) => Jn(n, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
-
import * as
|
|
4
|
+
import * as y from "three";
|
|
5
5
|
import { BufferGeometry as to, BufferAttribute as eo, Plane as no, Vector3 as zt, Matrix3 as En, MathUtils as Ne, Box3 as oo, Matrix4 as Tn, Ray as ro } from "three";
|
|
6
6
|
function io(n, t = !1) {
|
|
7
7
|
const e = n[0].index !== null, o = new Set(Object.keys(n[0].attributes)), i = new Set(Object.keys(n[0].morphAttributes)), r = {}, s = {}, a = n[0].morphTargetsRelative, l = new to();
|
|
8
|
-
let
|
|
8
|
+
let u = 0;
|
|
9
9
|
for (let h = 0; h < n.length; ++h) {
|
|
10
10
|
const d = n[h];
|
|
11
|
-
let
|
|
11
|
+
let c = 0;
|
|
12
12
|
if (e !== (d.index !== null))
|
|
13
13
|
return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."), null;
|
|
14
14
|
for (const f in d.attributes) {
|
|
15
15
|
if (!o.has(f))
|
|
16
16
|
return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + '. All geometries must have compatible attributes; make sure "' + f + '" attribute exists among all geometries, or in none of them.'), null;
|
|
17
|
-
r[f] === void 0 && (r[f] = []), r[f].push(d.attributes[f]),
|
|
17
|
+
r[f] === void 0 && (r[f] = []), r[f].push(d.attributes[f]), c++;
|
|
18
18
|
}
|
|
19
|
-
if (
|
|
19
|
+
if (c !== o.size)
|
|
20
20
|
return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". Make sure all geometries have the same number of attributes."), null;
|
|
21
21
|
if (a !== d.morphTargetsRelative)
|
|
22
22
|
return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". .morphTargetsRelative must be consistent throughout all geometries."), null;
|
|
@@ -33,17 +33,17 @@ function io(n, t = !1) {
|
|
|
33
33
|
f = d.attributes.position.count;
|
|
34
34
|
else
|
|
35
35
|
return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + h + ". The geometry must have either an index or a position attribute"), null;
|
|
36
|
-
l.addGroup(
|
|
36
|
+
l.addGroup(u, f, h), u += f;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
if (e) {
|
|
40
40
|
let h = 0;
|
|
41
41
|
const d = [];
|
|
42
|
-
for (let
|
|
43
|
-
const f = n[
|
|
42
|
+
for (let c = 0; c < n.length; ++c) {
|
|
43
|
+
const f = n[c].index;
|
|
44
44
|
for (let w = 0; w < f.count; ++w)
|
|
45
45
|
d.push(f.getX(w) + h);
|
|
46
|
-
h += n[
|
|
46
|
+
h += n[c].attributes.position.count;
|
|
47
47
|
}
|
|
48
48
|
l.setIndex(d);
|
|
49
49
|
}
|
|
@@ -57,10 +57,10 @@ function io(n, t = !1) {
|
|
|
57
57
|
const d = s[h][0].length;
|
|
58
58
|
if (d === 0) break;
|
|
59
59
|
l.morphAttributes = l.morphAttributes || {}, l.morphAttributes[h] = [];
|
|
60
|
-
for (let
|
|
60
|
+
for (let c = 0; c < d; ++c) {
|
|
61
61
|
const f = [];
|
|
62
|
-
for (let
|
|
63
|
-
f.push(s[h][
|
|
62
|
+
for (let x = 0; x < s[h].length; ++x)
|
|
63
|
+
f.push(s[h][x][c]);
|
|
64
64
|
const w = Qe(f);
|
|
65
65
|
if (!w)
|
|
66
66
|
return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + h + " morphAttribute."), null;
|
|
@@ -71,8 +71,8 @@ function io(n, t = !1) {
|
|
|
71
71
|
}
|
|
72
72
|
function Qe(n) {
|
|
73
73
|
let t, e, o, i = -1, r = 0;
|
|
74
|
-
for (let
|
|
75
|
-
const h = n[
|
|
74
|
+
for (let u = 0; u < n.length; ++u) {
|
|
75
|
+
const h = n[u];
|
|
76
76
|
if (t === void 0 && (t = h.array.constructor), t !== h.array.constructor)
|
|
77
77
|
return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."), null;
|
|
78
78
|
if (e === void 0 && (e = h.itemSize), e !== h.itemSize)
|
|
@@ -85,14 +85,14 @@ function Qe(n) {
|
|
|
85
85
|
}
|
|
86
86
|
const s = new t(r), a = new eo(s, e, o);
|
|
87
87
|
let l = 0;
|
|
88
|
-
for (let
|
|
89
|
-
const h = n[
|
|
88
|
+
for (let u = 0; u < n.length; ++u) {
|
|
89
|
+
const h = n[u];
|
|
90
90
|
if (h.isInterleavedBufferAttribute) {
|
|
91
91
|
const d = l / e;
|
|
92
|
-
for (let
|
|
92
|
+
for (let c = 0, f = h.count; c < f; c++)
|
|
93
93
|
for (let w = 0; w < e; w++) {
|
|
94
|
-
const
|
|
95
|
-
a.setComponent(
|
|
94
|
+
const x = h.getComponent(c, w);
|
|
95
|
+
a.setComponent(c + d, w, x);
|
|
96
96
|
}
|
|
97
97
|
} else
|
|
98
98
|
s.set(h.array, l);
|
|
@@ -101,16 +101,16 @@ function Qe(n) {
|
|
|
101
101
|
return i !== void 0 && (a.gpuType = i), a;
|
|
102
102
|
}
|
|
103
103
|
const so = (n, t, e) => {
|
|
104
|
-
let o = new
|
|
104
|
+
let o = new y.LineBasicMaterial({ color: "#0011ff" }), i = [];
|
|
105
105
|
i.push(n), i.push(t);
|
|
106
|
-
let r = new
|
|
107
|
-
r.setFromPoints(i), r.rotateX(-Math.PI / 2), e.add(new
|
|
106
|
+
let r = new y.BufferGeometry();
|
|
107
|
+
r.setFromPoints(i), r.rotateX(-Math.PI / 2), e.add(new y.Line(r, o));
|
|
108
108
|
}, te = (n, t, e, o, i = 1e-8) => {
|
|
109
|
-
const r = t.x - n.x, s = t.y - n.y, a = o.x - e.x, l = o.y - e.y,
|
|
110
|
-
if (Math.abs(
|
|
111
|
-
const h = ((e.x - n.x) * l - (e.y - n.y) * a) /
|
|
109
|
+
const r = t.x - n.x, s = t.y - n.y, a = o.x - e.x, l = o.y - e.y, u = r * l - s * a;
|
|
110
|
+
if (Math.abs(u) < i) return null;
|
|
111
|
+
const h = ((e.x - n.x) * l - (e.y - n.y) * a) / u, d = ((e.x - n.x) * s - (e.y - n.y) * r) / u;
|
|
112
112
|
return h < -i || h > 1 + i || d < -i || d > 1 + i ? null : {
|
|
113
|
-
point: new
|
|
113
|
+
point: new y.Vector3(
|
|
114
114
|
n.x + h * r,
|
|
115
115
|
n.y + h * s,
|
|
116
116
|
n.z
|
|
@@ -127,29 +127,29 @@ const so = (n, t, e) => {
|
|
|
127
127
|
// 最大宽度限制
|
|
128
128
|
} = e, h = document.createElement("canvas").getContext("2d");
|
|
129
129
|
h.font = `bold ${o}px ${i}`;
|
|
130
|
-
const
|
|
131
|
-
let f = Math.min(
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
const
|
|
137
|
-
map:
|
|
130
|
+
const c = h.measureText(n).width;
|
|
131
|
+
let f = Math.min(c + a * 2, l), w = o + a * 2;
|
|
132
|
+
const x = document.createElement("canvas");
|
|
133
|
+
x.width = f, x.height = w;
|
|
134
|
+
const P = x.getContext("2d");
|
|
135
|
+
P.fillStyle = r, P.fillRect(0, 0, f, w), P.fillStyle = s, P.font = `bold ${o}px ${i}`, P.textAlign = "center", P.textBaseline = "middle", c > l - a * 2 ? lo(P, n, f / 2, w / 2, l, o) : P.fillText(n, f / 2, w / 2);
|
|
136
|
+
const M = new y.CanvasTexture(x), g = new y.SpriteMaterial({
|
|
137
|
+
map: M,
|
|
138
138
|
depthTest: !1,
|
|
139
139
|
transparent: !0
|
|
140
|
-
}), m = new
|
|
140
|
+
}), m = new y.Sprite(g);
|
|
141
141
|
m.position.set(t.x, t.y, t.z);
|
|
142
142
|
const p = 5e-3;
|
|
143
143
|
return m.scale.set(f * p, w * p, 1), m;
|
|
144
144
|
};
|
|
145
145
|
function lo(n, t, e, o, i, r) {
|
|
146
146
|
const s = t.split("");
|
|
147
|
-
let a = "", l = r * 1.2,
|
|
147
|
+
let a = "", l = r * 1.2, u = o;
|
|
148
148
|
for (let h = 0; h < s.length; h++) {
|
|
149
149
|
const d = a + s[h];
|
|
150
|
-
n.measureText(d).width > i && h > 0 ? (n.fillText(a, e,
|
|
150
|
+
n.measureText(d).width > i && h > 0 ? (n.fillText(a, e, u), a = s[h], u += l) : a = d;
|
|
151
151
|
}
|
|
152
|
-
n.fillText(a, e,
|
|
152
|
+
n.fillText(a, e, u);
|
|
153
153
|
}
|
|
154
154
|
const oe = (n, t, e = 0.01) => {
|
|
155
155
|
const o = Math.sqrt(n.x * n.x + n.y * n.y + n.z * n.z), i = Math.sqrt(t.x * t.x + t.y * t.y + t.z * t.z);
|
|
@@ -158,33 +158,33 @@ const oe = (n, t, e = 0.01) => {
|
|
|
158
158
|
const r = { x: n.x / o, y: n.y / o, z: n.z / o }, s = { x: t.x / i, y: t.y / i, z: t.z / i };
|
|
159
159
|
let a = r.x * s.x + r.y * s.y + r.z * s.z;
|
|
160
160
|
a = Math.max(-1, Math.min(1, a));
|
|
161
|
-
const l = Math.acos(Math.abs(a)),
|
|
161
|
+
const l = Math.acos(Math.abs(a)), u = l <= e;
|
|
162
162
|
return {
|
|
163
|
-
parallel:
|
|
164
|
-
sameDirection:
|
|
163
|
+
parallel: u,
|
|
164
|
+
sameDirection: u ? a > 0 : null,
|
|
165
165
|
angle: l
|
|
166
166
|
};
|
|
167
167
|
}, co = (n, t, e, o) => {
|
|
168
168
|
const i = n;
|
|
169
169
|
let r = [];
|
|
170
|
-
if (o && o.length && (r = o.map((
|
|
171
|
-
const s = new
|
|
172
|
-
let
|
|
173
|
-
for (const
|
|
174
|
-
const v =
|
|
175
|
-
v <
|
|
176
|
-
}
|
|
177
|
-
const f = i[0].dot(l), w = s.clone().multiplyScalar(
|
|
178
|
-
let g = [w,
|
|
179
|
-
m && m.parallel && (g = [w,
|
|
170
|
+
if (o && o.length && (r = o.map((z) => z.clone())), !i || i.length < 4) return {};
|
|
171
|
+
const s = new y.Vector3().subVectors(i[1], i[0]).normalize(), a = new y.Vector3().subVectors(i[3], i[0]).normalize(), l = s.clone().cross(a).normalize();
|
|
172
|
+
let u = 1 / 0, h = -1 / 0, d = 1 / 0, c = -1 / 0;
|
|
173
|
+
for (const z of i) {
|
|
174
|
+
const v = z.dot(s), S = z.dot(a);
|
|
175
|
+
v < u && (u = v), v > h && (h = v), S < d && (d = S), S > c && (c = S);
|
|
176
|
+
}
|
|
177
|
+
const f = i[0].dot(l), w = s.clone().multiplyScalar(u).add(a.clone().multiplyScalar(d)).add(l.clone().multiplyScalar(f)), x = s.clone().multiplyScalar(h).add(a.clone().multiplyScalar(d)).add(l.clone().multiplyScalar(f)), P = s.clone().multiplyScalar(h).add(a.clone().multiplyScalar(c)).add(l.clone().multiplyScalar(f)), M = s.clone().multiplyScalar(u).add(a.clone().multiplyScalar(c)).add(l.clone().multiplyScalar(f));
|
|
178
|
+
let g = [w, x, P, M], m = oe(new y.Vector3().subVectors(w, x), new y.Vector3(0, 0, 1));
|
|
179
|
+
m && m.parallel && (g = [w, M, P, x]);
|
|
180
180
|
let p = 0;
|
|
181
181
|
if (o.length > 0) {
|
|
182
|
-
const
|
|
182
|
+
const z = new y.Vector3().subVectors(g[1], g[0]).normalize(), v = z.clone().negate(), S = new y.Vector3().subVectors(g[3], g[0]).normalize(), V = S.clone().negate();
|
|
183
183
|
let D = g[0].distanceTo(g[1]), _ = g[0].distanceTo(g[3]), E = D / t, T = _ / e, A = 1e-3;
|
|
184
184
|
for (let O = 0; O < E; O++) {
|
|
185
185
|
let I = g[0], B = 0;
|
|
186
186
|
for (let L = 0; L < T; L++) {
|
|
187
|
-
let N = I.clone().addScaledVector(
|
|
187
|
+
let N = I.clone().addScaledVector(z, t), C = N.clone().addScaledVector(S, e), R = I.clone().addScaledVector(S, e), $ = new y.Vector3().add(I).add(N).add(C).add(R).multiplyScalar(0.25);
|
|
188
188
|
for (let X = 0; X < r.length; X++)
|
|
189
189
|
if (r[X].distanceTo($) < A) {
|
|
190
190
|
B++;
|
|
@@ -194,13 +194,13 @@ const oe = (n, t, e = 0.01) => {
|
|
|
194
194
|
}
|
|
195
195
|
if (B >= T / 2)
|
|
196
196
|
break;
|
|
197
|
-
p += B, g[0] = g[0].addScaledVector(
|
|
197
|
+
p += B, g[0] = g[0].addScaledVector(z, t), g[3] = g[3].addScaledVector(z, t);
|
|
198
198
|
}
|
|
199
199
|
D = g[0].distanceTo(g[1]), E = D / t;
|
|
200
200
|
for (let O = 0; O < E; O++) {
|
|
201
201
|
let I = g[1], B = 0;
|
|
202
202
|
for (let L = 0; L < T; L++) {
|
|
203
|
-
let N = I.clone().addScaledVector(v, t), C = N.clone().addScaledVector(S, e), R = I.clone().addScaledVector(S, e), $ = new
|
|
203
|
+
let N = I.clone().addScaledVector(v, t), C = N.clone().addScaledVector(S, e), R = I.clone().addScaledVector(S, e), $ = new y.Vector3().add(I).add(N).add(C).add(R).multiplyScalar(0.25);
|
|
204
204
|
for (let X = 0; X < r.length; X++)
|
|
205
205
|
if (r[X].distanceTo($) < A) {
|
|
206
206
|
B++;
|
|
@@ -216,7 +216,7 @@ const oe = (n, t, e = 0.01) => {
|
|
|
216
216
|
for (let O = 0; O < T; O++) {
|
|
217
217
|
let I = g[3], B = 0;
|
|
218
218
|
for (let L = 0; L < E; L++) {
|
|
219
|
-
let N = I.clone().addScaledVector(
|
|
219
|
+
let N = I.clone().addScaledVector(z, t), C = N.clone().addScaledVector(V, e), R = I.clone().addScaledVector(V, e), $ = new y.Vector3().add(I).add(N).add(C).add(R).multiplyScalar(0.25);
|
|
220
220
|
for (let X = 0; X < r.length; X++)
|
|
221
221
|
if (r[X].distanceTo($) < A) {
|
|
222
222
|
B++;
|
|
@@ -226,7 +226,7 @@ const oe = (n, t, e = 0.01) => {
|
|
|
226
226
|
}
|
|
227
227
|
if (B >= E / 2)
|
|
228
228
|
break;
|
|
229
|
-
p += B, g[2] = g[2].addScaledVector(
|
|
229
|
+
p += B, g[2] = g[2].addScaledVector(V, e), g[3] = g[3].addScaledVector(V, e);
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
232
|
const b = g[0].distanceTo(g[1]) * g[0].distanceTo(g[3]);
|
|
@@ -235,22 +235,22 @@ const oe = (n, t, e = 0.01) => {
|
|
|
235
235
|
boxArea: b,
|
|
236
236
|
totalInPlaneNum: p
|
|
237
237
|
};
|
|
238
|
-
}, Jt = (n, t, e, o, i =
|
|
239
|
-
const r = new
|
|
238
|
+
}, Jt = (n, t, e, o, i = y.MathUtils.degToRad(8)) => {
|
|
239
|
+
const r = new y.Vector3(), s = new y.Vector3();
|
|
240
240
|
r.subVectors(
|
|
241
|
-
new
|
|
242
|
-
new
|
|
241
|
+
new y.Vector3(t.x, t.y, 0),
|
|
242
|
+
new y.Vector3(n.x, n.y, 0)
|
|
243
243
|
).normalize(), s.subVectors(
|
|
244
|
-
new
|
|
245
|
-
new
|
|
244
|
+
new y.Vector3(o.x, o.y, 0),
|
|
245
|
+
new y.Vector3(e.x, e.y, 0)
|
|
246
246
|
).normalize();
|
|
247
|
-
const a = r.dot(s), l = Math.acos(Math.min(Math.abs(a), 1)),
|
|
247
|
+
const a = r.dot(s), l = Math.acos(Math.min(Math.abs(a), 1)), u = 1 - Math.min(l / i, 1), h = a > 0 ? "same" : "opposite";
|
|
248
248
|
return {
|
|
249
|
-
parallelism:
|
|
249
|
+
parallelism: u,
|
|
250
250
|
// 平行率 0-1
|
|
251
251
|
angle: l,
|
|
252
252
|
// 实际夹角(弧度)
|
|
253
|
-
angleDeg:
|
|
253
|
+
angleDeg: y.MathUtils.radToDeg(l),
|
|
254
254
|
// 夹角(度)
|
|
255
255
|
isParallel: l < i,
|
|
256
256
|
// 是否平行(基于阈值)
|
|
@@ -260,15 +260,15 @@ const oe = (n, t, e = 0.01) => {
|
|
|
260
260
|
// 方向向量
|
|
261
261
|
};
|
|
262
262
|
}, re = (n, t, e, o) => {
|
|
263
|
-
const i = new
|
|
263
|
+
const i = new y.Vector3().subVectors(t, n), r = new y.Vector3().subVectors(o, e), s = i.length(), a = r.length();
|
|
264
264
|
if (s === 0 || a === 0)
|
|
265
265
|
return { rate: NaN, angle: NaN, isPerpendicular: !1, isParallel: !1 };
|
|
266
266
|
i.normalize(), r.normalize();
|
|
267
|
-
const l = Math.abs(i.dot(r)),
|
|
267
|
+
const l = Math.abs(i.dot(r)), u = Math.min(1, Math.max(0, l)), h = Math.acos(u), d = y.MathUtils.radToDeg(h), c = 1 - u;
|
|
268
268
|
return {
|
|
269
|
-
rate:
|
|
269
|
+
rate: c,
|
|
270
270
|
// 垂直率 0~1
|
|
271
|
-
percent: `${(
|
|
271
|
+
percent: `${(c * 100).toFixed(2)}%`,
|
|
272
272
|
// 垂直率百分比
|
|
273
273
|
angle: d,
|
|
274
274
|
// 夹角(度,0~90)
|
|
@@ -277,28 +277,28 @@ const oe = (n, t, e = 0.01) => {
|
|
|
277
277
|
isParallel: d < 0.01
|
|
278
278
|
// 是否平行
|
|
279
279
|
};
|
|
280
|
-
}, ee = (n, t, e = !1) => new
|
|
280
|
+
}, ee = (n, t, e = !1) => new y.Vector3((n.x + t.x) / 2, (n.y + t.y) / 2, e ? 0 : (n.z + t.z) / 2), ne = (n, t, e, o, i = {}) => {
|
|
281
281
|
const {
|
|
282
|
-
parallelAngleMax: r =
|
|
283
|
-
collinearAngleMax: s =
|
|
282
|
+
parallelAngleMax: r = y.MathUtils.degToRad(10),
|
|
283
|
+
collinearAngleMax: s = y.MathUtils.degToRad(7),
|
|
284
284
|
distanceThreshold: a = 2,
|
|
285
285
|
overlapThreshold: l = 0.01
|
|
286
286
|
// 投影重叠量大于此值才算 overlap
|
|
287
|
-
} = i,
|
|
288
|
-
let f =
|
|
289
|
-
const w = Math.acos(Math.abs(f)),
|
|
287
|
+
} = i, u = new y.Vector3().subVectors(t, n), h = new y.Vector3().subVectors(o, e), d = u.clone().normalize(), c = h.clone().normalize();
|
|
288
|
+
let f = y.MathUtils.clamp(d.dot(c), -1, 1);
|
|
289
|
+
const w = Math.acos(Math.abs(f)), x = y.MathUtils.radToDeg(w);
|
|
290
290
|
if (w > r)
|
|
291
291
|
return {
|
|
292
292
|
type: "not_parallel",
|
|
293
|
-
angleDeg:
|
|
293
|
+
angleDeg: x,
|
|
294
294
|
avgPerpendicularDistance: null,
|
|
295
295
|
maxPerpendicularDistance: null,
|
|
296
296
|
gap: null,
|
|
297
297
|
overlap: null,
|
|
298
298
|
closestDistance: null
|
|
299
299
|
};
|
|
300
|
-
f < 0 &&
|
|
301
|
-
const
|
|
300
|
+
f < 0 && c.negate();
|
|
301
|
+
const P = new y.Vector3().addVectors(d, c).normalize(), M = new y.Vector3().addVectors(n, t).multiplyScalar(0.5), g = Je(e, M, d), m = Je(o, M, d), p = (g + m) / 2, b = Math.max(g, m), z = n.dot(P), v = t.dot(P), S = e.dot(P), V = o.dot(P), D = Math.min(z, v), _ = Math.max(z, v), E = Math.min(S, V), T = Math.max(S, V), A = _ - D, O = T - E, I = Math.min(A, O), B = Math.min(_, T) - Math.max(D, E), L = B < 0 ? -B : 0, N = B > 0 ? B : 0, C = I > 0 ? N / I : 0, R = uo(
|
|
302
302
|
n,
|
|
303
303
|
t,
|
|
304
304
|
e,
|
|
@@ -307,7 +307,7 @@ const oe = (n, t, e = 0.01) => {
|
|
|
307
307
|
let X;
|
|
308
308
|
return $ ? X = C > 0.5 ? "collinear_overlap" : "collinear_gap" : w <= r && (X = "parallel_offset"), {
|
|
309
309
|
type: X,
|
|
310
|
-
angleDeg:
|
|
310
|
+
angleDeg: x,
|
|
311
311
|
avgPerpendicularDistance: p,
|
|
312
312
|
maxPerpendicularDistance: b,
|
|
313
313
|
gap: L,
|
|
@@ -316,97 +316,97 @@ const oe = (n, t, e = 0.01) => {
|
|
|
316
316
|
};
|
|
317
317
|
};
|
|
318
318
|
function Je(n, t, e) {
|
|
319
|
-
const o = new
|
|
320
|
-
return new
|
|
319
|
+
const o = new y.Vector3().subVectors(n, t), i = o.dot(e), r = e.clone().multiplyScalar(i);
|
|
320
|
+
return new y.Vector3().subVectors(o, r).length();
|
|
321
321
|
}
|
|
322
322
|
function uo(n, t, e, o) {
|
|
323
|
-
const i = new
|
|
323
|
+
const i = new y.Vector3().subVectors(t, n), r = new y.Vector3().subVectors(o, e), s = new y.Vector3().subVectors(e, n), a = i.dot(i), l = i.dot(r), u = r.dot(r), h = i.dot(s), d = r.dot(s), c = a * u - l * l;
|
|
324
324
|
let f, w;
|
|
325
|
-
|
|
326
|
-
const
|
|
327
|
-
return
|
|
325
|
+
c < 1e-10 ? (f = 0, w = u !== 0 ? d / u : 0) : (f = (l * d - u * h) / c, w = (a * d - l * h) / c), f = y.MathUtils.clamp(f, 0, 1), w = u !== 0 ? y.MathUtils.clamp((l * f + d) / u, 0, 1) : 0, f = a !== 0 ? y.MathUtils.clamp((l * w - h) / a, 0, 1) : 0;
|
|
326
|
+
const x = n.clone().add(i.clone().multiplyScalar(f)), P = e.clone().add(r.clone().multiplyScalar(w));
|
|
327
|
+
return x.distanceTo(P);
|
|
328
328
|
}
|
|
329
329
|
const tn = (n, t) => Math.round(Math.max(5, Math.min(350, t * Math.sqrt(n)))), ho = (n) => {
|
|
330
|
-
let t = new
|
|
331
|
-
for (let
|
|
332
|
-
l.set((
|
|
333
|
-
let
|
|
334
|
-
const h = n.originalPoints, d = new
|
|
335
|
-
for (let
|
|
336
|
-
const
|
|
337
|
-
let g =
|
|
330
|
+
let t = new y.Vector3(n.start.x, n.start.y, n.start.z), e = new y.Vector3(n.end.x, n.end.y, n.end.z), o = t.distanceTo(e), i = n.rooftopPz - n.start.z, r = tn(o, 100), s = tn(i, 70), a = i / s, l = /* @__PURE__ */ new Map();
|
|
331
|
+
for (let x = 0; x < s; x++)
|
|
332
|
+
l.set((x + 1) * a, { count: 0, minZ: 1 / 0, maxZ: -1 / 0 });
|
|
333
|
+
let u = new y.Line3(t, e);
|
|
334
|
+
const h = n.originalPoints, d = new y.Vector3();
|
|
335
|
+
for (let x = 0; x < h.length; x++) {
|
|
336
|
+
const P = h[x];
|
|
337
|
+
let g = u.closestPointToPoint(P, !0, d).distanceTo(P);
|
|
338
338
|
const m = Math.floor(g / a);
|
|
339
339
|
if (m < s) {
|
|
340
340
|
const p = l.get((m + 1) * a);
|
|
341
|
-
p.count++,
|
|
341
|
+
p.count++, P.z < p.minZ && (p.minZ = P.z), P.z > p.maxZ && (p.maxZ = P.z);
|
|
342
342
|
}
|
|
343
343
|
}
|
|
344
|
-
let
|
|
345
|
-
for (const [
|
|
346
|
-
if (
|
|
347
|
-
|
|
344
|
+
let c, f, w = r / 2;
|
|
345
|
+
for (const [x, P] of l)
|
|
346
|
+
if (P.count >= w) {
|
|
347
|
+
c = P.minZ;
|
|
348
348
|
break;
|
|
349
349
|
}
|
|
350
|
-
for (const [
|
|
351
|
-
if (
|
|
352
|
-
f =
|
|
350
|
+
for (const [x, P] of [...l.entries()].reverse())
|
|
351
|
+
if (P.count >= w) {
|
|
352
|
+
f = P.maxZ;
|
|
353
353
|
break;
|
|
354
354
|
}
|
|
355
|
-
return { minZ:
|
|
355
|
+
return { minZ: c, maxZ: f };
|
|
356
356
|
}, ze = (n, t, e) => {
|
|
357
|
-
let o = new
|
|
358
|
-
const i = new
|
|
357
|
+
let o = new y.Plane();
|
|
358
|
+
const i = new y.Vector3(n.x, n.y, n.z), r = new y.Vector3(t.x, t.y, t.z), s = new y.Vector3(t.x, t.y, t.z + 5);
|
|
359
359
|
o.setFromCoplanarPoints(i, r, s);
|
|
360
360
|
const a = [], l = [];
|
|
361
|
-
e.forEach((
|
|
362
|
-
const
|
|
363
|
-
o.projectPoint(
|
|
361
|
+
e.forEach((P) => {
|
|
362
|
+
const M = new y.Vector3();
|
|
363
|
+
o.projectPoint(P, M), l.push(M.clone()), M.z = i.z, a.push(M);
|
|
364
364
|
});
|
|
365
|
-
let
|
|
366
|
-
o.projectPoint(i,
|
|
367
|
-
const d = new
|
|
368
|
-
let
|
|
369
|
-
return a.forEach((
|
|
370
|
-
d.closestPointToPoint(
|
|
371
|
-
}), { newOriginalPoints:
|
|
365
|
+
let u = new y.Vector3(), h = new y.Vector3();
|
|
366
|
+
o.projectPoint(i, u), o.projectPoint(r, h);
|
|
367
|
+
const d = new y.Line3(u, h), c = [], f = [], w = [];
|
|
368
|
+
let x = new y.Vector3();
|
|
369
|
+
return a.forEach((P, M) => {
|
|
370
|
+
d.closestPointToPoint(P, !0, x).distanceTo(P) < 1e-3 ? (c.push(e[M]), f.push(l[M])) : w.push(P);
|
|
371
|
+
}), { newOriginalPoints: c, newProjectPoints: w, newOnLinePoints: f };
|
|
372
372
|
}, fo = (n) => {
|
|
373
|
-
function t(e, o, i, r, s, a, l,
|
|
374
|
-
let d = new
|
|
373
|
+
function t(e, o, i, r, s, a, l, u, h) {
|
|
374
|
+
let d = new y.Line3(e, o), c = /* @__PURE__ */ new Map(), f = new y.Vector3(), w = e.clone(), x = o.clone(), P = 0;
|
|
375
375
|
for (; ; ) {
|
|
376
|
-
let
|
|
376
|
+
let M = /* @__PURE__ */ new Map(), g = 0;
|
|
377
377
|
for (let m = 0; m < h.checkResults.length; m++)
|
|
378
|
-
if (!(h.checkResults[m].allCenterPoints.length /
|
|
378
|
+
if (!(h.checkResults[m].allCenterPoints.length / u * 100 < 1))
|
|
379
379
|
for (let b = 0; b < h.checkResults[m].allCenterPoints.length; b++) {
|
|
380
|
-
if (
|
|
380
|
+
if (c.has(m) && c.get(m).removePtsIndex.includes(b))
|
|
381
381
|
continue;
|
|
382
|
-
let
|
|
383
|
-
|
|
384
|
-
let v = d.closestPointToPoint(
|
|
385
|
-
Math.abs(S - s) < 0.01 && (g++,
|
|
382
|
+
let z = h.checkResults[m].allCenterPoints[b];
|
|
383
|
+
z = new y.Vector3(z.x, z.y, z.z);
|
|
384
|
+
let v = d.closestPointToPoint(z, !0, f), S = z.distanceTo(v);
|
|
385
|
+
Math.abs(S - s) < 0.01 && (g++, M.has(m) ? M.get(m).removePtsIndex.push(b) : M.set(m, {
|
|
386
386
|
index: m,
|
|
387
387
|
removePtsIndex: [b]
|
|
388
388
|
}));
|
|
389
389
|
}
|
|
390
|
-
if (
|
|
391
|
-
e = w, o =
|
|
390
|
+
if (P == l) {
|
|
391
|
+
e = w, o = x;
|
|
392
392
|
break;
|
|
393
393
|
}
|
|
394
394
|
if (g < a / 20 * 18 || g == 0) {
|
|
395
|
-
|
|
395
|
+
M.clear(), l - P < 5 && (e = w, o = x, c.clear());
|
|
396
396
|
break;
|
|
397
397
|
} else {
|
|
398
|
-
|
|
399
|
-
for (const [m, p] of
|
|
400
|
-
|
|
401
|
-
|
|
398
|
+
P++;
|
|
399
|
+
for (const [m, p] of M)
|
|
400
|
+
c.has(m) ? c.get(m).removePtsIndex.push(...p.removePtsIndex) : c.set(m, p);
|
|
401
|
+
M.clear(), e = e.addScaledVector(i, r), o = o.addScaledVector(i, r), d.set(e, o);
|
|
402
402
|
}
|
|
403
403
|
}
|
|
404
|
-
if (
|
|
405
|
-
for (const [
|
|
404
|
+
if (c.size > 0 && P != l)
|
|
405
|
+
for (const [M, g] of c) {
|
|
406
406
|
let m = [], p = [];
|
|
407
|
-
for (let b = 0; b < h.checkResults[
|
|
408
|
-
g.removePtsIndex.includes(b) || (m.push(h.checkResults[
|
|
409
|
-
h.checkResults[
|
|
407
|
+
for (let b = 0; b < h.checkResults[M].allCenterPoints.length; b++)
|
|
408
|
+
g.removePtsIndex.includes(b) || (m.push(h.checkResults[M].allCenterPoints[b]), p.push(h.checkResults[M].originalVertices[b]));
|
|
409
|
+
h.checkResults[M].allCenterPoints = m, h.checkResults[M].originalVertices = p;
|
|
410
410
|
}
|
|
411
411
|
}
|
|
412
412
|
for (let e = 0; e < n.length; e++) {
|
|
@@ -418,24 +418,24 @@ const tn = (n, t) => Math.round(Math.max(5, Math.min(350, t * Math.sqrt(n)))), h
|
|
|
418
418
|
continue;
|
|
419
419
|
if (o.checkResults[0].originalVertices && o.checkResults[0].originalVertices.length > 0) {
|
|
420
420
|
const S = o.checkResults[0].originalVertices[0];
|
|
421
|
-
let [
|
|
422
|
-
|
|
423
|
-
let T = new
|
|
421
|
+
let [V, D, _, E] = S;
|
|
422
|
+
V = new y.Vector3(V.x, V.y, V.z), D = new y.Vector3(D.x, D.y, D.z), _ = new y.Vector3(_.x, _.y, _.z), E = new y.Vector3(E.x, E.y, E.z), i = V.distanceTo(D), r = V.distanceTo(E);
|
|
423
|
+
let T = new y.Vector3().subVectors(V, D).normalize(), A = oe(T, new y.Vector3(0, 0, 1));
|
|
424
424
|
A && A.parallel && ([r, i] = [i, r]);
|
|
425
425
|
}
|
|
426
426
|
if (i < 0 || r < 0)
|
|
427
427
|
continue;
|
|
428
|
-
let s = new
|
|
429
|
-
const l = s.distanceTo(a),
|
|
430
|
-
let
|
|
431
|
-
new
|
|
432
|
-
let m = i / 2, p = l *
|
|
433
|
-
t(
|
|
434
|
-
const { newOriginalPoints: v } = ze(
|
|
428
|
+
let s = new y.Vector3(o.start.x, o.start.y, o.start.z), a = new y.Vector3(o.end.x, o.end.y, o.end.z);
|
|
429
|
+
const l = s.distanceTo(a), u = o.rooftopPz - o.start.z, h = Math.ceil(l / i), d = Math.ceil(u / r);
|
|
430
|
+
let c = s.clone(), f = a.clone(), w = f.clone().add(new y.Vector3(0, 0, u)), x = c.clone().add(new y.Vector3(0, 0, u)), P = new y.Vector3().subVectors(f, c).normalize(), M = P.clone().negate();
|
|
431
|
+
new y.Vector3().subVectors(w, c).normalize().clone().negate();
|
|
432
|
+
let m = i / 2, p = l * u, b = i * r, z = p / b;
|
|
433
|
+
t(c, x, P, i, m, d, h, z, o), t(f, w, M, i, m, d, h, z, o), o.start = c, o.end = f;
|
|
434
|
+
const { newOriginalPoints: v } = ze(c, f, o.originalPoints);
|
|
435
435
|
o.originalPoints = v;
|
|
436
436
|
}
|
|
437
|
-
}, Lt = (n, t) => new
|
|
438
|
-
const o = new
|
|
437
|
+
}, Lt = (n, t) => new y.Vector3(n.x, n.y, 0).distanceTo(new y.Vector3(t.x, t.y, 0)), mo = (n, t, e = 1e-6) => {
|
|
438
|
+
const o = new y.Vector3();
|
|
439
439
|
return n.closestPointToPoint(t, !0, o), o.distanceTo(t) < e;
|
|
440
440
|
}, Se = (n) => {
|
|
441
441
|
let t = 0, e = [];
|
|
@@ -501,9 +501,9 @@ class yo {
|
|
|
501
501
|
*/
|
|
502
502
|
createWallPlaneMeshFromFourPoints(t, e, o, i, r, s, a = 16777215) {
|
|
503
503
|
const l = [t, e, o, i];
|
|
504
|
-
for (let
|
|
505
|
-
this.isValidVector3(l[
|
|
506
|
-
const
|
|
504
|
+
for (let P = 0; P < l.length; P++)
|
|
505
|
+
this.isValidVector3(l[P]) || (console.error(`点${P + 1}包含无效数据:`, l[P]), l[P] = new y.Vector3(P, 0, P));
|
|
506
|
+
const u = new y.BufferGeometry(), h = new Float32Array([
|
|
507
507
|
l[0].x,
|
|
508
508
|
l[0].y,
|
|
509
509
|
l[0].z,
|
|
@@ -520,7 +520,7 @@ class yo {
|
|
|
520
520
|
l[3].y,
|
|
521
521
|
l[3].z
|
|
522
522
|
// 左上
|
|
523
|
-
]), d = [0, 1, 2, 0, 2, 3],
|
|
523
|
+
]), d = [0, 1, 2, 0, 2, 3], c = new Float32Array([
|
|
524
524
|
0,
|
|
525
525
|
0,
|
|
526
526
|
// 左下
|
|
@@ -534,9 +534,9 @@ class yo {
|
|
|
534
534
|
1
|
|
535
535
|
// 左上
|
|
536
536
|
]);
|
|
537
|
-
|
|
538
|
-
const f = new
|
|
539
|
-
return s.add(
|
|
537
|
+
u.setAttribute("position", new y.BufferAttribute(h, 3)), u.setAttribute("uv", new y.BufferAttribute(c, 2)), u.setIndex(d), u.computeVertexNormals();
|
|
538
|
+
const f = new y.Mesh(u, r), w = new y.EdgesGeometry(u), x = new y.LineSegments(w, new y.LineBasicMaterial({ color: a }));
|
|
539
|
+
return s.add(x), f;
|
|
540
540
|
}
|
|
541
541
|
/**
|
|
542
542
|
* 将一面墙体按 rows×cols 细分成小格 Mesh,每格存入 wallGroup。
|
|
@@ -549,19 +549,19 @@ class yo {
|
|
|
549
549
|
const s = [];
|
|
550
550
|
if (!t || !t.start || !t.end || isNaN(t.rooftopPz))
|
|
551
551
|
return s;
|
|
552
|
-
const a = new
|
|
552
|
+
const a = new y.Vector3(t.start.x, t.start.y, t.start.z), l = new y.Vector3(t.end.x, t.end.y, t.end.z), u = new y.Vector3(t.end.x, t.end.y, t.rooftopPz), h = new y.Vector3(t.start.x, t.start.y, t.rooftopPz), d = [a, l, u, h];
|
|
553
553
|
for (let g = 0; g < d.length; g++)
|
|
554
554
|
if (!this.isValidVector3(d[g]))
|
|
555
555
|
return console.error(`墙体基础点${g}无效:`, d[g]), s;
|
|
556
|
-
const
|
|
557
|
-
if (
|
|
556
|
+
const c = a.distanceTo(l), f = Math.abs(t.rooftopPz - t.start.z);
|
|
557
|
+
if (c === 0 || f === 0)
|
|
558
558
|
return console.error("墙体宽度或高度为0"), console.log("line.rooftopPz", t.rooftopPz), console.log("bottomLeft", a), console.log("bottomRight", l), console.log(t.length), s;
|
|
559
|
-
const w =
|
|
559
|
+
const w = c / o, x = f / e, P = new y.Vector3().subVectors(l, a).normalize(), M = new y.Vector3(0, 0, 1);
|
|
560
560
|
for (let g = 0; g < e; g++)
|
|
561
561
|
for (let m = 0; m < o; m++)
|
|
562
562
|
try {
|
|
563
|
-
const p = new
|
|
564
|
-
points: [p, b,
|
|
563
|
+
const p = new y.Vector3().copy(a).add(P.clone().multiplyScalar(m * w)).add(M.clone().multiplyScalar(g * x)), b = new y.Vector3().copy(a).add(P.clone().multiplyScalar((m + 1) * w)).add(M.clone().multiplyScalar(g * x)), z = new y.Vector3().copy(a).add(P.clone().multiplyScalar((m + 1) * w)).add(M.clone().multiplyScalar((g + 1) * x)), v = new y.Vector3().copy(a).add(P.clone().multiplyScalar(m * w)).add(M.clone().multiplyScalar((g + 1) * x)), S = {
|
|
564
|
+
points: [p, b, z, v],
|
|
565
565
|
userData: {}
|
|
566
566
|
};
|
|
567
567
|
S.userData = {
|
|
@@ -570,7 +570,7 @@ class yo {
|
|
|
570
570
|
col: m,
|
|
571
571
|
originalMaterial: i,
|
|
572
572
|
width: w,
|
|
573
|
-
height:
|
|
573
|
+
height: x
|
|
574
574
|
}, s.push(S);
|
|
575
575
|
} catch (p) {
|
|
576
576
|
console.error(`创建墙体小平面(${g}, ${m})时出错:`, p);
|
|
@@ -813,9 +813,9 @@ class yo {
|
|
|
813
813
|
}
|
|
814
814
|
evaluateSegmentByArea(t, e, o, i) {
|
|
815
815
|
if (e === 0) return !1;
|
|
816
|
-
const r = t.area, s = t.minRequiredPoints, a = t.expectedDensity, l = e / Math.max(r, 1e-3),
|
|
816
|
+
const r = t.area, s = t.minRequiredPoints, a = t.expectedDensity, l = e / Math.max(r, 1e-3), u = e >= s, h = l >= a * 0.3;
|
|
817
817
|
let d = !0;
|
|
818
|
-
return r < 0.5 && e > 0 && (d = this.checkSmallAreaDistribution(t, o, i)),
|
|
818
|
+
return r < 0.5 && e > 0 && (d = this.checkSmallAreaDistribution(t, o, i)), u && h && d;
|
|
819
819
|
}
|
|
820
820
|
checkSmallAreaDistribution(t, e, o) {
|
|
821
821
|
if (e.length < 2) return !0;
|
|
@@ -845,9 +845,9 @@ class yo {
|
|
|
845
845
|
if (!e || !e.attributes.position) return null;
|
|
846
846
|
const o = e.attributes.position;
|
|
847
847
|
if (o.count < 3) return null;
|
|
848
|
-
const i = new
|
|
848
|
+
const i = new y.Vector3().fromBufferAttribute(o, 0), r = new y.Vector3().fromBufferAttribute(o, 1), s = new y.Vector3().fromBufferAttribute(o, 2);
|
|
849
849
|
i.applyMatrix4(t.matrixWorld), r.applyMatrix4(t.matrixWorld), s.applyMatrix4(t.matrixWorld);
|
|
850
|
-
const a = new
|
|
850
|
+
const a = new y.Plane();
|
|
851
851
|
return a.setFromCoplanarPoints(i, r, s), a;
|
|
852
852
|
}
|
|
853
853
|
analyzePointDistribution(t, e, o = 0.01) {
|
|
@@ -867,25 +867,25 @@ class yo {
|
|
|
867
867
|
if (s.userData && s.userData.type === "wallSegment") {
|
|
868
868
|
const a = this.getWorldVerticesNew(s.points);
|
|
869
869
|
if (a.length < 4) return;
|
|
870
|
-
const l = new
|
|
870
|
+
const l = new y.Vector3().add(a[0]).add(a[1]).add(a[2]).add(a[3]).multiplyScalar(0.25);
|
|
871
871
|
s.userData.center = l, s.vertices = a, r.push(s);
|
|
872
872
|
}
|
|
873
873
|
}), this.results.totalSegments = r.length;
|
|
874
874
|
for (const s of r) {
|
|
875
875
|
if (s.vertices.length < 4) continue;
|
|
876
|
-
const a = s.userData.center, l = `row${s.userData.row}_col${s.userData.col}`, [
|
|
877
|
-
|
|
878
|
-
const g =
|
|
876
|
+
const a = s.userData.center, l = `row${s.userData.row}_col${s.userData.col}`, [u, h, d, c] = s.vertices, f = new y.Vector3().subVectors(h, u).normalize(), w = new y.Vector3().subVectors(c, u).normalize(), x = u.distanceTo(h), P = u.distanceTo(c), M = new y.Plane();
|
|
877
|
+
M.setFromCoplanarPoints(u, h, c);
|
|
878
|
+
const g = x / 2, m = P / 2;
|
|
879
879
|
for (let p = 0; p < e.length; p++)
|
|
880
880
|
this.isPointInWallSegmentOptimized(
|
|
881
881
|
e[p],
|
|
882
882
|
a,
|
|
883
|
-
|
|
884
|
-
|
|
883
|
+
M,
|
|
884
|
+
u,
|
|
885
885
|
f,
|
|
886
886
|
w,
|
|
887
|
-
|
|
888
|
-
|
|
887
|
+
x,
|
|
888
|
+
P,
|
|
889
889
|
g,
|
|
890
890
|
m,
|
|
891
891
|
o
|
|
@@ -911,13 +911,13 @@ class yo {
|
|
|
911
911
|
}), this.results.analysisTime = performance.now() - i, this.printAnalysisResults(), this.results;
|
|
912
912
|
}
|
|
913
913
|
// 优化后的判断函数(移出重复计算)
|
|
914
|
-
isPointInWallSegmentOptimized(t, e, o, i, r, s, a, l,
|
|
914
|
+
isPointInWallSegmentOptimized(t, e, o, i, r, s, a, l, u, h, d) {
|
|
915
915
|
if (Math.abs(o.distanceToPoint(t)) > d)
|
|
916
916
|
return !1;
|
|
917
|
-
const f = new
|
|
918
|
-
if (w >
|
|
917
|
+
const f = new y.Vector3().subVectors(t, e), w = Math.abs(f.dot(r)), x = Math.abs(f.dot(s));
|
|
918
|
+
if (w > u && x > h)
|
|
919
919
|
return !1;
|
|
920
|
-
const
|
|
920
|
+
const P = new y.Vector3().subVectors(t, i), M = P.dot(r), g = P.dot(s), m = M >= -d && M <= a + d, p = g >= -d && g <= l + d;
|
|
921
921
|
return m && p;
|
|
922
922
|
}
|
|
923
923
|
// 判断点是否在细分墙体平面内
|
|
@@ -932,13 +932,13 @@ class yo {
|
|
|
932
932
|
}
|
|
933
933
|
// 判断点是否在任意旋转的墙体平面内
|
|
934
934
|
isPointInRotatedWall(t, e, o, i = 0.1) {
|
|
935
|
-
const [r, s, a, l] = t,
|
|
936
|
-
if (
|
|
935
|
+
const [r, s, a, l] = t, u = new y.Plane();
|
|
936
|
+
if (u.setFromCoplanarPoints(r, s, l), Math.abs(u.distanceToPoint(e)) > i)
|
|
937
937
|
return !1;
|
|
938
|
-
const d = new
|
|
939
|
-
new
|
|
940
|
-
const f = new
|
|
941
|
-
return g && m && o.distanceTo(e) <
|
|
938
|
+
const d = new y.Vector3().subVectors(s, r).normalize(), c = new y.Vector3().subVectors(l, r).normalize();
|
|
939
|
+
new y.Vector3().crossVectors(d, c).normalize();
|
|
940
|
+
const f = new y.Vector3().subVectors(e, r), w = f.dot(d), x = f.dot(c), P = r.distanceTo(s), M = r.distanceTo(l), g = w >= -i && w <= P + i, m = x >= -i && x <= M + i;
|
|
941
|
+
return g && m && o.distanceTo(e) < P / 2 && o.distanceTo(e) < M / 2;
|
|
942
942
|
}
|
|
943
943
|
// 优化顶点获取(添加缓存)
|
|
944
944
|
getWorldVertices(t) {
|
|
@@ -946,7 +946,7 @@ class yo {
|
|
|
946
946
|
return t._cachedWorldVertices;
|
|
947
947
|
const e = t.geometry.getAttribute("position"), o = [];
|
|
948
948
|
for (let i = 0; i < Math.min(4, e.count); i++) {
|
|
949
|
-
const r = new
|
|
949
|
+
const r = new y.Vector3();
|
|
950
950
|
r.fromBufferAttribute(e, i), r.applyMatrix4(t.matrixWorld), o.push(r);
|
|
951
951
|
}
|
|
952
952
|
return t._cachedWorldVertices = o, t._cachedMatrixWorld = t.matrixWorld.clone(), o;
|
|
@@ -963,16 +963,16 @@ class yo {
|
|
|
963
963
|
// 获取细分平面的边界信息
|
|
964
964
|
getWallSegmentBounds(t) {
|
|
965
965
|
if (!t.geometry) return null;
|
|
966
|
-
const e = t.geometry.getAttribute("position"), o = new
|
|
966
|
+
const e = t.geometry.getAttribute("position"), o = new y.Box3();
|
|
967
967
|
for (let i = 0; i < e.count; i++) {
|
|
968
|
-
const r = new
|
|
968
|
+
const r = new y.Vector3();
|
|
969
969
|
r.fromBufferAttribute(e, i), r.applyMatrix4(t.matrixWorld), o.expandByPoint(r);
|
|
970
970
|
}
|
|
971
971
|
return {
|
|
972
972
|
min: o.min.toArray(),
|
|
973
973
|
max: o.max.toArray(),
|
|
974
|
-
center: o.getCenter(new
|
|
975
|
-
size: o.getSize(new
|
|
974
|
+
center: o.getCenter(new y.Vector3()).toArray(),
|
|
975
|
+
size: o.getSize(new y.Vector3()).toArray()
|
|
976
976
|
};
|
|
977
977
|
}
|
|
978
978
|
// 高亮没有点的平面
|
|
@@ -1012,16 +1012,16 @@ class yo {
|
|
|
1012
1012
|
return;
|
|
1013
1013
|
}
|
|
1014
1014
|
const r = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map();
|
|
1015
|
-
this.results.missingSegments.forEach((
|
|
1016
|
-
r.set(
|
|
1017
|
-
segmentKey:
|
|
1015
|
+
this.results.missingSegments.forEach((c) => {
|
|
1016
|
+
r.set(c.segmentKey, c), s.has(c.row) || s.set(c.row, /* @__PURE__ */ new Map()), s.get(c.row).set(c.col, {
|
|
1017
|
+
segmentKey: c.segmentKey,
|
|
1018
1018
|
isEmpty: !0,
|
|
1019
1019
|
visited: !1
|
|
1020
1020
|
});
|
|
1021
|
-
}), t.forEach((
|
|
1022
|
-
if (
|
|
1023
|
-
const f = `row${
|
|
1024
|
-
s.has(
|
|
1021
|
+
}), t.forEach((c) => {
|
|
1022
|
+
if (c.userData && c.userData.type === "wallSegment") {
|
|
1023
|
+
const f = `row${c.userData.row}_col${c.userData.col}`, w = r.has(f);
|
|
1024
|
+
s.has(c.userData.row) || s.set(c.userData.row, /* @__PURE__ */ new Map()), s.get(c.userData.row).has(c.userData.col) || s.get(c.userData.row).set(c.userData.col, {
|
|
1025
1025
|
segmentKey: f,
|
|
1026
1026
|
isEmpty: w,
|
|
1027
1027
|
visited: !1
|
|
@@ -1038,29 +1038,29 @@ class yo {
|
|
|
1038
1038
|
[-1, 0]
|
|
1039
1039
|
// 上
|
|
1040
1040
|
];
|
|
1041
|
-
for (const [
|
|
1041
|
+
for (const [c, f] of r) {
|
|
1042
1042
|
const w = (d = s.get(f.row)) == null ? void 0 : d.get(f.col);
|
|
1043
1043
|
if (w && !w.visited) {
|
|
1044
|
-
const
|
|
1045
|
-
for (w.visited = !0;
|
|
1046
|
-
const [
|
|
1047
|
-
r.has(m) &&
|
|
1044
|
+
const x = [], P = [[f.row, f.col]];
|
|
1045
|
+
for (w.visited = !0; P.length > 0; ) {
|
|
1046
|
+
const [M, g] = P.shift(), m = `row${M}_col${g}`;
|
|
1047
|
+
r.has(m) && x.push(r.get(m));
|
|
1048
1048
|
for (const [p, b] of l) {
|
|
1049
|
-
const
|
|
1050
|
-
if (s.has(
|
|
1051
|
-
const S = s.get(
|
|
1052
|
-
!S.visited && S.isEmpty && (S.visited = !0,
|
|
1049
|
+
const z = M + p, v = g + b;
|
|
1050
|
+
if (s.has(z) && s.get(z).has(v)) {
|
|
1051
|
+
const S = s.get(z).get(v);
|
|
1052
|
+
!S.visited && S.isEmpty && (S.visited = !0, P.push([z, v]));
|
|
1053
1053
|
}
|
|
1054
1054
|
}
|
|
1055
1055
|
}
|
|
1056
|
-
|
|
1056
|
+
x.length >= i && a.push(x);
|
|
1057
1057
|
}
|
|
1058
1058
|
}
|
|
1059
|
-
const
|
|
1059
|
+
const u = this.createClusterMaterials(a.length), h = [];
|
|
1060
1060
|
return this.clusterResults = {
|
|
1061
|
-
clusters: a.sort((
|
|
1061
|
+
clusters: a.sort((c, f) => f.length - c.length),
|
|
1062
1062
|
highlightedMeshes: h,
|
|
1063
|
-
clusterMaterials:
|
|
1063
|
+
clusterMaterials: u,
|
|
1064
1064
|
totalClusters: a.length,
|
|
1065
1065
|
totalHighlighted: h.length
|
|
1066
1066
|
}, this.clusterResults;
|
|
@@ -1070,23 +1070,23 @@ class yo {
|
|
|
1070
1070
|
let s = 0;
|
|
1071
1071
|
const a = e;
|
|
1072
1072
|
let l = !0;
|
|
1073
|
-
for (let
|
|
1074
|
-
t.has(a) && t.get(a).has(
|
|
1073
|
+
for (let x = i; x <= r; x++)
|
|
1074
|
+
t.has(a) && t.get(a).has(x) || (l = !1);
|
|
1075
1075
|
l && s++;
|
|
1076
|
-
const
|
|
1076
|
+
const u = o;
|
|
1077
1077
|
let h = !0;
|
|
1078
|
-
for (let
|
|
1079
|
-
t.has(
|
|
1078
|
+
for (let x = i; x <= r; x++)
|
|
1079
|
+
t.has(u) && t.get(u).has(x) || (h = !1);
|
|
1080
1080
|
h && s++;
|
|
1081
1081
|
const d = i;
|
|
1082
|
-
let
|
|
1083
|
-
for (let
|
|
1084
|
-
t.has(
|
|
1085
|
-
|
|
1082
|
+
let c = !0;
|
|
1083
|
+
for (let x = e; x <= o; x++)
|
|
1084
|
+
t.has(x) && t.get(x).has(d) || (c = !1);
|
|
1085
|
+
c && s++;
|
|
1086
1086
|
const f = r;
|
|
1087
1087
|
let w = !0;
|
|
1088
|
-
for (let
|
|
1089
|
-
t.has(
|
|
1088
|
+
for (let x = e; x <= o; x++)
|
|
1089
|
+
t.has(x) && t.get(x).has(f) || (w = !1);
|
|
1090
1090
|
return w && s++, s / 4;
|
|
1091
1091
|
}
|
|
1092
1092
|
// 计算聚类质量分数
|
|
@@ -1096,20 +1096,20 @@ class yo {
|
|
|
1096
1096
|
}
|
|
1097
1097
|
// 计算严格的聚类边界尺寸(基于实际几何)
|
|
1098
1098
|
calculateStrictClusterBounds(t) {
|
|
1099
|
-
var d,
|
|
1099
|
+
var d, c;
|
|
1100
1100
|
if (t.length === 0) return { width: 0, height: 0 };
|
|
1101
1101
|
const e = [];
|
|
1102
1102
|
if (t.forEach((f) => {
|
|
1103
1103
|
f.vertices && f.vertices.length > 0 && e.push(...f.vertices);
|
|
1104
1104
|
}), e.length === 0) {
|
|
1105
|
-
const f = [...new Set(t.map((
|
|
1105
|
+
const f = [...new Set(t.map((x) => x.row))];
|
|
1106
1106
|
return {
|
|
1107
|
-
width: [...new Set(t.map((
|
|
1108
|
-
height: f.length * (((
|
|
1107
|
+
width: [...new Set(t.map((x) => x.col))].length * (((d = t[0].bounds) == null ? void 0 : d.width) || 1),
|
|
1108
|
+
height: f.length * (((c = t[0].bounds) == null ? void 0 : c.height) || 1)
|
|
1109
1109
|
};
|
|
1110
1110
|
}
|
|
1111
|
-
const o = Math.min(...e.map((f) => f.x)), i = Math.max(...e.map((f) => f.x)), r = Math.min(...e.map((f) => f.y)), s = Math.max(...e.map((f) => f.y)), a = Math.min(...e.map((f) => f.z)), l = Math.max(...e.map((f) => f.z)),
|
|
1112
|
-
return { width:
|
|
1111
|
+
const o = Math.min(...e.map((f) => f.x)), i = Math.max(...e.map((f) => f.x)), r = Math.min(...e.map((f) => f.y)), s = Math.max(...e.map((f) => f.y)), a = Math.min(...e.map((f) => f.z)), l = Math.max(...e.map((f) => f.z)), u = Math.abs(i - o), h = Math.max(Math.abs(s - r), Math.abs(l - a));
|
|
1112
|
+
return { width: u, height: h };
|
|
1113
1113
|
}
|
|
1114
1114
|
// 创建不同颜色的聚类材质
|
|
1115
1115
|
createClusterMaterials(t) {
|
|
@@ -1137,11 +1137,11 @@ class yo {
|
|
|
1137
1137
|
"lightcoral"
|
|
1138
1138
|
];
|
|
1139
1139
|
for (let i = 0; i < t; i++) {
|
|
1140
|
-
const r = o[i % o.length], s = new
|
|
1140
|
+
const r = o[i % o.length], s = new y.MeshBasicMaterial({
|
|
1141
1141
|
color: r,
|
|
1142
1142
|
transparent: !0,
|
|
1143
1143
|
opacity: 0.6,
|
|
1144
|
-
side:
|
|
1144
|
+
side: y.DoubleSide
|
|
1145
1145
|
});
|
|
1146
1146
|
e.push(s);
|
|
1147
1147
|
}
|
|
@@ -1177,13 +1177,13 @@ class yo {
|
|
|
1177
1177
|
}
|
|
1178
1178
|
// 创建可视化调试助手
|
|
1179
1179
|
createDebugHelpers(t) {
|
|
1180
|
-
const e = new
|
|
1180
|
+
const e = new y.Group();
|
|
1181
1181
|
return t.traverse((o) => {
|
|
1182
1182
|
if (o.userData && o.userData.type === "wallSegment") {
|
|
1183
1183
|
const i = this.getWorldVertices(o);
|
|
1184
1184
|
if (i.length < 4) return;
|
|
1185
|
-
const r = new
|
|
1186
|
-
e.add(
|
|
1185
|
+
const r = new y.Vector3().add(i[0]).add(i[1]).add(i[2]).add(i[3]).multiplyScalar(0.25), s = new y.Vector3().subVectors(i[1], i[0]).normalize(), a = new y.Vector3().subVectors(i[3], i[0]).normalize(), l = new y.Vector3().crossVectors(s, a).normalize(), u = new y.ArrowHelper(l, r, 0.3, 16711680), h = new y.ArrowHelper(s, r, 0.2, 65280), d = new y.ArrowHelper(a, r, 0.2, 255);
|
|
1186
|
+
e.add(u), e.add(h), e.add(d);
|
|
1187
1187
|
}
|
|
1188
1188
|
}), e;
|
|
1189
1189
|
}
|
|
@@ -1211,7 +1211,7 @@ class yo {
|
|
|
1211
1211
|
o.forEach((a, l) => {
|
|
1212
1212
|
a.applyMatrix4(e[l].matrixWorld);
|
|
1213
1213
|
});
|
|
1214
|
-
const i = io(o), r = e[0].material.clone(), s = new
|
|
1214
|
+
const i = io(o), r = e[0].material.clone(), s = new y.Mesh(i, r);
|
|
1215
1215
|
return s.name = "mergedWalls", s;
|
|
1216
1216
|
} catch (o) {
|
|
1217
1217
|
return console.error("合并网格时出错:", o), null;
|
|
@@ -1239,35 +1239,35 @@ const xo = (n) => {
|
|
|
1239
1239
|
for (let i = 0; i < n.length; i++) {
|
|
1240
1240
|
const r = n[i];
|
|
1241
1241
|
if (!r) continue;
|
|
1242
|
-
let s = new
|
|
1243
|
-
s.applyEuler(new
|
|
1244
|
-
let a = new
|
|
1245
|
-
if (a.applyEuler(new
|
|
1246
|
-
const l = new no().setFromCoplanarPoints(new zt(r.start.x, r.start.y, r.start.z), new zt(r.end.x, r.end.y, r.end.z), new zt(r.start.x, r.start.y, r.rooftopPz)),
|
|
1242
|
+
let s = new y.Vector3(r.start.x, r.start.y, r.start.z);
|
|
1243
|
+
s.applyEuler(new y.Euler(-Math.PI / 2, 0, 0));
|
|
1244
|
+
let a = new y.Vector3(r.end.x, r.end.y, r.end.z);
|
|
1245
|
+
if (a.applyEuler(new y.Euler(-Math.PI / 2, 0, 0)), t.add(ao(String(i), new y.Vector3((s.x + a.x) / 2, (s.y + a.y) / 2, (s.z + a.z) / 2))), (r.isBayWindow || r.isWindow) && e) continue;
|
|
1246
|
+
const l = new no().setFromCoplanarPoints(new zt(r.start.x, r.start.y, r.start.z), new zt(r.end.x, r.end.y, r.end.z), new zt(r.start.x, r.start.y, r.rooftopPz)), u = [];
|
|
1247
1247
|
r.originalPoints.forEach((v, S) => {
|
|
1248
|
-
const
|
|
1249
|
-
l.projectPoint(v,
|
|
1248
|
+
const V = new zt();
|
|
1249
|
+
l.projectPoint(v, V), u.push(V);
|
|
1250
1250
|
});
|
|
1251
|
-
const h = new zt(r.start.x, r.start.y, r.start.z).distanceTo(new zt(r.end.x, r.end.y, r.end.z)), d = Math.abs(r.rooftopPz - r.start.z),
|
|
1251
|
+
const h = new zt(r.start.x, r.start.y, r.start.z).distanceTo(new zt(r.end.x, r.end.y, r.end.z)), d = Math.abs(r.rooftopPz - r.start.z), c = new y.MeshBasicMaterial({
|
|
1252
1252
|
color: "red",
|
|
1253
|
-
side:
|
|
1253
|
+
side: y.DoubleSide,
|
|
1254
1254
|
wireframe: !1,
|
|
1255
1255
|
transparent: !0,
|
|
1256
1256
|
opacity: 0.5
|
|
1257
|
-
}), f = new
|
|
1258
|
-
w.analyzePointDistribution(
|
|
1259
|
-
const g = new
|
|
1257
|
+
}), f = new y.Group(), w = new yo(), { horizontalSubdivisions: x, verticalSubdivisions: P } = w.initLimits4(h, d), M = w.createSubdividedWallPlane(r, P, x, c, f);
|
|
1258
|
+
w.analyzePointDistribution(M, u, 0.01);
|
|
1259
|
+
const g = new y.MeshBasicMaterial({
|
|
1260
1260
|
color: "black",
|
|
1261
1261
|
transparent: !0,
|
|
1262
1262
|
opacity: 0.8,
|
|
1263
|
-
side:
|
|
1264
|
-
}), m = w.highlightEmptySegments(
|
|
1263
|
+
side: y.DoubleSide
|
|
1264
|
+
}), m = w.highlightEmptySegments(M, g, f), p = [];
|
|
1265
1265
|
for (const v of m.clusters) {
|
|
1266
1266
|
const S = xo(v);
|
|
1267
1267
|
S && p.push(S);
|
|
1268
1268
|
}
|
|
1269
|
-
const
|
|
1270
|
-
r.checkResults = p, r.verticalDirection =
|
|
1269
|
+
const z = wo(r).direction;
|
|
1270
|
+
r.checkResults = p, r.verticalDirection = z, r.originaIndex = i, o.push(r);
|
|
1271
1271
|
}
|
|
1272
1272
|
return o;
|
|
1273
1273
|
}, xi = (n, t) => {
|
|
@@ -1275,38 +1275,38 @@ const xo = (n) => {
|
|
|
1275
1275
|
for (let e = 0; e < n.length; e++) {
|
|
1276
1276
|
const o = n[e], i = [];
|
|
1277
1277
|
o.originalPoints.forEach((m) => {
|
|
1278
|
-
let p = new
|
|
1279
|
-
for (let
|
|
1280
|
-
if (kt(p, i[
|
|
1278
|
+
let p = new y.Vector3(m.x, m.y, 0), b = !1;
|
|
1279
|
+
for (let z = 0; z < i.length; z++)
|
|
1280
|
+
if (kt(p, i[z], 0.01)) {
|
|
1281
1281
|
b = !0;
|
|
1282
1282
|
break;
|
|
1283
1283
|
}
|
|
1284
1284
|
b || i.push(p);
|
|
1285
1285
|
});
|
|
1286
1286
|
const r = Math.round(Math.max(5, Math.min(350, 20 * Math.sqrt(o.length)))), s = 1;
|
|
1287
|
-
let a = new
|
|
1287
|
+
let a = new y.Vector3(o.start.x, o.start.y, o.start.z), l = new y.Vector3(o.end.x, o.end.y, o.end.z), u = new y.Vector3().subVectors(l, a).normalize(), h = u.clone().cross(new y.Vector3(0, 0, 1)).normalize(), d = h.clone().negate(), c = [];
|
|
1288
1288
|
const f = [];
|
|
1289
1289
|
let w = o.length / r;
|
|
1290
1290
|
console.log(w);
|
|
1291
1291
|
for (let m = 0; m < r; m++) {
|
|
1292
1292
|
const p = [];
|
|
1293
|
-
p.push(a.clone().addScaledVector(h, s)), p.push(p[0].clone().addScaledVector(
|
|
1293
|
+
p.push(a.clone().addScaledVector(h, s)), p.push(p[0].clone().addScaledVector(u, w)), p.push(p[1].clone().addScaledVector(d, s * 2)), p.push(a.clone().addScaledVector(d, w));
|
|
1294
1294
|
let b = [];
|
|
1295
|
-
for (let
|
|
1296
|
-
|
|
1297
|
-
b.length > 0 && f.push(Mo(b)), a = a.addScaledVector(
|
|
1295
|
+
for (let z = 0; z < i.length; z++)
|
|
1296
|
+
c.includes(z) || Po(i[z], p) && (c.push(z), b.push(i[z]));
|
|
1297
|
+
b.length > 0 && f.push(Mo(b)), a = a.addScaledVector(u, w);
|
|
1298
1298
|
}
|
|
1299
|
-
const
|
|
1299
|
+
const x = new Float32Array(i.length * 3);
|
|
1300
1300
|
i.forEach((m, p) => {
|
|
1301
|
-
|
|
1301
|
+
x[p * 3] = m.x, x[p * 3 + 1] = m.y, x[p * 3 + 2] = m.z;
|
|
1302
1302
|
});
|
|
1303
|
-
const
|
|
1304
|
-
|
|
1305
|
-
const [
|
|
1303
|
+
const P = new y.BufferGeometry();
|
|
1304
|
+
P.setAttribute("position", new y.BufferAttribute(x, 3)), P.rotateX(-Math.PI / 2), t.add(new y.Points(P, new y.PointsMaterial({ color: go(), size: 0.02 })));
|
|
1305
|
+
const [M, g] = vo(f, {
|
|
1306
1306
|
plane: "xy",
|
|
1307
1307
|
trimRatio: 0
|
|
1308
1308
|
});
|
|
1309
|
-
so(
|
|
1309
|
+
so(M, g, t);
|
|
1310
1310
|
}
|
|
1311
1311
|
};
|
|
1312
1312
|
function en(n, t = "xy") {
|
|
@@ -1328,7 +1328,7 @@ function Po(n, t, e = "xy") {
|
|
|
1328
1328
|
const o = en(n, e), i = t.map((a) => en(a, e));
|
|
1329
1329
|
let r = !1, s = !1;
|
|
1330
1330
|
for (let a = 0; a < 4; a++) {
|
|
1331
|
-
const l = i[a],
|
|
1331
|
+
const l = i[a], u = i[(a + 1) % 4], h = bo(l, u, o);
|
|
1332
1332
|
if (h > 1e-9 && (r = !0), h < -1e-9 && (s = !0), r && s)
|
|
1333
1333
|
return !1;
|
|
1334
1334
|
}
|
|
@@ -1337,13 +1337,13 @@ function Po(n, t, e = "xy") {
|
|
|
1337
1337
|
function Mo(n) {
|
|
1338
1338
|
if (!n || n.length === 0)
|
|
1339
1339
|
return null;
|
|
1340
|
-
const t = new
|
|
1340
|
+
const t = new y.Vector3(0, 0, 0);
|
|
1341
1341
|
for (const e of n)
|
|
1342
1342
|
Array.isArray(e) ? (t.x += e[0], t.y += e[1], t.z += e[2]) : (t.x += e.x, t.y += e.y, t.z += e.z);
|
|
1343
1343
|
return t.divideScalar(n.length), t;
|
|
1344
1344
|
}
|
|
1345
1345
|
function zo(n) {
|
|
1346
|
-
return n instanceof
|
|
1346
|
+
return n instanceof y.Vector3 ? n.clone() : Array.isArray(n) ? new y.Vector3(n[0], n[1], n[2]) : new y.Vector3(n.x, n.y, n.z);
|
|
1347
1347
|
}
|
|
1348
1348
|
function Vo(n, t = "xy") {
|
|
1349
1349
|
const e = zo(n);
|
|
@@ -1369,22 +1369,22 @@ function Vo(n, t = "xy") {
|
|
|
1369
1369
|
}
|
|
1370
1370
|
function nn(n, t, e, o = "xy") {
|
|
1371
1371
|
if (o === "xy")
|
|
1372
|
-
return new
|
|
1372
|
+
return new y.Vector3(n, t, e);
|
|
1373
1373
|
if (o === "xz")
|
|
1374
|
-
return new
|
|
1374
|
+
return new y.Vector3(n, e, t);
|
|
1375
1375
|
if (o === "yz")
|
|
1376
|
-
return new
|
|
1376
|
+
return new y.Vector3(e, n, t);
|
|
1377
1377
|
throw new Error(`Unsupported plane: ${o}`);
|
|
1378
1378
|
}
|
|
1379
1379
|
function So(n, t, e) {
|
|
1380
1380
|
if (Math.abs(t) < 1e-12)
|
|
1381
1381
|
return n >= e ? { x: 1, y: 0 } : { x: 0, y: 1 };
|
|
1382
1382
|
const i = n + e, r = n * e - t * t, s = Math.sqrt(Math.max(0, i * i * 0.25 - r)), a = i * 0.5 + s;
|
|
1383
|
-
let l = t,
|
|
1384
|
-
const h = Math.hypot(l,
|
|
1383
|
+
let l = t, u = a - n;
|
|
1384
|
+
const h = Math.hypot(l, u);
|
|
1385
1385
|
return h < 1e-12 ? { x: 1, y: 0 } : {
|
|
1386
1386
|
x: l / h,
|
|
1387
|
-
y:
|
|
1387
|
+
y: u / h
|
|
1388
1388
|
};
|
|
1389
1389
|
}
|
|
1390
1390
|
function vo(n, t = {}) {
|
|
@@ -1401,18 +1401,18 @@ function vo(n, t = {}) {
|
|
|
1401
1401
|
for (const B of i)
|
|
1402
1402
|
r += B.x, s += B.y, a += B.up;
|
|
1403
1403
|
r /= i.length, s /= i.length, a /= i.length;
|
|
1404
|
-
let l = 0,
|
|
1404
|
+
let l = 0, u = 0, h = 0;
|
|
1405
1405
|
for (const B of i) {
|
|
1406
1406
|
const L = B.x - r, N = B.y - s;
|
|
1407
|
-
l += L * L,
|
|
1407
|
+
l += L * L, u += L * N, h += N * N;
|
|
1408
1408
|
}
|
|
1409
|
-
l /= i.length,
|
|
1410
|
-
const d = So(l,
|
|
1409
|
+
l /= i.length, u /= i.length, h /= i.length;
|
|
1410
|
+
const d = So(l, u, h), c = {
|
|
1411
1411
|
x: -d.y,
|
|
1412
1412
|
y: d.x
|
|
1413
1413
|
}, f = [];
|
|
1414
1414
|
for (const B of i) {
|
|
1415
|
-
const L = B.x - r, N = B.y - s, C = L * d.x + N * d.y, R = L *
|
|
1415
|
+
const L = B.x - r, N = B.y - s, C = L * d.x + N * d.y, R = L * c.x + N * c.y;
|
|
1416
1416
|
f.push({
|
|
1417
1417
|
s: C,
|
|
1418
1418
|
t: R,
|
|
@@ -1421,15 +1421,15 @@ function vo(n, t = {}) {
|
|
|
1421
1421
|
}
|
|
1422
1422
|
f.sort((B, L) => B.s - L.s);
|
|
1423
1423
|
const w = f.length;
|
|
1424
|
-
let
|
|
1425
|
-
|
|
1426
|
-
const
|
|
1424
|
+
let x = Math.floor(w * o), P = Math.ceil(w * (1 - o)) - 1;
|
|
1425
|
+
x = Math.max(0, Math.min(w - 1, x)), P = Math.max(0, Math.min(w - 1, P));
|
|
1426
|
+
const M = f[x], g = f[P], m = (() => {
|
|
1427
1427
|
const B = f.map((N) => N.t).sort((N, C) => N - C), L = Math.floor(B.length / 2);
|
|
1428
1428
|
return B.length % 2 === 0 ? (B[L - 1] + B[L]) * 0.5 : B[L];
|
|
1429
1429
|
})(), p = (() => {
|
|
1430
1430
|
const B = f.map((N) => N.up).sort((N, C) => N - C), L = Math.floor(B.length / 2);
|
|
1431
1431
|
return B.length % 2 === 0 ? (B[L - 1] + B[L]) * 0.5 : B[L];
|
|
1432
|
-
})(), b =
|
|
1432
|
+
})(), b = M.s, z = g.s, v = m, S = m, V = p, D = p, _ = r + d.x * b + c.x * v, E = s + d.y * b + c.y * v, T = r + d.x * z + c.x * S, A = s + d.y * z + c.y * S, O = nn(_, E, V, e), I = nn(T, A, D, e);
|
|
1433
1433
|
return [O, I];
|
|
1434
1434
|
}
|
|
1435
1435
|
const wi = async (n, t, e, o, i) => {
|
|
@@ -1446,27 +1446,27 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1446
1446
|
if (!(!m.checkResults || m.checkResults.length <= 0)) {
|
|
1447
1447
|
for (let b = 0; b < m.checkResults.length; b++) {
|
|
1448
1448
|
let D = function(A) {
|
|
1449
|
-
for (;
|
|
1450
|
-
|
|
1449
|
+
for (; V[A] !== A; )
|
|
1450
|
+
V[A] = V[V[A]], A = V[A];
|
|
1451
1451
|
return A;
|
|
1452
1452
|
};
|
|
1453
|
-
const
|
|
1454
|
-
if (
|
|
1453
|
+
const z = m.checkResults[b];
|
|
1454
|
+
if (z.isDoor = !1, !z.originalVertices || z.originalVertices.length == 0)
|
|
1455
1455
|
continue;
|
|
1456
1456
|
const v = [];
|
|
1457
|
-
|
|
1457
|
+
z.originalVertices.forEach((A) => {
|
|
1458
1458
|
let O = [];
|
|
1459
1459
|
A.forEach((I) => {
|
|
1460
|
-
O.push(new
|
|
1460
|
+
O.push(new y.Vector3(I.x, I.y, I.z));
|
|
1461
1461
|
}), v.push(O);
|
|
1462
1462
|
});
|
|
1463
|
-
const S = v.length,
|
|
1463
|
+
const S = v.length, V = Array.from({ length: S }, (A, O) => O);
|
|
1464
1464
|
for (let A = 0; A < S; A++)
|
|
1465
1465
|
for (let O = A + 1; O < S; O++) {
|
|
1466
1466
|
const I = v[A], B = v[O];
|
|
1467
1467
|
if (I.some((N) => B.some((C) => N.equals(C)))) {
|
|
1468
1468
|
const N = D(A), C = D(O);
|
|
1469
|
-
N !== C && (
|
|
1469
|
+
N !== C && (V[N] = C);
|
|
1470
1470
|
}
|
|
1471
1471
|
}
|
|
1472
1472
|
const _ = /* @__PURE__ */ new Map();
|
|
@@ -1484,11 +1484,11 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1484
1484
|
});
|
|
1485
1485
|
const I = _.get(O);
|
|
1486
1486
|
let [B, L, N, C] = v[A];
|
|
1487
|
-
const R = new
|
|
1487
|
+
const R = new y.Vector3().add(B).add(L).add(N).add(C).multiplyScalar(0.25);
|
|
1488
1488
|
if (I.points.push(...v[A]), I.area += B.distanceTo(L) * B.distanceTo(C), I.originalVertices.push(v[A]), I.index = b, I.centerPts.push(R), E == -1 || T == -1) {
|
|
1489
|
-
let $ = new
|
|
1489
|
+
let $ = new y.Vector3().subVectors(B, L).normalize();
|
|
1490
1490
|
T = B.distanceTo(C), E = B.distanceTo(L);
|
|
1491
|
-
let X = oe($, new
|
|
1491
|
+
let X = oe($, new y.Vector3(0, 0, 1));
|
|
1492
1492
|
X && X.parallel && ([T, E] = [E, T]);
|
|
1493
1493
|
}
|
|
1494
1494
|
I.gridWidth = E, I.gridHeight = T;
|
|
@@ -1520,14 +1520,14 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1520
1520
|
if (p.isFindBeam = !1, p.category == "door") {
|
|
1521
1521
|
let b = [];
|
|
1522
1522
|
p.coordinatesByArea.coordinates.forEach((D) => {
|
|
1523
|
-
b.push(new
|
|
1523
|
+
b.push(new y.Vector3(D.x, D.y, D.z));
|
|
1524
1524
|
}), b[0].equals(b[b.length - 1]) && b.pop();
|
|
1525
|
-
let
|
|
1526
|
-
v >
|
|
1527
|
-
let S = ee(b[0], b[3], !0),
|
|
1525
|
+
let z = b[0].distanceTo(b[1]), v = b[0].distanceTo(b[3]);
|
|
1526
|
+
v > z && ([z, v] = [v, z], b = [b[0], b[3], b[2], b[1]]);
|
|
1527
|
+
let S = ee(b[0], b[3], !0), V = ee(b[1], b[2], !0);
|
|
1528
1528
|
a.push({
|
|
1529
1529
|
doorStartPt: S,
|
|
1530
|
-
doorEndPt:
|
|
1530
|
+
doorEndPt: V,
|
|
1531
1531
|
boxPoints: b,
|
|
1532
1532
|
minZ: p.coordinatesByArea.heightData.minZ,
|
|
1533
1533
|
maxZ: p.coordinatesByArea.heightData.maxZ,
|
|
@@ -1542,31 +1542,31 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1542
1542
|
const p = a[m];
|
|
1543
1543
|
for (let b = 0; b < n.length; b++) {
|
|
1544
1544
|
if (n[b].length < 0.5) continue;
|
|
1545
|
-
let
|
|
1545
|
+
let z = [];
|
|
1546
1546
|
const v = ee(n[b].start, n[b].end, !0);
|
|
1547
|
-
|
|
1547
|
+
z.push(v), z.push(ee(v, n[b].start, !0)), z.push(ee(v, n[b].end, !0));
|
|
1548
1548
|
let S = !1;
|
|
1549
|
-
const
|
|
1550
|
-
for (let D = 0; D <
|
|
1551
|
-
const _ =
|
|
1552
|
-
for (let T = 0, A =
|
|
1549
|
+
const V = p.boxPoints.length;
|
|
1550
|
+
for (let D = 0; D < z.length; D++) {
|
|
1551
|
+
const _ = z[D].x, E = z[D].y;
|
|
1552
|
+
for (let T = 0, A = V - 1; T < V; A = T++) {
|
|
1553
1553
|
const O = p.boxPoints[T].x, I = p.boxPoints[T].y, B = p.boxPoints[A].x, L = p.boxPoints[A].y;
|
|
1554
1554
|
I > E != L > E && _ < (B - O) * (E - I) / (L - I) + O && (S = !S);
|
|
1555
1555
|
}
|
|
1556
1556
|
if (S) break;
|
|
1557
1557
|
}
|
|
1558
1558
|
if (S) {
|
|
1559
|
-
let D = new
|
|
1559
|
+
let D = new y.Vector3(n[b].start.x, n[b].start.y, 0), _ = new y.Vector3(n[b].end.x, n[b].end.y, 0), E = p.doorStartPt.distanceTo(p.doorEndPt), T = D.distanceTo(_), A = Jt(p.doorStartPt, p.doorEndPt, D, _);
|
|
1560
1560
|
if (Math.abs(T - E) < 0.5 && A && A.angleDeg < 15) {
|
|
1561
|
-
p.doorStartPt = new
|
|
1561
|
+
p.doorStartPt = new y.Vector3(n[b].start.x, n[b].start.y, 0), p.doorEndPt = new y.Vector3(n[b].end.x, n[b].end.y, 0);
|
|
1562
1562
|
break;
|
|
1563
1563
|
} else if (Math.abs(T - E) > 1.3 && A && A.angleDeg < 15) {
|
|
1564
|
-
let O = ne(p.doorStartPt, p.doorEndPt, D, _, { parallelAngleMax:
|
|
1564
|
+
let O = ne(p.doorStartPt, p.doorEndPt, D, _, { parallelAngleMax: y.MathUtils.degToRad(15) }), I = p.doorStartPt.distanceTo(D), B = p.doorStartPt.distanceTo(_), L = p.doorEndPt.distanceTo(D), N = p.doorEndPt.distanceTo(_), C = I < 0.2 || B < 0.2 || L < 0.2 || N < 0.2;
|
|
1565
1565
|
if (O && O.type == "collinear_overlap" && O.maxPerpendicularDistance < 0.1 && !C) {
|
|
1566
1566
|
p.inWall = !0;
|
|
1567
1567
|
break;
|
|
1568
1568
|
} else {
|
|
1569
|
-
let R = new
|
|
1569
|
+
let R = new y.Line3(D, _), $ = R.closestPointToPoint(p.doorStartPt, !0, new y.Vector3()), X = R.closestPointToPoint(p.doorEndPt, !0, new y.Vector3()), ot = $.distanceTo(p.doorStartPt), K = X.distanceTo(p.doorEndPt);
|
|
1570
1570
|
if (ot < 0.1 || K < 0.1) {
|
|
1571
1571
|
p.inWall = !0;
|
|
1572
1572
|
break;
|
|
@@ -1577,20 +1577,20 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1577
1577
|
continue;
|
|
1578
1578
|
}
|
|
1579
1579
|
}
|
|
1580
|
-
let l = 0,
|
|
1581
|
-
const
|
|
1580
|
+
let l = 0, u = [], h = [], d = [];
|
|
1581
|
+
const c = [];
|
|
1582
1582
|
let f = 0.15;
|
|
1583
1583
|
for (let m = 0; m < n.length; m++) {
|
|
1584
1584
|
const p = n[m];
|
|
1585
1585
|
if (p.noDetection || (p.doorAndBeamData = [], !p.mergeCheckRegion || p.mergeCheckRegion.length == 0))
|
|
1586
1586
|
continue;
|
|
1587
1587
|
p.completePointAreaPercentage = -1;
|
|
1588
|
-
let b = new
|
|
1588
|
+
let b = new y.Box3();
|
|
1589
1589
|
b.setFromPoints(p.originalPoints);
|
|
1590
|
-
let
|
|
1590
|
+
let z = b.max.z;
|
|
1591
1591
|
b.min.z;
|
|
1592
|
-
const v = new
|
|
1593
|
-
let
|
|
1592
|
+
const v = new y.Vector3(p.start.x, p.start.y, p.start.z), S = new y.Vector3(p.end.x, p.end.y, p.end.z);
|
|
1593
|
+
let V = p.rooftopPz - p.start.z, D = 0;
|
|
1594
1594
|
for (const E of p.mergeCheckRegion) {
|
|
1595
1595
|
const { facePoints: T, boxArea: A, totalInPlaneNum: O } = co(
|
|
1596
1596
|
E.points,
|
|
@@ -1603,9 +1603,9 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1603
1603
|
T[0].distanceTo(T[1]);
|
|
1604
1604
|
let I = T[0].distanceTo(T[3]);
|
|
1605
1605
|
const B = E.gridHeight * (I / E.gridHeight / 3 * 2) + E.gridHeight / 2;
|
|
1606
|
-
let L = new
|
|
1607
|
-
const C = new
|
|
1608
|
-
let $ = new
|
|
1606
|
+
let L = new y.Vector3(T[0].x, T[0].y, T[0].z + B), N = new y.Vector3(T[1].x, T[1].y, T[1].z + B);
|
|
1607
|
+
const C = new y.Line3(L, N), R = [];
|
|
1608
|
+
let $ = new y.Vector3();
|
|
1609
1609
|
E.points.forEach((rt) => {
|
|
1610
1610
|
C.closestPointToPoint(rt, !0, $).distanceTo(rt) < E.gridHeight + 0.01 && R.push(rt);
|
|
1611
1611
|
});
|
|
@@ -1629,12 +1629,12 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1629
1629
|
const K = [];
|
|
1630
1630
|
for (let rt = 0; rt < X.length; rt++) {
|
|
1631
1631
|
const F = {
|
|
1632
|
-
lineSt: new
|
|
1633
|
-
lineEd: new
|
|
1632
|
+
lineSt: new y.Vector3(),
|
|
1633
|
+
lineEd: new y.Vector3(),
|
|
1634
1634
|
facePoints: []
|
|
1635
1635
|
};
|
|
1636
1636
|
let H = Se(X[rt]);
|
|
1637
|
-
Array.isArray(H) && H.length == 2 && (F.lineSt = H[0], F.lineEd = H[1], F.facePoints.push(new
|
|
1637
|
+
Array.isArray(H) && H.length == 2 && (F.lineSt = H[0], F.lineEd = H[1], F.facePoints.push(new y.Vector3(H[0].x, H[0].y, T[0].z)), F.facePoints.push(new y.Vector3(H[1].x, H[1].y, T[0].z)), F.facePoints.push(new y.Vector3(H[1].x, H[1].y, T[2].z)), F.facePoints.push(new y.Vector3(H[0].x, H[0].y, T[2].z)), K.push(F));
|
|
1638
1638
|
}
|
|
1639
1639
|
D += E.area;
|
|
1640
1640
|
let G = 0;
|
|
@@ -1642,7 +1642,7 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1642
1642
|
for (let rt = 0; rt < K.length; rt++) {
|
|
1643
1643
|
const F = K[rt];
|
|
1644
1644
|
let H = F.facePoints[0].distanceTo(F.facePoints[1]), Mt = F.facePoints[0].distanceTo(F.facePoints[3]), Zt = H / p.length * 100, qt = p.rooftopPz - F.facePoints[2].z;
|
|
1645
|
-
if (Mt < 1.5 ||
|
|
1645
|
+
if (Mt < 1.5 || z < F.facePoints[2].z || qt > V / 3 * 2)
|
|
1646
1646
|
continue;
|
|
1647
1647
|
let Rt = !1, _t = !1, Et = !1, Ft = [], tt = F.facePoints[2].clone(), lt = F.facePoints[3].clone(), W = F.facePoints[0].clone(), j = F.facePoints[1].clone(), Nt = !1, Tt = -1;
|
|
1648
1648
|
if (Math.abs(F.facePoints[0].z - p.start.z) < 0.25) {
|
|
@@ -1654,11 +1654,11 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1654
1654
|
if (Ut.forEach((Q) => {
|
|
1655
1655
|
Q.z >= tt.z ? at.push(Q) : Q.z <= W.z;
|
|
1656
1656
|
}), at.length > 10) {
|
|
1657
|
-
const Q = new
|
|
1658
|
-
let Gt = new
|
|
1657
|
+
const Q = new y.Vector3(p.start.x, p.start.y, 0), gt = new y.Vector3(p.end.x, p.end.y, 0), Pt = new y.Vector3().subVectors(Q, gt).normalize();
|
|
1658
|
+
let Gt = new y.Vector3(), ht = 1 / 0, Z = -1, k = !1, ft = !1;
|
|
1659
1659
|
for (let U = 0; U < n.length; U++) {
|
|
1660
1660
|
if (U == m) continue;
|
|
1661
|
-
const it = new
|
|
1661
|
+
const it = new y.Vector3(n[U].start.x, n[U].start.y, 0), dt = new y.Vector3(n[U].end.x, n[U].end.y, 0), Ct = te(Q, gt, it, dt);
|
|
1662
1662
|
let St = re(Q, gt, it, dt);
|
|
1663
1663
|
if (Ct != null) {
|
|
1664
1664
|
if (St && St.angle > 85) {
|
|
@@ -1671,22 +1671,22 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1671
1671
|
continue;
|
|
1672
1672
|
}
|
|
1673
1673
|
if (St && St.angle > 85) {
|
|
1674
|
-
const Y = new
|
|
1674
|
+
const Y = new y.Line3(it, dt).closestPointToPoint(Q, !0, Gt);
|
|
1675
1675
|
let pt = Jt(Q, gt, Y, Q);
|
|
1676
1676
|
if (!pt || pt.direction != "same") continue;
|
|
1677
1677
|
const et = Q.clone().addScaledVector(Pt, Vt), st = gt.clone().addScaledVector(Pt.clone().negate(), Vt);
|
|
1678
|
-
let xt = new
|
|
1678
|
+
let xt = new y.Vector3().subVectors(dt, it).normalize(), vt = it.clone().addScaledVector(xt.clone().negate(), 0.03), Bt = dt.clone().addScaledVector(xt, 0.03);
|
|
1679
1679
|
const wt = te(et, st, vt, Bt);
|
|
1680
1680
|
if (wt == null) continue;
|
|
1681
1681
|
let Xt = Q.distanceTo(wt.point);
|
|
1682
1682
|
Xt < ht && (ht = Xt, Z = U);
|
|
1683
1683
|
} else if (St && St.angle < 5) {
|
|
1684
|
-
const At = new
|
|
1684
|
+
const At = new y.Vector3(W.x, W.y, 0), Y = new y.Vector3(j.x, j.y, 0);
|
|
1685
1685
|
let pt = Lt(At, it), et = Lt(At, dt), st = Lt(Y, it), xt = Lt(Y, dt), vt = Jt(Q, gt, it, At), Bt = !1;
|
|
1686
1686
|
for (let wt = 0; wt < n[U].checkResults.length; wt++) {
|
|
1687
1687
|
let Xt = [];
|
|
1688
1688
|
for (let Kt = 0; Kt < n[U].checkResults[wt].allCenterPoints.length; Kt++)
|
|
1689
|
-
Xt.push(new
|
|
1689
|
+
Xt.push(new y.Vector3(
|
|
1690
1690
|
n[U].checkResults[wt].allCenterPoints[Kt].x,
|
|
1691
1691
|
n[U].checkResults[wt].allCenterPoints[Kt].y,
|
|
1692
1692
|
0
|
|
@@ -1722,11 +1722,11 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1722
1722
|
if (Ut.forEach((Q) => {
|
|
1723
1723
|
Q.z >= tt.z ? at.push(Q) : Q.z <= W.z;
|
|
1724
1724
|
}), at.length > 10) {
|
|
1725
|
-
const Q = new
|
|
1726
|
-
let Gt = new
|
|
1725
|
+
const Q = new y.Vector3(p.start.x, p.start.y, 0), gt = new y.Vector3(p.end.x, p.end.y, 0), Pt = new y.Vector3().subVectors(gt, Q).normalize();
|
|
1726
|
+
let Gt = new y.Vector3(), ht = 1 / 0, Z = -1, k = !1, ft = !1;
|
|
1727
1727
|
for (let U = 0; U < n.length; U++) {
|
|
1728
1728
|
if (U == m) continue;
|
|
1729
|
-
const it = new
|
|
1729
|
+
const it = new y.Vector3(n[U].start.x, n[U].start.y, 0), dt = new y.Vector3(n[U].end.x, n[U].end.y, 0), Ct = te(Q, gt, it, dt);
|
|
1730
1730
|
let St = re(Q, gt, it, dt);
|
|
1731
1731
|
if (Ct != null) {
|
|
1732
1732
|
if (St && St.angle > 85 && (Ct.point.distanceTo(Q), Ct.point.distanceTo(gt) < 0.3)) {
|
|
@@ -1736,22 +1736,22 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1736
1736
|
continue;
|
|
1737
1737
|
}
|
|
1738
1738
|
if (St && St.angle > 85) {
|
|
1739
|
-
const Y = new
|
|
1739
|
+
const Y = new y.Line3(it, dt).closestPointToPoint(gt, !0, Gt);
|
|
1740
1740
|
let pt = Jt(gt, Q, Y, gt);
|
|
1741
1741
|
if (!pt || pt.direction != "same") continue;
|
|
1742
1742
|
const et = Q.clone().addScaledVector(Pt.clone().negate(), Vt), st = gt.clone().addScaledVector(Pt, Vt);
|
|
1743
|
-
let xt = new
|
|
1743
|
+
let xt = new y.Vector3().subVectors(dt, it).normalize(), vt = it.clone().addScaledVector(xt.clone().negate(), 0.03), Bt = dt.clone().addScaledVector(xt, 0.03);
|
|
1744
1744
|
const wt = te(et, st, vt, Bt);
|
|
1745
1745
|
if (wt == null) continue;
|
|
1746
1746
|
let Xt = gt.distanceTo(wt.point);
|
|
1747
1747
|
Xt < ht && (ht = Xt, Z = U);
|
|
1748
1748
|
} else if (St && St.angle < 5) {
|
|
1749
|
-
const At = new
|
|
1749
|
+
const At = new y.Vector3(W.x, W.y, 0), Y = new y.Vector3(j.x, j.y, 0);
|
|
1750
1750
|
let pt = Lt(At, it), et = Lt(At, dt), st = Lt(Y, it), xt = Lt(Y, dt), vt = Jt(gt, Q, it, At), Bt = !1;
|
|
1751
1751
|
for (let wt = 0; wt < n[U].checkResults.length; wt++) {
|
|
1752
1752
|
let Xt = [];
|
|
1753
1753
|
for (let Kt = 0; Kt < n[U].checkResults[wt].allCenterPoints.length; Kt++)
|
|
1754
|
-
Xt.push(new
|
|
1754
|
+
Xt.push(new y.Vector3(
|
|
1755
1755
|
n[U].checkResults[wt].allCenterPoints[Kt].x,
|
|
1756
1756
|
n[U].checkResults[wt].allCenterPoints[Kt].y,
|
|
1757
1757
|
0
|
|
@@ -1784,18 +1784,18 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1784
1784
|
}
|
|
1785
1785
|
H = lt.distanceTo(tt);
|
|
1786
1786
|
}
|
|
1787
|
-
if (Zt < 85 && H > 0.3 || H > 0.7 && Mt >
|
|
1787
|
+
if (Zt < 85 && H > 0.3 || H > 0.7 && Mt > V - V / 3) {
|
|
1788
1788
|
let Wt = !1;
|
|
1789
1789
|
for (let J = 0; J < t.length; J++) {
|
|
1790
1790
|
let ct = J + 1;
|
|
1791
1791
|
if (ct >= t.length)
|
|
1792
1792
|
continue;
|
|
1793
|
-
let q = new
|
|
1793
|
+
let q = new y.Vector3(t[J].x, t[J].y, t[J].z), bt = new y.Vector3(t[ct].x, t[ct].y, t[ct].z);
|
|
1794
1794
|
if (te(
|
|
1795
|
-
new
|
|
1796
|
-
new
|
|
1797
|
-
new
|
|
1798
|
-
new
|
|
1795
|
+
new y.Vector3(q.x, q.y, 0),
|
|
1796
|
+
new y.Vector3(bt.x, bt.y, 0),
|
|
1797
|
+
new y.Vector3(F.facePoints[0].x, F.facePoints[0].y, 0),
|
|
1798
|
+
new y.Vector3(F.facePoints[1].x, F.facePoints[1].y, 0),
|
|
1799
1799
|
0.1
|
|
1800
1800
|
) != null) {
|
|
1801
1801
|
Wt = !0;
|
|
@@ -1803,13 +1803,13 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1803
1803
|
}
|
|
1804
1804
|
}
|
|
1805
1805
|
for (let J = 0; J < a.length; J++) {
|
|
1806
|
-
let ct = new
|
|
1806
|
+
let ct = new y.Vector3(a[J].doorStartPt.x, a[J].doorStartPt.y, 0), q = new y.Vector3(a[J].doorEndPt.x, a[J].doorEndPt.y, 0), bt = new y.Vector3(F.facePoints[0].x, F.facePoints[0].y, 0), Vt = new y.Vector3(F.facePoints[1].x, F.facePoints[1].y, 0), Ut = F.facePoints[2].z < a[J].maxZ || Math.abs(F.facePoints[2].z - a[J].maxZ) < 0.3;
|
|
1807
1807
|
if (Math.abs(F.facePoints[2].z - a[J].maxZ) > 0.2, Ut) {
|
|
1808
1808
|
let at = ne(ct.clone(), q.clone(), bt.clone(), Vt.clone(), {
|
|
1809
1809
|
distanceThreshold: 2
|
|
1810
1810
|
});
|
|
1811
1811
|
if (at && at.type == "collinear_gap") {
|
|
1812
|
-
let Q = ee(ct, q), gt = new
|
|
1812
|
+
let Q = ee(ct, q), gt = new y.Line3(new y.Vector3(p.start.x, p.start.y, 0), new y.Vector3(p.end.x, p.end.y, 0)), Pt = new y.Vector3(), Gt = gt.closestPointToPoint(Q, !0, Pt);
|
|
1813
1813
|
if (Q.distanceTo(Gt) < 0.15) {
|
|
1814
1814
|
let Z = bt.distanceTo(ct), k = Vt.distanceTo(ct);
|
|
1815
1815
|
if (Z > 0.25 && k > 0.25) {
|
|
@@ -1818,14 +1818,14 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1818
1818
|
continue;
|
|
1819
1819
|
}
|
|
1820
1820
|
_t = !0, Et = !0, Ft.push(a[J].index), a[J].isFind = !0, Tt = J, e[a[J].index].isFindBeam = !0;
|
|
1821
|
-
let ft = new
|
|
1821
|
+
let ft = new y.Vector3().subVectors(bt, Vt).normalize(), U = ct.distanceTo(q) - at.overlap;
|
|
1822
1822
|
k < Z && ft.negate(), Z > k ? (tt = F.facePoints[2].clone().addScaledVector(ft, U), lt = F.facePoints[3].clone(), W = lt.clone(), j = tt.clone(), W.z = j.z = F.facePoints[0].z) : (tt = F.facePoints[2].clone(), lt = F.facePoints[3].clone().addScaledVector(ft, U), W = lt.clone(), j = tt.clone(), W.z = j.z = F.facePoints[0].z);
|
|
1823
1823
|
}
|
|
1824
1824
|
} else if (at && at.type == "collinear_overlap" && at.maxPerpendicularDistance < 0.35) {
|
|
1825
1825
|
let Q = bt.distanceTo(Vt), gt = q.distanceTo(ct);
|
|
1826
1826
|
if (Math.abs(Q - at.overlap) < 0.25 || Math.abs(gt - at.overlap) < 0.25) {
|
|
1827
1827
|
if (gt > Q && Math.abs(gt - at.overlap) > 1) {
|
|
1828
|
-
let Pt = bt.distanceTo(ct), Gt = bt.distanceTo(q), ht = Vt.distanceTo(ct), Z = Vt.distanceTo(q), k = Pt < Gt ? Pt : Gt, ft = ht < Z ? ht : Z, U = new
|
|
1828
|
+
let Pt = bt.distanceTo(ct), Gt = bt.distanceTo(q), ht = Vt.distanceTo(ct), Z = Vt.distanceTo(q), k = Pt < Gt ? Pt : Gt, ft = ht < Z ? ht : Z, U = new y.Vector3().subVectors(bt, Vt).normalize(), it = gt - at.overlap;
|
|
1829
1829
|
k < ft ? (U.negate(), tt = F.facePoints[2].clone().addScaledVector(U, it), lt = F.facePoints[3].clone(), W = lt.clone(), j = tt.clone(), W.z = j.z = F.facePoints[0].z) : (tt = F.facePoints[2].clone(), lt = F.facePoints[3].clone().addScaledVector(U, it), W = lt.clone(), j = tt.clone(), W.z = j.z = F.facePoints[0].z);
|
|
1830
1830
|
}
|
|
1831
1831
|
_t = !0, Et = !0, Ft.push(a[J].index), a[J].isFind = !0, e[a[J].index].isFindBeam = !0, Tt = J;
|
|
@@ -1836,10 +1836,10 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1836
1836
|
if (!Et && H < 1.5)
|
|
1837
1837
|
for (let J = 0; J < a.length; J++) {
|
|
1838
1838
|
if (a[J].inWall) continue;
|
|
1839
|
-
let ct = new
|
|
1839
|
+
let ct = new y.Vector3(a[J].doorStartPt.x, a[J].doorStartPt.y, 0), q = new y.Vector3(a[J].doorEndPt.x, a[J].doorEndPt.y, 0), bt = new y.Vector3(F.facePoints[0].x, F.facePoints[0].y, 0), Vt = new y.Vector3(F.facePoints[1].x, F.facePoints[1].y, 0), Ut = new y.Vector3().subVectors(ct, q).normalize(), at = new y.Vector3().subVectors(bt, Vt).normalize(), Q = 0.25, gt = ct.clone().addScaledVector(Ut, Q), Pt = q.clone().addScaledVector(Ut.clone().negate(), Q), Gt = bt.clone().addScaledVector(at, Q), ht = Vt.clone().addScaledVector(at.clone().negate(), Q), Z = te(gt, Pt, Gt, ht), k = !0, ft = ct.distanceTo(bt), U = ct.distanceTo(Vt), it = q.distanceTo(bt), dt = q.distanceTo(Vt);
|
|
1840
1840
|
(ft < f || U < f || it < f || dt < f || Z) && k && (e[a[J].index].isFindBeam = !0, _t = !0, a[J].isFind = !0, Tt = J);
|
|
1841
1841
|
}
|
|
1842
|
-
(_t || Wt || Math.abs(Mt -
|
|
1842
|
+
(_t || Wt || Math.abs(Mt - V) > 0.1 && Mt > V / 2 && H > 0.3) && (Rt = !0);
|
|
1843
1843
|
}
|
|
1844
1844
|
}
|
|
1845
1845
|
if (Rt) {
|
|
@@ -1860,13 +1860,13 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1860
1860
|
end: j
|
|
1861
1861
|
});
|
|
1862
1862
|
{
|
|
1863
|
-
new
|
|
1864
|
-
let Z = new
|
|
1863
|
+
new y.PointsMaterial({ color: 65535, size: 0.01 });
|
|
1864
|
+
let Z = new y.Vector3().subVectors(W, j), k = new y.Vector3().subVectors(j, W), ft = 1 / 0, U = 1 / 0, it = W.clone(), dt = j.clone();
|
|
1865
1865
|
const Ct = [], St = [];
|
|
1866
|
-
let At = new
|
|
1866
|
+
let At = new y.Line3(tt, lt), Y = new y.Vector3(), pt = 999999;
|
|
1867
1867
|
if (p.originalPoints.forEach((et) => {
|
|
1868
1868
|
if (et.z - W.z < Mt / 2 + 0.1 && et.z - W.z > Mt / 2 - 0.1 && Ct.push(et), et.z > tt.z) {
|
|
1869
|
-
let st = At.closestPointToPoint(et, !0, Y), xt = new
|
|
1869
|
+
let st = At.closestPointToPoint(et, !0, Y), xt = new y.Vector3().subVectors(st, tt), vt = new y.Vector3().subVectors(st, lt), Bt = oe(Z, vt), wt = oe(k, xt);
|
|
1870
1870
|
Bt && Bt.parallel && !Bt.sameDirection && wt && wt.parallel && !wt.sameDirection && St.push(et);
|
|
1871
1871
|
}
|
|
1872
1872
|
}), Ct.length > 0) {
|
|
@@ -1874,7 +1874,7 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1874
1874
|
for (const st of et)
|
|
1875
1875
|
st.z = W.z;
|
|
1876
1876
|
et.forEach((st) => {
|
|
1877
|
-
let xt = new
|
|
1877
|
+
let xt = new y.Vector3(st.x, st.y, W.z), vt = new y.Vector3().subVectors(xt, j), Bt = new y.Vector3().subVectors(xt, W), wt = oe(Z, Bt), Xt = oe(k, vt);
|
|
1878
1878
|
if (wt && wt.parallel && wt.sameDirection) {
|
|
1879
1879
|
let $t = xt.distanceTo(W);
|
|
1880
1880
|
$t < ft && (ft = $t, it = xt);
|
|
@@ -1884,7 +1884,7 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1884
1884
|
}
|
|
1885
1885
|
});
|
|
1886
1886
|
}
|
|
1887
|
-
if (it.equals(W) || (W = it, lt = new
|
|
1887
|
+
if (it.equals(W) || (W = it, lt = new y.Vector3(W.x, W.y, lt.z)), dt.equals(j) || (j = dt, tt = new y.Vector3(j.x, j.y, tt.z)), St.length > 10) {
|
|
1888
1888
|
const { newOnLinePoints: et } = ze(lt, tt, St);
|
|
1889
1889
|
for (let st = 0; st < et.length; st++) {
|
|
1890
1890
|
let vt = At.closestPointToPoint(et[st], !0, Y).distanceTo(et[st]);
|
|
@@ -1912,10 +1912,10 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1912
1912
|
isDoor: _t,
|
|
1913
1913
|
isPullOutDoor: Et,
|
|
1914
1914
|
pcbDoorIndexs: Ft,
|
|
1915
|
-
beamNearWallVec: new
|
|
1916
|
-
}, bt = !1, Vt = new
|
|
1917
|
-
for (let Z = 0; Z <
|
|
1918
|
-
const k = n[
|
|
1915
|
+
beamNearWallVec: new y.Vector3(0, 0, 0)
|
|
1916
|
+
}, bt = !1, Vt = new y.Vector3(), Ut = new y.Vector3(), at = -1, Q = -1, gt = -1;
|
|
1917
|
+
for (let Z = 0; Z < u.length; Z++) {
|
|
1918
|
+
const k = n[u[Z].linesIndex].doorAndBeamData[u[Z].doorIndex];
|
|
1919
1919
|
if (k.nearId != -1)
|
|
1920
1920
|
continue;
|
|
1921
1921
|
let ft = Jt(
|
|
@@ -1925,38 +1925,38 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1925
1925
|
k.beamEnd.clone()
|
|
1926
1926
|
);
|
|
1927
1927
|
if (ft && ft.isParallel) {
|
|
1928
|
-
let U = tt.distanceTo(lt), it = k.beamStart.distanceTo(k.beamEnd), dt = new
|
|
1928
|
+
let U = tt.distanceTo(lt), it = k.beamStart.distanceTo(k.beamEnd), dt = new y.Line3(tt.clone(), lt.clone());
|
|
1929
1929
|
dt.start.z = 0, dt.end.z = 0;
|
|
1930
1930
|
let Ct = ee(k.beamStart, k.beamEnd, !0);
|
|
1931
|
-
it > U && (dt.start = new
|
|
1932
|
-
let St = new
|
|
1931
|
+
it > U && (dt.start = new y.Vector3(k.beamStart.x, k.beamStart.y, 0), dt.end = new y.Vector3(k.beamEnd.x, k.beamEnd.y, 0), Ct = ee(tt, lt, !0));
|
|
1932
|
+
let St = new y.Vector3(), At = dt.closestPointToPoint(Ct, !0, St), Y = At.distanceTo(Ct), pt = new y.Vector3().subVectors(Ct, At).normalize(), et = pt.clone().negate(), st = Ct.clone().addScaledVector(et, Y + 0.1), xt = te(dt.start, dt.end, Ct, st), vt = !_t && !k.isDoor && (U > it * 2 || it > U * 2);
|
|
1933
1933
|
if (Y < 0.4 && xt != null && !vt) {
|
|
1934
1934
|
k.nearId = l, q.nearId = k.id;
|
|
1935
1935
|
let Bt = 0.8;
|
|
1936
1936
|
(k.isDoor || q.isDoor) && (k.isDoor = !0, q.isDoor = !0);
|
|
1937
1937
|
const wt = Ft.some((Xt) => k.pcbDoorIndexs.includes(Xt));
|
|
1938
|
-
U < it ? U > Bt && !k.isPullOutDoor ? (k.beamStart = tt.clone().addScaledVector(et, Y), k.beamEnd = lt.clone().addScaledVector(et, Y), k.doorStart = W.clone().addScaledVector(et, Y), k.doorEnd = j.clone().addScaledVector(et, Y), k.doorHeight = q.doorHeight, k.beamStart.z = k.beamEnd.z = k.doorStart.z + k.doorHeight) : !Et || Et && k.isPullOutDoor && wt ? (q.beamStart = k.beamStart.clone().addScaledVector(pt, Y), q.beamEnd = k.beamEnd.clone().addScaledVector(pt, Y), q.doorStart = k.doorStart.clone().addScaledVector(pt, Y), q.doorEnd = k.doorEnd.clone().addScaledVector(pt, Y), q.doorHeight = k.doorHeight, q.beamStart.z = q.beamEnd.z = q.doorStart.z + q.doorHeight) : (k.beamStart = tt.clone().addScaledVector(et, Y), k.beamEnd = lt.clone().addScaledVector(et, Y), k.doorStart = W.clone().addScaledVector(et, Y), k.doorEnd = j.clone().addScaledVector(et, Y), k.doorHeight = q.doorHeight, k.beamStart.z = k.beamEnd.z = k.doorStart.z + k.doorHeight) : U > it && (it > Bt && !Et ? (q.beamStart = k.beamStart.clone().addScaledVector(et, Y), q.beamEnd = k.beamEnd.clone().addScaledVector(et, Y), q.doorStart = k.doorStart.clone().addScaledVector(et, Y), q.doorEnd = k.doorEnd.clone().addScaledVector(et, Y), q.doorHeight = k.doorHeight, q.beamStart.z = q.beamEnd.z = q.doorStart.z + q.doorHeight) : !k.isPullOutDoor || Et && k.isPullOutDoor && wt ? (k.beamStart = tt.clone().addScaledVector(pt, Y), k.beamEnd = lt.clone().addScaledVector(pt, Y), k.doorStart = W.clone().addScaledVector(pt, Y), k.doorEnd = j.clone().addScaledVector(pt, Y), k.doorHeight = q.doorHeight, k.beamStart.z = k.beamEnd.z = k.doorStart.z + k.doorHeight) : (q.beamStart = k.beamStart.clone().addScaledVector(et, Y), q.beamEnd = k.beamEnd.clone().addScaledVector(et, Y), q.doorStart = k.doorStart.clone().addScaledVector(et, Y), q.doorEnd = k.doorEnd.clone().addScaledVector(et, Y), q.doorHeight = k.doorHeight, q.beamStart.z = q.beamEnd.z = q.doorStart.z + q.doorHeight)), at = q.nearId, Vt = k.beamStart.clone(), Ut = k.beamEnd.clone(), bt = !0, Q =
|
|
1938
|
+
U < it ? U > Bt && !k.isPullOutDoor ? (k.beamStart = tt.clone().addScaledVector(et, Y), k.beamEnd = lt.clone().addScaledVector(et, Y), k.doorStart = W.clone().addScaledVector(et, Y), k.doorEnd = j.clone().addScaledVector(et, Y), k.doorHeight = q.doorHeight, k.beamStart.z = k.beamEnd.z = k.doorStart.z + k.doorHeight) : !Et || Et && k.isPullOutDoor && wt ? (q.beamStart = k.beamStart.clone().addScaledVector(pt, Y), q.beamEnd = k.beamEnd.clone().addScaledVector(pt, Y), q.doorStart = k.doorStart.clone().addScaledVector(pt, Y), q.doorEnd = k.doorEnd.clone().addScaledVector(pt, Y), q.doorHeight = k.doorHeight, q.beamStart.z = q.beamEnd.z = q.doorStart.z + q.doorHeight) : (k.beamStart = tt.clone().addScaledVector(et, Y), k.beamEnd = lt.clone().addScaledVector(et, Y), k.doorStart = W.clone().addScaledVector(et, Y), k.doorEnd = j.clone().addScaledVector(et, Y), k.doorHeight = q.doorHeight, k.beamStart.z = k.beamEnd.z = k.doorStart.z + k.doorHeight) : U > it && (it > Bt && !Et ? (q.beamStart = k.beamStart.clone().addScaledVector(et, Y), q.beamEnd = k.beamEnd.clone().addScaledVector(et, Y), q.doorStart = k.doorStart.clone().addScaledVector(et, Y), q.doorEnd = k.doorEnd.clone().addScaledVector(et, Y), q.doorHeight = k.doorHeight, q.beamStart.z = q.beamEnd.z = q.doorStart.z + q.doorHeight) : !k.isPullOutDoor || Et && k.isPullOutDoor && wt ? (k.beamStart = tt.clone().addScaledVector(pt, Y), k.beamEnd = lt.clone().addScaledVector(pt, Y), k.doorStart = W.clone().addScaledVector(pt, Y), k.doorEnd = j.clone().addScaledVector(pt, Y), k.doorHeight = q.doorHeight, k.beamStart.z = k.beamEnd.z = k.doorStart.z + k.doorHeight) : (q.beamStart = k.beamStart.clone().addScaledVector(et, Y), q.beamEnd = k.beamEnd.clone().addScaledVector(et, Y), q.doorStart = k.doorStart.clone().addScaledVector(et, Y), q.doorEnd = k.doorEnd.clone().addScaledVector(et, Y), q.doorHeight = k.doorHeight, q.beamStart.z = q.beamEnd.z = q.doorStart.z + q.doorHeight)), at = q.nearId, Vt = k.beamStart.clone(), Ut = k.beamEnd.clone(), bt = !0, Q = u[Z].linesIndex, gt = u[Z].doorIndex;
|
|
1939
1939
|
break;
|
|
1940
1940
|
}
|
|
1941
1941
|
}
|
|
1942
1942
|
}
|
|
1943
1943
|
let Pt = !1;
|
|
1944
1944
|
if (!bt) {
|
|
1945
|
-
let Z = new
|
|
1945
|
+
let Z = new y.Line3(W.clone(), j.clone());
|
|
1946
1946
|
for (let k = 0; k < n.length; k++) {
|
|
1947
1947
|
if (n[k].length < 0.5 || k == m) continue;
|
|
1948
|
-
let ft = new
|
|
1948
|
+
let ft = new y.Vector3(n[k].start.x, n[k].start.y, n[k].start.z), U = new y.Vector3(n[k].end.x, n[k].end.y, n[k].end.z), it = ne(ft, U, W, j), dt = Jt(ft, U, W, j);
|
|
1949
1949
|
const Ct = ho(n[k]);
|
|
1950
1950
|
if (it && it.maxPerpendicularDistance < 0.5) {
|
|
1951
1951
|
if (dt && dt.isParallel) {
|
|
1952
|
-
let st = new
|
|
1953
|
-
Bt && Bt.angle > 85 && (q.beamNearWallVec = new
|
|
1952
|
+
let st = new y.Line3(ft, U), xt = new y.Vector3(W.x, W.y, ft.z), vt = st.closestPointToPoint(xt, !0, new y.Vector3()), Bt = re(vt, xt, W, j);
|
|
1953
|
+
Bt && Bt.angle > 85 && (q.beamNearWallVec = new y.Vector3().subVectors(vt, xt).normalize());
|
|
1954
1954
|
}
|
|
1955
1955
|
const St = [];
|
|
1956
1956
|
n[k].originalPoints.forEach((st) => {
|
|
1957
|
-
st.z > W.z + 0.2 && st.z < W.z + Mt / 2 && St.push(new
|
|
1957
|
+
st.z > W.z + 0.2 && st.z < W.z + Mt / 2 && St.push(new y.Vector3(st.x, st.y, W.z));
|
|
1958
1958
|
});
|
|
1959
|
-
const At = new
|
|
1959
|
+
const At = new y.Vector3();
|
|
1960
1960
|
let Y = [], pt = [];
|
|
1961
1961
|
for (let st = 0; st < St.length; st++) {
|
|
1962
1962
|
let xt = Z.closestPointToPoint(St[st], !0, At);
|
|
@@ -1969,8 +1969,8 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1969
1969
|
if (et.length == 2) {
|
|
1970
1970
|
let st = et[0].distanceTo(et[1]);
|
|
1971
1971
|
if (Math.abs(st - Z.distance()) < 0.3) {
|
|
1972
|
-
let xt = new
|
|
1973
|
-
if (q.beamNearWallVec = new
|
|
1972
|
+
let xt = new y.Line3(ft, U), vt = new y.Vector3(W.x, W.y, ft.z), Bt = xt.closestPointToPoint(vt, !0, new y.Vector3());
|
|
1973
|
+
if (q.beamNearWallVec = new y.Vector3().subVectors(Bt, vt).normalize(), q.beamStart.z > Ct.maxZ - 0.03 && H > 1)
|
|
1974
1974
|
Pt = !0;
|
|
1975
1975
|
else if (Wt = !0, Tt != -1 && (e[a[Tt].index].isFindBeam = !1, a[Tt].isFind = !1), Q != -1 && gt != -1) {
|
|
1976
1976
|
const wt = n[Q].doorAndBeamData[gt];
|
|
@@ -1991,9 +1991,9 @@ const wi = async (n, t, e, o, i) => {
|
|
|
1991
1991
|
}
|
|
1992
1992
|
let Gt = !1;
|
|
1993
1993
|
if (at != -1)
|
|
1994
|
-
for (let Z = 0; Z <
|
|
1994
|
+
for (let Z = 0; Z < c.length && !(c[Z].length == 1 && (c[Z][0].id == l ? (c[Z].push({ id: at, beamStart: Vt, beamEnd: Ut }), Gt = !0) : c[Z][0].id == at && (c[Z].push({ id: l, beamStart: tt, beamEnd: lt }), Gt = !0), Gt)); Z++)
|
|
1995
1995
|
;
|
|
1996
|
-
Gt ||
|
|
1996
|
+
Gt || c.push([{ id: l, beamStart: tt, beamEnd: lt }]);
|
|
1997
1997
|
const ht = q.doorStart.distanceTo(q.doorEnd);
|
|
1998
1998
|
if (_t ? ct = "door" : ht > 1.8 ? ct = "beam" : ct = Pt && ht > 1 ? "beam" : "hole", q.type = ct, q.nearId != -1 && ct == "hole") {
|
|
1999
1999
|
let Z = !1;
|
|
@@ -2007,7 +2007,7 @@ const wi = async (n, t, e, o, i) => {
|
|
|
2007
2007
|
if (Z) break;
|
|
2008
2008
|
}
|
|
2009
2009
|
}
|
|
2010
|
-
if (p.doorAndBeamData.push(q),
|
|
2010
|
+
if (p.doorAndBeamData.push(q), u.push({
|
|
2011
2011
|
linesIndex: m,
|
|
2012
2012
|
doorIndex: p.doorAndBeamData.length - 1
|
|
2013
2013
|
}), l++, Et && H < 2) break;
|
|
@@ -2021,11 +2021,11 @@ const wi = async (n, t, e, o, i) => {
|
|
|
2021
2021
|
for (let m = 0; m < h.length; m++) {
|
|
2022
2022
|
let p = [];
|
|
2023
2023
|
for (let b = 0; b < n[h[m]].doorAndBeamData.length; b++) {
|
|
2024
|
-
let
|
|
2025
|
-
if (n[h[m]].doorAndBeamData[b].type === "beam" && n[h[m]].doorAndBeamData[b].beamNearWallVec.x == 0 && n[h[m]].doorAndBeamData[b].beamNearWallVec.y == 0 && n[h[m]].doorAndBeamData[b].beamNearWallVec.z == 0 && n[h[m]].doorAndBeamData[b].nearId == -1 && (
|
|
2024
|
+
let z = !1;
|
|
2025
|
+
if (n[h[m]].doorAndBeamData[b].type === "beam" && n[h[m]].doorAndBeamData[b].beamNearWallVec.x == 0 && n[h[m]].doorAndBeamData[b].beamNearWallVec.y == 0 && n[h[m]].doorAndBeamData[b].beamNearWallVec.z == 0 && n[h[m]].doorAndBeamData[b].nearId == -1 && (z = !0), !z) {
|
|
2026
2026
|
let v = n[h[m]].doorAndBeamData[b].doorStart.clone(), S = n[h[m]].doorAndBeamData[b].doorEnd.clone();
|
|
2027
2027
|
v.z = S.z = 0;
|
|
2028
|
-
let
|
|
2028
|
+
let V = v.distanceTo(S);
|
|
2029
2029
|
for (let D = 0; D < h.length; D++)
|
|
2030
2030
|
if (m != D)
|
|
2031
2031
|
for (let _ = 0; _ < n[h[D]].doorAndBeamData.length; _++) {
|
|
@@ -2033,49 +2033,49 @@ const wi = async (n, t, e, o, i) => {
|
|
|
2033
2033
|
E.z = T.z = 0, E.distanceTo(T);
|
|
2034
2034
|
let A = ne(v, S, E, T);
|
|
2035
2035
|
if (A.type == "collinear_overlap" && A.maxPerpendicularDistance < 0.2) {
|
|
2036
|
-
let O = new
|
|
2037
|
-
if (Math.abs(
|
|
2038
|
-
n[h[D]].doorAndBeamData[_].nearId == n[h[m]].doorAndBeamData[b].id && (n[h[D]].doorAndBeamData[_].nearId = -1),
|
|
2036
|
+
let O = new y.Line3(E, T), I = ee(v, S), B = O.closestPointToPoint(I, !0, new y.Vector3()), L = I.distanceTo(B);
|
|
2037
|
+
if (Math.abs(V - A.overlap) < 0.1 && L < 0.04) {
|
|
2038
|
+
n[h[D]].doorAndBeamData[_].nearId == n[h[m]].doorAndBeamData[b].id && (n[h[D]].doorAndBeamData[_].nearId = -1), z = !0;
|
|
2039
2039
|
break;
|
|
2040
2040
|
}
|
|
2041
2041
|
}
|
|
2042
2042
|
}
|
|
2043
2043
|
}
|
|
2044
|
-
|
|
2044
|
+
z || p.push(n[h[m]].doorAndBeamData[b]);
|
|
2045
2045
|
}
|
|
2046
2046
|
p.length != n[h[m]].doorAndBeamData.length && (n[h[m]].doorAndBeamData = p);
|
|
2047
2047
|
}
|
|
2048
|
-
let w = 0.65,
|
|
2048
|
+
let w = 0.65, x = 2, P = [], M = [];
|
|
2049
2049
|
for (let m = 0; m < a.length; m++) {
|
|
2050
2050
|
if (a[m].isFind || a[m].inWall)
|
|
2051
2051
|
continue;
|
|
2052
|
-
let p = new
|
|
2052
|
+
let p = new y.Vector3(a[m].doorStartPt.x, a[m].doorStartPt.y, 0), b = new y.Vector3(a[m].doorEndPt.x, a[m].doorEndPt.y, 0), z = new y.Vector3().subVectors(p, b).normalize();
|
|
2053
2053
|
for (let v = 0; v < n.length; v++) {
|
|
2054
2054
|
if (n[v].length < 0.7 || n[v].completePointAreaPercentage > 60)
|
|
2055
2055
|
continue;
|
|
2056
|
-
let S = new
|
|
2056
|
+
let S = new y.Vector3(n[v].start.x, n[v].start.y, 0), V = new y.Vector3(n[v].end.x, n[v].end.y, 0), D = new y.Vector3().subVectors(S, V).normalize(), _ = 0.3, E = p.clone().addScaledVector(z, _), T = b.clone().addScaledVector(z.clone().negate(), _), A = S.clone().addScaledVector(D, _), O = V.clone().addScaledVector(D.clone().negate(), _);
|
|
2057
2057
|
te(E, T, A, O);
|
|
2058
2058
|
let I = Jt(
|
|
2059
2059
|
E,
|
|
2060
2060
|
T,
|
|
2061
2061
|
A,
|
|
2062
2062
|
O
|
|
2063
|
-
), B = p.distanceTo(S) > b.distanceTo(S) ? b : p, L = B.distanceTo(S), N = B.distanceTo(
|
|
2063
|
+
), B = p.distanceTo(S) > b.distanceTo(S) ? b : p, L = B.distanceTo(S), N = B.distanceTo(V);
|
|
2064
2064
|
if ((L < f || N < f) && I && !I.isParallel) {
|
|
2065
|
-
let R = p.distanceTo(S), $ = p.distanceTo(
|
|
2065
|
+
let R = p.distanceTo(S), $ = p.distanceTo(V), X = R < $ ? S : V, ot = !1;
|
|
2066
2066
|
for (let K = 0; K < n.length; K++) {
|
|
2067
|
-
if (K == v ||
|
|
2067
|
+
if (K == v || P.includes(K) || n[K].length < 0.7)
|
|
2068
2068
|
continue;
|
|
2069
|
-
let G = new
|
|
2070
|
-
if (Rt != null && (_t = Rt.point.distanceTo(S) < f || Rt.point.distanceTo(
|
|
2071
|
-
let Et = new
|
|
2069
|
+
let G = new y.Vector3(n[K].start.x, n[K].start.y, 0), ut = new y.Vector3(n[K].end.x, n[K].end.y, 0), rt = new y.Vector3().subVectors(G, ut).normalize(), F = rt.clone().negate(), H = G.clone().addScaledVector(rt, 5), Mt = ut.clone().addScaledVector(F, 5), Zt = re(S, V, G, ut), qt = ne(S, V, G, ut), Rt = te(S, V, H, Mt), _t = !0;
|
|
2070
|
+
if (Rt != null && (_t = Rt.point.distanceTo(S) < f || Rt.point.distanceTo(V) < f), (Zt && Zt.angle > 85 || qt && qt.type == "collinear_gap") && _t) {
|
|
2071
|
+
let Et = new y.Line3(S, V), Ft = new y.Vector3(), tt = Et.closestPointToPoint(G, !0, Ft), lt = Et.closestPointToPoint(ut, !0, Ft), W = tt.distanceTo(G), j = lt.distanceTo(ut), Nt, Tt;
|
|
2072
2072
|
if (W > j && j > w)
|
|
2073
2073
|
Nt = ut, Tt = lt;
|
|
2074
2074
|
else if (W < j && W > w)
|
|
2075
2075
|
Nt = G, Tt = tt;
|
|
2076
2076
|
else
|
|
2077
2077
|
continue;
|
|
2078
|
-
if (W = X.distanceTo(G), j = X.distanceTo(ut), W >
|
|
2078
|
+
if (W = X.distanceTo(G), j = X.distanceTo(ut), W > x && j > x)
|
|
2079
2079
|
continue;
|
|
2080
2080
|
let Wt = Jt(Nt, Tt, G, ut), J = Jt(Nt, Tt, E, T);
|
|
2081
2081
|
if (J && J.isParallel || !Wt || !Wt.isParallel)
|
|
@@ -2085,8 +2085,8 @@ const wi = async (n, t, e, o, i) => {
|
|
|
2085
2085
|
continue;
|
|
2086
2086
|
Nt.z = Tt.z = n[K].start.z;
|
|
2087
2087
|
let q = !1;
|
|
2088
|
-
for (let at = 0; at <
|
|
2089
|
-
let Q = ne(
|
|
2088
|
+
for (let at = 0; at < M.length; at++) {
|
|
2089
|
+
let Q = ne(M[at].start, M[at].end, Nt, Tt);
|
|
2090
2090
|
if (Q && Q.type == "collinear_overlap" && Q.maxPerpendicularDistance < 0.2) {
|
|
2091
2091
|
q = !0;
|
|
2092
2092
|
break;
|
|
@@ -2096,7 +2096,7 @@ const wi = async (n, t, e, o, i) => {
|
|
|
2096
2096
|
continue;
|
|
2097
2097
|
for (let at = 0; at < n.length; at++) {
|
|
2098
2098
|
if (n[at].length < 0.5) continue;
|
|
2099
|
-
let Q = new
|
|
2099
|
+
let Q = new y.Vector3(n[at].start.x, n[at].start.y, n[at].start.z), gt = new y.Vector3(n[at].end.x, n[at].end.y, n[at].end.z), Pt = ne(Q, gt, Nt, Tt);
|
|
2100
2100
|
if (Pt && Pt.type == "collinear_overlap" && Pt.maxPerpendicularDistance < 0.1) {
|
|
2101
2101
|
q = !0;
|
|
2102
2102
|
break;
|
|
@@ -2104,10 +2104,10 @@ const wi = async (n, t, e, o, i) => {
|
|
|
2104
2104
|
}
|
|
2105
2105
|
if (q)
|
|
2106
2106
|
continue;
|
|
2107
|
-
|
|
2107
|
+
M.push({
|
|
2108
2108
|
start: Nt,
|
|
2109
2109
|
end: Tt
|
|
2110
|
-
}),
|
|
2110
|
+
}), P.push(K);
|
|
2111
2111
|
let bt = n[K].rooftopPz - n[K].start.z, Vt = n[v].rooftopPz - n[v].start.z, Ut = bt < Vt ? bt : Vt;
|
|
2112
2112
|
n[K].doorAndBeamData || (n[K].doorAndBeamData = []), n[K].doorAndBeamData.push({
|
|
2113
2113
|
id: l,
|
|
@@ -2120,8 +2120,8 @@ const wi = async (n, t, e, o, i) => {
|
|
|
2120
2120
|
nearId: -1,
|
|
2121
2121
|
type: "onlyDoor",
|
|
2122
2122
|
isDoor: !0,
|
|
2123
|
-
beamNearWallVec: new
|
|
2124
|
-
}), e[a[m].index].isFindBeam = !0, e[a[m].index].isFindOnlyDoor = !0,
|
|
2123
|
+
beamNearWallVec: new y.Vector3(0, 0, 0)
|
|
2124
|
+
}), e[a[m].index].isFindBeam = !0, e[a[m].index].isFindOnlyDoor = !0, c.push([{ id: l, beamStart: Nt, beamEnd: Tt }]), l++, ot = !0;
|
|
2125
2125
|
break;
|
|
2126
2126
|
}
|
|
2127
2127
|
}
|
|
@@ -2132,7 +2132,7 @@ const wi = async (n, t, e, o, i) => {
|
|
|
2132
2132
|
let g = [];
|
|
2133
2133
|
for (let m = 0; m < n.length; m++)
|
|
2134
2134
|
n[m].isLine2 || g.push(n[m]), n[m].isLine2 && n[m].doorAndBeamData.length != 0 && g.push(n[m]);
|
|
2135
|
-
return n.length = 0, n.push(...g), { lines: n, beamGroup:
|
|
2135
|
+
return n.length = 0, n.push(...g), { lines: n, beamGroup: c };
|
|
2136
2136
|
}, bi = (n, t) => {
|
|
2137
2137
|
if (!n || n.length <= 0) return;
|
|
2138
2138
|
let e = {
|
|
@@ -2141,54 +2141,54 @@ const wi = async (n, t, e, o, i) => {
|
|
|
2141
2141
|
}, o = /* @__PURE__ */ new Set(), i = 0.2, r = 1.5, s = 0.15, a = 2;
|
|
2142
2142
|
if (!n[0].uuid) {
|
|
2143
2143
|
let l = 1e4;
|
|
2144
|
-
for (let
|
|
2145
|
-
n[
|
|
2144
|
+
for (let u = 0; u < n.length; u++)
|
|
2145
|
+
n[u].uuid = l++;
|
|
2146
2146
|
}
|
|
2147
2147
|
for (let l = 0; l < n.length; l++) {
|
|
2148
|
-
let
|
|
2149
|
-
if (o.has(n[l].uuid) ||
|
|
2148
|
+
let u = n[l].length;
|
|
2149
|
+
if (o.has(n[l].uuid) || u < i || u > r)
|
|
2150
2150
|
continue;
|
|
2151
|
-
let h = [], d = new
|
|
2152
|
-
new
|
|
2151
|
+
let h = [], d = new y.Vector3(n[l].start.x, n[l].start.y, n[l].start.z), c = new y.Vector3(n[l].end.x, n[l].end.y, n[l].end.z), w = new y.Vector3().subVectors(c, d).normalize().clone().negate(), x = new y.Vector3(), P = new y.Vector3(), M = new y.Vector3();
|
|
2152
|
+
new y.Vector3();
|
|
2153
2153
|
for (let g = 0; g < n.length; g++) {
|
|
2154
2154
|
let m = n[g].length;
|
|
2155
2155
|
if (g == l || m < i || m > r)
|
|
2156
2156
|
continue;
|
|
2157
|
-
let p = new
|
|
2158
|
-
if (!
|
|
2157
|
+
let p = new y.Vector3(n[g].start.x, n[g].start.y, n[g].start.z), b = new y.Vector3(n[g].end.x, n[g].end.y, n[g].end.z), z = re(d, c, p, b);
|
|
2158
|
+
if (!z || z.angle < 85)
|
|
2159
2159
|
continue;
|
|
2160
|
-
let v = kt(p, d), S = kt(p,
|
|
2161
|
-
if (!(!v && !S && !
|
|
2162
|
-
v || S ? (
|
|
2160
|
+
let v = kt(p, d), S = kt(p, c), V = kt(b, d), D = kt(b, c);
|
|
2161
|
+
if (!(!v && !S && !V && !D)) {
|
|
2162
|
+
v || S ? (x = p.clone(), P = b.clone()) : (x = b.clone(), P = p.clone()), M = new y.Vector3().subVectors(P, x).normalize(), M.clone().negate();
|
|
2163
2163
|
for (let _ = 0; _ < n.length; _++) {
|
|
2164
2164
|
let E = n[_].length;
|
|
2165
2165
|
if (_ == l || _ == g || E < i || E > r)
|
|
2166
2166
|
continue;
|
|
2167
|
-
let T = new
|
|
2167
|
+
let T = new y.Vector3(n[_].start.x, n[_].start.y, n[_].start.z), A = new y.Vector3(n[_].end.x, n[_].end.y, n[_].end.z), O = re(p, b, T, A);
|
|
2168
2168
|
if (!O || O.angle < 85)
|
|
2169
2169
|
continue;
|
|
2170
|
-
let I = kt(T,
|
|
2170
|
+
let I = kt(T, P), B = kt(A, P);
|
|
2171
2171
|
if (!I && !B) continue;
|
|
2172
|
-
new
|
|
2173
|
-
let L = new
|
|
2174
|
-
I ? (N = new
|
|
2172
|
+
new y.Vector3();
|
|
2173
|
+
let L = new y.Vector3(), N = new y.Vector3();
|
|
2174
|
+
I ? (N = new y.Vector3().subVectors(A, T).normalize(), T.clone(), L = A.clone()) : (N = new y.Vector3().subVectors(T, A).normalize(), A.clone(), L = T.clone());
|
|
2175
2175
|
let C = oe(w, N, 0.1);
|
|
2176
2176
|
if (!(!C || !C.parallel || !C.sameDirection)) {
|
|
2177
2177
|
for (let R = 0; R < n.length; R++) {
|
|
2178
2178
|
let $ = n[R].length;
|
|
2179
2179
|
if (R == l || R == g || R == _ || $ < i || $ > r)
|
|
2180
2180
|
continue;
|
|
2181
|
-
let X = new
|
|
2181
|
+
let X = new y.Vector3(n[R].start.x, n[R].start.y, n[R].start.z), ot = new y.Vector3(n[R].end.x, n[R].end.y, n[R].end.z), K = re(X, ot, T, A);
|
|
2182
2182
|
if (!K || K.angle < 85)
|
|
2183
2183
|
continue;
|
|
2184
2184
|
let G = kt(X, L), ut = kt(ot, L);
|
|
2185
2185
|
if (!G && !ut) continue;
|
|
2186
|
-
new
|
|
2187
|
-
let rt = new
|
|
2186
|
+
new y.Vector3();
|
|
2187
|
+
let rt = new y.Vector3();
|
|
2188
2188
|
G ? (X.clone(), rt = ot.clone()) : (ot.clone(), rt = X.clone());
|
|
2189
|
-
let F = kt(rt, d), H = kt(rt,
|
|
2189
|
+
let F = kt(rt, d), H = kt(rt, c);
|
|
2190
2190
|
if (!F && !H) continue;
|
|
2191
|
-
let Mt =
|
|
2191
|
+
let Mt = u * m;
|
|
2192
2192
|
if (!(Mt < s || Mt > a)) {
|
|
2193
2193
|
h = [n[l].uuid, n[g].uuid, n[_].uuid, n[R].uuid];
|
|
2194
2194
|
break;
|
|
@@ -2205,81 +2205,81 @@ const wi = async (n, t, e, o, i) => {
|
|
|
2205
2205
|
h.length == 4 && (h.forEach((g) => o.add(g)), e.rectangles.push(h));
|
|
2206
2206
|
}
|
|
2207
2207
|
for (let l = 0; l < n.length; l++) {
|
|
2208
|
-
let
|
|
2209
|
-
if (o.has(n[l].uuid) ||
|
|
2208
|
+
let u = n[l].length;
|
|
2209
|
+
if (o.has(n[l].uuid) || u < i || u > r)
|
|
2210
2210
|
continue;
|
|
2211
2211
|
let h = {
|
|
2212
2212
|
indexs: [],
|
|
2213
2213
|
missingEdge: {
|
|
2214
|
-
start: new
|
|
2215
|
-
end: new
|
|
2214
|
+
start: new y.Vector3(),
|
|
2215
|
+
end: new y.Vector3()
|
|
2216
2216
|
}
|
|
2217
|
-
}, d = new
|
|
2218
|
-
for (let
|
|
2219
|
-
if (
|
|
2217
|
+
}, d = new y.Vector3(n[l].start.x, n[l].start.y, n[l].start.z), c = new y.Vector3(n[l].end.x, n[l].end.y, n[l].end.z), f = !0, w = !0;
|
|
2218
|
+
for (let M = 0; M < n.length; M++) {
|
|
2219
|
+
if (M == l || n[M].length < i)
|
|
2220
2220
|
continue;
|
|
2221
|
-
let g = new
|
|
2222
|
-
if (p || b ? f = !1 : (
|
|
2221
|
+
let g = new y.Vector3(n[M].start.x, n[M].start.y, n[M].start.z), m = new y.Vector3(n[M].end.x, n[M].end.y, n[M].end.z), p = kt(g, d), b = kt(m, d), z = kt(g, c), v = kt(m, c);
|
|
2222
|
+
if (p || b ? f = !1 : (z || v) && (w = !1), !f && !w) break;
|
|
2223
2223
|
}
|
|
2224
2224
|
if (!f && !w) continue;
|
|
2225
|
-
let
|
|
2226
|
-
f || ([d,
|
|
2227
|
-
let
|
|
2228
|
-
for (let
|
|
2229
|
-
let g = n[
|
|
2230
|
-
if (
|
|
2225
|
+
let x = new y.Vector3();
|
|
2226
|
+
f || ([d, c] = [c, d]), x = new y.Vector3().subVectors(c, d).normalize();
|
|
2227
|
+
let P = x.clone().negate();
|
|
2228
|
+
for (let M = 0; M < n.length; M++) {
|
|
2229
|
+
let g = n[M].length;
|
|
2230
|
+
if (M == l || o.has(M) || g < i || g > r)
|
|
2231
2231
|
continue;
|
|
2232
|
-
let m = new
|
|
2232
|
+
let m = new y.Vector3(n[M].start.x, n[M].start.y, n[M].start.z), p = new y.Vector3(n[M].end.x, n[M].end.y, n[M].end.z), b = re(d, c, m, p);
|
|
2233
2233
|
if (!b || b.angle < 85)
|
|
2234
2234
|
continue;
|
|
2235
|
-
let
|
|
2236
|
-
if (!
|
|
2237
|
-
new
|
|
2238
|
-
let S = new
|
|
2239
|
-
|
|
2240
|
-
for (let
|
|
2241
|
-
let D = n[
|
|
2242
|
-
if (
|
|
2235
|
+
let z = kt(m, c), v = kt(p, c);
|
|
2236
|
+
if (!z && !v) continue;
|
|
2237
|
+
new y.Vector3();
|
|
2238
|
+
let S = new y.Vector3();
|
|
2239
|
+
z ? (m.clone(), S = p.clone()) : (p.clone(), S = m.clone());
|
|
2240
|
+
for (let V = 0; V < n.length; V++) {
|
|
2241
|
+
let D = n[V].length;
|
|
2242
|
+
if (V == l || V == M || o.has(V) || D < i || D > r)
|
|
2243
2243
|
continue;
|
|
2244
|
-
let _ = new
|
|
2244
|
+
let _ = new y.Vector3(n[V].start.x, n[V].start.y, n[V].start.z), E = new y.Vector3(n[V].end.x, n[V].end.y, n[V].end.z), T = re(m, p, _, E);
|
|
2245
2245
|
if (!T || T.angle < 85)
|
|
2246
2246
|
continue;
|
|
2247
2247
|
let A = kt(_, S), O = kt(E, S);
|
|
2248
2248
|
if (!A && !O) continue;
|
|
2249
|
-
let I = new
|
|
2249
|
+
let I = new y.Vector3(), B = new y.Vector3();
|
|
2250
2250
|
A ? (I = _.clone(), B = E.clone()) : (I = E.clone(), B = _.clone());
|
|
2251
|
-
let L = new
|
|
2251
|
+
let L = new y.Vector3().subVectors(B, I).normalize(), N = oe(P, L, 0.1);
|
|
2252
2252
|
if (!N || !N.parallel || !N.sameDirection) continue;
|
|
2253
2253
|
let C = !0, R = !0;
|
|
2254
2254
|
for (let X = 0; X < n.length; X++) {
|
|
2255
|
-
if (X ==
|
|
2256
|
-
let ot = new
|
|
2255
|
+
if (X == V || n[X].length < i) continue;
|
|
2256
|
+
let ot = new y.Vector3(n[X].start.x, n[X].start.y, n[X].start.z), K = new y.Vector3(n[X].end.x, n[X].end.y, n[X].end.z), G = kt(ot, _), ut = kt(K, _), rt = kt(ot, E), F = kt(K, E);
|
|
2257
2257
|
if (G || ut ? C = !1 : (rt || F) && (R = !1), !C && !R) break;
|
|
2258
2258
|
}
|
|
2259
2259
|
if (!C && !R) continue;
|
|
2260
|
-
let $ =
|
|
2260
|
+
let $ = u * g;
|
|
2261
2261
|
if (!($ < s || $ > a)) {
|
|
2262
|
-
h.indexs = [n[l].uuid, n[
|
|
2262
|
+
h.indexs = [n[l].uuid, n[M].uuid, n[V].uuid], h.missingEdge.start = B, h.missingEdge.end = d;
|
|
2263
2263
|
break;
|
|
2264
2264
|
}
|
|
2265
2265
|
}
|
|
2266
2266
|
if (h.indexs.length == 3) break;
|
|
2267
2267
|
}
|
|
2268
|
-
h.indexs.length == 3 && (h.indexs.forEach((
|
|
2268
|
+
h.indexs.length == 3 && (h.indexs.forEach((M) => o.add(M)), e.threeEdgeRect.push(h));
|
|
2269
2269
|
}
|
|
2270
2270
|
return e;
|
|
2271
2271
|
}, ae = 11102230246251565e-32, Yt = 134217729, Do = (3 + 8 * ae) * ae;
|
|
2272
2272
|
function qe(n, t, e, o, i) {
|
|
2273
|
-
let r, s, a, l,
|
|
2274
|
-
h >
|
|
2273
|
+
let r, s, a, l, u = t[0], h = o[0], d = 0, c = 0;
|
|
2274
|
+
h > u == h > -u ? (r = u, u = t[++d]) : (r = h, h = o[++c]);
|
|
2275
2275
|
let f = 0;
|
|
2276
|
-
if (d < n &&
|
|
2277
|
-
for (h >
|
|
2278
|
-
h >
|
|
2276
|
+
if (d < n && c < e)
|
|
2277
|
+
for (h > u == h > -u ? (s = u + r, a = r - (s - u), u = t[++d]) : (s = h + r, a = r - (s - h), h = o[++c]), r = s, a !== 0 && (i[f++] = a); d < n && c < e; )
|
|
2278
|
+
h > u == h > -u ? (s = r + u, l = s - r, a = r - (s - l) + (u - l), u = t[++d]) : (s = r + h, l = s - r, a = r - (s - l) + (h - l), h = o[++c]), r = s, a !== 0 && (i[f++] = a);
|
|
2279
2279
|
for (; d < n; )
|
|
2280
|
-
s = r +
|
|
2281
|
-
for (;
|
|
2282
|
-
s = r + h, l = s - r, a = r - (s - l) + (h - l), h = o[++
|
|
2280
|
+
s = r + u, l = s - r, a = r - (s - l) + (u - l), u = t[++d], r = s, a !== 0 && (i[f++] = a);
|
|
2281
|
+
for (; c < e; )
|
|
2282
|
+
s = r + h, l = s - r, a = r - (s - l) + (h - l), h = o[++c], r = s, a !== 0 && (i[f++] = a);
|
|
2283
2283
|
return (r !== 0 || f === 0) && (i[f++] = r), f;
|
|
2284
2284
|
}
|
|
2285
2285
|
function _o(n, t) {
|
|
@@ -2292,22 +2292,22 @@ function Ve(n) {
|
|
|
2292
2292
|
}
|
|
2293
2293
|
const Eo = (3 + 16 * ae) * ae, To = (2 + 12 * ae) * ae, Ao = (9 + 64 * ae) * ae * ae, me = Ve(4), on = Ve(8), rn = Ve(12), sn = Ve(16), jt = Ve(4);
|
|
2294
2294
|
function Bo(n, t, e, o, i, r, s) {
|
|
2295
|
-
let a, l,
|
|
2296
|
-
const
|
|
2297
|
-
p =
|
|
2295
|
+
let a, l, u, h, d, c, f, w, x, P, M, g, m, p, b, z, v, S;
|
|
2296
|
+
const V = n - i, D = e - i, _ = t - r, E = o - r;
|
|
2297
|
+
p = V * E, c = Yt * V, f = c - (c - V), w = V - f, c = Yt * E, x = c - (c - E), P = E - x, b = w * P - (p - f * x - w * x - f * P), z = _ * D, c = Yt * _, f = c - (c - _), w = _ - f, c = Yt * D, x = c - (c - D), P = D - x, v = w * P - (z - f * x - w * x - f * P), M = b - v, d = b - M, me[0] = b - (M + d) + (d - v), g = p + M, d = g - p, m = p - (g - d) + (M - d), M = m - z, d = m - M, me[1] = m - (M + d) + (d - z), S = g + M, d = S - g, me[2] = g - (S - d) + (M - d), me[3] = S;
|
|
2298
2298
|
let T = _o(4, me), A = To * s;
|
|
2299
|
-
if (T >= A || -T >= A || (d = n -
|
|
2300
|
-
p = a * E,
|
|
2299
|
+
if (T >= A || -T >= A || (d = n - V, a = n - (V + d) + (d - i), d = e - D, u = e - (D + d) + (d - i), d = t - _, l = t - (_ + d) + (d - r), d = o - E, h = o - (E + d) + (d - r), a === 0 && l === 0 && u === 0 && h === 0) || (A = Ao * s + Do * Math.abs(T), T += V * h + E * a - (_ * u + D * l), T >= A || -T >= A)) return T;
|
|
2300
|
+
p = a * E, c = Yt * a, f = c - (c - a), w = a - f, c = Yt * E, x = c - (c - E), P = E - x, b = w * P - (p - f * x - w * x - f * P), z = l * D, c = Yt * l, f = c - (c - l), w = l - f, c = Yt * D, x = c - (c - D), P = D - x, v = w * P - (z - f * x - w * x - f * P), M = b - v, d = b - M, jt[0] = b - (M + d) + (d - v), g = p + M, d = g - p, m = p - (g - d) + (M - d), M = m - z, d = m - M, jt[1] = m - (M + d) + (d - z), S = g + M, d = S - g, jt[2] = g - (S - d) + (M - d), jt[3] = S;
|
|
2301
2301
|
const O = qe(4, me, 4, jt, on);
|
|
2302
|
-
p =
|
|
2302
|
+
p = V * h, c = Yt * V, f = c - (c - V), w = V - f, c = Yt * h, x = c - (c - h), P = h - x, b = w * P - (p - f * x - w * x - f * P), z = _ * u, c = Yt * _, f = c - (c - _), w = _ - f, c = Yt * u, x = c - (c - u), P = u - x, v = w * P - (z - f * x - w * x - f * P), M = b - v, d = b - M, jt[0] = b - (M + d) + (d - v), g = p + M, d = g - p, m = p - (g - d) + (M - d), M = m - z, d = m - M, jt[1] = m - (M + d) + (d - z), S = g + M, d = S - g, jt[2] = g - (S - d) + (M - d), jt[3] = S;
|
|
2303
2303
|
const I = qe(O, on, 4, jt, rn);
|
|
2304
|
-
p = a * h,
|
|
2304
|
+
p = a * h, c = Yt * a, f = c - (c - a), w = a - f, c = Yt * h, x = c - (c - h), P = h - x, b = w * P - (p - f * x - w * x - f * P), z = l * u, c = Yt * l, f = c - (c - l), w = l - f, c = Yt * u, x = c - (c - u), P = u - x, v = w * P - (z - f * x - w * x - f * P), M = b - v, d = b - M, jt[0] = b - (M + d) + (d - v), g = p + M, d = g - p, m = p - (g - d) + (M - d), M = m - z, d = m - M, jt[1] = m - (M + d) + (d - z), S = g + M, d = S - g, jt[2] = g - (S - d) + (M - d), jt[3] = S;
|
|
2305
2305
|
const B = qe(I, rn, 4, jt, sn);
|
|
2306
2306
|
return sn[B - 1];
|
|
2307
2307
|
}
|
|
2308
2308
|
function ve(n, t, e, o, i, r) {
|
|
2309
|
-
const s = (t - r) * (e - i), a = (n - i) * (o - r), l = s - a,
|
|
2310
|
-
return Math.abs(l) >= Eo *
|
|
2309
|
+
const s = (t - r) * (e - i), a = (n - i) * (o - r), l = s - a, u = Math.abs(s + a);
|
|
2310
|
+
return Math.abs(l) >= Eo * u ? l : -Bo(n, t, e, o, i, r, u);
|
|
2311
2311
|
}
|
|
2312
2312
|
const an = Math.pow(2, -52), De = new Uint32Array(512);
|
|
2313
2313
|
class Be {
|
|
@@ -2348,57 +2348,57 @@ class Be {
|
|
|
2348
2348
|
*/
|
|
2349
2349
|
update() {
|
|
2350
2350
|
const { coords: t, _hullPrev: e, _hullNext: o, _hullTri: i, _hullHash: r } = this, s = t.length >> 1;
|
|
2351
|
-
let a = 1 / 0, l = 1 / 0,
|
|
2352
|
-
for (let
|
|
2353
|
-
const D = t[2 *
|
|
2354
|
-
D < a && (a = D), _ < l && (l = _), D >
|
|
2351
|
+
let a = 1 / 0, l = 1 / 0, u = -1 / 0, h = -1 / 0;
|
|
2352
|
+
for (let V = 0; V < s; V++) {
|
|
2353
|
+
const D = t[2 * V], _ = t[2 * V + 1];
|
|
2354
|
+
D < a && (a = D), _ < l && (l = _), D > u && (u = D), _ > h && (h = _), this._ids[V] = V;
|
|
2355
2355
|
}
|
|
2356
|
-
const d = (a +
|
|
2357
|
-
let f = 0, w = 0,
|
|
2358
|
-
for (let
|
|
2359
|
-
const _ = We(d,
|
|
2360
|
-
_ < D && (f =
|
|
2356
|
+
const d = (a + u) / 2, c = (l + h) / 2;
|
|
2357
|
+
let f = 0, w = 0, x = 0;
|
|
2358
|
+
for (let V = 0, D = 1 / 0; V < s; V++) {
|
|
2359
|
+
const _ = We(d, c, t[2 * V], t[2 * V + 1]);
|
|
2360
|
+
_ < D && (f = V, D = _);
|
|
2361
2361
|
}
|
|
2362
|
-
const
|
|
2363
|
-
for (let
|
|
2364
|
-
if (
|
|
2365
|
-
const _ = We(
|
|
2366
|
-
_ < D && _ > 0 && (w =
|
|
2362
|
+
const P = t[2 * f], M = t[2 * f + 1];
|
|
2363
|
+
for (let V = 0, D = 1 / 0; V < s; V++) {
|
|
2364
|
+
if (V === f) continue;
|
|
2365
|
+
const _ = We(P, M, t[2 * V], t[2 * V + 1]);
|
|
2366
|
+
_ < D && _ > 0 && (w = V, D = _);
|
|
2367
2367
|
}
|
|
2368
2368
|
let g = t[2 * w], m = t[2 * w + 1], p = 1 / 0;
|
|
2369
|
-
for (let
|
|
2370
|
-
if (
|
|
2371
|
-
const D = Co(
|
|
2372
|
-
D < p && (
|
|
2369
|
+
for (let V = 0; V < s; V++) {
|
|
2370
|
+
if (V === f || V === w) continue;
|
|
2371
|
+
const D = Co(P, M, g, m, t[2 * V], t[2 * V + 1]);
|
|
2372
|
+
D < p && (x = V, p = D);
|
|
2373
2373
|
}
|
|
2374
|
-
let b = t[2 *
|
|
2374
|
+
let b = t[2 * x], z = t[2 * x + 1];
|
|
2375
2375
|
if (p === 1 / 0) {
|
|
2376
2376
|
for (let _ = 0; _ < s; _++)
|
|
2377
2377
|
this._dists[_] = t[2 * _] - t[0] || t[2 * _ + 1] - t[1];
|
|
2378
2378
|
ye(this._ids, this._dists, 0, s - 1);
|
|
2379
|
-
const
|
|
2379
|
+
const V = new Uint32Array(s);
|
|
2380
2380
|
let D = 0;
|
|
2381
2381
|
for (let _ = 0, E = -1 / 0; _ < s; _++) {
|
|
2382
2382
|
const T = this._ids[_], A = this._dists[T];
|
|
2383
|
-
A > E && (
|
|
2383
|
+
A > E && (V[D++] = T, E = A);
|
|
2384
2384
|
}
|
|
2385
|
-
this.hull =
|
|
2385
|
+
this.hull = V.subarray(0, D), this.triangles = new Uint32Array(0), this.halfedges = new Int32Array(0);
|
|
2386
2386
|
return;
|
|
2387
2387
|
}
|
|
2388
|
-
if (ve(
|
|
2389
|
-
const
|
|
2390
|
-
w =
|
|
2388
|
+
if (ve(P, M, g, m, b, z) < 0) {
|
|
2389
|
+
const V = w, D = g, _ = m;
|
|
2390
|
+
w = x, g = b, m = z, x = V, b = D, z = _;
|
|
2391
2391
|
}
|
|
2392
|
-
const v = Lo(
|
|
2392
|
+
const v = Lo(P, M, g, m, b, z);
|
|
2393
2393
|
this._cx = v.x, this._cy = v.y;
|
|
2394
|
-
for (let
|
|
2395
|
-
this._dists[
|
|
2394
|
+
for (let V = 0; V < s; V++)
|
|
2395
|
+
this._dists[V] = We(t[2 * V], t[2 * V + 1], v.x, v.y);
|
|
2396
2396
|
ye(this._ids, this._dists, 0, s - 1), this._hullStart = f;
|
|
2397
2397
|
let S = 3;
|
|
2398
|
-
o[f] = e[
|
|
2399
|
-
for (let
|
|
2400
|
-
const E = this._ids[
|
|
2401
|
-
if (
|
|
2398
|
+
o[f] = e[x] = w, o[w] = e[f] = x, o[x] = e[w] = f, i[f] = 0, i[w] = 1, i[x] = 2, r.fill(-1), r[this._hashKey(P, M)] = f, r[this._hashKey(g, m)] = w, r[this._hashKey(b, z)] = x, this.trianglesLen = 0, this._addTriangle(f, w, x, -1, -1, -1);
|
|
2399
|
+
for (let V = 0, D = 0, _ = 0; V < this._ids.length; V++) {
|
|
2400
|
+
const E = this._ids[V], T = t[2 * E], A = t[2 * E + 1];
|
|
2401
|
+
if (V > 0 && Math.abs(T - D) <= an && Math.abs(A - _) <= an || (D = T, _ = A, E === f || E === w || E === x)) continue;
|
|
2402
2402
|
let O = 0;
|
|
2403
2403
|
for (let C = 0, R = this._hashKey(T, A); C < this._hashSize && (O = r[(R + C) % this._hashSize], !(O !== -1 && O !== o[O])); C++)
|
|
2404
2404
|
;
|
|
@@ -2421,8 +2421,8 @@ class Be {
|
|
|
2421
2421
|
this._hullStart = e[E] = I, o[I] = e[N] = E, o[E] = N, r[this._hashKey(T, A)] = E, r[this._hashKey(t[2 * I], t[2 * I + 1])] = I;
|
|
2422
2422
|
}
|
|
2423
2423
|
this.hull = new Uint32Array(S);
|
|
2424
|
-
for (let
|
|
2425
|
-
this.hull[
|
|
2424
|
+
for (let V = 0, D = this._hullStart; V < S; V++)
|
|
2425
|
+
this.hull[V] = D, D = o[D];
|
|
2426
2426
|
this.triangles = this._triangles.subarray(0, this.trianglesLen), this.halfedges = this._halfedges.subarray(0, this.trianglesLen);
|
|
2427
2427
|
}
|
|
2428
2428
|
/**
|
|
@@ -2451,20 +2451,20 @@ class Be {
|
|
|
2451
2451
|
t = De[--r];
|
|
2452
2452
|
continue;
|
|
2453
2453
|
}
|
|
2454
|
-
const
|
|
2454
|
+
const u = a - a % 3, h = l + (t + 1) % 3, d = u + (a + 2) % 3, c = e[s], f = e[t], w = e[h], x = e[d];
|
|
2455
2455
|
if (ko(
|
|
2456
|
-
i[2 *
|
|
2457
|
-
i[2 *
|
|
2456
|
+
i[2 * c],
|
|
2457
|
+
i[2 * c + 1],
|
|
2458
2458
|
i[2 * f],
|
|
2459
2459
|
i[2 * f + 1],
|
|
2460
2460
|
i[2 * w],
|
|
2461
2461
|
i[2 * w + 1],
|
|
2462
|
-
i[2 *
|
|
2463
|
-
i[2 *
|
|
2462
|
+
i[2 * x],
|
|
2463
|
+
i[2 * x + 1]
|
|
2464
2464
|
)) {
|
|
2465
|
-
e[t] =
|
|
2466
|
-
const
|
|
2467
|
-
if (
|
|
2465
|
+
e[t] = x, e[a] = c;
|
|
2466
|
+
const M = o[d];
|
|
2467
|
+
if (M === -1) {
|
|
2468
2468
|
let m = this._hullStart;
|
|
2469
2469
|
do {
|
|
2470
2470
|
if (this._hullTri[m] === d) {
|
|
@@ -2474,8 +2474,8 @@ class Be {
|
|
|
2474
2474
|
m = this._hullPrev[m];
|
|
2475
2475
|
} while (m !== this._hullStart);
|
|
2476
2476
|
}
|
|
2477
|
-
this._link(t,
|
|
2478
|
-
const g =
|
|
2477
|
+
this._link(t, M), this._link(a, o[s]), this._link(s, d);
|
|
2478
|
+
const g = u + (a + 1) % 3;
|
|
2479
2479
|
r < De.length && (De[r++] = g);
|
|
2480
2480
|
} else {
|
|
2481
2481
|
if (r === 0) break;
|
|
@@ -2518,15 +2518,15 @@ function We(n, t, e, o) {
|
|
|
2518
2518
|
return i * i + r * r;
|
|
2519
2519
|
}
|
|
2520
2520
|
function ko(n, t, e, o, i, r, s, a) {
|
|
2521
|
-
const l = n - s,
|
|
2522
|
-
return l * (d *
|
|
2521
|
+
const l = n - s, u = t - a, h = e - s, d = o - a, c = i - s, f = r - a, w = l * l + u * u, x = h * h + d * d, P = c * c + f * f;
|
|
2522
|
+
return l * (d * P - x * f) - u * (h * P - x * c) + w * (h * f - d * c) < 0;
|
|
2523
2523
|
}
|
|
2524
2524
|
function Co(n, t, e, o, i, r) {
|
|
2525
|
-
const s = e - n, a = o - t, l = i - n,
|
|
2525
|
+
const s = e - n, a = o - t, l = i - n, u = r - t, h = s * s + a * a, d = l * l + u * u, c = 0.5 / (s * u - a * l), f = (u * h - a * d) * c, w = (s * d - l * h) * c;
|
|
2526
2526
|
return f * f + w * w;
|
|
2527
2527
|
}
|
|
2528
2528
|
function Lo(n, t, e, o, i, r) {
|
|
2529
|
-
const s = e - n, a = o - t, l = i - n,
|
|
2529
|
+
const s = e - n, a = o - t, l = i - n, u = r - t, h = s * s + a * a, d = l * l + u * u, c = 0.5 / (s * u - a * l), f = n + (u * h - a * d) * c, w = t + (s * d - l * h) * c;
|
|
2530
2530
|
return { x: f, y: w };
|
|
2531
2531
|
}
|
|
2532
2532
|
function ye(n, t, e, o) {
|
|
@@ -2622,8 +2622,8 @@ class Oo {
|
|
|
2622
2622
|
const { delaunay: { points: t, hull: e, triangles: o }, vectors: i } = this;
|
|
2623
2623
|
let r, s;
|
|
2624
2624
|
const a = this.circumcenters = this._circumcenters.subarray(0, o.length / 3 * 2);
|
|
2625
|
-
for (let
|
|
2626
|
-
const p = o[
|
|
2625
|
+
for (let x = 0, P = 0, M = o.length, g, m; x < M; x += 3, P += 2) {
|
|
2626
|
+
const p = o[x] * 2, b = o[x + 1] * 2, z = o[x + 2] * 2, v = t[p], S = t[p + 1], V = t[b], D = t[b + 1], _ = t[z], E = t[z + 1], T = V - v, A = D - S, O = _ - v, I = E - S, B = (T * I - A * O) * 2;
|
|
2627
2627
|
if (Math.abs(B) < 1e-9) {
|
|
2628
2628
|
if (r === void 0) {
|
|
2629
2629
|
r = s = 0;
|
|
@@ -2636,27 +2636,27 @@ class Oo {
|
|
|
2636
2636
|
const L = 1 / B, N = T * T + A * A, C = O * O + I * I;
|
|
2637
2637
|
g = v + (I * N - A * C) * L, m = S + (T * C - O * N) * L;
|
|
2638
2638
|
}
|
|
2639
|
-
a[
|
|
2639
|
+
a[P] = g, a[P + 1] = m;
|
|
2640
2640
|
}
|
|
2641
|
-
let l = e[e.length - 1],
|
|
2641
|
+
let l = e[e.length - 1], u, h = l * 4, d, c = t[2 * l], f, w = t[2 * l + 1];
|
|
2642
2642
|
i.fill(0);
|
|
2643
|
-
for (let
|
|
2644
|
-
l = e[
|
|
2643
|
+
for (let x = 0; x < e.length; ++x)
|
|
2644
|
+
l = e[x], u = h, d = c, f = w, h = l * 4, c = t[2 * l], w = t[2 * l + 1], i[u + 2] = i[h] = f - w, i[u + 3] = i[h + 1] = c - d;
|
|
2645
2645
|
}
|
|
2646
2646
|
render(t) {
|
|
2647
2647
|
const e = t == null ? t = new de() : void 0, { delaunay: { halfedges: o, inedges: i, hull: r }, circumcenters: s, vectors: a } = this;
|
|
2648
2648
|
if (r.length <= 1) return null;
|
|
2649
2649
|
for (let h = 0, d = o.length; h < d; ++h) {
|
|
2650
|
-
const
|
|
2651
|
-
if (
|
|
2652
|
-
const f = Math.floor(h / 3) * 2, w = Math.floor(
|
|
2653
|
-
this._renderSegment(
|
|
2650
|
+
const c = o[h];
|
|
2651
|
+
if (c < h) continue;
|
|
2652
|
+
const f = Math.floor(h / 3) * 2, w = Math.floor(c / 3) * 2, x = s[f], P = s[f + 1], M = s[w], g = s[w + 1];
|
|
2653
|
+
this._renderSegment(x, P, M, g, t);
|
|
2654
2654
|
}
|
|
2655
|
-
let l,
|
|
2655
|
+
let l, u = r[r.length - 1];
|
|
2656
2656
|
for (let h = 0; h < r.length; ++h) {
|
|
2657
|
-
l =
|
|
2658
|
-
const d = Math.floor(i[
|
|
2659
|
-
|
|
2657
|
+
l = u, u = r[h];
|
|
2658
|
+
const d = Math.floor(i[u] / 3) * 2, c = s[d], f = s[d + 1], w = l * 4, x = this._project(c, f, a[w + 2], a[w + 3]);
|
|
2659
|
+
x && this._renderSegment(c, f, x[0], x[1], t);
|
|
2660
2660
|
}
|
|
2661
2661
|
return e && e.value();
|
|
2662
2662
|
}
|
|
@@ -2713,8 +2713,8 @@ class Oo {
|
|
|
2713
2713
|
const a = [];
|
|
2714
2714
|
let l = s;
|
|
2715
2715
|
do {
|
|
2716
|
-
const
|
|
2717
|
-
if (a.push(e[
|
|
2716
|
+
const u = Math.floor(l / 3);
|
|
2717
|
+
if (a.push(e[u * 2], e[u * 2 + 1]), l = l % 3 === 2 ? l - 2 : l + 1, r[l] !== t) break;
|
|
2718
2718
|
l = i[l];
|
|
2719
2719
|
} while (l !== s && l !== -1);
|
|
2720
2720
|
return a;
|
|
@@ -2729,23 +2729,23 @@ class Oo {
|
|
|
2729
2729
|
}
|
|
2730
2730
|
_clipFinite(t, e) {
|
|
2731
2731
|
const o = e.length;
|
|
2732
|
-
let i = null, r, s, a = e[o - 2], l = e[o - 1],
|
|
2732
|
+
let i = null, r, s, a = e[o - 2], l = e[o - 1], u, h = this._regioncode(a, l), d, c = 0;
|
|
2733
2733
|
for (let f = 0; f < o; f += 2)
|
|
2734
|
-
if (r = a, s = l, a = e[f], l = e[f + 1],
|
|
2735
|
-
d =
|
|
2734
|
+
if (r = a, s = l, a = e[f], l = e[f + 1], u = h, h = this._regioncode(a, l), u === 0 && h === 0)
|
|
2735
|
+
d = c, c = 0, i ? i.push(a, l) : i = [a, l];
|
|
2736
2736
|
else {
|
|
2737
|
-
let w,
|
|
2738
|
-
if (
|
|
2739
|
-
if ((w = this._clipSegment(r, s, a, l,
|
|
2740
|
-
[
|
|
2737
|
+
let w, x, P, M, g;
|
|
2738
|
+
if (u === 0) {
|
|
2739
|
+
if ((w = this._clipSegment(r, s, a, l, u, h)) === null) continue;
|
|
2740
|
+
[x, P, M, g] = w;
|
|
2741
2741
|
} else {
|
|
2742
|
-
if ((w = this._clipSegment(a, l, r, s, h,
|
|
2743
|
-
[
|
|
2742
|
+
if ((w = this._clipSegment(a, l, r, s, h, u)) === null) continue;
|
|
2743
|
+
[M, g, x, P] = w, d = c, c = this._edgecode(x, P), d && c && this._edge(t, d, c, i, i.length), i ? i.push(x, P) : i = [x, P];
|
|
2744
2744
|
}
|
|
2745
|
-
d =
|
|
2745
|
+
d = c, c = this._edgecode(M, g), d && c && this._edge(t, d, c, i, i.length), i ? i.push(M, g) : i = [M, g];
|
|
2746
2746
|
}
|
|
2747
2747
|
if (i)
|
|
2748
|
-
d =
|
|
2748
|
+
d = c, c = this._edgecode(i[0], i[1]), d && c && this._edge(t, d, c, i, i.length);
|
|
2749
2749
|
else if (this.contains(t, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2))
|
|
2750
2750
|
return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];
|
|
2751
2751
|
return i;
|
|
@@ -2755,15 +2755,15 @@ class Oo {
|
|
|
2755
2755
|
for (a && ([t, e, o, i, r, s] = [o, i, t, e, s, r]); ; ) {
|
|
2756
2756
|
if (r === 0 && s === 0) return a ? [o, i, t, e] : [t, e, o, i];
|
|
2757
2757
|
if (r & s) return null;
|
|
2758
|
-
let l,
|
|
2759
|
-
h & 8 ? (l = t + (o - t) * (this.ymax - e) / (i - e),
|
|
2758
|
+
let l, u, h = r || s;
|
|
2759
|
+
h & 8 ? (l = t + (o - t) * (this.ymax - e) / (i - e), u = this.ymax) : h & 4 ? (l = t + (o - t) * (this.ymin - e) / (i - e), u = this.ymin) : h & 2 ? (u = e + (i - e) * (this.xmax - t) / (o - t), l = this.xmax) : (u = e + (i - e) * (this.xmin - t) / (o - t), l = this.xmin), r ? (t = l, e = u, r = this._regioncode(t, e)) : (o = l, i = u, s = this._regioncode(o, i));
|
|
2760
2760
|
}
|
|
2761
2761
|
}
|
|
2762
2762
|
_clipInfinite(t, e, o, i, r, s) {
|
|
2763
2763
|
let a = Array.from(e), l;
|
|
2764
2764
|
if ((l = this._project(a[0], a[1], o, i)) && a.unshift(l[0], l[1]), (l = this._project(a[a.length - 2], a[a.length - 1], r, s)) && a.push(l[0], l[1]), a = this._clipFinite(t, a))
|
|
2765
|
-
for (let
|
|
2766
|
-
d =
|
|
2765
|
+
for (let u = 0, h = a.length, d, c = this._edgecode(a[h - 2], a[h - 1]); u < h; u += 2)
|
|
2766
|
+
d = c, c = this._edgecode(a[u], a[u + 1]), d && c && (u = this._edge(t, d, c, a, u), h = a.length);
|
|
2767
2767
|
else this.contains(t, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2) && (a = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax]);
|
|
2768
2768
|
return a;
|
|
2769
2769
|
}
|
|
@@ -2866,21 +2866,21 @@ class ke {
|
|
|
2866
2866
|
_init() {
|
|
2867
2867
|
const t = this._delaunator, e = this.points;
|
|
2868
2868
|
if (t.hull && t.hull.length > 2 && Xo(t)) {
|
|
2869
|
-
this.collinear = Int32Array.from({ length: e.length / 2 }, (
|
|
2870
|
-
const l = this.collinear[0],
|
|
2871
|
-
for (let
|
|
2872
|
-
const w = $o(e[2 *
|
|
2873
|
-
e[2 *
|
|
2869
|
+
this.collinear = Int32Array.from({ length: e.length / 2 }, (c, f) => f).sort((c, f) => e[2 * c] - e[2 * f] || e[2 * c + 1] - e[2 * f + 1]);
|
|
2870
|
+
const l = this.collinear[0], u = this.collinear[this.collinear.length - 1], h = [e[2 * l], e[2 * l + 1], e[2 * u], e[2 * u + 1]], d = 1e-8 * Math.hypot(h[3] - h[1], h[2] - h[0]);
|
|
2871
|
+
for (let c = 0, f = e.length / 2; c < f; ++c) {
|
|
2872
|
+
const w = $o(e[2 * c], e[2 * c + 1], d);
|
|
2873
|
+
e[2 * c] = w[0], e[2 * c + 1] = w[1];
|
|
2874
2874
|
}
|
|
2875
2875
|
this._delaunator = new Be(e);
|
|
2876
2876
|
} else
|
|
2877
2877
|
delete this.collinear;
|
|
2878
2878
|
const o = this.halfedges = this._delaunator.halfedges, i = this.hull = this._delaunator.hull, r = this.triangles = this._delaunator.triangles, s = this.inedges.fill(-1), a = this._hullIndex.fill(-1);
|
|
2879
|
-
for (let l = 0,
|
|
2879
|
+
for (let l = 0, u = o.length; l < u; ++l) {
|
|
2880
2880
|
const h = r[l % 3 === 2 ? l - 2 : l + 1];
|
|
2881
2881
|
(o[l] === -1 || s[h] === -1) && (s[h] = l);
|
|
2882
2882
|
}
|
|
2883
|
-
for (let l = 0,
|
|
2883
|
+
for (let l = 0, u = i.length; l < u; ++l)
|
|
2884
2884
|
a[i[l]] = l;
|
|
2885
2885
|
i.length <= 2 && i.length > 0 && (this.triangles = new Int32Array(3).fill(-1), this.halfedges = new Int32Array(3).fill(-1), this.triangles[0] = i[0], s[i[0]] = 1, i.length === 2 && (s[i[1]] = 0, this.triangles[1] = i[1], this.triangles[2] = i[1]));
|
|
2886
2886
|
}
|
|
@@ -2896,15 +2896,15 @@ class ke {
|
|
|
2896
2896
|
}
|
|
2897
2897
|
const l = e[t];
|
|
2898
2898
|
if (l === -1) return;
|
|
2899
|
-
let
|
|
2899
|
+
let u = l, h = -1;
|
|
2900
2900
|
do {
|
|
2901
|
-
if (yield h = s[
|
|
2902
|
-
if (
|
|
2901
|
+
if (yield h = s[u], u = u % 3 === 2 ? u - 2 : u + 1, s[u] !== t) return;
|
|
2902
|
+
if (u = r[u], u === -1) {
|
|
2903
2903
|
const d = o[(i[t] + 1) % o.length];
|
|
2904
2904
|
d !== h && (yield d);
|
|
2905
2905
|
return;
|
|
2906
2906
|
}
|
|
2907
|
-
} while (
|
|
2907
|
+
} while (u !== l);
|
|
2908
2908
|
}
|
|
2909
2909
|
find(t, e, o = 0) {
|
|
2910
2910
|
if (t = +t, t !== t || (e = +e, e !== e)) return -1;
|
|
@@ -2914,21 +2914,21 @@ class ke {
|
|
|
2914
2914
|
return r;
|
|
2915
2915
|
}
|
|
2916
2916
|
_step(t, e, o) {
|
|
2917
|
-
const { inedges: i, hull: r, _hullIndex: s, halfedges: a, triangles: l, points:
|
|
2918
|
-
if (i[t] === -1 || !
|
|
2919
|
-
let h = t, d = ge(e -
|
|
2920
|
-
const
|
|
2921
|
-
let f =
|
|
2917
|
+
const { inedges: i, hull: r, _hullIndex: s, halfedges: a, triangles: l, points: u } = this;
|
|
2918
|
+
if (i[t] === -1 || !u.length) return (t + 1) % (u.length >> 1);
|
|
2919
|
+
let h = t, d = ge(e - u[t * 2], 2) + ge(o - u[t * 2 + 1], 2);
|
|
2920
|
+
const c = i[t];
|
|
2921
|
+
let f = c;
|
|
2922
2922
|
do {
|
|
2923
2923
|
let w = l[f];
|
|
2924
|
-
const
|
|
2925
|
-
if (
|
|
2924
|
+
const x = ge(e - u[w * 2], 2) + ge(o - u[w * 2 + 1], 2);
|
|
2925
|
+
if (x < d && (d = x, h = w), f = f % 3 === 2 ? f - 2 : f + 1, l[f] !== t) break;
|
|
2926
2926
|
if (f = a[f], f === -1) {
|
|
2927
|
-
if (f = r[(s[t] + 1) % r.length], f !== w && ge(e -
|
|
2927
|
+
if (f = r[(s[t] + 1) % r.length], f !== w && ge(e - u[f * 2], 2) + ge(o - u[f * 2 + 1], 2) < d)
|
|
2928
2928
|
return f;
|
|
2929
2929
|
break;
|
|
2930
2930
|
}
|
|
2931
|
-
} while (f !==
|
|
2931
|
+
} while (f !== c);
|
|
2932
2932
|
return h;
|
|
2933
2933
|
}
|
|
2934
2934
|
render(t) {
|
|
@@ -2936,8 +2936,8 @@ class ke {
|
|
|
2936
2936
|
for (let s = 0, a = i.length; s < a; ++s) {
|
|
2937
2937
|
const l = i[s];
|
|
2938
2938
|
if (l < s) continue;
|
|
2939
|
-
const
|
|
2940
|
-
t.moveTo(o[
|
|
2939
|
+
const u = r[s] * 2, h = r[l] * 2;
|
|
2940
|
+
t.moveTo(o[u], o[u + 1]), t.lineTo(o[h], o[h + 1]);
|
|
2941
2941
|
}
|
|
2942
2942
|
return this.renderHull(t), e && e.value();
|
|
2943
2943
|
}
|
|
@@ -2994,43 +2994,43 @@ function Go(n, t, e, o) {
|
|
|
2994
2994
|
return 1 + (n[t][0] === 0 || n[e][0] === 0 || n[o][0] === 0 ? 1 : 0);
|
|
2995
2995
|
}
|
|
2996
2996
|
function jo(n, t, e, o, i, r) {
|
|
2997
|
-
const s = Math.hypot(e - i, o - r), a = Math.hypot(n - i, t - r), l = Math.hypot(n - e, t - o),
|
|
2998
|
-
return
|
|
2997
|
+
const s = Math.hypot(e - i, o - r), a = Math.hypot(n - i, t - r), l = Math.hypot(n - e, t - o), u = Math.abs((e - n) * (r - t) - (i - n) * (o - t)) / 2;
|
|
2998
|
+
return u === 0 ? 1 / 0 : s * a * l / (4 * u);
|
|
2999
2999
|
}
|
|
3000
3000
|
function cn(n) {
|
|
3001
3001
|
if (!n || n.length < 3) return [];
|
|
3002
3002
|
const t = /* @__PURE__ */ new Set(), e = [];
|
|
3003
3003
|
for (const w of n) {
|
|
3004
|
-
const
|
|
3005
|
-
t.has(
|
|
3004
|
+
const x = `${w[0]}_${w[1]}`;
|
|
3005
|
+
t.has(x) || (t.add(x), e.push(w));
|
|
3006
3006
|
}
|
|
3007
3007
|
if (e.length < 3) return [];
|
|
3008
3008
|
const o = new ke(Float64Array.from(e.flat())), { triangles: i } = o;
|
|
3009
3009
|
if (!i.length) return [];
|
|
3010
|
-
const r = /* @__PURE__ */ new Map(), s = (w,
|
|
3010
|
+
const r = /* @__PURE__ */ new Map(), s = (w, x) => w < x ? `${w}_${x}` : `${x}_${w}`;
|
|
3011
3011
|
for (let w = 0; w < i.length; w += 3) {
|
|
3012
|
-
const
|
|
3013
|
-
if (S <= 1 /
|
|
3014
|
-
for (const [D, _] of [[
|
|
3012
|
+
const x = i[w], P = i[w + 1], M = i[w + 2], [g, m] = e[x], [p, b] = e[P], [z, v] = e[M], S = jo(g, m, p, b, z, v), V = Go(e, x, P, M);
|
|
3013
|
+
if (S <= 1 / V)
|
|
3014
|
+
for (const [D, _] of [[x, P], [P, M], [M, x]]) {
|
|
3015
3015
|
const E = s(D, _);
|
|
3016
3016
|
r.set(E, (r.get(E) || 0) + 1);
|
|
3017
3017
|
}
|
|
3018
3018
|
}
|
|
3019
3019
|
const a = [];
|
|
3020
|
-
for (const [w,
|
|
3020
|
+
for (const [w, x] of r) x === 1 && a.push(w.split("_").map(Number));
|
|
3021
3021
|
if (!a.length) return [];
|
|
3022
3022
|
const l = /* @__PURE__ */ new Map();
|
|
3023
|
-
for (const [w,
|
|
3024
|
-
(l.get(w) || l.set(w, []).get(w)).push(
|
|
3025
|
-
const
|
|
3026
|
-
let
|
|
3023
|
+
for (const [w, x] of a)
|
|
3024
|
+
(l.get(w) || l.set(w, []).get(w)).push(x), (l.get(x) || l.set(x, []).get(x)).push(w);
|
|
3025
|
+
const u = a[0][0], h = [], d = /* @__PURE__ */ new Set();
|
|
3026
|
+
let c = u, f = -1;
|
|
3027
3027
|
do {
|
|
3028
|
-
h.push(e[
|
|
3029
|
-
const w = l.get(
|
|
3030
|
-
let
|
|
3031
|
-
if (
|
|
3032
|
-
f =
|
|
3033
|
-
} while (
|
|
3028
|
+
h.push(e[c]), d.add(c);
|
|
3029
|
+
const w = l.get(c) || [];
|
|
3030
|
+
let x = w.find((P) => P !== f && !d.has(P));
|
|
3031
|
+
if (x === void 0 && (x = w.find((P) => P !== f)), x === void 0) break;
|
|
3032
|
+
f = c, c = x;
|
|
3033
|
+
} while (c !== u && h.length <= a.length + 1);
|
|
3034
3034
|
return h;
|
|
3035
3035
|
}
|
|
3036
3036
|
const mt = {
|
|
@@ -3225,8 +3225,8 @@ let An = class {
|
|
|
3225
3225
|
let o = Ot.set(e[0], e[1], e[2]).length();
|
|
3226
3226
|
const i = Ot.set(e[4], e[5], e[6]).length(), r = Ot.set(e[8], e[9], e[10]).length();
|
|
3227
3227
|
t.determinant() < 0 && (o = -o), Qt.setFromMatrix4(t);
|
|
3228
|
-
const a = 1 / o, l = 1 / i,
|
|
3229
|
-
return Qt.elements[0] *= a, Qt.elements[1] *= a, Qt.elements[2] *= a, Qt.elements[3] *= l, Qt.elements[4] *= l, Qt.elements[5] *= l, Qt.elements[6] *=
|
|
3228
|
+
const a = 1 / o, l = 1 / i, u = 1 / r;
|
|
3229
|
+
return Qt.elements[0] *= a, Qt.elements[1] *= a, Qt.elements[2] *= a, Qt.elements[3] *= l, Qt.elements[4] *= l, Qt.elements[5] *= l, Qt.elements[6] *= u, Qt.elements[7] *= u, Qt.elements[8] *= u, this.rotation.multiply(Qt), this.halfSize.x *= o, this.halfSize.y *= i, this.halfSize.z *= r, Ot.setFromMatrixPosition(t), this.center.add(Ot), this;
|
|
3230
3230
|
}
|
|
3231
3231
|
};
|
|
3232
3232
|
const Uo = new An();
|
|
@@ -3313,17 +3313,17 @@ function Qo(n) {
|
|
|
3313
3313
|
}
|
|
3314
3314
|
function Pe(n, t, e) {
|
|
3315
3315
|
if (n !== null)
|
|
3316
|
-
for (var o, i, r, s, a, l,
|
|
3317
|
-
|
|
3316
|
+
for (var o, i, r, s, a, l, u, h = 0, d = 0, c, f = n.type, w = f === "FeatureCollection", x = f === "Feature", P = w ? n.features.length : 1, M = 0; M < P; M++) {
|
|
3317
|
+
u = w ? (
|
|
3318
3318
|
// @ts-expect-error: Known type conflict
|
|
3319
|
-
n.features[
|
|
3320
|
-
) :
|
|
3319
|
+
n.features[M].geometry
|
|
3320
|
+
) : x ? (
|
|
3321
3321
|
// @ts-expect-error: Known type conflict
|
|
3322
3322
|
n.geometry
|
|
3323
|
-
) : n,
|
|
3323
|
+
) : n, c = u ? u.type === "GeometryCollection" : !1, a = c ? u.geometries.length : 1;
|
|
3324
3324
|
for (var g = 0; g < a; g++) {
|
|
3325
3325
|
var m = 0, p = 0;
|
|
3326
|
-
if (s =
|
|
3326
|
+
if (s = c ? u.geometries[g] : u, s !== null) {
|
|
3327
3327
|
l = s.coordinates;
|
|
3328
3328
|
var b = s.type;
|
|
3329
3329
|
switch (h = e && (b === "Polygon" || b === "MultiPolygon") ? 1 : 0, b) {
|
|
@@ -3335,7 +3335,7 @@ function Pe(n, t, e) {
|
|
|
3335
3335
|
t(
|
|
3336
3336
|
l,
|
|
3337
3337
|
d,
|
|
3338
|
-
|
|
3338
|
+
M,
|
|
3339
3339
|
m,
|
|
3340
3340
|
p
|
|
3341
3341
|
) === !1
|
|
@@ -3351,7 +3351,7 @@ function Pe(n, t, e) {
|
|
|
3351
3351
|
t(
|
|
3352
3352
|
l[o],
|
|
3353
3353
|
d,
|
|
3354
|
-
|
|
3354
|
+
M,
|
|
3355
3355
|
m,
|
|
3356
3356
|
p
|
|
3357
3357
|
) === !1
|
|
@@ -3370,7 +3370,7 @@ function Pe(n, t, e) {
|
|
|
3370
3370
|
t(
|
|
3371
3371
|
l[o][i],
|
|
3372
3372
|
d,
|
|
3373
|
-
|
|
3373
|
+
M,
|
|
3374
3374
|
m,
|
|
3375
3375
|
p
|
|
3376
3376
|
) === !1
|
|
@@ -3391,7 +3391,7 @@ function Pe(n, t, e) {
|
|
|
3391
3391
|
t(
|
|
3392
3392
|
l[o][i][r],
|
|
3393
3393
|
d,
|
|
3394
|
-
|
|
3394
|
+
M,
|
|
3395
3395
|
m,
|
|
3396
3396
|
p
|
|
3397
3397
|
) === !1
|
|
@@ -3426,15 +3426,15 @@ function Jo(n) {
|
|
|
3426
3426
|
}), t;
|
|
3427
3427
|
}
|
|
3428
3428
|
function tr(n, t) {
|
|
3429
|
-
var e, o, i, r, s, a, l,
|
|
3430
|
-
for (e = 0; e <
|
|
3429
|
+
var e, o, i, r, s, a, l, u, h, d, c = 0, f = n.type === "FeatureCollection", w = n.type === "Feature", x = f ? n.features.length : 1;
|
|
3430
|
+
for (e = 0; e < x; e++) {
|
|
3431
3431
|
for (a = f ? (
|
|
3432
3432
|
// @ts-expect-error: Known type conflict
|
|
3433
3433
|
n.features[e].geometry
|
|
3434
3434
|
) : w ? (
|
|
3435
3435
|
// @ts-expect-error: Known type conflict
|
|
3436
3436
|
n.geometry
|
|
3437
|
-
) : n,
|
|
3437
|
+
) : n, u = f ? (
|
|
3438
3438
|
// @ts-expect-error: Known type conflict
|
|
3439
3439
|
n.features[e].properties
|
|
3440
3440
|
) : w ? (
|
|
@@ -3459,8 +3459,8 @@ function tr(n, t) {
|
|
|
3459
3459
|
t(
|
|
3460
3460
|
// @ts-expect-error: Known type conflict
|
|
3461
3461
|
null,
|
|
3462
|
-
u,
|
|
3463
3462
|
c,
|
|
3463
|
+
u,
|
|
3464
3464
|
h,
|
|
3465
3465
|
d
|
|
3466
3466
|
) === !1
|
|
@@ -3479,8 +3479,8 @@ function tr(n, t) {
|
|
|
3479
3479
|
// @ts-expect-error: Known type conflict
|
|
3480
3480
|
t(
|
|
3481
3481
|
r,
|
|
3482
|
-
u,
|
|
3483
3482
|
c,
|
|
3483
|
+
u,
|
|
3484
3484
|
h,
|
|
3485
3485
|
d
|
|
3486
3486
|
) === !1
|
|
@@ -3494,8 +3494,8 @@ function tr(n, t) {
|
|
|
3494
3494
|
// @ts-expect-error: Known type conflict
|
|
3495
3495
|
t(
|
|
3496
3496
|
r.geometries[o],
|
|
3497
|
-
u,
|
|
3498
3497
|
c,
|
|
3498
|
+
u,
|
|
3499
3499
|
h,
|
|
3500
3500
|
d
|
|
3501
3501
|
) === !1
|
|
@@ -3507,7 +3507,7 @@ function tr(n, t) {
|
|
|
3507
3507
|
throw new Error("Unknown Geometry Type");
|
|
3508
3508
|
}
|
|
3509
3509
|
}
|
|
3510
|
-
|
|
3510
|
+
c++;
|
|
3511
3511
|
}
|
|
3512
3512
|
}
|
|
3513
3513
|
function er(n, t, e) {
|
|
@@ -3555,21 +3555,21 @@ var Ze = { exports: {} }, On = { exports: {} };
|
|
|
3555
3555
|
(function(e, o) {
|
|
3556
3556
|
n.exports = o();
|
|
3557
3557
|
})(Fn, function() {
|
|
3558
|
-
function e(g, m, p, b,
|
|
3559
|
-
(function v(S,
|
|
3558
|
+
function e(g, m, p, b, z) {
|
|
3559
|
+
(function v(S, V, D, _, E) {
|
|
3560
3560
|
for (; _ > D; ) {
|
|
3561
3561
|
if (_ - D > 600) {
|
|
3562
|
-
var T = _ - D + 1, A =
|
|
3563
|
-
v(S,
|
|
3562
|
+
var T = _ - D + 1, A = V - D + 1, O = Math.log(T), I = 0.5 * Math.exp(2 * O / 3), B = 0.5 * Math.sqrt(O * I * (T - I) / T) * (A - T / 2 < 0 ? -1 : 1), L = Math.max(D, Math.floor(V - A * I / T + B)), N = Math.min(_, Math.floor(V + (T - A) * I / T + B));
|
|
3563
|
+
v(S, V, L, N, E);
|
|
3564
3564
|
}
|
|
3565
|
-
var C = S[
|
|
3566
|
-
for (o(S, D,
|
|
3565
|
+
var C = S[V], R = D, $ = _;
|
|
3566
|
+
for (o(S, D, V), E(S[_], C) > 0 && o(S, D, _); R < $; ) {
|
|
3567
3567
|
for (o(S, R, $), R++, $--; E(S[R], C) < 0; ) R++;
|
|
3568
3568
|
for (; E(S[$], C) > 0; ) $--;
|
|
3569
3569
|
}
|
|
3570
|
-
E(S[D], C) === 0 ? o(S, D, $) : o(S, ++$, _), $ <=
|
|
3570
|
+
E(S[D], C) === 0 ? o(S, D, $) : o(S, ++$, _), $ <= V && (D = $ + 1), V <= $ && (_ = $ - 1);
|
|
3571
3571
|
}
|
|
3572
|
-
})(g, m, p || 0, b || g.length - 1,
|
|
3572
|
+
})(g, m, p || 0, b || g.length - 1, z || i);
|
|
3573
3573
|
}
|
|
3574
3574
|
function o(g, m, p) {
|
|
3575
3575
|
var b = g[m];
|
|
@@ -3589,15 +3589,15 @@ var Ze = { exports: {} }, On = { exports: {} };
|
|
|
3589
3589
|
function a(g, m) {
|
|
3590
3590
|
l(g, 0, g.children.length, m, g);
|
|
3591
3591
|
}
|
|
3592
|
-
function l(g, m, p, b,
|
|
3593
|
-
|
|
3592
|
+
function l(g, m, p, b, z) {
|
|
3593
|
+
z || (z = P(null)), z.minX = 1 / 0, z.minY = 1 / 0, z.maxX = -1 / 0, z.maxY = -1 / 0;
|
|
3594
3594
|
for (var v = m; v < p; v++) {
|
|
3595
3595
|
var S = g.children[v];
|
|
3596
|
-
|
|
3596
|
+
u(z, g.leaf ? b(S) : S);
|
|
3597
3597
|
}
|
|
3598
|
-
return
|
|
3598
|
+
return z;
|
|
3599
3599
|
}
|
|
3600
|
-
function
|
|
3600
|
+
function u(g, m) {
|
|
3601
3601
|
return g.minX = Math.min(g.minX, m.minX), g.minY = Math.min(g.minY, m.minY), g.maxX = Math.max(g.maxX, m.maxX), g.maxY = Math.max(g.maxY, m.maxY), g;
|
|
3602
3602
|
}
|
|
3603
3603
|
function h(g, m) {
|
|
@@ -3606,7 +3606,7 @@ var Ze = { exports: {} }, On = { exports: {} };
|
|
|
3606
3606
|
function d(g, m) {
|
|
3607
3607
|
return g.minY - m.minY;
|
|
3608
3608
|
}
|
|
3609
|
-
function
|
|
3609
|
+
function c(g) {
|
|
3610
3610
|
return (g.maxX - g.minX) * (g.maxY - g.minY);
|
|
3611
3611
|
}
|
|
3612
3612
|
function f(g) {
|
|
@@ -3615,40 +3615,40 @@ var Ze = { exports: {} }, On = { exports: {} };
|
|
|
3615
3615
|
function w(g, m) {
|
|
3616
3616
|
return g.minX <= m.minX && g.minY <= m.minY && m.maxX <= g.maxX && m.maxY <= g.maxY;
|
|
3617
3617
|
}
|
|
3618
|
-
function
|
|
3618
|
+
function x(g, m) {
|
|
3619
3619
|
return m.minX <= g.maxX && m.minY <= g.maxY && m.maxX >= g.minX && m.maxY >= g.minY;
|
|
3620
3620
|
}
|
|
3621
|
-
function
|
|
3621
|
+
function P(g) {
|
|
3622
3622
|
return { children: g, height: 1, leaf: !0, minX: 1 / 0, minY: 1 / 0, maxX: -1 / 0, maxY: -1 / 0 };
|
|
3623
3623
|
}
|
|
3624
|
-
function
|
|
3624
|
+
function M(g, m, p, b, z) {
|
|
3625
3625
|
for (var v = [m, p]; v.length; ) if (!((p = v.pop()) - (m = v.pop()) <= b)) {
|
|
3626
3626
|
var S = m + Math.ceil((p - m) / b / 2) * b;
|
|
3627
|
-
e(g, S, m, p,
|
|
3627
|
+
e(g, S, m, p, z), v.push(m, S, S, p);
|
|
3628
3628
|
}
|
|
3629
3629
|
}
|
|
3630
3630
|
return r.prototype.all = function() {
|
|
3631
3631
|
return this._all(this.data, []);
|
|
3632
3632
|
}, r.prototype.search = function(g) {
|
|
3633
3633
|
var m = this.data, p = [];
|
|
3634
|
-
if (!
|
|
3635
|
-
for (var b = this.toBBox,
|
|
3634
|
+
if (!x(g, m)) return p;
|
|
3635
|
+
for (var b = this.toBBox, z = []; m; ) {
|
|
3636
3636
|
for (var v = 0; v < m.children.length; v++) {
|
|
3637
|
-
var S = m.children[v],
|
|
3638
|
-
|
|
3637
|
+
var S = m.children[v], V = m.leaf ? b(S) : S;
|
|
3638
|
+
x(g, V) && (m.leaf ? p.push(S) : w(g, V) ? this._all(S, p) : z.push(S));
|
|
3639
3639
|
}
|
|
3640
|
-
m =
|
|
3640
|
+
m = z.pop();
|
|
3641
3641
|
}
|
|
3642
3642
|
return p;
|
|
3643
3643
|
}, r.prototype.collides = function(g) {
|
|
3644
3644
|
var m = this.data;
|
|
3645
|
-
if (!
|
|
3645
|
+
if (!x(g, m)) return !1;
|
|
3646
3646
|
for (var p = []; m; ) {
|
|
3647
3647
|
for (var b = 0; b < m.children.length; b++) {
|
|
3648
|
-
var
|
|
3649
|
-
if (
|
|
3648
|
+
var z = m.children[b], v = m.leaf ? this.toBBox(z) : z;
|
|
3649
|
+
if (x(g, v)) {
|
|
3650
3650
|
if (m.leaf || w(g, v)) return !0;
|
|
3651
|
-
p.push(
|
|
3651
|
+
p.push(z);
|
|
3652
3652
|
}
|
|
3653
3653
|
}
|
|
3654
3654
|
m = p.pop();
|
|
@@ -3674,15 +3674,15 @@ var Ze = { exports: {} }, On = { exports: {} };
|
|
|
3674
3674
|
}, r.prototype.insert = function(g) {
|
|
3675
3675
|
return g && this._insert(g, this.data.height - 1), this;
|
|
3676
3676
|
}, r.prototype.clear = function() {
|
|
3677
|
-
return this.data =
|
|
3677
|
+
return this.data = P([]), this;
|
|
3678
3678
|
}, r.prototype.remove = function(g, m) {
|
|
3679
3679
|
if (!g) return this;
|
|
3680
|
-
for (var p, b,
|
|
3681
|
-
if (v || (v =
|
|
3680
|
+
for (var p, b, z, v = this.data, S = this.toBBox(g), V = [], D = []; v || V.length; ) {
|
|
3681
|
+
if (v || (v = V.pop(), b = V[V.length - 1], p = D.pop(), z = !0), v.leaf) {
|
|
3682
3682
|
var _ = s(g, v.children, m);
|
|
3683
|
-
if (_ !== -1) return v.children.splice(_, 1),
|
|
3683
|
+
if (_ !== -1) return v.children.splice(_, 1), V.push(v), this._condense(V), this;
|
|
3684
3684
|
}
|
|
3685
|
-
|
|
3685
|
+
z || v.leaf || !w(v, S) ? b ? (p++, v = b.children[p], z = !1) : v = null : (V.push(v), D.push(p), p = 0, b = v, v = v.children[0]);
|
|
3686
3686
|
}
|
|
3687
3687
|
return this;
|
|
3688
3688
|
}, r.prototype.toBBox = function(g) {
|
|
@@ -3699,63 +3699,63 @@ var Ze = { exports: {} }, On = { exports: {} };
|
|
|
3699
3699
|
for (var p = []; g; ) g.leaf ? m.push.apply(m, g.children) : p.push.apply(p, g.children), g = p.pop();
|
|
3700
3700
|
return m;
|
|
3701
3701
|
}, r.prototype._build = function(g, m, p, b) {
|
|
3702
|
-
var
|
|
3703
|
-
if (v <= S) return a(
|
|
3704
|
-
b || (b = Math.ceil(Math.log(v) / Math.log(S)), S = Math.ceil(v / Math.pow(S, b - 1))), (
|
|
3705
|
-
var
|
|
3706
|
-
|
|
3702
|
+
var z, v = p - m + 1, S = this._maxEntries;
|
|
3703
|
+
if (v <= S) return a(z = P(g.slice(m, p + 1)), this.toBBox), z;
|
|
3704
|
+
b || (b = Math.ceil(Math.log(v) / Math.log(S)), S = Math.ceil(v / Math.pow(S, b - 1))), (z = P([])).leaf = !1, z.height = b;
|
|
3705
|
+
var V = Math.ceil(v / S), D = V * Math.ceil(Math.sqrt(S));
|
|
3706
|
+
M(g, m, p, D, this.compareMinX);
|
|
3707
3707
|
for (var _ = m; _ <= p; _ += D) {
|
|
3708
3708
|
var E = Math.min(_ + D - 1, p);
|
|
3709
|
-
|
|
3710
|
-
for (var T = _; T <= E; T +=
|
|
3711
|
-
var A = Math.min(T +
|
|
3712
|
-
|
|
3709
|
+
M(g, _, E, V, this.compareMinY);
|
|
3710
|
+
for (var T = _; T <= E; T += V) {
|
|
3711
|
+
var A = Math.min(T + V - 1, E);
|
|
3712
|
+
z.children.push(this._build(g, T, A, b - 1));
|
|
3713
3713
|
}
|
|
3714
3714
|
}
|
|
3715
|
-
return a(
|
|
3715
|
+
return a(z, this.toBBox), z;
|
|
3716
3716
|
}, r.prototype._chooseSubtree = function(g, m, p, b) {
|
|
3717
3717
|
for (; b.push(m), !m.leaf && b.length - 1 !== p; ) {
|
|
3718
|
-
for (var
|
|
3719
|
-
var D = m.children[
|
|
3720
|
-
E < v ? (v = E,
|
|
3718
|
+
for (var z = 1 / 0, v = 1 / 0, S = void 0, V = 0; V < m.children.length; V++) {
|
|
3719
|
+
var D = m.children[V], _ = c(D), E = (T = g, A = D, (Math.max(A.maxX, T.maxX) - Math.min(A.minX, T.minX)) * (Math.max(A.maxY, T.maxY) - Math.min(A.minY, T.minY)) - _);
|
|
3720
|
+
E < v ? (v = E, z = _ < z ? _ : z, S = D) : E === v && _ < z && (z = _, S = D);
|
|
3721
3721
|
}
|
|
3722
3722
|
m = S || m.children[0];
|
|
3723
3723
|
}
|
|
3724
3724
|
var T, A;
|
|
3725
3725
|
return m;
|
|
3726
3726
|
}, r.prototype._insert = function(g, m, p) {
|
|
3727
|
-
var b = p ? g : this.toBBox(g),
|
|
3728
|
-
for (v.children.push(g),
|
|
3729
|
-
this._adjustParentBBoxes(b,
|
|
3727
|
+
var b = p ? g : this.toBBox(g), z = [], v = this._chooseSubtree(b, this.data, m, z);
|
|
3728
|
+
for (v.children.push(g), u(v, b); m >= 0 && z[m].children.length > this._maxEntries; ) this._split(z, m), m--;
|
|
3729
|
+
this._adjustParentBBoxes(b, z, m);
|
|
3730
3730
|
}, r.prototype._split = function(g, m) {
|
|
3731
|
-
var p = g[m], b = p.children.length,
|
|
3732
|
-
this._chooseSplitAxis(p,
|
|
3733
|
-
var v = this._chooseSplitIndex(p,
|
|
3731
|
+
var p = g[m], b = p.children.length, z = this._minEntries;
|
|
3732
|
+
this._chooseSplitAxis(p, z, b);
|
|
3733
|
+
var v = this._chooseSplitIndex(p, z, b), S = P(p.children.splice(v, p.children.length - v));
|
|
3734
3734
|
S.height = p.height, S.leaf = p.leaf, a(p, this.toBBox), a(S, this.toBBox), m ? g[m - 1].children.push(S) : this._splitRoot(p, S);
|
|
3735
3735
|
}, r.prototype._splitRoot = function(g, m) {
|
|
3736
|
-
this.data =
|
|
3736
|
+
this.data = P([g, m]), this.data.height = g.height + 1, this.data.leaf = !1, a(this.data, this.toBBox);
|
|
3737
3737
|
}, r.prototype._chooseSplitIndex = function(g, m, p) {
|
|
3738
|
-
for (var b,
|
|
3739
|
-
var O = l(g, 0, A, this.toBBox), I = l(g, A, p, this.toBBox), B = (
|
|
3738
|
+
for (var b, z, v, S, V, D, _, E = 1 / 0, T = 1 / 0, A = m; A <= p - m; A++) {
|
|
3739
|
+
var O = l(g, 0, A, this.toBBox), I = l(g, A, p, this.toBBox), B = (z = O, v = I, S = void 0, V = void 0, D = void 0, _ = void 0, S = Math.max(z.minX, v.minX), V = Math.max(z.minY, v.minY), D = Math.min(z.maxX, v.maxX), _ = Math.min(z.maxY, v.maxY), Math.max(0, D - S) * Math.max(0, _ - V)), L = c(O) + c(I);
|
|
3740
3740
|
B < E ? (E = B, b = A, T = L < T ? L : T) : B === E && L < T && (T = L, b = A);
|
|
3741
3741
|
}
|
|
3742
3742
|
return b || p - m;
|
|
3743
3743
|
}, r.prototype._chooseSplitAxis = function(g, m, p) {
|
|
3744
|
-
var b = g.leaf ? this.compareMinX : h,
|
|
3745
|
-
this._allDistMargin(g, m, p, b) < this._allDistMargin(g, m, p,
|
|
3744
|
+
var b = g.leaf ? this.compareMinX : h, z = g.leaf ? this.compareMinY : d;
|
|
3745
|
+
this._allDistMargin(g, m, p, b) < this._allDistMargin(g, m, p, z) && g.children.sort(b);
|
|
3746
3746
|
}, r.prototype._allDistMargin = function(g, m, p, b) {
|
|
3747
3747
|
g.children.sort(b);
|
|
3748
|
-
for (var
|
|
3748
|
+
for (var z = this.toBBox, v = l(g, 0, m, z), S = l(g, p - m, p, z), V = f(v) + f(S), D = m; D < p - m; D++) {
|
|
3749
3749
|
var _ = g.children[D];
|
|
3750
|
-
|
|
3750
|
+
u(v, g.leaf ? z(_) : _), V += f(v);
|
|
3751
3751
|
}
|
|
3752
3752
|
for (var E = p - m - 1; E >= m; E--) {
|
|
3753
3753
|
var T = g.children[E];
|
|
3754
|
-
|
|
3754
|
+
u(S, g.leaf ? z(T) : T), V += f(S);
|
|
3755
3755
|
}
|
|
3756
|
-
return
|
|
3756
|
+
return V;
|
|
3757
3757
|
}, r.prototype._adjustParentBBoxes = function(g, m, p) {
|
|
3758
|
-
for (var b = p; b >= 0; b--)
|
|
3758
|
+
for (var b = p; b >= 0; b--) u(m[b], g);
|
|
3759
3759
|
}, r.prototype._condense = function(g) {
|
|
3760
3760
|
for (var m = g.length - 1, p = void 0; m >= 0; m--) g[m].children.length === 0 ? m > 0 ? (p = g[m - 1].children).splice(p.indexOf(g[m]), 1) : this.clear() : a(g[m], this.toBBox);
|
|
3761
3761
|
}, r;
|
|
@@ -3808,17 +3808,17 @@ const ar = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
|
3808
3808
|
var Ce = { exports: {} }, cr = function(t, e, o, i) {
|
|
3809
3809
|
var r = t[0], s = t[1], a = !1;
|
|
3810
3810
|
o === void 0 && (o = 0), i === void 0 && (i = e.length);
|
|
3811
|
-
for (var l = (i - o) / 2,
|
|
3812
|
-
var d = e[o +
|
|
3813
|
-
|
|
3811
|
+
for (var l = (i - o) / 2, u = 0, h = l - 1; u < l; h = u++) {
|
|
3812
|
+
var d = e[o + u * 2 + 0], c = e[o + u * 2 + 1], f = e[o + h * 2 + 0], w = e[o + h * 2 + 1], x = c > s != w > s && r < (f - d) * (s - c) / (w - c) + d;
|
|
3813
|
+
x && (a = !a);
|
|
3814
3814
|
}
|
|
3815
3815
|
return a;
|
|
3816
3816
|
}, ur = function(t, e, o, i) {
|
|
3817
3817
|
var r = t[0], s = t[1], a = !1;
|
|
3818
3818
|
o === void 0 && (o = 0), i === void 0 && (i = e.length);
|
|
3819
|
-
for (var l = i - o,
|
|
3820
|
-
var d = e[
|
|
3821
|
-
|
|
3819
|
+
for (var l = i - o, u = 0, h = l - 1; u < l; h = u++) {
|
|
3820
|
+
var d = e[u + o][0], c = e[u + o][1], f = e[h + o][0], w = e[h + o][1], x = c > s != w > s && r < (f - d) * (s - c) / (w - c) + d;
|
|
3821
|
+
x && (a = !a);
|
|
3822
3822
|
}
|
|
3823
3823
|
return a;
|
|
3824
3824
|
}, Nn = cr, qn = ur;
|
|
@@ -3833,43 +3833,43 @@ var hr = Ce.exports, Ue = { exports: {} };
|
|
|
3833
3833
|
o(t);
|
|
3834
3834
|
})(Fn, function(e) {
|
|
3835
3835
|
const i = 33306690738754706e-32;
|
|
3836
|
-
function r(
|
|
3837
|
-
let p, b,
|
|
3838
|
-
|
|
3836
|
+
function r(x, P, M, g, m) {
|
|
3837
|
+
let p, b, z, v, S = P[0], V = g[0], D = 0, _ = 0;
|
|
3838
|
+
V > S == V > -S ? (p = S, S = P[++D]) : (p = V, V = g[++_]);
|
|
3839
3839
|
let E = 0;
|
|
3840
|
-
if (D <
|
|
3841
|
-
for (; D <
|
|
3842
|
-
for (; _ <
|
|
3840
|
+
if (D < x && _ < M) for (V > S == V > -S ? (z = p - ((b = S + p) - S), S = P[++D]) : (z = p - ((b = V + p) - V), V = g[++_]), p = b, z !== 0 && (m[E++] = z); D < x && _ < M; ) V > S == V > -S ? (z = p - ((b = p + S) - (v = b - p)) + (S - v), S = P[++D]) : (z = p - ((b = p + V) - (v = b - p)) + (V - v), V = g[++_]), p = b, z !== 0 && (m[E++] = z);
|
|
3841
|
+
for (; D < x; ) z = p - ((b = p + S) - (v = b - p)) + (S - v), S = P[++D], p = b, z !== 0 && (m[E++] = z);
|
|
3842
|
+
for (; _ < M; ) z = p - ((b = p + V) - (v = b - p)) + (V - v), V = g[++_], p = b, z !== 0 && (m[E++] = z);
|
|
3843
3843
|
return p === 0 && E !== 0 || (m[E++] = p), E;
|
|
3844
3844
|
}
|
|
3845
|
-
function s(
|
|
3846
|
-
return new Float64Array(
|
|
3845
|
+
function s(x) {
|
|
3846
|
+
return new Float64Array(x);
|
|
3847
3847
|
}
|
|
3848
|
-
const a = 33306690738754716e-32, l = 22204460492503146e-32,
|
|
3849
|
-
e.orient2d = function(
|
|
3850
|
-
const b = (
|
|
3851
|
-
if (b === 0 ||
|
|
3852
|
-
const S = Math.abs(b +
|
|
3853
|
-
return Math.abs(v) >= a * S ? v : -function(
|
|
3848
|
+
const a = 33306690738754716e-32, l = 22204460492503146e-32, u = 11093356479670487e-47, h = s(4), d = s(8), c = s(12), f = s(16), w = s(4);
|
|
3849
|
+
e.orient2d = function(x, P, M, g, m, p) {
|
|
3850
|
+
const b = (P - p) * (M - m), z = (x - m) * (g - p), v = b - z;
|
|
3851
|
+
if (b === 0 || z === 0 || b > 0 != z > 0) return v;
|
|
3852
|
+
const S = Math.abs(b + z);
|
|
3853
|
+
return Math.abs(v) >= a * S ? v : -function(V, D, _, E, T, A, O) {
|
|
3854
3854
|
let I, B, L, N, C, R, $, X, ot, K, G, ut, rt, F, H, Mt, Zt, qt;
|
|
3855
|
-
const Rt =
|
|
3855
|
+
const Rt = V - T, _t = _ - T, Et = D - A, Ft = E - A;
|
|
3856
3856
|
C = (H = (X = Rt - ($ = (R = 134217729 * Rt) - (R - Rt))) * (K = Ft - (ot = (R = 134217729 * Ft) - (R - Ft))) - ((F = Rt * Ft) - $ * ot - X * ot - $ * K)) - (G = H - (Zt = (X = Et - ($ = (R = 134217729 * Et) - (R - Et))) * (K = _t - (ot = (R = 134217729 * _t) - (R - _t))) - ((Mt = Et * _t) - $ * ot - X * ot - $ * K))), h[0] = H - (G + C) + (C - Zt), C = (rt = F - ((ut = F + G) - (C = ut - F)) + (G - C)) - (G = rt - Mt), h[1] = rt - (G + C) + (C - Mt), C = (qt = ut + G) - ut, h[2] = ut - (qt - C) + (G - C), h[3] = qt;
|
|
3857
3857
|
let tt = function(Tt, Wt) {
|
|
3858
3858
|
let J = Wt[0];
|
|
3859
3859
|
for (let ct = 1; ct < Tt; ct++) J += Wt[ct];
|
|
3860
3860
|
return J;
|
|
3861
3861
|
}(4, h), lt = l * O;
|
|
3862
|
-
if (tt >= lt || -tt >= lt || (I =
|
|
3862
|
+
if (tt >= lt || -tt >= lt || (I = V - (Rt + (C = V - Rt)) + (C - T), L = _ - (_t + (C = _ - _t)) + (C - T), B = D - (Et + (C = D - Et)) + (C - A), N = E - (Ft + (C = E - Ft)) + (C - A), I === 0 && B === 0 && L === 0 && N === 0) || (lt = u * O + i * Math.abs(tt), (tt += Rt * N + Ft * I - (Et * L + _t * B)) >= lt || -tt >= lt)) return tt;
|
|
3863
3863
|
C = (H = (X = I - ($ = (R = 134217729 * I) - (R - I))) * (K = Ft - (ot = (R = 134217729 * Ft) - (R - Ft))) - ((F = I * Ft) - $ * ot - X * ot - $ * K)) - (G = H - (Zt = (X = B - ($ = (R = 134217729 * B) - (R - B))) * (K = _t - (ot = (R = 134217729 * _t) - (R - _t))) - ((Mt = B * _t) - $ * ot - X * ot - $ * K))), w[0] = H - (G + C) + (C - Zt), C = (rt = F - ((ut = F + G) - (C = ut - F)) + (G - C)) - (G = rt - Mt), w[1] = rt - (G + C) + (C - Mt), C = (qt = ut + G) - ut, w[2] = ut - (qt - C) + (G - C), w[3] = qt;
|
|
3864
3864
|
const W = r(4, h, 4, w, d);
|
|
3865
3865
|
C = (H = (X = Rt - ($ = (R = 134217729 * Rt) - (R - Rt))) * (K = N - (ot = (R = 134217729 * N) - (R - N))) - ((F = Rt * N) - $ * ot - X * ot - $ * K)) - (G = H - (Zt = (X = Et - ($ = (R = 134217729 * Et) - (R - Et))) * (K = L - (ot = (R = 134217729 * L) - (R - L))) - ((Mt = Et * L) - $ * ot - X * ot - $ * K))), w[0] = H - (G + C) + (C - Zt), C = (rt = F - ((ut = F + G) - (C = ut - F)) + (G - C)) - (G = rt - Mt), w[1] = rt - (G + C) + (C - Mt), C = (qt = ut + G) - ut, w[2] = ut - (qt - C) + (G - C), w[3] = qt;
|
|
3866
|
-
const j = r(W, d, 4, w,
|
|
3866
|
+
const j = r(W, d, 4, w, c);
|
|
3867
3867
|
C = (H = (X = I - ($ = (R = 134217729 * I) - (R - I))) * (K = N - (ot = (R = 134217729 * N) - (R - N))) - ((F = I * N) - $ * ot - X * ot - $ * K)) - (G = H - (Zt = (X = B - ($ = (R = 134217729 * B) - (R - B))) * (K = L - (ot = (R = 134217729 * L) - (R - L))) - ((Mt = B * L) - $ * ot - X * ot - $ * K))), w[0] = H - (G + C) + (C - Zt), C = (rt = F - ((ut = F + G) - (C = ut - F)) + (G - C)) - (G = rt - Mt), w[1] = rt - (G + C) + (C - Mt), C = (qt = ut + G) - ut, w[2] = ut - (qt - C) + (G - C), w[3] = qt;
|
|
3868
|
-
const Nt = r(j,
|
|
3868
|
+
const Nt = r(j, c, 4, w, f);
|
|
3869
3869
|
return f[Nt - 1];
|
|
3870
|
-
}(
|
|
3871
|
-
}, e.orient2dfast = function(
|
|
3872
|
-
return (
|
|
3870
|
+
}(x, P, M, g, m, p, S);
|
|
3871
|
+
}, e.orient2dfast = function(x, P, M, g, m, p) {
|
|
3872
|
+
return (P - p) * (M - m) - (x - m) * (g - p);
|
|
3873
3873
|
}, Object.defineProperty(e, "__esModule", { value: !0 });
|
|
3874
3874
|
});
|
|
3875
3875
|
})(Ue, Ue.exports);
|
|
@@ -3896,34 +3896,34 @@ function Wn(n, t, e) {
|
|
|
3896
3896
|
var l = o[s];
|
|
3897
3897
|
i.remove(l), a = wn(l, a), r.push(a);
|
|
3898
3898
|
}
|
|
3899
|
-
var
|
|
3900
|
-
for (s = 0; s < r.length; s++)
|
|
3899
|
+
var u = new pn(16);
|
|
3900
|
+
for (s = 0; s < r.length; s++) u.insert(Xe(r[s]));
|
|
3901
3901
|
for (var h = t * t, d = e * e; r.length; ) {
|
|
3902
|
-
var
|
|
3903
|
-
if (!(
|
|
3904
|
-
var
|
|
3905
|
-
l = gr(i,
|
|
3902
|
+
var c = r.shift(), f = c.p, w = c.next.p, x = $e(f, w);
|
|
3903
|
+
if (!(x < d)) {
|
|
3904
|
+
var P = x / h;
|
|
3905
|
+
l = gr(i, c.prev.p, f, w, c.next.next.p, P, u), l && Math.min($e(l, f), $e(l, w)) <= P && (r.push(c), r.push(wn(l, c)), i.remove(l), u.remove(c), u.insert(Xe(c)), u.insert(Xe(c.next)));
|
|
3906
3906
|
}
|
|
3907
3907
|
}
|
|
3908
|
-
|
|
3909
|
-
var
|
|
3908
|
+
c = a;
|
|
3909
|
+
var M = [];
|
|
3910
3910
|
do
|
|
3911
|
-
|
|
3912
|
-
while (
|
|
3913
|
-
return
|
|
3911
|
+
M.push(c.p), c = c.next;
|
|
3912
|
+
while (c !== a);
|
|
3913
|
+
return M.push(c.p), M;
|
|
3914
3914
|
}
|
|
3915
3915
|
function gr(n, t, e, o, i, r, s) {
|
|
3916
3916
|
for (var a = new Ae([], pr), l = n.data; l; ) {
|
|
3917
|
-
for (var
|
|
3918
|
-
var h = l.children[
|
|
3917
|
+
for (var u = 0; u < l.children.length; u++) {
|
|
3918
|
+
var h = l.children[u], d = l.leaf ? He(h, e, o) : yr(e, o, h);
|
|
3919
3919
|
d > r || a.push({
|
|
3920
3920
|
node: h,
|
|
3921
3921
|
dist: d
|
|
3922
3922
|
});
|
|
3923
3923
|
}
|
|
3924
3924
|
for (; a.length && !a.peek().node.children; ) {
|
|
3925
|
-
var
|
|
3926
|
-
if (
|
|
3925
|
+
var c = a.pop(), f = c.node, w = He(f, t, e), x = He(f, o, i);
|
|
3926
|
+
if (c.dist < w && c.dist < x && xn(e, f, s) && xn(o, f, s)) return f;
|
|
3927
3927
|
}
|
|
3928
3928
|
l = a.pop(), l && (l = l.node);
|
|
3929
3929
|
}
|
|
@@ -3996,9 +3996,9 @@ function He(n, t, e) {
|
|
|
3996
3996
|
return r = n[0] - o, s = n[1] - i, r * r + s * s;
|
|
3997
3997
|
}
|
|
3998
3998
|
function Ee(n, t, e, o, i, r, s, a) {
|
|
3999
|
-
var l = e - n,
|
|
4000
|
-
m === 0 ? (b = 0, S = 1, v = g,
|
|
4001
|
-
var D = (1 - p) * n + p * e, _ = (1 - p) * t + p * o, E = (1 -
|
|
3999
|
+
var l = e - n, u = o - t, h = s - i, d = a - r, c = n - i, f = t - r, w = l * l + u * u, x = l * h + u * d, P = h * h + d * d, M = l * c + u * f, g = h * c + d * f, m = w * P - x * x, p, b, z, v, S = m, V = m;
|
|
4000
|
+
m === 0 ? (b = 0, S = 1, v = g, V = P) : (b = x * g - P * M, v = w * g - x * M, b < 0 ? (b = 0, v = g, V = P) : b > S && (b = S, v = g + x, V = P)), v < 0 ? (v = 0, -M < 0 ? b = 0 : -M > w ? b = S : (b = -M, S = w)) : v > V && (v = V, -M + x < 0 ? b = 0 : -M + x > w ? b = S : (b = -M + x, S = w)), p = b === 0 ? 0 : b / S, z = v === 0 ? 0 : v / V;
|
|
4001
|
+
var D = (1 - p) * n + p * e, _ = (1 - p) * t + p * o, E = (1 - z) * i + z * s, T = (1 - z) * r + z * a, A = E - D, O = T - _;
|
|
4002
4002
|
return A * A + O * O;
|
|
4003
4003
|
}
|
|
4004
4004
|
function br(n, t) {
|
|
@@ -4091,9 +4091,9 @@ function _r(n, t, e) {
|
|
|
4091
4091
|
a > Math.PI && (a -= 2 * Math.PI);
|
|
4092
4092
|
const l = Math.log(
|
|
4093
4093
|
Math.tan(r / 2 + Math.PI / 4) / Math.tan(i / 2 + Math.PI / 4)
|
|
4094
|
-
),
|
|
4094
|
+
), u = Math.abs(l) > 1e-11 ? s / l : Math.cos(i);
|
|
4095
4095
|
return Math.sqrt(
|
|
4096
|
-
s * s +
|
|
4096
|
+
s * s + u * u * a * a
|
|
4097
4097
|
) * o;
|
|
4098
4098
|
}
|
|
4099
4099
|
function Er(n, t, e, o = {}) {
|
|
@@ -4114,14 +4114,14 @@ function Er(n, t, e, o = {}) {
|
|
|
4114
4114
|
function Tr(n, t, e, o) {
|
|
4115
4115
|
o = o === void 0 ? Ht : Number(o);
|
|
4116
4116
|
const i = t / o, r = n[0] * Math.PI / 180, s = ie(n[1]), a = ie(e), l = i * Math.cos(a);
|
|
4117
|
-
let
|
|
4118
|
-
Math.abs(
|
|
4117
|
+
let u = s + l;
|
|
4118
|
+
Math.abs(u) > Math.PI / 2 && (u = u > 0 ? Math.PI - u : -Math.PI - u);
|
|
4119
4119
|
const h = Math.log(
|
|
4120
|
-
Math.tan(
|
|
4121
|
-
), d = Math.abs(h) > 1e-11 ? l / h : Math.cos(s),
|
|
4120
|
+
Math.tan(u / 2 + Math.PI / 4) / Math.tan(s / 2 + Math.PI / 4)
|
|
4121
|
+
), d = Math.abs(h) > 1e-11 ? l / h : Math.cos(s), c = i * Math.sin(a) / d;
|
|
4122
4122
|
return [
|
|
4123
|
-
((r +
|
|
4124
|
-
|
|
4123
|
+
((r + c) * 180 / Math.PI + 540) % 360 - 180,
|
|
4124
|
+
u * 180 / Math.PI
|
|
4125
4125
|
];
|
|
4126
4126
|
}
|
|
4127
4127
|
function Ar(n) {
|
|
@@ -4193,8 +4193,8 @@ function Pn(n, t, e) {
|
|
|
4193
4193
|
if (t === 0) return n;
|
|
4194
4194
|
const r = o ?? Xn(n);
|
|
4195
4195
|
return (i === !1 || i === void 0) && (n = Ar(n)), Pe(n, function(s) {
|
|
4196
|
-
const l = vr(r, s) + t,
|
|
4197
|
-
Er(r,
|
|
4196
|
+
const l = vr(r, s) + t, u = Dr(r, s), h = Sr(
|
|
4197
|
+
Er(r, u, l)
|
|
4198
4198
|
);
|
|
4199
4199
|
s[0] = h[0], s[1] = h[1];
|
|
4200
4200
|
}), n;
|
|
@@ -4202,8 +4202,8 @@ function Pn(n, t, e) {
|
|
|
4202
4202
|
function Gn(n, t, e = {}) {
|
|
4203
4203
|
if (e.final === !0)
|
|
4204
4204
|
return Ir(n, t);
|
|
4205
|
-
const o = se(n), i = se(t), r = ie(o[0]), s = ie(i[0]), a = ie(o[1]), l = ie(i[1]),
|
|
4206
|
-
return Ln(Math.atan2(
|
|
4205
|
+
const o = se(n), i = se(t), r = ie(o[0]), s = ie(i[0]), a = ie(o[1]), l = ie(i[1]), u = Math.sin(s - r) * Math.cos(l), h = Math.cos(a) * Math.sin(l) - Math.sin(a) * Math.cos(l) * Math.cos(s - r);
|
|
4206
|
+
return Ln(Math.atan2(u, h));
|
|
4207
4207
|
}
|
|
4208
4208
|
function Ir(n, t) {
|
|
4209
4209
|
let e = Gn(t, n);
|
|
@@ -4272,8 +4272,8 @@ function zn(n) {
|
|
|
4272
4272
|
if (t <= 2) return 0;
|
|
4273
4273
|
let e = 0, o = 0;
|
|
4274
4274
|
for (; o < t; ) {
|
|
4275
|
-
const i = n[o], r = n[o + 1 === t ? 0 : o + 1], s = n[o + 2 >= t ? (o + 2) % t : o + 2], a = i[0] * Ye, l = r[1] * Ye,
|
|
4276
|
-
e += (
|
|
4275
|
+
const i = n[o], r = n[o + 1 === t ? 0 : o + 1], s = n[o + 2 >= t ? (o + 2) % t : o + 2], a = i[0] * Ye, l = r[1] * Ye, u = s[0] * Ye;
|
|
4276
|
+
e += (u - a) * Math.sin(l), o++;
|
|
4277
4277
|
}
|
|
4278
4278
|
return e * Or;
|
|
4279
4279
|
}
|
|
@@ -4286,8 +4286,8 @@ function Nr(n) {
|
|
|
4286
4286
|
for (let s = 0; s < o.length - 1; s++) {
|
|
4287
4287
|
let a = Gn(o[s], o[s + 1]), l = Pn(t, -1 * a, {
|
|
4288
4288
|
pivot: e
|
|
4289
|
-
}),
|
|
4290
|
-
h < i && (i = h, r = Pn(
|
|
4289
|
+
}), u = Lr(l), h = Rr(u);
|
|
4290
|
+
h < i && (i = h, r = Pn(u, a, {
|
|
4291
4291
|
pivot: e
|
|
4292
4292
|
}));
|
|
4293
4293
|
}
|
|
@@ -4305,18 +4305,18 @@ function qr(n) {
|
|
|
4305
4305
|
}
|
|
4306
4306
|
class Ie extends An {
|
|
4307
4307
|
getBoxMesh() {
|
|
4308
|
-
le.identity(), le.setFromMatrix3(this.rotation), le.decompose(Te, fe, new
|
|
4309
|
-
const t = this.halfSize.clone().multiplyScalar(2), e = new
|
|
4308
|
+
le.identity(), le.setFromMatrix3(this.rotation), le.decompose(Te, fe, new y.Vector3());
|
|
4309
|
+
const t = this.halfSize.clone().multiplyScalar(2), e = new y.Mesh(new y.BoxGeometry(t.x, t.y, t.z));
|
|
4310
4310
|
return e.position.copy(this.center), e.rotation.setFromQuaternion(fe), e;
|
|
4311
4311
|
}
|
|
4312
4312
|
getBoxEdge(t = 16776960) {
|
|
4313
4313
|
const e = this.getBoxMesh();
|
|
4314
4314
|
Xr.setFromObject(e);
|
|
4315
|
-
const o = new
|
|
4316
|
-
return new
|
|
4315
|
+
const o = new y.EdgesGeometry(e.geometry.clone().applyMatrix4(e.matrixWorld));
|
|
4316
|
+
return new y.LineSegments(o, new y.LineBasicMaterial({ color: t, toneMapped: !1 }));
|
|
4317
4317
|
}
|
|
4318
4318
|
toJson() {
|
|
4319
|
-
return le.identity(), le.setFromMatrix3(this.rotation), le.decompose(Te, fe, new
|
|
4319
|
+
return le.identity(), le.setFromMatrix3(this.rotation), le.decompose(Te, fe, new y.Vector3()), {
|
|
4320
4320
|
size: this.halfSize.toArray(),
|
|
4321
4321
|
center: this.center.toArray(),
|
|
4322
4322
|
quaternion: fe.toArray()
|
|
@@ -4330,8 +4330,8 @@ class Ie extends An {
|
|
|
4330
4330
|
* @returns
|
|
4331
4331
|
*/
|
|
4332
4332
|
static from(t, e, o, i = new Ie()) {
|
|
4333
|
-
if (o instanceof
|
|
4334
|
-
else if (o instanceof
|
|
4333
|
+
if (o instanceof y.Euler) fe.setFromEuler(o);
|
|
4334
|
+
else if (o instanceof y.Quaternion) fe.copy(o);
|
|
4335
4335
|
else throw new Error("传入的旋转不是欧拉角或者四元数");
|
|
4336
4336
|
return le.compose(e, fe, Wr), i.center.copy(e), i.halfSize.copy(t.multiplyScalar(0.5)), i.rotation.setFromMatrix4(le), i;
|
|
4337
4337
|
}
|
|
@@ -4348,41 +4348,41 @@ class Ie extends An {
|
|
|
4348
4348
|
coordinates: [t.map((f) => [f.x, f.y])]
|
|
4349
4349
|
});
|
|
4350
4350
|
if (!r) throw new Error("2d obb 获取失败");
|
|
4351
|
-
const s = r.geometry.coordinates[0], a = Vn(s[0], s[1]), l = Vn(s[1], s[2]),
|
|
4352
|
-
Te.set(a, l, o), Sn.set(0, 0,
|
|
4351
|
+
const s = r.geometry.coordinates[0], a = Vn(s[0], s[1]), l = Vn(s[1], s[2]), u = Math.atan2(s[1][1] - s[0][1], s[1][0] - s[0][0]);
|
|
4352
|
+
Te.set(a, l, o), Sn.set(0, 0, u);
|
|
4353
4353
|
const [h, d] = qr(s);
|
|
4354
4354
|
return e.x = h, e.y = d, this.from(Te, e, Sn, i);
|
|
4355
4355
|
}
|
|
4356
4356
|
}
|
|
4357
|
-
const le = new
|
|
4357
|
+
const le = new y.Matrix4(), fe = new y.Quaternion(), Sn = new y.Euler(), Wr = new y.Vector3(1, 1, 1), Te = new y.Vector3(), Xr = new y.Box3();
|
|
4358
4358
|
function $r(n, t, e = 5e-3, o = 0.2) {
|
|
4359
4359
|
if (!n.length || !t.length) return 0;
|
|
4360
|
-
const i = Math.max(e, 0.03), r = e * e, s = /* @__PURE__ */ new Map(), a = (d,
|
|
4360
|
+
const i = Math.max(e, 0.03), r = e * e, s = /* @__PURE__ */ new Map(), a = (d, c, f) => `${Math.floor(d / i)},${Math.floor(c / i)},${Math.floor(f / i)}`;
|
|
4361
4361
|
for (const d of t) {
|
|
4362
|
-
const
|
|
4363
|
-
s.has(
|
|
4362
|
+
const c = a(d.x, d.y, d.z);
|
|
4363
|
+
s.has(c) || s.set(c, []), s.get(c).push(d);
|
|
4364
4364
|
}
|
|
4365
4365
|
let l = 0;
|
|
4366
|
-
const
|
|
4367
|
-
for (let d = -
|
|
4368
|
-
for (let
|
|
4369
|
-
for (let f = -
|
|
4370
|
-
d * d +
|
|
4366
|
+
const u = Math.ceil(e / i) + 1, h = [];
|
|
4367
|
+
for (let d = -u; d <= u; d++)
|
|
4368
|
+
for (let c = -u; c <= u; c++)
|
|
4369
|
+
for (let f = -u; f <= u; f++)
|
|
4370
|
+
d * d + c * c + f * f <= u * u && h.push([d, c, f]);
|
|
4371
4371
|
for (const d of n) {
|
|
4372
|
-
const
|
|
4373
|
-
let
|
|
4374
|
-
for (const [
|
|
4375
|
-
const m = `${
|
|
4372
|
+
const c = Math.floor(d.x / i), f = Math.floor(d.y / i), w = Math.floor(d.z / i);
|
|
4373
|
+
let x = !1;
|
|
4374
|
+
for (const [P, M, g] of h) {
|
|
4375
|
+
const m = `${c + P},${f + M},${w + g}`;
|
|
4376
4376
|
if (s.has(m)) {
|
|
4377
4377
|
for (const p of s.get(m))
|
|
4378
4378
|
if (d.distanceToSquared(p) < r) {
|
|
4379
|
-
|
|
4379
|
+
x = !0;
|
|
4380
4380
|
break;
|
|
4381
4381
|
}
|
|
4382
|
-
if (
|
|
4382
|
+
if (x) break;
|
|
4383
4383
|
}
|
|
4384
4384
|
}
|
|
4385
|
-
if (
|
|
4385
|
+
if (x && (l++, l / n.length > o))
|
|
4386
4386
|
return l / n.length;
|
|
4387
4387
|
}
|
|
4388
4388
|
return l / n.length;
|
|
@@ -4405,7 +4405,7 @@ function Ge(n, t, e, o) {
|
|
|
4405
4405
|
return !1;
|
|
4406
4406
|
}
|
|
4407
4407
|
function vn(n, t) {
|
|
4408
|
-
const e = new
|
|
4408
|
+
const e = new y.Vector3(), o = new y.Vector3();
|
|
4409
4409
|
n.getSize(e), t.getSize(o);
|
|
4410
4410
|
const i = e.x * e.y * e.z, r = o.x * o.y * o.z;
|
|
4411
4411
|
return i > r ? 1 : i < r ? -1 : 0;
|
|
@@ -4437,7 +4437,7 @@ function Dn(n) {
|
|
|
4437
4437
|
function _n(n, t, e, o) {
|
|
4438
4438
|
const i = [];
|
|
4439
4439
|
for (let s = 0; s < n.length; s++)
|
|
4440
|
-
i.push(new
|
|
4440
|
+
i.push(new y.Vector3(
|
|
4441
4441
|
n[s][0],
|
|
4442
4442
|
n[s][1],
|
|
4443
4443
|
0
|
|
@@ -4450,196 +4450,196 @@ function _n(n, t, e, o) {
|
|
|
4450
4450
|
const Mi = (n) => {
|
|
4451
4451
|
if (n.length == 0) return [];
|
|
4452
4452
|
const t = [], e = /* @__PURE__ */ new Map();
|
|
4453
|
-
for (let
|
|
4454
|
-
let
|
|
4455
|
-
|
|
4456
|
-
const
|
|
4457
|
-
if (
|
|
4453
|
+
for (let r = 0; r < n.length; r++) {
|
|
4454
|
+
let s = n[r].points.map((P) => [P.x, P.y]), a = n[r].obj_id;
|
|
4455
|
+
a = a.replace(/calcony railing/g, "balcony railing").replace(/glass balcony railing/g, "balcony railing").replace(/metal balcony railing/g, "balcony railing").replace(/temporary construction guardrail/g, "balcony railing").replace(/the floor of the house/g, "floor").replace(/the outdoor floor/g, "floor"), a.split("_").slice(1, 3).join("_").split(".")[0].split("_")[0];
|
|
4456
|
+
const l = a.indexOf("_") + 1, u = a.lastIndexOf("_"), h = a.substring(l, u);
|
|
4457
|
+
if (h === "wall")
|
|
4458
4458
|
continue;
|
|
4459
|
-
let
|
|
4460
|
-
for (let
|
|
4461
|
-
|
|
4462
|
-
n[
|
|
4463
|
-
n[
|
|
4464
|
-
n[
|
|
4459
|
+
let d = [];
|
|
4460
|
+
for (let P = 0; P < n[r].points.length; P++)
|
|
4461
|
+
d.push(new y.Vector3(
|
|
4462
|
+
n[r].points[P].x,
|
|
4463
|
+
n[r].points[P].y,
|
|
4464
|
+
n[r].points[P].z
|
|
4465
4465
|
));
|
|
4466
|
-
let
|
|
4467
|
-
if (
|
|
4468
|
-
let
|
|
4469
|
-
for (let
|
|
4470
|
-
let
|
|
4471
|
-
if (
|
|
4472
|
-
const
|
|
4473
|
-
|
|
4466
|
+
let c = -99999;
|
|
4467
|
+
if (h === "floor") {
|
|
4468
|
+
let P = /* @__PURE__ */ new Map();
|
|
4469
|
+
for (let g = 0; g < n[r].points.length; g++) {
|
|
4470
|
+
let m = n[r].points[g].z;
|
|
4471
|
+
if (m = Math.floor(m * 10) / 10, P.has(m)) {
|
|
4472
|
+
const p = P.get(m);
|
|
4473
|
+
p.num += 1, p.points.push(n[r].points[g]), P.set(m, p);
|
|
4474
4474
|
} else
|
|
4475
|
-
|
|
4475
|
+
P.set(m, { num: 1, points: [n[r].points[g]] });
|
|
4476
4476
|
}
|
|
4477
|
-
let M = [...
|
|
4478
|
-
(
|
|
4477
|
+
let M = [...P.entries()].reduce(
|
|
4478
|
+
(g, m) => m[1].num > g[1].num ? m : g
|
|
4479
4479
|
);
|
|
4480
|
-
|
|
4480
|
+
s = [], s = M[1].points.map((g) => [g.x, g.y]), d = [], d = M[1].points.map((g) => new y.Vector3(g.x, g.y, g.z)), c = M[0];
|
|
4481
4481
|
}
|
|
4482
|
-
const
|
|
4483
|
-
points:
|
|
4484
|
-
path: cn(
|
|
4485
|
-
h:
|
|
4486
|
-
minz:
|
|
4487
|
-
maxz:
|
|
4488
|
-
center: { x:
|
|
4489
|
-
obj_id: n[
|
|
4490
|
-
type:
|
|
4491
|
-
averagePz: n[
|
|
4482
|
+
const f = Dn(d), w = {
|
|
4483
|
+
points: d,
|
|
4484
|
+
path: cn(s),
|
|
4485
|
+
h: f.h,
|
|
4486
|
+
minz: f.minz,
|
|
4487
|
+
maxz: f.maxz,
|
|
4488
|
+
center: { x: f.x, y: f.y, z: f.z },
|
|
4489
|
+
obj_id: n[r].obj_id,
|
|
4490
|
+
type: h,
|
|
4491
|
+
averagePz: n[r].averagePz,
|
|
4492
4492
|
obb: null,
|
|
4493
4493
|
isDel: !1,
|
|
4494
|
-
obj_id:
|
|
4495
|
-
positionArr: [n[
|
|
4494
|
+
obj_id: a,
|
|
4495
|
+
positionArr: [n[r].position]
|
|
4496
4496
|
};
|
|
4497
|
-
if (
|
|
4498
|
-
let
|
|
4499
|
-
for (let
|
|
4500
|
-
if (t[
|
|
4501
|
-
|
|
4497
|
+
if (w.obb = _n(w.path, w.center, w.h, (w.maxz + w.minz) / 2), w.obb == null) continue;
|
|
4498
|
+
let x = -1;
|
|
4499
|
+
for (let P = 0; P < t.length; P++)
|
|
4500
|
+
if (t[P].type == h) {
|
|
4501
|
+
x = P;
|
|
4502
4502
|
break;
|
|
4503
4503
|
}
|
|
4504
|
-
if (
|
|
4505
|
-
type:
|
|
4506
|
-
array: [
|
|
4507
|
-
}),
|
|
4508
|
-
if (e.has(
|
|
4509
|
-
const
|
|
4510
|
-
|
|
4504
|
+
if (x != -1 ? t[x].array.push(w) : t.push({
|
|
4505
|
+
type: h,
|
|
4506
|
+
array: [w]
|
|
4507
|
+
}), h == "floor" && c != -99999)
|
|
4508
|
+
if (e.has(c)) {
|
|
4509
|
+
const P = e.get(c);
|
|
4510
|
+
P.num += w.points.length, P.datas.push(w), e.set(c, P);
|
|
4511
4511
|
} else
|
|
4512
|
-
e.set(
|
|
4512
|
+
e.set(c, { num: w.points.length, datas: [w] });
|
|
4513
4513
|
}
|
|
4514
4514
|
let o = -1 / 0;
|
|
4515
4515
|
if (e.size > 0) {
|
|
4516
|
-
let
|
|
4517
|
-
for (const [
|
|
4518
|
-
const { num:
|
|
4519
|
-
|
|
4516
|
+
let r = [];
|
|
4517
|
+
for (const [s, a] of e.entries()) {
|
|
4518
|
+
const { num: l, datas: u } = a;
|
|
4519
|
+
l > 3e3 && (s > o && (o = s), r.push(...u));
|
|
4520
4520
|
}
|
|
4521
|
-
for (let
|
|
4522
|
-
if (t[
|
|
4523
|
-
t[
|
|
4521
|
+
for (let s = 0; s < t.length; s++)
|
|
4522
|
+
if (t[s].type == "floor") {
|
|
4523
|
+
t[s].array = r;
|
|
4524
4524
|
break;
|
|
4525
4525
|
}
|
|
4526
4526
|
}
|
|
4527
|
-
for (let
|
|
4528
|
-
const
|
|
4529
|
-
for (let
|
|
4530
|
-
if (
|
|
4527
|
+
for (let r = 0; r < t.length; r++) {
|
|
4528
|
+
const s = t[r].array, a = [], l = [];
|
|
4529
|
+
for (let h = 0; h < s.length; h++) {
|
|
4530
|
+
if (s[h].obb == null || a.includes(h))
|
|
4531
4531
|
continue;
|
|
4532
|
-
const
|
|
4533
|
-
...
|
|
4534
|
-
obb:
|
|
4532
|
+
const d = {
|
|
4533
|
+
...s[h],
|
|
4534
|
+
obb: s[h].obb.clone()
|
|
4535
4535
|
};
|
|
4536
|
-
for (let
|
|
4537
|
-
if (
|
|
4536
|
+
for (let c = h + 1; c < s.length; c++) {
|
|
4537
|
+
if (s[c].obb == null || a.includes(c))
|
|
4538
4538
|
continue;
|
|
4539
|
-
if (
|
|
4540
|
-
|
|
4541
|
-
for (let
|
|
4542
|
-
(
|
|
4543
|
-
const
|
|
4544
|
-
|
|
4545
|
-
const
|
|
4546
|
-
|
|
4539
|
+
if (d.obb.intersectsOBB(s[c].obb)) {
|
|
4540
|
+
a.push(c);
|
|
4541
|
+
for (let P = 0; P < s[c].points.length; P++)
|
|
4542
|
+
(s[c].points[P].z > o && s[c].points[P].z - o > 0.1 || d.type == "floor") && d.points.push(s[c].points[P]);
|
|
4543
|
+
const w = d.points.map((P) => [P.x, P.y]);
|
|
4544
|
+
d.path = cn(w);
|
|
4545
|
+
const x = Dn(d.points);
|
|
4546
|
+
d.h = x.h, d.minz = x.minz, d.maxz = x.maxz, d.center = { x: x.x, y: x.y, z: x.z }, d.obb = _n(d.path, d.center, d.h, (d.maxz + d.minz) / 2), d.positionArr.push(...s[c].positionArr), c = h;
|
|
4547
4547
|
}
|
|
4548
4548
|
}
|
|
4549
|
-
|
|
4549
|
+
d.path.length > s[h].path.length && (a.push(h), l.push(d));
|
|
4550
4550
|
}
|
|
4551
|
-
const
|
|
4552
|
-
for (let
|
|
4553
|
-
|
|
4554
|
-
|
|
4555
|
-
}
|
|
4556
|
-
for (let
|
|
4557
|
-
const
|
|
4558
|
-
if (
|
|
4551
|
+
const u = [];
|
|
4552
|
+
for (let h = 0; h < s.length; h++)
|
|
4553
|
+
a.includes(h) || u.push(s[h]);
|
|
4554
|
+
u.push(...l), t[r].array = u;
|
|
4555
|
+
}
|
|
4556
|
+
for (let r = 0; r < t.length; r++) {
|
|
4557
|
+
const s = t[r].type;
|
|
4558
|
+
if (s === "people" || s === "floor")
|
|
4559
4559
|
continue;
|
|
4560
|
-
const
|
|
4561
|
-
for (let
|
|
4562
|
-
const
|
|
4563
|
-
|
|
4564
|
-
const
|
|
4565
|
-
if (
|
|
4566
|
-
const
|
|
4567
|
-
|
|
4568
|
-
const
|
|
4569
|
-
let
|
|
4570
|
-
for (const
|
|
4571
|
-
if (
|
|
4572
|
-
|
|
4560
|
+
const a = t[r].array;
|
|
4561
|
+
for (let l = 0; l < a.length; l++) {
|
|
4562
|
+
const u = a[l].obb, h = a[l].minz;
|
|
4563
|
+
a[l].maxz;
|
|
4564
|
+
const d = a[l].averagePz;
|
|
4565
|
+
if (s === "window" || s === "door" || s === "tv" || s === "chair" || s === "cabinet" || s === "table") {
|
|
4566
|
+
const c = new y.Vector3();
|
|
4567
|
+
u.getSize(c);
|
|
4568
|
+
const f = [c.x, c.y, c.z];
|
|
4569
|
+
let w = 0;
|
|
4570
|
+
for (const x of f)
|
|
4571
|
+
if (x < 0.2 && (w++, w === 2)) {
|
|
4572
|
+
a[l].isDel = !0;
|
|
4573
4573
|
break;
|
|
4574
4574
|
}
|
|
4575
4575
|
}
|
|
4576
|
-
if (!
|
|
4577
|
-
for (let
|
|
4578
|
-
const
|
|
4579
|
-
if (
|
|
4576
|
+
if (!a[l].isDel)
|
|
4577
|
+
for (let c = r + 1; c < t.length; c++) {
|
|
4578
|
+
const f = t[c].type;
|
|
4579
|
+
if (f === "people" || f === "floor")
|
|
4580
4580
|
continue;
|
|
4581
|
-
const
|
|
4582
|
-
for (let
|
|
4583
|
-
if (
|
|
4584
|
-
const
|
|
4585
|
-
if (
|
|
4586
|
-
pe(
|
|
4587
|
-
const
|
|
4588
|
-
if (
|
|
4589
|
-
|
|
4581
|
+
const w = t[c].array;
|
|
4582
|
+
for (let x = 0; x < w.length; x++) {
|
|
4583
|
+
if (w[x].isDel) continue;
|
|
4584
|
+
const P = w[x].obb, M = w[x].minz;
|
|
4585
|
+
if (w[x].maxz, u.intersectsOBB(P)) {
|
|
4586
|
+
pe(w[x].points, u);
|
|
4587
|
+
const g = pe(a[l].points, P), m = vn(u, P);
|
|
4588
|
+
if (g >= 0.3 && m == -1) {
|
|
4589
|
+
a[l].isDel = !0;
|
|
4590
4590
|
break;
|
|
4591
4591
|
}
|
|
4592
|
-
if (
|
|
4593
|
-
if (
|
|
4594
|
-
if (
|
|
4595
|
-
|
|
4592
|
+
if (s !== "wall" && s !== "floor" && s !== "roof") {
|
|
4593
|
+
if (s === "window") {
|
|
4594
|
+
if (f === "balcony railing" && we(u, w[x].points)) {
|
|
4595
|
+
w[x].isDel = !0;
|
|
4596
4596
|
continue;
|
|
4597
4597
|
}
|
|
4598
|
-
if (
|
|
4599
|
-
|
|
4598
|
+
if (f === "balcony railing" && we(P, a[l].points)) {
|
|
4599
|
+
a[l].isDel = !0;
|
|
4600
4600
|
break;
|
|
4601
4601
|
}
|
|
4602
|
-
if (
|
|
4603
|
-
|
|
4602
|
+
if (f === "balcony railing" && Ge(u, P, a[l].points, w[x].points) && (Math.abs(h - M) < 0.1 || Math.abs(M - d) > 0.3)) {
|
|
4603
|
+
w[x].isDel = !0;
|
|
4604
4604
|
continue;
|
|
4605
4605
|
}
|
|
4606
|
-
} else if (
|
|
4607
|
-
if (
|
|
4608
|
-
|
|
4606
|
+
} else if (s === "balcony railing") {
|
|
4607
|
+
if (f === "window" && we(u, w[x].points)) {
|
|
4608
|
+
w[x].isDel = !0;
|
|
4609
4609
|
continue;
|
|
4610
4610
|
}
|
|
4611
|
-
if (
|
|
4612
|
-
|
|
4611
|
+
if (f === "window" && we(P, a[l].points)) {
|
|
4612
|
+
a[l].isDel = !0;
|
|
4613
4613
|
break;
|
|
4614
4614
|
}
|
|
4615
|
-
if (
|
|
4616
|
-
|
|
4615
|
+
if (f === "window" && Ge(u, P, a[l].points, w[x].points) && (Math.abs(h - M) < 0.1 || Math.abs(h - d) > 0.3)) {
|
|
4616
|
+
a[l].isDel = !0;
|
|
4617
4617
|
break;
|
|
4618
4618
|
}
|
|
4619
4619
|
}
|
|
4620
|
-
let
|
|
4621
|
-
const
|
|
4622
|
-
if (
|
|
4623
|
-
if (
|
|
4624
|
-
|
|
4620
|
+
let p = !1, b = [], z = [];
|
|
4621
|
+
const v = a[l].points, S = w[x].points;
|
|
4622
|
+
if (v.length > S.length ? (p = !0, b = v, z = S) : (b = S, z = v), $r(z, b, 0.03, 0.5) > 0.5)
|
|
4623
|
+
if (p)
|
|
4624
|
+
w[x].isDel = !0;
|
|
4625
4625
|
else {
|
|
4626
|
-
|
|
4626
|
+
a[l].isDel = !0;
|
|
4627
4627
|
break;
|
|
4628
4628
|
}
|
|
4629
|
-
else if (Ge(
|
|
4630
|
-
const
|
|
4631
|
-
if (
|
|
4632
|
-
if (
|
|
4633
|
-
|
|
4629
|
+
else if (Ge(u, P)) {
|
|
4630
|
+
const D = vn(u, P);
|
|
4631
|
+
if (D === 1 || D === 0) {
|
|
4632
|
+
if (f === "switch") continue;
|
|
4633
|
+
v.length > S.length ? pe(z, u) >= 0.5 && (w[x].isDel = !0) : pe(b, u) >= 0.5 && (w[x].isDel = !0);
|
|
4634
4634
|
} else {
|
|
4635
|
-
if (
|
|
4636
|
-
if (
|
|
4637
|
-
if (pe(
|
|
4638
|
-
|
|
4635
|
+
if (s === "switch") continue;
|
|
4636
|
+
if (v.length > S.length) {
|
|
4637
|
+
if (pe(b, P) >= 0.5) {
|
|
4638
|
+
a[l].isDel = !0;
|
|
4639
4639
|
break;
|
|
4640
4640
|
}
|
|
4641
|
-
} else if (pe(
|
|
4642
|
-
|
|
4641
|
+
} else if (pe(z, P) >= 0.5) {
|
|
4642
|
+
a[l].isDel = !0;
|
|
4643
4643
|
break;
|
|
4644
4644
|
}
|
|
4645
4645
|
}
|
|
@@ -4647,33 +4647,48 @@ const Mi = (n) => {
|
|
|
4647
4647
|
}
|
|
4648
4648
|
}
|
|
4649
4649
|
}
|
|
4650
|
-
if (
|
|
4650
|
+
if (a[l].isDel) break;
|
|
4651
4651
|
}
|
|
4652
4652
|
}
|
|
4653
4653
|
}
|
|
4654
|
-
for (let
|
|
4655
|
-
const
|
|
4656
|
-
for (let
|
|
4657
|
-
let
|
|
4658
|
-
const
|
|
4659
|
-
if (Math.abs(
|
|
4660
|
-
|
|
4654
|
+
for (let r = 0; r < t.length; r++) {
|
|
4655
|
+
const s = t[r].type, a = t[r].array;
|
|
4656
|
+
for (let l = 0; l < a.length; l++) {
|
|
4657
|
+
let u = a[l].maxz, h = a[l].minz, d = s === "switch" ? 0.1 : 0.3;
|
|
4658
|
+
const c = a[l].averagePz;
|
|
4659
|
+
if (Math.abs(u - c) < d) {
|
|
4660
|
+
a[l].isDel = !0;
|
|
4661
4661
|
continue;
|
|
4662
4662
|
}
|
|
4663
|
-
if (
|
|
4664
|
-
const
|
|
4665
|
-
(
|
|
4663
|
+
if (s === "window" || s === "door" || s === "tv") {
|
|
4664
|
+
const f = Math.abs(u - c), w = Math.abs(h - c);
|
|
4665
|
+
(s === "tv" && w < 1.6 || s !== "window" && f < 1.6) && (a[l].isDel = !0), s === "window" && f < 1 && (a[l].isDel = !0);
|
|
4666
4666
|
}
|
|
4667
|
-
if (
|
|
4668
|
-
const
|
|
4669
|
-
|
|
4667
|
+
if (s === "chair") {
|
|
4668
|
+
const f = new y.Vector3();
|
|
4669
|
+
a[l].obb.getSize(f), (f.x < 0.1 || f.y < 0.1 || f.z < 0.2) && (a[l].isDel = !0);
|
|
4670
4670
|
}
|
|
4671
|
-
|
|
4671
|
+
s === "balcony railing" && (Math.abs(u - h) < 0.4 && (a[l].isDel = !0), (h < c && Math.abs(h - c) > 1 || h > c && Math.abs(h - c) > 1) && (a[l].isDel = !0), u < c && (a[l].isDel = !0)), s === "people" && (Math.abs(u - h) < 1 && (a[l].isDel = !0), h > c && h - c > 0.3 && (a[l].isDel = !0), u < c && (a[l].isDel = !0)), s === "floor" && a[l].points.length < 500 && (a[l].isDel = !0);
|
|
4672
4672
|
}
|
|
4673
4673
|
}
|
|
4674
|
-
for (let
|
|
4675
|
-
t[
|
|
4676
|
-
|
|
4674
|
+
for (let r = 0; r < t.length; r++)
|
|
4675
|
+
t[r].array = t[r].array.filter((s) => !s.isDel);
|
|
4676
|
+
const i = [];
|
|
4677
|
+
for (let r = 0; r < t.length; r++) {
|
|
4678
|
+
const s = t[r].array;
|
|
4679
|
+
for (let a = 0; a < s.length; a++)
|
|
4680
|
+
i.push({
|
|
4681
|
+
obbBox: s[a].obb,
|
|
4682
|
+
box: new y.Box3().setFromPoints(s[a].points),
|
|
4683
|
+
category: s[a].type,
|
|
4684
|
+
center: { x: s[a].center.x, y: s[a].center.y, z: (s[a].minz + s[a].maxz) / 2 },
|
|
4685
|
+
name: s[a].obj_id,
|
|
4686
|
+
obj_id: s[a].obj_id,
|
|
4687
|
+
pcdPoints: s[a].points,
|
|
4688
|
+
positionArr: s[a].positionArr
|
|
4689
|
+
});
|
|
4690
|
+
}
|
|
4691
|
+
return i;
|
|
4677
4692
|
};
|
|
4678
4693
|
function Hr(n, t, e, o) {
|
|
4679
4694
|
return 1 + (n[t][0] === 0 || n[e][0] === 0 || n[o][0] === 0 ? 1 : 0);
|
|
@@ -4684,31 +4699,31 @@ function Yr(n) {
|
|
|
4684
4699
|
return t.length % 2 ? t[e] : (t[e - 1] + t[e]) / 2;
|
|
4685
4700
|
}
|
|
4686
4701
|
function Gr(n, t, e, o, i, r) {
|
|
4687
|
-
const s = Math.hypot(e - i, o - r), a = Math.hypot(n - i, t - r), l = Math.hypot(n - e, t - o),
|
|
4702
|
+
const s = Math.hypot(e - i, o - r), a = Math.hypot(n - i, t - r), l = Math.hypot(n - e, t - o), u = Math.abs(
|
|
4688
4703
|
(e - n) * (r - t) - (i - n) * (o - t)
|
|
4689
4704
|
) / 2, h = Math.max(s, a, l);
|
|
4690
|
-
return
|
|
4705
|
+
return u === 0 ? {
|
|
4691
4706
|
radius: 1 / 0,
|
|
4692
4707
|
maxEdge: h
|
|
4693
4708
|
} : {
|
|
4694
|
-
radius: s * a * l / (4 *
|
|
4709
|
+
radius: s * a * l / (4 * u),
|
|
4695
4710
|
maxEdge: h
|
|
4696
4711
|
};
|
|
4697
4712
|
}
|
|
4698
4713
|
function jr(n, t) {
|
|
4699
4714
|
const e = [], o = /* @__PURE__ */ new Set(), i = (r, s) => r < s ? `${r}_${s}` : `${s}_${r}`;
|
|
4700
4715
|
for (let r = 0; r < t.length; r += 3) {
|
|
4701
|
-
const s = t[r], a = t[r + 1], l = t[r + 2],
|
|
4716
|
+
const s = t[r], a = t[r + 1], l = t[r + 2], u = [
|
|
4702
4717
|
[s, a],
|
|
4703
4718
|
[a, l],
|
|
4704
4719
|
[l, s]
|
|
4705
4720
|
];
|
|
4706
|
-
for (const [h, d] of
|
|
4707
|
-
const
|
|
4708
|
-
if (o.has(
|
|
4709
|
-
o.add(
|
|
4710
|
-
const [f, w] = n[h], [
|
|
4711
|
-
Number.isFinite(
|
|
4721
|
+
for (const [h, d] of u) {
|
|
4722
|
+
const c = i(h, d);
|
|
4723
|
+
if (o.has(c)) continue;
|
|
4724
|
+
o.add(c);
|
|
4725
|
+
const [f, w] = n[h], [x, P] = n[d], M = Math.hypot(x - f, P - w);
|
|
4726
|
+
Number.isFinite(M) && M > 0 && e.push(M);
|
|
4712
4727
|
}
|
|
4713
4728
|
}
|
|
4714
4729
|
return Yr(e);
|
|
@@ -4737,10 +4752,10 @@ function Kr(n, t) {
|
|
|
4737
4752
|
do {
|
|
4738
4753
|
i.push(n[s]), r.add(s);
|
|
4739
4754
|
const l = e.get(s) || [];
|
|
4740
|
-
let
|
|
4741
|
-
if (
|
|
4755
|
+
let u = l.find((h) => h !== a && !r.has(h));
|
|
4756
|
+
if (u === void 0 && (u = l.find((h) => h !== a)), u === void 0)
|
|
4742
4757
|
break;
|
|
4743
|
-
a = s, s =
|
|
4758
|
+
a = s, s = u;
|
|
4744
4759
|
} while (s !== o && i.length <= t.length + 1);
|
|
4745
4760
|
return i;
|
|
4746
4761
|
}
|
|
@@ -4757,30 +4772,30 @@ function zi(n, t = {}) {
|
|
|
4757
4772
|
const a = jr(i, s);
|
|
4758
4773
|
if (!Number.isFinite(a) || a <= 0)
|
|
4759
4774
|
return [];
|
|
4760
|
-
const l = a * e,
|
|
4775
|
+
const l = a * e, u = /* @__PURE__ */ new Map(), h = (f, w) => f < w ? `${f}_${w}` : `${w}_${f}`;
|
|
4761
4776
|
for (let f = 0; f < s.length; f += 3) {
|
|
4762
|
-
const w = s[f],
|
|
4763
|
-
|
|
4777
|
+
const w = s[f], x = s[f + 1], P = s[f + 2], [M, g] = i[w], [m, p] = i[x], [b, z] = i[P], { radius: v, maxEdge: S } = Gr(
|
|
4778
|
+
M,
|
|
4764
4779
|
g,
|
|
4765
4780
|
m,
|
|
4766
4781
|
p,
|
|
4767
4782
|
b,
|
|
4768
|
-
|
|
4769
|
-
),
|
|
4770
|
-
if (v <= 1 /
|
|
4783
|
+
z
|
|
4784
|
+
), V = Hr(i, w, x, P) * o;
|
|
4785
|
+
if (v <= 1 / V && S <= l) {
|
|
4771
4786
|
const D = [
|
|
4772
|
-
[w,
|
|
4773
|
-
[
|
|
4774
|
-
[
|
|
4787
|
+
[w, x],
|
|
4788
|
+
[x, P],
|
|
4789
|
+
[P, w]
|
|
4775
4790
|
];
|
|
4776
4791
|
for (const [_, E] of D) {
|
|
4777
4792
|
const T = h(_, E);
|
|
4778
|
-
|
|
4793
|
+
u.set(T, (u.get(T) || 0) + 1);
|
|
4779
4794
|
}
|
|
4780
4795
|
}
|
|
4781
4796
|
}
|
|
4782
4797
|
const d = [];
|
|
4783
|
-
for (const [f, w] of
|
|
4798
|
+
for (const [f, w] of u)
|
|
4784
4799
|
w === 1 && d.push(f.split("_").map(Number));
|
|
4785
4800
|
return d.length ? Kr(i, d) : [];
|
|
4786
4801
|
}
|
|
@@ -4791,16 +4806,16 @@ function be(n, t) {
|
|
|
4791
4806
|
function Qr(n) {
|
|
4792
4807
|
let t = 0, e = 0, o = 0;
|
|
4793
4808
|
for (let i = 0; i < 4; i++) {
|
|
4794
|
-
const r = n[i], s = n[(i + 1) % 4], a = s.x - r.x, l = s.y - r.y,
|
|
4795
|
-
|
|
4809
|
+
const r = n[i], s = n[(i + 1) % 4], a = s.x - r.x, l = s.y - r.y, u = Math.sqrt(a * a + l * l);
|
|
4810
|
+
u > t && (t = u, e = a / u, o = l / u);
|
|
4796
4811
|
}
|
|
4797
4812
|
return { longSide: t, dirX: e, dirY: o };
|
|
4798
4813
|
}
|
|
4799
4814
|
function jn(n, t, e) {
|
|
4800
4815
|
const i = [];
|
|
4801
4816
|
for (const r of n) {
|
|
4802
|
-
const s = (r.start.x + r.end.x) / 2, a = (r.start.y + r.end.y) / 2, l = s - t,
|
|
4803
|
-
l * l +
|
|
4817
|
+
const s = (r.start.x + r.end.x) / 2, a = (r.start.y + r.end.y) / 2, l = s - t, u = a - e;
|
|
4818
|
+
l * l + u * u <= 3 * 3 && i.push(r.start.z, r.end.z);
|
|
4804
4819
|
}
|
|
4805
4820
|
if (i.length === 0) {
|
|
4806
4821
|
const r = [];
|
|
@@ -4813,8 +4828,8 @@ function Un(n, t, e, o, i, r) {
|
|
|
4813
4828
|
const s = i - e, a = r - o, l = s * s + a * a;
|
|
4814
4829
|
if (l < 1e-12)
|
|
4815
4830
|
return { dist: Math.sqrt((n - e) ** 2 + (t - o) ** 2), t: 0 };
|
|
4816
|
-
const
|
|
4817
|
-
return { dist: Math.sqrt((n -
|
|
4831
|
+
const u = n - e, h = t - o, d = (u * s + h * a) / l, c = e + d * s, f = o + d * a;
|
|
4832
|
+
return { dist: Math.sqrt((n - c) ** 2 + (t - f) ** 2), t: d };
|
|
4818
4833
|
}
|
|
4819
4834
|
function Jr(n, t, e = 0.15) {
|
|
4820
4835
|
let o = 0, i = 0;
|
|
@@ -4837,21 +4852,21 @@ function ei(n, t, e = 0.15) {
|
|
|
4837
4852
|
if (r < 1e-12) return 0;
|
|
4838
4853
|
const s = -i / r, a = o / r, l = [[], []];
|
|
4839
4854
|
for (let d = 0; d < 2; d++) {
|
|
4840
|
-
const
|
|
4855
|
+
const c = d === 0 ? n.start : n.end;
|
|
4841
4856
|
for (const f of t) {
|
|
4842
4857
|
if (f === n) continue;
|
|
4843
|
-
const w = be(
|
|
4844
|
-
let
|
|
4845
|
-
if (w <= e ?
|
|
4846
|
-
const
|
|
4847
|
-
if (m < 1e-12 || Math.abs(o *
|
|
4848
|
-
const b = (
|
|
4858
|
+
const w = be(c, f.start), x = be(c, f.end);
|
|
4859
|
+
let P = null;
|
|
4860
|
+
if (w <= e ? P = f.end : x <= e && (P = f.start), !P) continue;
|
|
4861
|
+
const M = f.end.x - f.start.x, g = f.end.y - f.start.y, m = Math.sqrt(M * M + g * g);
|
|
4862
|
+
if (m < 1e-12 || Math.abs(o * M + i * g) / (r * m) >= 0.342) continue;
|
|
4863
|
+
const b = (P.x - c.x) * s + (P.y - c.y) * a;
|
|
4849
4864
|
l[d].push(b > 0 ? 1 : -1);
|
|
4850
4865
|
}
|
|
4851
4866
|
}
|
|
4852
4867
|
if (l[0].length === 0 || l[1].length === 0) return 0;
|
|
4853
|
-
const
|
|
4854
|
-
return
|
|
4868
|
+
const u = [...l[0], ...l[1]];
|
|
4869
|
+
return u.every((d) => d === u[0]) ? 2 : 1;
|
|
4855
4870
|
}
|
|
4856
4871
|
function ni(n, t, e) {
|
|
4857
4872
|
const o = Jr(n, e), i = ti(n, t), r = ei(n, e);
|
|
@@ -4893,18 +4908,18 @@ function ii(n, t = 0.05) {
|
|
|
4893
4908
|
function si(n, t, e, o, i) {
|
|
4894
4909
|
const r = [];
|
|
4895
4910
|
for (const a of n) {
|
|
4896
|
-
const l = a.seg,
|
|
4897
|
-
r.push({ l: Math.min(
|
|
4911
|
+
const l = a.seg, u = (l.start.x - t.start.x) * e + (l.start.y - t.start.y) * o, h = (l.end.x - t.start.x) * e + (l.end.y - t.start.y) * o;
|
|
4912
|
+
r.push({ l: Math.min(u, h), r: Math.max(u, h), idx: a.idx });
|
|
4898
4913
|
}
|
|
4899
4914
|
r.sort((a, l) => a.l - l.l);
|
|
4900
4915
|
const s = [];
|
|
4901
|
-
for (const { l: a, r: l, idx:
|
|
4916
|
+
for (const { l: a, r: l, idx: u } of r) {
|
|
4902
4917
|
if (s.length === 0) {
|
|
4903
|
-
s.push({ l: a, r: l, srcIdxs: [
|
|
4918
|
+
s.push({ l: a, r: l, srcIdxs: [u] });
|
|
4904
4919
|
continue;
|
|
4905
4920
|
}
|
|
4906
4921
|
const h = s[s.length - 1];
|
|
4907
|
-
a <= h.r + i ? (h.r = Math.max(h.r, l), h.srcIdxs.includes(
|
|
4922
|
+
a <= h.r + i ? (h.r = Math.max(h.r, l), h.srcIdxs.includes(u) || h.srcIdxs.push(u)) : s.push({ l: a, r: l, srcIdxs: [u] });
|
|
4908
4923
|
}
|
|
4909
4924
|
return s;
|
|
4910
4925
|
}
|
|
@@ -4921,43 +4936,43 @@ function li(n, t) {
|
|
|
4921
4936
|
const r = n[o], s = n[i];
|
|
4922
4937
|
if (r.rooftopPz !== void 0 && s.rooftopPz !== void 0 && Math.abs(r.rooftopPz - s.rooftopPz) > 0.05)
|
|
4923
4938
|
continue;
|
|
4924
|
-
const a = Math.abs(r.end.x - s.start.x) < 1e-3 && Math.abs(r.end.y - s.start.y) < 1e-3, l = Math.abs(r.start.x - s.end.x) < 1e-3 && Math.abs(r.start.y - s.end.y) < 1e-3,
|
|
4925
|
-
if (!(a || l ||
|
|
4926
|
-
let
|
|
4927
|
-
a ? f = s.end : l ?
|
|
4928
|
-
const w = Math.hypot(f.x -
|
|
4929
|
-
|
|
4939
|
+
const a = Math.abs(r.end.x - s.start.x) < 1e-3 && Math.abs(r.end.y - s.start.y) < 1e-3, l = Math.abs(r.start.x - s.end.x) < 1e-3 && Math.abs(r.start.y - s.end.y) < 1e-3, u = Math.abs(r.end.x - s.end.x) < 1e-3 && Math.abs(r.end.y - s.end.y) < 1e-3, h = Math.abs(r.start.x - s.start.x) < 1e-3 && Math.abs(r.start.y - s.start.y) < 1e-3;
|
|
4940
|
+
if (!(a || l || u || h) || r.direction.x * s.direction.x + r.direction.y * s.direction.y < 0.98) continue;
|
|
4941
|
+
let c = r.start, f = r.end;
|
|
4942
|
+
a ? f = s.end : l ? c = s.start : u ? f = s.start : h && (c = s.end);
|
|
4943
|
+
const w = Math.hypot(f.x - c.x, f.y - c.y), x = { ...r };
|
|
4944
|
+
x.start = c, x.end = f, x.length = w, x.direction = { x: (f.x - c.x) / w, y: (f.y - c.y) / w, z: 0 }, x.rooftopPz = r.rooftopPz !== void 0 ? r.rooftopPz : s.rooftopPz, x.buildRosource = r.buildRosource || s.buildRosource, x.isRebuild = !1, x.doorAndBeamData || (x.doorAndBeamData = []), x.insetionArr || (x.insetionArr = []), n[o] = x, t[o] = [.../* @__PURE__ */ new Set([...t[o], ...t[i]])], n.splice(i, 1), t.splice(i, 1), i--, e = !0;
|
|
4930
4945
|
}
|
|
4931
4946
|
}
|
|
4932
4947
|
return { segments: n, sourceMap: t };
|
|
4933
4948
|
}
|
|
4934
4949
|
function Zn(n, t = 5, e = 0.05) {
|
|
4935
4950
|
if (n.length <= 1)
|
|
4936
|
-
return { segments: n, sourceMap: n.map((l,
|
|
4937
|
-
const o = n.map((l,
|
|
4938
|
-
o.sort((l,
|
|
4951
|
+
return { segments: n, sourceMap: n.map((l, u) => [u]) };
|
|
4952
|
+
const o = n.map((l, u) => ({ seg: l, angle: oi(l), idx: u }));
|
|
4953
|
+
o.sort((l, u) => l.angle - u.angle);
|
|
4939
4954
|
const i = ri(o, t), r = [], s = [], a = [];
|
|
4940
4955
|
for (const l of i) {
|
|
4941
|
-
let
|
|
4942
|
-
for (const
|
|
4943
|
-
|
|
4944
|
-
const h =
|
|
4945
|
-
if (
|
|
4946
|
-
const f = -d /
|
|
4947
|
-
const g =
|
|
4948
|
-
return { seg:
|
|
4956
|
+
let u = l[0].seg;
|
|
4957
|
+
for (const M of l)
|
|
4958
|
+
M.seg.length > u.length && (u = M.seg);
|
|
4959
|
+
const h = u.end.x - u.start.x, d = u.end.y - u.start.y, c = Math.sqrt(h * h + d * d);
|
|
4960
|
+
if (c < 1e-12) continue;
|
|
4961
|
+
const f = -d / c, w = h / c, x = l.map((M) => {
|
|
4962
|
+
const g = M.seg.start.x - u.start.x, m = M.seg.start.y - u.start.y;
|
|
4963
|
+
return { seg: M.seg, offset: Math.abs(g * f + m * w), idx: M.idx };
|
|
4949
4964
|
});
|
|
4950
|
-
|
|
4951
|
-
const
|
|
4952
|
-
for (const
|
|
4953
|
-
let g =
|
|
4954
|
-
for (const E of
|
|
4965
|
+
x.sort((M, g) => M.offset - g.offset);
|
|
4966
|
+
const P = ii(x);
|
|
4967
|
+
for (const M of P) {
|
|
4968
|
+
let g = M[0].seg;
|
|
4969
|
+
for (const E of M)
|
|
4955
4970
|
E.seg.length > g.length && (g = E.seg);
|
|
4956
4971
|
const m = g.end.x - g.start.x, p = g.end.y - g.start.y, b = Math.sqrt(m * m + p * p);
|
|
4957
4972
|
if (b < 1e-12) continue;
|
|
4958
|
-
const
|
|
4973
|
+
const z = m / b, v = p / b, S = M.map((E) => E.seg.rooftopPz ?? 0), V = Math.max(...S), D = [...new Set(S.map((E) => E.toFixed(3)))];
|
|
4959
4974
|
if (D.length > 1) {
|
|
4960
|
-
const E =
|
|
4975
|
+
const E = M.map((T) => ({
|
|
4961
4976
|
idx: T.idx,
|
|
4962
4977
|
start: { x: T.seg.start.x, y: T.seg.start.y, z: T.seg.start.z },
|
|
4963
4978
|
end: { x: T.seg.end.x, y: T.seg.end.y, z: T.seg.end.z },
|
|
@@ -4966,11 +4981,11 @@ function Zn(n, t = 5, e = 0.05) {
|
|
|
4966
4981
|
}));
|
|
4967
4982
|
a.push({ values: [...D], segments: E });
|
|
4968
4983
|
}
|
|
4969
|
-
[...new Set(
|
|
4970
|
-
const _ = si(
|
|
4984
|
+
[...new Set(M.map((E) => String(E.seg.buildRosource)))];
|
|
4985
|
+
const _ = si(M, g, z, v, e);
|
|
4971
4986
|
for (const { l: E, r: T, srcIdxs: A } of _) {
|
|
4972
4987
|
if (T - E < 0.01) continue;
|
|
4973
|
-
const O = ai(g, E, T,
|
|
4988
|
+
const O = ai(g, E, T, z, v, V, g.buildRosource);
|
|
4974
4989
|
r.push(O), s.push(A);
|
|
4975
4990
|
}
|
|
4976
4991
|
}
|
|
@@ -5005,42 +5020,42 @@ function hi(n, t, e, o, i, r, s) {
|
|
|
5005
5020
|
{ margin: 0.4, maxDist: 0.65, label: "宽松" }
|
|
5006
5021
|
];
|
|
5007
5022
|
let l = [];
|
|
5008
|
-
for (const
|
|
5023
|
+
for (const u of a) {
|
|
5009
5024
|
if (l.length > 0) break;
|
|
5010
5025
|
for (const h of n) {
|
|
5011
5026
|
const d = t * r.minLengthRatio;
|
|
5012
5027
|
if (h.length < d)
|
|
5013
5028
|
continue;
|
|
5014
|
-
const { start:
|
|
5015
|
-
let w = !1,
|
|
5029
|
+
const { start: c, end: f } = h;
|
|
5030
|
+
let w = !1, x = 1 / 0;
|
|
5016
5031
|
for (const S of i) {
|
|
5017
|
-
const { dist:
|
|
5018
|
-
D >= -
|
|
5032
|
+
const { dist: V, t: D } = Un(S.x, S.y, c.x, c.y, f.x, f.y);
|
|
5033
|
+
D >= -u.margin && D <= 1 + u.margin && V <= u.maxDist && (w = !0, x = Math.min(x, V));
|
|
5019
5034
|
}
|
|
5020
5035
|
if (!w) {
|
|
5021
|
-
`${
|
|
5036
|
+
`${u.maxDist}${(-u.margin).toFixed(1)}${(1 + u.margin).toFixed(1)}`;
|
|
5022
5037
|
continue;
|
|
5023
5038
|
}
|
|
5024
|
-
const
|
|
5025
|
-
if (
|
|
5026
|
-
const
|
|
5027
|
-
if (
|
|
5028
|
-
`${
|
|
5039
|
+
const P = Math.sqrt((f.x - c.x) ** 2 + (f.y - c.y) ** 2);
|
|
5040
|
+
if (P < 1e-12) continue;
|
|
5041
|
+
const M = (f.x - c.x) / P, g = (f.y - c.y) / P, m = Math.abs(e * M + o * g), p = Math.abs(-o * M + e * g), b = Math.max(m, p), z = Math.acos(Math.min(b, 1)) * (180 / Math.PI);
|
|
5042
|
+
if (z > r.angleThreshold) {
|
|
5043
|
+
`${z.toFixed(1)}${r.angleThreshold}`;
|
|
5029
5044
|
continue;
|
|
5030
5045
|
}
|
|
5031
5046
|
let v = 0;
|
|
5032
|
-
if (
|
|
5047
|
+
if (P > 0.01) {
|
|
5033
5048
|
const S = [];
|
|
5034
5049
|
for (let _ = 1; _ <= 4; _++) {
|
|
5035
|
-
const E = i[_], T = E.x -
|
|
5050
|
+
const E = i[_], T = E.x - c.x, A = E.y - c.y, O = (T * M + A * g) / P;
|
|
5036
5051
|
S.push(O);
|
|
5037
5052
|
}
|
|
5038
|
-
const
|
|
5039
|
-
D >
|
|
5053
|
+
const V = Math.min(...S), D = Math.max(...S);
|
|
5054
|
+
D > V && (v = Math.max(0, Math.min(1, D) - Math.max(0, V)) / (D - V));
|
|
5040
5055
|
}
|
|
5041
5056
|
l.push({
|
|
5042
5057
|
seg: h,
|
|
5043
|
-
minDist:
|
|
5058
|
+
minDist: x,
|
|
5044
5059
|
embedRatio: v,
|
|
5045
5060
|
ratio: h.length / t,
|
|
5046
5061
|
score: 0,
|
|
@@ -5060,73 +5075,73 @@ function fi(n, t, e, o) {
|
|
|
5060
5075
|
return n.sort((i, r) => r.embedRatio - i.embedRatio || r.score - i.score || i.minDist - r.minDist), n;
|
|
5061
5076
|
}
|
|
5062
5077
|
function di(n, t, e, o) {
|
|
5063
|
-
const i = n.end.x - n.start.x, r = n.end.y - n.start.y, s = Math.sqrt(i * i + r * r), a = i / s, l = r / s,
|
|
5064
|
-
const S = v.x - n.start.x,
|
|
5065
|
-
return (S * a +
|
|
5066
|
-
}), h = Math.min(...
|
|
5078
|
+
const i = n.end.x - n.start.x, r = n.end.y - n.start.y, s = Math.sqrt(i * i + r * r), a = i / s, l = r / s, u = t.map((v) => {
|
|
5079
|
+
const S = v.x - n.start.x, V = v.y - n.start.y;
|
|
5080
|
+
return (S * a + V * l) / s;
|
|
5081
|
+
}), h = Math.min(...u), d = Math.max(...u), c = (d - h) * s, f = (h + d) / 2, w = n.start.x + f * i, x = n.start.y + f * r, P = e.box.min.z, M = e.box.max.z, g = Math.abs(M - P), m = jn(o, n.start.x, n.start.y), p = Math.max(0, P - m), b = h <= 0 && d >= 1, z = n.start.z + f * (n.end.z - n.start.z);
|
|
5067
5082
|
return {
|
|
5068
|
-
p: { x: w, y, z
|
|
5069
|
-
width:
|
|
5083
|
+
p: { x: w, y: x, z },
|
|
5084
|
+
width: c,
|
|
5070
5085
|
full: b,
|
|
5071
5086
|
height: g,
|
|
5072
5087
|
groundClearance: p
|
|
5073
5088
|
};
|
|
5074
5089
|
}
|
|
5075
5090
|
function Kn(n, t, e) {
|
|
5076
|
-
var h, d,
|
|
5077
|
-
const o = t.map((
|
|
5078
|
-
let
|
|
5079
|
-
for (const
|
|
5080
|
-
if ((h =
|
|
5081
|
-
if ((d =
|
|
5082
|
-
if ((
|
|
5083
|
-
if ((f =
|
|
5084
|
-
if ((w =
|
|
5085
|
-
|
|
5086
|
-
}
|
|
5087
|
-
i.length && (n.points = i), r.length && (n.originalPoints = r), s.length && (n.doorAndBeamData = s), a.length && (n.insetionArr = a), l.length && (n.drawWindow = l),
|
|
5091
|
+
var h, d, c, f, w;
|
|
5092
|
+
const o = t.map((x) => e[x]), i = [], r = [], s = [], a = [], l = [];
|
|
5093
|
+
let u;
|
|
5094
|
+
for (const x of o) {
|
|
5095
|
+
if ((h = x.points) != null && h.length) for (const P of x.points) i.push(P);
|
|
5096
|
+
if ((d = x.originalPoints) != null && d.length) for (const P of x.originalPoints) r.push(P);
|
|
5097
|
+
if ((c = x.doorAndBeamData) != null && c.length) for (const P of x.doorAndBeamData) s.push(P);
|
|
5098
|
+
if ((f = x.insetionArr) != null && f.length) for (const P of x.insetionArr) a.push(P);
|
|
5099
|
+
if ((w = x.drawWindow) != null && w.length) for (const P of x.drawWindow) l.push(P);
|
|
5100
|
+
x.boxData && !u && (u = x.boxData);
|
|
5101
|
+
}
|
|
5102
|
+
i.length && (n.points = i), r.length && (n.originalPoints = r), s.length && (n.doorAndBeamData = s), a.length && (n.insetionArr = a), l.length && (n.drawWindow = l), u && (n.boxData = u);
|
|
5088
5103
|
}
|
|
5089
5104
|
function mi(n, t, e, o) {
|
|
5090
|
-
var
|
|
5105
|
+
var u;
|
|
5091
5106
|
const i = ci(e), r = [], { segments: s, sourceMap: a } = o ?? Zn(t), l = s;
|
|
5092
5107
|
for (const h of n) {
|
|
5093
|
-
const d = (
|
|
5108
|
+
const d = (u = h.coordinatesByArea) == null ? void 0 : u.coordinates;
|
|
5094
5109
|
if (!d || d.length < 4)
|
|
5095
5110
|
continue;
|
|
5096
|
-
const
|
|
5097
|
-
if (
|
|
5111
|
+
const c = d.slice(0, 4), f = c.reduce((D, _) => D + _.x, 0) / 4, w = c.reduce((D, _) => D + _.y, 0) / 4, { longSide: x, dirX: P, dirY: M } = Qr(c);
|
|
5112
|
+
if (x < 0.01)
|
|
5098
5113
|
continue;
|
|
5099
|
-
const g =
|
|
5114
|
+
const g = c.reduce((D, _) => D + _.z, 0) / 4, m = jn(t, f, w);
|
|
5100
5115
|
if (g < m - 0.3)
|
|
5101
5116
|
continue;
|
|
5102
|
-
const p = ui(
|
|
5117
|
+
const p = ui(c, f, w);
|
|
5103
5118
|
h.name;
|
|
5104
|
-
let b = hi(l,
|
|
5119
|
+
let b = hi(l, x, P, M, p, i, h.name);
|
|
5105
5120
|
b = fi(b, p, t, h.name);
|
|
5106
|
-
let
|
|
5121
|
+
let z = null, v = 1 / 0, S = 0;
|
|
5107
5122
|
if (b.length > 0) {
|
|
5108
5123
|
const D = b[0];
|
|
5109
|
-
|
|
5124
|
+
z = D.seg, v = D.minDist, S = D.ratio;
|
|
5110
5125
|
}
|
|
5111
|
-
let
|
|
5112
|
-
if (
|
|
5113
|
-
const D =
|
|
5114
|
-
D.drawWindow || (D.drawWindow = []), D.drawWindow.push(
|
|
5126
|
+
let V;
|
|
5127
|
+
if (z && (V = di(z, c, h, s), !i.printOnly)) {
|
|
5128
|
+
const D = z;
|
|
5129
|
+
D.drawWindow || (D.drawWindow = []), D.drawWindow.push(V);
|
|
5115
5130
|
}
|
|
5116
|
-
|
|
5131
|
+
z && r.push({
|
|
5117
5132
|
windowName: h.name,
|
|
5118
5133
|
windowCategory: h.category,
|
|
5119
5134
|
windowCenter: h.center,
|
|
5120
|
-
wallSegment:
|
|
5135
|
+
wallSegment: z,
|
|
5121
5136
|
distance: v,
|
|
5122
5137
|
wallLengthRatio: S,
|
|
5123
|
-
drawWindow:
|
|
5138
|
+
drawWindow: V
|
|
5124
5139
|
});
|
|
5125
5140
|
}
|
|
5126
5141
|
for (const h of r) {
|
|
5127
|
-
const d = h.wallSegment,
|
|
5128
|
-
if (
|
|
5129
|
-
const f = a[
|
|
5142
|
+
const d = h.wallSegment, c = s.indexOf(d);
|
|
5143
|
+
if (c === -1) continue;
|
|
5144
|
+
const f = a[c];
|
|
5130
5145
|
!f || f.length <= 1 || Kn(d, f, t);
|
|
5131
5146
|
}
|
|
5132
5147
|
return r;
|
|
@@ -5135,28 +5150,28 @@ function Vi(n, t, e) {
|
|
|
5135
5150
|
const o = {
|
|
5136
5151
|
printOnly: !1,
|
|
5137
5152
|
...e
|
|
5138
|
-
}, i = Array.isArray(t) ? t.filter((
|
|
5139
|
-
for (const
|
|
5140
|
-
const f = r.indexOf(
|
|
5153
|
+
}, i = Array.isArray(t) ? t.filter((c) => c && c.category === "window" && !c.isBayWindowObj) : [], { segments: r, sourceMap: s } = Zn(n), a = mi(i, n, o, { segments: r, sourceMap: s }), l = /* @__PURE__ */ new Set();
|
|
5154
|
+
for (const c of a) {
|
|
5155
|
+
const f = r.indexOf(c.wallSegment);
|
|
5141
5156
|
f >= 0 && l.add(f);
|
|
5142
5157
|
}
|
|
5143
|
-
const
|
|
5144
|
-
for (const
|
|
5145
|
-
const f = s[
|
|
5158
|
+
const u = [], h = /* @__PURE__ */ new Set();
|
|
5159
|
+
for (const c of l) {
|
|
5160
|
+
const f = s[c];
|
|
5146
5161
|
if (f) {
|
|
5147
|
-
Kn(r[
|
|
5162
|
+
Kn(r[c], f, n);
|
|
5148
5163
|
for (const w of f) h.add(w);
|
|
5149
5164
|
}
|
|
5150
|
-
|
|
5151
|
-
}
|
|
5152
|
-
for (let
|
|
5153
|
-
h.has(
|
|
5154
|
-
const d = new Set(a.map((
|
|
5155
|
-
for (const
|
|
5156
|
-
|
|
5157
|
-
for (const
|
|
5158
|
-
|
|
5159
|
-
return { segments:
|
|
5165
|
+
u.push(r[c]);
|
|
5166
|
+
}
|
|
5167
|
+
for (let c = 0; c < n.length; c++)
|
|
5168
|
+
h.has(c) || u.push(n[c]);
|
|
5169
|
+
const d = new Set(a.map((c) => c.windowName));
|
|
5170
|
+
for (const c of t)
|
|
5171
|
+
c && c.category === "window" && !c.isBayWindowObj && (d.has(c.name) ? delete c.AbnormalWindow : c.AbnormalWindow = !0);
|
|
5172
|
+
for (const c of a)
|
|
5173
|
+
c.drawWindow && c.wallSegment && (c.wallSegment.drawWindow || (c.wallSegment.drawWindow = []), c.wallSegment.drawWindow.push(c.drawWindow));
|
|
5174
|
+
return { segments: u, matches: a };
|
|
5160
5175
|
}
|
|
5161
5176
|
export {
|
|
5162
5177
|
cn as computeContour,
|