endset_three_editor 0.5.4 → 0.5.6
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/endset_three_editor.css +1 -1
- package/dist/three/css2dPanel.d.ts +3 -1
- package/dist/three/index.d.ts +1 -0
- package/dist/three-editor.cjs.js +7 -7
- package/dist/three-editor.cjs.js.map +1 -1
- package/dist/three-editor.es.js +977 -943
- package/dist/three-editor.es.js.map +1 -1
- package/package.json +1 -1
package/dist/three-editor.es.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
var pn = Object.defineProperty;
|
|
2
2
|
var mn = (r, e, t) => e in r ? pn(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
|
|
3
3
|
var Ue = (r, e, t) => mn(r, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
-
import { toRaw as Ot, defineComponent as
|
|
4
|
+
import { toRaw as Ot, defineComponent as ve, ref as W, inject as gn, computed as $e, watchEffect as bn, resolveComponent as Cn, openBlock as R, createElementBlock as P, createElementVNode as C, normalizeClass as oe, withModifiers as Jt, unref as In, toDisplayString as ne, Fragment as Pe, renderList as Dt, createBlock as nt, createCommentVNode as Z, reactive as Qt, watch as be, withDirectives as k, vModelText as D, withKeys as ze, vModelCheckbox as yn, toRef as xn, provide as vn, createVNode as Ut, vShow as Le, shallowRef as ps, onMounted as Sn, onBeforeUnmount as Tn } from "vue";
|
|
5
5
|
import * as w from "three";
|
|
6
|
-
import { Controls as
|
|
6
|
+
import { Controls as Zs, Vector3 as T, MOUSE as Ke, TOUCH as Ge, Quaternion as J, Spherical as ms, Vector2 as F, Ray as Mn, Plane as wn, MathUtils as Xs, Raycaster as Rn, Object3D as Ze, MeshBasicMaterial as Ne, LineBasicMaterial as it, CylinderGeometry as q, BoxGeometry as K, BufferGeometry as De, Float32BufferAttribute as le, Mesh as S, OctahedronGeometry as gt, Line as de, TorusGeometry as Ve, SphereGeometry as En, Euler as kn, Matrix4 as fe, PlaneGeometry as Pn, DoubleSide as kt, OrthographicCamera as qs, ShaderMaterial as ke, UniformsUtils as as, WebGLRenderTarget as ge, HalfFloatType as Re, NoBlending as Yt, Timer as Ln, Color as B, RawShaderMaterial as Nn, ColorManagement as Pt, SRGBTransfer as On, LinearToneMapping as Dn, ReinhardToneMapping as Wn, CineonToneMapping as jn, ACESFilmicToneMapping as Fn, AgXToneMapping as Un, NeutralToneMapping as Hn, CustomToneMapping as zn, MeshDepthMaterial as Gn, RGBADepthPacking as Kn, AdditiveBlending as Bn, Loader as ls, FileLoader as ct, SRGBColorSpace as he, Group as St, Material as ot, PointsMaterial as et, MeshPhongMaterial as Zn, LineSegments as _t, Points as Tt, TrianglesDrawMode as Xn, TriangleFanDrawMode as $t, TriangleStripDrawMode as Vs, LoaderUtils as rt, MeshPhysicalMaterial as ce, LinearSRGBColorSpace as Ae, SpotLight as qn, PointLight as Vn, DirectionalLight as Jn, InstancedMesh as Qn, InstancedBufferAttribute as Yn, TextureLoader as _n, ImageBitmapLoader as $n, BufferAttribute as at, InterleavedBuffer as Js, InterleavedBufferAttribute as Qs, LinearMipmapLinearFilter as Ys, NearestMipmapLinearFilter as ei, LinearMipmapNearestFilter as ti, NearestMipmapNearestFilter as si, LinearFilter as es, NearestFilter as _s, RepeatWrapping as ts, MirroredRepeatWrapping as ni, ClampToEdgeWrapping as ii, MeshStandardMaterial as $s, PropertyBinding as oi, SkinnedMesh as ri, LineLoop as ai, PerspectiveCamera as li, Skeleton as Ai, AnimationClip as ci, Bone as ui, InterpolateDiscrete as di, InterpolateLinear as en, Texture as gs, VectorKeyframeTrack as bs, NumberKeyframeTrack as Cs, QuaternionKeyframeTrack as Is, FrontSide as hi, Interpolant as fi, Box3 as pi, Sphere as mi } from "three";
|
|
7
7
|
import ut from "@tweenjs/tween.js";
|
|
8
|
-
const ys = { type: "change" },
|
|
8
|
+
const ys = { type: "change" }, As = { type: "start" }, tn = { type: "end" }, bt = new Mn(), xs = new wn(), gi = Math.cos(70 * Xs.DEG2RAD), z = new T(), V = 2 * Math.PI, N = {
|
|
9
9
|
NONE: -1,
|
|
10
10
|
ROTATE: 0,
|
|
11
11
|
DOLLY: 1,
|
|
@@ -14,8 +14,8 @@ const ys = { type: "change" }, ls = { type: "start" }, tn = { type: "end" }, bt
|
|
|
14
14
|
TOUCH_PAN: 4,
|
|
15
15
|
TOUCH_DOLLY_PAN: 5,
|
|
16
16
|
TOUCH_DOLLY_ROTATE: 6
|
|
17
|
-
},
|
|
18
|
-
class bi extends
|
|
17
|
+
}, Ht = 1e-6;
|
|
18
|
+
class bi extends Zs {
|
|
19
19
|
/**
|
|
20
20
|
* Constructs a new controls instance.
|
|
21
21
|
*
|
|
@@ -172,7 +172,7 @@ class bi extends Bs {
|
|
|
172
172
|
const o = this.object.zoom;
|
|
173
173
|
this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), o !== this.object.zoom && (this.object.updateProjectionMatrix(), i = !0);
|
|
174
174
|
}
|
|
175
|
-
return this._scale = 1, this._performCursorZoom = !1, i || this._lastPosition.distanceToSquared(this.object.position) >
|
|
175
|
+
return this._scale = 1, this._performCursorZoom = !1, i || this._lastPosition.distanceToSquared(this.object.position) > Ht || 8 * (1 - this._lastQuaternion.dot(this.object.quaternion)) > Ht || this._lastTargetPosition.distanceToSquared(this.target) > Ht ? (this.dispatchEvent(ys), this._lastPosition.copy(this.object.position), this._lastQuaternion.copy(this.object.quaternion), this._lastTargetPosition.copy(this.target), !0) : !1;
|
|
176
176
|
}
|
|
177
177
|
_getAutoRotationAngle(e) {
|
|
178
178
|
return e !== null ? V / 60 * this.autoRotateSpeed * e : V / 60 / 60 * this.autoRotateSpeed;
|
|
@@ -422,7 +422,7 @@ function xi(r) {
|
|
|
422
422
|
default:
|
|
423
423
|
this.state = N.NONE;
|
|
424
424
|
}
|
|
425
|
-
this.state !== N.NONE && this.dispatchEvent(
|
|
425
|
+
this.state !== N.NONE && this.dispatchEvent(As);
|
|
426
426
|
}
|
|
427
427
|
function vi(r) {
|
|
428
428
|
switch (this.state) {
|
|
@@ -441,7 +441,7 @@ function vi(r) {
|
|
|
441
441
|
}
|
|
442
442
|
}
|
|
443
443
|
function Si(r) {
|
|
444
|
-
this.enabled === !1 || this.enableZoom === !1 || this.state !== N.NONE || (r.preventDefault(), this.dispatchEvent(
|
|
444
|
+
this.enabled === !1 || this.enableZoom === !1 || this.state !== N.NONE || (r.preventDefault(), this.dispatchEvent(As), this._handleMouseWheel(this._customWheelEvent(r)), this.dispatchEvent(tn));
|
|
445
445
|
}
|
|
446
446
|
function Ti(r) {
|
|
447
447
|
this.enabled !== !1 && this._handleKeyDown(r);
|
|
@@ -479,7 +479,7 @@ function Mi(r) {
|
|
|
479
479
|
default:
|
|
480
480
|
this.state = N.NONE;
|
|
481
481
|
}
|
|
482
|
-
this.state !== N.NONE && this.dispatchEvent(
|
|
482
|
+
this.state !== N.NONE && this.dispatchEvent(As);
|
|
483
483
|
}
|
|
484
484
|
function wi(r) {
|
|
485
485
|
switch (this._trackPointer(r), this.state) {
|
|
@@ -512,12 +512,12 @@ function Ei(r) {
|
|
|
512
512
|
function ki(r) {
|
|
513
513
|
r.key === "Control" && (this._controlActive = !1, this.domElement.getRootNode().removeEventListener("keyup", this._interceptControlUp, { passive: !0, capture: !0 }));
|
|
514
514
|
}
|
|
515
|
-
const
|
|
515
|
+
const Me = new Rn(), G = new T(), pe = new T(), j = new J(), vs = {
|
|
516
516
|
X: new T(1, 0, 0),
|
|
517
517
|
Y: new T(0, 1, 0),
|
|
518
518
|
Z: new T(0, 0, 1)
|
|
519
|
-
},
|
|
520
|
-
class Pi extends
|
|
519
|
+
}, zt = { type: "change" }, Ss = { type: "mouseDown", mode: null }, Ts = { type: "mouseUp", mode: null }, Ms = { type: "objectChange" };
|
|
520
|
+
class Pi extends Zs {
|
|
521
521
|
/**
|
|
522
522
|
* Constructs a new controls instance.
|
|
523
523
|
*
|
|
@@ -533,20 +533,20 @@ class Pi extends Bs {
|
|
|
533
533
|
const i = new Ui();
|
|
534
534
|
this._plane = i, n.add(i);
|
|
535
535
|
const o = this;
|
|
536
|
-
function a(
|
|
537
|
-
let
|
|
538
|
-
Object.defineProperty(o,
|
|
536
|
+
function a(x, y) {
|
|
537
|
+
let v = y;
|
|
538
|
+
Object.defineProperty(o, x, {
|
|
539
539
|
get: function() {
|
|
540
|
-
return
|
|
540
|
+
return v !== void 0 ? v : y;
|
|
541
541
|
},
|
|
542
542
|
set: function(M) {
|
|
543
|
-
|
|
543
|
+
v !== M && (v = M, i[x] = M, s[x] = M, o.dispatchEvent({ type: x + "-changed", value: M }), o.dispatchEvent(zt));
|
|
544
544
|
}
|
|
545
|
-
}), o[
|
|
545
|
+
}), o[x] = y, i[x] = y, s[x] = y;
|
|
546
546
|
}
|
|
547
547
|
a("camera", e), a("object", void 0), a("enabled", !0), a("axis", null), a("mode", "translate"), a("translationSnap", null), a("rotationSnap", null), a("scaleSnap", null), a("space", "world"), a("size", 1), a("dragging", !1), a("showX", !0), a("showY", !0), a("showZ", !0), a("showXY", !0), a("showYZ", !0), a("showXZ", !0), a("minX", -1 / 0), a("maxX", 1 / 0), a("minY", -1 / 0), a("maxY", 1 / 0), a("minZ", -1 / 0), a("maxZ", 1 / 0);
|
|
548
|
-
const l = new T(), A = new T(), u = new J(), c = new J(),
|
|
549
|
-
a("worldPosition", l), a("worldPositionStart", A), a("worldQuaternion", u), a("worldQuaternionStart", c), a("cameraPosition",
|
|
548
|
+
const l = new T(), A = new T(), u = new J(), c = new J(), h = new T(), d = new J(), g = new T(), f = new T(), m = new T(), p = 0, I = new T();
|
|
549
|
+
a("worldPosition", l), a("worldPositionStart", A), a("worldQuaternion", u), a("worldQuaternionStart", c), a("cameraPosition", h), a("cameraQuaternion", d), a("pointStart", g), a("pointEnd", f), a("rotationAxis", m), a("rotationAngle", p), a("eye", I), this._offset = new T(), this._startNorm = new T(), this._endNorm = new T(), this._cameraScale = new T(), this._parentPosition = new T(), this._parentQuaternion = new J(), this._parentQuaternionInv = new J(), this._parentScale = new T(), this._worldScaleStart = new T(), this._worldQuaternionInv = new J(), this._worldScale = new T(), this._positionStart = new T(), this._quaternionStart = new J(), this._scaleStart = new T(), this._getPointer = Li.bind(this), this._onPointerDown = Oi.bind(this), this._onPointerHover = Ni.bind(this), this._onPointerMove = Di.bind(this), this._onPointerUp = Wi.bind(this), t !== null && this.connect(t);
|
|
550
550
|
}
|
|
551
551
|
connect(e) {
|
|
552
552
|
super.connect(e), this.domElement.addEventListener("pointerdown", this._onPointerDown), this.domElement.addEventListener("pointermove", this._onPointerHover), this.domElement.addEventListener("pointerup", this._onPointerUp), this.domElement.style.touchAction = "none";
|
|
@@ -565,14 +565,14 @@ class Pi extends Bs {
|
|
|
565
565
|
}
|
|
566
566
|
pointerHover(e) {
|
|
567
567
|
if (this.object === void 0 || this.dragging === !0) return;
|
|
568
|
-
e !== null &&
|
|
569
|
-
const t =
|
|
568
|
+
e !== null && Me.setFromCamera(e, this.camera);
|
|
569
|
+
const t = Gt(this._gizmo.picker[this.mode], Me);
|
|
570
570
|
t ? this.axis = t.object.name : this.axis = null;
|
|
571
571
|
}
|
|
572
572
|
pointerDown(e) {
|
|
573
573
|
if (!(this.object === void 0 || this.dragging === !0 || e != null && e.button !== 0) && this.axis !== null) {
|
|
574
|
-
e !== null &&
|
|
575
|
-
const t =
|
|
574
|
+
e !== null && Me.setFromCamera(e, this.camera);
|
|
575
|
+
const t = Gt(this._plane, Me, !0);
|
|
576
576
|
t && (this.object.updateMatrixWorld(), this.object.parent.updateMatrixWorld(), this._positionStart.copy(this.object.position), this._quaternionStart.copy(this.object.quaternion), this._scaleStart.copy(this.object.scale), this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this._worldScaleStart), this.pointStart.copy(t.point).sub(this.worldPositionStart)), this.dragging = !0, Ss.mode = this.mode, this.dispatchEvent(Ss);
|
|
577
577
|
}
|
|
578
578
|
}
|
|
@@ -580,8 +580,8 @@ class Pi extends Bs {
|
|
|
580
580
|
const t = this.axis, n = this.mode, s = this.object;
|
|
581
581
|
let i = this.space;
|
|
582
582
|
if (n === "scale" ? i = "local" : (t === "E" || t === "XYZE" || t === "XYZ") && (i = "world"), s === void 0 || t === null || this.dragging === !1 || e !== null && e.button !== -1) return;
|
|
583
|
-
e !== null &&
|
|
584
|
-
const o =
|
|
583
|
+
e !== null && Me.setFromCamera(e, this.camera);
|
|
584
|
+
const o = Gt(this._plane, Me, !0);
|
|
585
585
|
if (o) {
|
|
586
586
|
if (this.pointEnd.copy(o.point).sub(this.worldPositionStart), n === "translate")
|
|
587
587
|
this._offset.copy(this.pointEnd).sub(this.pointStart), i === "local" && t !== "XYZ" && this._offset.applyQuaternion(this._worldQuaternionInv), t.indexOf("X") === -1 && (this._offset.x = 0), t.indexOf("Y") === -1 && (this._offset.y = 0), t.indexOf("Z") === -1 && (this._offset.z = 0), i === "local" && t !== "XYZ" ? this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale) : this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale), s.position.copy(this._offset).add(this._positionStart), this.translationSnap && (i === "local" && (s.position.applyQuaternion(j.copy(this._quaternionStart).invert()), t.search("X") !== -1 && (s.position.x = Math.round(s.position.x / this.translationSnap) * this.translationSnap), t.search("Y") !== -1 && (s.position.y = Math.round(s.position.y / this.translationSnap) * this.translationSnap), t.search("Z") !== -1 && (s.position.z = Math.round(s.position.z / this.translationSnap) * this.translationSnap), s.position.applyQuaternion(this._quaternionStart)), i === "world" && (s.parent && s.position.add(G.setFromMatrixPosition(s.parent.matrixWorld)), t.search("X") !== -1 && (s.position.x = Math.round(s.position.x / this.translationSnap) * this.translationSnap), t.search("Y") !== -1 && (s.position.y = Math.round(s.position.y / this.translationSnap) * this.translationSnap), t.search("Z") !== -1 && (s.position.z = Math.round(s.position.z / this.translationSnap) * this.translationSnap), s.parent && s.position.sub(G.setFromMatrixPosition(s.parent.matrixWorld)))), s.position.x = Math.max(this.minX, Math.min(this.maxX, s.position.x)), s.position.y = Math.max(this.minY, Math.min(this.maxY, s.position.y)), s.position.z = Math.max(this.minZ, Math.min(this.maxZ, s.position.z));
|
|
@@ -598,7 +598,7 @@ class Pi extends Bs {
|
|
|
598
598
|
let l = !1;
|
|
599
599
|
t === "XYZE" ? (this.rotationAxis.copy(this._offset).cross(this.eye).normalize(), this.rotationAngle = this._offset.dot(G.copy(this.rotationAxis).cross(this.eye)) * a) : (t === "X" || t === "Y" || t === "Z") && (this.rotationAxis.copy(vs[t]), G.copy(vs[t]), i === "local" && G.applyQuaternion(this.worldQuaternion), G.cross(this.eye), G.length() === 0 ? l = !0 : this.rotationAngle = this._offset.dot(G.normalize()) * a), (t === "E" || l) && (this.rotationAxis.copy(this.eye), this.rotationAngle = this.pointEnd.angleTo(this.pointStart), this._startNorm.copy(this.pointStart).normalize(), this._endNorm.copy(this.pointEnd).normalize(), this.rotationAngle *= this._endNorm.cross(this._startNorm).dot(this.eye) < 0 ? 1 : -1), this.rotationSnap && (this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap), i === "local" && t !== "E" && t !== "XYZE" ? (s.quaternion.copy(this._quaternionStart), s.quaternion.multiply(j.setFromAxisAngle(this.rotationAxis, this.rotationAngle)).normalize()) : (this.rotationAxis.applyQuaternion(this._parentQuaternionInv), s.quaternion.copy(j.setFromAxisAngle(this.rotationAxis, this.rotationAngle)), s.quaternion.multiply(this._quaternionStart).normalize());
|
|
600
600
|
}
|
|
601
|
-
this.dispatchEvent(
|
|
601
|
+
this.dispatchEvent(zt), this.dispatchEvent(Ms);
|
|
602
602
|
}
|
|
603
603
|
}
|
|
604
604
|
pointerUp(e) {
|
|
@@ -628,7 +628,7 @@ class Pi extends Bs {
|
|
|
628
628
|
* Resets the object's position, rotation and scale to when the current transform began.
|
|
629
629
|
*/
|
|
630
630
|
reset() {
|
|
631
|
-
this.enabled && this.dragging && (this.object.position.copy(this._positionStart), this.object.quaternion.copy(this._quaternionStart), this.object.scale.copy(this._scaleStart), this.dispatchEvent(
|
|
631
|
+
this.enabled && this.dragging && (this.object.position.copy(this._positionStart), this.object.quaternion.copy(this._quaternionStart), this.object.scale.copy(this._scaleStart), this.dispatchEvent(zt), this.dispatchEvent(Ms), this.pointStart.copy(this.pointEnd));
|
|
632
632
|
}
|
|
633
633
|
/**
|
|
634
634
|
* Returns the raycaster that is used for user interaction. This object is shared between all
|
|
@@ -637,7 +637,7 @@ class Pi extends Bs {
|
|
|
637
637
|
* @returns {Raycaster} The internal raycaster.
|
|
638
638
|
*/
|
|
639
639
|
getRaycaster() {
|
|
640
|
-
return
|
|
640
|
+
return Me;
|
|
641
641
|
}
|
|
642
642
|
/**
|
|
643
643
|
* Returns the transformation mode.
|
|
@@ -742,15 +742,15 @@ function Di(r) {
|
|
|
742
742
|
function Wi(r) {
|
|
743
743
|
this.enabled && (this.domElement.releasePointerCapture(r.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.pointerUp(this._getPointer(r)));
|
|
744
744
|
}
|
|
745
|
-
function
|
|
745
|
+
function Gt(r, e, t) {
|
|
746
746
|
const n = e.intersectObject(r, !0);
|
|
747
747
|
for (let s = 0; s < n.length; s++)
|
|
748
748
|
if (n[s].object.visible || t)
|
|
749
749
|
return n[s];
|
|
750
750
|
return !1;
|
|
751
751
|
}
|
|
752
|
-
const Ct = new kn(), O = new T(0, 1, 0), ws = new T(0, 0, 0), Rs = new fe(), It = new J(), Mt = new J(), re = new T(), Es = new fe(), tt = new T(1, 0, 0),
|
|
753
|
-
class ji extends
|
|
752
|
+
const Ct = new kn(), O = new T(0, 1, 0), ws = new T(0, 0, 0), Rs = new fe(), It = new J(), Mt = new J(), re = new T(), Es = new fe(), tt = new T(1, 0, 0), Ee = new T(0, 1, 0), st = new T(0, 0, 1), yt = new T(), Je = new T(), Qe = new T();
|
|
753
|
+
class ji extends Ze {
|
|
754
754
|
constructor(e) {
|
|
755
755
|
super(), this.isTransformControlsRoot = !0, this.controls = e, this.visible = !1;
|
|
756
756
|
}
|
|
@@ -765,7 +765,7 @@ class ji extends Be {
|
|
|
765
765
|
});
|
|
766
766
|
}
|
|
767
767
|
}
|
|
768
|
-
class Fi extends
|
|
768
|
+
class Fi extends Ze {
|
|
769
769
|
constructor() {
|
|
770
770
|
super(), this.isTransformControlsGizmo = !0, this.type = "TransformControlsGizmo";
|
|
771
771
|
const e = new Ne({
|
|
@@ -798,221 +798,221 @@ class Fi extends Be {
|
|
|
798
798
|
u.color.setHex(255), u.opacity = 0.5;
|
|
799
799
|
const c = e.clone();
|
|
800
800
|
c.opacity = 0.25;
|
|
801
|
-
const d = e.clone();
|
|
802
|
-
d.color.setHex(16776960), d.opacity = 0.25;
|
|
803
801
|
const h = e.clone();
|
|
804
|
-
h.color.setHex(16776960);
|
|
805
|
-
const
|
|
806
|
-
|
|
802
|
+
h.color.setHex(16776960), h.opacity = 0.25;
|
|
803
|
+
const d = e.clone();
|
|
804
|
+
d.color.setHex(16776960);
|
|
805
|
+
const g = e.clone();
|
|
806
|
+
g.color.setHex(7895160), this.materialLib = {
|
|
807
807
|
xAxis: i,
|
|
808
808
|
yAxis: o,
|
|
809
809
|
zAxis: a,
|
|
810
|
-
active:
|
|
810
|
+
active: d,
|
|
811
811
|
xAxisTransparent: l,
|
|
812
812
|
yAxisTransparent: A,
|
|
813
813
|
zAxisTransparent: u,
|
|
814
|
-
activeTransparent:
|
|
814
|
+
activeTransparent: h
|
|
815
815
|
};
|
|
816
|
-
const
|
|
817
|
-
|
|
818
|
-
const
|
|
819
|
-
|
|
820
|
-
const
|
|
821
|
-
|
|
822
|
-
const
|
|
823
|
-
|
|
824
|
-
function
|
|
825
|
-
const
|
|
826
|
-
return
|
|
816
|
+
const f = new q(0, 0.04, 0.1, 12);
|
|
817
|
+
f.translate(0, 0.05, 0);
|
|
818
|
+
const m = new K(0.08, 0.08, 0.08);
|
|
819
|
+
m.translate(0, 0.04, 0);
|
|
820
|
+
const p = new De();
|
|
821
|
+
p.setAttribute("position", new le([0, 0, 0, 1, 0, 0], 3));
|
|
822
|
+
const I = new q(75e-4, 75e-4, 0.5, 3);
|
|
823
|
+
I.translate(0, 0.25, 0);
|
|
824
|
+
function x(ee, ht) {
|
|
825
|
+
const ie = new Ve(ee, 75e-4, 3, 64, ht * Math.PI * 2);
|
|
826
|
+
return ie.rotateY(Math.PI / 2), ie.rotateX(Math.PI / 2), ie;
|
|
827
827
|
}
|
|
828
828
|
function y() {
|
|
829
829
|
const ee = new De();
|
|
830
830
|
return ee.setAttribute("position", new le([0, 0, 0, 1, 1, 1], 3)), ee;
|
|
831
831
|
}
|
|
832
|
-
const
|
|
832
|
+
const v = {
|
|
833
833
|
X: [
|
|
834
|
-
[new
|
|
835
|
-
[new
|
|
836
|
-
[new
|
|
834
|
+
[new S(f, i), [0.5, 0, 0], [0, 0, -Math.PI / 2]],
|
|
835
|
+
[new S(f, i), [-0.5, 0, 0], [0, 0, Math.PI / 2]],
|
|
836
|
+
[new S(I, i), [0, 0, 0], [0, 0, -Math.PI / 2]]
|
|
837
837
|
],
|
|
838
838
|
Y: [
|
|
839
|
-
[new
|
|
840
|
-
[new
|
|
841
|
-
[new
|
|
839
|
+
[new S(f, o), [0, 0.5, 0]],
|
|
840
|
+
[new S(f, o), [0, -0.5, 0], [Math.PI, 0, 0]],
|
|
841
|
+
[new S(I, o)]
|
|
842
842
|
],
|
|
843
843
|
Z: [
|
|
844
|
-
[new
|
|
845
|
-
[new
|
|
846
|
-
[new
|
|
844
|
+
[new S(f, a), [0, 0, 0.5], [Math.PI / 2, 0, 0]],
|
|
845
|
+
[new S(f, a), [0, 0, -0.5], [-Math.PI / 2, 0, 0]],
|
|
846
|
+
[new S(I, a), null, [Math.PI / 2, 0, 0]]
|
|
847
847
|
],
|
|
848
848
|
XYZ: [
|
|
849
|
-
[new
|
|
849
|
+
[new S(new gt(0.1, 0), c), [0, 0, 0]]
|
|
850
850
|
],
|
|
851
851
|
XY: [
|
|
852
|
-
[new
|
|
852
|
+
[new S(new K(0.15, 0.15, 0.01), u), [0.15, 0.15, 0]]
|
|
853
853
|
],
|
|
854
854
|
YZ: [
|
|
855
|
-
[new
|
|
855
|
+
[new S(new K(0.15, 0.15, 0.01), l), [0, 0.15, 0.15], [0, Math.PI / 2, 0]]
|
|
856
856
|
],
|
|
857
857
|
XZ: [
|
|
858
|
-
[new
|
|
858
|
+
[new S(new K(0.15, 0.15, 0.01), A), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]]
|
|
859
859
|
]
|
|
860
860
|
}, M = {
|
|
861
861
|
X: [
|
|
862
|
-
[new
|
|
863
|
-
[new
|
|
862
|
+
[new S(new q(0.2, 0, 0.6, 4), n), [0.3, 0, 0], [0, 0, -Math.PI / 2]],
|
|
863
|
+
[new S(new q(0.2, 0, 0.6, 4), n), [-0.3, 0, 0], [0, 0, Math.PI / 2]]
|
|
864
864
|
],
|
|
865
865
|
Y: [
|
|
866
|
-
[new
|
|
867
|
-
[new
|
|
866
|
+
[new S(new q(0.2, 0, 0.6, 4), n), [0, 0.3, 0]],
|
|
867
|
+
[new S(new q(0.2, 0, 0.6, 4), n), [0, -0.3, 0], [0, 0, Math.PI]]
|
|
868
868
|
],
|
|
869
869
|
Z: [
|
|
870
|
-
[new
|
|
871
|
-
[new
|
|
870
|
+
[new S(new q(0.2, 0, 0.6, 4), n), [0, 0, 0.3], [Math.PI / 2, 0, 0]],
|
|
871
|
+
[new S(new q(0.2, 0, 0.6, 4), n), [0, 0, -0.3], [-Math.PI / 2, 0, 0]]
|
|
872
872
|
],
|
|
873
873
|
XYZ: [
|
|
874
|
-
[new
|
|
874
|
+
[new S(new gt(0.2, 0), n)]
|
|
875
875
|
],
|
|
876
876
|
XY: [
|
|
877
|
-
[new
|
|
877
|
+
[new S(new K(0.2, 0.2, 0.01), n), [0.15, 0.15, 0]]
|
|
878
878
|
],
|
|
879
879
|
YZ: [
|
|
880
|
-
[new
|
|
880
|
+
[new S(new K(0.2, 0.2, 0.01), n), [0, 0.15, 0.15], [0, Math.PI / 2, 0]]
|
|
881
881
|
],
|
|
882
882
|
XZ: [
|
|
883
|
-
[new
|
|
883
|
+
[new S(new K(0.2, 0.2, 0.01), n), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]]
|
|
884
884
|
]
|
|
885
885
|
}, L = {
|
|
886
886
|
START: [
|
|
887
|
-
[new
|
|
887
|
+
[new S(new gt(0.01, 2), s), null, null, null, "helper"]
|
|
888
888
|
],
|
|
889
889
|
END: [
|
|
890
|
-
[new
|
|
890
|
+
[new S(new gt(0.01, 2), s), null, null, null, "helper"]
|
|
891
891
|
],
|
|
892
892
|
DELTA: [
|
|
893
893
|
[new de(y(), s), null, null, null, "helper"]
|
|
894
894
|
],
|
|
895
895
|
X: [
|
|
896
|
-
[new de(
|
|
896
|
+
[new de(p, s), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"]
|
|
897
897
|
],
|
|
898
898
|
Y: [
|
|
899
|
-
[new de(
|
|
899
|
+
[new de(p, s), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], "helper"]
|
|
900
900
|
],
|
|
901
901
|
Z: [
|
|
902
|
-
[new de(
|
|
902
|
+
[new de(p, s), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], "helper"]
|
|
903
903
|
]
|
|
904
904
|
}, Q = {
|
|
905
905
|
XYZE: [
|
|
906
|
-
[new
|
|
906
|
+
[new S(x(0.5, 1), g), null, [0, Math.PI / 2, 0]]
|
|
907
907
|
],
|
|
908
908
|
X: [
|
|
909
|
-
[new
|
|
909
|
+
[new S(x(0.5, 0.5), i)]
|
|
910
910
|
],
|
|
911
911
|
Y: [
|
|
912
|
-
[new
|
|
912
|
+
[new S(x(0.5, 0.5), o), null, [0, 0, -Math.PI / 2]]
|
|
913
913
|
],
|
|
914
914
|
Z: [
|
|
915
|
-
[new
|
|
915
|
+
[new S(x(0.5, 0.5), a), null, [0, Math.PI / 2, 0]]
|
|
916
916
|
],
|
|
917
917
|
E: [
|
|
918
|
-
[new
|
|
918
|
+
[new S(x(0.75, 1), h), null, [0, Math.PI / 2, 0]]
|
|
919
919
|
]
|
|
920
920
|
}, $ = {
|
|
921
921
|
AXIS: [
|
|
922
|
-
[new de(
|
|
922
|
+
[new de(p, s), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"]
|
|
923
923
|
]
|
|
924
924
|
}, Y = {
|
|
925
925
|
XYZE: [
|
|
926
|
-
[new
|
|
926
|
+
[new S(new En(0.25, 10, 8), n)]
|
|
927
927
|
],
|
|
928
928
|
X: [
|
|
929
|
-
[new
|
|
929
|
+
[new S(new Ve(0.5, 0.1, 4, 24), n), [0, 0, 0], [0, -Math.PI / 2, -Math.PI / 2]]
|
|
930
930
|
],
|
|
931
931
|
Y: [
|
|
932
|
-
[new
|
|
932
|
+
[new S(new Ve(0.5, 0.1, 4, 24), n), [0, 0, 0], [Math.PI / 2, 0, 0]]
|
|
933
933
|
],
|
|
934
934
|
Z: [
|
|
935
|
-
[new
|
|
935
|
+
[new S(new Ve(0.5, 0.1, 4, 24), n), [0, 0, 0], [0, 0, -Math.PI / 2]]
|
|
936
936
|
],
|
|
937
937
|
E: [
|
|
938
|
-
[new
|
|
938
|
+
[new S(new Ve(0.75, 0.1, 2, 24), n)]
|
|
939
939
|
]
|
|
940
|
-
},
|
|
940
|
+
}, Te = {
|
|
941
941
|
X: [
|
|
942
|
-
[new
|
|
943
|
-
[new
|
|
944
|
-
[new
|
|
942
|
+
[new S(m, i), [0.5, 0, 0], [0, 0, -Math.PI / 2]],
|
|
943
|
+
[new S(I, i), [0, 0, 0], [0, 0, -Math.PI / 2]],
|
|
944
|
+
[new S(m, i), [-0.5, 0, 0], [0, 0, Math.PI / 2]]
|
|
945
945
|
],
|
|
946
946
|
Y: [
|
|
947
|
-
[new
|
|
948
|
-
[new
|
|
949
|
-
[new
|
|
947
|
+
[new S(m, o), [0, 0.5, 0]],
|
|
948
|
+
[new S(I, o)],
|
|
949
|
+
[new S(m, o), [0, -0.5, 0], [0, 0, Math.PI]]
|
|
950
950
|
],
|
|
951
951
|
Z: [
|
|
952
|
-
[new
|
|
953
|
-
[new
|
|
954
|
-
[new
|
|
952
|
+
[new S(m, a), [0, 0, 0.5], [Math.PI / 2, 0, 0]],
|
|
953
|
+
[new S(I, a), [0, 0, 0], [Math.PI / 2, 0, 0]],
|
|
954
|
+
[new S(m, a), [0, 0, -0.5], [-Math.PI / 2, 0, 0]]
|
|
955
955
|
],
|
|
956
956
|
XY: [
|
|
957
|
-
[new
|
|
957
|
+
[new S(new K(0.15, 0.15, 0.01), u), [0.15, 0.15, 0]]
|
|
958
958
|
],
|
|
959
959
|
YZ: [
|
|
960
|
-
[new
|
|
960
|
+
[new S(new K(0.15, 0.15, 0.01), l), [0, 0.15, 0.15], [0, Math.PI / 2, 0]]
|
|
961
961
|
],
|
|
962
962
|
XZ: [
|
|
963
|
-
[new
|
|
963
|
+
[new S(new K(0.15, 0.15, 0.01), A), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]]
|
|
964
964
|
],
|
|
965
965
|
XYZ: [
|
|
966
|
-
[new
|
|
966
|
+
[new S(new K(0.1, 0.1, 0.1), c)]
|
|
967
967
|
]
|
|
968
|
-
},
|
|
968
|
+
}, Ft = {
|
|
969
969
|
X: [
|
|
970
|
-
[new
|
|
971
|
-
[new
|
|
970
|
+
[new S(new q(0.2, 0, 0.6, 4), n), [0.3, 0, 0], [0, 0, -Math.PI / 2]],
|
|
971
|
+
[new S(new q(0.2, 0, 0.6, 4), n), [-0.3, 0, 0], [0, 0, Math.PI / 2]]
|
|
972
972
|
],
|
|
973
973
|
Y: [
|
|
974
|
-
[new
|
|
975
|
-
[new
|
|
974
|
+
[new S(new q(0.2, 0, 0.6, 4), n), [0, 0.3, 0]],
|
|
975
|
+
[new S(new q(0.2, 0, 0.6, 4), n), [0, -0.3, 0], [0, 0, Math.PI]]
|
|
976
976
|
],
|
|
977
977
|
Z: [
|
|
978
|
-
[new
|
|
979
|
-
[new
|
|
978
|
+
[new S(new q(0.2, 0, 0.6, 4), n), [0, 0, 0.3], [Math.PI / 2, 0, 0]],
|
|
979
|
+
[new S(new q(0.2, 0, 0.6, 4), n), [0, 0, -0.3], [-Math.PI / 2, 0, 0]]
|
|
980
980
|
],
|
|
981
981
|
XY: [
|
|
982
|
-
[new
|
|
982
|
+
[new S(new K(0.2, 0.2, 0.01), n), [0.15, 0.15, 0]]
|
|
983
983
|
],
|
|
984
984
|
YZ: [
|
|
985
|
-
[new
|
|
985
|
+
[new S(new K(0.2, 0.2, 0.01), n), [0, 0.15, 0.15], [0, Math.PI / 2, 0]]
|
|
986
986
|
],
|
|
987
987
|
XZ: [
|
|
988
|
-
[new
|
|
988
|
+
[new S(new K(0.2, 0.2, 0.01), n), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]]
|
|
989
989
|
],
|
|
990
990
|
XYZ: [
|
|
991
|
-
[new
|
|
991
|
+
[new S(new K(0.2, 0.2, 0.2), n), [0, 0, 0]]
|
|
992
992
|
]
|
|
993
993
|
}, hn = {
|
|
994
994
|
X: [
|
|
995
|
-
[new de(
|
|
995
|
+
[new de(p, s), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"]
|
|
996
996
|
],
|
|
997
997
|
Y: [
|
|
998
|
-
[new de(
|
|
998
|
+
[new de(p, s), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], "helper"]
|
|
999
999
|
],
|
|
1000
1000
|
Z: [
|
|
1001
|
-
[new de(
|
|
1001
|
+
[new de(p, s), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], "helper"]
|
|
1002
1002
|
]
|
|
1003
1003
|
};
|
|
1004
1004
|
function ue(ee) {
|
|
1005
|
-
const ht = new
|
|
1006
|
-
for (const
|
|
1007
|
-
for (let Fe = ee[
|
|
1008
|
-
const X = ee[
|
|
1009
|
-
X.name =
|
|
1005
|
+
const ht = new Ze();
|
|
1006
|
+
for (const ie in ee)
|
|
1007
|
+
for (let Fe = ee[ie].length; Fe--; ) {
|
|
1008
|
+
const X = ee[ie][Fe][0].clone(), ft = ee[ie][Fe][1], pt = ee[ie][Fe][2], mt = ee[ie][Fe][3], fn = ee[ie][Fe][4];
|
|
1009
|
+
X.name = ie, X.tag = fn, ft && X.position.set(ft[0], ft[1], ft[2]), pt && X.rotation.set(pt[0], pt[1], pt[2]), mt && X.scale.set(mt[0], mt[1], mt[2]), X.updateMatrix();
|
|
1010
1010
|
const fs = X.geometry.clone();
|
|
1011
1011
|
fs.applyMatrix4(X.matrix), X.geometry = fs, X.renderOrder = 1 / 0, X.position.set(0, 0, 0), X.rotation.set(0, 0, 0), X.scale.set(1, 1, 1), ht.add(X);
|
|
1012
1012
|
}
|
|
1013
1013
|
return ht;
|
|
1014
1014
|
}
|
|
1015
|
-
this.gizmo = {}, this.picker = {}, this.helper = {}, this.add(this.gizmo.translate = ue(
|
|
1015
|
+
this.gizmo = {}, this.picker = {}, this.helper = {}, this.add(this.gizmo.translate = ue(v)), this.add(this.gizmo.rotate = ue(Q)), this.add(this.gizmo.scale = ue(Te)), this.add(this.picker.translate = ue(M)), this.add(this.picker.rotate = ue(Y)), this.add(this.picker.scale = ue(Ft)), this.add(this.helper.translate = ue(L)), this.add(this.helper.rotate = ue($)), this.add(this.helper.scale = ue(hn)), this.picker.translate.visible = !1, this.picker.rotate.visible = !1, this.picker.scale.visible = !1;
|
|
1016
1016
|
}
|
|
1017
1017
|
// updateMatrixWorld will update transformations and appearance of individual handles
|
|
1018
1018
|
updateMatrixWorld(e) {
|
|
@@ -1025,17 +1025,17 @@ class Fi extends Be {
|
|
|
1025
1025
|
o.visible = !0, o.rotation.set(0, 0, 0), o.position.copy(this.worldPosition);
|
|
1026
1026
|
let a;
|
|
1027
1027
|
if (this.camera.isOrthographicCamera ? a = (this.camera.top - this.camera.bottom) / this.camera.zoom : a = this.worldPosition.distanceTo(this.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * this.camera.fov / 360) / this.camera.zoom, 7), o.scale.set(1, 1, 1).multiplyScalar(a * this.size / 4), o.tag === "helper") {
|
|
1028
|
-
o.visible = !1, o.name === "AXIS" ? (o.visible = !!this.axis, this.axis === "X" && (j.setFromEuler(Ct.set(0, 0, 0)), o.quaternion.copy(n).multiply(j), Math.abs(O.copy(tt).applyQuaternion(n).dot(this.eye)) > 0.9 && (o.visible = !1)), this.axis === "Y" && (j.setFromEuler(Ct.set(0, 0, Math.PI / 2)), o.quaternion.copy(n).multiply(j), Math.abs(O.copy(
|
|
1028
|
+
o.visible = !1, o.name === "AXIS" ? (o.visible = !!this.axis, this.axis === "X" && (j.setFromEuler(Ct.set(0, 0, 0)), o.quaternion.copy(n).multiply(j), Math.abs(O.copy(tt).applyQuaternion(n).dot(this.eye)) > 0.9 && (o.visible = !1)), this.axis === "Y" && (j.setFromEuler(Ct.set(0, 0, Math.PI / 2)), o.quaternion.copy(n).multiply(j), Math.abs(O.copy(Ee).applyQuaternion(n).dot(this.eye)) > 0.9 && (o.visible = !1)), this.axis === "Z" && (j.setFromEuler(Ct.set(0, Math.PI / 2, 0)), o.quaternion.copy(n).multiply(j), Math.abs(O.copy(st).applyQuaternion(n).dot(this.eye)) > 0.9 && (o.visible = !1)), this.axis === "XYZE" && (j.setFromEuler(Ct.set(0, Math.PI / 2, 0)), O.copy(this.rotationAxis), o.quaternion.setFromRotationMatrix(Rs.lookAt(ws, O, Ee)), o.quaternion.multiply(j), o.visible = this.dragging), this.axis === "E" && (o.visible = !1)) : o.name === "START" ? (o.position.copy(this.worldPositionStart), o.visible = this.dragging) : o.name === "END" ? (o.position.copy(this.worldPosition), o.visible = this.dragging) : o.name === "DELTA" ? (o.position.copy(this.worldPositionStart), o.quaternion.copy(this.worldQuaternionStart), G.set(1e-10, 1e-10, 1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1), G.applyQuaternion(this.worldQuaternionStart.clone().invert()), o.scale.copy(G), o.visible = this.dragging) : (o.quaternion.copy(n), this.dragging ? o.position.copy(this.worldPositionStart) : o.position.copy(this.worldPosition), this.axis && (o.visible = this.axis.search(o.name) !== -1));
|
|
1029
1029
|
continue;
|
|
1030
1030
|
}
|
|
1031
|
-
o.quaternion.copy(n), this.mode === "translate" || this.mode === "scale" ? (o.name === "X" && Math.abs(O.copy(tt).applyQuaternion(n).dot(this.eye)) > 0.99 && (o.scale.set(1e-10, 1e-10, 1e-10), o.visible = !1), o.name === "Y" && Math.abs(O.copy(
|
|
1031
|
+
o.quaternion.copy(n), this.mode === "translate" || this.mode === "scale" ? (o.name === "X" && Math.abs(O.copy(tt).applyQuaternion(n).dot(this.eye)) > 0.99 && (o.scale.set(1e-10, 1e-10, 1e-10), o.visible = !1), o.name === "Y" && Math.abs(O.copy(Ee).applyQuaternion(n).dot(this.eye)) > 0.99 && (o.scale.set(1e-10, 1e-10, 1e-10), o.visible = !1), o.name === "Z" && Math.abs(O.copy(st).applyQuaternion(n).dot(this.eye)) > 0.99 && (o.scale.set(1e-10, 1e-10, 1e-10), o.visible = !1), o.name === "XY" && Math.abs(O.copy(st).applyQuaternion(n).dot(this.eye)) < 0.2 && (o.scale.set(1e-10, 1e-10, 1e-10), o.visible = !1), o.name === "YZ" && Math.abs(O.copy(tt).applyQuaternion(n).dot(this.eye)) < 0.2 && (o.scale.set(1e-10, 1e-10, 1e-10), o.visible = !1), o.name === "XZ" && Math.abs(O.copy(Ee).applyQuaternion(n).dot(this.eye)) < 0.2 && (o.scale.set(1e-10, 1e-10, 1e-10), o.visible = !1)) : this.mode === "rotate" && (It.copy(n), O.copy(this.eye).applyQuaternion(j.copy(n).invert()), o.name.search("E") !== -1 && o.quaternion.setFromRotationMatrix(Rs.lookAt(this.eye, ws, Ee)), o.name === "X" && (j.setFromAxisAngle(tt, Math.atan2(-O.y, O.z)), j.multiplyQuaternions(It, j), o.quaternion.copy(j)), o.name === "Y" && (j.setFromAxisAngle(Ee, Math.atan2(O.x, O.z)), j.multiplyQuaternions(It, j), o.quaternion.copy(j)), o.name === "Z" && (j.setFromAxisAngle(st, Math.atan2(O.y, O.x)), j.multiplyQuaternions(It, j), o.quaternion.copy(j))), o.visible = o.visible && (o.name.indexOf("X") === -1 || this.showX), o.visible = o.visible && (o.name.indexOf("Y") === -1 || this.showY), o.visible = o.visible && (o.name.indexOf("Z") === -1 || this.showZ), o.visible = o.visible && (o.name.indexOf("E") === -1 || this.showX && this.showY && this.showZ), o.visible = o.visible && (o.name.indexOf("XY") === -1 || this.showXY), o.visible = o.visible && (o.name.indexOf("YZ") === -1 || this.showYZ), o.visible = o.visible && (o.name.indexOf("XZ") === -1 || this.showXZ), o.material._color = o.material._color || o.material.color.clone(), o.material._opacity = o.material._opacity || o.material.opacity, o.material.color.copy(o.material._color), o.material.opacity = o.material._opacity, this.enabled && this.axis && (o.name === this.axis ? (o.material.color.copy(this.materialLib.active.color), o.material.opacity = 1) : this.axis.split("").some(function(l) {
|
|
1032
1032
|
return o.name === l;
|
|
1033
1033
|
}) && (o.material.color.copy(this.materialLib.active.color), o.material.opacity = 1));
|
|
1034
1034
|
}
|
|
1035
1035
|
super.updateMatrixWorld(e);
|
|
1036
1036
|
}
|
|
1037
1037
|
}
|
|
1038
|
-
class Ui extends
|
|
1038
|
+
class Ui extends S {
|
|
1039
1039
|
constructor() {
|
|
1040
1040
|
super(
|
|
1041
1041
|
new Pn(1e5, 1e5, 2, 2),
|
|
@@ -1044,7 +1044,7 @@ class Ui extends v {
|
|
|
1044
1044
|
}
|
|
1045
1045
|
updateMatrixWorld(e) {
|
|
1046
1046
|
let t = this.space;
|
|
1047
|
-
switch (this.position.copy(this.worldPosition), this.mode === "scale" && (t = "local"), yt.copy(tt).applyQuaternion(t === "local" ? this.worldQuaternion : Mt), Je.copy(
|
|
1047
|
+
switch (this.position.copy(this.worldPosition), this.mode === "scale" && (t = "local"), yt.copy(tt).applyQuaternion(t === "local" ? this.worldQuaternion : Mt), Je.copy(Ee).applyQuaternion(t === "local" ? this.worldQuaternion : Mt), Qe.copy(st).applyQuaternion(t === "local" ? this.worldQuaternion : Mt), O.copy(Je), this.mode) {
|
|
1048
1048
|
case "translate":
|
|
1049
1049
|
case "scale":
|
|
1050
1050
|
switch (this.axis) {
|
|
@@ -1164,14 +1164,14 @@ class zi extends De {
|
|
|
1164
1164
|
}
|
|
1165
1165
|
}
|
|
1166
1166
|
const Gi = new zi();
|
|
1167
|
-
class
|
|
1167
|
+
class cs {
|
|
1168
1168
|
/**
|
|
1169
1169
|
* Constructs a new full screen quad.
|
|
1170
1170
|
*
|
|
1171
1171
|
* @param {?Material} material - The material to render te full screen quad with.
|
|
1172
1172
|
*/
|
|
1173
1173
|
constructor(e) {
|
|
1174
|
-
this._mesh = new
|
|
1174
|
+
this._mesh = new S(Gi, e);
|
|
1175
1175
|
}
|
|
1176
1176
|
/**
|
|
1177
1177
|
* Frees the GPU-related resources allocated by this instance. Call this
|
|
@@ -1210,13 +1210,13 @@ class Ki extends qe {
|
|
|
1210
1210
|
* the read buffer.
|
|
1211
1211
|
*/
|
|
1212
1212
|
constructor(e, t = "tDiffuse") {
|
|
1213
|
-
super(), this.textureID = t, this.uniforms = null, this.material = null, e instanceof
|
|
1213
|
+
super(), this.textureID = t, this.uniforms = null, this.material = null, e instanceof ke ? (this.uniforms = e.uniforms, this.material = e) : e && (this.uniforms = as.clone(e.uniforms), this.material = new ke({
|
|
1214
1214
|
name: e.name !== void 0 ? e.name : "unspecified",
|
|
1215
1215
|
defines: Object.assign({}, e.defines),
|
|
1216
1216
|
uniforms: this.uniforms,
|
|
1217
1217
|
vertexShader: e.vertexShader,
|
|
1218
1218
|
fragmentShader: e.fragmentShader
|
|
1219
|
-
})), this._fsQuad = new
|
|
1219
|
+
})), this._fsQuad = new cs(this.material);
|
|
1220
1220
|
}
|
|
1221
1221
|
/**
|
|
1222
1222
|
* Performs the shader pass.
|
|
@@ -1268,7 +1268,7 @@ class ks extends qe {
|
|
|
1268
1268
|
this.inverse ? (o = 0, a = 1) : (o = 1, a = 0), i.buffers.stencil.setTest(!0), i.buffers.stencil.setOp(s.REPLACE, s.REPLACE, s.REPLACE), i.buffers.stencil.setFunc(s.ALWAYS, o, 4294967295), i.buffers.stencil.setClear(a), i.buffers.stencil.setLocked(!0), e.setRenderTarget(n), this.clear && e.clear(), e.render(this.scene, this.camera), e.setRenderTarget(t), this.clear && e.clear(), e.render(this.scene, this.camera), i.buffers.color.setLocked(!1), i.buffers.depth.setLocked(!1), i.buffers.color.setMask(!0), i.buffers.depth.setMask(!0), i.buffers.stencil.setLocked(!1), i.buffers.stencil.setFunc(s.EQUAL, 1, 4294967295), i.buffers.stencil.setOp(s.KEEP, s.KEEP, s.KEEP), i.buffers.stencil.setLocked(!0);
|
|
1269
1269
|
}
|
|
1270
1270
|
}
|
|
1271
|
-
class
|
|
1271
|
+
class Bi extends qe {
|
|
1272
1272
|
/**
|
|
1273
1273
|
* Constructs a new clear mask pass.
|
|
1274
1274
|
*/
|
|
@@ -1290,7 +1290,7 @@ class Zi extends qe {
|
|
|
1290
1290
|
e.state.buffers.stencil.setLocked(!1), e.state.buffers.stencil.setTest(!1);
|
|
1291
1291
|
}
|
|
1292
1292
|
}
|
|
1293
|
-
class
|
|
1293
|
+
class Zi {
|
|
1294
1294
|
/**
|
|
1295
1295
|
* Constructs a new effect composer.
|
|
1296
1296
|
*
|
|
@@ -1302,10 +1302,10 @@ class Bi {
|
|
|
1302
1302
|
constructor(e, t) {
|
|
1303
1303
|
if (this.renderer = e, this._pixelRatio = e.getPixelRatio(), t === void 0) {
|
|
1304
1304
|
const n = e.getSize(new F());
|
|
1305
|
-
this._width = n.width, this._height = n.height, t = new ge(this._width * this._pixelRatio, this._height * this._pixelRatio, { type:
|
|
1305
|
+
this._width = n.width, this._height = n.height, t = new ge(this._width * this._pixelRatio, this._height * this._pixelRatio, { type: Re }), t.texture.name = "EffectComposer.rt1";
|
|
1306
1306
|
} else
|
|
1307
1307
|
this._width = t.width, this._height = t.height;
|
|
1308
|
-
this.renderTarget1 = t, this.renderTarget2 = t.clone(), this.renderTarget2.texture.name = "EffectComposer.rt2", this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2, this.renderToScreen = !0, this.passes = [], this.copyPass = new Ki(sn), this.copyPass.material.blending =
|
|
1308
|
+
this.renderTarget1 = t, this.renderTarget2 = t.clone(), this.renderTarget2.texture.name = "EffectComposer.rt2", this.writeBuffer = this.renderTarget1, this.readBuffer = this.renderTarget2, this.renderToScreen = !0, this.passes = [], this.copyPass = new Ki(sn), this.copyPass.material.blending = Yt, this.timer = new Ln();
|
|
1309
1309
|
}
|
|
1310
1310
|
/**
|
|
1311
1311
|
* Swaps the internal read/write buffers.
|
|
@@ -1372,7 +1372,7 @@ class Bi {
|
|
|
1372
1372
|
}
|
|
1373
1373
|
this.swapBuffers();
|
|
1374
1374
|
}
|
|
1375
|
-
ks !== void 0 && (o instanceof ks ? n = !0 : o instanceof
|
|
1375
|
+
ks !== void 0 && (o instanceof ks ? n = !0 : o instanceof Bi && (n = !1));
|
|
1376
1376
|
}
|
|
1377
1377
|
}
|
|
1378
1378
|
this.renderer.setRenderTarget(t);
|
|
@@ -1433,7 +1433,7 @@ class Xi extends qe {
|
|
|
1433
1433
|
* @param {?number} [clearAlpha=null] - The clear alpha of the render pass.
|
|
1434
1434
|
*/
|
|
1435
1435
|
constructor(e, t, n = null, s = null, i = null) {
|
|
1436
|
-
super(), this.scene = e, this.camera = t, this.overrideMaterial = n, this.clearColor = s, this.clearAlpha = i, this.clear = !0, this.clearDepth = !1, this.needsSwap = !1, this.isRenderPass = !0, this._oldClearColor = new
|
|
1436
|
+
super(), this.scene = e, this.camera = t, this.overrideMaterial = n, this.clearColor = s, this.clearAlpha = i, this.clear = !0, this.clearDepth = !1, this.needsSwap = !1, this.isRenderPass = !0, this._oldClearColor = new B();
|
|
1437
1437
|
}
|
|
1438
1438
|
/**
|
|
1439
1439
|
* Performs a beauty pass with the configured scene and camera.
|
|
@@ -1544,12 +1544,12 @@ class qi extends qe {
|
|
|
1544
1544
|
* Constructs a new output pass.
|
|
1545
1545
|
*/
|
|
1546
1546
|
constructor() {
|
|
1547
|
-
super(), this.isOutputPass = !0, this.uniforms =
|
|
1547
|
+
super(), this.isOutputPass = !0, this.uniforms = as.clone(xt.uniforms), this.material = new Nn({
|
|
1548
1548
|
name: xt.name,
|
|
1549
1549
|
uniforms: this.uniforms,
|
|
1550
1550
|
vertexShader: xt.vertexShader,
|
|
1551
1551
|
fragmentShader: xt.fragmentShader
|
|
1552
|
-
}), this._fsQuad = new
|
|
1552
|
+
}), this._fsQuad = new cs(this.material), this._outputColorSpace = null, this._toneMapping = null;
|
|
1553
1553
|
}
|
|
1554
1554
|
/**
|
|
1555
1555
|
* Performs the output pass.
|
|
@@ -1573,7 +1573,7 @@ class qi extends qe {
|
|
|
1573
1573
|
this.material.dispose(), this._fsQuad.dispose();
|
|
1574
1574
|
}
|
|
1575
1575
|
}
|
|
1576
|
-
class
|
|
1576
|
+
class Ce extends qe {
|
|
1577
1577
|
/**
|
|
1578
1578
|
* Constructs a new outline pass.
|
|
1579
1579
|
*
|
|
@@ -1584,23 +1584,23 @@ class be extends qe {
|
|
|
1584
1584
|
*
|
|
1585
1585
|
*/
|
|
1586
1586
|
constructor(e, t, n, s) {
|
|
1587
|
-
super(), this.renderScene = t, this.renderCamera = n, this.selectedObjects = s !== void 0 ? s : [], this.visibleEdgeColor = new
|
|
1587
|
+
super(), this.renderScene = t, this.renderCamera = n, this.selectedObjects = s !== void 0 ? s : [], this.visibleEdgeColor = new B(1, 1, 1), this.hiddenEdgeColor = new B(0.1, 0.04, 0.02), this.edgeGlow = 0, this.usePatternTexture = !1, this.patternTexture = null, this.edgeThickness = 1, this.edgeStrength = 3, this.downSampleRatio = 2, this.pulsePeriod = 0, this._visibilityCache = /* @__PURE__ */ new Map(), this._selectionCache = /* @__PURE__ */ new Set(), this.resolution = e !== void 0 ? new F(e.x, e.y) : new F(256, 256);
|
|
1588
1588
|
const i = Math.round(this.resolution.x / this.downSampleRatio), o = Math.round(this.resolution.y / this.downSampleRatio);
|
|
1589
|
-
this.renderTargetMaskBuffer = new ge(this.resolution.x, this.resolution.y), this.renderTargetMaskBuffer.texture.name = "OutlinePass.mask", this.renderTargetMaskBuffer.texture.generateMipmaps = !1, this.depthMaterial = new Gn(), this.depthMaterial.side = kt, this.depthMaterial.depthPacking = Kn, this.depthMaterial.blending =
|
|
1589
|
+
this.renderTargetMaskBuffer = new ge(this.resolution.x, this.resolution.y), this.renderTargetMaskBuffer.texture.name = "OutlinePass.mask", this.renderTargetMaskBuffer.texture.generateMipmaps = !1, this.depthMaterial = new Gn(), this.depthMaterial.side = kt, this.depthMaterial.depthPacking = Kn, this.depthMaterial.blending = Yt, this.prepareMaskMaterial = this._getPrepareMaskMaterial(), this.prepareMaskMaterial.side = kt, this.prepareMaskMaterial.fragmentShader = u(this.prepareMaskMaterial.fragmentShader, this.renderCamera), this.renderTargetDepthBuffer = new ge(this.resolution.x, this.resolution.y, { type: Re }), this.renderTargetDepthBuffer.texture.name = "OutlinePass.depth", this.renderTargetDepthBuffer.texture.generateMipmaps = !1, this.renderTargetMaskDownSampleBuffer = new ge(i, o, { type: Re }), this.renderTargetMaskDownSampleBuffer.texture.name = "OutlinePass.depthDownSample", this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps = !1, this.renderTargetBlurBuffer1 = new ge(i, o, { type: Re }), this.renderTargetBlurBuffer1.texture.name = "OutlinePass.blur1", this.renderTargetBlurBuffer1.texture.generateMipmaps = !1, this.renderTargetBlurBuffer2 = new ge(Math.round(i / 2), Math.round(o / 2), { type: Re }), this.renderTargetBlurBuffer2.texture.name = "OutlinePass.blur2", this.renderTargetBlurBuffer2.texture.generateMipmaps = !1, this.edgeDetectionMaterial = this._getEdgeDetectionMaterial(), this.renderTargetEdgeBuffer1 = new ge(i, o, { type: Re }), this.renderTargetEdgeBuffer1.texture.name = "OutlinePass.edge1", this.renderTargetEdgeBuffer1.texture.generateMipmaps = !1, this.renderTargetEdgeBuffer2 = new ge(Math.round(i / 2), Math.round(o / 2), { type: Re }), this.renderTargetEdgeBuffer2.texture.name = "OutlinePass.edge2", this.renderTargetEdgeBuffer2.texture.generateMipmaps = !1;
|
|
1590
1590
|
const a = 4, l = 4;
|
|
1591
1591
|
this.separableBlurMaterial1 = this._getSeparableBlurMaterial(a), this.separableBlurMaterial1.uniforms.texSize.value.set(i, o), this.separableBlurMaterial1.uniforms.kernelRadius.value = 1, this.separableBlurMaterial2 = this._getSeparableBlurMaterial(l), this.separableBlurMaterial2.uniforms.texSize.value.set(Math.round(i / 2), Math.round(o / 2)), this.separableBlurMaterial2.uniforms.kernelRadius.value = l, this.overlayMaterial = this._getOverlayMaterial();
|
|
1592
1592
|
const A = sn;
|
|
1593
|
-
this.copyUniforms =
|
|
1593
|
+
this.copyUniforms = as.clone(A.uniforms), this.materialCopy = new ke({
|
|
1594
1594
|
uniforms: this.copyUniforms,
|
|
1595
1595
|
vertexShader: A.vertexShader,
|
|
1596
1596
|
fragmentShader: A.fragmentShader,
|
|
1597
|
-
blending:
|
|
1597
|
+
blending: Yt,
|
|
1598
1598
|
depthTest: !1,
|
|
1599
1599
|
depthWrite: !1
|
|
1600
|
-
}), this.enabled = !0, this.needsSwap = !1, this._oldClearColor = new
|
|
1601
|
-
function u(c,
|
|
1602
|
-
const
|
|
1603
|
-
return c.replace(/DEPTH_TO_VIEW_Z/g,
|
|
1600
|
+
}), this.enabled = !0, this.needsSwap = !1, this._oldClearColor = new B(), this.oldClearAlpha = 1, this._fsQuad = new cs(null), this.tempPulseColor1 = new B(), this.tempPulseColor2 = new B(), this.textureMatrix = new fe();
|
|
1601
|
+
function u(c, h) {
|
|
1602
|
+
const d = h.isPerspectiveCamera ? "perspective" : "orthographic";
|
|
1603
|
+
return c.replace(/DEPTH_TO_VIEW_Z/g, d + "DepthToViewZ");
|
|
1604
1604
|
}
|
|
1605
1605
|
}
|
|
1606
1606
|
/**
|
|
@@ -1642,7 +1642,7 @@ class be extends qe {
|
|
|
1642
1642
|
const A = 0.625 + Math.cos(performance.now() * 0.01 / this.pulsePeriod) * 0.75 / 2;
|
|
1643
1643
|
this.tempPulseColor1.multiplyScalar(A), this.tempPulseColor2.multiplyScalar(A);
|
|
1644
1644
|
}
|
|
1645
|
-
this._fsQuad.material = this.edgeDetectionMaterial, this.edgeDetectionMaterial.uniforms.maskTexture.value = this.renderTargetMaskDownSampleBuffer.texture, this.edgeDetectionMaterial.uniforms.texSize.value.set(this.renderTargetMaskDownSampleBuffer.width, this.renderTargetMaskDownSampleBuffer.height), this.edgeDetectionMaterial.uniforms.visibleEdgeColor.value = this.tempPulseColor1, this.edgeDetectionMaterial.uniforms.hiddenEdgeColor.value = this.tempPulseColor2, e.setRenderTarget(this.renderTargetEdgeBuffer1), e.clear(), this._fsQuad.render(e), this._fsQuad.material = this.separableBlurMaterial1, this.separableBlurMaterial1.uniforms.colorTexture.value = this.renderTargetEdgeBuffer1.texture, this.separableBlurMaterial1.uniforms.direction.value =
|
|
1645
|
+
this._fsQuad.material = this.edgeDetectionMaterial, this.edgeDetectionMaterial.uniforms.maskTexture.value = this.renderTargetMaskDownSampleBuffer.texture, this.edgeDetectionMaterial.uniforms.texSize.value.set(this.renderTargetMaskDownSampleBuffer.width, this.renderTargetMaskDownSampleBuffer.height), this.edgeDetectionMaterial.uniforms.visibleEdgeColor.value = this.tempPulseColor1, this.edgeDetectionMaterial.uniforms.hiddenEdgeColor.value = this.tempPulseColor2, e.setRenderTarget(this.renderTargetEdgeBuffer1), e.clear(), this._fsQuad.render(e), this._fsQuad.material = this.separableBlurMaterial1, this.separableBlurMaterial1.uniforms.colorTexture.value = this.renderTargetEdgeBuffer1.texture, this.separableBlurMaterial1.uniforms.direction.value = Ce.BlurDirectionX, this.separableBlurMaterial1.uniforms.kernelRadius.value = this.edgeThickness, e.setRenderTarget(this.renderTargetBlurBuffer1), e.clear(), this._fsQuad.render(e), this.separableBlurMaterial1.uniforms.colorTexture.value = this.renderTargetBlurBuffer1.texture, this.separableBlurMaterial1.uniforms.direction.value = Ce.BlurDirectionY, e.setRenderTarget(this.renderTargetEdgeBuffer1), e.clear(), this._fsQuad.render(e), this._fsQuad.material = this.separableBlurMaterial2, this.separableBlurMaterial2.uniforms.colorTexture.value = this.renderTargetEdgeBuffer1.texture, this.separableBlurMaterial2.uniforms.direction.value = Ce.BlurDirectionX, e.setRenderTarget(this.renderTargetBlurBuffer2), e.clear(), this._fsQuad.render(e), this.separableBlurMaterial2.uniforms.colorTexture.value = this.renderTargetBlurBuffer2.texture, this.separableBlurMaterial2.uniforms.direction.value = Ce.BlurDirectionY, e.setRenderTarget(this.renderTargetEdgeBuffer2), e.clear(), this._fsQuad.render(e), this._fsQuad.material = this.overlayMaterial, this.overlayMaterial.uniforms.maskTexture.value = this.renderTargetMaskBuffer.texture, this.overlayMaterial.uniforms.edgeTexture1.value = this.renderTargetEdgeBuffer1.texture, this.overlayMaterial.uniforms.edgeTexture2.value = this.renderTargetEdgeBuffer2.texture, this.overlayMaterial.uniforms.patternTexture.value = this.patternTexture, this.overlayMaterial.uniforms.edgeStrength.value = this.edgeStrength, this.overlayMaterial.uniforms.edgeGlow.value = this.edgeGlow, this.overlayMaterial.uniforms.usePatternTexture.value = this.usePatternTexture, i && e.state.buffers.stencil.setTest(!0), e.setRenderTarget(n), this._fsQuad.render(e), e.setClearColor(this._oldClearColor, this.oldClearAlpha), e.autoClear = o;
|
|
1646
1646
|
}
|
|
1647
1647
|
this.renderToScreen && (this._fsQuad.material = this.materialCopy, this.copyUniforms.tDiffuse.value = n.texture, e.setRenderTarget(null), this._fsQuad.render(e));
|
|
1648
1648
|
}
|
|
@@ -1694,7 +1694,7 @@ class be extends qe {
|
|
|
1694
1694
|
), this.textureMatrix.multiply(this.renderCamera.projectionMatrix), this.textureMatrix.multiply(this.renderCamera.matrixWorldInverse);
|
|
1695
1695
|
}
|
|
1696
1696
|
_getPrepareMaskMaterial() {
|
|
1697
|
-
return new
|
|
1697
|
+
return new ke({
|
|
1698
1698
|
uniforms: {
|
|
1699
1699
|
depthTexture: { value: null },
|
|
1700
1700
|
cameraNearFar: { value: new F(0.5, 0.5) },
|
|
@@ -1749,7 +1749,7 @@ class be extends qe {
|
|
|
1749
1749
|
});
|
|
1750
1750
|
}
|
|
1751
1751
|
_getEdgeDetectionMaterial() {
|
|
1752
|
-
return new
|
|
1752
|
+
return new ke({
|
|
1753
1753
|
uniforms: {
|
|
1754
1754
|
maskTexture: { value: null },
|
|
1755
1755
|
texSize: { value: new F(0.5, 0.5) },
|
|
@@ -1788,7 +1788,7 @@ class be extends qe {
|
|
|
1788
1788
|
});
|
|
1789
1789
|
}
|
|
1790
1790
|
_getSeparableBlurMaterial(e) {
|
|
1791
|
-
return new
|
|
1791
|
+
return new ke({
|
|
1792
1792
|
defines: {
|
|
1793
1793
|
MAX_RADIUS: e
|
|
1794
1794
|
},
|
|
@@ -1836,7 +1836,7 @@ class be extends qe {
|
|
|
1836
1836
|
});
|
|
1837
1837
|
}
|
|
1838
1838
|
_getOverlayMaterial() {
|
|
1839
|
-
return new
|
|
1839
|
+
return new ke({
|
|
1840
1840
|
uniforms: {
|
|
1841
1841
|
maskTexture: { value: null },
|
|
1842
1842
|
edgeTexture1: { value: null },
|
|
@@ -1874,17 +1874,17 @@ class be extends qe {
|
|
|
1874
1874
|
finalColor += + visibilityFactor * (1.0 - maskColor.r) * (1.0 - patternColor.r);
|
|
1875
1875
|
gl_FragColor = finalColor;
|
|
1876
1876
|
}`,
|
|
1877
|
-
blending:
|
|
1877
|
+
blending: Bn,
|
|
1878
1878
|
depthTest: !1,
|
|
1879
1879
|
depthWrite: !1,
|
|
1880
1880
|
transparent: !0
|
|
1881
1881
|
});
|
|
1882
1882
|
}
|
|
1883
1883
|
}
|
|
1884
|
-
|
|
1885
|
-
|
|
1884
|
+
Ce.BlurDirectionX = new F(1, 0);
|
|
1885
|
+
Ce.BlurDirectionY = new F(0, 1);
|
|
1886
1886
|
const Vi = "data:image/jpeg;base64,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";
|
|
1887
|
-
class Ji extends
|
|
1887
|
+
class Ji extends Ze {
|
|
1888
1888
|
/**
|
|
1889
1889
|
* Constructs a new CSS2D object.
|
|
1890
1890
|
*
|
|
@@ -1919,51 +1919,51 @@ class Qi {
|
|
|
1919
1919
|
width: n,
|
|
1920
1920
|
height: s
|
|
1921
1921
|
};
|
|
1922
|
-
}, this.render = function(
|
|
1923
|
-
|
|
1924
|
-
}, this.setSize = function(
|
|
1925
|
-
n =
|
|
1922
|
+
}, this.render = function(g, f) {
|
|
1923
|
+
g.matrixWorldAutoUpdate === !0 && g.updateMatrixWorld(), f.parent === null && f.matrixWorldAutoUpdate === !0 && f.updateMatrixWorld(), Ps.copy(f.matrixWorldInverse), Ls.multiplyMatrices(f.projectionMatrix, Ps), u(g, g, f), this.sortObjects && d(g);
|
|
1924
|
+
}, this.setSize = function(g, f) {
|
|
1925
|
+
n = g, s = f, i = n / 2, o = s / 2, l.style.width = g + "px", l.style.height = f + "px";
|
|
1926
1926
|
};
|
|
1927
|
-
function A(
|
|
1928
|
-
|
|
1929
|
-
for (let
|
|
1930
|
-
A(
|
|
1927
|
+
function A(g) {
|
|
1928
|
+
g.isCSS2DObject && (g.element.style.display = "none");
|
|
1929
|
+
for (let f = 0, m = g.children.length; f < m; f++)
|
|
1930
|
+
A(g.children[f]);
|
|
1931
1931
|
}
|
|
1932
|
-
function u(
|
|
1933
|
-
if (
|
|
1934
|
-
A(
|
|
1932
|
+
function u(g, f, m) {
|
|
1933
|
+
if (g.visible === !1) {
|
|
1934
|
+
A(g);
|
|
1935
1935
|
return;
|
|
1936
1936
|
}
|
|
1937
|
-
if (
|
|
1938
|
-
He.setFromMatrixPosition(
|
|
1939
|
-
const
|
|
1940
|
-
|
|
1941
|
-
const
|
|
1942
|
-
distanceToCameraSquared: c(
|
|
1937
|
+
if (g.isCSS2DObject) {
|
|
1938
|
+
He.setFromMatrixPosition(g.matrixWorld), He.applyMatrix4(Ls);
|
|
1939
|
+
const p = He.z >= -1 && He.z <= 1 && g.layers.test(m.layers) === !0, I = g.element;
|
|
1940
|
+
I.style.display = p === !0 ? "" : "none", p === !0 && (g.onBeforeRender(t, f, m), I.style.transform = "translate(" + -100 * g.center.x + "%," + -100 * g.center.y + "%)translate(" + (He.x * i + i) + "px," + (-He.y * o + o) + "px)", I.parentNode !== l && l.appendChild(I), g.onAfterRender(t, f, m));
|
|
1941
|
+
const x = {
|
|
1942
|
+
distanceToCameraSquared: c(m, g)
|
|
1943
1943
|
};
|
|
1944
|
-
a.objects.set(
|
|
1944
|
+
a.objects.set(g, x);
|
|
1945
1945
|
}
|
|
1946
|
-
for (let
|
|
1947
|
-
u(
|
|
1946
|
+
for (let p = 0, I = g.children.length; p < I; p++)
|
|
1947
|
+
u(g.children[p], f, m);
|
|
1948
1948
|
}
|
|
1949
|
-
function c(
|
|
1950
|
-
return Ns.setFromMatrixPosition(
|
|
1949
|
+
function c(g, f) {
|
|
1950
|
+
return Ns.setFromMatrixPosition(g.matrixWorld), Os.setFromMatrixPosition(f.matrixWorld), Ns.distanceToSquared(Os);
|
|
1951
1951
|
}
|
|
1952
|
-
function
|
|
1953
|
-
const
|
|
1954
|
-
return
|
|
1955
|
-
|
|
1956
|
-
}),
|
|
1952
|
+
function h(g) {
|
|
1953
|
+
const f = [];
|
|
1954
|
+
return g.traverseVisible(function(m) {
|
|
1955
|
+
m.isCSS2DObject && f.push(m);
|
|
1956
|
+
}), f;
|
|
1957
1957
|
}
|
|
1958
|
-
function
|
|
1959
|
-
const
|
|
1960
|
-
if (
|
|
1961
|
-
return
|
|
1962
|
-
const
|
|
1963
|
-
return
|
|
1964
|
-
}),
|
|
1965
|
-
for (let
|
|
1966
|
-
p
|
|
1958
|
+
function d(g) {
|
|
1959
|
+
const f = h(g).sort(function(p, I) {
|
|
1960
|
+
if (p.renderOrder !== I.renderOrder)
|
|
1961
|
+
return I.renderOrder - p.renderOrder;
|
|
1962
|
+
const x = a.objects.get(p).distanceToCameraSquared, y = a.objects.get(I).distanceToCameraSquared;
|
|
1963
|
+
return x - y;
|
|
1964
|
+
}), m = f.length;
|
|
1965
|
+
for (let p = 0, I = f.length; p < I; p++)
|
|
1966
|
+
f[p].element.style.zIndex = m - p;
|
|
1967
1967
|
}
|
|
1968
1968
|
}
|
|
1969
1969
|
}
|
|
@@ -1993,7 +1993,7 @@ class dt {
|
|
|
1993
1993
|
items: e.items || [],
|
|
1994
1994
|
offsetY: e.offsetY ?? 0.1,
|
|
1995
1995
|
fontSize: e.fontSize || "13px",
|
|
1996
|
-
width: e.width || "
|
|
1996
|
+
width: e.width || "220px",
|
|
1997
1997
|
backgroundColor: e.backgroundColor || "linear-gradient(135deg, rgba(6, 16, 42, 0.55) 0%, rgba(2, 6, 18, 0.40) 100%)",
|
|
1998
1998
|
textColor: e.textColor || "#ffffff",
|
|
1999
1999
|
borderColor: e.borderColor || "rgba(80, 200, 255, 0.15)",
|
|
@@ -2083,10 +2083,12 @@ class dt {
|
|
|
2083
2083
|
*/
|
|
2084
2084
|
attachTo(e) {
|
|
2085
2085
|
this.attachedObject && this.attachedObject !== e && this.detach();
|
|
2086
|
-
const t = new w.
|
|
2087
|
-
|
|
2088
|
-
const s =
|
|
2089
|
-
|
|
2086
|
+
const t = new w.Vector3();
|
|
2087
|
+
e.getWorldPosition(t);
|
|
2088
|
+
const n = new w.Box3().setFromObject(e), s = new w.Vector3(), i = new w.Vector3();
|
|
2089
|
+
n.getCenter(s), n.getSize(i);
|
|
2090
|
+
const a = n.max.y - t.y + this.options.offsetY;
|
|
2091
|
+
this.css2dObject || (this.css2dObject = new Ji(this.container), this.css2dObject.name = `DataPanel_${e.name || e.uuid}`, this.css2dObject.center.set(0.5, 1)), this.css2dObject.position.set(0, a, 0), e.add(this.css2dObject), this.attachedObject = e;
|
|
2090
2092
|
}
|
|
2091
2093
|
/**
|
|
2092
2094
|
* 从附着的物体上移除面板
|
|
@@ -2184,11 +2186,17 @@ class dt {
|
|
|
2184
2186
|
updateOptions(e) {
|
|
2185
2187
|
this.options = { ...this.options, ...e }, this.rebuildPanel();
|
|
2186
2188
|
}
|
|
2187
|
-
/**
|
|
2189
|
+
/** 获取面板 Y 轴偏移 */
|
|
2190
|
+
getOffsetY() {
|
|
2191
|
+
return this.options.offsetY ?? 0.1;
|
|
2192
|
+
}
|
|
2193
|
+
/** 更新面板 Y 轴偏移(使用与 attachTo 相同的位置计算逻辑) */
|
|
2188
2194
|
setOffsetY(e) {
|
|
2189
2195
|
if (this.options.offsetY = e, this.css2dObject && this.attachedObject) {
|
|
2190
|
-
const t = new w.
|
|
2191
|
-
|
|
2196
|
+
const t = new w.Vector3();
|
|
2197
|
+
this.attachedObject.getWorldPosition(t);
|
|
2198
|
+
const s = new w.Box3().setFromObject(this.attachedObject).max.y - t.y;
|
|
2199
|
+
this.css2dObject.position.set(0, s + e, 0);
|
|
2192
2200
|
}
|
|
2193
2201
|
}
|
|
2194
2202
|
/** 获取面板宽度 */
|
|
@@ -2226,7 +2234,7 @@ function nn(r, e) {
|
|
|
2226
2234
|
const t = Ot(r);
|
|
2227
2235
|
Lt.set(t, e), t.userData._hasDataPanel = !0;
|
|
2228
2236
|
}
|
|
2229
|
-
function
|
|
2237
|
+
function Wt(r) {
|
|
2230
2238
|
return Lt.get(Ot(r)) || null;
|
|
2231
2239
|
}
|
|
2232
2240
|
function oo(r) {
|
|
@@ -2237,7 +2245,7 @@ let U = null;
|
|
|
2237
2245
|
function ro(r) {
|
|
2238
2246
|
return U ? (U.domElement.parentNode !== r && r.appendChild(U.domElement), U) : (U = new Qi(), U.setSize(r.clientWidth, r.clientHeight), U.domElement.style.position = "absolute", U.domElement.style.top = "0", U.domElement.style.left = "0", U.domElement.style.pointerEvents = "none", r.appendChild(U.domElement), U);
|
|
2239
2247
|
}
|
|
2240
|
-
function
|
|
2248
|
+
function vl() {
|
|
2241
2249
|
return U;
|
|
2242
2250
|
}
|
|
2243
2251
|
function ao(r, e) {
|
|
@@ -2273,9 +2281,9 @@ const b = {
|
|
|
2273
2281
|
/** 当前选中的物体 */
|
|
2274
2282
|
selectedObject: null
|
|
2275
2283
|
};
|
|
2276
|
-
let wt = !1, We = !1,
|
|
2277
|
-
const
|
|
2278
|
-
let
|
|
2284
|
+
let wt = !1, We = !1, Ie = null, ye = null;
|
|
2285
|
+
const ss = 16755200;
|
|
2286
|
+
let ns = [], Oe = null, is = null, Rt = null, xe = [];
|
|
2279
2287
|
const je = /* @__PURE__ */ new Map();
|
|
2280
2288
|
let Nt, Et = null, lt = null, At = null;
|
|
2281
2289
|
function co(r, e = "edit", t) {
|
|
@@ -2287,9 +2295,9 @@ function uo() {
|
|
|
2287
2295
|
}
|
|
2288
2296
|
function ho() {
|
|
2289
2297
|
if (!b.renderer || !b.scene || !b.camera) return;
|
|
2290
|
-
const r = new
|
|
2298
|
+
const r = new Zi(b.renderer);
|
|
2291
2299
|
r.addPass(new Xi(b.scene, b.camera)), r.addPass(new qi());
|
|
2292
|
-
const e = new
|
|
2300
|
+
const e = new Ce(
|
|
2293
2301
|
new w.Vector2(
|
|
2294
2302
|
b.container.clientWidth,
|
|
2295
2303
|
b.container.clientHeight
|
|
@@ -2297,7 +2305,7 @@ function ho() {
|
|
|
2297
2305
|
b.scene,
|
|
2298
2306
|
b.camera
|
|
2299
2307
|
);
|
|
2300
|
-
e.edgeStrength = 3, e.edgeGlow = 0.5, e.edgeThickness = 1.5, e.visibleEdgeColor.set(
|
|
2308
|
+
e.edgeStrength = 3, e.edgeGlow = 0.5, e.edgeThickness = 1.5, e.visibleEdgeColor.set(ss), e.hiddenEdgeColor.set(ss), e.downSampleRatio = 2, r.addPass(e), Ie = r, ye = e;
|
|
2301
2309
|
}
|
|
2302
2310
|
function fo() {
|
|
2303
2311
|
b.scene = new w.Scene(), b.scene.name = "sl_scene", new w.TextureLoader().load(
|
|
@@ -2391,7 +2399,7 @@ function bo() {
|
|
|
2391
2399
|
}, 200));
|
|
2392
2400
|
}), r.addEventListener("objectChange", () => {
|
|
2393
2401
|
const e = b.selectedObject;
|
|
2394
|
-
if (
|
|
2402
|
+
if (is && e && is(e), e && e.type === "DirectionalLight") {
|
|
2395
2403
|
const t = e.userData.helper;
|
|
2396
2404
|
t && t.update && t.update();
|
|
2397
2405
|
}
|
|
@@ -2403,7 +2411,7 @@ function Co() {
|
|
|
2403
2411
|
}
|
|
2404
2412
|
function rn() {
|
|
2405
2413
|
var e, t;
|
|
2406
|
-
Et = requestAnimationFrame(rn), ut.update(), (e = b.orbitControls) == null || e.update(), b.mode === "run" &&
|
|
2414
|
+
Et = requestAnimationFrame(rn), ut.update(), (e = b.orbitControls) == null || e.update(), b.mode === "run" && Ie && b.scene && b.camera ? Ie.render() : (t = b.renderer) == null || t.render(b.scene, b.camera), b.scene && b.camera && ao(b.scene, b.camera), b.scene && b.scene.traverse((n) => {
|
|
2407
2415
|
if (n.userData.isWater && n.type === "Mesh") {
|
|
2408
2416
|
const s = n, i = s.material;
|
|
2409
2417
|
if (i.normalMap) {
|
|
@@ -2416,7 +2424,7 @@ function rn() {
|
|
|
2416
2424
|
function Io() {
|
|
2417
2425
|
if (!b.container || !b.camera || !b.renderer) return;
|
|
2418
2426
|
const r = b.container.clientWidth, e = b.container.clientHeight;
|
|
2419
|
-
r === 0 || e === 0 || (b.camera.aspect = r / e, b.camera.updateProjectionMatrix(), b.renderer.setSize(r, e),
|
|
2427
|
+
r === 0 || e === 0 || (b.camera.aspect = r / e, b.camera.updateProjectionMatrix(), b.renderer.setSize(r, e), Ie && Ie.setSize(r, e), ye && ye.resolution.set(r, e), lo(r, e));
|
|
2420
2428
|
}
|
|
2421
2429
|
function us(r) {
|
|
2422
2430
|
b.selectedObject !== r && (b.selectedObject && b.transformControls.detach(), b.selectedObject = r, b.transformControls.attach(r), b.transformControls.setMode(b.transformControlsMode), b.transformControls.showX = !0, b.transformControls.showY = !0, b.transformControls.showZ = !0, an(r), console.log("选中", b.selectedObject), Oe == null || Oe(r));
|
|
@@ -2425,7 +2433,7 @@ let _ = null;
|
|
|
2425
2433
|
function yo(r) {
|
|
2426
2434
|
_ = r;
|
|
2427
2435
|
}
|
|
2428
|
-
function
|
|
2436
|
+
function Kt(r) {
|
|
2429
2437
|
_ == null || _(r);
|
|
2430
2438
|
}
|
|
2431
2439
|
function xo(r) {
|
|
@@ -2436,27 +2444,27 @@ function an(r) {
|
|
|
2436
2444
|
ds(), r.traverse((t) => {
|
|
2437
2445
|
if (t.isMesh) {
|
|
2438
2446
|
const n = t, s = new w.EdgesGeometry(n.geometry), i = new w.LineBasicMaterial({
|
|
2439
|
-
color:
|
|
2447
|
+
color: ss,
|
|
2440
2448
|
depthTest: !0
|
|
2441
2449
|
}), o = new w.LineSegments(s, i);
|
|
2442
|
-
t.add(o),
|
|
2450
|
+
t.add(o), ns.push(o);
|
|
2443
2451
|
}
|
|
2444
2452
|
});
|
|
2445
2453
|
else {
|
|
2446
|
-
if (!
|
|
2454
|
+
if (!ye) return;
|
|
2447
2455
|
const t = [];
|
|
2448
2456
|
r.traverse((n) => {
|
|
2449
2457
|
n.isMesh && t.push(n);
|
|
2450
|
-
}),
|
|
2458
|
+
}), ye.selectedObjects = t;
|
|
2451
2459
|
}
|
|
2452
2460
|
}
|
|
2453
2461
|
function ds() {
|
|
2454
2462
|
if (b.mode === "edit") {
|
|
2455
|
-
for (const r of
|
|
2463
|
+
for (const r of ns)
|
|
2456
2464
|
r.parent && r.parent.remove(r), r.geometry.dispose(), r.material.dispose();
|
|
2457
|
-
|
|
2465
|
+
ns = [];
|
|
2458
2466
|
} else
|
|
2459
|
-
|
|
2467
|
+
ye && (ye.selectedObjects = []);
|
|
2460
2468
|
}
|
|
2461
2469
|
function hs() {
|
|
2462
2470
|
b.selectedObject && (ds(), b.transformControls.detach(), b.selectedObject = null, Oe == null || Oe(null));
|
|
@@ -2544,13 +2552,13 @@ function To(r, e = 500) {
|
|
|
2544
2552
|
tz: n.z
|
|
2545
2553
|
},
|
|
2546
2554
|
e
|
|
2547
|
-
).easing(ut.Easing.Quadratic.InOut).onUpdate((
|
|
2548
|
-
b.camera.position.set(
|
|
2555
|
+
).easing(ut.Easing.Quadratic.InOut).onUpdate((h) => {
|
|
2556
|
+
b.camera.position.set(h.x, h.y, h.z), b.orbitControls.target.set(h.tx, h.ty, h.tz), b.orbitControls.update();
|
|
2549
2557
|
}).start();
|
|
2550
|
-
} catch (
|
|
2558
|
+
} catch (h) {
|
|
2551
2559
|
console.error(
|
|
2552
2560
|
"[focusOnObject] TWEEN 动画创建失败,请检查 @tweenjs/tween.js 是否已正确安装且版本兼容(^23.1.3):",
|
|
2553
|
-
|
|
2561
|
+
h
|
|
2554
2562
|
);
|
|
2555
2563
|
}
|
|
2556
2564
|
}
|
|
@@ -2578,121 +2586,122 @@ function Eo(r) {
|
|
|
2578
2586
|
});
|
|
2579
2587
|
}
|
|
2580
2588
|
function Xe(r, e = !1) {
|
|
2581
|
-
b.scene.add(r), r.userData.isMovable && (Lo(r),
|
|
2589
|
+
b.scene.add(r), r.userData.isMovable && (Lo(r), jt()), e && b.mode === "edit" && us(r);
|
|
2582
2590
|
}
|
|
2583
2591
|
function ko(r) {
|
|
2584
|
-
b.selectedObject === r && hs(), Eo(r), wo(r), r.userData.helper && b.scene.remove(r.userData.helper), r.parent ? r.parent.remove(r) : b.scene.remove(r), No(r),
|
|
2592
|
+
b.selectedObject === r && hs(), Eo(r), wo(r), r.userData.helper && b.scene.remove(r.userData.helper), r.parent ? r.parent.remove(r) : b.scene.remove(r), No(r), jt();
|
|
2585
2593
|
}
|
|
2586
2594
|
function Po(r) {
|
|
2587
2595
|
const e = b.scene.getObjectByProperty("uuid", r);
|
|
2588
2596
|
e && ko(e);
|
|
2589
2597
|
}
|
|
2590
2598
|
function Lo(r) {
|
|
2591
|
-
r.userData.isMovable && r.parent === b.scene && (
|
|
2599
|
+
r.userData.isMovable && r.parent === b.scene && (xe.includes(r) || xe.push(r));
|
|
2592
2600
|
}
|
|
2593
2601
|
function No(r) {
|
|
2594
|
-
const e =
|
|
2595
|
-
e !== -1 &&
|
|
2602
|
+
const e = xe.indexOf(r);
|
|
2603
|
+
e !== -1 && xe.splice(e, 1);
|
|
2596
2604
|
}
|
|
2597
2605
|
function Oo() {
|
|
2598
2606
|
const r = [];
|
|
2599
2607
|
b.scene.children.forEach((e) => {
|
|
2600
2608
|
e.userData.isMovable && r.push(e);
|
|
2601
|
-
}),
|
|
2609
|
+
}), xe = r, jt();
|
|
2602
2610
|
}
|
|
2603
|
-
function
|
|
2604
|
-
Rt == null || Rt([...
|
|
2611
|
+
function jt() {
|
|
2612
|
+
Rt == null || Rt([...xe]);
|
|
2605
2613
|
}
|
|
2606
2614
|
function Do(r) {
|
|
2607
2615
|
Oe = r;
|
|
2608
2616
|
}
|
|
2609
2617
|
function Wo(r) {
|
|
2610
|
-
|
|
2618
|
+
is = r;
|
|
2611
2619
|
}
|
|
2612
2620
|
function jo(r) {
|
|
2613
2621
|
Rt = r;
|
|
2614
2622
|
}
|
|
2615
2623
|
function Fo() {
|
|
2616
|
-
return
|
|
2624
|
+
return xe;
|
|
2617
2625
|
}
|
|
2618
2626
|
function Uo() {
|
|
2619
2627
|
return b.selectedObject;
|
|
2620
2628
|
}
|
|
2621
|
-
function
|
|
2629
|
+
function Sl(r, e, t) {
|
|
2622
2630
|
if (!b.scene) return;
|
|
2623
2631
|
const n = je.get(r);
|
|
2624
2632
|
if (n) {
|
|
2625
|
-
const s =
|
|
2633
|
+
const s = Wt(n);
|
|
2626
2634
|
s && s.updateItemByCode(e, t);
|
|
2627
2635
|
}
|
|
2628
2636
|
}
|
|
2629
|
-
function
|
|
2637
|
+
function Tl() {
|
|
2630
2638
|
return b.scene;
|
|
2631
2639
|
}
|
|
2632
2640
|
function Ho() {
|
|
2633
2641
|
return b.camera;
|
|
2634
2642
|
}
|
|
2635
|
-
function
|
|
2643
|
+
function Ml() {
|
|
2636
2644
|
return b.renderer;
|
|
2637
2645
|
}
|
|
2638
2646
|
async function zo() {
|
|
2639
2647
|
var A, u, c;
|
|
2640
|
-
_ == null || _(!0), await new Promise((
|
|
2648
|
+
_ == null || _(!0), await new Promise((h) => setTimeout(h, 50)), hs();
|
|
2641
2649
|
const r = b.scene;
|
|
2642
2650
|
if (!r)
|
|
2643
2651
|
return _ == null || _(!1), "{}";
|
|
2644
2652
|
const e = [], t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map();
|
|
2645
|
-
r.traverse((
|
|
2646
|
-
var
|
|
2647
|
-
if (
|
|
2648
|
-
const
|
|
2649
|
-
if (
|
|
2650
|
-
const
|
|
2653
|
+
r.traverse((h) => {
|
|
2654
|
+
var d;
|
|
2655
|
+
if (h.userData.type === "lightHelper" && e.push(h), h.type === "DirectionalLight" && h.userData.helper && (t.set(h, h.userData.helper), h.userData.helper = void 0), h.name && h.name.startsWith("DataPanel_")) {
|
|
2656
|
+
const g = h;
|
|
2657
|
+
if (g.element) {
|
|
2658
|
+
const f = g.element.querySelector(
|
|
2651
2659
|
"[data-panel-title]"
|
|
2652
|
-
),
|
|
2653
|
-
if (
|
|
2660
|
+
), m = [];
|
|
2661
|
+
if (g.element.querySelectorAll(
|
|
2654
2662
|
".sl-css2d-data-panel-item"
|
|
2655
|
-
).forEach((
|
|
2656
|
-
var
|
|
2657
|
-
const
|
|
2658
|
-
if (
|
|
2659
|
-
const Q = (
|
|
2663
|
+
).forEach((I) => {
|
|
2664
|
+
var v, M, L;
|
|
2665
|
+
const x = I.querySelector(".item-label"), y = I.querySelector(".item-value");
|
|
2666
|
+
if (x && y) {
|
|
2667
|
+
const Q = (x.textContent || "").trim(), $ = ((M = (v = y.childNodes[0]) == null ? void 0 : v.textContent) == null ? void 0 : M.trim()) || "", Y = y.querySelector(
|
|
2660
2668
|
"span"
|
|
2661
|
-
),
|
|
2662
|
-
|
|
2669
|
+
), Te = Y ? (Y.textContent || "").trim() : void 0, Ft = ((L = I.getAttribute("data-item-code")) == null ? void 0 : L.trim()) || void 0;
|
|
2670
|
+
m.push({ label: Q, value: $, unit: Te, code: Ft });
|
|
2663
2671
|
}
|
|
2664
|
-
}),
|
|
2665
|
-
const
|
|
2672
|
+
}), h.parent) {
|
|
2673
|
+
const I = g.element.style.width || "", x = g.element.style.fontSize || "", y = Wt(h.parent), v = y ? y.getOffsetY() : 0.1;
|
|
2666
2674
|
n.set(
|
|
2667
|
-
|
|
2675
|
+
h.parent.userData.id ? h.parent.userData.id : h.parent.uuid,
|
|
2668
2676
|
{
|
|
2669
|
-
title: ((
|
|
2670
|
-
items:
|
|
2671
|
-
width:
|
|
2672
|
-
fontSize:
|
|
2677
|
+
title: ((d = f == null ? void 0 : f.textContent) == null ? void 0 : d.trim()) || "",
|
|
2678
|
+
items: m,
|
|
2679
|
+
width: I,
|
|
2680
|
+
fontSize: x,
|
|
2681
|
+
offsetY: v
|
|
2673
2682
|
}
|
|
2674
2683
|
);
|
|
2675
2684
|
}
|
|
2676
2685
|
}
|
|
2677
2686
|
}
|
|
2678
|
-
}), e.forEach((
|
|
2687
|
+
}), e.forEach((h) => r.remove(h));
|
|
2679
2688
|
const s = r.clone();
|
|
2680
2689
|
s.children = s.children.filter(
|
|
2681
|
-
(
|
|
2682
|
-
), s.traverse((
|
|
2683
|
-
|
|
2690
|
+
(h) => h.userData.type !== "initFloor"
|
|
2691
|
+
), s.traverse((h) => {
|
|
2692
|
+
h.name && h.name.startsWith("DataPanel_") && h.parent && h.parent.remove(h);
|
|
2684
2693
|
});
|
|
2685
2694
|
const i = s.toJSON();
|
|
2686
|
-
e.forEach((
|
|
2687
|
-
|
|
2695
|
+
e.forEach((h) => r.add(h)), t.forEach((h, d) => {
|
|
2696
|
+
d.userData.helper = h;
|
|
2688
2697
|
});
|
|
2689
2698
|
const o = {
|
|
2690
2699
|
position: (A = b.camera) == null ? void 0 : A.position.toArray(),
|
|
2691
2700
|
rotation: (u = b.camera) == null ? void 0 : u.rotation.toArray(),
|
|
2692
2701
|
target: ((c = b.orbitControls) == null ? void 0 : c.target.toArray()) || [0, 0, 0]
|
|
2693
2702
|
}, a = {};
|
|
2694
|
-
n.forEach((
|
|
2695
|
-
a[
|
|
2703
|
+
n.forEach((h, d) => {
|
|
2704
|
+
a[d] = h;
|
|
2696
2705
|
});
|
|
2697
2706
|
const l = JSON.stringify({
|
|
2698
2707
|
scene: i,
|
|
@@ -2709,19 +2718,19 @@ function Go(r, e = "edit", t) {
|
|
|
2709
2718
|
const u = A.userData.id || A.uuid, c = t[u];
|
|
2710
2719
|
if (c && A.userData.isMovable) {
|
|
2711
2720
|
Mo(A);
|
|
2712
|
-
const
|
|
2721
|
+
const h = new dt({
|
|
2713
2722
|
title: c.title,
|
|
2714
2723
|
items: c.items
|
|
2715
2724
|
});
|
|
2716
|
-
|
|
2725
|
+
h.attachTo(A), h.visible = !1, c.width && h.setWidth(c.width), c.fontSize && h.setFontSize(c.fontSize), c.offsetY !== void 0 && h.setOffsetY(c.offsetY), nn(A, h);
|
|
2717
2726
|
}
|
|
2718
2727
|
})), e === "edit" && ((l = b.scene) == null || l.traverse((A) => {
|
|
2719
2728
|
var u;
|
|
2720
2729
|
if (A.type === "DirectionalLight") {
|
|
2721
2730
|
const c = A;
|
|
2722
2731
|
if (!c.userData.helper) {
|
|
2723
|
-
const
|
|
2724
|
-
|
|
2732
|
+
const h = new w.DirectionalLightHelper(c, 1);
|
|
2733
|
+
h.userData.type = "lightHelper", c.userData.helper = h, (u = b.scene) == null || u.add(h);
|
|
2725
2734
|
}
|
|
2726
2735
|
}
|
|
2727
2736
|
}));
|
|
@@ -2739,9 +2748,9 @@ function An(r) {
|
|
|
2739
2748
|
An(t);
|
|
2740
2749
|
}
|
|
2741
2750
|
function Ko() {
|
|
2742
|
-
Et !== null && (cancelAnimationFrame(Et), Et = null), lt && b.container && (b.container.removeEventListener("click", lt), lt = null), At && (window.removeEventListener("resize", At), At = null), b.orbitControls && (b.orbitControls.dispose(), b.orbitControls = null), b.transformControls && (b.transformControls.dispose(), b.transformControls = null),
|
|
2751
|
+
Et !== null && (cancelAnimationFrame(Et), Et = null), lt && b.container && (b.container.removeEventListener("click", lt), lt = null), At && (window.removeEventListener("resize", At), At = null), b.orbitControls && (b.orbitControls.dispose(), b.orbitControls = null), b.transformControls && (b.transformControls.dispose(), b.transformControls = null), Ie && (Ie.dispose(), Ie = null, ye = null), b.scene && (An(b.scene), b.scene = null), b.renderer && (b.renderer.dispose(), b.renderer.domElement && b.container && b.container.removeChild(b.renderer.domElement), b.renderer = null), Ao(), b.camera = null, b.gridHelper = null, b.selectedObject = null, b.container = null, b.mode = "", xe = [], je.clear(), jt(), wt = !1, We = !1;
|
|
2743
2752
|
}
|
|
2744
|
-
const
|
|
2753
|
+
const Bo = /^[og]\s*(.+)?/, Zo = /^mtllib /, Xo = /^usemtl /, qo = /^usemap /, Ds = /\s+/, Ws = new T(), Bt = new T(), js = new T(), Fs = new T(), te = new T(), vt = new B();
|
|
2745
2754
|
function Vo() {
|
|
2746
2755
|
const r = {
|
|
2747
2756
|
objects: [],
|
|
@@ -2851,7 +2860,7 @@ function Vo() {
|
|
|
2851
2860
|
},
|
|
2852
2861
|
addFaceNormal: function(e, t, n) {
|
|
2853
2862
|
const s = this.vertices, i = this.object.geometry.normals;
|
|
2854
|
-
Ws.fromArray(s, e),
|
|
2863
|
+
Ws.fromArray(s, e), Bt.fromArray(s, t), js.fromArray(s, n), te.subVectors(js, Bt), Fs.subVectors(Ws, Bt), te.cross(Fs), te.normalize(), i.push(te.x, te.y, te.z), i.push(te.x, te.y, te.z), i.push(te.x, te.y, te.z);
|
|
2855
2864
|
},
|
|
2856
2865
|
addColor: function(e, t, n) {
|
|
2857
2866
|
const s = this.colors, i = this.object.geometry.colors;
|
|
@@ -2871,15 +2880,15 @@ function Vo() {
|
|
|
2871
2880
|
},
|
|
2872
2881
|
addFace: function(e, t, n, s, i, o, a, l, A) {
|
|
2873
2882
|
const u = this.vertices.length;
|
|
2874
|
-
let c = this.parseVertexIndex(e, u),
|
|
2875
|
-
if (this.addVertex(c,
|
|
2876
|
-
const
|
|
2877
|
-
c = this.parseNormalIndex(a,
|
|
2883
|
+
let c = this.parseVertexIndex(e, u), h = this.parseVertexIndex(t, u), d = this.parseVertexIndex(n, u);
|
|
2884
|
+
if (this.addVertex(c, h, d), this.addColor(c, h, d), a !== void 0 && a !== "") {
|
|
2885
|
+
const g = this.normals.length;
|
|
2886
|
+
c = this.parseNormalIndex(a, g), h = this.parseNormalIndex(l, g), d = this.parseNormalIndex(A, g), this.addNormal(c, h, d);
|
|
2878
2887
|
} else
|
|
2879
|
-
this.addFaceNormal(c,
|
|
2888
|
+
this.addFaceNormal(c, h, d);
|
|
2880
2889
|
if (s !== void 0 && s !== "") {
|
|
2881
|
-
const
|
|
2882
|
-
c = this.parseUVIndex(s,
|
|
2890
|
+
const g = this.uvs.length;
|
|
2891
|
+
c = this.parseUVIndex(s, g), h = this.parseUVIndex(i, g), d = this.parseUVIndex(o, g), this.addUV(c, h, d), this.object.geometry.hasUVIndices = !0;
|
|
2883
2892
|
} else
|
|
2884
2893
|
this.addDefaultUV();
|
|
2885
2894
|
},
|
|
@@ -2902,7 +2911,7 @@ function Vo() {
|
|
|
2902
2911
|
};
|
|
2903
2912
|
return r.startObject("", !1), r;
|
|
2904
2913
|
}
|
|
2905
|
-
class Jo extends
|
|
2914
|
+
class Jo extends ls {
|
|
2906
2915
|
/**
|
|
2907
2916
|
* Constructs a new OBJ loader.
|
|
2908
2917
|
*
|
|
@@ -2989,57 +2998,57 @@ class Jo extends as {
|
|
|
2989
2998
|
break;
|
|
2990
2999
|
}
|
|
2991
3000
|
} else if (u === "f") {
|
|
2992
|
-
const
|
|
2993
|
-
for (let
|
|
2994
|
-
const
|
|
2995
|
-
if (
|
|
2996
|
-
const
|
|
2997
|
-
|
|
3001
|
+
const h = A.slice(1).trim().split(Ds), d = [];
|
|
3002
|
+
for (let f = 0, m = h.length; f < m; f++) {
|
|
3003
|
+
const p = h[f];
|
|
3004
|
+
if (p.length > 0) {
|
|
3005
|
+
const I = p.split("/");
|
|
3006
|
+
d.push(I);
|
|
2998
3007
|
}
|
|
2999
3008
|
}
|
|
3000
|
-
const
|
|
3001
|
-
for (let
|
|
3002
|
-
const
|
|
3009
|
+
const g = d[0];
|
|
3010
|
+
for (let f = 1, m = d.length - 1; f < m; f++) {
|
|
3011
|
+
const p = d[f], I = d[f + 1];
|
|
3003
3012
|
t.addFace(
|
|
3004
|
-
m[0],
|
|
3005
3013
|
g[0],
|
|
3006
|
-
|
|
3007
|
-
|
|
3014
|
+
p[0],
|
|
3015
|
+
I[0],
|
|
3008
3016
|
g[1],
|
|
3009
|
-
|
|
3010
|
-
|
|
3017
|
+
p[1],
|
|
3018
|
+
I[1],
|
|
3011
3019
|
g[2],
|
|
3012
|
-
|
|
3020
|
+
p[2],
|
|
3021
|
+
I[2]
|
|
3013
3022
|
);
|
|
3014
3023
|
}
|
|
3015
3024
|
} else if (u === "l") {
|
|
3016
3025
|
const c = A.substring(1).trim().split(" ");
|
|
3017
|
-
let
|
|
3018
|
-
const
|
|
3026
|
+
let h = [];
|
|
3027
|
+
const d = [];
|
|
3019
3028
|
if (A.indexOf("/") === -1)
|
|
3020
|
-
|
|
3029
|
+
h = c;
|
|
3021
3030
|
else
|
|
3022
|
-
for (let
|
|
3023
|
-
const
|
|
3024
|
-
|
|
3031
|
+
for (let g = 0, f = c.length; g < f; g++) {
|
|
3032
|
+
const m = c[g].split("/");
|
|
3033
|
+
m[0] !== "" && h.push(m[0]), m[1] !== "" && d.push(m[1]);
|
|
3025
3034
|
}
|
|
3026
|
-
t.addLineGeometry(
|
|
3035
|
+
t.addLineGeometry(h, d);
|
|
3027
3036
|
} else if (u === "p") {
|
|
3028
|
-
const
|
|
3029
|
-
t.addPointGeometry(
|
|
3030
|
-
} else if ((s =
|
|
3037
|
+
const h = A.slice(1).trim().split(" ");
|
|
3038
|
+
t.addPointGeometry(h);
|
|
3039
|
+
} else if ((s = Bo.exec(A)) !== null) {
|
|
3031
3040
|
const c = (" " + s[0].slice(1).trim()).slice(1);
|
|
3032
3041
|
t.startObject(c);
|
|
3033
3042
|
} else if (Xo.test(A))
|
|
3034
3043
|
t.object.startMaterial(A.substring(7).trim(), t.materialLibraries);
|
|
3035
|
-
else if (
|
|
3044
|
+
else if (Zo.test(A))
|
|
3036
3045
|
t.materialLibraries.push(A.substring(7).trim());
|
|
3037
3046
|
else if (qo.test(A))
|
|
3038
3047
|
console.warn('THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.');
|
|
3039
3048
|
else if (u === "s") {
|
|
3040
3049
|
if (s = A.split(" "), s.length > 1) {
|
|
3041
|
-
const
|
|
3042
|
-
t.object.smooth =
|
|
3050
|
+
const h = s[1].trim().toLowerCase();
|
|
3051
|
+
t.object.smooth = h !== "0" && h !== "off";
|
|
3043
3052
|
} else
|
|
3044
3053
|
t.object.smooth = !0;
|
|
3045
3054
|
const c = t.object.currentMaterial();
|
|
@@ -3053,36 +3062,36 @@ class Jo extends as {
|
|
|
3053
3062
|
const i = new St();
|
|
3054
3063
|
if (i.materialLibraries = [].concat(t.materialLibraries), !(t.objects.length === 1 && t.objects[0].geometry.vertices.length === 0) === !0)
|
|
3055
3064
|
for (let a = 0, l = t.objects.length; a < l; a++) {
|
|
3056
|
-
const A = t.objects[a], u = A.geometry, c = A.materials,
|
|
3057
|
-
let
|
|
3065
|
+
const A = t.objects[a], u = A.geometry, c = A.materials, h = u.type === "Line", d = u.type === "Points";
|
|
3066
|
+
let g = !1;
|
|
3058
3067
|
if (u.vertices.length === 0) continue;
|
|
3059
|
-
const
|
|
3060
|
-
|
|
3061
|
-
const
|
|
3062
|
-
for (let
|
|
3063
|
-
const y = c[
|
|
3064
|
-
let M = t.materials[
|
|
3068
|
+
const f = new De();
|
|
3069
|
+
f.setAttribute("position", new le(u.vertices, 3)), u.normals.length > 0 && f.setAttribute("normal", new le(u.normals, 3)), u.colors.length > 0 && (g = !0, f.setAttribute("color", new le(u.colors, 3))), u.hasUVIndices === !0 && f.setAttribute("uv", new le(u.uvs, 2));
|
|
3070
|
+
const m = [];
|
|
3071
|
+
for (let I = 0, x = c.length; I < x; I++) {
|
|
3072
|
+
const y = c[I], v = y.name + "_" + y.smooth + "_" + g;
|
|
3073
|
+
let M = t.materials[v];
|
|
3065
3074
|
if (this.materials !== null) {
|
|
3066
|
-
if (M = this.materials.create(y.name),
|
|
3075
|
+
if (M = this.materials.create(y.name), h && M && !(M instanceof it)) {
|
|
3067
3076
|
const L = new it();
|
|
3068
3077
|
ot.prototype.copy.call(L, M), L.color.copy(M.color), M = L;
|
|
3069
|
-
} else if (
|
|
3078
|
+
} else if (d && M && !(M instanceof et)) {
|
|
3070
3079
|
const L = new et({ size: 10, sizeAttenuation: !1 });
|
|
3071
3080
|
ot.prototype.copy.call(L, M), L.color.copy(M.color), L.map = M.map, M = L;
|
|
3072
3081
|
}
|
|
3073
3082
|
}
|
|
3074
|
-
M === void 0 && (
|
|
3083
|
+
M === void 0 && (h ? M = new it() : d ? M = new et({ size: 1, sizeAttenuation: !1 }) : M = new Zn(), M.name = y.name, M.flatShading = !y.smooth, M.vertexColors = g, t.materials[v] = M), m.push(M);
|
|
3075
3084
|
}
|
|
3076
|
-
let
|
|
3077
|
-
if (
|
|
3078
|
-
for (let
|
|
3079
|
-
const y = c[
|
|
3080
|
-
|
|
3085
|
+
let p;
|
|
3086
|
+
if (m.length > 1) {
|
|
3087
|
+
for (let I = 0, x = c.length; I < x; I++) {
|
|
3088
|
+
const y = c[I];
|
|
3089
|
+
f.addGroup(y.groupStart, y.groupCount, I);
|
|
3081
3090
|
}
|
|
3082
|
-
|
|
3091
|
+
h ? p = new _t(f, m) : d ? p = new Tt(f, m) : p = new S(f, m);
|
|
3083
3092
|
} else
|
|
3084
|
-
|
|
3085
|
-
|
|
3093
|
+
h ? p = new _t(f, m[0]) : d ? p = new Tt(f, m[0]) : p = new S(f, m[0]);
|
|
3094
|
+
p.name = A.name, i.add(p);
|
|
3086
3095
|
}
|
|
3087
3096
|
else if (t.vertices.length > 0) {
|
|
3088
3097
|
const a = new et({ size: 1, sizeAttenuation: !1 }), l = new De();
|
|
@@ -3096,7 +3105,7 @@ class Jo extends as {
|
|
|
3096
3105
|
function Us(r, e) {
|
|
3097
3106
|
if (e === Xn)
|
|
3098
3107
|
return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."), r;
|
|
3099
|
-
if (e ===
|
|
3108
|
+
if (e === $t || e === Vs) {
|
|
3100
3109
|
let t = r.getIndex();
|
|
3101
3110
|
if (t === null) {
|
|
3102
3111
|
const o = [], a = r.getAttribute("position");
|
|
@@ -3108,7 +3117,7 @@ function Us(r, e) {
|
|
|
3108
3117
|
return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), r;
|
|
3109
3118
|
}
|
|
3110
3119
|
const n = t.count - 2, s = [];
|
|
3111
|
-
if (e ===
|
|
3120
|
+
if (e === $t)
|
|
3112
3121
|
for (let o = 1; o <= n; o++)
|
|
3113
3122
|
s.push(t.getX(0)), s.push(t.getX(o)), s.push(t.getX(o + 1));
|
|
3114
3123
|
else
|
|
@@ -3137,7 +3146,7 @@ function cn(r, e, t) {
|
|
|
3137
3146
|
for (let n = 0; n < r.children.length; n++)
|
|
3138
3147
|
cn(r.children[n], e.children[n], t);
|
|
3139
3148
|
}
|
|
3140
|
-
class Yo extends
|
|
3149
|
+
class Yo extends ls {
|
|
3141
3150
|
/**
|
|
3142
3151
|
* Constructs a new glTF loader.
|
|
3143
3152
|
*
|
|
@@ -3310,7 +3319,7 @@ class Yo extends as {
|
|
|
3310
3319
|
}
|
|
3311
3320
|
if (i.extensionsUsed)
|
|
3312
3321
|
for (let u = 0; u < i.extensionsUsed.length; ++u) {
|
|
3313
|
-
const c = i.extensionsUsed[u],
|
|
3322
|
+
const c = i.extensionsUsed[u], h = i.extensionsRequired || [];
|
|
3314
3323
|
switch (c) {
|
|
3315
3324
|
case E.KHR_MATERIALS_UNLIT:
|
|
3316
3325
|
o[c] = new er();
|
|
@@ -3325,7 +3334,7 @@ class Yo extends as {
|
|
|
3325
3334
|
o[c] = new Cr();
|
|
3326
3335
|
break;
|
|
3327
3336
|
default:
|
|
3328
|
-
|
|
3337
|
+
h.indexOf(c) >= 0 && a[c] === void 0 && console.warn('THREE.GLTFLoader: Unknown extension "' + c + '".');
|
|
3329
3338
|
}
|
|
3330
3339
|
}
|
|
3331
3340
|
A.setExtensions(o), A.setPlugins(a), A.parse(n, s);
|
|
@@ -3408,7 +3417,7 @@ class $o {
|
|
|
3408
3417
|
if (s) return s;
|
|
3409
3418
|
const i = t.json, l = ((i.extensions && i.extensions[this.name] || {}).lights || [])[e];
|
|
3410
3419
|
let A;
|
|
3411
|
-
const u = new
|
|
3420
|
+
const u = new B(16777215);
|
|
3412
3421
|
l.color !== void 0 && u.setRGB(l.color[0], l.color[1], l.color[2], Ae);
|
|
3413
3422
|
const c = l.range !== void 0 ? l.range : 0;
|
|
3414
3423
|
switch (l.type) {
|
|
@@ -3446,7 +3455,7 @@ class er {
|
|
|
3446
3455
|
}
|
|
3447
3456
|
extendParams(e, t, n) {
|
|
3448
3457
|
const s = [];
|
|
3449
|
-
e.color = new
|
|
3458
|
+
e.color = new B(1, 1, 1), e.opacity = 1;
|
|
3450
3459
|
const i = t.pbrMetallicRoughness;
|
|
3451
3460
|
if (i) {
|
|
3452
3461
|
if (Array.isArray(i.baseColorFactor)) {
|
|
@@ -3522,7 +3531,7 @@ class or {
|
|
|
3522
3531
|
const n = H(this.parser, e, this.name);
|
|
3523
3532
|
if (n === null) return Promise.resolve();
|
|
3524
3533
|
const s = [];
|
|
3525
|
-
if (t.sheenColor = new
|
|
3534
|
+
if (t.sheenColor = new B(0, 0, 0), t.sheenRoughness = 0, t.sheen = 1, n.sheenColorFactor !== void 0) {
|
|
3526
3535
|
const i = n.sheenColorFactor;
|
|
3527
3536
|
t.sheenColor.setRGB(i[0], i[1], i[2], Ae);
|
|
3528
3537
|
}
|
|
@@ -3556,7 +3565,7 @@ class ar {
|
|
|
3556
3565
|
const s = [];
|
|
3557
3566
|
t.thickness = n.thicknessFactor !== void 0 ? n.thicknessFactor : 0, n.thicknessTexture !== void 0 && s.push(this.parser.assignTexture(t, "thicknessMap", n.thicknessTexture)), t.attenuationDistance = n.attenuationDistance || 1 / 0;
|
|
3558
3567
|
const i = n.attenuationColor || [1, 1, 1];
|
|
3559
|
-
return t.attenuationColor = new
|
|
3568
|
+
return t.attenuationColor = new B().setRGB(i[0], i[1], i[2], Ae), Promise.all(s);
|
|
3560
3569
|
}
|
|
3561
3570
|
}
|
|
3562
3571
|
class lr {
|
|
@@ -3584,7 +3593,7 @@ class Ar {
|
|
|
3584
3593
|
const s = [];
|
|
3585
3594
|
t.specularIntensity = n.specularFactor !== void 0 ? n.specularFactor : 1, n.specularTexture !== void 0 && s.push(this.parser.assignTexture(t, "specularIntensityMap", n.specularTexture));
|
|
3586
3595
|
const i = n.specularColorFactor || [1, 1, 1];
|
|
3587
|
-
return t.specularColor = new
|
|
3596
|
+
return t.specularColor = new B().setRGB(i[0], i[1], i[2], Ae), n.specularColorTexture !== void 0 && s.push(this.parser.assignTexture(t, "specularColorMap", n.specularColorTexture, he)), Promise.all(s);
|
|
3588
3597
|
}
|
|
3589
3598
|
}
|
|
3590
3599
|
class cr {
|
|
@@ -3680,12 +3689,12 @@ class Hs {
|
|
|
3680
3689
|
return null;
|
|
3681
3690
|
}
|
|
3682
3691
|
return i.then(function(a) {
|
|
3683
|
-
const l = s.byteOffset || 0, A = s.byteLength || 0, u = s.count, c = s.byteStride,
|
|
3684
|
-
return o.decodeGltfBufferAsync ? o.decodeGltfBufferAsync(u, c,
|
|
3685
|
-
return
|
|
3692
|
+
const l = s.byteOffset || 0, A = s.byteLength || 0, u = s.count, c = s.byteStride, h = new Uint8Array(a, l, A);
|
|
3693
|
+
return o.decodeGltfBufferAsync ? o.decodeGltfBufferAsync(u, c, h, s.mode, s.filter).then(function(d) {
|
|
3694
|
+
return d.buffer;
|
|
3686
3695
|
}) : o.ready.then(function() {
|
|
3687
|
-
const
|
|
3688
|
-
return o.decodeGltfBuffer(new Uint8Array(
|
|
3696
|
+
const d = new ArrayBuffer(u * c);
|
|
3697
|
+
return o.decodeGltfBuffer(new Uint8Array(d), u, c, h, s.mode, s.filter), d;
|
|
3689
3698
|
});
|
|
3690
3699
|
});
|
|
3691
3700
|
} else
|
|
@@ -3708,19 +3717,19 @@ class pr {
|
|
|
3708
3717
|
for (const A in o)
|
|
3709
3718
|
a.push(this.parser.getDependency("accessor", o[A]).then((u) => (l[A] = u, l[A])));
|
|
3710
3719
|
return a.length < 1 ? null : (a.push(this.parser.createNodeMesh(e)), Promise.all(a).then((A) => {
|
|
3711
|
-
const u = A.pop(), c = u.isGroup ? u.children : [u],
|
|
3712
|
-
for (const
|
|
3713
|
-
const
|
|
3714
|
-
for (let y = 0; y <
|
|
3715
|
-
l.TRANSLATION &&
|
|
3720
|
+
const u = A.pop(), c = u.isGroup ? u.children : [u], h = A[0].count, d = [];
|
|
3721
|
+
for (const g of c) {
|
|
3722
|
+
const f = new fe(), m = new T(), p = new J(), I = new T(1, 1, 1), x = new Qn(g.geometry, g.material, h);
|
|
3723
|
+
for (let y = 0; y < h; y++)
|
|
3724
|
+
l.TRANSLATION && m.fromBufferAttribute(l.TRANSLATION, y), l.ROTATION && p.fromBufferAttribute(l.ROTATION, y), l.SCALE && I.fromBufferAttribute(l.SCALE, y), x.setMatrixAt(y, f.compose(m, p, I));
|
|
3716
3725
|
for (const y in l)
|
|
3717
3726
|
if (y === "_COLOR_0") {
|
|
3718
|
-
const
|
|
3719
|
-
|
|
3720
|
-
} else y !== "TRANSLATION" && y !== "ROTATION" && y !== "SCALE" &&
|
|
3721
|
-
|
|
3727
|
+
const v = l[y];
|
|
3728
|
+
x.instanceColor = new Yn(v.array, v.itemSize, v.normalized);
|
|
3729
|
+
} else y !== "TRANSLATION" && y !== "ROTATION" && y !== "SCALE" && g.geometry.setAttribute(y, l[y]);
|
|
3730
|
+
Ze.prototype.copy.call(x, g), this.parser.assignFinalMaterial(x), d.push(x);
|
|
3722
3731
|
}
|
|
3723
|
-
return u.isGroup ? (u.clear(), u.add(...
|
|
3732
|
+
return u.isGroup ? (u.clear(), u.add(...d), u) : d[0];
|
|
3724
3733
|
}));
|
|
3725
3734
|
}
|
|
3726
3735
|
}
|
|
@@ -3765,25 +3774,25 @@ class gr {
|
|
|
3765
3774
|
decodePrimitive(e, t) {
|
|
3766
3775
|
const n = this.json, s = this.dracoLoader, i = e.extensions[this.name].bufferView, o = e.extensions[this.name].attributes, a = {}, l = {}, A = {};
|
|
3767
3776
|
for (const u in o) {
|
|
3768
|
-
const c =
|
|
3777
|
+
const c = os[u] || u.toLowerCase();
|
|
3769
3778
|
a[c] = o[u];
|
|
3770
3779
|
}
|
|
3771
3780
|
for (const u in e.attributes) {
|
|
3772
|
-
const c =
|
|
3781
|
+
const c = os[u] || u.toLowerCase();
|
|
3773
3782
|
if (o[u] !== void 0) {
|
|
3774
|
-
const
|
|
3775
|
-
A[c] =
|
|
3783
|
+
const h = n.accessors[e.attributes[u]], d = Be[h.componentType];
|
|
3784
|
+
A[c] = d.name, l[c] = h.normalized === !0;
|
|
3776
3785
|
}
|
|
3777
3786
|
}
|
|
3778
3787
|
return t.getDependency("bufferView", i).then(function(u) {
|
|
3779
|
-
return new Promise(function(c,
|
|
3780
|
-
s.decodeDracoFile(u, function(
|
|
3781
|
-
for (const
|
|
3782
|
-
const
|
|
3783
|
-
|
|
3788
|
+
return new Promise(function(c, h) {
|
|
3789
|
+
s.decodeDracoFile(u, function(d) {
|
|
3790
|
+
for (const g in d.attributes) {
|
|
3791
|
+
const f = d.attributes[g], m = l[g];
|
|
3792
|
+
m !== void 0 && (f.normalized = m);
|
|
3784
3793
|
}
|
|
3785
|
-
c(
|
|
3786
|
-
}, a, A, Ae,
|
|
3794
|
+
c(d);
|
|
3795
|
+
}, a, A, Ae, h);
|
|
3787
3796
|
});
|
|
3788
3797
|
});
|
|
3789
3798
|
}
|
|
@@ -3812,10 +3821,10 @@ class dn extends fi {
|
|
|
3812
3821
|
return t;
|
|
3813
3822
|
}
|
|
3814
3823
|
interpolate_(e, t, n, s) {
|
|
3815
|
-
const i = this.resultBuffer, o = this.sampleValues, a = this.valueSize, l = a * 2, A = a * 3, u = s - t, c = (n - t) / u,
|
|
3824
|
+
const i = this.resultBuffer, o = this.sampleValues, a = this.valueSize, l = a * 2, A = a * 3, u = s - t, c = (n - t) / u, h = c * c, d = h * c, g = e * A, f = g - A, m = -2 * d + 3 * h, p = d - h, I = 1 - m, x = p - h + c;
|
|
3816
3825
|
for (let y = 0; y !== a; y++) {
|
|
3817
|
-
const
|
|
3818
|
-
i[y] =
|
|
3826
|
+
const v = o[f + y + a], M = o[f + y + l] * u, L = o[g + y + a], Q = o[g + y] * u;
|
|
3827
|
+
i[y] = I * v + x * M + m * L + p * Q;
|
|
3819
3828
|
}
|
|
3820
3829
|
return i;
|
|
3821
3830
|
}
|
|
@@ -3835,7 +3844,7 @@ const se = {
|
|
|
3835
3844
|
TRIANGLES: 4,
|
|
3836
3845
|
TRIANGLE_STRIP: 5,
|
|
3837
3846
|
TRIANGLE_FAN: 6
|
|
3838
|
-
},
|
|
3847
|
+
}, Be = {
|
|
3839
3848
|
5120: Int8Array,
|
|
3840
3849
|
5121: Uint8Array,
|
|
3841
3850
|
5122: Int16Array,
|
|
@@ -3844,7 +3853,7 @@ const se = {
|
|
|
3844
3853
|
5126: Float32Array
|
|
3845
3854
|
}, Gs = {
|
|
3846
3855
|
9728: _s,
|
|
3847
|
-
9729:
|
|
3856
|
+
9729: es,
|
|
3848
3857
|
9984: si,
|
|
3849
3858
|
9985: ti,
|
|
3850
3859
|
9986: ei,
|
|
@@ -3852,7 +3861,7 @@ const se = {
|
|
|
3852
3861
|
}, Ks = {
|
|
3853
3862
|
33071: ii,
|
|
3854
3863
|
33648: ni,
|
|
3855
|
-
10497:
|
|
3864
|
+
10497: ts
|
|
3856
3865
|
}, Zt = {
|
|
3857
3866
|
SCALAR: 1,
|
|
3858
3867
|
VEC2: 2,
|
|
@@ -3861,7 +3870,7 @@ const se = {
|
|
|
3861
3870
|
MAT2: 4,
|
|
3862
3871
|
MAT3: 9,
|
|
3863
3872
|
MAT4: 16
|
|
3864
|
-
},
|
|
3873
|
+
}, os = {
|
|
3865
3874
|
POSITION: "position",
|
|
3866
3875
|
NORMAL: "normal",
|
|
3867
3876
|
TANGENT: "tangent",
|
|
@@ -3883,7 +3892,7 @@ const se = {
|
|
|
3883
3892
|
// keyframe track will be initialized with a default interpolation type, then modified.
|
|
3884
3893
|
LINEAR: en,
|
|
3885
3894
|
STEP: di
|
|
3886
|
-
},
|
|
3895
|
+
}, Xt = {
|
|
3887
3896
|
OPAQUE: "OPAQUE",
|
|
3888
3897
|
MASK: "MASK",
|
|
3889
3898
|
BLEND: "BLEND"
|
|
@@ -3899,7 +3908,7 @@ function vr(r) {
|
|
|
3899
3908
|
side: hi
|
|
3900
3909
|
})), r.DefaultMaterial;
|
|
3901
3910
|
}
|
|
3902
|
-
function
|
|
3911
|
+
function we(r, e, t) {
|
|
3903
3912
|
for (const n in t.extensions)
|
|
3904
3913
|
r[n] === void 0 && (e.userData.gltfExtensions = e.userData.gltfExtensions || {}, e.userData.gltfExtensions[n] = t.extensions[n]);
|
|
3905
3914
|
}
|
|
@@ -3917,16 +3926,16 @@ function Sr(r, e, t) {
|
|
|
3917
3926
|
for (let A = 0, u = e.length; A < u; A++) {
|
|
3918
3927
|
const c = e[A];
|
|
3919
3928
|
if (n) {
|
|
3920
|
-
const
|
|
3921
|
-
o.push(
|
|
3929
|
+
const h = c.POSITION !== void 0 ? t.getDependency("accessor", c.POSITION) : r.attributes.position;
|
|
3930
|
+
o.push(h);
|
|
3922
3931
|
}
|
|
3923
3932
|
if (s) {
|
|
3924
|
-
const
|
|
3925
|
-
a.push(
|
|
3933
|
+
const h = c.NORMAL !== void 0 ? t.getDependency("accessor", c.NORMAL) : r.attributes.normal;
|
|
3934
|
+
a.push(h);
|
|
3926
3935
|
}
|
|
3927
3936
|
if (i) {
|
|
3928
|
-
const
|
|
3929
|
-
l.push(
|
|
3937
|
+
const h = c.COLOR_0 !== void 0 ? t.getDependency("accessor", c.COLOR_0) : r.attributes.color;
|
|
3938
|
+
l.push(h);
|
|
3930
3939
|
}
|
|
3931
3940
|
}
|
|
3932
3941
|
return Promise.all([
|
|
@@ -3934,8 +3943,8 @@ function Sr(r, e, t) {
|
|
|
3934
3943
|
Promise.all(a),
|
|
3935
3944
|
Promise.all(l)
|
|
3936
3945
|
]).then(function(A) {
|
|
3937
|
-
const u = A[0], c = A[1],
|
|
3938
|
-
return n && (r.morphAttributes.position = u), s && (r.morphAttributes.normal = c), i && (r.morphAttributes.color =
|
|
3946
|
+
const u = A[0], c = A[1], h = A[2];
|
|
3947
|
+
return n && (r.morphAttributes.position = u), s && (r.morphAttributes.normal = c), i && (r.morphAttributes.color = h), r.morphTargetsRelative = !0, r;
|
|
3939
3948
|
});
|
|
3940
3949
|
}
|
|
3941
3950
|
function Tr(r, e) {
|
|
@@ -3955,19 +3964,19 @@ function Tr(r, e) {
|
|
|
3955
3964
|
function Mr(r) {
|
|
3956
3965
|
let e;
|
|
3957
3966
|
const t = r.extensions && r.extensions[E.KHR_DRACO_MESH_COMPRESSION];
|
|
3958
|
-
if (t ? e = "draco:" + t.bufferView + ":" + t.indices + ":" +
|
|
3967
|
+
if (t ? e = "draco:" + t.bufferView + ":" + t.indices + ":" + qt(t.attributes) : e = r.indices + ":" + qt(r.attributes) + ":" + r.mode, r.targets !== void 0)
|
|
3959
3968
|
for (let n = 0, s = r.targets.length; n < s; n++)
|
|
3960
|
-
e += ":" +
|
|
3969
|
+
e += ":" + qt(r.targets[n]);
|
|
3961
3970
|
return e;
|
|
3962
3971
|
}
|
|
3963
|
-
function
|
|
3972
|
+
function qt(r) {
|
|
3964
3973
|
let e = "";
|
|
3965
3974
|
const t = Object.keys(r).sort();
|
|
3966
3975
|
for (let n = 0, s = t.length; n < s; n++)
|
|
3967
3976
|
e += t[n] + ":" + r[t[n]] + ";";
|
|
3968
3977
|
return e;
|
|
3969
3978
|
}
|
|
3970
|
-
function
|
|
3979
|
+
function rs(r) {
|
|
3971
3980
|
switch (r) {
|
|
3972
3981
|
case Int8Array:
|
|
3973
3982
|
return 1 / 127;
|
|
@@ -4025,7 +4034,7 @@ class Er {
|
|
|
4025
4034
|
parser: n,
|
|
4026
4035
|
userData: {}
|
|
4027
4036
|
};
|
|
4028
|
-
return
|
|
4037
|
+
return we(i, a, s), ae(a, s), Promise.all(n._invokeAll(function(l) {
|
|
4029
4038
|
return l.afterRoot && l.afterRoot(a);
|
|
4030
4039
|
})).then(function() {
|
|
4031
4040
|
for (const l of a.scenes)
|
|
@@ -4235,29 +4244,29 @@ class Er {
|
|
|
4235
4244
|
loadAccessor(e) {
|
|
4236
4245
|
const t = this, n = this.json, s = this.json.accessors[e];
|
|
4237
4246
|
if (s.bufferView === void 0 && s.sparse === void 0) {
|
|
4238
|
-
const o = Zt[s.type], a =
|
|
4247
|
+
const o = Zt[s.type], a = Be[s.componentType], l = s.normalized === !0, A = new a(s.count * o);
|
|
4239
4248
|
return Promise.resolve(new at(A, o, l));
|
|
4240
4249
|
}
|
|
4241
4250
|
const i = [];
|
|
4242
4251
|
return s.bufferView !== void 0 ? i.push(this.getDependency("bufferView", s.bufferView)) : i.push(null), s.sparse !== void 0 && (i.push(this.getDependency("bufferView", s.sparse.indices.bufferView)), i.push(this.getDependency("bufferView", s.sparse.values.bufferView))), Promise.all(i).then(function(o) {
|
|
4243
|
-
const a = o[0], l = Zt[s.type], A =
|
|
4244
|
-
let
|
|
4245
|
-
if (
|
|
4246
|
-
const
|
|
4247
|
-
let
|
|
4248
|
-
|
|
4252
|
+
const a = o[0], l = Zt[s.type], A = Be[s.componentType], u = A.BYTES_PER_ELEMENT, c = u * l, h = s.byteOffset || 0, d = s.bufferView !== void 0 ? n.bufferViews[s.bufferView].byteStride : void 0, g = s.normalized === !0;
|
|
4253
|
+
let f, m;
|
|
4254
|
+
if (d && d !== c) {
|
|
4255
|
+
const p = Math.floor(h / d), I = "InterleavedBuffer:" + s.bufferView + ":" + s.componentType + ":" + p + ":" + s.count;
|
|
4256
|
+
let x = t.cache.get(I);
|
|
4257
|
+
x || (f = new A(a, p * d, s.count * d / u), x = new Js(f, d / u), t.cache.add(I, x)), m = new Qs(x, l, h % d / u, g);
|
|
4249
4258
|
} else
|
|
4250
|
-
a === null ?
|
|
4259
|
+
a === null ? f = new A(s.count * l) : f = new A(a, h, s.count * l), m = new at(f, l, g);
|
|
4251
4260
|
if (s.sparse !== void 0) {
|
|
4252
|
-
const
|
|
4253
|
-
a !== null && (
|
|
4254
|
-
for (let L = 0, Q =
|
|
4255
|
-
const $ =
|
|
4256
|
-
if (
|
|
4261
|
+
const p = Zt.SCALAR, I = Be[s.sparse.indices.componentType], x = s.sparse.indices.byteOffset || 0, y = s.sparse.values.byteOffset || 0, v = new I(o[1], x, s.sparse.count * p), M = new A(o[2], y, s.sparse.count * l);
|
|
4262
|
+
a !== null && (m = new at(m.array.slice(), m.itemSize, m.normalized)), m.normalized = !1;
|
|
4263
|
+
for (let L = 0, Q = v.length; L < Q; L++) {
|
|
4264
|
+
const $ = v[L];
|
|
4265
|
+
if (m.setX($, M[L * l]), l >= 2 && m.setY($, M[L * l + 1]), l >= 3 && m.setZ($, M[L * l + 2]), l >= 4 && m.setW($, M[L * l + 3]), l >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.");
|
|
4257
4266
|
}
|
|
4258
|
-
|
|
4267
|
+
m.normalized = g;
|
|
4259
4268
|
}
|
|
4260
|
-
return
|
|
4269
|
+
return m;
|
|
4261
4270
|
});
|
|
4262
4271
|
}
|
|
4263
4272
|
/**
|
|
@@ -4282,8 +4291,8 @@ class Er {
|
|
|
4282
4291
|
return this.textureCache[l];
|
|
4283
4292
|
const A = this.loadImageSource(t, n).then(function(u) {
|
|
4284
4293
|
u.flipY = !1, u.name = o.name || a.name || "", u.name === "" && typeof a.uri == "string" && a.uri.startsWith("data:image/") === !1 && (u.name = a.uri);
|
|
4285
|
-
const
|
|
4286
|
-
return u.magFilter = Gs[
|
|
4294
|
+
const h = (i.samplers || {})[o.sampler] || {};
|
|
4295
|
+
return u.magFilter = Gs[h.magFilter] || es, u.minFilter = Gs[h.minFilter] || Ys, u.wrapS = Ks[h.wrapS] || ts, u.wrapT = Ks[h.wrapT] || ts, u.generateMipmaps = !u.isCompressedTexture && u.minFilter !== _s && u.minFilter !== es, s.associations.set(u, { textures: e }), u;
|
|
4287
4296
|
}).catch(function() {
|
|
4288
4297
|
return null;
|
|
4289
4298
|
});
|
|
@@ -4298,18 +4307,18 @@ class Er {
|
|
|
4298
4307
|
if (o.bufferView !== void 0)
|
|
4299
4308
|
l = n.getDependency("bufferView", o.bufferView).then(function(c) {
|
|
4300
4309
|
A = !0;
|
|
4301
|
-
const
|
|
4302
|
-
return l = a.createObjectURL(
|
|
4310
|
+
const h = new Blob([c], { type: o.mimeType });
|
|
4311
|
+
return l = a.createObjectURL(h), l;
|
|
4303
4312
|
});
|
|
4304
4313
|
else if (o.uri === void 0)
|
|
4305
4314
|
throw new Error("THREE.GLTFLoader: Image " + e + " is missing URI and bufferView");
|
|
4306
4315
|
const u = Promise.resolve(l).then(function(c) {
|
|
4307
|
-
return new Promise(function(
|
|
4308
|
-
let
|
|
4309
|
-
t.isImageBitmapLoader === !0 && (
|
|
4310
|
-
const
|
|
4311
|
-
|
|
4312
|
-
}), t.load(rt.resolveURL(c, i.path),
|
|
4316
|
+
return new Promise(function(h, d) {
|
|
4317
|
+
let g = h;
|
|
4318
|
+
t.isImageBitmapLoader === !0 && (g = function(f) {
|
|
4319
|
+
const m = new gs(f);
|
|
4320
|
+
m.needsUpdate = !0, h(m);
|
|
4321
|
+
}), t.load(rt.resolveURL(c, i.path), g, void 0, d);
|
|
4313
4322
|
});
|
|
4314
4323
|
}).then(function(c) {
|
|
4315
4324
|
return A === !0 && a.revokeObjectURL(l), ae(c, o), c.userData.mimeType = o.mimeType || wr(o.uri), c;
|
|
@@ -4392,29 +4401,29 @@ class Er {
|
|
|
4392
4401
|
o = c.getMaterialType(), A.push(c.extendParams(a, i, t));
|
|
4393
4402
|
} else {
|
|
4394
4403
|
const c = i.pbrMetallicRoughness || {};
|
|
4395
|
-
if (a.color = new
|
|
4396
|
-
const
|
|
4397
|
-
a.color.setRGB(
|
|
4404
|
+
if (a.color = new B(1, 1, 1), a.opacity = 1, Array.isArray(c.baseColorFactor)) {
|
|
4405
|
+
const h = c.baseColorFactor;
|
|
4406
|
+
a.color.setRGB(h[0], h[1], h[2], Ae), a.opacity = h[3];
|
|
4398
4407
|
}
|
|
4399
|
-
c.baseColorTexture !== void 0 && A.push(t.assignTexture(a, "map", c.baseColorTexture, he)), a.metalness = c.metallicFactor !== void 0 ? c.metallicFactor : 1, a.roughness = c.roughnessFactor !== void 0 ? c.roughnessFactor : 1, c.metallicRoughnessTexture !== void 0 && (A.push(t.assignTexture(a, "metalnessMap", c.metallicRoughnessTexture)), A.push(t.assignTexture(a, "roughnessMap", c.metallicRoughnessTexture))), o = this._invokeOne(function(
|
|
4400
|
-
return
|
|
4401
|
-
}), A.push(Promise.all(this._invokeAll(function(
|
|
4402
|
-
return
|
|
4408
|
+
c.baseColorTexture !== void 0 && A.push(t.assignTexture(a, "map", c.baseColorTexture, he)), a.metalness = c.metallicFactor !== void 0 ? c.metallicFactor : 1, a.roughness = c.roughnessFactor !== void 0 ? c.roughnessFactor : 1, c.metallicRoughnessTexture !== void 0 && (A.push(t.assignTexture(a, "metalnessMap", c.metallicRoughnessTexture)), A.push(t.assignTexture(a, "roughnessMap", c.metallicRoughnessTexture))), o = this._invokeOne(function(h) {
|
|
4409
|
+
return h.getMaterialType && h.getMaterialType(e);
|
|
4410
|
+
}), A.push(Promise.all(this._invokeAll(function(h) {
|
|
4411
|
+
return h.extendMaterialParams && h.extendMaterialParams(e, a);
|
|
4403
4412
|
})));
|
|
4404
4413
|
}
|
|
4405
4414
|
i.doubleSided === !0 && (a.side = kt);
|
|
4406
|
-
const u = i.alphaMode ||
|
|
4407
|
-
if (u ===
|
|
4415
|
+
const u = i.alphaMode || Xt.OPAQUE;
|
|
4416
|
+
if (u === Xt.BLEND ? (a.transparent = !0, a.depthWrite = !1) : (a.transparent = !1, u === Xt.MASK && (a.alphaTest = i.alphaCutoff !== void 0 ? i.alphaCutoff : 0.5)), i.normalTexture !== void 0 && o !== Ne && (A.push(t.assignTexture(a, "normalMap", i.normalTexture)), a.normalScale = new F(1, 1), i.normalTexture.scale !== void 0)) {
|
|
4408
4417
|
const c = i.normalTexture.scale;
|
|
4409
4418
|
a.normalScale.set(c, c);
|
|
4410
4419
|
}
|
|
4411
4420
|
if (i.occlusionTexture !== void 0 && o !== Ne && (A.push(t.assignTexture(a, "aoMap", i.occlusionTexture)), i.occlusionTexture.strength !== void 0 && (a.aoMapIntensity = i.occlusionTexture.strength)), i.emissiveFactor !== void 0 && o !== Ne) {
|
|
4412
4421
|
const c = i.emissiveFactor;
|
|
4413
|
-
a.emissive = new
|
|
4422
|
+
a.emissive = new B().setRGB(c[0], c[1], c[2], Ae);
|
|
4414
4423
|
}
|
|
4415
4424
|
return i.emissiveTexture !== void 0 && o !== Ne && A.push(t.assignTexture(a, "emissiveMap", i.emissiveTexture, he)), Promise.all(A).then(function() {
|
|
4416
4425
|
const c = new o(a);
|
|
4417
|
-
return i.name && (c.name = i.name), ae(c, i), t.associations.set(c, { materials: e }), i.extensions &&
|
|
4426
|
+
return i.name && (c.name = i.name), ae(c, i), t.associations.set(c, { materials: e }), i.extensions && we(s, c, i), c;
|
|
4418
4427
|
});
|
|
4419
4428
|
}
|
|
4420
4429
|
/**
|
|
@@ -4441,7 +4450,7 @@ class Er {
|
|
|
4441
4450
|
const t = this, n = this.extensions, s = this.primitiveCache;
|
|
4442
4451
|
function i(a) {
|
|
4443
4452
|
return n[E.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(a, t).then(function(l) {
|
|
4444
|
-
return
|
|
4453
|
+
return Bs(l, a, t);
|
|
4445
4454
|
});
|
|
4446
4455
|
}
|
|
4447
4456
|
const o = [];
|
|
@@ -4450,8 +4459,8 @@ class Er {
|
|
|
4450
4459
|
if (c)
|
|
4451
4460
|
o.push(c.promise);
|
|
4452
4461
|
else {
|
|
4453
|
-
let
|
|
4454
|
-
A.extensions && A.extensions[E.KHR_DRACO_MESH_COMPRESSION] ?
|
|
4462
|
+
let h;
|
|
4463
|
+
A.extensions && A.extensions[E.KHR_DRACO_MESH_COMPRESSION] ? h = i(A) : h = Bs(new De(), A, t), s[u] = { primitive: A, promise: h }, o.push(h);
|
|
4455
4464
|
}
|
|
4456
4465
|
}
|
|
4457
4466
|
return Promise.all(o);
|
|
@@ -4471,36 +4480,36 @@ class Er {
|
|
|
4471
4480
|
}
|
|
4472
4481
|
return a.push(t.loadGeometries(o)), Promise.all(a).then(function(l) {
|
|
4473
4482
|
const A = l.slice(0, l.length - 1), u = l[l.length - 1], c = [];
|
|
4474
|
-
for (let
|
|
4475
|
-
const
|
|
4476
|
-
let
|
|
4477
|
-
const
|
|
4478
|
-
if (
|
|
4479
|
-
|
|
4480
|
-
else if (
|
|
4481
|
-
|
|
4482
|
-
else if (
|
|
4483
|
-
|
|
4484
|
-
else if (
|
|
4485
|
-
|
|
4486
|
-
else if (
|
|
4487
|
-
|
|
4483
|
+
for (let d = 0, g = u.length; d < g; d++) {
|
|
4484
|
+
const f = u[d], m = o[d];
|
|
4485
|
+
let p;
|
|
4486
|
+
const I = A[d];
|
|
4487
|
+
if (m.mode === se.TRIANGLES || m.mode === se.TRIANGLE_STRIP || m.mode === se.TRIANGLE_FAN || m.mode === void 0)
|
|
4488
|
+
p = i.isSkinnedMesh === !0 ? new ri(f, I) : new S(f, I), p.isSkinnedMesh === !0 && p.normalizeSkinWeights(), m.mode === se.TRIANGLE_STRIP ? p.geometry = Us(p.geometry, Vs) : m.mode === se.TRIANGLE_FAN && (p.geometry = Us(p.geometry, $t));
|
|
4489
|
+
else if (m.mode === se.LINES)
|
|
4490
|
+
p = new _t(f, I);
|
|
4491
|
+
else if (m.mode === se.LINE_STRIP)
|
|
4492
|
+
p = new de(f, I);
|
|
4493
|
+
else if (m.mode === se.LINE_LOOP)
|
|
4494
|
+
p = new ai(f, I);
|
|
4495
|
+
else if (m.mode === se.POINTS)
|
|
4496
|
+
p = new Tt(f, I);
|
|
4488
4497
|
else
|
|
4489
|
-
throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " +
|
|
4490
|
-
Object.keys(
|
|
4498
|
+
throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + m.mode);
|
|
4499
|
+
Object.keys(p.geometry.morphAttributes).length > 0 && Tr(p, i), p.name = t.createUniqueName(i.name || "mesh_" + e), ae(p, i), m.extensions && we(s, p, m), t.assignFinalMaterial(p), c.push(p);
|
|
4491
4500
|
}
|
|
4492
|
-
for (let
|
|
4493
|
-
t.associations.set(c[
|
|
4501
|
+
for (let d = 0, g = c.length; d < g; d++)
|
|
4502
|
+
t.associations.set(c[d], {
|
|
4494
4503
|
meshes: e,
|
|
4495
|
-
primitives:
|
|
4504
|
+
primitives: d
|
|
4496
4505
|
});
|
|
4497
4506
|
if (c.length === 1)
|
|
4498
|
-
return i.extensions &&
|
|
4499
|
-
const
|
|
4500
|
-
i.extensions &&
|
|
4501
|
-
for (let
|
|
4502
|
-
|
|
4503
|
-
return
|
|
4507
|
+
return i.extensions && we(s, c[0], i), c[0];
|
|
4508
|
+
const h = new St();
|
|
4509
|
+
i.extensions && we(s, h, i), t.associations.set(h, { meshes: e });
|
|
4510
|
+
for (let d = 0, g = c.length; d < g; d++)
|
|
4511
|
+
h.add(c[d]);
|
|
4512
|
+
return h;
|
|
4504
4513
|
});
|
|
4505
4514
|
}
|
|
4506
4515
|
/**
|
|
@@ -4536,8 +4545,8 @@ class Er {
|
|
|
4536
4545
|
const c = o[A];
|
|
4537
4546
|
if (c) {
|
|
4538
4547
|
a.push(c);
|
|
4539
|
-
const
|
|
4540
|
-
i !== null &&
|
|
4548
|
+
const h = new fe();
|
|
4549
|
+
i !== null && h.fromArray(i.array, A * 16), l.push(h);
|
|
4541
4550
|
} else
|
|
4542
4551
|
console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', t.joints[A]);
|
|
4543
4552
|
}
|
|
@@ -4553,9 +4562,9 @@ class Er {
|
|
|
4553
4562
|
*/
|
|
4554
4563
|
loadAnimation(e) {
|
|
4555
4564
|
const t = this.json, n = this, s = t.animations[e], i = s.name ? s.name : "animation_" + e, o = [], a = [], l = [], A = [], u = [];
|
|
4556
|
-
for (let c = 0,
|
|
4557
|
-
const
|
|
4558
|
-
|
|
4565
|
+
for (let c = 0, h = s.channels.length; c < h; c++) {
|
|
4566
|
+
const d = s.channels[c], g = s.samplers[d.sampler], f = d.target, m = f.node, p = s.parameters !== void 0 ? s.parameters[g.input] : g.input, I = s.parameters !== void 0 ? s.parameters[g.output] : g.output;
|
|
4567
|
+
f.node !== void 0 && (o.push(this.getDependency("node", m)), a.push(this.getDependency("accessor", p)), l.push(this.getDependency("accessor", I)), A.push(g), u.push(f));
|
|
4559
4568
|
}
|
|
4560
4569
|
return Promise.all([
|
|
4561
4570
|
Promise.all(o),
|
|
@@ -4564,18 +4573,18 @@ class Er {
|
|
|
4564
4573
|
Promise.all(A),
|
|
4565
4574
|
Promise.all(u)
|
|
4566
4575
|
]).then(function(c) {
|
|
4567
|
-
const
|
|
4568
|
-
for (let
|
|
4569
|
-
const
|
|
4570
|
-
if (
|
|
4571
|
-
|
|
4572
|
-
const Y = n._createAnimationTracks(
|
|
4576
|
+
const h = c[0], d = c[1], g = c[2], f = c[3], m = c[4], p = [];
|
|
4577
|
+
for (let x = 0, y = h.length; x < y; x++) {
|
|
4578
|
+
const v = h[x], M = d[x], L = g[x], Q = f[x], $ = m[x];
|
|
4579
|
+
if (v === void 0) continue;
|
|
4580
|
+
v.updateMatrix && v.updateMatrix();
|
|
4581
|
+
const Y = n._createAnimationTracks(v, M, L, Q, $);
|
|
4573
4582
|
if (Y)
|
|
4574
|
-
for (let
|
|
4575
|
-
|
|
4583
|
+
for (let Te = 0; Te < Y.length; Te++)
|
|
4584
|
+
p.push(Y[Te]);
|
|
4576
4585
|
}
|
|
4577
|
-
const
|
|
4578
|
-
return ae(
|
|
4586
|
+
const I = new ci(i, void 0, p);
|
|
4587
|
+
return ae(I, s), I;
|
|
4579
4588
|
});
|
|
4580
4589
|
}
|
|
4581
4590
|
createNodeMesh(e) {
|
|
@@ -4606,15 +4615,15 @@ class Er {
|
|
|
4606
4615
|
Promise.all(o),
|
|
4607
4616
|
l
|
|
4608
4617
|
]).then(function(A) {
|
|
4609
|
-
const u = A[0], c = A[1],
|
|
4610
|
-
|
|
4611
|
-
|
|
4618
|
+
const u = A[0], c = A[1], h = A[2];
|
|
4619
|
+
h !== null && u.traverse(function(d) {
|
|
4620
|
+
d.isSkinnedMesh && d.bind(h, Rr);
|
|
4612
4621
|
});
|
|
4613
|
-
for (let
|
|
4614
|
-
u.add(c[
|
|
4622
|
+
for (let d = 0, g = c.length; d < g; d++)
|
|
4623
|
+
u.add(c[d]);
|
|
4615
4624
|
if (u.userData.pivot !== void 0 && c.length > 0) {
|
|
4616
|
-
const
|
|
4617
|
-
u.pivot = new T().fromArray(
|
|
4625
|
+
const d = u.userData.pivot, g = c[0];
|
|
4626
|
+
u.pivot = new T().fromArray(d), u.position.x -= d[0], u.position.y -= d[1], u.position.z -= d[2], g.position.set(0, 0, 0), delete u.userData.pivot;
|
|
4618
4627
|
}
|
|
4619
4628
|
return u;
|
|
4620
4629
|
});
|
|
@@ -4636,10 +4645,10 @@ class Er {
|
|
|
4636
4645
|
a.push(A);
|
|
4637
4646
|
}), this.nodeCache[e] = Promise.all(a).then(function(A) {
|
|
4638
4647
|
let u;
|
|
4639
|
-
if (i.isBone === !0 ? u = new ui() : A.length > 1 ? u = new St() : A.length === 1 ? u = A[0] : u = new
|
|
4640
|
-
for (let c = 0,
|
|
4648
|
+
if (i.isBone === !0 ? u = new ui() : A.length > 1 ? u = new St() : A.length === 1 ? u = A[0] : u = new Ze(), u !== A[0])
|
|
4649
|
+
for (let c = 0, h = A.length; c < h; c++)
|
|
4641
4650
|
u.add(A[c]);
|
|
4642
|
-
if (i.name && (u.userData.name = i.name, u.name = o), ae(u, i), i.extensions &&
|
|
4651
|
+
if (i.name && (u.userData.name = i.name, u.name = o), ae(u, i), i.extensions && we(n, u, i), i.matrix !== void 0) {
|
|
4643
4652
|
const c = new fe();
|
|
4644
4653
|
c.fromArray(i.matrix), u.applyMatrix4(c);
|
|
4645
4654
|
} else
|
|
@@ -4662,22 +4671,22 @@ class Er {
|
|
|
4662
4671
|
*/
|
|
4663
4672
|
loadScene(e) {
|
|
4664
4673
|
const t = this.extensions, n = this.json.scenes[e], s = this, i = new St();
|
|
4665
|
-
n.name && (i.name = s.createUniqueName(n.name)), ae(i, n), n.extensions &&
|
|
4674
|
+
n.name && (i.name = s.createUniqueName(n.name)), ae(i, n), n.extensions && we(t, i, n);
|
|
4666
4675
|
const o = n.nodes || [], a = [];
|
|
4667
4676
|
for (let l = 0, A = o.length; l < A; l++)
|
|
4668
4677
|
a.push(s.getDependency("node", o[l]));
|
|
4669
4678
|
return Promise.all(a).then(function(l) {
|
|
4670
4679
|
for (let u = 0, c = l.length; u < c; u++) {
|
|
4671
|
-
const
|
|
4672
|
-
|
|
4680
|
+
const h = l[u];
|
|
4681
|
+
h.parent !== null ? i.add(Qo(h)) : i.add(h);
|
|
4673
4682
|
}
|
|
4674
4683
|
const A = (u) => {
|
|
4675
4684
|
const c = /* @__PURE__ */ new Map();
|
|
4676
|
-
for (const [
|
|
4677
|
-
(
|
|
4678
|
-
return u.traverse((
|
|
4679
|
-
const
|
|
4680
|
-
|
|
4685
|
+
for (const [h, d] of s.associations)
|
|
4686
|
+
(h instanceof ot || h instanceof gs) && c.set(h, d);
|
|
4687
|
+
return u.traverse((h) => {
|
|
4688
|
+
const d = s.associations.get(h);
|
|
4689
|
+
d != null && c.set(h, d);
|
|
4681
4690
|
}), c;
|
|
4682
4691
|
};
|
|
4683
4692
|
return s.associations = A(i), i;
|
|
@@ -4685,8 +4694,8 @@ class Er {
|
|
|
4685
4694
|
}
|
|
4686
4695
|
_createAnimationTracks(e, t, n, s, i) {
|
|
4687
4696
|
const o = [], a = e.name ? e.name : e.uuid, l = [];
|
|
4688
|
-
function A(
|
|
4689
|
-
|
|
4697
|
+
function A(d) {
|
|
4698
|
+
d.morphTargetInfluences && l.push(d.name ? d.name : d.uuid);
|
|
4690
4699
|
}
|
|
4691
4700
|
me[i.path] === me.weights ? (A(e), e.isGroup && e.children.forEach(A)) : l.push(a);
|
|
4692
4701
|
let u;
|
|
@@ -4714,22 +4723,22 @@ class Er {
|
|
|
4714
4723
|
}
|
|
4715
4724
|
break;
|
|
4716
4725
|
}
|
|
4717
|
-
const c = s.interpolation !== void 0 ? xr[s.interpolation] : en,
|
|
4718
|
-
for (let
|
|
4719
|
-
const
|
|
4720
|
-
l[
|
|
4726
|
+
const c = s.interpolation !== void 0 ? xr[s.interpolation] : en, h = this._getArrayFromAccessor(n);
|
|
4727
|
+
for (let d = 0, g = l.length; d < g; d++) {
|
|
4728
|
+
const f = new u(
|
|
4729
|
+
l[d] + "." + me[i.path],
|
|
4721
4730
|
t.array,
|
|
4722
|
-
|
|
4731
|
+
h,
|
|
4723
4732
|
c
|
|
4724
4733
|
);
|
|
4725
|
-
s.interpolation === "CUBICSPLINE" && this._createCubicSplineTrackInterpolant(
|
|
4734
|
+
s.interpolation === "CUBICSPLINE" && this._createCubicSplineTrackInterpolant(f), o.push(f);
|
|
4726
4735
|
}
|
|
4727
4736
|
return o;
|
|
4728
4737
|
}
|
|
4729
4738
|
_getArrayFromAccessor(e) {
|
|
4730
4739
|
let t = e.array;
|
|
4731
4740
|
if (e.normalized) {
|
|
4732
|
-
const n =
|
|
4741
|
+
const n = rs(t.constructor), s = new Float32Array(t.length);
|
|
4733
4742
|
for (let i = 0, o = t.length; i < o; i++)
|
|
4734
4743
|
s[i] = t[i] * n;
|
|
4735
4744
|
t = s;
|
|
@@ -4752,7 +4761,7 @@ function kr(r, e, t) {
|
|
|
4752
4761
|
new T(l[0], l[1], l[2]),
|
|
4753
4762
|
new T(A[0], A[1], A[2])
|
|
4754
4763
|
), a.normalized) {
|
|
4755
|
-
const u =
|
|
4764
|
+
const u = rs(Be[a.componentType]);
|
|
4756
4765
|
s.min.multiplyScalar(u), s.max.multiplyScalar(u);
|
|
4757
4766
|
}
|
|
4758
4767
|
} else {
|
|
@@ -4767,11 +4776,11 @@ function kr(r, e, t) {
|
|
|
4767
4776
|
for (let A = 0, u = i.length; A < u; A++) {
|
|
4768
4777
|
const c = i[A];
|
|
4769
4778
|
if (c.POSITION !== void 0) {
|
|
4770
|
-
const
|
|
4771
|
-
if (
|
|
4772
|
-
if (l.setX(Math.max(Math.abs(
|
|
4773
|
-
const
|
|
4774
|
-
l.multiplyScalar(
|
|
4779
|
+
const h = t.json.accessors[c.POSITION], d = h.min, g = h.max;
|
|
4780
|
+
if (d !== void 0 && g !== void 0) {
|
|
4781
|
+
if (l.setX(Math.max(Math.abs(d[0]), Math.abs(g[0]))), l.setY(Math.max(Math.abs(d[1]), Math.abs(g[1]))), l.setZ(Math.max(Math.abs(d[2]), Math.abs(g[2]))), h.normalized) {
|
|
4782
|
+
const f = rs(Be[h.componentType]);
|
|
4783
|
+
l.multiplyScalar(f);
|
|
4775
4784
|
}
|
|
4776
4785
|
a.max(l);
|
|
4777
4786
|
} else
|
|
@@ -4784,7 +4793,7 @@ function kr(r, e, t) {
|
|
|
4784
4793
|
const o = new mi();
|
|
4785
4794
|
s.getCenter(o.center), o.radius = s.min.distanceTo(s.max) / 2, r.boundingSphere = o;
|
|
4786
4795
|
}
|
|
4787
|
-
function
|
|
4796
|
+
function Bs(r, e, t) {
|
|
4788
4797
|
const n = e.attributes, s = [];
|
|
4789
4798
|
function i(o, a) {
|
|
4790
4799
|
return t.getDependency("accessor", o).then(function(l) {
|
|
@@ -4792,7 +4801,7 @@ function Zs(r, e, t) {
|
|
|
4792
4801
|
});
|
|
4793
4802
|
}
|
|
4794
4803
|
for (const o in n) {
|
|
4795
|
-
const a =
|
|
4804
|
+
const a = os[o] || o.toLowerCase();
|
|
4796
4805
|
a in r.attributes || s.push(i(n[o], a));
|
|
4797
4806
|
}
|
|
4798
4807
|
if (e.indices !== void 0 && !r.index) {
|
|
@@ -4805,8 +4814,8 @@ function Zs(r, e, t) {
|
|
|
4805
4814
|
return e.targets !== void 0 ? Sr(r, e.targets, t) : r;
|
|
4806
4815
|
});
|
|
4807
4816
|
}
|
|
4808
|
-
const
|
|
4809
|
-
class Pr extends
|
|
4817
|
+
const Vt = /* @__PURE__ */ new WeakMap();
|
|
4818
|
+
class Pr extends ls {
|
|
4810
4819
|
/**
|
|
4811
4820
|
* Constructs a new Draco loader.
|
|
4812
4821
|
*
|
|
@@ -4892,8 +4901,8 @@ class Pr extends as {
|
|
|
4892
4901
|
}
|
|
4893
4902
|
decodeGeometry(e, t) {
|
|
4894
4903
|
const n = JSON.stringify(t);
|
|
4895
|
-
if (
|
|
4896
|
-
const l =
|
|
4904
|
+
if (Vt.has(e)) {
|
|
4905
|
+
const l = Vt.get(e);
|
|
4897
4906
|
if (l.key === n)
|
|
4898
4907
|
return l.promise;
|
|
4899
4908
|
if (e.byteLength === 0)
|
|
@@ -4907,7 +4916,7 @@ class Pr extends as {
|
|
|
4907
4916
|
}))).then((l) => this._createGeometry(l.geometry));
|
|
4908
4917
|
return a.catch(() => !0).then(() => {
|
|
4909
4918
|
s && i && this._releaseTask(s, i);
|
|
4910
|
-
}),
|
|
4919
|
+
}), Vt.set(e, {
|
|
4911
4920
|
key: n,
|
|
4912
4921
|
promise: a
|
|
4913
4922
|
}), a;
|
|
@@ -4930,7 +4939,7 @@ class Pr extends as {
|
|
|
4930
4939
|
}
|
|
4931
4940
|
_assignVertexColorSpace(e, t) {
|
|
4932
4941
|
if (t !== he) return;
|
|
4933
|
-
const n = new
|
|
4942
|
+
const n = new B();
|
|
4934
4943
|
for (let s = 0, i = e.count; s < i; s++)
|
|
4935
4944
|
n.fromBufferAttribute(e, s), Pt.colorSpaceToWorking(n, he), e.setXYZ(s, n.r, n.g, n.b);
|
|
4936
4945
|
}
|
|
@@ -5012,14 +5021,14 @@ function Lr() {
|
|
|
5012
5021
|
case "decode":
|
|
5013
5022
|
const l = a.buffer, A = a.taskConfig;
|
|
5014
5023
|
e.then((u) => {
|
|
5015
|
-
const c = u.draco,
|
|
5024
|
+
const c = u.draco, h = new c.Decoder();
|
|
5016
5025
|
try {
|
|
5017
|
-
const
|
|
5018
|
-
|
|
5019
|
-
} catch (
|
|
5020
|
-
console.error(
|
|
5026
|
+
const d = t(c, h, new Int8Array(l), A), g = d.attributes.map((f) => f.array.buffer);
|
|
5027
|
+
d.index && g.push(d.index.array.buffer), self.postMessage({ type: "decode", id: a.id, geometry: d }, g);
|
|
5028
|
+
} catch (d) {
|
|
5029
|
+
console.error(d), self.postMessage({ type: "error", id: a.id, error: d.message });
|
|
5021
5030
|
} finally {
|
|
5022
|
-
c.destroy(
|
|
5031
|
+
c.destroy(h);
|
|
5023
5032
|
}
|
|
5024
5033
|
});
|
|
5025
5034
|
break;
|
|
@@ -5027,59 +5036,59 @@ function Lr() {
|
|
|
5027
5036
|
};
|
|
5028
5037
|
function t(o, a, l, A) {
|
|
5029
5038
|
const u = A.attributeIDs, c = A.attributeTypes;
|
|
5030
|
-
let
|
|
5031
|
-
const
|
|
5032
|
-
if (
|
|
5033
|
-
|
|
5034
|
-
else if (
|
|
5035
|
-
|
|
5039
|
+
let h, d;
|
|
5040
|
+
const g = a.GetEncodedGeometryType(l);
|
|
5041
|
+
if (g === o.TRIANGULAR_MESH)
|
|
5042
|
+
h = new o.Mesh(), d = a.DecodeArrayToMesh(l, l.byteLength, h);
|
|
5043
|
+
else if (g === o.POINT_CLOUD)
|
|
5044
|
+
h = new o.PointCloud(), d = a.DecodeArrayToPointCloud(l, l.byteLength, h);
|
|
5036
5045
|
else
|
|
5037
5046
|
throw new Error("THREE.DRACOLoader: Unexpected geometry type.");
|
|
5038
|
-
if (!
|
|
5039
|
-
throw new Error("THREE.DRACOLoader: Decoding failed: " +
|
|
5040
|
-
const
|
|
5041
|
-
for (const
|
|
5042
|
-
const
|
|
5043
|
-
let
|
|
5047
|
+
if (!d.ok() || h.ptr === 0)
|
|
5048
|
+
throw new Error("THREE.DRACOLoader: Decoding failed: " + d.error_msg());
|
|
5049
|
+
const f = { index: null, attributes: [] };
|
|
5050
|
+
for (const m in u) {
|
|
5051
|
+
const p = self[c[m]];
|
|
5052
|
+
let I, x;
|
|
5044
5053
|
if (A.useUniqueIDs)
|
|
5045
|
-
|
|
5054
|
+
x = u[m], I = a.GetAttributeByUniqueId(h, x);
|
|
5046
5055
|
else {
|
|
5047
|
-
if (
|
|
5048
|
-
|
|
5056
|
+
if (x = a.GetAttributeId(h, o[u[m]]), x === -1) continue;
|
|
5057
|
+
I = a.GetAttribute(h, x);
|
|
5049
5058
|
}
|
|
5050
|
-
const y = s(o, a,
|
|
5051
|
-
|
|
5059
|
+
const y = s(o, a, h, m, p, I);
|
|
5060
|
+
m === "color" && (y.vertexColorSpace = A.vertexColorSpace), f.attributes.push(y);
|
|
5052
5061
|
}
|
|
5053
|
-
return
|
|
5062
|
+
return g === o.TRIANGULAR_MESH && (f.index = n(o, a, h)), o.destroy(h), f;
|
|
5054
5063
|
}
|
|
5055
5064
|
function n(o, a, l) {
|
|
5056
|
-
const u = l.num_faces() * 3, c = u * 4,
|
|
5057
|
-
a.GetTrianglesUInt32Array(l, c,
|
|
5058
|
-
const
|
|
5059
|
-
return o._free(
|
|
5065
|
+
const u = l.num_faces() * 3, c = u * 4, h = o._malloc(c);
|
|
5066
|
+
a.GetTrianglesUInt32Array(l, c, h);
|
|
5067
|
+
const d = new Uint32Array(o.HEAPF32.buffer, h, u).slice();
|
|
5068
|
+
return o._free(h), { array: d, itemSize: 1 };
|
|
5060
5069
|
}
|
|
5061
5070
|
function s(o, a, l, A, u, c) {
|
|
5062
|
-
const
|
|
5063
|
-
a.GetAttributeDataArrayForAllPoints(l, c,
|
|
5064
|
-
const
|
|
5071
|
+
const h = l.num_points(), d = c.num_components(), g = i(o, u), f = d * u.BYTES_PER_ELEMENT, m = Math.ceil(f / 4) * 4, p = m / u.BYTES_PER_ELEMENT, I = h * f, x = h * m, y = o._malloc(I);
|
|
5072
|
+
a.GetAttributeDataArrayForAllPoints(l, c, g, I, y);
|
|
5073
|
+
const v = new u(o.HEAPF32.buffer, y, I / u.BYTES_PER_ELEMENT);
|
|
5065
5074
|
let M;
|
|
5066
|
-
if (
|
|
5067
|
-
M =
|
|
5075
|
+
if (f === m)
|
|
5076
|
+
M = v.slice();
|
|
5068
5077
|
else {
|
|
5069
|
-
M = new u(
|
|
5078
|
+
M = new u(x / u.BYTES_PER_ELEMENT);
|
|
5070
5079
|
let L = 0;
|
|
5071
|
-
for (let Q = 0, $ =
|
|
5072
|
-
for (let Y = 0; Y <
|
|
5073
|
-
M[L + Y] =
|
|
5074
|
-
L +=
|
|
5080
|
+
for (let Q = 0, $ = v.length; Q < $; Q++) {
|
|
5081
|
+
for (let Y = 0; Y < d; Y++)
|
|
5082
|
+
M[L + Y] = v[Q * d + Y];
|
|
5083
|
+
L += p;
|
|
5075
5084
|
}
|
|
5076
5085
|
}
|
|
5077
5086
|
return o._free(y), {
|
|
5078
5087
|
name: A,
|
|
5079
|
-
count:
|
|
5080
|
-
itemSize:
|
|
5088
|
+
count: h,
|
|
5089
|
+
itemSize: d,
|
|
5081
5090
|
array: M,
|
|
5082
|
-
stride:
|
|
5091
|
+
stride: p
|
|
5083
5092
|
};
|
|
5084
5093
|
}
|
|
5085
5094
|
function i(o, a) {
|
|
@@ -5130,26 +5139,26 @@ function jr(r) {
|
|
|
5130
5139
|
repeatY: l = 4,
|
|
5131
5140
|
speedX: A = 5e-4,
|
|
5132
5141
|
speedY: u = 5e-4
|
|
5133
|
-
} = r || {}, c = new w.PlaneGeometry(e, t),
|
|
5134
|
-
|
|
5135
|
-
}),
|
|
5142
|
+
} = r || {}, c = new w.PlaneGeometry(e, t), d = new w.TextureLoader().load(Nr, (m) => {
|
|
5143
|
+
m.wrapS = m.wrapT = w.RepeatWrapping, m.repeat.set(a, l), m.generateMipmaps = !1, m.minFilter = w.LinearFilter, m.magFilter = w.LinearFilter;
|
|
5144
|
+
}), g = new w.MeshStandardMaterial({
|
|
5136
5145
|
color: n,
|
|
5137
5146
|
roughness: s,
|
|
5138
5147
|
metalness: i,
|
|
5139
|
-
normalMap:
|
|
5148
|
+
normalMap: d,
|
|
5140
5149
|
normalScale: new w.Vector2(o, o),
|
|
5141
5150
|
side: w.DoubleSide,
|
|
5142
5151
|
// 双面渲染,避免从侧面或底部看到黑色
|
|
5143
5152
|
transparent: !0,
|
|
5144
5153
|
opacity: 0.6
|
|
5145
|
-
}),
|
|
5146
|
-
|
|
5154
|
+
}), f = new w.Mesh(c, g);
|
|
5155
|
+
f.rotation.x = -Math.PI / 2, f.position.y = 0, f.name = "水面(标准材质)", f.userData.isWater = !0, f.userData.isMovable = !0, f.userData.waterSpeed = { x: A, y: u }, Xe(f);
|
|
5147
5156
|
}
|
|
5148
5157
|
function Fr(r) {
|
|
5149
5158
|
const e = Uo();
|
|
5150
5159
|
if (!e)
|
|
5151
5160
|
return console.warn("请先选中一个模型,再添加数据面板"), null;
|
|
5152
|
-
const t =
|
|
5161
|
+
const t = Wt(e);
|
|
5153
5162
|
t && (t.dispose(), oo(e));
|
|
5154
5163
|
const n = [
|
|
5155
5164
|
{ label: "温度", value: "30", unit: "℃" },
|
|
@@ -5163,7 +5172,7 @@ function Fr(r) {
|
|
|
5163
5172
|
return s.attachTo(e), nn(e, s), Ro(e), s;
|
|
5164
5173
|
}
|
|
5165
5174
|
function Ur(r) {
|
|
5166
|
-
return
|
|
5175
|
+
return Kt(!0), new Promise((e, t) => {
|
|
5167
5176
|
var o;
|
|
5168
5177
|
const n = (o = r.name.split(".").pop()) == null ? void 0 : o.toLowerCase(), s = URL.createObjectURL(r);
|
|
5169
5178
|
let i;
|
|
@@ -5185,15 +5194,15 @@ function Ur(r) {
|
|
|
5185
5194
|
(a) => {
|
|
5186
5195
|
const l = n === "gltf" || n === "glb" ? a.scene : a;
|
|
5187
5196
|
l.traverse((c) => {
|
|
5188
|
-
var
|
|
5189
|
-
c.userData.isMovable = !0, c.name || (c.name = c.type), c.type === "Mesh" && (c.frustumCulled = !0, (
|
|
5197
|
+
var h;
|
|
5198
|
+
c.userData.isMovable = !0, c.name || (c.name = c.type), c.type === "Mesh" && (c.frustumCulled = !0, (h = c.geometry) == null || h.computeVertexNormals(), c.castShadow = !0, c.receiveShadow = !0);
|
|
5190
5199
|
});
|
|
5191
5200
|
const u = new w.Box3().setFromObject(l).getCenter(new w.Vector3());
|
|
5192
|
-
l.position.sub(u), Xe(l, !0),
|
|
5201
|
+
l.position.sub(u), Xe(l, !0), Kt(!1), e(l);
|
|
5193
5202
|
},
|
|
5194
5203
|
void 0,
|
|
5195
5204
|
(a) => {
|
|
5196
|
-
|
|
5205
|
+
Kt(!1), t(a);
|
|
5197
5206
|
}
|
|
5198
5207
|
);
|
|
5199
5208
|
});
|
|
@@ -5220,10 +5229,10 @@ function Hr(r) {
|
|
|
5220
5229
|
const zr = {
|
|
5221
5230
|
key: 1,
|
|
5222
5231
|
class: "toggle-placeholder"
|
|
5223
|
-
}, Gr = { class: "tree-icon" }, Kr = { class: "tree-name" },
|
|
5232
|
+
}, Gr = { class: "tree-icon" }, Kr = { class: "tree-name" }, Br = {
|
|
5224
5233
|
key: 0,
|
|
5225
5234
|
class: "tree-children"
|
|
5226
|
-
},
|
|
5235
|
+
}, Zr = /* @__PURE__ */ ve({
|
|
5227
5236
|
__name: "TreeItem",
|
|
5228
5237
|
props: {
|
|
5229
5238
|
node: {},
|
|
@@ -5232,12 +5241,12 @@ const zr = {
|
|
|
5232
5241
|
},
|
|
5233
5242
|
emits: ["select", "delete"],
|
|
5234
5243
|
setup(r, { emit: e }) {
|
|
5235
|
-
const t = r, n = e, s = W(null), { expandedSet: i, toggleExpand: o } = gn("treeExpand"), a = $e(() => i.value.has(t.node.uuid)), l = $e(() => (t.version, t.node.children.some((
|
|
5236
|
-
(
|
|
5244
|
+
const t = r, n = e, s = W(null), { expandedSet: i, toggleExpand: o } = gn("treeExpand"), a = $e(() => i.value.has(t.node.uuid)), l = $e(() => (t.version, t.node.children.some((f) => f.userData.isMovable === !0))), A = $e(() => (t.version, t.node.children.filter(
|
|
5245
|
+
(f) => f.userData.isMovable === !0
|
|
5237
5246
|
))), u = $e(
|
|
5238
5247
|
() => {
|
|
5239
|
-
var
|
|
5240
|
-
return ((
|
|
5248
|
+
var f;
|
|
5249
|
+
return ((f = t.selectedObject) == null ? void 0 : f.uuid) === t.node.uuid;
|
|
5241
5250
|
}
|
|
5242
5251
|
);
|
|
5243
5252
|
bn(
|
|
@@ -5251,53 +5260,53 @@ const zr = {
|
|
|
5251
5260
|
},
|
|
5252
5261
|
{ flush: "post" }
|
|
5253
5262
|
);
|
|
5254
|
-
const c = (
|
|
5255
|
-
|
|
5256
|
-
},
|
|
5257
|
-
|
|
5258
|
-
},
|
|
5259
|
-
return (
|
|
5260
|
-
const
|
|
5263
|
+
const c = (f) => {
|
|
5264
|
+
f.stopPropagation(), n("select", t.node);
|
|
5265
|
+
}, h = (f) => {
|
|
5266
|
+
f.stopPropagation(), n("delete", t.node);
|
|
5267
|
+
}, d = (f) => f.type === "Mesh" || f.type === "Sprite" ? "🟦" : f.type === "Light" ? "💡" : "📦", g = (f) => f.name || `${f.type} (${f.id})`;
|
|
5268
|
+
return (f, m) => {
|
|
5269
|
+
const p = Cn("TreeItem", !0);
|
|
5261
5270
|
return R(), P("div", {
|
|
5262
5271
|
class: "tree-node",
|
|
5263
5272
|
ref_key: "nodeRef",
|
|
5264
5273
|
ref: s
|
|
5265
5274
|
}, [
|
|
5266
5275
|
C("div", {
|
|
5267
|
-
class:
|
|
5276
|
+
class: oe(["tree-item", { selected: u.value }]),
|
|
5268
5277
|
onClick: c
|
|
5269
5278
|
}, [
|
|
5270
5279
|
l.value ? (R(), P("span", {
|
|
5271
5280
|
key: 0,
|
|
5272
5281
|
class: "toggle-icon",
|
|
5273
|
-
onClick:
|
|
5274
|
-
},
|
|
5275
|
-
C("span", Gr,
|
|
5276
|
-
C("span", Kr,
|
|
5282
|
+
onClick: m[0] || (m[0] = Jt((I) => In(o)(r.node.uuid), ["stop"]))
|
|
5283
|
+
}, ne(a.value ? "▼" : "▶"), 1)) : (R(), P("span", zr)),
|
|
5284
|
+
C("span", Gr, ne(d(r.node)), 1),
|
|
5285
|
+
C("span", Kr, ne(g(r.node)), 1),
|
|
5277
5286
|
C("button", {
|
|
5278
5287
|
class: "tree-delete",
|
|
5279
|
-
onClick:
|
|
5288
|
+
onClick: Jt(h, ["stop"])
|
|
5280
5289
|
}, "×")
|
|
5281
5290
|
], 2),
|
|
5282
|
-
a.value && l.value ? (R(), P("div",
|
|
5283
|
-
(R(!0), P(
|
|
5284
|
-
key:
|
|
5285
|
-
node:
|
|
5291
|
+
a.value && l.value ? (R(), P("div", Br, [
|
|
5292
|
+
(R(!0), P(Pe, null, Dt(A.value, (I) => (R(), nt(p, {
|
|
5293
|
+
key: I.uuid,
|
|
5294
|
+
node: I,
|
|
5286
5295
|
"selected-object": r.selectedObject,
|
|
5287
5296
|
version: r.version,
|
|
5288
|
-
onSelect:
|
|
5289
|
-
onDelete:
|
|
5297
|
+
onSelect: m[1] || (m[1] = (x) => n("select", x)),
|
|
5298
|
+
onDelete: m[2] || (m[2] = (x) => n("delete", x))
|
|
5290
5299
|
}, null, 8, ["node", "selected-object", "version"]))), 128))
|
|
5291
|
-
])) :
|
|
5300
|
+
])) : Z("", !0)
|
|
5292
5301
|
], 512);
|
|
5293
5302
|
};
|
|
5294
5303
|
}
|
|
5295
|
-
}),
|
|
5304
|
+
}), Se = (r, e) => {
|
|
5296
5305
|
const t = r.__vccOpts || r;
|
|
5297
5306
|
for (const [n, s] of e)
|
|
5298
5307
|
t[n] = s;
|
|
5299
5308
|
return t;
|
|
5300
|
-
}, Xr = /* @__PURE__ */
|
|
5309
|
+
}, Xr = /* @__PURE__ */ Se(Zr, [["__scopeId", "data-v-5ad9c842"]]), qr = { class: "property-group" }, Vr = { class: "row" }, Jr = { class: "property-group" }, Qr = { class: "row" }, Yr = { class: "property-group" }, _r = { class: "row" }, $r = {
|
|
5301
5310
|
key: 0,
|
|
5302
5311
|
class: "property-group light-group"
|
|
5303
5312
|
}, ea = { class: "slider-row" }, ta = {
|
|
@@ -5306,7 +5315,7 @@ const zr = {
|
|
|
5306
5315
|
}, sa = { class: "slider-row" }, na = { class: "slider-value" }, ia = { class: "slider-row" }, oa = { class: "slider-value" }, ra = { class: "slider-row" }, aa = { class: "slider-value" }, la = {
|
|
5307
5316
|
key: 0,
|
|
5308
5317
|
class: "material-hint"
|
|
5309
|
-
}, Aa = /* @__PURE__ */
|
|
5318
|
+
}, Aa = /* @__PURE__ */ ve({
|
|
5310
5319
|
__name: "TransformTab",
|
|
5311
5320
|
props: {
|
|
5312
5321
|
transform: {},
|
|
@@ -5314,72 +5323,72 @@ const zr = {
|
|
|
5314
5323
|
},
|
|
5315
5324
|
emits: ["propertyChange"],
|
|
5316
5325
|
setup(r, { emit: e }) {
|
|
5317
|
-
const t = r, n = e, s = () => n("propertyChange"), i =
|
|
5326
|
+
const t = r, n = e, s = () => n("propertyChange"), i = Qt({
|
|
5318
5327
|
metalness: 0,
|
|
5319
5328
|
roughness: 0.5,
|
|
5320
5329
|
opacity: 1
|
|
5321
|
-
}), o = W(!1), a =
|
|
5330
|
+
}), o = W(!1), a = Qt({
|
|
5322
5331
|
intensity: 1
|
|
5323
5332
|
});
|
|
5324
5333
|
function l() {
|
|
5325
5334
|
t.selectedObject && t.selectedObject.type === "DirectionalLight" && (t.selectedObject.intensity = a.intensity);
|
|
5326
5335
|
}
|
|
5327
|
-
function A(
|
|
5328
|
-
let
|
|
5329
|
-
return
|
|
5330
|
-
if (
|
|
5331
|
-
const
|
|
5332
|
-
for (const
|
|
5333
|
-
if (
|
|
5334
|
-
const
|
|
5335
|
-
|
|
5336
|
-
metalness:
|
|
5337
|
-
roughness:
|
|
5338
|
-
opacity:
|
|
5336
|
+
function A(h) {
|
|
5337
|
+
let d = null;
|
|
5338
|
+
return h.traverse((g) => {
|
|
5339
|
+
if (g.type === "Mesh" && !d) {
|
|
5340
|
+
const f = g, m = Array.isArray(f.material) ? f.material : [f.material];
|
|
5341
|
+
for (const p of m)
|
|
5342
|
+
if (p && (p.type === "MeshStandardMaterial" || p.type === "MeshPhongMaterial")) {
|
|
5343
|
+
const I = p;
|
|
5344
|
+
d = {
|
|
5345
|
+
metalness: I.metalness ?? 0,
|
|
5346
|
+
roughness: I.roughness ?? 0.5,
|
|
5347
|
+
opacity: p.opacity ?? 1
|
|
5339
5348
|
};
|
|
5340
5349
|
break;
|
|
5341
5350
|
}
|
|
5342
5351
|
}
|
|
5343
|
-
}),
|
|
5352
|
+
}), d;
|
|
5344
5353
|
}
|
|
5345
|
-
function u(
|
|
5346
|
-
let
|
|
5347
|
-
return
|
|
5348
|
-
if (
|
|
5349
|
-
const
|
|
5350
|
-
for (const
|
|
5351
|
-
|
|
5354
|
+
function u(h, d) {
|
|
5355
|
+
let g = !1;
|
|
5356
|
+
return h.traverse((f) => {
|
|
5357
|
+
if (f.type === "Mesh") {
|
|
5358
|
+
const m = f, p = Array.isArray(m.material) ? m.material : [m.material];
|
|
5359
|
+
for (const I of p)
|
|
5360
|
+
I && (I.type === "MeshStandardMaterial" || I.type === "MeshPhongMaterial") && (d.metalness !== void 0 && (I.metalness = d.metalness), d.roughness !== void 0 && (I.roughness = d.roughness), d.opacity !== void 0 && (I.opacity = d.opacity, I.transparent = d.opacity < 1), I.needsUpdate = !0, g = !0);
|
|
5352
5361
|
}
|
|
5353
|
-
}),
|
|
5362
|
+
}), g;
|
|
5354
5363
|
}
|
|
5355
5364
|
function c() {
|
|
5356
5365
|
if (t.selectedObject) {
|
|
5357
|
-
const
|
|
5366
|
+
const h = u(t.selectedObject, {
|
|
5358
5367
|
metalness: i.metalness,
|
|
5359
5368
|
roughness: i.roughness,
|
|
5360
5369
|
opacity: i.opacity
|
|
5361
5370
|
});
|
|
5362
|
-
o.value =
|
|
5371
|
+
o.value = h;
|
|
5363
5372
|
}
|
|
5364
5373
|
}
|
|
5365
|
-
return
|
|
5374
|
+
return be(
|
|
5366
5375
|
() => t.selectedObject,
|
|
5367
|
-
(
|
|
5368
|
-
if (
|
|
5369
|
-
const
|
|
5370
|
-
|
|
5376
|
+
(h) => {
|
|
5377
|
+
if (h) {
|
|
5378
|
+
const d = A(h);
|
|
5379
|
+
d ? (i.metalness = d.metalness, i.roughness = d.roughness, i.opacity = d.opacity, o.value = !0) : (i.metalness = 0, i.roughness = 0.5, i.opacity = 1, o.value = !1), h.type === "DirectionalLight" && (a.intensity = h.intensity ?? 1);
|
|
5371
5380
|
} else
|
|
5372
5381
|
i.metalness = 0, i.roughness = 0.5, i.opacity = 1, o.value = !1;
|
|
5373
5382
|
},
|
|
5374
5383
|
{ immediate: !0 }
|
|
5375
|
-
), (
|
|
5384
|
+
), (h, d) => (R(), P("div", null, [
|
|
5376
5385
|
C("div", qr, [
|
|
5377
|
-
|
|
5386
|
+
d[17] || (d[17] = C("label", null, "位置", -1)),
|
|
5378
5387
|
C("div", Vr, [
|
|
5379
|
-
|
|
5388
|
+
d[14] || (d[14] = C("span", null, "X:", -1)),
|
|
5380
5389
|
k(C("input", {
|
|
5381
5390
|
type: "number",
|
|
5382
|
-
"onUpdate:modelValue":
|
|
5391
|
+
"onUpdate:modelValue": d[0] || (d[0] = (g) => r.transform.position.x = g),
|
|
5383
5392
|
step: "0.01",
|
|
5384
5393
|
onInput: s
|
|
5385
5394
|
}, null, 544), [
|
|
@@ -5390,10 +5399,10 @@ const zr = {
|
|
|
5390
5399
|
{ number: !0 }
|
|
5391
5400
|
]
|
|
5392
5401
|
]),
|
|
5393
|
-
|
|
5402
|
+
d[15] || (d[15] = C("span", null, "Y:", -1)),
|
|
5394
5403
|
k(C("input", {
|
|
5395
5404
|
type: "number",
|
|
5396
|
-
"onUpdate:modelValue":
|
|
5405
|
+
"onUpdate:modelValue": d[1] || (d[1] = (g) => r.transform.position.y = g),
|
|
5397
5406
|
step: "0.01",
|
|
5398
5407
|
onInput: s
|
|
5399
5408
|
}, null, 544), [
|
|
@@ -5404,10 +5413,10 @@ const zr = {
|
|
|
5404
5413
|
{ number: !0 }
|
|
5405
5414
|
]
|
|
5406
5415
|
]),
|
|
5407
|
-
|
|
5416
|
+
d[16] || (d[16] = C("span", null, "Z:", -1)),
|
|
5408
5417
|
k(C("input", {
|
|
5409
5418
|
type: "number",
|
|
5410
|
-
"onUpdate:modelValue":
|
|
5419
|
+
"onUpdate:modelValue": d[2] || (d[2] = (g) => r.transform.position.z = g),
|
|
5411
5420
|
step: "0.01",
|
|
5412
5421
|
onInput: s
|
|
5413
5422
|
}, null, 544), [
|
|
@@ -5421,12 +5430,12 @@ const zr = {
|
|
|
5421
5430
|
])
|
|
5422
5431
|
]),
|
|
5423
5432
|
C("div", Jr, [
|
|
5424
|
-
|
|
5433
|
+
d[21] || (d[21] = C("label", null, "旋转 (弧度)", -1)),
|
|
5425
5434
|
C("div", Qr, [
|
|
5426
|
-
|
|
5435
|
+
d[18] || (d[18] = C("span", null, "X:", -1)),
|
|
5427
5436
|
k(C("input", {
|
|
5428
5437
|
type: "number",
|
|
5429
|
-
"onUpdate:modelValue":
|
|
5438
|
+
"onUpdate:modelValue": d[3] || (d[3] = (g) => r.transform.rotation.x = g),
|
|
5430
5439
|
step: "0.01",
|
|
5431
5440
|
onInput: s
|
|
5432
5441
|
}, null, 544), [
|
|
@@ -5437,10 +5446,10 @@ const zr = {
|
|
|
5437
5446
|
{ number: !0 }
|
|
5438
5447
|
]
|
|
5439
5448
|
]),
|
|
5440
|
-
|
|
5449
|
+
d[19] || (d[19] = C("span", null, "Y:", -1)),
|
|
5441
5450
|
k(C("input", {
|
|
5442
5451
|
type: "number",
|
|
5443
|
-
"onUpdate:modelValue":
|
|
5452
|
+
"onUpdate:modelValue": d[4] || (d[4] = (g) => r.transform.rotation.y = g),
|
|
5444
5453
|
step: "0.01",
|
|
5445
5454
|
onInput: s
|
|
5446
5455
|
}, null, 544), [
|
|
@@ -5451,10 +5460,10 @@ const zr = {
|
|
|
5451
5460
|
{ number: !0 }
|
|
5452
5461
|
]
|
|
5453
5462
|
]),
|
|
5454
|
-
|
|
5463
|
+
d[20] || (d[20] = C("span", null, "Z:", -1)),
|
|
5455
5464
|
k(C("input", {
|
|
5456
5465
|
type: "number",
|
|
5457
|
-
"onUpdate:modelValue":
|
|
5466
|
+
"onUpdate:modelValue": d[5] || (d[5] = (g) => r.transform.rotation.z = g),
|
|
5458
5467
|
step: "0.01",
|
|
5459
5468
|
onInput: s
|
|
5460
5469
|
}, null, 544), [
|
|
@@ -5468,12 +5477,12 @@ const zr = {
|
|
|
5468
5477
|
])
|
|
5469
5478
|
]),
|
|
5470
5479
|
C("div", Yr, [
|
|
5471
|
-
|
|
5480
|
+
d[25] || (d[25] = C("label", null, "缩放", -1)),
|
|
5472
5481
|
C("div", _r, [
|
|
5473
|
-
|
|
5482
|
+
d[22] || (d[22] = C("span", null, "X:", -1)),
|
|
5474
5483
|
k(C("input", {
|
|
5475
5484
|
type: "number",
|
|
5476
|
-
"onUpdate:modelValue":
|
|
5485
|
+
"onUpdate:modelValue": d[6] || (d[6] = (g) => r.transform.scale.x = g),
|
|
5477
5486
|
step: "0.01",
|
|
5478
5487
|
onInput: s
|
|
5479
5488
|
}, null, 544), [
|
|
@@ -5484,10 +5493,10 @@ const zr = {
|
|
|
5484
5493
|
{ number: !0 }
|
|
5485
5494
|
]
|
|
5486
5495
|
]),
|
|
5487
|
-
|
|
5496
|
+
d[23] || (d[23] = C("span", null, "Y:", -1)),
|
|
5488
5497
|
k(C("input", {
|
|
5489
5498
|
type: "number",
|
|
5490
|
-
"onUpdate:modelValue":
|
|
5499
|
+
"onUpdate:modelValue": d[7] || (d[7] = (g) => r.transform.scale.y = g),
|
|
5491
5500
|
step: "0.01",
|
|
5492
5501
|
onInput: s
|
|
5493
5502
|
}, null, 544), [
|
|
@@ -5498,10 +5507,10 @@ const zr = {
|
|
|
5498
5507
|
{ number: !0 }
|
|
5499
5508
|
]
|
|
5500
5509
|
]),
|
|
5501
|
-
|
|
5510
|
+
d[24] || (d[24] = C("span", null, "Z:", -1)),
|
|
5502
5511
|
k(C("input", {
|
|
5503
5512
|
type: "number",
|
|
5504
|
-
"onUpdate:modelValue":
|
|
5513
|
+
"onUpdate:modelValue": d[8] || (d[8] = (g) => r.transform.scale.z = g),
|
|
5505
5514
|
step: "0.01",
|
|
5506
5515
|
onInput: s
|
|
5507
5516
|
}, null, 544), [
|
|
@@ -5515,15 +5524,15 @@ const zr = {
|
|
|
5515
5524
|
])
|
|
5516
5525
|
]),
|
|
5517
5526
|
r.selectedObject && r.selectedObject.type === "DirectionalLight" ? (R(), P("div", $r, [
|
|
5518
|
-
|
|
5527
|
+
d[27] || (d[27] = C("label", null, "光源属性", -1)),
|
|
5519
5528
|
C("div", ea, [
|
|
5520
|
-
|
|
5529
|
+
d[26] || (d[26] = C("span", { class: "slider-label" }, "强度", -1)),
|
|
5521
5530
|
k(C("input", {
|
|
5522
5531
|
type: "range",
|
|
5523
5532
|
min: "0",
|
|
5524
5533
|
max: "10",
|
|
5525
5534
|
step: "0.1",
|
|
5526
|
-
"onUpdate:modelValue":
|
|
5535
|
+
"onUpdate:modelValue": d[9] || (d[9] = (g) => a.intensity = g),
|
|
5527
5536
|
onInput: l
|
|
5528
5537
|
}, null, 544), [
|
|
5529
5538
|
[
|
|
@@ -5538,7 +5547,7 @@ const zr = {
|
|
|
5538
5547
|
min: "0",
|
|
5539
5548
|
max: "100",
|
|
5540
5549
|
step: "0.1",
|
|
5541
|
-
"onUpdate:modelValue":
|
|
5550
|
+
"onUpdate:modelValue": d[10] || (d[10] = (g) => a.intensity = g),
|
|
5542
5551
|
class: "intensity-input",
|
|
5543
5552
|
onInput: l
|
|
5544
5553
|
}, null, 544), [
|
|
@@ -5550,17 +5559,17 @@ const zr = {
|
|
|
5550
5559
|
]
|
|
5551
5560
|
])
|
|
5552
5561
|
])
|
|
5553
|
-
])) :
|
|
5562
|
+
])) : Z("", !0),
|
|
5554
5563
|
r.selectedObject ? (R(), P("div", ta, [
|
|
5555
|
-
|
|
5564
|
+
d[31] || (d[31] = C("label", null, "材质", -1)),
|
|
5556
5565
|
C("div", sa, [
|
|
5557
|
-
|
|
5566
|
+
d[28] || (d[28] = C("span", { class: "slider-label" }, "金属度", -1)),
|
|
5558
5567
|
k(C("input", {
|
|
5559
5568
|
type: "range",
|
|
5560
5569
|
min: "0",
|
|
5561
5570
|
max: "1",
|
|
5562
5571
|
step: "0.01",
|
|
5563
|
-
"onUpdate:modelValue":
|
|
5572
|
+
"onUpdate:modelValue": d[11] || (d[11] = (g) => i.metalness = g),
|
|
5564
5573
|
onInput: c
|
|
5565
5574
|
}, null, 544), [
|
|
5566
5575
|
[
|
|
@@ -5570,16 +5579,16 @@ const zr = {
|
|
|
5570
5579
|
{ number: !0 }
|
|
5571
5580
|
]
|
|
5572
5581
|
]),
|
|
5573
|
-
C("span", na,
|
|
5582
|
+
C("span", na, ne(i.metalness.toFixed(2)), 1)
|
|
5574
5583
|
]),
|
|
5575
5584
|
C("div", ia, [
|
|
5576
|
-
|
|
5585
|
+
d[29] || (d[29] = C("span", { class: "slider-label" }, "粗糙度", -1)),
|
|
5577
5586
|
k(C("input", {
|
|
5578
5587
|
type: "range",
|
|
5579
5588
|
min: "0",
|
|
5580
5589
|
max: "1",
|
|
5581
5590
|
step: "0.01",
|
|
5582
|
-
"onUpdate:modelValue":
|
|
5591
|
+
"onUpdate:modelValue": d[12] || (d[12] = (g) => i.roughness = g),
|
|
5583
5592
|
onInput: c
|
|
5584
5593
|
}, null, 544), [
|
|
5585
5594
|
[
|
|
@@ -5589,16 +5598,16 @@ const zr = {
|
|
|
5589
5598
|
{ number: !0 }
|
|
5590
5599
|
]
|
|
5591
5600
|
]),
|
|
5592
|
-
C("span", oa,
|
|
5601
|
+
C("span", oa, ne(i.roughness.toFixed(2)), 1)
|
|
5593
5602
|
]),
|
|
5594
5603
|
C("div", ra, [
|
|
5595
|
-
|
|
5604
|
+
d[30] || (d[30] = C("span", { class: "slider-label" }, "透明度", -1)),
|
|
5596
5605
|
k(C("input", {
|
|
5597
5606
|
type: "range",
|
|
5598
5607
|
min: "0",
|
|
5599
5608
|
max: "1",
|
|
5600
5609
|
step: "0.01",
|
|
5601
|
-
"onUpdate:modelValue":
|
|
5610
|
+
"onUpdate:modelValue": d[13] || (d[13] = (g) => i.opacity = g),
|
|
5602
5611
|
onInput: c
|
|
5603
5612
|
}, null, 544), [
|
|
5604
5613
|
[
|
|
@@ -5608,13 +5617,13 @@ const zr = {
|
|
|
5608
5617
|
{ number: !0 }
|
|
5609
5618
|
]
|
|
5610
5619
|
]),
|
|
5611
|
-
C("span", aa,
|
|
5620
|
+
C("span", aa, ne(i.opacity.toFixed(2)), 1)
|
|
5612
5621
|
]),
|
|
5613
|
-
o.value ?
|
|
5614
|
-
])) :
|
|
5622
|
+
o.value ? Z("", !0) : (R(), P("div", la, " ⚠️ 当前材质不支持金属度/粗糙度(仅支持 Standard/Phong) "))
|
|
5623
|
+
])) : Z("", !0)
|
|
5615
5624
|
]));
|
|
5616
5625
|
}
|
|
5617
|
-
}), ca = /* @__PURE__ */
|
|
5626
|
+
}), ca = /* @__PURE__ */ Se(Aa, [["__scopeId", "data-v-4cecf018"]]), ua = { class: "userdata-tab" }, da = { class: "property-group userdata-group" }, ha = { class: "userdata-add-row" }, fa = ["onKeyup"], pa = {
|
|
5618
5627
|
key: 0,
|
|
5619
5628
|
class: "userdata-list"
|
|
5620
5629
|
}, ma = { class: "ud-key" }, ga = {
|
|
@@ -5627,40 +5636,40 @@ const zr = {
|
|
|
5627
5636
|
}, ya = { class: "ud-json-actions" }, xa = ["onClick"], va = ["onClick"], Sa = {
|
|
5628
5637
|
key: 1,
|
|
5629
5638
|
class: "userdata-empty"
|
|
5630
|
-
}, Ta = /* @__PURE__ */
|
|
5639
|
+
}, Ta = /* @__PURE__ */ ve({
|
|
5631
5640
|
__name: "UserDataTab",
|
|
5632
5641
|
props: {
|
|
5633
5642
|
selectedObject: {}
|
|
5634
5643
|
},
|
|
5635
5644
|
setup(r) {
|
|
5636
5645
|
const e = r, t = W(""), n = W(""), s = W(null), i = W(""), o = W(null), a = W([]);
|
|
5637
|
-
function l(
|
|
5638
|
-
if (
|
|
5639
|
-
if (
|
|
5640
|
-
if (Array.isArray(
|
|
5641
|
-
const y = typeof
|
|
5646
|
+
function l(x) {
|
|
5647
|
+
if (x === null) return "null";
|
|
5648
|
+
if (x === void 0) return "undefined";
|
|
5649
|
+
if (Array.isArray(x)) return "array";
|
|
5650
|
+
const y = typeof x;
|
|
5642
5651
|
return y === "object" ? "object" : y === "number" ? "number" : y === "boolean" ? "boolean" : "string";
|
|
5643
5652
|
}
|
|
5644
|
-
function A(
|
|
5653
|
+
function A(x) {
|
|
5645
5654
|
const y = [];
|
|
5646
|
-
if (
|
|
5647
|
-
for (const [
|
|
5648
|
-
typeof
|
|
5649
|
-
key:
|
|
5655
|
+
if (x.userData)
|
|
5656
|
+
for (const [v, M] of Object.entries(x.userData))
|
|
5657
|
+
typeof v == "string" && !v.startsWith("_") && y.push({
|
|
5658
|
+
key: v,
|
|
5650
5659
|
value: typeof M == "object" ? JSON.stringify(M) : String(M),
|
|
5651
5660
|
rawType: l(M)
|
|
5652
5661
|
});
|
|
5653
5662
|
a.value = y;
|
|
5654
5663
|
}
|
|
5655
|
-
function u(
|
|
5656
|
-
const y =
|
|
5664
|
+
function u(x) {
|
|
5665
|
+
const y = x.trim();
|
|
5657
5666
|
if (y === "true") return !0;
|
|
5658
5667
|
if (y === "false") return !1;
|
|
5659
5668
|
if (y === "null") return null;
|
|
5660
5669
|
if (y === "undefined") return;
|
|
5661
|
-
const
|
|
5662
|
-
if (y !== "" && !isNaN(
|
|
5663
|
-
return String(
|
|
5670
|
+
const v = Number(y);
|
|
5671
|
+
if (y !== "" && !isNaN(v))
|
|
5672
|
+
return String(v) !== y ? y : v;
|
|
5664
5673
|
if (y.startsWith("{") && y.endsWith("}") || y.startsWith("[") && y.endsWith("]"))
|
|
5665
5674
|
try {
|
|
5666
5675
|
return JSON.parse(y);
|
|
@@ -5670,85 +5679,85 @@ const zr = {
|
|
|
5670
5679
|
}
|
|
5671
5680
|
function c() {
|
|
5672
5681
|
if (!e.selectedObject || !t.value.trim()) return;
|
|
5673
|
-
const
|
|
5674
|
-
if (
|
|
5682
|
+
const x = t.value.trim();
|
|
5683
|
+
if (x === "isMovable") {
|
|
5675
5684
|
t.value = "";
|
|
5676
5685
|
return;
|
|
5677
5686
|
}
|
|
5678
5687
|
const y = u(n.value);
|
|
5679
|
-
e.selectedObject.userData[
|
|
5688
|
+
e.selectedObject.userData[x] = y, A(e.selectedObject), t.value = "", n.value = "";
|
|
5680
5689
|
}
|
|
5681
|
-
function
|
|
5682
|
-
e.selectedObject && (delete e.selectedObject.userData[
|
|
5690
|
+
function h(x, y) {
|
|
5691
|
+
e.selectedObject && (delete e.selectedObject.userData[x], A(e.selectedObject));
|
|
5683
5692
|
}
|
|
5684
|
-
function
|
|
5685
|
-
return
|
|
5693
|
+
function d(x) {
|
|
5694
|
+
return x.length <= 28 ? x : x.substring(0, 28) + "…";
|
|
5686
5695
|
}
|
|
5687
|
-
function
|
|
5688
|
-
s.value =
|
|
5696
|
+
function g(x) {
|
|
5697
|
+
s.value = x;
|
|
5689
5698
|
const y = e.selectedObject;
|
|
5690
5699
|
if (!y) return;
|
|
5691
|
-
const
|
|
5700
|
+
const v = y.userData[x];
|
|
5692
5701
|
try {
|
|
5693
|
-
i.value = JSON.stringify(
|
|
5702
|
+
i.value = JSON.stringify(v, null, 2);
|
|
5694
5703
|
} catch {
|
|
5695
|
-
i.value = String(
|
|
5704
|
+
i.value = String(v);
|
|
5696
5705
|
}
|
|
5697
|
-
|
|
5706
|
+
f();
|
|
5698
5707
|
}
|
|
5699
|
-
function
|
|
5700
|
-
const
|
|
5701
|
-
if (!
|
|
5708
|
+
function f() {
|
|
5709
|
+
const x = i.value.trim();
|
|
5710
|
+
if (!x) {
|
|
5702
5711
|
o.value = null;
|
|
5703
5712
|
return;
|
|
5704
5713
|
}
|
|
5705
|
-
if (!
|
|
5714
|
+
if (!x.startsWith("{") && !x.startsWith("[")) {
|
|
5706
5715
|
o.value = "提示:当前输入不是 JSON 格式,将作为普通字符串保存";
|
|
5707
5716
|
return;
|
|
5708
5717
|
}
|
|
5709
5718
|
try {
|
|
5710
|
-
JSON.parse(
|
|
5719
|
+
JSON.parse(x), o.value = null;
|
|
5711
5720
|
} catch (y) {
|
|
5712
5721
|
o.value = "JSON 格式错误:" + y.message;
|
|
5713
5722
|
}
|
|
5714
5723
|
}
|
|
5715
|
-
function
|
|
5724
|
+
function m(x) {
|
|
5716
5725
|
const y = e.selectedObject;
|
|
5717
5726
|
if (!y) return;
|
|
5718
|
-
const
|
|
5727
|
+
const v = i.value.trim();
|
|
5719
5728
|
try {
|
|
5720
|
-
const M = JSON.parse(
|
|
5721
|
-
y.userData[
|
|
5729
|
+
const M = JSON.parse(v);
|
|
5730
|
+
y.userData[x] = M, A(y), s.value = null, i.value = "";
|
|
5722
5731
|
} catch {
|
|
5723
|
-
y.userData[
|
|
5732
|
+
y.userData[x] = v, A(y), s.value = null, i.value = "";
|
|
5724
5733
|
}
|
|
5725
5734
|
}
|
|
5726
|
-
function
|
|
5735
|
+
function p() {
|
|
5727
5736
|
s.value = null, i.value = "";
|
|
5728
5737
|
}
|
|
5729
|
-
function
|
|
5730
|
-
const
|
|
5731
|
-
if (!
|
|
5738
|
+
function I() {
|
|
5739
|
+
const x = e.selectedObject;
|
|
5740
|
+
if (!x) return;
|
|
5732
5741
|
const y = Ho();
|
|
5733
|
-
y && (
|
|
5742
|
+
y && (x.userData.closeUpView = {
|
|
5734
5743
|
x: y.position.x,
|
|
5735
5744
|
y: y.position.y,
|
|
5736
5745
|
z: y.position.z
|
|
5737
|
-
}, A(
|
|
5746
|
+
}, A(x));
|
|
5738
5747
|
}
|
|
5739
|
-
return
|
|
5748
|
+
return be(
|
|
5740
5749
|
() => e.selectedObject,
|
|
5741
|
-
(
|
|
5742
|
-
|
|
5750
|
+
(x) => {
|
|
5751
|
+
x ? A(x) : a.value = [], s.value = null, i.value = "";
|
|
5743
5752
|
},
|
|
5744
5753
|
{ immediate: !0 }
|
|
5745
|
-
), (
|
|
5754
|
+
), (x, y) => (R(), P("div", ua, [
|
|
5746
5755
|
C("div", da, [
|
|
5747
5756
|
y[3] || (y[3] = C("label", null, "userData 属性", -1)),
|
|
5748
5757
|
C("div", ha, [
|
|
5749
5758
|
k(C("input", {
|
|
5750
5759
|
type: "text",
|
|
5751
|
-
"onUpdate:modelValue": y[0] || (y[0] = (
|
|
5760
|
+
"onUpdate:modelValue": y[0] || (y[0] = (v) => t.value = v),
|
|
5752
5761
|
placeholder: "属性名",
|
|
5753
5762
|
class: "ud-input",
|
|
5754
5763
|
onKeyup: ze(c, ["enter"])
|
|
@@ -5756,10 +5765,10 @@ const zr = {
|
|
|
5756
5765
|
[D, t.value]
|
|
5757
5766
|
]),
|
|
5758
5767
|
k(C("textarea", {
|
|
5759
|
-
"onUpdate:modelValue": y[1] || (y[1] = (
|
|
5768
|
+
"onUpdate:modelValue": y[1] || (y[1] = (v) => n.value = v),
|
|
5760
5769
|
placeholder: "值",
|
|
5761
5770
|
class: "ud-input ud-textarea",
|
|
5762
|
-
onKeyup: ze(
|
|
5771
|
+
onKeyup: ze(Jt(c, ["prevent"]), ["enter"])
|
|
5763
5772
|
}, null, 40, fa), [
|
|
5764
5773
|
[D, n.value]
|
|
5765
5774
|
]),
|
|
@@ -5770,29 +5779,29 @@ const zr = {
|
|
|
5770
5779
|
}, " + ")
|
|
5771
5780
|
]),
|
|
5772
5781
|
a.value.length > 0 ? (R(), P("div", pa, [
|
|
5773
|
-
(R(!0), P(
|
|
5774
|
-
key:
|
|
5775
|
-
class:
|
|
5776
|
-
readonly:
|
|
5777
|
-
"editing-json": s.value ===
|
|
5782
|
+
(R(!0), P(Pe, null, Dt(a.value, (v, M) => (R(), P("div", {
|
|
5783
|
+
key: v.key,
|
|
5784
|
+
class: oe(["userdata-item", {
|
|
5785
|
+
readonly: v.key === "isMovable",
|
|
5786
|
+
"editing-json": s.value === v.key
|
|
5778
5787
|
}])
|
|
5779
5788
|
}, [
|
|
5780
|
-
C("span", ma,
|
|
5781
|
-
|
|
5782
|
-
s.value !==
|
|
5783
|
-
C("span", ba,
|
|
5789
|
+
C("span", ma, ne(v.key), 1),
|
|
5790
|
+
v.key === "isMovable" ? (R(), P("span", ga, ne(String(v.value)) + " 🔒 ", 1)) : v.key !== "isMovable" ? (R(), P(Pe, { key: 1 }, [
|
|
5791
|
+
s.value !== v.key ? (R(), P(Pe, { key: 0 }, [
|
|
5792
|
+
C("span", ba, ne(d(v.value)), 1),
|
|
5784
5793
|
C("button", {
|
|
5785
5794
|
class: "ud-btn edit-json-btn",
|
|
5786
5795
|
title: "编辑对象",
|
|
5787
|
-
onClick: (L) =>
|
|
5796
|
+
onClick: (L) => g(v.key)
|
|
5788
5797
|
}, " ✎ ", 8, Ca)
|
|
5789
|
-
], 64)) : (R(), P(
|
|
5790
|
-
o.value ? (R(), P("div", Ia, " ⚠ " +
|
|
5798
|
+
], 64)) : (R(), P(Pe, { key: 1 }, [
|
|
5799
|
+
o.value ? (R(), P("div", Ia, " ⚠ " + ne(o.value), 1)) : Z("", !0),
|
|
5791
5800
|
k(C("textarea", {
|
|
5792
5801
|
"onUpdate:modelValue": y[2] || (y[2] = (L) => i.value = L),
|
|
5793
|
-
class:
|
|
5802
|
+
class: oe(["ud-json-textarea", { "has-error": o.value }]),
|
|
5794
5803
|
rows: "3",
|
|
5795
|
-
onInput:
|
|
5804
|
+
onInput: f
|
|
5796
5805
|
}, null, 34), [
|
|
5797
5806
|
[D, i.value]
|
|
5798
5807
|
]),
|
|
@@ -5800,187 +5809,212 @@ const zr = {
|
|
|
5800
5809
|
C("button", {
|
|
5801
5810
|
class: "ud-btn apply-btn",
|
|
5802
5811
|
title: "应用修改",
|
|
5803
|
-
onClick: (L) =>
|
|
5812
|
+
onClick: (L) => m(v.key)
|
|
5804
5813
|
}, " ✓ ", 8, xa),
|
|
5805
5814
|
C("button", {
|
|
5806
5815
|
class: "ud-btn cancel-btn",
|
|
5807
5816
|
title: "取消编辑",
|
|
5808
|
-
onClick:
|
|
5817
|
+
onClick: p
|
|
5809
5818
|
}, " ✕ ")
|
|
5810
5819
|
])
|
|
5811
5820
|
], 64)),
|
|
5812
|
-
s.value !==
|
|
5821
|
+
s.value !== v.key ? (R(), P("button", {
|
|
5813
5822
|
key: 2,
|
|
5814
5823
|
class: "ud-btn del-btn",
|
|
5815
5824
|
title: "删除",
|
|
5816
|
-
onClick: (L) =>
|
|
5817
|
-
}, " ✕ ", 8, va)) :
|
|
5818
|
-
], 64)) :
|
|
5825
|
+
onClick: (L) => h(v.key)
|
|
5826
|
+
}, " ✕ ", 8, va)) : Z("", !0)
|
|
5827
|
+
], 64)) : Z("", !0)
|
|
5819
5828
|
], 2))), 128))
|
|
5820
5829
|
])) : (R(), P("div", Sa, "暂无自定义数据")),
|
|
5821
5830
|
C("button", {
|
|
5822
5831
|
class: "get-camera-btn",
|
|
5823
|
-
onClick:
|
|
5832
|
+
onClick: I
|
|
5824
5833
|
}, " 添加当前相机位置 ")
|
|
5825
5834
|
])
|
|
5826
5835
|
]));
|
|
5827
5836
|
}
|
|
5828
|
-
}), Ma = /* @__PURE__ */
|
|
5837
|
+
}), Ma = /* @__PURE__ */ Se(Ta, [["__scopeId", "data-v-4e117415"]]), wa = { class: "datapanel-tab" }, Ra = { class: "property-group" }, Ea = { class: "dp-section" }, ka = { class: "dp-visibility-row" }, Pa = { class: "dp-toggle" }, La = { class: "dp-visibility-text" }, Na = { class: "dp-section" }, Oa = { class: "dp-section" }, Da = { class: "dp-size-row" }, Wa = { class: "dp-size-value" }, ja = { class: "dp-section" }, Fa = { class: "dp-list" }, Ua = ["onUpdate:modelValue"], Ha = ["onUpdate:modelValue"], za = ["onUpdate:modelValue"], Ga = ["onUpdate:modelValue"], Ka = ["onClick"], Ba = { class: "dp-add-row" }, Za = /* @__PURE__ */ ve({
|
|
5829
5838
|
__name: "DataPanelTab",
|
|
5830
5839
|
props: {
|
|
5831
5840
|
selectedObject: {}
|
|
5832
5841
|
},
|
|
5833
5842
|
setup(r) {
|
|
5834
|
-
const e = r, t = W(""), n = W([]), s = W(!0), i = W(
|
|
5835
|
-
let
|
|
5836
|
-
function
|
|
5837
|
-
const
|
|
5838
|
-
return
|
|
5843
|
+
const e = r, t = W(""), n = W([]), s = W(!0), i = W(0.1), o = W(""), a = W(""), l = W(""), A = W("");
|
|
5844
|
+
let u = h(), c = !1;
|
|
5845
|
+
function h() {
|
|
5846
|
+
const m = e.selectedObject;
|
|
5847
|
+
return m ? Wt(Ot(m)) : null;
|
|
5839
5848
|
}
|
|
5840
|
-
|
|
5841
|
-
|
|
5849
|
+
be(s, (m) => {
|
|
5850
|
+
c || !u || (u.visible = m);
|
|
5851
|
+
}), be(i, (m) => {
|
|
5852
|
+
c || !u || u.setOffsetY(m);
|
|
5842
5853
|
});
|
|
5843
5854
|
function d() {
|
|
5844
|
-
|
|
5855
|
+
c || !u || (u.setTitle(t.value), u.setItems([...n.value]));
|
|
5845
5856
|
}
|
|
5846
|
-
|
|
5847
|
-
function
|
|
5848
|
-
n.value = n.value.filter((
|
|
5857
|
+
be(t, () => d()), be(n, () => d(), { deep: !0 });
|
|
5858
|
+
function g(m) {
|
|
5859
|
+
n.value = n.value.filter((p, I) => I !== m), d();
|
|
5849
5860
|
}
|
|
5850
|
-
function
|
|
5851
|
-
!
|
|
5861
|
+
function f() {
|
|
5862
|
+
!o.value.trim() || !a.value.trim() || (n.value = [
|
|
5852
5863
|
...n.value,
|
|
5853
5864
|
{
|
|
5854
|
-
label:
|
|
5855
|
-
value:
|
|
5856
|
-
unit:
|
|
5857
|
-
code:
|
|
5865
|
+
label: o.value.trim(),
|
|
5866
|
+
value: a.value.trim(),
|
|
5867
|
+
unit: l.value.trim() || void 0,
|
|
5868
|
+
code: A.value.trim() || void 0
|
|
5858
5869
|
}
|
|
5859
|
-
], d(),
|
|
5870
|
+
], d(), o.value = "", a.value = "", l.value = "", A.value = "");
|
|
5860
5871
|
}
|
|
5861
|
-
return
|
|
5872
|
+
return be(
|
|
5862
5873
|
() => e.selectedObject,
|
|
5863
5874
|
() => {
|
|
5864
|
-
|
|
5865
|
-
|
|
5875
|
+
c = !0, u = h(), u ? (t.value = u.getTitle(), n.value = u.getItems(), s.value = u.visible, i.value = u.getOffsetY()) : (t.value = "", n.value = [], s.value = !0, i.value = 0.1), o.value = "", a.value = "", l.value = "", A.value = "", setTimeout(() => {
|
|
5876
|
+
c = !1;
|
|
5866
5877
|
}, 0);
|
|
5867
5878
|
},
|
|
5868
5879
|
{ immediate: !0 }
|
|
5869
|
-
), (
|
|
5880
|
+
), (m, p) => (R(), P("div", wa, [
|
|
5870
5881
|
C("div", Ra, [
|
|
5871
|
-
|
|
5882
|
+
p[14] || (p[14] = C("label", null, "📊 数据面板", -1)),
|
|
5872
5883
|
C("div", Ea, [
|
|
5873
|
-
|
|
5884
|
+
p[8] || (p[8] = C("span", { class: "dp-label-sm" }, "可见性", -1)),
|
|
5874
5885
|
C("div", ka, [
|
|
5875
5886
|
C("label", Pa, [
|
|
5876
5887
|
k(C("input", {
|
|
5877
5888
|
type: "checkbox",
|
|
5878
|
-
"onUpdate:modelValue":
|
|
5889
|
+
"onUpdate:modelValue": p[0] || (p[0] = (I) => s.value = I)
|
|
5879
5890
|
}, null, 512), [
|
|
5880
5891
|
[yn, s.value]
|
|
5881
5892
|
]),
|
|
5882
|
-
|
|
5893
|
+
p[7] || (p[7] = C("span", { class: "dp-toggle-slider" }, null, -1))
|
|
5883
5894
|
]),
|
|
5884
|
-
C("span", La,
|
|
5895
|
+
C("span", La, ne(s.value ? "显示中" : "已隐藏"), 1)
|
|
5885
5896
|
])
|
|
5886
5897
|
]),
|
|
5887
5898
|
C("div", Na, [
|
|
5888
|
-
|
|
5899
|
+
p[9] || (p[9] = C("span", { class: "dp-label-sm" }, "标题", -1)),
|
|
5889
5900
|
k(C("input", {
|
|
5890
5901
|
type: "text",
|
|
5891
5902
|
class: "dp-input",
|
|
5892
|
-
"onUpdate:modelValue":
|
|
5903
|
+
"onUpdate:modelValue": p[1] || (p[1] = (I) => t.value = I),
|
|
5893
5904
|
placeholder: "面板标题"
|
|
5894
5905
|
}, null, 512), [
|
|
5895
5906
|
[D, t.value]
|
|
5896
5907
|
])
|
|
5897
5908
|
]),
|
|
5898
5909
|
C("div", Oa, [
|
|
5899
|
-
|
|
5910
|
+
p[12] || (p[12] = C("span", { class: "dp-label-sm" }, "面板离模型距离", -1)),
|
|
5900
5911
|
C("div", Da, [
|
|
5901
|
-
|
|
5912
|
+
p[10] || (p[10] = C("span", { class: "dp-range-label" }, "近", -1)),
|
|
5913
|
+
k(C("input", {
|
|
5914
|
+
type: "range",
|
|
5915
|
+
class: "dp-range",
|
|
5916
|
+
min: "-0.5",
|
|
5917
|
+
max: "0.5",
|
|
5918
|
+
step: "0.01",
|
|
5919
|
+
"onUpdate:modelValue": p[2] || (p[2] = (I) => i.value = I)
|
|
5920
|
+
}, null, 512), [
|
|
5921
|
+
[
|
|
5922
|
+
D,
|
|
5923
|
+
i.value,
|
|
5924
|
+
void 0,
|
|
5925
|
+
{ number: !0 }
|
|
5926
|
+
]
|
|
5927
|
+
]),
|
|
5928
|
+
p[11] || (p[11] = C("span", { class: "dp-range-label" }, "远", -1)),
|
|
5929
|
+
C("span", Wa, ne((i.value * 100).toFixed(0)), 1)
|
|
5930
|
+
])
|
|
5931
|
+
]),
|
|
5932
|
+
C("div", ja, [
|
|
5933
|
+
p[13] || (p[13] = C("span", { class: "dp-label-sm" }, "数据项", -1)),
|
|
5934
|
+
C("div", Fa, [
|
|
5935
|
+
(R(!0), P(Pe, null, Dt(n.value, (I, x) => (R(), P("div", {
|
|
5902
5936
|
key: x,
|
|
5903
5937
|
class: "dp-item"
|
|
5904
5938
|
}, [
|
|
5905
5939
|
k(C("input", {
|
|
5906
5940
|
type: "text",
|
|
5907
5941
|
class: "dp-input dp-input-sm",
|
|
5908
|
-
"onUpdate:modelValue": (
|
|
5942
|
+
"onUpdate:modelValue": (y) => I.label = y,
|
|
5909
5943
|
placeholder: "标签"
|
|
5910
|
-
}, null, 8,
|
|
5911
|
-
[D,
|
|
5944
|
+
}, null, 8, Ua), [
|
|
5945
|
+
[D, I.label]
|
|
5912
5946
|
]),
|
|
5913
5947
|
k(C("input", {
|
|
5914
5948
|
type: "text",
|
|
5915
5949
|
class: "dp-input dp-input-sm",
|
|
5916
|
-
"onUpdate:modelValue": (
|
|
5950
|
+
"onUpdate:modelValue": (y) => I.value = y,
|
|
5917
5951
|
placeholder: "值"
|
|
5918
|
-
}, null, 8,
|
|
5919
|
-
[D,
|
|
5952
|
+
}, null, 8, Ha), [
|
|
5953
|
+
[D, I.value]
|
|
5920
5954
|
]),
|
|
5921
5955
|
k(C("input", {
|
|
5922
5956
|
type: "text",
|
|
5923
5957
|
class: "dp-input dp-input-xs",
|
|
5924
|
-
"onUpdate:modelValue": (
|
|
5958
|
+
"onUpdate:modelValue": (y) => I.unit = y,
|
|
5925
5959
|
placeholder: "单位"
|
|
5926
|
-
}, null, 8,
|
|
5927
|
-
[D,
|
|
5960
|
+
}, null, 8, za), [
|
|
5961
|
+
[D, I.unit]
|
|
5928
5962
|
]),
|
|
5929
5963
|
k(C("input", {
|
|
5930
5964
|
type: "text",
|
|
5931
5965
|
class: "dp-input dp-input-xs",
|
|
5932
|
-
"onUpdate:modelValue": (
|
|
5966
|
+
"onUpdate:modelValue": (y) => I.code = y,
|
|
5933
5967
|
placeholder: "编码"
|
|
5934
|
-
}, null, 8,
|
|
5935
|
-
[D,
|
|
5968
|
+
}, null, 8, Ga), [
|
|
5969
|
+
[D, I.code]
|
|
5936
5970
|
]),
|
|
5937
5971
|
C("button", {
|
|
5938
5972
|
class: "dp-btn dp-btn-del",
|
|
5939
|
-
onClick: (
|
|
5973
|
+
onClick: (y) => g(x),
|
|
5940
5974
|
title: "删除此项"
|
|
5941
|
-
}, "✕", 8,
|
|
5975
|
+
}, "✕", 8, Ka)
|
|
5942
5976
|
]))), 128))
|
|
5943
5977
|
]),
|
|
5944
|
-
C("div",
|
|
5978
|
+
C("div", Ba, [
|
|
5945
5979
|
k(C("input", {
|
|
5946
5980
|
type: "text",
|
|
5947
5981
|
class: "dp-input dp-input-sm",
|
|
5948
|
-
"onUpdate:modelValue":
|
|
5982
|
+
"onUpdate:modelValue": p[3] || (p[3] = (I) => o.value = I),
|
|
5949
5983
|
placeholder: "标签",
|
|
5950
|
-
onKeyup: ze(
|
|
5984
|
+
onKeyup: ze(f, ["enter"])
|
|
5951
5985
|
}, null, 544), [
|
|
5952
|
-
[D,
|
|
5986
|
+
[D, o.value]
|
|
5953
5987
|
]),
|
|
5954
5988
|
k(C("input", {
|
|
5955
5989
|
type: "text",
|
|
5956
5990
|
class: "dp-input dp-input-sm",
|
|
5957
|
-
"onUpdate:modelValue":
|
|
5991
|
+
"onUpdate:modelValue": p[4] || (p[4] = (I) => a.value = I),
|
|
5958
5992
|
placeholder: "值",
|
|
5959
|
-
onKeyup: ze(
|
|
5993
|
+
onKeyup: ze(f, ["enter"])
|
|
5960
5994
|
}, null, 544), [
|
|
5961
|
-
[D,
|
|
5995
|
+
[D, a.value]
|
|
5962
5996
|
]),
|
|
5963
5997
|
k(C("input", {
|
|
5964
5998
|
type: "text",
|
|
5965
5999
|
class: "dp-input dp-input-xs",
|
|
5966
|
-
"onUpdate:modelValue":
|
|
6000
|
+
"onUpdate:modelValue": p[5] || (p[5] = (I) => l.value = I),
|
|
5967
6001
|
placeholder: "单位",
|
|
5968
|
-
onKeyup: ze(
|
|
6002
|
+
onKeyup: ze(f, ["enter"])
|
|
5969
6003
|
}, null, 544), [
|
|
5970
|
-
[D,
|
|
6004
|
+
[D, l.value]
|
|
5971
6005
|
]),
|
|
5972
6006
|
k(C("input", {
|
|
5973
6007
|
type: "text",
|
|
5974
6008
|
class: "dp-input dp-input-xs",
|
|
5975
|
-
"onUpdate:modelValue":
|
|
6009
|
+
"onUpdate:modelValue": p[6] || (p[6] = (I) => A.value = I),
|
|
5976
6010
|
placeholder: "编码",
|
|
5977
|
-
onKeyup: ze(
|
|
6011
|
+
onKeyup: ze(f, ["enter"])
|
|
5978
6012
|
}, null, 544), [
|
|
5979
|
-
[D,
|
|
6013
|
+
[D, A.value]
|
|
5980
6014
|
]),
|
|
5981
6015
|
C("button", {
|
|
5982
6016
|
class: "dp-btn dp-btn-add",
|
|
5983
|
-
onClick:
|
|
6017
|
+
onClick: f,
|
|
5984
6018
|
title: "添加"
|
|
5985
6019
|
}, "+")
|
|
5986
6020
|
])
|
|
@@ -5988,8 +6022,8 @@ const zr = {
|
|
|
5988
6022
|
])
|
|
5989
6023
|
]));
|
|
5990
6024
|
}
|
|
5991
|
-
}),
|
|
5992
|
-
function
|
|
6025
|
+
}), Xa = /* @__PURE__ */ Se(Za, [["__scopeId", "data-v-0e6261f3"]]);
|
|
6026
|
+
function qa(r) {
|
|
5993
6027
|
const e = W(/* @__PURE__ */ new Set()), t = (s) => {
|
|
5994
6028
|
const i = new Set(e.value);
|
|
5995
6029
|
i.has(s) ? i.delete(s) : i.add(s), e.value = i;
|
|
@@ -6001,7 +6035,7 @@ function Za(r) {
|
|
|
6001
6035
|
i.add(o.uuid), o = o.parent;
|
|
6002
6036
|
e.value = i;
|
|
6003
6037
|
};
|
|
6004
|
-
return
|
|
6038
|
+
return be(
|
|
6005
6039
|
r,
|
|
6006
6040
|
(s) => {
|
|
6007
6041
|
s && n(s);
|
|
@@ -6009,22 +6043,22 @@ function Za(r) {
|
|
|
6009
6043
|
{ immediate: !0 }
|
|
6010
6044
|
), { expandedSet: e, toggleExpand: t };
|
|
6011
6045
|
}
|
|
6012
|
-
const
|
|
6046
|
+
const Va = {
|
|
6013
6047
|
key: 0,
|
|
6014
6048
|
class: "property-panel"
|
|
6015
|
-
},
|
|
6049
|
+
}, Ja = { class: "property-group tree-group" }, Qa = { class: "tree-container" }, Ya = {
|
|
6016
6050
|
key: 0,
|
|
6017
6051
|
class: "tree-empty"
|
|
6018
|
-
},
|
|
6052
|
+
}, _a = { class: "property-group" }, $a = { class: "transform-mode-row" }, el = {
|
|
6019
6053
|
key: 0,
|
|
6020
6054
|
class: "tabs"
|
|
6021
|
-
},
|
|
6055
|
+
}, tl = {
|
|
6022
6056
|
key: 1,
|
|
6023
6057
|
class: "tab-content"
|
|
6024
|
-
},
|
|
6058
|
+
}, sl = {
|
|
6025
6059
|
key: 1,
|
|
6026
6060
|
class: "property-panel empty"
|
|
6027
|
-
},
|
|
6061
|
+
}, nl = /* @__PURE__ */ ve({
|
|
6028
6062
|
__name: "index",
|
|
6029
6063
|
props: {
|
|
6030
6064
|
transform: {},
|
|
@@ -6034,134 +6068,134 @@ const Ba = {
|
|
|
6034
6068
|
emits: ["propertyChange", "treeSelect", "treeDelete", "transformModeChange"],
|
|
6035
6069
|
setup(r, { emit: e }) {
|
|
6036
6070
|
const t = r, n = e, s = W("translate");
|
|
6037
|
-
function i(
|
|
6038
|
-
s.value =
|
|
6071
|
+
function i(g) {
|
|
6072
|
+
s.value = g, n("transformModeChange", g);
|
|
6039
6073
|
}
|
|
6040
6074
|
const o = () => n("propertyChange"), a = W("transform"), l = $e(() => {
|
|
6041
|
-
var
|
|
6042
|
-
return !!(t.selectedObject && ((
|
|
6043
|
-
}), A = W(0), u = xn(t, "selectedObject"), { expandedSet: c, toggleExpand:
|
|
6044
|
-
vn("treeExpand", { expandedSet: c, toggleExpand:
|
|
6045
|
-
const
|
|
6046
|
-
A.value++, n("treeDelete",
|
|
6075
|
+
var g;
|
|
6076
|
+
return !!(t.selectedObject && ((g = t.selectedObject.userData) != null && g._hasDataPanel));
|
|
6077
|
+
}), A = W(0), u = xn(t, "selectedObject"), { expandedSet: c, toggleExpand: h } = qa(u);
|
|
6078
|
+
vn("treeExpand", { expandedSet: c, toggleExpand: h });
|
|
6079
|
+
const d = (g) => {
|
|
6080
|
+
A.value++, n("treeDelete", g);
|
|
6047
6081
|
};
|
|
6048
|
-
return (
|
|
6049
|
-
C("div",
|
|
6050
|
-
|
|
6051
|
-
C("div",
|
|
6052
|
-
(R(!0), P(
|
|
6053
|
-
key:
|
|
6054
|
-
node:
|
|
6082
|
+
return (g, f) => r.transform ? (R(), P("div", Va, [
|
|
6083
|
+
C("div", Ja, [
|
|
6084
|
+
f[7] || (f[7] = C("label", null, "场景物体", -1)),
|
|
6085
|
+
C("div", Qa, [
|
|
6086
|
+
(R(!0), P(Pe, null, Dt(r.treeData, (m) => (R(), nt(Xr, {
|
|
6087
|
+
key: m.uuid,
|
|
6088
|
+
node: m,
|
|
6055
6089
|
"selected-object": r.selectedObject,
|
|
6056
6090
|
version: A.value,
|
|
6057
|
-
onSelect:
|
|
6058
|
-
onDelete:
|
|
6091
|
+
onSelect: f[0] || (f[0] = (p) => n("treeSelect", p)),
|
|
6092
|
+
onDelete: d
|
|
6059
6093
|
}, null, 8, ["node", "selected-object", "version"]))), 128)),
|
|
6060
|
-
r.treeData.length === 0 ? (R(), P("div",
|
|
6094
|
+
r.treeData.length === 0 ? (R(), P("div", Ya, "暂无物体")) : Z("", !0)
|
|
6061
6095
|
])
|
|
6062
6096
|
]),
|
|
6063
|
-
C("div",
|
|
6064
|
-
|
|
6065
|
-
C("div",
|
|
6097
|
+
C("div", _a, [
|
|
6098
|
+
f[8] || (f[8] = C("label", null, "全局属性", -1)),
|
|
6099
|
+
C("div", $a, [
|
|
6066
6100
|
C("button", {
|
|
6067
|
-
class:
|
|
6101
|
+
class: oe(["mode-btn", { active: s.value === "translate" }]),
|
|
6068
6102
|
title: "移动 (W)",
|
|
6069
|
-
onClick:
|
|
6103
|
+
onClick: f[1] || (f[1] = (m) => i("translate"))
|
|
6070
6104
|
}, " ↕ 移动 ", 2),
|
|
6071
6105
|
C("button", {
|
|
6072
|
-
class:
|
|
6106
|
+
class: oe(["mode-btn", { active: s.value === "rotate" }]),
|
|
6073
6107
|
title: "旋转 (E)",
|
|
6074
|
-
onClick:
|
|
6108
|
+
onClick: f[2] || (f[2] = (m) => i("rotate"))
|
|
6075
6109
|
}, " ↻ 旋转 ", 2),
|
|
6076
6110
|
C("button", {
|
|
6077
|
-
class:
|
|
6111
|
+
class: oe(["mode-btn", { active: s.value === "scale" }]),
|
|
6078
6112
|
title: "缩放 (R)",
|
|
6079
|
-
onClick:
|
|
6113
|
+
onClick: f[3] || (f[3] = (m) => i("scale"))
|
|
6080
6114
|
}, " ⤡ 缩放 ", 2)
|
|
6081
6115
|
])
|
|
6082
6116
|
]),
|
|
6083
|
-
r.selectedObject ? (R(), P("div",
|
|
6117
|
+
r.selectedObject ? (R(), P("div", el, [
|
|
6084
6118
|
C("button", {
|
|
6085
|
-
class:
|
|
6086
|
-
onClick:
|
|
6119
|
+
class: oe(["tab-btn", { active: a.value === "transform" }]),
|
|
6120
|
+
onClick: f[4] || (f[4] = (m) => a.value = "transform")
|
|
6087
6121
|
}, " 🔄 变换 ", 2),
|
|
6088
6122
|
C("button", {
|
|
6089
|
-
class:
|
|
6090
|
-
onClick:
|
|
6123
|
+
class: oe(["tab-btn", { active: a.value === "userdata" }]),
|
|
6124
|
+
onClick: f[5] || (f[5] = (m) => a.value = "userdata")
|
|
6091
6125
|
}, " 📋 自定义数据 ", 2),
|
|
6092
6126
|
l.value ? (R(), P("button", {
|
|
6093
6127
|
key: 0,
|
|
6094
|
-
class:
|
|
6095
|
-
onClick:
|
|
6096
|
-
}, " 📊 数据面板 ", 2)) :
|
|
6097
|
-
])) :
|
|
6098
|
-
r.selectedObject ? (R(), P("div",
|
|
6099
|
-
k(
|
|
6128
|
+
class: oe(["tab-btn", { active: a.value === "datapanel" }]),
|
|
6129
|
+
onClick: f[6] || (f[6] = (m) => a.value = "datapanel")
|
|
6130
|
+
}, " 📊 数据面板 ", 2)) : Z("", !0)
|
|
6131
|
+
])) : Z("", !0),
|
|
6132
|
+
r.selectedObject ? (R(), P("div", tl, [
|
|
6133
|
+
k(Ut(ca, {
|
|
6100
6134
|
transform: r.transform,
|
|
6101
6135
|
"selected-object": r.selectedObject,
|
|
6102
6136
|
onPropertyChange: o
|
|
6103
6137
|
}, null, 8, ["transform", "selected-object"]), [
|
|
6104
6138
|
[Le, a.value === "transform"]
|
|
6105
6139
|
]),
|
|
6106
|
-
k(
|
|
6140
|
+
k(Ut(Ma, { "selected-object": r.selectedObject }, null, 8, ["selected-object"]), [
|
|
6107
6141
|
[Le, a.value === "userdata"]
|
|
6108
6142
|
]),
|
|
6109
|
-
k(
|
|
6143
|
+
k(Ut(Xa, { "selected-object": r.selectedObject }, null, 8, ["selected-object"]), [
|
|
6110
6144
|
[Le, a.value === "datapanel"]
|
|
6111
6145
|
])
|
|
6112
|
-
])) :
|
|
6113
|
-
])) : (R(), P("div",
|
|
6146
|
+
])) : Z("", !0)
|
|
6147
|
+
])) : (R(), P("div", sl, [...f[9] || (f[9] = [
|
|
6114
6148
|
C("p", null, "未选中任何模型", -1)
|
|
6115
6149
|
])]));
|
|
6116
6150
|
}
|
|
6117
|
-
}),
|
|
6151
|
+
}), il = /* @__PURE__ */ Se(nl, [["__scopeId", "data-v-c92c9fa7"]]), ol = { class: "top-bar" }, rl = { class: "left-section" }, al = { class: "dropdown-menu" }, ll = { class: "dropdown-menu sub-menu" }, Al = { class: "dropdown-menu sub-menu" }, cl = { class: "dropdown-menu" }, ul = /* @__PURE__ */ ve({
|
|
6118
6152
|
__name: "TopBar",
|
|
6119
6153
|
emits: ["addModel", "importModel"],
|
|
6120
6154
|
setup(r, { emit: e }) {
|
|
6121
6155
|
const t = W(!1), n = W(!1), s = W(!1), i = W(!1), o = e, a = W(null), l = () => {
|
|
6122
|
-
var
|
|
6123
|
-
return (
|
|
6124
|
-
}, A = (
|
|
6125
|
-
const
|
|
6126
|
-
|
|
6127
|
-
}, u = () => console.log("撤销"), c = () => console.log("删除物体"),
|
|
6128
|
-
const
|
|
6129
|
-
console.log(JSON.parse(await
|
|
6130
|
-
},
|
|
6156
|
+
var f;
|
|
6157
|
+
return (f = a.value) == null ? void 0 : f.click();
|
|
6158
|
+
}, A = (f) => {
|
|
6159
|
+
const m = f.target;
|
|
6160
|
+
m.files && m.files.length > 0 && (o("importModel", m.files[0]), m.value = "");
|
|
6161
|
+
}, u = () => console.log("撤销"), c = () => console.log("删除物体"), h = async () => {
|
|
6162
|
+
const f = zo();
|
|
6163
|
+
console.log(JSON.parse(await f));
|
|
6164
|
+
}, d = () => {
|
|
6131
6165
|
if (!localStorage.getItem("test_id")) return localStorage.setItem("test_id", "123");
|
|
6132
6166
|
ln(localStorage.getItem("test_id"));
|
|
6133
|
-
},
|
|
6134
|
-
return (
|
|
6135
|
-
C("div",
|
|
6167
|
+
}, g = () => on();
|
|
6168
|
+
return (f, m) => (R(), P("div", ol, [
|
|
6169
|
+
C("div", rl, [
|
|
6136
6170
|
C("div", {
|
|
6137
6171
|
class: "dropdown-wrapper",
|
|
6138
|
-
onMouseenter:
|
|
6139
|
-
onMouseleave:
|
|
6172
|
+
onMouseenter: m[9] || (m[9] = (p) => n.value = !0),
|
|
6173
|
+
onMouseleave: m[10] || (m[10] = (p) => n.value = !1)
|
|
6140
6174
|
}, [
|
|
6141
|
-
|
|
6142
|
-
k(C("div",
|
|
6175
|
+
m[15] || (m[15] = C("button", { class: "menu-btn" }, "添加", -1)),
|
|
6176
|
+
k(C("div", al, [
|
|
6143
6177
|
C("div", {
|
|
6144
6178
|
class: "menu-item",
|
|
6145
6179
|
onClick: u
|
|
6146
6180
|
}, "组"),
|
|
6147
6181
|
C("div", {
|
|
6148
6182
|
class: "menu-item dropdown-wrapper sub-trigger",
|
|
6149
|
-
onMouseenter:
|
|
6150
|
-
onMouseleave:
|
|
6183
|
+
onMouseenter: m[3] || (m[3] = (p) => s.value = !0),
|
|
6184
|
+
onMouseleave: m[4] || (m[4] = (p) => s.value = !1)
|
|
6151
6185
|
}, [
|
|
6152
|
-
|
|
6153
|
-
k(C("div",
|
|
6186
|
+
m[13] || (m[13] = C("span", null, "网格", -1)),
|
|
6187
|
+
k(C("div", ll, [
|
|
6154
6188
|
C("div", {
|
|
6155
6189
|
class: "menu-item",
|
|
6156
|
-
onClick:
|
|
6190
|
+
onClick: m[0] || (m[0] = (p) => o("addModel", "box"))
|
|
6157
6191
|
}, " 正方体 "),
|
|
6158
6192
|
C("div", {
|
|
6159
6193
|
class: "menu-item",
|
|
6160
|
-
onClick:
|
|
6194
|
+
onClick: m[1] || (m[1] = (p) => o("addModel", "sphere"))
|
|
6161
6195
|
}, " 球体 "),
|
|
6162
6196
|
C("div", {
|
|
6163
6197
|
class: "menu-item",
|
|
6164
|
-
onClick:
|
|
6198
|
+
onClick: m[2] || (m[2] = (p) => o("addModel", "waterPlane"))
|
|
6165
6199
|
}, " 水面 "),
|
|
6166
6200
|
C("div", {
|
|
6167
6201
|
class: "menu-item",
|
|
@@ -6173,14 +6207,14 @@ const Ba = {
|
|
|
6173
6207
|
], 32),
|
|
6174
6208
|
C("div", {
|
|
6175
6209
|
class: "menu-item dropdown-wrapper sub-trigger",
|
|
6176
|
-
onMouseenter:
|
|
6177
|
-
onMouseleave:
|
|
6210
|
+
onMouseenter: m[6] || (m[6] = (p) => i.value = !0),
|
|
6211
|
+
onMouseleave: m[7] || (m[7] = (p) => i.value = !1)
|
|
6178
6212
|
}, [
|
|
6179
|
-
|
|
6180
|
-
k(C("div",
|
|
6213
|
+
m[14] || (m[14] = C("span", null, "光源", -1)),
|
|
6214
|
+
k(C("div", Al, [
|
|
6181
6215
|
C("div", {
|
|
6182
6216
|
class: "menu-item",
|
|
6183
|
-
onClick:
|
|
6217
|
+
onClick: m[5] || (m[5] = (p) => o("addModel", "directionalLight"))
|
|
6184
6218
|
}, " 平行光 ")
|
|
6185
6219
|
], 512), [
|
|
6186
6220
|
[Le, i.value]
|
|
@@ -6192,7 +6226,7 @@ const Ba = {
|
|
|
6192
6226
|
}, "摄像机"),
|
|
6193
6227
|
C("div", {
|
|
6194
6228
|
class: "menu-item",
|
|
6195
|
-
onClick:
|
|
6229
|
+
onClick: m[8] || (m[8] = (p) => o("addModel", "dataPanel"))
|
|
6196
6230
|
}, " 数据面板 ")
|
|
6197
6231
|
], 512), [
|
|
6198
6232
|
[Le, n.value]
|
|
@@ -6200,29 +6234,29 @@ const Ba = {
|
|
|
6200
6234
|
], 32),
|
|
6201
6235
|
C("div", {
|
|
6202
6236
|
class: "dropdown-wrapper",
|
|
6203
|
-
onMouseenter:
|
|
6204
|
-
onMouseleave:
|
|
6237
|
+
onMouseenter: m[11] || (m[11] = (p) => t.value = !0),
|
|
6238
|
+
onMouseleave: m[12] || (m[12] = (p) => t.value = !1)
|
|
6205
6239
|
}, [
|
|
6206
|
-
|
|
6207
|
-
k(C("div",
|
|
6240
|
+
m[16] || (m[16] = C("button", { class: "menu-btn" }, "帮助", -1)),
|
|
6241
|
+
k(C("div", cl, [
|
|
6208
6242
|
C("div", {
|
|
6209
6243
|
class: "menu-item",
|
|
6210
|
-
onClick:
|
|
6244
|
+
onClick: h
|
|
6211
6245
|
}, "获取场景"),
|
|
6212
6246
|
C("div", {
|
|
6213
6247
|
class: "menu-item",
|
|
6214
|
-
onClick:
|
|
6248
|
+
onClick: d
|
|
6215
6249
|
}, "镜头拉近"),
|
|
6216
6250
|
C("div", {
|
|
6217
6251
|
class: "menu-item",
|
|
6218
|
-
onClick:
|
|
6252
|
+
onClick: g
|
|
6219
6253
|
}, " 重置相机位置 ")
|
|
6220
6254
|
], 512), [
|
|
6221
6255
|
[Le, t.value]
|
|
6222
6256
|
])
|
|
6223
6257
|
], 32)
|
|
6224
6258
|
]),
|
|
6225
|
-
|
|
6259
|
+
m[17] || (m[17] = C("div", { class: "right-section" }, [
|
|
6226
6260
|
C("span", { class: "app-title" }, "3D 模型编辑器")
|
|
6227
6261
|
], -1)),
|
|
6228
6262
|
C("input", {
|
|
@@ -6235,10 +6269,10 @@ const Ba = {
|
|
|
6235
6269
|
}, null, 544)
|
|
6236
6270
|
]));
|
|
6237
6271
|
}
|
|
6238
|
-
}),
|
|
6272
|
+
}), dl = /* @__PURE__ */ Se(ul, [["__scopeId", "data-v-45df3361"]]), hl = { class: "bottom-bar" }, fl = /* @__PURE__ */ ve({
|
|
6239
6273
|
__name: "BottomBar",
|
|
6240
6274
|
setup(r) {
|
|
6241
|
-
return (e, t) => (R(), P("div",
|
|
6275
|
+
return (e, t) => (R(), P("div", hl, [...t[0] || (t[0] = [
|
|
6242
6276
|
C("div", { class: "status-left" }, [
|
|
6243
6277
|
C("span", null, "就绪")
|
|
6244
6278
|
], -1),
|
|
@@ -6247,10 +6281,10 @@ const Ba = {
|
|
|
6247
6281
|
], -1)
|
|
6248
6282
|
])]));
|
|
6249
6283
|
}
|
|
6250
|
-
}),
|
|
6284
|
+
}), pl = /* @__PURE__ */ Se(fl, [["__scopeId", "data-v-3427bb27"]]), ml = { class: "app-layout" }, gl = {
|
|
6251
6285
|
key: 0,
|
|
6252
6286
|
class: "loading-overlay"
|
|
6253
|
-
},
|
|
6287
|
+
}, bl = /* @__PURE__ */ ve({
|
|
6254
6288
|
__name: "DrawingBoard",
|
|
6255
6289
|
props: {
|
|
6256
6290
|
mode: { default: "edit" },
|
|
@@ -6258,97 +6292,97 @@ const Ba = {
|
|
|
6258
6292
|
},
|
|
6259
6293
|
setup(r) {
|
|
6260
6294
|
const e = r, t = W(!1);
|
|
6261
|
-
yo((
|
|
6262
|
-
t.value =
|
|
6295
|
+
yo((p) => {
|
|
6296
|
+
t.value = p;
|
|
6263
6297
|
});
|
|
6264
|
-
const n = ps(null), s =
|
|
6298
|
+
const n = ps(null), s = Qt({
|
|
6265
6299
|
position: { x: 0, y: 0, z: 0 },
|
|
6266
6300
|
rotation: { x: 0, y: 0, z: 0 },
|
|
6267
6301
|
scale: { x: 1, y: 1, z: 1 }
|
|
6268
|
-
}), i = (
|
|
6269
|
-
s.position.x = Number(
|
|
6270
|
-
}, o = (
|
|
6271
|
-
|
|
6302
|
+
}), i = (p) => {
|
|
6303
|
+
s.position.x = Number(p.position.x.toFixed(3)), s.position.y = Number(p.position.y.toFixed(3)), s.position.z = Number(p.position.z.toFixed(3)), s.rotation.x = Number(p.rotation.x.toFixed(3)), s.rotation.y = Number(p.rotation.y.toFixed(3)), s.rotation.z = Number(p.rotation.z.toFixed(3)), s.scale.x = Number(p.scale.x.toFixed(3)), s.scale.y = Number(p.scale.y.toFixed(3)), s.scale.z = Number(p.scale.z.toFixed(3));
|
|
6304
|
+
}, o = (p) => {
|
|
6305
|
+
p.position.set(
|
|
6272
6306
|
s.position.x,
|
|
6273
6307
|
s.position.y,
|
|
6274
6308
|
s.position.z
|
|
6275
|
-
),
|
|
6309
|
+
), p.rotation.set(
|
|
6276
6310
|
s.rotation.x,
|
|
6277
6311
|
s.rotation.y,
|
|
6278
6312
|
s.rotation.z
|
|
6279
|
-
),
|
|
6313
|
+
), p.scale.set(s.scale.x, s.scale.y, s.scale.z);
|
|
6280
6314
|
};
|
|
6281
|
-
Do((
|
|
6282
|
-
n.value =
|
|
6283
|
-
}), Wo((
|
|
6284
|
-
i(
|
|
6315
|
+
Do((p) => {
|
|
6316
|
+
n.value = p, p && i(p);
|
|
6317
|
+
}), Wo((p) => {
|
|
6318
|
+
i(p);
|
|
6285
6319
|
});
|
|
6286
6320
|
const a = () => {
|
|
6287
6321
|
if (n.value && (o(n.value), n.value.type === "DirectionalLight")) {
|
|
6288
|
-
const
|
|
6289
|
-
|
|
6322
|
+
const p = n.value.userData.helper;
|
|
6323
|
+
p && typeof p.update == "function" && p.update();
|
|
6290
6324
|
}
|
|
6291
|
-
}, l = (
|
|
6325
|
+
}, l = (p) => Hr(p), A = async (p) => {
|
|
6292
6326
|
try {
|
|
6293
|
-
await Ur(
|
|
6294
|
-
} catch (
|
|
6295
|
-
console.error("导入失败:",
|
|
6327
|
+
await Ur(p);
|
|
6328
|
+
} catch (I) {
|
|
6329
|
+
console.error("导入失败:", I), alert("导入失败:" + I.message);
|
|
6296
6330
|
}
|
|
6297
6331
|
}, u = ps([]);
|
|
6298
|
-
jo((
|
|
6299
|
-
u.value =
|
|
6332
|
+
jo((p) => {
|
|
6333
|
+
u.value = p;
|
|
6300
6334
|
});
|
|
6301
6335
|
const c = () => {
|
|
6302
|
-
const
|
|
6303
|
-
|
|
6304
|
-
},
|
|
6305
|
-
xo(
|
|
6306
|
-
},
|
|
6307
|
-
|
|
6336
|
+
const p = Fo();
|
|
6337
|
+
p && (u.value = p);
|
|
6338
|
+
}, h = (p) => us(p), d = (p) => Po(p.uuid), g = (p) => {
|
|
6339
|
+
xo(p);
|
|
6340
|
+
}, f = W(null), m = () => {
|
|
6341
|
+
f.value && co(f.value, e.mode, e.sceneData), c();
|
|
6308
6342
|
};
|
|
6309
6343
|
return Sn(() => {
|
|
6310
|
-
|
|
6344
|
+
m(), f.value && ro(f.value);
|
|
6311
6345
|
}), Tn(() => {
|
|
6312
6346
|
console.log("endset_three_editor destroy"), Ko();
|
|
6313
|
-
}), (
|
|
6314
|
-
t.value ? (R(), P("div",
|
|
6347
|
+
}), (p, I) => (R(), P("div", ml, [
|
|
6348
|
+
t.value ? (R(), P("div", gl, [...I[0] || (I[0] = [
|
|
6315
6349
|
C("div", { class: "loading-spinner" }, null, -1),
|
|
6316
6350
|
C("div", { class: "loading-text" }, "加载中...", -1)
|
|
6317
|
-
])])) :
|
|
6318
|
-
r.mode === "edit" ? (R(), nt(
|
|
6351
|
+
])])) : Z("", !0),
|
|
6352
|
+
r.mode === "edit" ? (R(), nt(dl, {
|
|
6319
6353
|
key: 1,
|
|
6320
6354
|
onAddModel: l,
|
|
6321
6355
|
onImportModel: A
|
|
6322
|
-
})) :
|
|
6356
|
+
})) : Z("", !0),
|
|
6323
6357
|
C("div", {
|
|
6324
|
-
class:
|
|
6358
|
+
class: oe(`editor-container editor-container-mode-${r.mode}`)
|
|
6325
6359
|
}, [
|
|
6326
6360
|
C("div", {
|
|
6327
|
-
class:
|
|
6361
|
+
class: oe(`canvas canvas-mode-${r.mode}`),
|
|
6328
6362
|
ref_key: "containerRef",
|
|
6329
|
-
ref:
|
|
6363
|
+
ref: f
|
|
6330
6364
|
}, null, 2),
|
|
6331
|
-
r.mode === "edit" ? (R(), nt(
|
|
6365
|
+
r.mode === "edit" ? (R(), nt(il, {
|
|
6332
6366
|
key: 0,
|
|
6333
6367
|
transform: s,
|
|
6334
6368
|
"tree-data": u.value,
|
|
6335
6369
|
"selected-object": n.value,
|
|
6336
6370
|
onPropertyChange: a,
|
|
6337
|
-
onTreeSelect:
|
|
6338
|
-
onTreeDelete:
|
|
6339
|
-
onTransformModeChange:
|
|
6340
|
-
}, null, 8, ["transform", "tree-data", "selected-object"])) :
|
|
6371
|
+
onTreeSelect: h,
|
|
6372
|
+
onTreeDelete: d,
|
|
6373
|
+
onTransformModeChange: g
|
|
6374
|
+
}, null, 8, ["transform", "tree-data", "selected-object"])) : Z("", !0)
|
|
6341
6375
|
], 2),
|
|
6342
|
-
r.mode === "edit" ? (R(), nt(
|
|
6376
|
+
r.mode === "edit" ? (R(), nt(pl, { key: 2 })) : Z("", !0)
|
|
6343
6377
|
]));
|
|
6344
6378
|
}
|
|
6345
|
-
}),
|
|
6379
|
+
}), wl = /* @__PURE__ */ Se(bl, [["__scopeId", "data-v-f80f67f2"]]);
|
|
6346
6380
|
export {
|
|
6347
|
-
|
|
6381
|
+
pl as BottomBar,
|
|
6348
6382
|
dt as DataPanel,
|
|
6349
|
-
|
|
6350
|
-
|
|
6351
|
-
|
|
6383
|
+
wl as DrawingBoard,
|
|
6384
|
+
il as PropertyPanel,
|
|
6385
|
+
dl as TopBar,
|
|
6352
6386
|
Xr as TreeItem,
|
|
6353
6387
|
Or as addBox,
|
|
6354
6388
|
Fr as addDataPanel,
|
|
@@ -6362,11 +6396,11 @@ export {
|
|
|
6362
6396
|
Ao as disposeCSS2DRenderer,
|
|
6363
6397
|
zo as exportSceneToJSON,
|
|
6364
6398
|
To as focusOnObject,
|
|
6365
|
-
|
|
6399
|
+
vl as getCSS2DRenderer,
|
|
6366
6400
|
Ho as getCamera,
|
|
6367
|
-
|
|
6368
|
-
|
|
6369
|
-
|
|
6401
|
+
Wt as getDataPanel,
|
|
6402
|
+
Ml as getRenderer,
|
|
6403
|
+
Tl as getScene,
|
|
6370
6404
|
Fo as getSceneObjects,
|
|
6371
6405
|
Uo as getSelectedObject,
|
|
6372
6406
|
Ur as importModelFromFile,
|
|
@@ -6382,12 +6416,12 @@ export {
|
|
|
6382
6416
|
lo as resizeCSS2DRenderer,
|
|
6383
6417
|
ln as selectModelHandle,
|
|
6384
6418
|
us as selectObject,
|
|
6385
|
-
|
|
6419
|
+
Kt as setLoading,
|
|
6386
6420
|
yo as setLoadingCallback,
|
|
6387
6421
|
Do as setSelectedObjectCallback,
|
|
6388
6422
|
Wo as setTransformChangeCallback,
|
|
6389
6423
|
xo as setTransformMode,
|
|
6390
|
-
|
|
6391
|
-
|
|
6424
|
+
Sl as updateDataPanelValue,
|
|
6425
|
+
qa as useTreeExpand
|
|
6392
6426
|
};
|
|
6393
6427
|
//# sourceMappingURL=three-editor.es.js.map
|