endset_three_editor 0.5.5 → 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 +970 -938
- 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
|
}
|
|
@@ -2186,11 +2186,17 @@ class dt {
|
|
|
2186
2186
|
updateOptions(e) {
|
|
2187
2187
|
this.options = { ...this.options, ...e }, this.rebuildPanel();
|
|
2188
2188
|
}
|
|
2189
|
-
/**
|
|
2189
|
+
/** 获取面板 Y 轴偏移 */
|
|
2190
|
+
getOffsetY() {
|
|
2191
|
+
return this.options.offsetY ?? 0.1;
|
|
2192
|
+
}
|
|
2193
|
+
/** 更新面板 Y 轴偏移(使用与 attachTo 相同的位置计算逻辑) */
|
|
2190
2194
|
setOffsetY(e) {
|
|
2191
2195
|
if (this.options.offsetY = e, this.css2dObject && this.attachedObject) {
|
|
2192
|
-
const t = new w.
|
|
2193
|
-
|
|
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);
|
|
2194
2200
|
}
|
|
2195
2201
|
}
|
|
2196
2202
|
/** 获取面板宽度 */
|
|
@@ -2228,7 +2234,7 @@ function nn(r, e) {
|
|
|
2228
2234
|
const t = Ot(r);
|
|
2229
2235
|
Lt.set(t, e), t.userData._hasDataPanel = !0;
|
|
2230
2236
|
}
|
|
2231
|
-
function
|
|
2237
|
+
function Wt(r) {
|
|
2232
2238
|
return Lt.get(Ot(r)) || null;
|
|
2233
2239
|
}
|
|
2234
2240
|
function oo(r) {
|
|
@@ -2239,7 +2245,7 @@ let U = null;
|
|
|
2239
2245
|
function ro(r) {
|
|
2240
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);
|
|
2241
2247
|
}
|
|
2242
|
-
function
|
|
2248
|
+
function vl() {
|
|
2243
2249
|
return U;
|
|
2244
2250
|
}
|
|
2245
2251
|
function ao(r, e) {
|
|
@@ -2275,9 +2281,9 @@ const b = {
|
|
|
2275
2281
|
/** 当前选中的物体 */
|
|
2276
2282
|
selectedObject: null
|
|
2277
2283
|
};
|
|
2278
|
-
let wt = !1, We = !1,
|
|
2279
|
-
const
|
|
2280
|
-
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 = [];
|
|
2281
2287
|
const je = /* @__PURE__ */ new Map();
|
|
2282
2288
|
let Nt, Et = null, lt = null, At = null;
|
|
2283
2289
|
function co(r, e = "edit", t) {
|
|
@@ -2289,9 +2295,9 @@ function uo() {
|
|
|
2289
2295
|
}
|
|
2290
2296
|
function ho() {
|
|
2291
2297
|
if (!b.renderer || !b.scene || !b.camera) return;
|
|
2292
|
-
const r = new
|
|
2298
|
+
const r = new Zi(b.renderer);
|
|
2293
2299
|
r.addPass(new Xi(b.scene, b.camera)), r.addPass(new qi());
|
|
2294
|
-
const e = new
|
|
2300
|
+
const e = new Ce(
|
|
2295
2301
|
new w.Vector2(
|
|
2296
2302
|
b.container.clientWidth,
|
|
2297
2303
|
b.container.clientHeight
|
|
@@ -2299,7 +2305,7 @@ function ho() {
|
|
|
2299
2305
|
b.scene,
|
|
2300
2306
|
b.camera
|
|
2301
2307
|
);
|
|
2302
|
-
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;
|
|
2303
2309
|
}
|
|
2304
2310
|
function fo() {
|
|
2305
2311
|
b.scene = new w.Scene(), b.scene.name = "sl_scene", new w.TextureLoader().load(
|
|
@@ -2393,7 +2399,7 @@ function bo() {
|
|
|
2393
2399
|
}, 200));
|
|
2394
2400
|
}), r.addEventListener("objectChange", () => {
|
|
2395
2401
|
const e = b.selectedObject;
|
|
2396
|
-
if (
|
|
2402
|
+
if (is && e && is(e), e && e.type === "DirectionalLight") {
|
|
2397
2403
|
const t = e.userData.helper;
|
|
2398
2404
|
t && t.update && t.update();
|
|
2399
2405
|
}
|
|
@@ -2405,7 +2411,7 @@ function Co() {
|
|
|
2405
2411
|
}
|
|
2406
2412
|
function rn() {
|
|
2407
2413
|
var e, t;
|
|
2408
|
-
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) => {
|
|
2409
2415
|
if (n.userData.isWater && n.type === "Mesh") {
|
|
2410
2416
|
const s = n, i = s.material;
|
|
2411
2417
|
if (i.normalMap) {
|
|
@@ -2418,7 +2424,7 @@ function rn() {
|
|
|
2418
2424
|
function Io() {
|
|
2419
2425
|
if (!b.container || !b.camera || !b.renderer) return;
|
|
2420
2426
|
const r = b.container.clientWidth, e = b.container.clientHeight;
|
|
2421
|
-
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));
|
|
2422
2428
|
}
|
|
2423
2429
|
function us(r) {
|
|
2424
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));
|
|
@@ -2427,7 +2433,7 @@ let _ = null;
|
|
|
2427
2433
|
function yo(r) {
|
|
2428
2434
|
_ = r;
|
|
2429
2435
|
}
|
|
2430
|
-
function
|
|
2436
|
+
function Kt(r) {
|
|
2431
2437
|
_ == null || _(r);
|
|
2432
2438
|
}
|
|
2433
2439
|
function xo(r) {
|
|
@@ -2438,27 +2444,27 @@ function an(r) {
|
|
|
2438
2444
|
ds(), r.traverse((t) => {
|
|
2439
2445
|
if (t.isMesh) {
|
|
2440
2446
|
const n = t, s = new w.EdgesGeometry(n.geometry), i = new w.LineBasicMaterial({
|
|
2441
|
-
color:
|
|
2447
|
+
color: ss,
|
|
2442
2448
|
depthTest: !0
|
|
2443
2449
|
}), o = new w.LineSegments(s, i);
|
|
2444
|
-
t.add(o),
|
|
2450
|
+
t.add(o), ns.push(o);
|
|
2445
2451
|
}
|
|
2446
2452
|
});
|
|
2447
2453
|
else {
|
|
2448
|
-
if (!
|
|
2454
|
+
if (!ye) return;
|
|
2449
2455
|
const t = [];
|
|
2450
2456
|
r.traverse((n) => {
|
|
2451
2457
|
n.isMesh && t.push(n);
|
|
2452
|
-
}),
|
|
2458
|
+
}), ye.selectedObjects = t;
|
|
2453
2459
|
}
|
|
2454
2460
|
}
|
|
2455
2461
|
function ds() {
|
|
2456
2462
|
if (b.mode === "edit") {
|
|
2457
|
-
for (const r of
|
|
2463
|
+
for (const r of ns)
|
|
2458
2464
|
r.parent && r.parent.remove(r), r.geometry.dispose(), r.material.dispose();
|
|
2459
|
-
|
|
2465
|
+
ns = [];
|
|
2460
2466
|
} else
|
|
2461
|
-
|
|
2467
|
+
ye && (ye.selectedObjects = []);
|
|
2462
2468
|
}
|
|
2463
2469
|
function hs() {
|
|
2464
2470
|
b.selectedObject && (ds(), b.transformControls.detach(), b.selectedObject = null, Oe == null || Oe(null));
|
|
@@ -2546,13 +2552,13 @@ function To(r, e = 500) {
|
|
|
2546
2552
|
tz: n.z
|
|
2547
2553
|
},
|
|
2548
2554
|
e
|
|
2549
|
-
).easing(ut.Easing.Quadratic.InOut).onUpdate((
|
|
2550
|
-
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();
|
|
2551
2557
|
}).start();
|
|
2552
|
-
} catch (
|
|
2558
|
+
} catch (h) {
|
|
2553
2559
|
console.error(
|
|
2554
2560
|
"[focusOnObject] TWEEN 动画创建失败,请检查 @tweenjs/tween.js 是否已正确安装且版本兼容(^23.1.3):",
|
|
2555
|
-
|
|
2561
|
+
h
|
|
2556
2562
|
);
|
|
2557
2563
|
}
|
|
2558
2564
|
}
|
|
@@ -2580,121 +2586,122 @@ function Eo(r) {
|
|
|
2580
2586
|
});
|
|
2581
2587
|
}
|
|
2582
2588
|
function Xe(r, e = !1) {
|
|
2583
|
-
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);
|
|
2584
2590
|
}
|
|
2585
2591
|
function ko(r) {
|
|
2586
|
-
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();
|
|
2587
2593
|
}
|
|
2588
2594
|
function Po(r) {
|
|
2589
2595
|
const e = b.scene.getObjectByProperty("uuid", r);
|
|
2590
2596
|
e && ko(e);
|
|
2591
2597
|
}
|
|
2592
2598
|
function Lo(r) {
|
|
2593
|
-
r.userData.isMovable && r.parent === b.scene && (
|
|
2599
|
+
r.userData.isMovable && r.parent === b.scene && (xe.includes(r) || xe.push(r));
|
|
2594
2600
|
}
|
|
2595
2601
|
function No(r) {
|
|
2596
|
-
const e =
|
|
2597
|
-
e !== -1 &&
|
|
2602
|
+
const e = xe.indexOf(r);
|
|
2603
|
+
e !== -1 && xe.splice(e, 1);
|
|
2598
2604
|
}
|
|
2599
2605
|
function Oo() {
|
|
2600
2606
|
const r = [];
|
|
2601
2607
|
b.scene.children.forEach((e) => {
|
|
2602
2608
|
e.userData.isMovable && r.push(e);
|
|
2603
|
-
}),
|
|
2609
|
+
}), xe = r, jt();
|
|
2604
2610
|
}
|
|
2605
|
-
function
|
|
2606
|
-
Rt == null || Rt([...
|
|
2611
|
+
function jt() {
|
|
2612
|
+
Rt == null || Rt([...xe]);
|
|
2607
2613
|
}
|
|
2608
2614
|
function Do(r) {
|
|
2609
2615
|
Oe = r;
|
|
2610
2616
|
}
|
|
2611
2617
|
function Wo(r) {
|
|
2612
|
-
|
|
2618
|
+
is = r;
|
|
2613
2619
|
}
|
|
2614
2620
|
function jo(r) {
|
|
2615
2621
|
Rt = r;
|
|
2616
2622
|
}
|
|
2617
2623
|
function Fo() {
|
|
2618
|
-
return
|
|
2624
|
+
return xe;
|
|
2619
2625
|
}
|
|
2620
2626
|
function Uo() {
|
|
2621
2627
|
return b.selectedObject;
|
|
2622
2628
|
}
|
|
2623
|
-
function
|
|
2629
|
+
function Sl(r, e, t) {
|
|
2624
2630
|
if (!b.scene) return;
|
|
2625
2631
|
const n = je.get(r);
|
|
2626
2632
|
if (n) {
|
|
2627
|
-
const s =
|
|
2633
|
+
const s = Wt(n);
|
|
2628
2634
|
s && s.updateItemByCode(e, t);
|
|
2629
2635
|
}
|
|
2630
2636
|
}
|
|
2631
|
-
function
|
|
2637
|
+
function Tl() {
|
|
2632
2638
|
return b.scene;
|
|
2633
2639
|
}
|
|
2634
2640
|
function Ho() {
|
|
2635
2641
|
return b.camera;
|
|
2636
2642
|
}
|
|
2637
|
-
function
|
|
2643
|
+
function Ml() {
|
|
2638
2644
|
return b.renderer;
|
|
2639
2645
|
}
|
|
2640
2646
|
async function zo() {
|
|
2641
2647
|
var A, u, c;
|
|
2642
|
-
_ == null || _(!0), await new Promise((
|
|
2648
|
+
_ == null || _(!0), await new Promise((h) => setTimeout(h, 50)), hs();
|
|
2643
2649
|
const r = b.scene;
|
|
2644
2650
|
if (!r)
|
|
2645
2651
|
return _ == null || _(!1), "{}";
|
|
2646
2652
|
const e = [], t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map();
|
|
2647
|
-
r.traverse((
|
|
2648
|
-
var
|
|
2649
|
-
if (
|
|
2650
|
-
const
|
|
2651
|
-
if (
|
|
2652
|
-
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(
|
|
2653
2659
|
"[data-panel-title]"
|
|
2654
|
-
),
|
|
2655
|
-
if (
|
|
2660
|
+
), m = [];
|
|
2661
|
+
if (g.element.querySelectorAll(
|
|
2656
2662
|
".sl-css2d-data-panel-item"
|
|
2657
|
-
).forEach((
|
|
2658
|
-
var
|
|
2659
|
-
const
|
|
2660
|
-
if (
|
|
2661
|
-
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(
|
|
2662
2668
|
"span"
|
|
2663
|
-
),
|
|
2664
|
-
|
|
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 });
|
|
2665
2671
|
}
|
|
2666
|
-
}),
|
|
2667
|
-
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;
|
|
2668
2674
|
n.set(
|
|
2669
|
-
|
|
2675
|
+
h.parent.userData.id ? h.parent.userData.id : h.parent.uuid,
|
|
2670
2676
|
{
|
|
2671
|
-
title: ((
|
|
2672
|
-
items:
|
|
2673
|
-
width:
|
|
2674
|
-
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
|
|
2675
2682
|
}
|
|
2676
2683
|
);
|
|
2677
2684
|
}
|
|
2678
2685
|
}
|
|
2679
2686
|
}
|
|
2680
|
-
}), e.forEach((
|
|
2687
|
+
}), e.forEach((h) => r.remove(h));
|
|
2681
2688
|
const s = r.clone();
|
|
2682
2689
|
s.children = s.children.filter(
|
|
2683
|
-
(
|
|
2684
|
-
), s.traverse((
|
|
2685
|
-
|
|
2690
|
+
(h) => h.userData.type !== "initFloor"
|
|
2691
|
+
), s.traverse((h) => {
|
|
2692
|
+
h.name && h.name.startsWith("DataPanel_") && h.parent && h.parent.remove(h);
|
|
2686
2693
|
});
|
|
2687
2694
|
const i = s.toJSON();
|
|
2688
|
-
e.forEach((
|
|
2689
|
-
|
|
2695
|
+
e.forEach((h) => r.add(h)), t.forEach((h, d) => {
|
|
2696
|
+
d.userData.helper = h;
|
|
2690
2697
|
});
|
|
2691
2698
|
const o = {
|
|
2692
2699
|
position: (A = b.camera) == null ? void 0 : A.position.toArray(),
|
|
2693
2700
|
rotation: (u = b.camera) == null ? void 0 : u.rotation.toArray(),
|
|
2694
2701
|
target: ((c = b.orbitControls) == null ? void 0 : c.target.toArray()) || [0, 0, 0]
|
|
2695
2702
|
}, a = {};
|
|
2696
|
-
n.forEach((
|
|
2697
|
-
a[
|
|
2703
|
+
n.forEach((h, d) => {
|
|
2704
|
+
a[d] = h;
|
|
2698
2705
|
});
|
|
2699
2706
|
const l = JSON.stringify({
|
|
2700
2707
|
scene: i,
|
|
@@ -2711,19 +2718,19 @@ function Go(r, e = "edit", t) {
|
|
|
2711
2718
|
const u = A.userData.id || A.uuid, c = t[u];
|
|
2712
2719
|
if (c && A.userData.isMovable) {
|
|
2713
2720
|
Mo(A);
|
|
2714
|
-
const
|
|
2721
|
+
const h = new dt({
|
|
2715
2722
|
title: c.title,
|
|
2716
2723
|
items: c.items
|
|
2717
2724
|
});
|
|
2718
|
-
|
|
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);
|
|
2719
2726
|
}
|
|
2720
2727
|
})), e === "edit" && ((l = b.scene) == null || l.traverse((A) => {
|
|
2721
2728
|
var u;
|
|
2722
2729
|
if (A.type === "DirectionalLight") {
|
|
2723
2730
|
const c = A;
|
|
2724
2731
|
if (!c.userData.helper) {
|
|
2725
|
-
const
|
|
2726
|
-
|
|
2732
|
+
const h = new w.DirectionalLightHelper(c, 1);
|
|
2733
|
+
h.userData.type = "lightHelper", c.userData.helper = h, (u = b.scene) == null || u.add(h);
|
|
2727
2734
|
}
|
|
2728
2735
|
}
|
|
2729
2736
|
}));
|
|
@@ -2741,9 +2748,9 @@ function An(r) {
|
|
|
2741
2748
|
An(t);
|
|
2742
2749
|
}
|
|
2743
2750
|
function Ko() {
|
|
2744
|
-
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;
|
|
2745
2752
|
}
|
|
2746
|
-
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();
|
|
2747
2754
|
function Vo() {
|
|
2748
2755
|
const r = {
|
|
2749
2756
|
objects: [],
|
|
@@ -2853,7 +2860,7 @@ function Vo() {
|
|
|
2853
2860
|
},
|
|
2854
2861
|
addFaceNormal: function(e, t, n) {
|
|
2855
2862
|
const s = this.vertices, i = this.object.geometry.normals;
|
|
2856
|
-
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);
|
|
2857
2864
|
},
|
|
2858
2865
|
addColor: function(e, t, n) {
|
|
2859
2866
|
const s = this.colors, i = this.object.geometry.colors;
|
|
@@ -2873,15 +2880,15 @@ function Vo() {
|
|
|
2873
2880
|
},
|
|
2874
2881
|
addFace: function(e, t, n, s, i, o, a, l, A) {
|
|
2875
2882
|
const u = this.vertices.length;
|
|
2876
|
-
let c = this.parseVertexIndex(e, u),
|
|
2877
|
-
if (this.addVertex(c,
|
|
2878
|
-
const
|
|
2879
|
-
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);
|
|
2880
2887
|
} else
|
|
2881
|
-
this.addFaceNormal(c,
|
|
2888
|
+
this.addFaceNormal(c, h, d);
|
|
2882
2889
|
if (s !== void 0 && s !== "") {
|
|
2883
|
-
const
|
|
2884
|
-
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;
|
|
2885
2892
|
} else
|
|
2886
2893
|
this.addDefaultUV();
|
|
2887
2894
|
},
|
|
@@ -2904,7 +2911,7 @@ function Vo() {
|
|
|
2904
2911
|
};
|
|
2905
2912
|
return r.startObject("", !1), r;
|
|
2906
2913
|
}
|
|
2907
|
-
class Jo extends
|
|
2914
|
+
class Jo extends ls {
|
|
2908
2915
|
/**
|
|
2909
2916
|
* Constructs a new OBJ loader.
|
|
2910
2917
|
*
|
|
@@ -2991,57 +2998,57 @@ class Jo extends as {
|
|
|
2991
2998
|
break;
|
|
2992
2999
|
}
|
|
2993
3000
|
} else if (u === "f") {
|
|
2994
|
-
const
|
|
2995
|
-
for (let
|
|
2996
|
-
const
|
|
2997
|
-
if (
|
|
2998
|
-
const
|
|
2999
|
-
|
|
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);
|
|
3000
3007
|
}
|
|
3001
3008
|
}
|
|
3002
|
-
const
|
|
3003
|
-
for (let
|
|
3004
|
-
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];
|
|
3005
3012
|
t.addFace(
|
|
3006
|
-
m[0],
|
|
3007
3013
|
g[0],
|
|
3008
|
-
|
|
3009
|
-
|
|
3014
|
+
p[0],
|
|
3015
|
+
I[0],
|
|
3010
3016
|
g[1],
|
|
3011
|
-
|
|
3012
|
-
|
|
3017
|
+
p[1],
|
|
3018
|
+
I[1],
|
|
3013
3019
|
g[2],
|
|
3014
|
-
|
|
3020
|
+
p[2],
|
|
3021
|
+
I[2]
|
|
3015
3022
|
);
|
|
3016
3023
|
}
|
|
3017
3024
|
} else if (u === "l") {
|
|
3018
3025
|
const c = A.substring(1).trim().split(" ");
|
|
3019
|
-
let
|
|
3020
|
-
const
|
|
3026
|
+
let h = [];
|
|
3027
|
+
const d = [];
|
|
3021
3028
|
if (A.indexOf("/") === -1)
|
|
3022
|
-
|
|
3029
|
+
h = c;
|
|
3023
3030
|
else
|
|
3024
|
-
for (let
|
|
3025
|
-
const
|
|
3026
|
-
|
|
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]);
|
|
3027
3034
|
}
|
|
3028
|
-
t.addLineGeometry(
|
|
3035
|
+
t.addLineGeometry(h, d);
|
|
3029
3036
|
} else if (u === "p") {
|
|
3030
|
-
const
|
|
3031
|
-
t.addPointGeometry(
|
|
3032
|
-
} else if ((s =
|
|
3037
|
+
const h = A.slice(1).trim().split(" ");
|
|
3038
|
+
t.addPointGeometry(h);
|
|
3039
|
+
} else if ((s = Bo.exec(A)) !== null) {
|
|
3033
3040
|
const c = (" " + s[0].slice(1).trim()).slice(1);
|
|
3034
3041
|
t.startObject(c);
|
|
3035
3042
|
} else if (Xo.test(A))
|
|
3036
3043
|
t.object.startMaterial(A.substring(7).trim(), t.materialLibraries);
|
|
3037
|
-
else if (
|
|
3044
|
+
else if (Zo.test(A))
|
|
3038
3045
|
t.materialLibraries.push(A.substring(7).trim());
|
|
3039
3046
|
else if (qo.test(A))
|
|
3040
3047
|
console.warn('THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.');
|
|
3041
3048
|
else if (u === "s") {
|
|
3042
3049
|
if (s = A.split(" "), s.length > 1) {
|
|
3043
|
-
const
|
|
3044
|
-
t.object.smooth =
|
|
3050
|
+
const h = s[1].trim().toLowerCase();
|
|
3051
|
+
t.object.smooth = h !== "0" && h !== "off";
|
|
3045
3052
|
} else
|
|
3046
3053
|
t.object.smooth = !0;
|
|
3047
3054
|
const c = t.object.currentMaterial();
|
|
@@ -3055,36 +3062,36 @@ class Jo extends as {
|
|
|
3055
3062
|
const i = new St();
|
|
3056
3063
|
if (i.materialLibraries = [].concat(t.materialLibraries), !(t.objects.length === 1 && t.objects[0].geometry.vertices.length === 0) === !0)
|
|
3057
3064
|
for (let a = 0, l = t.objects.length; a < l; a++) {
|
|
3058
|
-
const A = t.objects[a], u = A.geometry, c = A.materials,
|
|
3059
|
-
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;
|
|
3060
3067
|
if (u.vertices.length === 0) continue;
|
|
3061
|
-
const
|
|
3062
|
-
|
|
3063
|
-
const
|
|
3064
|
-
for (let
|
|
3065
|
-
const y = c[
|
|
3066
|
-
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];
|
|
3067
3074
|
if (this.materials !== null) {
|
|
3068
|
-
if (M = this.materials.create(y.name),
|
|
3075
|
+
if (M = this.materials.create(y.name), h && M && !(M instanceof it)) {
|
|
3069
3076
|
const L = new it();
|
|
3070
3077
|
ot.prototype.copy.call(L, M), L.color.copy(M.color), M = L;
|
|
3071
|
-
} else if (
|
|
3078
|
+
} else if (d && M && !(M instanceof et)) {
|
|
3072
3079
|
const L = new et({ size: 10, sizeAttenuation: !1 });
|
|
3073
3080
|
ot.prototype.copy.call(L, M), L.color.copy(M.color), L.map = M.map, M = L;
|
|
3074
3081
|
}
|
|
3075
3082
|
}
|
|
3076
|
-
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);
|
|
3077
3084
|
}
|
|
3078
|
-
let
|
|
3079
|
-
if (
|
|
3080
|
-
for (let
|
|
3081
|
-
const y = c[
|
|
3082
|
-
|
|
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);
|
|
3083
3090
|
}
|
|
3084
|
-
|
|
3091
|
+
h ? p = new _t(f, m) : d ? p = new Tt(f, m) : p = new S(f, m);
|
|
3085
3092
|
} else
|
|
3086
|
-
|
|
3087
|
-
|
|
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);
|
|
3088
3095
|
}
|
|
3089
3096
|
else if (t.vertices.length > 0) {
|
|
3090
3097
|
const a = new et({ size: 1, sizeAttenuation: !1 }), l = new De();
|
|
@@ -3098,7 +3105,7 @@ class Jo extends as {
|
|
|
3098
3105
|
function Us(r, e) {
|
|
3099
3106
|
if (e === Xn)
|
|
3100
3107
|
return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."), r;
|
|
3101
|
-
if (e ===
|
|
3108
|
+
if (e === $t || e === Vs) {
|
|
3102
3109
|
let t = r.getIndex();
|
|
3103
3110
|
if (t === null) {
|
|
3104
3111
|
const o = [], a = r.getAttribute("position");
|
|
@@ -3110,7 +3117,7 @@ function Us(r, e) {
|
|
|
3110
3117
|
return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), r;
|
|
3111
3118
|
}
|
|
3112
3119
|
const n = t.count - 2, s = [];
|
|
3113
|
-
if (e ===
|
|
3120
|
+
if (e === $t)
|
|
3114
3121
|
for (let o = 1; o <= n; o++)
|
|
3115
3122
|
s.push(t.getX(0)), s.push(t.getX(o)), s.push(t.getX(o + 1));
|
|
3116
3123
|
else
|
|
@@ -3139,7 +3146,7 @@ function cn(r, e, t) {
|
|
|
3139
3146
|
for (let n = 0; n < r.children.length; n++)
|
|
3140
3147
|
cn(r.children[n], e.children[n], t);
|
|
3141
3148
|
}
|
|
3142
|
-
class Yo extends
|
|
3149
|
+
class Yo extends ls {
|
|
3143
3150
|
/**
|
|
3144
3151
|
* Constructs a new glTF loader.
|
|
3145
3152
|
*
|
|
@@ -3312,7 +3319,7 @@ class Yo extends as {
|
|
|
3312
3319
|
}
|
|
3313
3320
|
if (i.extensionsUsed)
|
|
3314
3321
|
for (let u = 0; u < i.extensionsUsed.length; ++u) {
|
|
3315
|
-
const c = i.extensionsUsed[u],
|
|
3322
|
+
const c = i.extensionsUsed[u], h = i.extensionsRequired || [];
|
|
3316
3323
|
switch (c) {
|
|
3317
3324
|
case E.KHR_MATERIALS_UNLIT:
|
|
3318
3325
|
o[c] = new er();
|
|
@@ -3327,7 +3334,7 @@ class Yo extends as {
|
|
|
3327
3334
|
o[c] = new Cr();
|
|
3328
3335
|
break;
|
|
3329
3336
|
default:
|
|
3330
|
-
|
|
3337
|
+
h.indexOf(c) >= 0 && a[c] === void 0 && console.warn('THREE.GLTFLoader: Unknown extension "' + c + '".');
|
|
3331
3338
|
}
|
|
3332
3339
|
}
|
|
3333
3340
|
A.setExtensions(o), A.setPlugins(a), A.parse(n, s);
|
|
@@ -3410,7 +3417,7 @@ class $o {
|
|
|
3410
3417
|
if (s) return s;
|
|
3411
3418
|
const i = t.json, l = ((i.extensions && i.extensions[this.name] || {}).lights || [])[e];
|
|
3412
3419
|
let A;
|
|
3413
|
-
const u = new
|
|
3420
|
+
const u = new B(16777215);
|
|
3414
3421
|
l.color !== void 0 && u.setRGB(l.color[0], l.color[1], l.color[2], Ae);
|
|
3415
3422
|
const c = l.range !== void 0 ? l.range : 0;
|
|
3416
3423
|
switch (l.type) {
|
|
@@ -3448,7 +3455,7 @@ class er {
|
|
|
3448
3455
|
}
|
|
3449
3456
|
extendParams(e, t, n) {
|
|
3450
3457
|
const s = [];
|
|
3451
|
-
e.color = new
|
|
3458
|
+
e.color = new B(1, 1, 1), e.opacity = 1;
|
|
3452
3459
|
const i = t.pbrMetallicRoughness;
|
|
3453
3460
|
if (i) {
|
|
3454
3461
|
if (Array.isArray(i.baseColorFactor)) {
|
|
@@ -3524,7 +3531,7 @@ class or {
|
|
|
3524
3531
|
const n = H(this.parser, e, this.name);
|
|
3525
3532
|
if (n === null) return Promise.resolve();
|
|
3526
3533
|
const s = [];
|
|
3527
|
-
if (t.sheenColor = new
|
|
3534
|
+
if (t.sheenColor = new B(0, 0, 0), t.sheenRoughness = 0, t.sheen = 1, n.sheenColorFactor !== void 0) {
|
|
3528
3535
|
const i = n.sheenColorFactor;
|
|
3529
3536
|
t.sheenColor.setRGB(i[0], i[1], i[2], Ae);
|
|
3530
3537
|
}
|
|
@@ -3558,7 +3565,7 @@ class ar {
|
|
|
3558
3565
|
const s = [];
|
|
3559
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;
|
|
3560
3567
|
const i = n.attenuationColor || [1, 1, 1];
|
|
3561
|
-
return t.attenuationColor = new
|
|
3568
|
+
return t.attenuationColor = new B().setRGB(i[0], i[1], i[2], Ae), Promise.all(s);
|
|
3562
3569
|
}
|
|
3563
3570
|
}
|
|
3564
3571
|
class lr {
|
|
@@ -3586,7 +3593,7 @@ class Ar {
|
|
|
3586
3593
|
const s = [];
|
|
3587
3594
|
t.specularIntensity = n.specularFactor !== void 0 ? n.specularFactor : 1, n.specularTexture !== void 0 && s.push(this.parser.assignTexture(t, "specularIntensityMap", n.specularTexture));
|
|
3588
3595
|
const i = n.specularColorFactor || [1, 1, 1];
|
|
3589
|
-
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);
|
|
3590
3597
|
}
|
|
3591
3598
|
}
|
|
3592
3599
|
class cr {
|
|
@@ -3682,12 +3689,12 @@ class Hs {
|
|
|
3682
3689
|
return null;
|
|
3683
3690
|
}
|
|
3684
3691
|
return i.then(function(a) {
|
|
3685
|
-
const l = s.byteOffset || 0, A = s.byteLength || 0, u = s.count, c = s.byteStride,
|
|
3686
|
-
return o.decodeGltfBufferAsync ? o.decodeGltfBufferAsync(u, c,
|
|
3687
|
-
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;
|
|
3688
3695
|
}) : o.ready.then(function() {
|
|
3689
|
-
const
|
|
3690
|
-
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;
|
|
3691
3698
|
});
|
|
3692
3699
|
});
|
|
3693
3700
|
} else
|
|
@@ -3710,19 +3717,19 @@ class pr {
|
|
|
3710
3717
|
for (const A in o)
|
|
3711
3718
|
a.push(this.parser.getDependency("accessor", o[A]).then((u) => (l[A] = u, l[A])));
|
|
3712
3719
|
return a.length < 1 ? null : (a.push(this.parser.createNodeMesh(e)), Promise.all(a).then((A) => {
|
|
3713
|
-
const u = A.pop(), c = u.isGroup ? u.children : [u],
|
|
3714
|
-
for (const
|
|
3715
|
-
const
|
|
3716
|
-
for (let y = 0; y <
|
|
3717
|
-
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));
|
|
3718
3725
|
for (const y in l)
|
|
3719
3726
|
if (y === "_COLOR_0") {
|
|
3720
|
-
const
|
|
3721
|
-
|
|
3722
|
-
} else y !== "TRANSLATION" && y !== "ROTATION" && y !== "SCALE" &&
|
|
3723
|
-
|
|
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);
|
|
3724
3731
|
}
|
|
3725
|
-
return u.isGroup ? (u.clear(), u.add(...
|
|
3732
|
+
return u.isGroup ? (u.clear(), u.add(...d), u) : d[0];
|
|
3726
3733
|
}));
|
|
3727
3734
|
}
|
|
3728
3735
|
}
|
|
@@ -3767,25 +3774,25 @@ class gr {
|
|
|
3767
3774
|
decodePrimitive(e, t) {
|
|
3768
3775
|
const n = this.json, s = this.dracoLoader, i = e.extensions[this.name].bufferView, o = e.extensions[this.name].attributes, a = {}, l = {}, A = {};
|
|
3769
3776
|
for (const u in o) {
|
|
3770
|
-
const c =
|
|
3777
|
+
const c = os[u] || u.toLowerCase();
|
|
3771
3778
|
a[c] = o[u];
|
|
3772
3779
|
}
|
|
3773
3780
|
for (const u in e.attributes) {
|
|
3774
|
-
const c =
|
|
3781
|
+
const c = os[u] || u.toLowerCase();
|
|
3775
3782
|
if (o[u] !== void 0) {
|
|
3776
|
-
const
|
|
3777
|
-
A[c] =
|
|
3783
|
+
const h = n.accessors[e.attributes[u]], d = Be[h.componentType];
|
|
3784
|
+
A[c] = d.name, l[c] = h.normalized === !0;
|
|
3778
3785
|
}
|
|
3779
3786
|
}
|
|
3780
3787
|
return t.getDependency("bufferView", i).then(function(u) {
|
|
3781
|
-
return new Promise(function(c,
|
|
3782
|
-
s.decodeDracoFile(u, function(
|
|
3783
|
-
for (const
|
|
3784
|
-
const
|
|
3785
|
-
|
|
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);
|
|
3786
3793
|
}
|
|
3787
|
-
c(
|
|
3788
|
-
}, a, A, Ae,
|
|
3794
|
+
c(d);
|
|
3795
|
+
}, a, A, Ae, h);
|
|
3789
3796
|
});
|
|
3790
3797
|
});
|
|
3791
3798
|
}
|
|
@@ -3814,10 +3821,10 @@ class dn extends fi {
|
|
|
3814
3821
|
return t;
|
|
3815
3822
|
}
|
|
3816
3823
|
interpolate_(e, t, n, s) {
|
|
3817
|
-
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;
|
|
3818
3825
|
for (let y = 0; y !== a; y++) {
|
|
3819
|
-
const
|
|
3820
|
-
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;
|
|
3821
3828
|
}
|
|
3822
3829
|
return i;
|
|
3823
3830
|
}
|
|
@@ -3837,7 +3844,7 @@ const se = {
|
|
|
3837
3844
|
TRIANGLES: 4,
|
|
3838
3845
|
TRIANGLE_STRIP: 5,
|
|
3839
3846
|
TRIANGLE_FAN: 6
|
|
3840
|
-
},
|
|
3847
|
+
}, Be = {
|
|
3841
3848
|
5120: Int8Array,
|
|
3842
3849
|
5121: Uint8Array,
|
|
3843
3850
|
5122: Int16Array,
|
|
@@ -3846,7 +3853,7 @@ const se = {
|
|
|
3846
3853
|
5126: Float32Array
|
|
3847
3854
|
}, Gs = {
|
|
3848
3855
|
9728: _s,
|
|
3849
|
-
9729:
|
|
3856
|
+
9729: es,
|
|
3850
3857
|
9984: si,
|
|
3851
3858
|
9985: ti,
|
|
3852
3859
|
9986: ei,
|
|
@@ -3854,7 +3861,7 @@ const se = {
|
|
|
3854
3861
|
}, Ks = {
|
|
3855
3862
|
33071: ii,
|
|
3856
3863
|
33648: ni,
|
|
3857
|
-
10497:
|
|
3864
|
+
10497: ts
|
|
3858
3865
|
}, Zt = {
|
|
3859
3866
|
SCALAR: 1,
|
|
3860
3867
|
VEC2: 2,
|
|
@@ -3863,7 +3870,7 @@ const se = {
|
|
|
3863
3870
|
MAT2: 4,
|
|
3864
3871
|
MAT3: 9,
|
|
3865
3872
|
MAT4: 16
|
|
3866
|
-
},
|
|
3873
|
+
}, os = {
|
|
3867
3874
|
POSITION: "position",
|
|
3868
3875
|
NORMAL: "normal",
|
|
3869
3876
|
TANGENT: "tangent",
|
|
@@ -3885,7 +3892,7 @@ const se = {
|
|
|
3885
3892
|
// keyframe track will be initialized with a default interpolation type, then modified.
|
|
3886
3893
|
LINEAR: en,
|
|
3887
3894
|
STEP: di
|
|
3888
|
-
},
|
|
3895
|
+
}, Xt = {
|
|
3889
3896
|
OPAQUE: "OPAQUE",
|
|
3890
3897
|
MASK: "MASK",
|
|
3891
3898
|
BLEND: "BLEND"
|
|
@@ -3901,7 +3908,7 @@ function vr(r) {
|
|
|
3901
3908
|
side: hi
|
|
3902
3909
|
})), r.DefaultMaterial;
|
|
3903
3910
|
}
|
|
3904
|
-
function
|
|
3911
|
+
function we(r, e, t) {
|
|
3905
3912
|
for (const n in t.extensions)
|
|
3906
3913
|
r[n] === void 0 && (e.userData.gltfExtensions = e.userData.gltfExtensions || {}, e.userData.gltfExtensions[n] = t.extensions[n]);
|
|
3907
3914
|
}
|
|
@@ -3919,16 +3926,16 @@ function Sr(r, e, t) {
|
|
|
3919
3926
|
for (let A = 0, u = e.length; A < u; A++) {
|
|
3920
3927
|
const c = e[A];
|
|
3921
3928
|
if (n) {
|
|
3922
|
-
const
|
|
3923
|
-
o.push(
|
|
3929
|
+
const h = c.POSITION !== void 0 ? t.getDependency("accessor", c.POSITION) : r.attributes.position;
|
|
3930
|
+
o.push(h);
|
|
3924
3931
|
}
|
|
3925
3932
|
if (s) {
|
|
3926
|
-
const
|
|
3927
|
-
a.push(
|
|
3933
|
+
const h = c.NORMAL !== void 0 ? t.getDependency("accessor", c.NORMAL) : r.attributes.normal;
|
|
3934
|
+
a.push(h);
|
|
3928
3935
|
}
|
|
3929
3936
|
if (i) {
|
|
3930
|
-
const
|
|
3931
|
-
l.push(
|
|
3937
|
+
const h = c.COLOR_0 !== void 0 ? t.getDependency("accessor", c.COLOR_0) : r.attributes.color;
|
|
3938
|
+
l.push(h);
|
|
3932
3939
|
}
|
|
3933
3940
|
}
|
|
3934
3941
|
return Promise.all([
|
|
@@ -3936,8 +3943,8 @@ function Sr(r, e, t) {
|
|
|
3936
3943
|
Promise.all(a),
|
|
3937
3944
|
Promise.all(l)
|
|
3938
3945
|
]).then(function(A) {
|
|
3939
|
-
const u = A[0], c = A[1],
|
|
3940
|
-
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;
|
|
3941
3948
|
});
|
|
3942
3949
|
}
|
|
3943
3950
|
function Tr(r, e) {
|
|
@@ -3957,19 +3964,19 @@ function Tr(r, e) {
|
|
|
3957
3964
|
function Mr(r) {
|
|
3958
3965
|
let e;
|
|
3959
3966
|
const t = r.extensions && r.extensions[E.KHR_DRACO_MESH_COMPRESSION];
|
|
3960
|
-
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)
|
|
3961
3968
|
for (let n = 0, s = r.targets.length; n < s; n++)
|
|
3962
|
-
e += ":" +
|
|
3969
|
+
e += ":" + qt(r.targets[n]);
|
|
3963
3970
|
return e;
|
|
3964
3971
|
}
|
|
3965
|
-
function
|
|
3972
|
+
function qt(r) {
|
|
3966
3973
|
let e = "";
|
|
3967
3974
|
const t = Object.keys(r).sort();
|
|
3968
3975
|
for (let n = 0, s = t.length; n < s; n++)
|
|
3969
3976
|
e += t[n] + ":" + r[t[n]] + ";";
|
|
3970
3977
|
return e;
|
|
3971
3978
|
}
|
|
3972
|
-
function
|
|
3979
|
+
function rs(r) {
|
|
3973
3980
|
switch (r) {
|
|
3974
3981
|
case Int8Array:
|
|
3975
3982
|
return 1 / 127;
|
|
@@ -4027,7 +4034,7 @@ class Er {
|
|
|
4027
4034
|
parser: n,
|
|
4028
4035
|
userData: {}
|
|
4029
4036
|
};
|
|
4030
|
-
return
|
|
4037
|
+
return we(i, a, s), ae(a, s), Promise.all(n._invokeAll(function(l) {
|
|
4031
4038
|
return l.afterRoot && l.afterRoot(a);
|
|
4032
4039
|
})).then(function() {
|
|
4033
4040
|
for (const l of a.scenes)
|
|
@@ -4237,29 +4244,29 @@ class Er {
|
|
|
4237
4244
|
loadAccessor(e) {
|
|
4238
4245
|
const t = this, n = this.json, s = this.json.accessors[e];
|
|
4239
4246
|
if (s.bufferView === void 0 && s.sparse === void 0) {
|
|
4240
|
-
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);
|
|
4241
4248
|
return Promise.resolve(new at(A, o, l));
|
|
4242
4249
|
}
|
|
4243
4250
|
const i = [];
|
|
4244
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) {
|
|
4245
|
-
const a = o[0], l = Zt[s.type], A =
|
|
4246
|
-
let
|
|
4247
|
-
if (
|
|
4248
|
-
const
|
|
4249
|
-
let
|
|
4250
|
-
|
|
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);
|
|
4251
4258
|
} else
|
|
4252
|
-
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);
|
|
4253
4260
|
if (s.sparse !== void 0) {
|
|
4254
|
-
const
|
|
4255
|
-
a !== null && (
|
|
4256
|
-
for (let L = 0, Q =
|
|
4257
|
-
const $ =
|
|
4258
|
-
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.");
|
|
4259
4266
|
}
|
|
4260
|
-
|
|
4267
|
+
m.normalized = g;
|
|
4261
4268
|
}
|
|
4262
|
-
return
|
|
4269
|
+
return m;
|
|
4263
4270
|
});
|
|
4264
4271
|
}
|
|
4265
4272
|
/**
|
|
@@ -4284,8 +4291,8 @@ class Er {
|
|
|
4284
4291
|
return this.textureCache[l];
|
|
4285
4292
|
const A = this.loadImageSource(t, n).then(function(u) {
|
|
4286
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);
|
|
4287
|
-
const
|
|
4288
|
-
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;
|
|
4289
4296
|
}).catch(function() {
|
|
4290
4297
|
return null;
|
|
4291
4298
|
});
|
|
@@ -4300,18 +4307,18 @@ class Er {
|
|
|
4300
4307
|
if (o.bufferView !== void 0)
|
|
4301
4308
|
l = n.getDependency("bufferView", o.bufferView).then(function(c) {
|
|
4302
4309
|
A = !0;
|
|
4303
|
-
const
|
|
4304
|
-
return l = a.createObjectURL(
|
|
4310
|
+
const h = new Blob([c], { type: o.mimeType });
|
|
4311
|
+
return l = a.createObjectURL(h), l;
|
|
4305
4312
|
});
|
|
4306
4313
|
else if (o.uri === void 0)
|
|
4307
4314
|
throw new Error("THREE.GLTFLoader: Image " + e + " is missing URI and bufferView");
|
|
4308
4315
|
const u = Promise.resolve(l).then(function(c) {
|
|
4309
|
-
return new Promise(function(
|
|
4310
|
-
let
|
|
4311
|
-
t.isImageBitmapLoader === !0 && (
|
|
4312
|
-
const
|
|
4313
|
-
|
|
4314
|
-
}), 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);
|
|
4315
4322
|
});
|
|
4316
4323
|
}).then(function(c) {
|
|
4317
4324
|
return A === !0 && a.revokeObjectURL(l), ae(c, o), c.userData.mimeType = o.mimeType || wr(o.uri), c;
|
|
@@ -4394,29 +4401,29 @@ class Er {
|
|
|
4394
4401
|
o = c.getMaterialType(), A.push(c.extendParams(a, i, t));
|
|
4395
4402
|
} else {
|
|
4396
4403
|
const c = i.pbrMetallicRoughness || {};
|
|
4397
|
-
if (a.color = new
|
|
4398
|
-
const
|
|
4399
|
-
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];
|
|
4400
4407
|
}
|
|
4401
|
-
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(
|
|
4402
|
-
return
|
|
4403
|
-
}), A.push(Promise.all(this._invokeAll(function(
|
|
4404
|
-
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);
|
|
4405
4412
|
})));
|
|
4406
4413
|
}
|
|
4407
4414
|
i.doubleSided === !0 && (a.side = kt);
|
|
4408
|
-
const u = i.alphaMode ||
|
|
4409
|
-
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)) {
|
|
4410
4417
|
const c = i.normalTexture.scale;
|
|
4411
4418
|
a.normalScale.set(c, c);
|
|
4412
4419
|
}
|
|
4413
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) {
|
|
4414
4421
|
const c = i.emissiveFactor;
|
|
4415
|
-
a.emissive = new
|
|
4422
|
+
a.emissive = new B().setRGB(c[0], c[1], c[2], Ae);
|
|
4416
4423
|
}
|
|
4417
4424
|
return i.emissiveTexture !== void 0 && o !== Ne && A.push(t.assignTexture(a, "emissiveMap", i.emissiveTexture, he)), Promise.all(A).then(function() {
|
|
4418
4425
|
const c = new o(a);
|
|
4419
|
-
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;
|
|
4420
4427
|
});
|
|
4421
4428
|
}
|
|
4422
4429
|
/**
|
|
@@ -4443,7 +4450,7 @@ class Er {
|
|
|
4443
4450
|
const t = this, n = this.extensions, s = this.primitiveCache;
|
|
4444
4451
|
function i(a) {
|
|
4445
4452
|
return n[E.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(a, t).then(function(l) {
|
|
4446
|
-
return
|
|
4453
|
+
return Bs(l, a, t);
|
|
4447
4454
|
});
|
|
4448
4455
|
}
|
|
4449
4456
|
const o = [];
|
|
@@ -4452,8 +4459,8 @@ class Er {
|
|
|
4452
4459
|
if (c)
|
|
4453
4460
|
o.push(c.promise);
|
|
4454
4461
|
else {
|
|
4455
|
-
let
|
|
4456
|
-
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);
|
|
4457
4464
|
}
|
|
4458
4465
|
}
|
|
4459
4466
|
return Promise.all(o);
|
|
@@ -4473,36 +4480,36 @@ class Er {
|
|
|
4473
4480
|
}
|
|
4474
4481
|
return a.push(t.loadGeometries(o)), Promise.all(a).then(function(l) {
|
|
4475
4482
|
const A = l.slice(0, l.length - 1), u = l[l.length - 1], c = [];
|
|
4476
|
-
for (let
|
|
4477
|
-
const
|
|
4478
|
-
let
|
|
4479
|
-
const
|
|
4480
|
-
if (
|
|
4481
|
-
|
|
4482
|
-
else if (
|
|
4483
|
-
|
|
4484
|
-
else if (
|
|
4485
|
-
|
|
4486
|
-
else if (
|
|
4487
|
-
|
|
4488
|
-
else if (
|
|
4489
|
-
|
|
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);
|
|
4490
4497
|
else
|
|
4491
|
-
throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " +
|
|
4492
|
-
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);
|
|
4493
4500
|
}
|
|
4494
|
-
for (let
|
|
4495
|
-
t.associations.set(c[
|
|
4501
|
+
for (let d = 0, g = c.length; d < g; d++)
|
|
4502
|
+
t.associations.set(c[d], {
|
|
4496
4503
|
meshes: e,
|
|
4497
|
-
primitives:
|
|
4504
|
+
primitives: d
|
|
4498
4505
|
});
|
|
4499
4506
|
if (c.length === 1)
|
|
4500
|
-
return i.extensions &&
|
|
4501
|
-
const
|
|
4502
|
-
i.extensions &&
|
|
4503
|
-
for (let
|
|
4504
|
-
|
|
4505
|
-
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;
|
|
4506
4513
|
});
|
|
4507
4514
|
}
|
|
4508
4515
|
/**
|
|
@@ -4538,8 +4545,8 @@ class Er {
|
|
|
4538
4545
|
const c = o[A];
|
|
4539
4546
|
if (c) {
|
|
4540
4547
|
a.push(c);
|
|
4541
|
-
const
|
|
4542
|
-
i !== null &&
|
|
4548
|
+
const h = new fe();
|
|
4549
|
+
i !== null && h.fromArray(i.array, A * 16), l.push(h);
|
|
4543
4550
|
} else
|
|
4544
4551
|
console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', t.joints[A]);
|
|
4545
4552
|
}
|
|
@@ -4555,9 +4562,9 @@ class Er {
|
|
|
4555
4562
|
*/
|
|
4556
4563
|
loadAnimation(e) {
|
|
4557
4564
|
const t = this.json, n = this, s = t.animations[e], i = s.name ? s.name : "animation_" + e, o = [], a = [], l = [], A = [], u = [];
|
|
4558
|
-
for (let c = 0,
|
|
4559
|
-
const
|
|
4560
|
-
|
|
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));
|
|
4561
4568
|
}
|
|
4562
4569
|
return Promise.all([
|
|
4563
4570
|
Promise.all(o),
|
|
@@ -4566,18 +4573,18 @@ class Er {
|
|
|
4566
4573
|
Promise.all(A),
|
|
4567
4574
|
Promise.all(u)
|
|
4568
4575
|
]).then(function(c) {
|
|
4569
|
-
const
|
|
4570
|
-
for (let
|
|
4571
|
-
const
|
|
4572
|
-
if (
|
|
4573
|
-
|
|
4574
|
-
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, $);
|
|
4575
4582
|
if (Y)
|
|
4576
|
-
for (let
|
|
4577
|
-
|
|
4583
|
+
for (let Te = 0; Te < Y.length; Te++)
|
|
4584
|
+
p.push(Y[Te]);
|
|
4578
4585
|
}
|
|
4579
|
-
const
|
|
4580
|
-
return ae(
|
|
4586
|
+
const I = new ci(i, void 0, p);
|
|
4587
|
+
return ae(I, s), I;
|
|
4581
4588
|
});
|
|
4582
4589
|
}
|
|
4583
4590
|
createNodeMesh(e) {
|
|
@@ -4608,15 +4615,15 @@ class Er {
|
|
|
4608
4615
|
Promise.all(o),
|
|
4609
4616
|
l
|
|
4610
4617
|
]).then(function(A) {
|
|
4611
|
-
const u = A[0], c = A[1],
|
|
4612
|
-
|
|
4613
|
-
|
|
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);
|
|
4614
4621
|
});
|
|
4615
|
-
for (let
|
|
4616
|
-
u.add(c[
|
|
4622
|
+
for (let d = 0, g = c.length; d < g; d++)
|
|
4623
|
+
u.add(c[d]);
|
|
4617
4624
|
if (u.userData.pivot !== void 0 && c.length > 0) {
|
|
4618
|
-
const
|
|
4619
|
-
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;
|
|
4620
4627
|
}
|
|
4621
4628
|
return u;
|
|
4622
4629
|
});
|
|
@@ -4638,10 +4645,10 @@ class Er {
|
|
|
4638
4645
|
a.push(A);
|
|
4639
4646
|
}), this.nodeCache[e] = Promise.all(a).then(function(A) {
|
|
4640
4647
|
let u;
|
|
4641
|
-
if (i.isBone === !0 ? u = new ui() : A.length > 1 ? u = new St() : A.length === 1 ? u = A[0] : u = new
|
|
4642
|
-
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++)
|
|
4643
4650
|
u.add(A[c]);
|
|
4644
|
-
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) {
|
|
4645
4652
|
const c = new fe();
|
|
4646
4653
|
c.fromArray(i.matrix), u.applyMatrix4(c);
|
|
4647
4654
|
} else
|
|
@@ -4664,22 +4671,22 @@ class Er {
|
|
|
4664
4671
|
*/
|
|
4665
4672
|
loadScene(e) {
|
|
4666
4673
|
const t = this.extensions, n = this.json.scenes[e], s = this, i = new St();
|
|
4667
|
-
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);
|
|
4668
4675
|
const o = n.nodes || [], a = [];
|
|
4669
4676
|
for (let l = 0, A = o.length; l < A; l++)
|
|
4670
4677
|
a.push(s.getDependency("node", o[l]));
|
|
4671
4678
|
return Promise.all(a).then(function(l) {
|
|
4672
4679
|
for (let u = 0, c = l.length; u < c; u++) {
|
|
4673
|
-
const
|
|
4674
|
-
|
|
4680
|
+
const h = l[u];
|
|
4681
|
+
h.parent !== null ? i.add(Qo(h)) : i.add(h);
|
|
4675
4682
|
}
|
|
4676
4683
|
const A = (u) => {
|
|
4677
4684
|
const c = /* @__PURE__ */ new Map();
|
|
4678
|
-
for (const [
|
|
4679
|
-
(
|
|
4680
|
-
return u.traverse((
|
|
4681
|
-
const
|
|
4682
|
-
|
|
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);
|
|
4683
4690
|
}), c;
|
|
4684
4691
|
};
|
|
4685
4692
|
return s.associations = A(i), i;
|
|
@@ -4687,8 +4694,8 @@ class Er {
|
|
|
4687
4694
|
}
|
|
4688
4695
|
_createAnimationTracks(e, t, n, s, i) {
|
|
4689
4696
|
const o = [], a = e.name ? e.name : e.uuid, l = [];
|
|
4690
|
-
function A(
|
|
4691
|
-
|
|
4697
|
+
function A(d) {
|
|
4698
|
+
d.morphTargetInfluences && l.push(d.name ? d.name : d.uuid);
|
|
4692
4699
|
}
|
|
4693
4700
|
me[i.path] === me.weights ? (A(e), e.isGroup && e.children.forEach(A)) : l.push(a);
|
|
4694
4701
|
let u;
|
|
@@ -4716,22 +4723,22 @@ class Er {
|
|
|
4716
4723
|
}
|
|
4717
4724
|
break;
|
|
4718
4725
|
}
|
|
4719
|
-
const c = s.interpolation !== void 0 ? xr[s.interpolation] : en,
|
|
4720
|
-
for (let
|
|
4721
|
-
const
|
|
4722
|
-
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],
|
|
4723
4730
|
t.array,
|
|
4724
|
-
|
|
4731
|
+
h,
|
|
4725
4732
|
c
|
|
4726
4733
|
);
|
|
4727
|
-
s.interpolation === "CUBICSPLINE" && this._createCubicSplineTrackInterpolant(
|
|
4734
|
+
s.interpolation === "CUBICSPLINE" && this._createCubicSplineTrackInterpolant(f), o.push(f);
|
|
4728
4735
|
}
|
|
4729
4736
|
return o;
|
|
4730
4737
|
}
|
|
4731
4738
|
_getArrayFromAccessor(e) {
|
|
4732
4739
|
let t = e.array;
|
|
4733
4740
|
if (e.normalized) {
|
|
4734
|
-
const n =
|
|
4741
|
+
const n = rs(t.constructor), s = new Float32Array(t.length);
|
|
4735
4742
|
for (let i = 0, o = t.length; i < o; i++)
|
|
4736
4743
|
s[i] = t[i] * n;
|
|
4737
4744
|
t = s;
|
|
@@ -4754,7 +4761,7 @@ function kr(r, e, t) {
|
|
|
4754
4761
|
new T(l[0], l[1], l[2]),
|
|
4755
4762
|
new T(A[0], A[1], A[2])
|
|
4756
4763
|
), a.normalized) {
|
|
4757
|
-
const u =
|
|
4764
|
+
const u = rs(Be[a.componentType]);
|
|
4758
4765
|
s.min.multiplyScalar(u), s.max.multiplyScalar(u);
|
|
4759
4766
|
}
|
|
4760
4767
|
} else {
|
|
@@ -4769,11 +4776,11 @@ function kr(r, e, t) {
|
|
|
4769
4776
|
for (let A = 0, u = i.length; A < u; A++) {
|
|
4770
4777
|
const c = i[A];
|
|
4771
4778
|
if (c.POSITION !== void 0) {
|
|
4772
|
-
const
|
|
4773
|
-
if (
|
|
4774
|
-
if (l.setX(Math.max(Math.abs(
|
|
4775
|
-
const
|
|
4776
|
-
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);
|
|
4777
4784
|
}
|
|
4778
4785
|
a.max(l);
|
|
4779
4786
|
} else
|
|
@@ -4786,7 +4793,7 @@ function kr(r, e, t) {
|
|
|
4786
4793
|
const o = new mi();
|
|
4787
4794
|
s.getCenter(o.center), o.radius = s.min.distanceTo(s.max) / 2, r.boundingSphere = o;
|
|
4788
4795
|
}
|
|
4789
|
-
function
|
|
4796
|
+
function Bs(r, e, t) {
|
|
4790
4797
|
const n = e.attributes, s = [];
|
|
4791
4798
|
function i(o, a) {
|
|
4792
4799
|
return t.getDependency("accessor", o).then(function(l) {
|
|
@@ -4794,7 +4801,7 @@ function Zs(r, e, t) {
|
|
|
4794
4801
|
});
|
|
4795
4802
|
}
|
|
4796
4803
|
for (const o in n) {
|
|
4797
|
-
const a =
|
|
4804
|
+
const a = os[o] || o.toLowerCase();
|
|
4798
4805
|
a in r.attributes || s.push(i(n[o], a));
|
|
4799
4806
|
}
|
|
4800
4807
|
if (e.indices !== void 0 && !r.index) {
|
|
@@ -4807,8 +4814,8 @@ function Zs(r, e, t) {
|
|
|
4807
4814
|
return e.targets !== void 0 ? Sr(r, e.targets, t) : r;
|
|
4808
4815
|
});
|
|
4809
4816
|
}
|
|
4810
|
-
const
|
|
4811
|
-
class Pr extends
|
|
4817
|
+
const Vt = /* @__PURE__ */ new WeakMap();
|
|
4818
|
+
class Pr extends ls {
|
|
4812
4819
|
/**
|
|
4813
4820
|
* Constructs a new Draco loader.
|
|
4814
4821
|
*
|
|
@@ -4894,8 +4901,8 @@ class Pr extends as {
|
|
|
4894
4901
|
}
|
|
4895
4902
|
decodeGeometry(e, t) {
|
|
4896
4903
|
const n = JSON.stringify(t);
|
|
4897
|
-
if (
|
|
4898
|
-
const l =
|
|
4904
|
+
if (Vt.has(e)) {
|
|
4905
|
+
const l = Vt.get(e);
|
|
4899
4906
|
if (l.key === n)
|
|
4900
4907
|
return l.promise;
|
|
4901
4908
|
if (e.byteLength === 0)
|
|
@@ -4909,7 +4916,7 @@ class Pr extends as {
|
|
|
4909
4916
|
}))).then((l) => this._createGeometry(l.geometry));
|
|
4910
4917
|
return a.catch(() => !0).then(() => {
|
|
4911
4918
|
s && i && this._releaseTask(s, i);
|
|
4912
|
-
}),
|
|
4919
|
+
}), Vt.set(e, {
|
|
4913
4920
|
key: n,
|
|
4914
4921
|
promise: a
|
|
4915
4922
|
}), a;
|
|
@@ -4932,7 +4939,7 @@ class Pr extends as {
|
|
|
4932
4939
|
}
|
|
4933
4940
|
_assignVertexColorSpace(e, t) {
|
|
4934
4941
|
if (t !== he) return;
|
|
4935
|
-
const n = new
|
|
4942
|
+
const n = new B();
|
|
4936
4943
|
for (let s = 0, i = e.count; s < i; s++)
|
|
4937
4944
|
n.fromBufferAttribute(e, s), Pt.colorSpaceToWorking(n, he), e.setXYZ(s, n.r, n.g, n.b);
|
|
4938
4945
|
}
|
|
@@ -5014,14 +5021,14 @@ function Lr() {
|
|
|
5014
5021
|
case "decode":
|
|
5015
5022
|
const l = a.buffer, A = a.taskConfig;
|
|
5016
5023
|
e.then((u) => {
|
|
5017
|
-
const c = u.draco,
|
|
5024
|
+
const c = u.draco, h = new c.Decoder();
|
|
5018
5025
|
try {
|
|
5019
|
-
const
|
|
5020
|
-
|
|
5021
|
-
} catch (
|
|
5022
|
-
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 });
|
|
5023
5030
|
} finally {
|
|
5024
|
-
c.destroy(
|
|
5031
|
+
c.destroy(h);
|
|
5025
5032
|
}
|
|
5026
5033
|
});
|
|
5027
5034
|
break;
|
|
@@ -5029,59 +5036,59 @@ function Lr() {
|
|
|
5029
5036
|
};
|
|
5030
5037
|
function t(o, a, l, A) {
|
|
5031
5038
|
const u = A.attributeIDs, c = A.attributeTypes;
|
|
5032
|
-
let
|
|
5033
|
-
const
|
|
5034
|
-
if (
|
|
5035
|
-
|
|
5036
|
-
else if (
|
|
5037
|
-
|
|
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);
|
|
5038
5045
|
else
|
|
5039
5046
|
throw new Error("THREE.DRACOLoader: Unexpected geometry type.");
|
|
5040
|
-
if (!
|
|
5041
|
-
throw new Error("THREE.DRACOLoader: Decoding failed: " +
|
|
5042
|
-
const
|
|
5043
|
-
for (const
|
|
5044
|
-
const
|
|
5045
|
-
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;
|
|
5046
5053
|
if (A.useUniqueIDs)
|
|
5047
|
-
|
|
5054
|
+
x = u[m], I = a.GetAttributeByUniqueId(h, x);
|
|
5048
5055
|
else {
|
|
5049
|
-
if (
|
|
5050
|
-
|
|
5056
|
+
if (x = a.GetAttributeId(h, o[u[m]]), x === -1) continue;
|
|
5057
|
+
I = a.GetAttribute(h, x);
|
|
5051
5058
|
}
|
|
5052
|
-
const y = s(o, a,
|
|
5053
|
-
|
|
5059
|
+
const y = s(o, a, h, m, p, I);
|
|
5060
|
+
m === "color" && (y.vertexColorSpace = A.vertexColorSpace), f.attributes.push(y);
|
|
5054
5061
|
}
|
|
5055
|
-
return
|
|
5062
|
+
return g === o.TRIANGULAR_MESH && (f.index = n(o, a, h)), o.destroy(h), f;
|
|
5056
5063
|
}
|
|
5057
5064
|
function n(o, a, l) {
|
|
5058
|
-
const u = l.num_faces() * 3, c = u * 4,
|
|
5059
|
-
a.GetTrianglesUInt32Array(l, c,
|
|
5060
|
-
const
|
|
5061
|
-
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 };
|
|
5062
5069
|
}
|
|
5063
5070
|
function s(o, a, l, A, u, c) {
|
|
5064
|
-
const
|
|
5065
|
-
a.GetAttributeDataArrayForAllPoints(l, c,
|
|
5066
|
-
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);
|
|
5067
5074
|
let M;
|
|
5068
|
-
if (
|
|
5069
|
-
M =
|
|
5075
|
+
if (f === m)
|
|
5076
|
+
M = v.slice();
|
|
5070
5077
|
else {
|
|
5071
|
-
M = new u(
|
|
5078
|
+
M = new u(x / u.BYTES_PER_ELEMENT);
|
|
5072
5079
|
let L = 0;
|
|
5073
|
-
for (let Q = 0, $ =
|
|
5074
|
-
for (let Y = 0; Y <
|
|
5075
|
-
M[L + Y] =
|
|
5076
|
-
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;
|
|
5077
5084
|
}
|
|
5078
5085
|
}
|
|
5079
5086
|
return o._free(y), {
|
|
5080
5087
|
name: A,
|
|
5081
|
-
count:
|
|
5082
|
-
itemSize:
|
|
5088
|
+
count: h,
|
|
5089
|
+
itemSize: d,
|
|
5083
5090
|
array: M,
|
|
5084
|
-
stride:
|
|
5091
|
+
stride: p
|
|
5085
5092
|
};
|
|
5086
5093
|
}
|
|
5087
5094
|
function i(o, a) {
|
|
@@ -5132,26 +5139,26 @@ function jr(r) {
|
|
|
5132
5139
|
repeatY: l = 4,
|
|
5133
5140
|
speedX: A = 5e-4,
|
|
5134
5141
|
speedY: u = 5e-4
|
|
5135
|
-
} = r || {}, c = new w.PlaneGeometry(e, t),
|
|
5136
|
-
|
|
5137
|
-
}),
|
|
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({
|
|
5138
5145
|
color: n,
|
|
5139
5146
|
roughness: s,
|
|
5140
5147
|
metalness: i,
|
|
5141
|
-
normalMap:
|
|
5148
|
+
normalMap: d,
|
|
5142
5149
|
normalScale: new w.Vector2(o, o),
|
|
5143
5150
|
side: w.DoubleSide,
|
|
5144
5151
|
// 双面渲染,避免从侧面或底部看到黑色
|
|
5145
5152
|
transparent: !0,
|
|
5146
5153
|
opacity: 0.6
|
|
5147
|
-
}),
|
|
5148
|
-
|
|
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);
|
|
5149
5156
|
}
|
|
5150
5157
|
function Fr(r) {
|
|
5151
5158
|
const e = Uo();
|
|
5152
5159
|
if (!e)
|
|
5153
5160
|
return console.warn("请先选中一个模型,再添加数据面板"), null;
|
|
5154
|
-
const t =
|
|
5161
|
+
const t = Wt(e);
|
|
5155
5162
|
t && (t.dispose(), oo(e));
|
|
5156
5163
|
const n = [
|
|
5157
5164
|
{ label: "温度", value: "30", unit: "℃" },
|
|
@@ -5165,7 +5172,7 @@ function Fr(r) {
|
|
|
5165
5172
|
return s.attachTo(e), nn(e, s), Ro(e), s;
|
|
5166
5173
|
}
|
|
5167
5174
|
function Ur(r) {
|
|
5168
|
-
return
|
|
5175
|
+
return Kt(!0), new Promise((e, t) => {
|
|
5169
5176
|
var o;
|
|
5170
5177
|
const n = (o = r.name.split(".").pop()) == null ? void 0 : o.toLowerCase(), s = URL.createObjectURL(r);
|
|
5171
5178
|
let i;
|
|
@@ -5187,15 +5194,15 @@ function Ur(r) {
|
|
|
5187
5194
|
(a) => {
|
|
5188
5195
|
const l = n === "gltf" || n === "glb" ? a.scene : a;
|
|
5189
5196
|
l.traverse((c) => {
|
|
5190
|
-
var
|
|
5191
|
-
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);
|
|
5192
5199
|
});
|
|
5193
5200
|
const u = new w.Box3().setFromObject(l).getCenter(new w.Vector3());
|
|
5194
|
-
l.position.sub(u), Xe(l, !0),
|
|
5201
|
+
l.position.sub(u), Xe(l, !0), Kt(!1), e(l);
|
|
5195
5202
|
},
|
|
5196
5203
|
void 0,
|
|
5197
5204
|
(a) => {
|
|
5198
|
-
|
|
5205
|
+
Kt(!1), t(a);
|
|
5199
5206
|
}
|
|
5200
5207
|
);
|
|
5201
5208
|
});
|
|
@@ -5222,10 +5229,10 @@ function Hr(r) {
|
|
|
5222
5229
|
const zr = {
|
|
5223
5230
|
key: 1,
|
|
5224
5231
|
class: "toggle-placeholder"
|
|
5225
|
-
}, Gr = { class: "tree-icon" }, Kr = { class: "tree-name" },
|
|
5232
|
+
}, Gr = { class: "tree-icon" }, Kr = { class: "tree-name" }, Br = {
|
|
5226
5233
|
key: 0,
|
|
5227
5234
|
class: "tree-children"
|
|
5228
|
-
},
|
|
5235
|
+
}, Zr = /* @__PURE__ */ ve({
|
|
5229
5236
|
__name: "TreeItem",
|
|
5230
5237
|
props: {
|
|
5231
5238
|
node: {},
|
|
@@ -5234,12 +5241,12 @@ const zr = {
|
|
|
5234
5241
|
},
|
|
5235
5242
|
emits: ["select", "delete"],
|
|
5236
5243
|
setup(r, { emit: e }) {
|
|
5237
|
-
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((
|
|
5238
|
-
(
|
|
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
|
|
5239
5246
|
))), u = $e(
|
|
5240
5247
|
() => {
|
|
5241
|
-
var
|
|
5242
|
-
return ((
|
|
5248
|
+
var f;
|
|
5249
|
+
return ((f = t.selectedObject) == null ? void 0 : f.uuid) === t.node.uuid;
|
|
5243
5250
|
}
|
|
5244
5251
|
);
|
|
5245
5252
|
bn(
|
|
@@ -5253,53 +5260,53 @@ const zr = {
|
|
|
5253
5260
|
},
|
|
5254
5261
|
{ flush: "post" }
|
|
5255
5262
|
);
|
|
5256
|
-
const c = (
|
|
5257
|
-
|
|
5258
|
-
},
|
|
5259
|
-
|
|
5260
|
-
},
|
|
5261
|
-
return (
|
|
5262
|
-
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);
|
|
5263
5270
|
return R(), P("div", {
|
|
5264
5271
|
class: "tree-node",
|
|
5265
5272
|
ref_key: "nodeRef",
|
|
5266
5273
|
ref: s
|
|
5267
5274
|
}, [
|
|
5268
5275
|
C("div", {
|
|
5269
|
-
class:
|
|
5276
|
+
class: oe(["tree-item", { selected: u.value }]),
|
|
5270
5277
|
onClick: c
|
|
5271
5278
|
}, [
|
|
5272
5279
|
l.value ? (R(), P("span", {
|
|
5273
5280
|
key: 0,
|
|
5274
5281
|
class: "toggle-icon",
|
|
5275
|
-
onClick:
|
|
5276
|
-
},
|
|
5277
|
-
C("span", Gr,
|
|
5278
|
-
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),
|
|
5279
5286
|
C("button", {
|
|
5280
5287
|
class: "tree-delete",
|
|
5281
|
-
onClick:
|
|
5288
|
+
onClick: Jt(h, ["stop"])
|
|
5282
5289
|
}, "×")
|
|
5283
5290
|
], 2),
|
|
5284
|
-
a.value && l.value ? (R(), P("div",
|
|
5285
|
-
(R(!0), P(
|
|
5286
|
-
key:
|
|
5287
|
-
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,
|
|
5288
5295
|
"selected-object": r.selectedObject,
|
|
5289
5296
|
version: r.version,
|
|
5290
|
-
onSelect:
|
|
5291
|
-
onDelete:
|
|
5297
|
+
onSelect: m[1] || (m[1] = (x) => n("select", x)),
|
|
5298
|
+
onDelete: m[2] || (m[2] = (x) => n("delete", x))
|
|
5292
5299
|
}, null, 8, ["node", "selected-object", "version"]))), 128))
|
|
5293
|
-
])) :
|
|
5300
|
+
])) : Z("", !0)
|
|
5294
5301
|
], 512);
|
|
5295
5302
|
};
|
|
5296
5303
|
}
|
|
5297
|
-
}),
|
|
5304
|
+
}), Se = (r, e) => {
|
|
5298
5305
|
const t = r.__vccOpts || r;
|
|
5299
5306
|
for (const [n, s] of e)
|
|
5300
5307
|
t[n] = s;
|
|
5301
5308
|
return t;
|
|
5302
|
-
}, 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 = {
|
|
5303
5310
|
key: 0,
|
|
5304
5311
|
class: "property-group light-group"
|
|
5305
5312
|
}, ea = { class: "slider-row" }, ta = {
|
|
@@ -5308,7 +5315,7 @@ const zr = {
|
|
|
5308
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 = {
|
|
5309
5316
|
key: 0,
|
|
5310
5317
|
class: "material-hint"
|
|
5311
|
-
}, Aa = /* @__PURE__ */
|
|
5318
|
+
}, Aa = /* @__PURE__ */ ve({
|
|
5312
5319
|
__name: "TransformTab",
|
|
5313
5320
|
props: {
|
|
5314
5321
|
transform: {},
|
|
@@ -5316,72 +5323,72 @@ const zr = {
|
|
|
5316
5323
|
},
|
|
5317
5324
|
emits: ["propertyChange"],
|
|
5318
5325
|
setup(r, { emit: e }) {
|
|
5319
|
-
const t = r, n = e, s = () => n("propertyChange"), i =
|
|
5326
|
+
const t = r, n = e, s = () => n("propertyChange"), i = Qt({
|
|
5320
5327
|
metalness: 0,
|
|
5321
5328
|
roughness: 0.5,
|
|
5322
5329
|
opacity: 1
|
|
5323
|
-
}), o = W(!1), a =
|
|
5330
|
+
}), o = W(!1), a = Qt({
|
|
5324
5331
|
intensity: 1
|
|
5325
5332
|
});
|
|
5326
5333
|
function l() {
|
|
5327
5334
|
t.selectedObject && t.selectedObject.type === "DirectionalLight" && (t.selectedObject.intensity = a.intensity);
|
|
5328
5335
|
}
|
|
5329
|
-
function A(
|
|
5330
|
-
let
|
|
5331
|
-
return
|
|
5332
|
-
if (
|
|
5333
|
-
const
|
|
5334
|
-
for (const
|
|
5335
|
-
if (
|
|
5336
|
-
const
|
|
5337
|
-
|
|
5338
|
-
metalness:
|
|
5339
|
-
roughness:
|
|
5340
|
-
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
|
|
5341
5348
|
};
|
|
5342
5349
|
break;
|
|
5343
5350
|
}
|
|
5344
5351
|
}
|
|
5345
|
-
}),
|
|
5352
|
+
}), d;
|
|
5346
5353
|
}
|
|
5347
|
-
function u(
|
|
5348
|
-
let
|
|
5349
|
-
return
|
|
5350
|
-
if (
|
|
5351
|
-
const
|
|
5352
|
-
for (const
|
|
5353
|
-
|
|
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);
|
|
5354
5361
|
}
|
|
5355
|
-
}),
|
|
5362
|
+
}), g;
|
|
5356
5363
|
}
|
|
5357
5364
|
function c() {
|
|
5358
5365
|
if (t.selectedObject) {
|
|
5359
|
-
const
|
|
5366
|
+
const h = u(t.selectedObject, {
|
|
5360
5367
|
metalness: i.metalness,
|
|
5361
5368
|
roughness: i.roughness,
|
|
5362
5369
|
opacity: i.opacity
|
|
5363
5370
|
});
|
|
5364
|
-
o.value =
|
|
5371
|
+
o.value = h;
|
|
5365
5372
|
}
|
|
5366
5373
|
}
|
|
5367
|
-
return
|
|
5374
|
+
return be(
|
|
5368
5375
|
() => t.selectedObject,
|
|
5369
|
-
(
|
|
5370
|
-
if (
|
|
5371
|
-
const
|
|
5372
|
-
|
|
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);
|
|
5373
5380
|
} else
|
|
5374
5381
|
i.metalness = 0, i.roughness = 0.5, i.opacity = 1, o.value = !1;
|
|
5375
5382
|
},
|
|
5376
5383
|
{ immediate: !0 }
|
|
5377
|
-
), (
|
|
5384
|
+
), (h, d) => (R(), P("div", null, [
|
|
5378
5385
|
C("div", qr, [
|
|
5379
|
-
|
|
5386
|
+
d[17] || (d[17] = C("label", null, "位置", -1)),
|
|
5380
5387
|
C("div", Vr, [
|
|
5381
|
-
|
|
5388
|
+
d[14] || (d[14] = C("span", null, "X:", -1)),
|
|
5382
5389
|
k(C("input", {
|
|
5383
5390
|
type: "number",
|
|
5384
|
-
"onUpdate:modelValue":
|
|
5391
|
+
"onUpdate:modelValue": d[0] || (d[0] = (g) => r.transform.position.x = g),
|
|
5385
5392
|
step: "0.01",
|
|
5386
5393
|
onInput: s
|
|
5387
5394
|
}, null, 544), [
|
|
@@ -5392,10 +5399,10 @@ const zr = {
|
|
|
5392
5399
|
{ number: !0 }
|
|
5393
5400
|
]
|
|
5394
5401
|
]),
|
|
5395
|
-
|
|
5402
|
+
d[15] || (d[15] = C("span", null, "Y:", -1)),
|
|
5396
5403
|
k(C("input", {
|
|
5397
5404
|
type: "number",
|
|
5398
|
-
"onUpdate:modelValue":
|
|
5405
|
+
"onUpdate:modelValue": d[1] || (d[1] = (g) => r.transform.position.y = g),
|
|
5399
5406
|
step: "0.01",
|
|
5400
5407
|
onInput: s
|
|
5401
5408
|
}, null, 544), [
|
|
@@ -5406,10 +5413,10 @@ const zr = {
|
|
|
5406
5413
|
{ number: !0 }
|
|
5407
5414
|
]
|
|
5408
5415
|
]),
|
|
5409
|
-
|
|
5416
|
+
d[16] || (d[16] = C("span", null, "Z:", -1)),
|
|
5410
5417
|
k(C("input", {
|
|
5411
5418
|
type: "number",
|
|
5412
|
-
"onUpdate:modelValue":
|
|
5419
|
+
"onUpdate:modelValue": d[2] || (d[2] = (g) => r.transform.position.z = g),
|
|
5413
5420
|
step: "0.01",
|
|
5414
5421
|
onInput: s
|
|
5415
5422
|
}, null, 544), [
|
|
@@ -5423,12 +5430,12 @@ const zr = {
|
|
|
5423
5430
|
])
|
|
5424
5431
|
]),
|
|
5425
5432
|
C("div", Jr, [
|
|
5426
|
-
|
|
5433
|
+
d[21] || (d[21] = C("label", null, "旋转 (弧度)", -1)),
|
|
5427
5434
|
C("div", Qr, [
|
|
5428
|
-
|
|
5435
|
+
d[18] || (d[18] = C("span", null, "X:", -1)),
|
|
5429
5436
|
k(C("input", {
|
|
5430
5437
|
type: "number",
|
|
5431
|
-
"onUpdate:modelValue":
|
|
5438
|
+
"onUpdate:modelValue": d[3] || (d[3] = (g) => r.transform.rotation.x = g),
|
|
5432
5439
|
step: "0.01",
|
|
5433
5440
|
onInput: s
|
|
5434
5441
|
}, null, 544), [
|
|
@@ -5439,10 +5446,10 @@ const zr = {
|
|
|
5439
5446
|
{ number: !0 }
|
|
5440
5447
|
]
|
|
5441
5448
|
]),
|
|
5442
|
-
|
|
5449
|
+
d[19] || (d[19] = C("span", null, "Y:", -1)),
|
|
5443
5450
|
k(C("input", {
|
|
5444
5451
|
type: "number",
|
|
5445
|
-
"onUpdate:modelValue":
|
|
5452
|
+
"onUpdate:modelValue": d[4] || (d[4] = (g) => r.transform.rotation.y = g),
|
|
5446
5453
|
step: "0.01",
|
|
5447
5454
|
onInput: s
|
|
5448
5455
|
}, null, 544), [
|
|
@@ -5453,10 +5460,10 @@ const zr = {
|
|
|
5453
5460
|
{ number: !0 }
|
|
5454
5461
|
]
|
|
5455
5462
|
]),
|
|
5456
|
-
|
|
5463
|
+
d[20] || (d[20] = C("span", null, "Z:", -1)),
|
|
5457
5464
|
k(C("input", {
|
|
5458
5465
|
type: "number",
|
|
5459
|
-
"onUpdate:modelValue":
|
|
5466
|
+
"onUpdate:modelValue": d[5] || (d[5] = (g) => r.transform.rotation.z = g),
|
|
5460
5467
|
step: "0.01",
|
|
5461
5468
|
onInput: s
|
|
5462
5469
|
}, null, 544), [
|
|
@@ -5470,12 +5477,12 @@ const zr = {
|
|
|
5470
5477
|
])
|
|
5471
5478
|
]),
|
|
5472
5479
|
C("div", Yr, [
|
|
5473
|
-
|
|
5480
|
+
d[25] || (d[25] = C("label", null, "缩放", -1)),
|
|
5474
5481
|
C("div", _r, [
|
|
5475
|
-
|
|
5482
|
+
d[22] || (d[22] = C("span", null, "X:", -1)),
|
|
5476
5483
|
k(C("input", {
|
|
5477
5484
|
type: "number",
|
|
5478
|
-
"onUpdate:modelValue":
|
|
5485
|
+
"onUpdate:modelValue": d[6] || (d[6] = (g) => r.transform.scale.x = g),
|
|
5479
5486
|
step: "0.01",
|
|
5480
5487
|
onInput: s
|
|
5481
5488
|
}, null, 544), [
|
|
@@ -5486,10 +5493,10 @@ const zr = {
|
|
|
5486
5493
|
{ number: !0 }
|
|
5487
5494
|
]
|
|
5488
5495
|
]),
|
|
5489
|
-
|
|
5496
|
+
d[23] || (d[23] = C("span", null, "Y:", -1)),
|
|
5490
5497
|
k(C("input", {
|
|
5491
5498
|
type: "number",
|
|
5492
|
-
"onUpdate:modelValue":
|
|
5499
|
+
"onUpdate:modelValue": d[7] || (d[7] = (g) => r.transform.scale.y = g),
|
|
5493
5500
|
step: "0.01",
|
|
5494
5501
|
onInput: s
|
|
5495
5502
|
}, null, 544), [
|
|
@@ -5500,10 +5507,10 @@ const zr = {
|
|
|
5500
5507
|
{ number: !0 }
|
|
5501
5508
|
]
|
|
5502
5509
|
]),
|
|
5503
|
-
|
|
5510
|
+
d[24] || (d[24] = C("span", null, "Z:", -1)),
|
|
5504
5511
|
k(C("input", {
|
|
5505
5512
|
type: "number",
|
|
5506
|
-
"onUpdate:modelValue":
|
|
5513
|
+
"onUpdate:modelValue": d[8] || (d[8] = (g) => r.transform.scale.z = g),
|
|
5507
5514
|
step: "0.01",
|
|
5508
5515
|
onInput: s
|
|
5509
5516
|
}, null, 544), [
|
|
@@ -5517,15 +5524,15 @@ const zr = {
|
|
|
5517
5524
|
])
|
|
5518
5525
|
]),
|
|
5519
5526
|
r.selectedObject && r.selectedObject.type === "DirectionalLight" ? (R(), P("div", $r, [
|
|
5520
|
-
|
|
5527
|
+
d[27] || (d[27] = C("label", null, "光源属性", -1)),
|
|
5521
5528
|
C("div", ea, [
|
|
5522
|
-
|
|
5529
|
+
d[26] || (d[26] = C("span", { class: "slider-label" }, "强度", -1)),
|
|
5523
5530
|
k(C("input", {
|
|
5524
5531
|
type: "range",
|
|
5525
5532
|
min: "0",
|
|
5526
5533
|
max: "10",
|
|
5527
5534
|
step: "0.1",
|
|
5528
|
-
"onUpdate:modelValue":
|
|
5535
|
+
"onUpdate:modelValue": d[9] || (d[9] = (g) => a.intensity = g),
|
|
5529
5536
|
onInput: l
|
|
5530
5537
|
}, null, 544), [
|
|
5531
5538
|
[
|
|
@@ -5540,7 +5547,7 @@ const zr = {
|
|
|
5540
5547
|
min: "0",
|
|
5541
5548
|
max: "100",
|
|
5542
5549
|
step: "0.1",
|
|
5543
|
-
"onUpdate:modelValue":
|
|
5550
|
+
"onUpdate:modelValue": d[10] || (d[10] = (g) => a.intensity = g),
|
|
5544
5551
|
class: "intensity-input",
|
|
5545
5552
|
onInput: l
|
|
5546
5553
|
}, null, 544), [
|
|
@@ -5552,17 +5559,17 @@ const zr = {
|
|
|
5552
5559
|
]
|
|
5553
5560
|
])
|
|
5554
5561
|
])
|
|
5555
|
-
])) :
|
|
5562
|
+
])) : Z("", !0),
|
|
5556
5563
|
r.selectedObject ? (R(), P("div", ta, [
|
|
5557
|
-
|
|
5564
|
+
d[31] || (d[31] = C("label", null, "材质", -1)),
|
|
5558
5565
|
C("div", sa, [
|
|
5559
|
-
|
|
5566
|
+
d[28] || (d[28] = C("span", { class: "slider-label" }, "金属度", -1)),
|
|
5560
5567
|
k(C("input", {
|
|
5561
5568
|
type: "range",
|
|
5562
5569
|
min: "0",
|
|
5563
5570
|
max: "1",
|
|
5564
5571
|
step: "0.01",
|
|
5565
|
-
"onUpdate:modelValue":
|
|
5572
|
+
"onUpdate:modelValue": d[11] || (d[11] = (g) => i.metalness = g),
|
|
5566
5573
|
onInput: c
|
|
5567
5574
|
}, null, 544), [
|
|
5568
5575
|
[
|
|
@@ -5572,16 +5579,16 @@ const zr = {
|
|
|
5572
5579
|
{ number: !0 }
|
|
5573
5580
|
]
|
|
5574
5581
|
]),
|
|
5575
|
-
C("span", na,
|
|
5582
|
+
C("span", na, ne(i.metalness.toFixed(2)), 1)
|
|
5576
5583
|
]),
|
|
5577
5584
|
C("div", ia, [
|
|
5578
|
-
|
|
5585
|
+
d[29] || (d[29] = C("span", { class: "slider-label" }, "粗糙度", -1)),
|
|
5579
5586
|
k(C("input", {
|
|
5580
5587
|
type: "range",
|
|
5581
5588
|
min: "0",
|
|
5582
5589
|
max: "1",
|
|
5583
5590
|
step: "0.01",
|
|
5584
|
-
"onUpdate:modelValue":
|
|
5591
|
+
"onUpdate:modelValue": d[12] || (d[12] = (g) => i.roughness = g),
|
|
5585
5592
|
onInput: c
|
|
5586
5593
|
}, null, 544), [
|
|
5587
5594
|
[
|
|
@@ -5591,16 +5598,16 @@ const zr = {
|
|
|
5591
5598
|
{ number: !0 }
|
|
5592
5599
|
]
|
|
5593
5600
|
]),
|
|
5594
|
-
C("span", oa,
|
|
5601
|
+
C("span", oa, ne(i.roughness.toFixed(2)), 1)
|
|
5595
5602
|
]),
|
|
5596
5603
|
C("div", ra, [
|
|
5597
|
-
|
|
5604
|
+
d[30] || (d[30] = C("span", { class: "slider-label" }, "透明度", -1)),
|
|
5598
5605
|
k(C("input", {
|
|
5599
5606
|
type: "range",
|
|
5600
5607
|
min: "0",
|
|
5601
5608
|
max: "1",
|
|
5602
5609
|
step: "0.01",
|
|
5603
|
-
"onUpdate:modelValue":
|
|
5610
|
+
"onUpdate:modelValue": d[13] || (d[13] = (g) => i.opacity = g),
|
|
5604
5611
|
onInput: c
|
|
5605
5612
|
}, null, 544), [
|
|
5606
5613
|
[
|
|
@@ -5610,13 +5617,13 @@ const zr = {
|
|
|
5610
5617
|
{ number: !0 }
|
|
5611
5618
|
]
|
|
5612
5619
|
]),
|
|
5613
|
-
C("span", aa,
|
|
5620
|
+
C("span", aa, ne(i.opacity.toFixed(2)), 1)
|
|
5614
5621
|
]),
|
|
5615
|
-
o.value ?
|
|
5616
|
-
])) :
|
|
5622
|
+
o.value ? Z("", !0) : (R(), P("div", la, " ⚠️ 当前材质不支持金属度/粗糙度(仅支持 Standard/Phong) "))
|
|
5623
|
+
])) : Z("", !0)
|
|
5617
5624
|
]));
|
|
5618
5625
|
}
|
|
5619
|
-
}), 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 = {
|
|
5620
5627
|
key: 0,
|
|
5621
5628
|
class: "userdata-list"
|
|
5622
5629
|
}, ma = { class: "ud-key" }, ga = {
|
|
@@ -5629,40 +5636,40 @@ const zr = {
|
|
|
5629
5636
|
}, ya = { class: "ud-json-actions" }, xa = ["onClick"], va = ["onClick"], Sa = {
|
|
5630
5637
|
key: 1,
|
|
5631
5638
|
class: "userdata-empty"
|
|
5632
|
-
}, Ta = /* @__PURE__ */
|
|
5639
|
+
}, Ta = /* @__PURE__ */ ve({
|
|
5633
5640
|
__name: "UserDataTab",
|
|
5634
5641
|
props: {
|
|
5635
5642
|
selectedObject: {}
|
|
5636
5643
|
},
|
|
5637
5644
|
setup(r) {
|
|
5638
5645
|
const e = r, t = W(""), n = W(""), s = W(null), i = W(""), o = W(null), a = W([]);
|
|
5639
|
-
function l(
|
|
5640
|
-
if (
|
|
5641
|
-
if (
|
|
5642
|
-
if (Array.isArray(
|
|
5643
|
-
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;
|
|
5644
5651
|
return y === "object" ? "object" : y === "number" ? "number" : y === "boolean" ? "boolean" : "string";
|
|
5645
5652
|
}
|
|
5646
|
-
function A(
|
|
5653
|
+
function A(x) {
|
|
5647
5654
|
const y = [];
|
|
5648
|
-
if (
|
|
5649
|
-
for (const [
|
|
5650
|
-
typeof
|
|
5651
|
-
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,
|
|
5652
5659
|
value: typeof M == "object" ? JSON.stringify(M) : String(M),
|
|
5653
5660
|
rawType: l(M)
|
|
5654
5661
|
});
|
|
5655
5662
|
a.value = y;
|
|
5656
5663
|
}
|
|
5657
|
-
function u(
|
|
5658
|
-
const y =
|
|
5664
|
+
function u(x) {
|
|
5665
|
+
const y = x.trim();
|
|
5659
5666
|
if (y === "true") return !0;
|
|
5660
5667
|
if (y === "false") return !1;
|
|
5661
5668
|
if (y === "null") return null;
|
|
5662
5669
|
if (y === "undefined") return;
|
|
5663
|
-
const
|
|
5664
|
-
if (y !== "" && !isNaN(
|
|
5665
|
-
return String(
|
|
5670
|
+
const v = Number(y);
|
|
5671
|
+
if (y !== "" && !isNaN(v))
|
|
5672
|
+
return String(v) !== y ? y : v;
|
|
5666
5673
|
if (y.startsWith("{") && y.endsWith("}") || y.startsWith("[") && y.endsWith("]"))
|
|
5667
5674
|
try {
|
|
5668
5675
|
return JSON.parse(y);
|
|
@@ -5672,85 +5679,85 @@ const zr = {
|
|
|
5672
5679
|
}
|
|
5673
5680
|
function c() {
|
|
5674
5681
|
if (!e.selectedObject || !t.value.trim()) return;
|
|
5675
|
-
const
|
|
5676
|
-
if (
|
|
5682
|
+
const x = t.value.trim();
|
|
5683
|
+
if (x === "isMovable") {
|
|
5677
5684
|
t.value = "";
|
|
5678
5685
|
return;
|
|
5679
5686
|
}
|
|
5680
5687
|
const y = u(n.value);
|
|
5681
|
-
e.selectedObject.userData[
|
|
5688
|
+
e.selectedObject.userData[x] = y, A(e.selectedObject), t.value = "", n.value = "";
|
|
5682
5689
|
}
|
|
5683
|
-
function
|
|
5684
|
-
e.selectedObject && (delete e.selectedObject.userData[
|
|
5690
|
+
function h(x, y) {
|
|
5691
|
+
e.selectedObject && (delete e.selectedObject.userData[x], A(e.selectedObject));
|
|
5685
5692
|
}
|
|
5686
|
-
function
|
|
5687
|
-
return
|
|
5693
|
+
function d(x) {
|
|
5694
|
+
return x.length <= 28 ? x : x.substring(0, 28) + "…";
|
|
5688
5695
|
}
|
|
5689
|
-
function
|
|
5690
|
-
s.value =
|
|
5696
|
+
function g(x) {
|
|
5697
|
+
s.value = x;
|
|
5691
5698
|
const y = e.selectedObject;
|
|
5692
5699
|
if (!y) return;
|
|
5693
|
-
const
|
|
5700
|
+
const v = y.userData[x];
|
|
5694
5701
|
try {
|
|
5695
|
-
i.value = JSON.stringify(
|
|
5702
|
+
i.value = JSON.stringify(v, null, 2);
|
|
5696
5703
|
} catch {
|
|
5697
|
-
i.value = String(
|
|
5704
|
+
i.value = String(v);
|
|
5698
5705
|
}
|
|
5699
|
-
|
|
5706
|
+
f();
|
|
5700
5707
|
}
|
|
5701
|
-
function
|
|
5702
|
-
const
|
|
5703
|
-
if (!
|
|
5708
|
+
function f() {
|
|
5709
|
+
const x = i.value.trim();
|
|
5710
|
+
if (!x) {
|
|
5704
5711
|
o.value = null;
|
|
5705
5712
|
return;
|
|
5706
5713
|
}
|
|
5707
|
-
if (!
|
|
5714
|
+
if (!x.startsWith("{") && !x.startsWith("[")) {
|
|
5708
5715
|
o.value = "提示:当前输入不是 JSON 格式,将作为普通字符串保存";
|
|
5709
5716
|
return;
|
|
5710
5717
|
}
|
|
5711
5718
|
try {
|
|
5712
|
-
JSON.parse(
|
|
5719
|
+
JSON.parse(x), o.value = null;
|
|
5713
5720
|
} catch (y) {
|
|
5714
5721
|
o.value = "JSON 格式错误:" + y.message;
|
|
5715
5722
|
}
|
|
5716
5723
|
}
|
|
5717
|
-
function
|
|
5724
|
+
function m(x) {
|
|
5718
5725
|
const y = e.selectedObject;
|
|
5719
5726
|
if (!y) return;
|
|
5720
|
-
const
|
|
5727
|
+
const v = i.value.trim();
|
|
5721
5728
|
try {
|
|
5722
|
-
const M = JSON.parse(
|
|
5723
|
-
y.userData[
|
|
5729
|
+
const M = JSON.parse(v);
|
|
5730
|
+
y.userData[x] = M, A(y), s.value = null, i.value = "";
|
|
5724
5731
|
} catch {
|
|
5725
|
-
y.userData[
|
|
5732
|
+
y.userData[x] = v, A(y), s.value = null, i.value = "";
|
|
5726
5733
|
}
|
|
5727
5734
|
}
|
|
5728
|
-
function
|
|
5735
|
+
function p() {
|
|
5729
5736
|
s.value = null, i.value = "";
|
|
5730
5737
|
}
|
|
5731
|
-
function
|
|
5732
|
-
const
|
|
5733
|
-
if (!
|
|
5738
|
+
function I() {
|
|
5739
|
+
const x = e.selectedObject;
|
|
5740
|
+
if (!x) return;
|
|
5734
5741
|
const y = Ho();
|
|
5735
|
-
y && (
|
|
5742
|
+
y && (x.userData.closeUpView = {
|
|
5736
5743
|
x: y.position.x,
|
|
5737
5744
|
y: y.position.y,
|
|
5738
5745
|
z: y.position.z
|
|
5739
|
-
}, A(
|
|
5746
|
+
}, A(x));
|
|
5740
5747
|
}
|
|
5741
|
-
return
|
|
5748
|
+
return be(
|
|
5742
5749
|
() => e.selectedObject,
|
|
5743
|
-
(
|
|
5744
|
-
|
|
5750
|
+
(x) => {
|
|
5751
|
+
x ? A(x) : a.value = [], s.value = null, i.value = "";
|
|
5745
5752
|
},
|
|
5746
5753
|
{ immediate: !0 }
|
|
5747
|
-
), (
|
|
5754
|
+
), (x, y) => (R(), P("div", ua, [
|
|
5748
5755
|
C("div", da, [
|
|
5749
5756
|
y[3] || (y[3] = C("label", null, "userData 属性", -1)),
|
|
5750
5757
|
C("div", ha, [
|
|
5751
5758
|
k(C("input", {
|
|
5752
5759
|
type: "text",
|
|
5753
|
-
"onUpdate:modelValue": y[0] || (y[0] = (
|
|
5760
|
+
"onUpdate:modelValue": y[0] || (y[0] = (v) => t.value = v),
|
|
5754
5761
|
placeholder: "属性名",
|
|
5755
5762
|
class: "ud-input",
|
|
5756
5763
|
onKeyup: ze(c, ["enter"])
|
|
@@ -5758,10 +5765,10 @@ const zr = {
|
|
|
5758
5765
|
[D, t.value]
|
|
5759
5766
|
]),
|
|
5760
5767
|
k(C("textarea", {
|
|
5761
|
-
"onUpdate:modelValue": y[1] || (y[1] = (
|
|
5768
|
+
"onUpdate:modelValue": y[1] || (y[1] = (v) => n.value = v),
|
|
5762
5769
|
placeholder: "值",
|
|
5763
5770
|
class: "ud-input ud-textarea",
|
|
5764
|
-
onKeyup: ze(
|
|
5771
|
+
onKeyup: ze(Jt(c, ["prevent"]), ["enter"])
|
|
5765
5772
|
}, null, 40, fa), [
|
|
5766
5773
|
[D, n.value]
|
|
5767
5774
|
]),
|
|
@@ -5772,29 +5779,29 @@ const zr = {
|
|
|
5772
5779
|
}, " + ")
|
|
5773
5780
|
]),
|
|
5774
5781
|
a.value.length > 0 ? (R(), P("div", pa, [
|
|
5775
|
-
(R(!0), P(
|
|
5776
|
-
key:
|
|
5777
|
-
class:
|
|
5778
|
-
readonly:
|
|
5779
|
-
"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
|
|
5780
5787
|
}])
|
|
5781
5788
|
}, [
|
|
5782
|
-
C("span", ma,
|
|
5783
|
-
|
|
5784
|
-
s.value !==
|
|
5785
|
-
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),
|
|
5786
5793
|
C("button", {
|
|
5787
5794
|
class: "ud-btn edit-json-btn",
|
|
5788
5795
|
title: "编辑对象",
|
|
5789
|
-
onClick: (L) =>
|
|
5796
|
+
onClick: (L) => g(v.key)
|
|
5790
5797
|
}, " ✎ ", 8, Ca)
|
|
5791
|
-
], 64)) : (R(), P(
|
|
5792
|
-
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),
|
|
5793
5800
|
k(C("textarea", {
|
|
5794
5801
|
"onUpdate:modelValue": y[2] || (y[2] = (L) => i.value = L),
|
|
5795
|
-
class:
|
|
5802
|
+
class: oe(["ud-json-textarea", { "has-error": o.value }]),
|
|
5796
5803
|
rows: "3",
|
|
5797
|
-
onInput:
|
|
5804
|
+
onInput: f
|
|
5798
5805
|
}, null, 34), [
|
|
5799
5806
|
[D, i.value]
|
|
5800
5807
|
]),
|
|
@@ -5802,187 +5809,212 @@ const zr = {
|
|
|
5802
5809
|
C("button", {
|
|
5803
5810
|
class: "ud-btn apply-btn",
|
|
5804
5811
|
title: "应用修改",
|
|
5805
|
-
onClick: (L) =>
|
|
5812
|
+
onClick: (L) => m(v.key)
|
|
5806
5813
|
}, " ✓ ", 8, xa),
|
|
5807
5814
|
C("button", {
|
|
5808
5815
|
class: "ud-btn cancel-btn",
|
|
5809
5816
|
title: "取消编辑",
|
|
5810
|
-
onClick:
|
|
5817
|
+
onClick: p
|
|
5811
5818
|
}, " ✕ ")
|
|
5812
5819
|
])
|
|
5813
5820
|
], 64)),
|
|
5814
|
-
s.value !==
|
|
5821
|
+
s.value !== v.key ? (R(), P("button", {
|
|
5815
5822
|
key: 2,
|
|
5816
5823
|
class: "ud-btn del-btn",
|
|
5817
5824
|
title: "删除",
|
|
5818
|
-
onClick: (L) =>
|
|
5819
|
-
}, " ✕ ", 8, va)) :
|
|
5820
|
-
], 64)) :
|
|
5825
|
+
onClick: (L) => h(v.key)
|
|
5826
|
+
}, " ✕ ", 8, va)) : Z("", !0)
|
|
5827
|
+
], 64)) : Z("", !0)
|
|
5821
5828
|
], 2))), 128))
|
|
5822
5829
|
])) : (R(), P("div", Sa, "暂无自定义数据")),
|
|
5823
5830
|
C("button", {
|
|
5824
5831
|
class: "get-camera-btn",
|
|
5825
|
-
onClick:
|
|
5832
|
+
onClick: I
|
|
5826
5833
|
}, " 添加当前相机位置 ")
|
|
5827
5834
|
])
|
|
5828
5835
|
]));
|
|
5829
5836
|
}
|
|
5830
|
-
}), 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({
|
|
5831
5838
|
__name: "DataPanelTab",
|
|
5832
5839
|
props: {
|
|
5833
5840
|
selectedObject: {}
|
|
5834
5841
|
},
|
|
5835
5842
|
setup(r) {
|
|
5836
|
-
const e = r, t = W(""), n = W([]), s = W(!0), i = W(
|
|
5837
|
-
let
|
|
5838
|
-
function
|
|
5839
|
-
const
|
|
5840
|
-
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;
|
|
5841
5848
|
}
|
|
5842
|
-
|
|
5843
|
-
|
|
5849
|
+
be(s, (m) => {
|
|
5850
|
+
c || !u || (u.visible = m);
|
|
5851
|
+
}), be(i, (m) => {
|
|
5852
|
+
c || !u || u.setOffsetY(m);
|
|
5844
5853
|
});
|
|
5845
5854
|
function d() {
|
|
5846
|
-
|
|
5855
|
+
c || !u || (u.setTitle(t.value), u.setItems([...n.value]));
|
|
5847
5856
|
}
|
|
5848
|
-
|
|
5849
|
-
function
|
|
5850
|
-
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();
|
|
5851
5860
|
}
|
|
5852
|
-
function
|
|
5853
|
-
!
|
|
5861
|
+
function f() {
|
|
5862
|
+
!o.value.trim() || !a.value.trim() || (n.value = [
|
|
5854
5863
|
...n.value,
|
|
5855
5864
|
{
|
|
5856
|
-
label:
|
|
5857
|
-
value:
|
|
5858
|
-
unit:
|
|
5859
|
-
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
|
|
5860
5869
|
}
|
|
5861
|
-
], d(),
|
|
5870
|
+
], d(), o.value = "", a.value = "", l.value = "", A.value = "");
|
|
5862
5871
|
}
|
|
5863
|
-
return
|
|
5872
|
+
return be(
|
|
5864
5873
|
() => e.selectedObject,
|
|
5865
5874
|
() => {
|
|
5866
|
-
|
|
5867
|
-
|
|
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;
|
|
5868
5877
|
}, 0);
|
|
5869
5878
|
},
|
|
5870
5879
|
{ immediate: !0 }
|
|
5871
|
-
), (
|
|
5880
|
+
), (m, p) => (R(), P("div", wa, [
|
|
5872
5881
|
C("div", Ra, [
|
|
5873
|
-
|
|
5882
|
+
p[14] || (p[14] = C("label", null, "📊 数据面板", -1)),
|
|
5874
5883
|
C("div", Ea, [
|
|
5875
|
-
|
|
5884
|
+
p[8] || (p[8] = C("span", { class: "dp-label-sm" }, "可见性", -1)),
|
|
5876
5885
|
C("div", ka, [
|
|
5877
5886
|
C("label", Pa, [
|
|
5878
5887
|
k(C("input", {
|
|
5879
5888
|
type: "checkbox",
|
|
5880
|
-
"onUpdate:modelValue":
|
|
5889
|
+
"onUpdate:modelValue": p[0] || (p[0] = (I) => s.value = I)
|
|
5881
5890
|
}, null, 512), [
|
|
5882
5891
|
[yn, s.value]
|
|
5883
5892
|
]),
|
|
5884
|
-
|
|
5893
|
+
p[7] || (p[7] = C("span", { class: "dp-toggle-slider" }, null, -1))
|
|
5885
5894
|
]),
|
|
5886
|
-
C("span", La,
|
|
5895
|
+
C("span", La, ne(s.value ? "显示中" : "已隐藏"), 1)
|
|
5887
5896
|
])
|
|
5888
5897
|
]),
|
|
5889
5898
|
C("div", Na, [
|
|
5890
|
-
|
|
5899
|
+
p[9] || (p[9] = C("span", { class: "dp-label-sm" }, "标题", -1)),
|
|
5891
5900
|
k(C("input", {
|
|
5892
5901
|
type: "text",
|
|
5893
5902
|
class: "dp-input",
|
|
5894
|
-
"onUpdate:modelValue":
|
|
5903
|
+
"onUpdate:modelValue": p[1] || (p[1] = (I) => t.value = I),
|
|
5895
5904
|
placeholder: "面板标题"
|
|
5896
5905
|
}, null, 512), [
|
|
5897
5906
|
[D, t.value]
|
|
5898
5907
|
])
|
|
5899
5908
|
]),
|
|
5900
5909
|
C("div", Oa, [
|
|
5901
|
-
|
|
5910
|
+
p[12] || (p[12] = C("span", { class: "dp-label-sm" }, "面板离模型距离", -1)),
|
|
5902
5911
|
C("div", Da, [
|
|
5903
|
-
|
|
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", {
|
|
5904
5936
|
key: x,
|
|
5905
5937
|
class: "dp-item"
|
|
5906
5938
|
}, [
|
|
5907
5939
|
k(C("input", {
|
|
5908
5940
|
type: "text",
|
|
5909
5941
|
class: "dp-input dp-input-sm",
|
|
5910
|
-
"onUpdate:modelValue": (
|
|
5942
|
+
"onUpdate:modelValue": (y) => I.label = y,
|
|
5911
5943
|
placeholder: "标签"
|
|
5912
|
-
}, null, 8,
|
|
5913
|
-
[D,
|
|
5944
|
+
}, null, 8, Ua), [
|
|
5945
|
+
[D, I.label]
|
|
5914
5946
|
]),
|
|
5915
5947
|
k(C("input", {
|
|
5916
5948
|
type: "text",
|
|
5917
5949
|
class: "dp-input dp-input-sm",
|
|
5918
|
-
"onUpdate:modelValue": (
|
|
5950
|
+
"onUpdate:modelValue": (y) => I.value = y,
|
|
5919
5951
|
placeholder: "值"
|
|
5920
|
-
}, null, 8,
|
|
5921
|
-
[D,
|
|
5952
|
+
}, null, 8, Ha), [
|
|
5953
|
+
[D, I.value]
|
|
5922
5954
|
]),
|
|
5923
5955
|
k(C("input", {
|
|
5924
5956
|
type: "text",
|
|
5925
5957
|
class: "dp-input dp-input-xs",
|
|
5926
|
-
"onUpdate:modelValue": (
|
|
5958
|
+
"onUpdate:modelValue": (y) => I.unit = y,
|
|
5927
5959
|
placeholder: "单位"
|
|
5928
|
-
}, null, 8,
|
|
5929
|
-
[D,
|
|
5960
|
+
}, null, 8, za), [
|
|
5961
|
+
[D, I.unit]
|
|
5930
5962
|
]),
|
|
5931
5963
|
k(C("input", {
|
|
5932
5964
|
type: "text",
|
|
5933
5965
|
class: "dp-input dp-input-xs",
|
|
5934
|
-
"onUpdate:modelValue": (
|
|
5966
|
+
"onUpdate:modelValue": (y) => I.code = y,
|
|
5935
5967
|
placeholder: "编码"
|
|
5936
|
-
}, null, 8,
|
|
5937
|
-
[D,
|
|
5968
|
+
}, null, 8, Ga), [
|
|
5969
|
+
[D, I.code]
|
|
5938
5970
|
]),
|
|
5939
5971
|
C("button", {
|
|
5940
5972
|
class: "dp-btn dp-btn-del",
|
|
5941
|
-
onClick: (
|
|
5973
|
+
onClick: (y) => g(x),
|
|
5942
5974
|
title: "删除此项"
|
|
5943
|
-
}, "✕", 8,
|
|
5975
|
+
}, "✕", 8, Ka)
|
|
5944
5976
|
]))), 128))
|
|
5945
5977
|
]),
|
|
5946
|
-
C("div",
|
|
5978
|
+
C("div", Ba, [
|
|
5947
5979
|
k(C("input", {
|
|
5948
5980
|
type: "text",
|
|
5949
5981
|
class: "dp-input dp-input-sm",
|
|
5950
|
-
"onUpdate:modelValue":
|
|
5982
|
+
"onUpdate:modelValue": p[3] || (p[3] = (I) => o.value = I),
|
|
5951
5983
|
placeholder: "标签",
|
|
5952
|
-
onKeyup: ze(
|
|
5984
|
+
onKeyup: ze(f, ["enter"])
|
|
5953
5985
|
}, null, 544), [
|
|
5954
|
-
[D,
|
|
5986
|
+
[D, o.value]
|
|
5955
5987
|
]),
|
|
5956
5988
|
k(C("input", {
|
|
5957
5989
|
type: "text",
|
|
5958
5990
|
class: "dp-input dp-input-sm",
|
|
5959
|
-
"onUpdate:modelValue":
|
|
5991
|
+
"onUpdate:modelValue": p[4] || (p[4] = (I) => a.value = I),
|
|
5960
5992
|
placeholder: "值",
|
|
5961
|
-
onKeyup: ze(
|
|
5993
|
+
onKeyup: ze(f, ["enter"])
|
|
5962
5994
|
}, null, 544), [
|
|
5963
|
-
[D,
|
|
5995
|
+
[D, a.value]
|
|
5964
5996
|
]),
|
|
5965
5997
|
k(C("input", {
|
|
5966
5998
|
type: "text",
|
|
5967
5999
|
class: "dp-input dp-input-xs",
|
|
5968
|
-
"onUpdate:modelValue":
|
|
6000
|
+
"onUpdate:modelValue": p[5] || (p[5] = (I) => l.value = I),
|
|
5969
6001
|
placeholder: "单位",
|
|
5970
|
-
onKeyup: ze(
|
|
6002
|
+
onKeyup: ze(f, ["enter"])
|
|
5971
6003
|
}, null, 544), [
|
|
5972
|
-
[D,
|
|
6004
|
+
[D, l.value]
|
|
5973
6005
|
]),
|
|
5974
6006
|
k(C("input", {
|
|
5975
6007
|
type: "text",
|
|
5976
6008
|
class: "dp-input dp-input-xs",
|
|
5977
|
-
"onUpdate:modelValue":
|
|
6009
|
+
"onUpdate:modelValue": p[6] || (p[6] = (I) => A.value = I),
|
|
5978
6010
|
placeholder: "编码",
|
|
5979
|
-
onKeyup: ze(
|
|
6011
|
+
onKeyup: ze(f, ["enter"])
|
|
5980
6012
|
}, null, 544), [
|
|
5981
|
-
[D,
|
|
6013
|
+
[D, A.value]
|
|
5982
6014
|
]),
|
|
5983
6015
|
C("button", {
|
|
5984
6016
|
class: "dp-btn dp-btn-add",
|
|
5985
|
-
onClick:
|
|
6017
|
+
onClick: f,
|
|
5986
6018
|
title: "添加"
|
|
5987
6019
|
}, "+")
|
|
5988
6020
|
])
|
|
@@ -5990,8 +6022,8 @@ const zr = {
|
|
|
5990
6022
|
])
|
|
5991
6023
|
]));
|
|
5992
6024
|
}
|
|
5993
|
-
}),
|
|
5994
|
-
function
|
|
6025
|
+
}), Xa = /* @__PURE__ */ Se(Za, [["__scopeId", "data-v-0e6261f3"]]);
|
|
6026
|
+
function qa(r) {
|
|
5995
6027
|
const e = W(/* @__PURE__ */ new Set()), t = (s) => {
|
|
5996
6028
|
const i = new Set(e.value);
|
|
5997
6029
|
i.has(s) ? i.delete(s) : i.add(s), e.value = i;
|
|
@@ -6003,7 +6035,7 @@ function Za(r) {
|
|
|
6003
6035
|
i.add(o.uuid), o = o.parent;
|
|
6004
6036
|
e.value = i;
|
|
6005
6037
|
};
|
|
6006
|
-
return
|
|
6038
|
+
return be(
|
|
6007
6039
|
r,
|
|
6008
6040
|
(s) => {
|
|
6009
6041
|
s && n(s);
|
|
@@ -6011,22 +6043,22 @@ function Za(r) {
|
|
|
6011
6043
|
{ immediate: !0 }
|
|
6012
6044
|
), { expandedSet: e, toggleExpand: t };
|
|
6013
6045
|
}
|
|
6014
|
-
const
|
|
6046
|
+
const Va = {
|
|
6015
6047
|
key: 0,
|
|
6016
6048
|
class: "property-panel"
|
|
6017
|
-
},
|
|
6049
|
+
}, Ja = { class: "property-group tree-group" }, Qa = { class: "tree-container" }, Ya = {
|
|
6018
6050
|
key: 0,
|
|
6019
6051
|
class: "tree-empty"
|
|
6020
|
-
},
|
|
6052
|
+
}, _a = { class: "property-group" }, $a = { class: "transform-mode-row" }, el = {
|
|
6021
6053
|
key: 0,
|
|
6022
6054
|
class: "tabs"
|
|
6023
|
-
},
|
|
6055
|
+
}, tl = {
|
|
6024
6056
|
key: 1,
|
|
6025
6057
|
class: "tab-content"
|
|
6026
|
-
},
|
|
6058
|
+
}, sl = {
|
|
6027
6059
|
key: 1,
|
|
6028
6060
|
class: "property-panel empty"
|
|
6029
|
-
},
|
|
6061
|
+
}, nl = /* @__PURE__ */ ve({
|
|
6030
6062
|
__name: "index",
|
|
6031
6063
|
props: {
|
|
6032
6064
|
transform: {},
|
|
@@ -6036,134 +6068,134 @@ const Ba = {
|
|
|
6036
6068
|
emits: ["propertyChange", "treeSelect", "treeDelete", "transformModeChange"],
|
|
6037
6069
|
setup(r, { emit: e }) {
|
|
6038
6070
|
const t = r, n = e, s = W("translate");
|
|
6039
|
-
function i(
|
|
6040
|
-
s.value =
|
|
6071
|
+
function i(g) {
|
|
6072
|
+
s.value = g, n("transformModeChange", g);
|
|
6041
6073
|
}
|
|
6042
6074
|
const o = () => n("propertyChange"), a = W("transform"), l = $e(() => {
|
|
6043
|
-
var
|
|
6044
|
-
return !!(t.selectedObject && ((
|
|
6045
|
-
}), A = W(0), u = xn(t, "selectedObject"), { expandedSet: c, toggleExpand:
|
|
6046
|
-
vn("treeExpand", { expandedSet: c, toggleExpand:
|
|
6047
|
-
const
|
|
6048
|
-
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);
|
|
6049
6081
|
};
|
|
6050
|
-
return (
|
|
6051
|
-
C("div",
|
|
6052
|
-
|
|
6053
|
-
C("div",
|
|
6054
|
-
(R(!0), P(
|
|
6055
|
-
key:
|
|
6056
|
-
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,
|
|
6057
6089
|
"selected-object": r.selectedObject,
|
|
6058
6090
|
version: A.value,
|
|
6059
|
-
onSelect:
|
|
6060
|
-
onDelete:
|
|
6091
|
+
onSelect: f[0] || (f[0] = (p) => n("treeSelect", p)),
|
|
6092
|
+
onDelete: d
|
|
6061
6093
|
}, null, 8, ["node", "selected-object", "version"]))), 128)),
|
|
6062
|
-
r.treeData.length === 0 ? (R(), P("div",
|
|
6094
|
+
r.treeData.length === 0 ? (R(), P("div", Ya, "暂无物体")) : Z("", !0)
|
|
6063
6095
|
])
|
|
6064
6096
|
]),
|
|
6065
|
-
C("div",
|
|
6066
|
-
|
|
6067
|
-
C("div",
|
|
6097
|
+
C("div", _a, [
|
|
6098
|
+
f[8] || (f[8] = C("label", null, "全局属性", -1)),
|
|
6099
|
+
C("div", $a, [
|
|
6068
6100
|
C("button", {
|
|
6069
|
-
class:
|
|
6101
|
+
class: oe(["mode-btn", { active: s.value === "translate" }]),
|
|
6070
6102
|
title: "移动 (W)",
|
|
6071
|
-
onClick:
|
|
6103
|
+
onClick: f[1] || (f[1] = (m) => i("translate"))
|
|
6072
6104
|
}, " ↕ 移动 ", 2),
|
|
6073
6105
|
C("button", {
|
|
6074
|
-
class:
|
|
6106
|
+
class: oe(["mode-btn", { active: s.value === "rotate" }]),
|
|
6075
6107
|
title: "旋转 (E)",
|
|
6076
|
-
onClick:
|
|
6108
|
+
onClick: f[2] || (f[2] = (m) => i("rotate"))
|
|
6077
6109
|
}, " ↻ 旋转 ", 2),
|
|
6078
6110
|
C("button", {
|
|
6079
|
-
class:
|
|
6111
|
+
class: oe(["mode-btn", { active: s.value === "scale" }]),
|
|
6080
6112
|
title: "缩放 (R)",
|
|
6081
|
-
onClick:
|
|
6113
|
+
onClick: f[3] || (f[3] = (m) => i("scale"))
|
|
6082
6114
|
}, " ⤡ 缩放 ", 2)
|
|
6083
6115
|
])
|
|
6084
6116
|
]),
|
|
6085
|
-
r.selectedObject ? (R(), P("div",
|
|
6117
|
+
r.selectedObject ? (R(), P("div", el, [
|
|
6086
6118
|
C("button", {
|
|
6087
|
-
class:
|
|
6088
|
-
onClick:
|
|
6119
|
+
class: oe(["tab-btn", { active: a.value === "transform" }]),
|
|
6120
|
+
onClick: f[4] || (f[4] = (m) => a.value = "transform")
|
|
6089
6121
|
}, " 🔄 变换 ", 2),
|
|
6090
6122
|
C("button", {
|
|
6091
|
-
class:
|
|
6092
|
-
onClick:
|
|
6123
|
+
class: oe(["tab-btn", { active: a.value === "userdata" }]),
|
|
6124
|
+
onClick: f[5] || (f[5] = (m) => a.value = "userdata")
|
|
6093
6125
|
}, " 📋 自定义数据 ", 2),
|
|
6094
6126
|
l.value ? (R(), P("button", {
|
|
6095
6127
|
key: 0,
|
|
6096
|
-
class:
|
|
6097
|
-
onClick:
|
|
6098
|
-
}, " 📊 数据面板 ", 2)) :
|
|
6099
|
-
])) :
|
|
6100
|
-
r.selectedObject ? (R(), P("div",
|
|
6101
|
-
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, {
|
|
6102
6134
|
transform: r.transform,
|
|
6103
6135
|
"selected-object": r.selectedObject,
|
|
6104
6136
|
onPropertyChange: o
|
|
6105
6137
|
}, null, 8, ["transform", "selected-object"]), [
|
|
6106
6138
|
[Le, a.value === "transform"]
|
|
6107
6139
|
]),
|
|
6108
|
-
k(
|
|
6140
|
+
k(Ut(Ma, { "selected-object": r.selectedObject }, null, 8, ["selected-object"]), [
|
|
6109
6141
|
[Le, a.value === "userdata"]
|
|
6110
6142
|
]),
|
|
6111
|
-
k(
|
|
6143
|
+
k(Ut(Xa, { "selected-object": r.selectedObject }, null, 8, ["selected-object"]), [
|
|
6112
6144
|
[Le, a.value === "datapanel"]
|
|
6113
6145
|
])
|
|
6114
|
-
])) :
|
|
6115
|
-
])) : (R(), P("div",
|
|
6146
|
+
])) : Z("", !0)
|
|
6147
|
+
])) : (R(), P("div", sl, [...f[9] || (f[9] = [
|
|
6116
6148
|
C("p", null, "未选中任何模型", -1)
|
|
6117
6149
|
])]));
|
|
6118
6150
|
}
|
|
6119
|
-
}),
|
|
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({
|
|
6120
6152
|
__name: "TopBar",
|
|
6121
6153
|
emits: ["addModel", "importModel"],
|
|
6122
6154
|
setup(r, { emit: e }) {
|
|
6123
6155
|
const t = W(!1), n = W(!1), s = W(!1), i = W(!1), o = e, a = W(null), l = () => {
|
|
6124
|
-
var
|
|
6125
|
-
return (
|
|
6126
|
-
}, A = (
|
|
6127
|
-
const
|
|
6128
|
-
|
|
6129
|
-
}, u = () => console.log("撤销"), c = () => console.log("删除物体"),
|
|
6130
|
-
const
|
|
6131
|
-
console.log(JSON.parse(await
|
|
6132
|
-
},
|
|
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 = () => {
|
|
6133
6165
|
if (!localStorage.getItem("test_id")) return localStorage.setItem("test_id", "123");
|
|
6134
6166
|
ln(localStorage.getItem("test_id"));
|
|
6135
|
-
},
|
|
6136
|
-
return (
|
|
6137
|
-
C("div",
|
|
6167
|
+
}, g = () => on();
|
|
6168
|
+
return (f, m) => (R(), P("div", ol, [
|
|
6169
|
+
C("div", rl, [
|
|
6138
6170
|
C("div", {
|
|
6139
6171
|
class: "dropdown-wrapper",
|
|
6140
|
-
onMouseenter:
|
|
6141
|
-
onMouseleave:
|
|
6172
|
+
onMouseenter: m[9] || (m[9] = (p) => n.value = !0),
|
|
6173
|
+
onMouseleave: m[10] || (m[10] = (p) => n.value = !1)
|
|
6142
6174
|
}, [
|
|
6143
|
-
|
|
6144
|
-
k(C("div",
|
|
6175
|
+
m[15] || (m[15] = C("button", { class: "menu-btn" }, "添加", -1)),
|
|
6176
|
+
k(C("div", al, [
|
|
6145
6177
|
C("div", {
|
|
6146
6178
|
class: "menu-item",
|
|
6147
6179
|
onClick: u
|
|
6148
6180
|
}, "组"),
|
|
6149
6181
|
C("div", {
|
|
6150
6182
|
class: "menu-item dropdown-wrapper sub-trigger",
|
|
6151
|
-
onMouseenter:
|
|
6152
|
-
onMouseleave:
|
|
6183
|
+
onMouseenter: m[3] || (m[3] = (p) => s.value = !0),
|
|
6184
|
+
onMouseleave: m[4] || (m[4] = (p) => s.value = !1)
|
|
6153
6185
|
}, [
|
|
6154
|
-
|
|
6155
|
-
k(C("div",
|
|
6186
|
+
m[13] || (m[13] = C("span", null, "网格", -1)),
|
|
6187
|
+
k(C("div", ll, [
|
|
6156
6188
|
C("div", {
|
|
6157
6189
|
class: "menu-item",
|
|
6158
|
-
onClick:
|
|
6190
|
+
onClick: m[0] || (m[0] = (p) => o("addModel", "box"))
|
|
6159
6191
|
}, " 正方体 "),
|
|
6160
6192
|
C("div", {
|
|
6161
6193
|
class: "menu-item",
|
|
6162
|
-
onClick:
|
|
6194
|
+
onClick: m[1] || (m[1] = (p) => o("addModel", "sphere"))
|
|
6163
6195
|
}, " 球体 "),
|
|
6164
6196
|
C("div", {
|
|
6165
6197
|
class: "menu-item",
|
|
6166
|
-
onClick:
|
|
6198
|
+
onClick: m[2] || (m[2] = (p) => o("addModel", "waterPlane"))
|
|
6167
6199
|
}, " 水面 "),
|
|
6168
6200
|
C("div", {
|
|
6169
6201
|
class: "menu-item",
|
|
@@ -6175,14 +6207,14 @@ const Ba = {
|
|
|
6175
6207
|
], 32),
|
|
6176
6208
|
C("div", {
|
|
6177
6209
|
class: "menu-item dropdown-wrapper sub-trigger",
|
|
6178
|
-
onMouseenter:
|
|
6179
|
-
onMouseleave:
|
|
6210
|
+
onMouseenter: m[6] || (m[6] = (p) => i.value = !0),
|
|
6211
|
+
onMouseleave: m[7] || (m[7] = (p) => i.value = !1)
|
|
6180
6212
|
}, [
|
|
6181
|
-
|
|
6182
|
-
k(C("div",
|
|
6213
|
+
m[14] || (m[14] = C("span", null, "光源", -1)),
|
|
6214
|
+
k(C("div", Al, [
|
|
6183
6215
|
C("div", {
|
|
6184
6216
|
class: "menu-item",
|
|
6185
|
-
onClick:
|
|
6217
|
+
onClick: m[5] || (m[5] = (p) => o("addModel", "directionalLight"))
|
|
6186
6218
|
}, " 平行光 ")
|
|
6187
6219
|
], 512), [
|
|
6188
6220
|
[Le, i.value]
|
|
@@ -6194,7 +6226,7 @@ const Ba = {
|
|
|
6194
6226
|
}, "摄像机"),
|
|
6195
6227
|
C("div", {
|
|
6196
6228
|
class: "menu-item",
|
|
6197
|
-
onClick:
|
|
6229
|
+
onClick: m[8] || (m[8] = (p) => o("addModel", "dataPanel"))
|
|
6198
6230
|
}, " 数据面板 ")
|
|
6199
6231
|
], 512), [
|
|
6200
6232
|
[Le, n.value]
|
|
@@ -6202,29 +6234,29 @@ const Ba = {
|
|
|
6202
6234
|
], 32),
|
|
6203
6235
|
C("div", {
|
|
6204
6236
|
class: "dropdown-wrapper",
|
|
6205
|
-
onMouseenter:
|
|
6206
|
-
onMouseleave:
|
|
6237
|
+
onMouseenter: m[11] || (m[11] = (p) => t.value = !0),
|
|
6238
|
+
onMouseleave: m[12] || (m[12] = (p) => t.value = !1)
|
|
6207
6239
|
}, [
|
|
6208
|
-
|
|
6209
|
-
k(C("div",
|
|
6240
|
+
m[16] || (m[16] = C("button", { class: "menu-btn" }, "帮助", -1)),
|
|
6241
|
+
k(C("div", cl, [
|
|
6210
6242
|
C("div", {
|
|
6211
6243
|
class: "menu-item",
|
|
6212
|
-
onClick:
|
|
6244
|
+
onClick: h
|
|
6213
6245
|
}, "获取场景"),
|
|
6214
6246
|
C("div", {
|
|
6215
6247
|
class: "menu-item",
|
|
6216
|
-
onClick:
|
|
6248
|
+
onClick: d
|
|
6217
6249
|
}, "镜头拉近"),
|
|
6218
6250
|
C("div", {
|
|
6219
6251
|
class: "menu-item",
|
|
6220
|
-
onClick:
|
|
6252
|
+
onClick: g
|
|
6221
6253
|
}, " 重置相机位置 ")
|
|
6222
6254
|
], 512), [
|
|
6223
6255
|
[Le, t.value]
|
|
6224
6256
|
])
|
|
6225
6257
|
], 32)
|
|
6226
6258
|
]),
|
|
6227
|
-
|
|
6259
|
+
m[17] || (m[17] = C("div", { class: "right-section" }, [
|
|
6228
6260
|
C("span", { class: "app-title" }, "3D 模型编辑器")
|
|
6229
6261
|
], -1)),
|
|
6230
6262
|
C("input", {
|
|
@@ -6237,10 +6269,10 @@ const Ba = {
|
|
|
6237
6269
|
}, null, 544)
|
|
6238
6270
|
]));
|
|
6239
6271
|
}
|
|
6240
|
-
}),
|
|
6272
|
+
}), dl = /* @__PURE__ */ Se(ul, [["__scopeId", "data-v-45df3361"]]), hl = { class: "bottom-bar" }, fl = /* @__PURE__ */ ve({
|
|
6241
6273
|
__name: "BottomBar",
|
|
6242
6274
|
setup(r) {
|
|
6243
|
-
return (e, t) => (R(), P("div",
|
|
6275
|
+
return (e, t) => (R(), P("div", hl, [...t[0] || (t[0] = [
|
|
6244
6276
|
C("div", { class: "status-left" }, [
|
|
6245
6277
|
C("span", null, "就绪")
|
|
6246
6278
|
], -1),
|
|
@@ -6249,10 +6281,10 @@ const Ba = {
|
|
|
6249
6281
|
], -1)
|
|
6250
6282
|
])]));
|
|
6251
6283
|
}
|
|
6252
|
-
}),
|
|
6284
|
+
}), pl = /* @__PURE__ */ Se(fl, [["__scopeId", "data-v-3427bb27"]]), ml = { class: "app-layout" }, gl = {
|
|
6253
6285
|
key: 0,
|
|
6254
6286
|
class: "loading-overlay"
|
|
6255
|
-
},
|
|
6287
|
+
}, bl = /* @__PURE__ */ ve({
|
|
6256
6288
|
__name: "DrawingBoard",
|
|
6257
6289
|
props: {
|
|
6258
6290
|
mode: { default: "edit" },
|
|
@@ -6260,97 +6292,97 @@ const Ba = {
|
|
|
6260
6292
|
},
|
|
6261
6293
|
setup(r) {
|
|
6262
6294
|
const e = r, t = W(!1);
|
|
6263
|
-
yo((
|
|
6264
|
-
t.value =
|
|
6295
|
+
yo((p) => {
|
|
6296
|
+
t.value = p;
|
|
6265
6297
|
});
|
|
6266
|
-
const n = ps(null), s =
|
|
6298
|
+
const n = ps(null), s = Qt({
|
|
6267
6299
|
position: { x: 0, y: 0, z: 0 },
|
|
6268
6300
|
rotation: { x: 0, y: 0, z: 0 },
|
|
6269
6301
|
scale: { x: 1, y: 1, z: 1 }
|
|
6270
|
-
}), i = (
|
|
6271
|
-
s.position.x = Number(
|
|
6272
|
-
}, o = (
|
|
6273
|
-
|
|
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(
|
|
6274
6306
|
s.position.x,
|
|
6275
6307
|
s.position.y,
|
|
6276
6308
|
s.position.z
|
|
6277
|
-
),
|
|
6309
|
+
), p.rotation.set(
|
|
6278
6310
|
s.rotation.x,
|
|
6279
6311
|
s.rotation.y,
|
|
6280
6312
|
s.rotation.z
|
|
6281
|
-
),
|
|
6313
|
+
), p.scale.set(s.scale.x, s.scale.y, s.scale.z);
|
|
6282
6314
|
};
|
|
6283
|
-
Do((
|
|
6284
|
-
n.value =
|
|
6285
|
-
}), Wo((
|
|
6286
|
-
i(
|
|
6315
|
+
Do((p) => {
|
|
6316
|
+
n.value = p, p && i(p);
|
|
6317
|
+
}), Wo((p) => {
|
|
6318
|
+
i(p);
|
|
6287
6319
|
});
|
|
6288
6320
|
const a = () => {
|
|
6289
6321
|
if (n.value && (o(n.value), n.value.type === "DirectionalLight")) {
|
|
6290
|
-
const
|
|
6291
|
-
|
|
6322
|
+
const p = n.value.userData.helper;
|
|
6323
|
+
p && typeof p.update == "function" && p.update();
|
|
6292
6324
|
}
|
|
6293
|
-
}, l = (
|
|
6325
|
+
}, l = (p) => Hr(p), A = async (p) => {
|
|
6294
6326
|
try {
|
|
6295
|
-
await Ur(
|
|
6296
|
-
} catch (
|
|
6297
|
-
console.error("导入失败:",
|
|
6327
|
+
await Ur(p);
|
|
6328
|
+
} catch (I) {
|
|
6329
|
+
console.error("导入失败:", I), alert("导入失败:" + I.message);
|
|
6298
6330
|
}
|
|
6299
6331
|
}, u = ps([]);
|
|
6300
|
-
jo((
|
|
6301
|
-
u.value =
|
|
6332
|
+
jo((p) => {
|
|
6333
|
+
u.value = p;
|
|
6302
6334
|
});
|
|
6303
6335
|
const c = () => {
|
|
6304
|
-
const
|
|
6305
|
-
|
|
6306
|
-
},
|
|
6307
|
-
xo(
|
|
6308
|
-
},
|
|
6309
|
-
|
|
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();
|
|
6310
6342
|
};
|
|
6311
6343
|
return Sn(() => {
|
|
6312
|
-
|
|
6344
|
+
m(), f.value && ro(f.value);
|
|
6313
6345
|
}), Tn(() => {
|
|
6314
6346
|
console.log("endset_three_editor destroy"), Ko();
|
|
6315
|
-
}), (
|
|
6316
|
-
t.value ? (R(), P("div",
|
|
6347
|
+
}), (p, I) => (R(), P("div", ml, [
|
|
6348
|
+
t.value ? (R(), P("div", gl, [...I[0] || (I[0] = [
|
|
6317
6349
|
C("div", { class: "loading-spinner" }, null, -1),
|
|
6318
6350
|
C("div", { class: "loading-text" }, "加载中...", -1)
|
|
6319
|
-
])])) :
|
|
6320
|
-
r.mode === "edit" ? (R(), nt(
|
|
6351
|
+
])])) : Z("", !0),
|
|
6352
|
+
r.mode === "edit" ? (R(), nt(dl, {
|
|
6321
6353
|
key: 1,
|
|
6322
6354
|
onAddModel: l,
|
|
6323
6355
|
onImportModel: A
|
|
6324
|
-
})) :
|
|
6356
|
+
})) : Z("", !0),
|
|
6325
6357
|
C("div", {
|
|
6326
|
-
class:
|
|
6358
|
+
class: oe(`editor-container editor-container-mode-${r.mode}`)
|
|
6327
6359
|
}, [
|
|
6328
6360
|
C("div", {
|
|
6329
|
-
class:
|
|
6361
|
+
class: oe(`canvas canvas-mode-${r.mode}`),
|
|
6330
6362
|
ref_key: "containerRef",
|
|
6331
|
-
ref:
|
|
6363
|
+
ref: f
|
|
6332
6364
|
}, null, 2),
|
|
6333
|
-
r.mode === "edit" ? (R(), nt(
|
|
6365
|
+
r.mode === "edit" ? (R(), nt(il, {
|
|
6334
6366
|
key: 0,
|
|
6335
6367
|
transform: s,
|
|
6336
6368
|
"tree-data": u.value,
|
|
6337
6369
|
"selected-object": n.value,
|
|
6338
6370
|
onPropertyChange: a,
|
|
6339
|
-
onTreeSelect:
|
|
6340
|
-
onTreeDelete:
|
|
6341
|
-
onTransformModeChange:
|
|
6342
|
-
}, 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)
|
|
6343
6375
|
], 2),
|
|
6344
|
-
r.mode === "edit" ? (R(), nt(
|
|
6376
|
+
r.mode === "edit" ? (R(), nt(pl, { key: 2 })) : Z("", !0)
|
|
6345
6377
|
]));
|
|
6346
6378
|
}
|
|
6347
|
-
}),
|
|
6379
|
+
}), wl = /* @__PURE__ */ Se(bl, [["__scopeId", "data-v-f80f67f2"]]);
|
|
6348
6380
|
export {
|
|
6349
|
-
|
|
6381
|
+
pl as BottomBar,
|
|
6350
6382
|
dt as DataPanel,
|
|
6351
|
-
|
|
6352
|
-
|
|
6353
|
-
|
|
6383
|
+
wl as DrawingBoard,
|
|
6384
|
+
il as PropertyPanel,
|
|
6385
|
+
dl as TopBar,
|
|
6354
6386
|
Xr as TreeItem,
|
|
6355
6387
|
Or as addBox,
|
|
6356
6388
|
Fr as addDataPanel,
|
|
@@ -6364,11 +6396,11 @@ export {
|
|
|
6364
6396
|
Ao as disposeCSS2DRenderer,
|
|
6365
6397
|
zo as exportSceneToJSON,
|
|
6366
6398
|
To as focusOnObject,
|
|
6367
|
-
|
|
6399
|
+
vl as getCSS2DRenderer,
|
|
6368
6400
|
Ho as getCamera,
|
|
6369
|
-
|
|
6370
|
-
|
|
6371
|
-
|
|
6401
|
+
Wt as getDataPanel,
|
|
6402
|
+
Ml as getRenderer,
|
|
6403
|
+
Tl as getScene,
|
|
6372
6404
|
Fo as getSceneObjects,
|
|
6373
6405
|
Uo as getSelectedObject,
|
|
6374
6406
|
Ur as importModelFromFile,
|
|
@@ -6384,12 +6416,12 @@ export {
|
|
|
6384
6416
|
lo as resizeCSS2DRenderer,
|
|
6385
6417
|
ln as selectModelHandle,
|
|
6386
6418
|
us as selectObject,
|
|
6387
|
-
|
|
6419
|
+
Kt as setLoading,
|
|
6388
6420
|
yo as setLoadingCallback,
|
|
6389
6421
|
Do as setSelectedObjectCallback,
|
|
6390
6422
|
Wo as setTransformChangeCallback,
|
|
6391
6423
|
xo as setTransformMode,
|
|
6392
|
-
|
|
6393
|
-
|
|
6424
|
+
Sl as updateDataPanelValue,
|
|
6425
|
+
qa as useTreeExpand
|
|
6394
6426
|
};
|
|
6395
6427
|
//# sourceMappingURL=three-editor.es.js.map
|