@planara/core 2.6.1 → 2.7.1
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/core/editor-renderer.d.ts +7 -0
- package/dist/core/editor-renderer.d.ts.map +1 -1
- package/dist/handlers/tool/base-tool-handler.d.ts +1 -0
- package/dist/handlers/tool/base-tool-handler.d.ts.map +1 -1
- package/dist/hub/app-hub.d.ts +7 -2
- package/dist/hub/app-hub.d.ts.map +1 -1
- package/dist/hub/editor-hub.d.ts +6 -2
- package/dist/hub/editor-hub.d.ts.map +1 -1
- package/dist/index.cjs.js +2 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +354 -299
- package/dist/index.full.d.ts +73 -3
- package/dist/index.public.d.ts +69 -3
- package/dist/index.umd.js +2 -2
- package/dist/interfaces/api/transform-helpers-api.d.ts +4 -3
- package/dist/interfaces/api/transform-helpers-api.d.ts.map +1 -1
- package/dist/interfaces/store/editor-store.d.ts +10 -2
- package/dist/interfaces/store/editor-store.d.ts.map +1 -1
- package/dist/managers/scene/scene-manager.d.ts.map +1 -1
- package/dist/store/index.d.ts +10 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/types/listener/selected-listener.d.ts +1 -0
- package/dist/types/listener/selected-listener.d.ts.map +1 -1
- package/dist/types/listener/transform-listener.d.ts +3 -0
- package/dist/types/listener/transform-listener.d.ts.map +1 -0
- package/dist/utils/helpers.d.ts +3 -0
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/renderer-api.d.ts +4 -1
- package/dist/utils/renderer-api.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/index.es.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
2
|
import * as a from "three";
|
|
3
|
-
import { Controls as Ue, Vector3 as
|
|
4
|
-
import { FigureType as
|
|
5
|
-
import { SymmetricAxesHelper as
|
|
6
|
-
import { injectable as u, inject as h, injectAll as W, container as
|
|
7
|
-
import { EventEmitter as
|
|
8
|
-
import { makeAutoObservable as
|
|
9
|
-
const
|
|
10
|
-
[
|
|
11
|
-
[
|
|
12
|
-
[
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
[
|
|
18
|
-
[
|
|
19
|
-
[
|
|
3
|
+
import { Controls as Ue, Vector3 as T, MOUSE as I, TOUCH as R, Quaternion as ve, Spherical as ye, Vector2 as w, Ray as We, Plane as Fe, MathUtils as Ze } from "three";
|
|
4
|
+
import { FigureType as S, SelectMode as v, Figure as $e, DisplayMode as V, DEFAULT_TOOL_RULES as Me, ToolType as C, SceneMode as N } from "@planara/types";
|
|
5
|
+
import { SymmetricAxesHelper as Be, OrbitWithState as Xe, CameraAxesGizmo as Ge, ModelingTransformControls as Ke } from "@planara/three";
|
|
6
|
+
import { injectable as u, inject as h, injectAll as W, container as qe } from "tsyringe";
|
|
7
|
+
import { EventEmitter as Qe } from "events";
|
|
8
|
+
import { makeAutoObservable as Je } from "mobx";
|
|
9
|
+
const et = {
|
|
10
|
+
[S.Plane]: () => new a.PlaneGeometry(1, 1, 1, 1),
|
|
11
|
+
[S.Cube]: () => new a.BoxGeometry(1, 1, 1, 1, 1, 1),
|
|
12
|
+
[S.UVSphere]: () => new a.SphereGeometry(0.5, 32, 16),
|
|
13
|
+
[S.Icosphere]: () => new a.IcosahedronGeometry(0.5, 0),
|
|
14
|
+
[S.Cylinder]: () => new a.CylinderGeometry(0.5, 0.5, 1, 32, 1, !1),
|
|
15
|
+
[S.Cone]: () => new a.ConeGeometry(0.5, 1, 32, 1, !1),
|
|
16
|
+
[S.Torus]: () => new a.TorusGeometry(0.5, 0.2, 16, 64),
|
|
17
|
+
[S.Circle]: () => new a.CircleGeometry(0.5, 32),
|
|
18
|
+
[S.Sphere]: () => new a.SphereGeometry(0.5, 32, 16),
|
|
19
|
+
[S.Custom]: function() {
|
|
20
20
|
throw new Error("Custom geometry is not generated here.");
|
|
21
21
|
}
|
|
22
|
-
},
|
|
22
|
+
}, Ie = new a.MeshStandardMaterial({
|
|
23
23
|
color: 12566463,
|
|
24
24
|
metalness: 0,
|
|
25
25
|
roughness: 0.6
|
|
26
|
-
}),
|
|
27
|
-
class
|
|
26
|
+
}), tt = 8;
|
|
27
|
+
class He {
|
|
28
28
|
/** Корневой объект сцены */
|
|
29
29
|
scene;
|
|
30
30
|
/** Камера для сцены */
|
|
@@ -81,7 +81,7 @@ class Ie {
|
|
|
81
81
|
addFigure(e) {
|
|
82
82
|
const s = new a.BufferGeometry();
|
|
83
83
|
s.setAttribute("position", new a.Float32BufferAttribute(e.position, 3)), e.normal && s.setAttribute("normal", new a.Float32BufferAttribute(e.normal, 3)), e.uv && s.setAttribute("uv", new a.Float32BufferAttribute(e.uv, 2));
|
|
84
|
-
const i = new a.Mesh(s,
|
|
84
|
+
const i = new a.Mesh(s, Ie);
|
|
85
85
|
return this.scene.add(i), this.meshes.push(i), i;
|
|
86
86
|
}
|
|
87
87
|
/**
|
|
@@ -172,15 +172,15 @@ class Ie {
|
|
|
172
172
|
this.meshes && (this.meshes.length = 0, this.meshes = []), this.scene = null, this.camera = null, this.renderer?.dispose(), this.canvas = null;
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
|
-
var
|
|
176
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
175
|
+
var st = Object.getOwnPropertyDescriptor, it = (t, e, s, i) => {
|
|
176
|
+
for (var r = i > 1 ? void 0 : i ? st(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
177
177
|
(n = t[o]) && (r = n(r) || r);
|
|
178
178
|
return r;
|
|
179
179
|
};
|
|
180
|
-
let
|
|
180
|
+
let G = class {
|
|
181
181
|
_emitter;
|
|
182
182
|
constructor() {
|
|
183
|
-
this._emitter = new
|
|
183
|
+
this._emitter = new Qe();
|
|
184
184
|
}
|
|
185
185
|
/** Публикация события */
|
|
186
186
|
emit(t, e) {
|
|
@@ -195,22 +195,22 @@ let X = class {
|
|
|
195
195
|
this._emitter.off(t, e);
|
|
196
196
|
}
|
|
197
197
|
};
|
|
198
|
-
|
|
198
|
+
G = it([
|
|
199
199
|
u()
|
|
200
|
-
],
|
|
201
|
-
var
|
|
202
|
-
const
|
|
200
|
+
], G);
|
|
201
|
+
var H = /* @__PURE__ */ ((t) => (t.SelectHover = "select.hover", t.SelectClick = "select.click", t.ToolSelect = "tool.select", t))(H || {});
|
|
202
|
+
const rt = 0.03, ot = 0.05, ke = 0, nt = 1, at = 2, L = 31, F = 16776960, Z = 16755200, ht = 2236962, lt = 2236962, ct = (t) => !!t && t.isMesh, Ve = (t) => {
|
|
203
203
|
let e = t;
|
|
204
204
|
for (; e; ) {
|
|
205
205
|
if (e.isMesh) return e;
|
|
206
206
|
e = e.parent;
|
|
207
207
|
}
|
|
208
208
|
return null;
|
|
209
|
-
},
|
|
209
|
+
}, Ne = (t) => {
|
|
210
210
|
const e = new a.BufferGeometry();
|
|
211
211
|
e.setAttribute("position", t.getAttribute("position")), e.computeBoundingSphere(), e.computeBoundingBox();
|
|
212
212
|
const s = new a.PointsMaterial({
|
|
213
|
-
color:
|
|
213
|
+
color: lt,
|
|
214
214
|
size: 6,
|
|
215
215
|
sizeAttenuation: !1,
|
|
216
216
|
depthTest: !1,
|
|
@@ -218,31 +218,36 @@ const it = 0.03, rt = 0.05, He = 0, ot = 1, nt = 2, T = 31, z = 16776960, F = 16
|
|
|
218
218
|
transparent: !0,
|
|
219
219
|
opacity: 0.9
|
|
220
220
|
}), i = new a.Points(e, s);
|
|
221
|
-
return i.layers.set(
|
|
222
|
-
},
|
|
221
|
+
return i.layers.set(at), i.renderOrder = 1e3, i.visible = !1, i;
|
|
222
|
+
}, Ye = (t) => {
|
|
223
223
|
const e = new a.EdgesGeometry(t), s = new a.LineSegments(
|
|
224
224
|
e,
|
|
225
|
-
new a.LineBasicMaterial({ color:
|
|
225
|
+
new a.LineBasicMaterial({ color: ht, linewidth: 1 })
|
|
226
226
|
);
|
|
227
|
-
return s.layers.set(
|
|
227
|
+
return s.layers.set(nt), s;
|
|
228
|
+
}, dt = (t) => {
|
|
229
|
+
const e = { x: t.position.x, y: t.position.y, z: t.position.z }, s = { x: t.rotation.x, y: t.rotation.y, z: t.rotation.z }, i = { x: t.scale.x, y: t.scale.y, z: t.scale.z }, r = new a.Box3().setFromObject(t), o = new a.Vector3();
|
|
230
|
+
r.getSize(o);
|
|
231
|
+
const n = { x: o.x, y: o.y, z: o.z };
|
|
232
|
+
return { position: e, rotation: s, scale: i, size: n };
|
|
228
233
|
};
|
|
229
|
-
var
|
|
230
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
234
|
+
var _t = Object.getOwnPropertyDescriptor, pt = (t, e, s, i) => {
|
|
235
|
+
for (var r = i > 1 ? void 0 : i ? _t(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
231
236
|
(n = t[o]) && (r = n(r) || r);
|
|
232
237
|
return r;
|
|
233
|
-
},
|
|
234
|
-
let
|
|
238
|
+
}, Ee = (t, e) => (s, i) => e(s, i, t);
|
|
239
|
+
let K = class extends He {
|
|
235
240
|
constructor(t, e) {
|
|
236
241
|
super(t), this._canvas = t, this._bus = e;
|
|
237
242
|
const s = new a.GridHelper(10, 10);
|
|
238
243
|
s.position.y = -1e-3, this.scene.add(s);
|
|
239
|
-
const i = new
|
|
240
|
-
this.scene.add(i), this._orbit = new
|
|
244
|
+
const i = new Be(6);
|
|
245
|
+
this.scene.add(i), this._orbit = new Xe(this.camera, this.renderer.domElement), this._orbit.enableDamping = !0, this._orbit.dampingFactor = 0.05, this._cameraGizmo = new Ge(this.renderer, this.camera, {
|
|
241
246
|
size: 96,
|
|
242
247
|
// Размер квадрата
|
|
243
248
|
margin: 36
|
|
244
249
|
// Отступы по сторонам (снизу и справа)
|
|
245
|
-
}), this._raycaster = new a.Raycaster(), this._mouse = new a.Vector2(), this.scene.add(new a.HemisphereLight(16777215, 4473924, 0.6)), this.camera.layers.enable(0), this.camera.layers.enable(1), this._transform = new
|
|
250
|
+
}), this._raycaster = new a.Raycaster(), this._mouse = new a.Vector2(), this.scene.add(new a.HemisphereLight(16777215, 4473924, 0.6)), this.camera.layers.enable(0), this.camera.layers.enable(1), this._transform = new Ke(this.camera, this.renderer.domElement), this._transformHelper = this._transform.getHelper(), this.scene.add(this._transformHelper), this._isEventListenersAdded || this._initMouseListeners();
|
|
246
251
|
}
|
|
247
252
|
/** Orbit-контроллер для управления камерой */
|
|
248
253
|
_orbit;
|
|
@@ -262,6 +267,7 @@ let G = class extends Ie {
|
|
|
262
267
|
_lastHovered = null;
|
|
263
268
|
/** Gizmo для управления отображением perspective camera */
|
|
264
269
|
_cameraGizmo;
|
|
270
|
+
_transformListeners = /* @__PURE__ */ new Set();
|
|
265
271
|
/**
|
|
266
272
|
* Обновление состояния рендерера.
|
|
267
273
|
*/
|
|
@@ -271,10 +277,10 @@ let G = class extends Ie {
|
|
|
271
277
|
/** Добавление фигуры на сцену */
|
|
272
278
|
addFigure(t) {
|
|
273
279
|
const e = super.addFigure(t);
|
|
274
|
-
e.layers.enable(
|
|
275
|
-
const s =
|
|
280
|
+
e.layers.enable(ke);
|
|
281
|
+
const s = Ye(e.geometry);
|
|
276
282
|
e.add(s);
|
|
277
|
-
const i =
|
|
283
|
+
const i = Ne(e.geometry);
|
|
278
284
|
return e.add(i), e;
|
|
279
285
|
}
|
|
280
286
|
/**
|
|
@@ -300,6 +306,13 @@ let G = class extends Ie {
|
|
|
300
306
|
detachTransformControls() {
|
|
301
307
|
this._transform.detach();
|
|
302
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* Подписывает слушателя на изменения трансформации текущего объекта.
|
|
311
|
+
* @internal
|
|
312
|
+
*/
|
|
313
|
+
onTransformChange(t) {
|
|
314
|
+
return this._transformListeners.add(t), () => this._transformListeners.delete(t);
|
|
315
|
+
}
|
|
303
316
|
/**
|
|
304
317
|
* Настройка режимов для `Raycaster`.
|
|
305
318
|
* @internal
|
|
@@ -312,17 +325,17 @@ let G = class extends Ie {
|
|
|
312
325
|
e.layers.set(0);
|
|
313
326
|
break;
|
|
314
327
|
case v.Edge:
|
|
315
|
-
e.layers.set(1), e.params.Line.threshold =
|
|
328
|
+
e.layers.set(1), e.params.Line.threshold = rt;
|
|
316
329
|
break;
|
|
317
330
|
case v.Vertex:
|
|
318
|
-
e.layers.set(2), e.params.Points.threshold =
|
|
331
|
+
e.layers.set(2), e.params.Points.threshold = ot;
|
|
319
332
|
break;
|
|
320
333
|
}
|
|
321
334
|
}
|
|
322
335
|
dispose() {
|
|
323
336
|
this._isEventListenersAdded && (this.canvas.removeEventListener("mousemove", this._handleMouseMove, !1), this.canvas.removeEventListener("click", this._handleMouseClick, !1), this.canvas.removeEventListener("pointerdown", (t) => this._transform.pointerDown(t)), this.canvas.removeEventListener("pointermove", (t) => this._transform.pointerMove(t)), this.canvas.removeEventListener("pointerup", (t) => this._transform.pointerUp(t)), this.canvas.removeEventListener("pointerleave", () => this._transform.pointerHover(null)), this._transform.removeEventListener("dragging-changed", () => {
|
|
324
337
|
this._orbit.enabled = !this._transform.dragging;
|
|
325
|
-
}), this._isEventListenersAdded = !1), this._orbit?.dispose(), this._transform?.dispose(), this._transformHelper?.parent && this._transformHelper.parent.remove(this._transformHelper), this._lastHovered = null, super.dispose();
|
|
338
|
+
}), this._transformListeners.clear(), this._isEventListenersAdded = !1), this._orbit?.dispose(), this._transform?.dispose(), this._transformHelper?.parent && this._transformHelper.parent.remove(this._transformHelper), this._lastHovered = null, super.dispose();
|
|
326
339
|
}
|
|
327
340
|
render() {
|
|
328
341
|
super.render(), this._cameraGizmo.render(this.canvas.width, this.canvas.height);
|
|
@@ -331,15 +344,17 @@ let G = class extends Ie {
|
|
|
331
344
|
_initMouseListeners() {
|
|
332
345
|
this.canvas.addEventListener("mousemove", this._handleMouseMove, !1), this.canvas.addEventListener("click", this._handleMouseClick, !1), this.canvas.addEventListener("pointerdown", (t) => this._transform.pointerDown(t)), this.canvas.addEventListener("pointermove", (t) => this._transform.pointerMove(t)), this.canvas.addEventListener("pointerup", (t) => this._transform.pointerUp(t)), this.canvas.addEventListener("pointerleave", () => this._transform.pointerHover(null)), this._transform.addEventListener("dragging-changed", () => {
|
|
333
346
|
this._orbit.enabled = !this._transform.dragging;
|
|
347
|
+
}), this._transform.addEventListener("objectChange", () => {
|
|
348
|
+
for (const t of this._transformListeners) t();
|
|
334
349
|
}), this._isEventListenersAdded = !0;
|
|
335
350
|
}
|
|
336
351
|
/** Обработчик события для hover */
|
|
337
352
|
_handleMouseMove = (t) => {
|
|
338
|
-
this._processRaycastEvent(t,
|
|
353
|
+
this._processRaycastEvent(t, H.SelectHover, !0);
|
|
339
354
|
};
|
|
340
355
|
/** Обработчик события на click */
|
|
341
356
|
_handleMouseClick = (t) => {
|
|
342
|
-
this._processRaycastEvent(t,
|
|
357
|
+
this._processRaycastEvent(t, H.SelectClick, !1);
|
|
343
358
|
};
|
|
344
359
|
/** Вспомогательный метод для получения модели, которую выбрали и отправки события в event bus */
|
|
345
360
|
_processRaycastEvent(t, e, s) {
|
|
@@ -350,12 +365,12 @@ let G = class extends Ie {
|
|
|
350
365
|
s ? n !== this._lastHovered && (this.meshes.forEach((c) => c.userData.isHit = !1), n && (n.userData.isHit = !0), this._lastHovered = n, this._bus.emit(e, o ? { intersection: o } : null)) : this._bus.emit(e, o ? { intersection: o } : null);
|
|
351
366
|
}
|
|
352
367
|
};
|
|
353
|
-
|
|
368
|
+
K = pt([
|
|
354
369
|
u(),
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
],
|
|
358
|
-
const
|
|
370
|
+
Ee(0, h("Canvas")),
|
|
371
|
+
Ee(1, h("EventBus"))
|
|
372
|
+
], K);
|
|
373
|
+
const we = { type: "change" }, ue = { type: "start" }, ze = { type: "end" }, U = new We(), Se = new Fe(), ut = Math.cos(70 * Ze.DEG2RAD), p = new T(), g = 2 * Math.PI, l = {
|
|
359
374
|
NONE: -1,
|
|
360
375
|
ROTATE: 0,
|
|
361
376
|
DOLLY: 1,
|
|
@@ -364,8 +379,8 @@ const Ee = { type: "change" }, pe = { type: "start" }, Ye = { type: "end" }, U =
|
|
|
364
379
|
TOUCH_PAN: 4,
|
|
365
380
|
TOUCH_DOLLY_PAN: 5,
|
|
366
381
|
TOUCH_DOLLY_ROTATE: 6
|
|
367
|
-
},
|
|
368
|
-
class
|
|
382
|
+
}, B = 1e-6;
|
|
383
|
+
class mt extends Ue {
|
|
369
384
|
/**
|
|
370
385
|
* Constructs a new controls instance.
|
|
371
386
|
*
|
|
@@ -373,7 +388,7 @@ class pt extends Ue {
|
|
|
373
388
|
* @param {?HTMLElement} domElement - The HTML element used for event listeners.
|
|
374
389
|
*/
|
|
375
390
|
constructor(e, s = null) {
|
|
376
|
-
super(e, s), this.state = l.NONE, this.target = new
|
|
391
|
+
super(e, s), this.state = l.NONE, this.target = new T(), this.cursor = new T(), this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minTargetRadius = 0, this.maxTargetRadius = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = 0.05, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.keyRotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !0, this.keyPanSpeed = 7, this.zoomToCursor = !1, this.autoRotate = !1, this.autoRotateSpeed = 2, this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" }, this.mouseButtons = { LEFT: I.ROTATE, MIDDLE: I.DOLLY, RIGHT: I.PAN }, this.touches = { ONE: R.ROTATE, TWO: R.DOLLY_PAN }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this._domElementKeyEvents = null, this._lastPosition = new T(), this._lastQuaternion = new ve(), this._lastTargetPosition = new T(), this._quat = new ve().setFromUnitVectors(e.up, new T(0, 1, 0)), this._quatInverse = this._quat.clone().invert(), this._spherical = new ye(), this._sphericalDelta = new ye(), this._scale = 1, this._panOffset = new T(), this._rotateStart = new w(), this._rotateEnd = new w(), this._rotateDelta = new w(), this._panStart = new w(), this._panEnd = new w(), this._panDelta = new w(), this._dollyStart = new w(), this._dollyEnd = new w(), this._dollyDelta = new w(), this._dollyDirection = new T(), this._mouse = new w(), this._performCursorZoom = !1, this._pointers = [], this._pointerPositions = {}, this._controlActive = !1, this._onPointerMove = gt.bind(this), this._onPointerDown = ft.bind(this), this._onPointerUp = bt.bind(this), this._onContextMenu = Pt.bind(this), this._onMouseWheel = Mt.bind(this), this._onKeyDown = Et.bind(this), this._onTouchStart = wt.bind(this), this._onTouchMove = St.bind(this), this._onMouseDown = vt.bind(this), this._onMouseMove = yt.bind(this), this._interceptControlDown = Ot.bind(this), this._interceptControlUp = Tt.bind(this), this.domElement !== null && this.connect(this.domElement), this.update();
|
|
377
392
|
}
|
|
378
393
|
connect(e) {
|
|
379
394
|
super.connect(e), this.domElement.addEventListener("pointerdown", this._onPointerDown), this.domElement.addEventListener("pointercancel", this._onPointerUp), this.domElement.addEventListener("contextmenu", this._onContextMenu), this.domElement.addEventListener("wheel", this._onMouseWheel, { passive: !1 }), this.domElement.getRootNode().addEventListener("keydown", this._interceptControlDown, { passive: !0, capture: !0 }), this.domElement.style.touchAction = "none";
|
|
@@ -434,7 +449,7 @@ class pt extends Ue {
|
|
|
434
449
|
* was called, or the initial state.
|
|
435
450
|
*/
|
|
436
451
|
reset() {
|
|
437
|
-
this.target.copy(this.target0), this.object.position.copy(this.position0), this.object.zoom = this.zoom0, this.object.updateProjectionMatrix(), this.dispatchEvent(
|
|
452
|
+
this.target.copy(this.target0), this.object.position.copy(this.position0), this.object.zoom = this.zoom0, this.object.updateProjectionMatrix(), this.dispatchEvent(we), this.update(), this.state = l.NONE;
|
|
438
453
|
}
|
|
439
454
|
update(e = null) {
|
|
440
455
|
const s = this.object.position;
|
|
@@ -456,20 +471,20 @@ class pt extends Ue {
|
|
|
456
471
|
const _ = c - n;
|
|
457
472
|
this.object.position.addScaledVector(this._dollyDirection, _), this.object.updateMatrixWorld(), o = !!_;
|
|
458
473
|
} else if (this.object.isOrthographicCamera) {
|
|
459
|
-
const c = new
|
|
474
|
+
const c = new T(this._mouse.x, this._mouse.y, 0);
|
|
460
475
|
c.unproject(this.object);
|
|
461
476
|
const _ = this.object.zoom;
|
|
462
477
|
this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), this.object.updateProjectionMatrix(), o = _ !== this.object.zoom;
|
|
463
|
-
const m = new
|
|
478
|
+
const m = new T(this._mouse.x, this._mouse.y, 0);
|
|
464
479
|
m.unproject(this.object), this.object.position.sub(m).add(c), this.object.updateMatrixWorld(), n = p.length();
|
|
465
480
|
} else
|
|
466
481
|
console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."), this.zoomToCursor = !1;
|
|
467
|
-
n !== null && (this.screenSpacePanning ? this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(n).add(this.object.position) : (U.origin.copy(this.object.position), U.direction.set(0, 0, -1).transformDirection(this.object.matrix), Math.abs(this.object.up.dot(U.direction)) <
|
|
482
|
+
n !== null && (this.screenSpacePanning ? this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(n).add(this.object.position) : (U.origin.copy(this.object.position), U.direction.set(0, 0, -1).transformDirection(this.object.matrix), Math.abs(this.object.up.dot(U.direction)) < ut ? this.object.lookAt(this.target) : (Se.setFromNormalAndCoplanarPoint(this.object.up, this.target), U.intersectPlane(Se, this.target))));
|
|
468
483
|
} else if (this.object.isOrthographicCamera) {
|
|
469
484
|
const n = this.object.zoom;
|
|
470
485
|
this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), n !== this.object.zoom && (this.object.updateProjectionMatrix(), o = !0);
|
|
471
486
|
}
|
|
472
|
-
return this._scale = 1, this._performCursorZoom = !1, o || this._lastPosition.distanceToSquared(this.object.position) >
|
|
487
|
+
return this._scale = 1, this._performCursorZoom = !1, o || this._lastPosition.distanceToSquared(this.object.position) > B || 8 * (1 - this._lastQuaternion.dot(this.object.quaternion)) > B || this._lastTargetPosition.distanceToSquared(this.target) > B ? (this.dispatchEvent(we), this._lastPosition.copy(this.object.position), this._lastQuaternion.copy(this.object.quaternion), this._lastTargetPosition.copy(this.target), !0) : !1;
|
|
473
488
|
}
|
|
474
489
|
_getAutoRotationAngle(e) {
|
|
475
490
|
return e !== null ? g / 60 * this.autoRotateSpeed * e : g / 60 / 60 * this.autoRotateSpeed;
|
|
@@ -661,16 +676,16 @@ class pt extends Ue {
|
|
|
661
676
|
return e.ctrlKey && !this._controlActive && (i.deltaY *= 10), i;
|
|
662
677
|
}
|
|
663
678
|
}
|
|
664
|
-
function
|
|
679
|
+
function ft(t) {
|
|
665
680
|
this.enabled !== !1 && (this._pointers.length === 0 && (this.domElement.setPointerCapture(t.pointerId), this.domElement.addEventListener("pointermove", this._onPointerMove), this.domElement.addEventListener("pointerup", this._onPointerUp)), !this._isTrackingPointer(t) && (this._addPointer(t), t.pointerType === "touch" ? this._onTouchStart(t) : this._onMouseDown(t)));
|
|
666
681
|
}
|
|
667
|
-
function
|
|
682
|
+
function gt(t) {
|
|
668
683
|
this.enabled !== !1 && (t.pointerType === "touch" ? this._onTouchMove(t) : this._onMouseMove(t));
|
|
669
684
|
}
|
|
670
|
-
function
|
|
685
|
+
function bt(t) {
|
|
671
686
|
switch (this._removePointer(t), this._pointers.length) {
|
|
672
687
|
case 0:
|
|
673
|
-
this.domElement.releasePointerCapture(t.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.dispatchEvent(
|
|
688
|
+
this.domElement.releasePointerCapture(t.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.dispatchEvent(ze), this.state = l.NONE;
|
|
674
689
|
break;
|
|
675
690
|
case 1:
|
|
676
691
|
const e = this._pointers[0], s = this._pointerPositions[e];
|
|
@@ -678,7 +693,7 @@ function ft(t) {
|
|
|
678
693
|
break;
|
|
679
694
|
}
|
|
680
695
|
}
|
|
681
|
-
function
|
|
696
|
+
function vt(t) {
|
|
682
697
|
let e;
|
|
683
698
|
switch (t.button) {
|
|
684
699
|
case 0:
|
|
@@ -694,11 +709,11 @@ function gt(t) {
|
|
|
694
709
|
e = -1;
|
|
695
710
|
}
|
|
696
711
|
switch (e) {
|
|
697
|
-
case
|
|
712
|
+
case I.DOLLY:
|
|
698
713
|
if (this.enableZoom === !1) return;
|
|
699
714
|
this._handleMouseDownDolly(t), this.state = l.DOLLY;
|
|
700
715
|
break;
|
|
701
|
-
case
|
|
716
|
+
case I.ROTATE:
|
|
702
717
|
if (t.ctrlKey || t.metaKey || t.shiftKey) {
|
|
703
718
|
if (this.enablePan === !1) return;
|
|
704
719
|
this._handleMouseDownPan(t), this.state = l.PAN;
|
|
@@ -707,7 +722,7 @@ function gt(t) {
|
|
|
707
722
|
this._handleMouseDownRotate(t), this.state = l.ROTATE;
|
|
708
723
|
}
|
|
709
724
|
break;
|
|
710
|
-
case
|
|
725
|
+
case I.PAN:
|
|
711
726
|
if (t.ctrlKey || t.metaKey || t.shiftKey) {
|
|
712
727
|
if (this.enableRotate === !1) return;
|
|
713
728
|
this._handleMouseDownRotate(t), this.state = l.ROTATE;
|
|
@@ -719,9 +734,9 @@ function gt(t) {
|
|
|
719
734
|
default:
|
|
720
735
|
this.state = l.NONE;
|
|
721
736
|
}
|
|
722
|
-
this.state !== l.NONE && this.dispatchEvent(
|
|
737
|
+
this.state !== l.NONE && this.dispatchEvent(ue);
|
|
723
738
|
}
|
|
724
|
-
function
|
|
739
|
+
function yt(t) {
|
|
725
740
|
switch (this.state) {
|
|
726
741
|
case l.ROTATE:
|
|
727
742
|
if (this.enableRotate === !1) return;
|
|
@@ -737,21 +752,21 @@ function bt(t) {
|
|
|
737
752
|
break;
|
|
738
753
|
}
|
|
739
754
|
}
|
|
740
|
-
function
|
|
741
|
-
this.enabled === !1 || this.enableZoom === !1 || this.state !== l.NONE || (t.preventDefault(), this.dispatchEvent(
|
|
755
|
+
function Mt(t) {
|
|
756
|
+
this.enabled === !1 || this.enableZoom === !1 || this.state !== l.NONE || (t.preventDefault(), this.dispatchEvent(ue), this._handleMouseWheel(this._customWheelEvent(t)), this.dispatchEvent(ze));
|
|
742
757
|
}
|
|
743
|
-
function
|
|
758
|
+
function Et(t) {
|
|
744
759
|
this.enabled !== !1 && this._handleKeyDown(t);
|
|
745
760
|
}
|
|
746
|
-
function
|
|
761
|
+
function wt(t) {
|
|
747
762
|
switch (this._trackPointer(t), this._pointers.length) {
|
|
748
763
|
case 1:
|
|
749
764
|
switch (this.touches.ONE) {
|
|
750
|
-
case
|
|
765
|
+
case R.ROTATE:
|
|
751
766
|
if (this.enableRotate === !1) return;
|
|
752
767
|
this._handleTouchStartRotate(t), this.state = l.TOUCH_ROTATE;
|
|
753
768
|
break;
|
|
754
|
-
case
|
|
769
|
+
case R.PAN:
|
|
755
770
|
if (this.enablePan === !1) return;
|
|
756
771
|
this._handleTouchStartPan(t), this.state = l.TOUCH_PAN;
|
|
757
772
|
break;
|
|
@@ -761,11 +776,11 @@ function Mt(t) {
|
|
|
761
776
|
break;
|
|
762
777
|
case 2:
|
|
763
778
|
switch (this.touches.TWO) {
|
|
764
|
-
case
|
|
779
|
+
case R.DOLLY_PAN:
|
|
765
780
|
if (this.enableZoom === !1 && this.enablePan === !1) return;
|
|
766
781
|
this._handleTouchStartDollyPan(t), this.state = l.TOUCH_DOLLY_PAN;
|
|
767
782
|
break;
|
|
768
|
-
case
|
|
783
|
+
case R.DOLLY_ROTATE:
|
|
769
784
|
if (this.enableZoom === !1 && this.enableRotate === !1) return;
|
|
770
785
|
this._handleTouchStartDollyRotate(t), this.state = l.TOUCH_DOLLY_ROTATE;
|
|
771
786
|
break;
|
|
@@ -776,9 +791,9 @@ function Mt(t) {
|
|
|
776
791
|
default:
|
|
777
792
|
this.state = l.NONE;
|
|
778
793
|
}
|
|
779
|
-
this.state !== l.NONE && this.dispatchEvent(
|
|
794
|
+
this.state !== l.NONE && this.dispatchEvent(ue);
|
|
780
795
|
}
|
|
781
|
-
function
|
|
796
|
+
function St(t) {
|
|
782
797
|
switch (this._trackPointer(t), this.state) {
|
|
783
798
|
case l.TOUCH_ROTATE:
|
|
784
799
|
if (this.enableRotate === !1) return;
|
|
@@ -800,20 +815,20 @@ function Et(t) {
|
|
|
800
815
|
this.state = l.NONE;
|
|
801
816
|
}
|
|
802
817
|
}
|
|
803
|
-
function
|
|
818
|
+
function Pt(t) {
|
|
804
819
|
this.enabled !== !1 && t.preventDefault();
|
|
805
820
|
}
|
|
806
|
-
function
|
|
821
|
+
function Ot(t) {
|
|
807
822
|
t.key === "Control" && (this._controlActive = !0, this.domElement.getRootNode().addEventListener("keyup", this._interceptControlUp, { passive: !0, capture: !0 }));
|
|
808
823
|
}
|
|
809
|
-
function
|
|
824
|
+
function Tt(t) {
|
|
810
825
|
t.key === "Control" && (this._controlActive = !1, this.domElement.getRootNode().removeEventListener("keyup", this._interceptControlUp, { passive: !0, capture: !0 }));
|
|
811
826
|
}
|
|
812
|
-
class
|
|
827
|
+
class Es extends He {
|
|
813
828
|
/** Orbit-контроллер для управления камерой */
|
|
814
829
|
_orbit;
|
|
815
830
|
constructor(e) {
|
|
816
|
-
super(e), this.camera.position.set(1, 1, 7), this.camera.lookAt(0, 0, 0), this._orbit = new
|
|
831
|
+
super(e), this.camera.position.set(1, 1, 7), this.camera.lookAt(0, 0, 0), this._orbit = new mt(this.camera, this.canvas), this._orbit.target.set(0, 0, 0), this._orbit.minPolarAngle = Math.PI / 2, this._orbit.maxPolarAngle = Math.PI / 2, this._orbit.enableRotate = !0, this._orbit.enableZoom = !1, this._orbit.enablePan = !1;
|
|
817
832
|
}
|
|
818
833
|
/**
|
|
819
834
|
* Обновление состояния рендерера.
|
|
@@ -822,7 +837,7 @@ class ys extends Ie {
|
|
|
822
837
|
this._orbit?.update();
|
|
823
838
|
}
|
|
824
839
|
}
|
|
825
|
-
class
|
|
840
|
+
class ws {
|
|
826
841
|
/** Позиции вершин */
|
|
827
842
|
_positions = [];
|
|
828
843
|
/** Нормали вершин */
|
|
@@ -859,12 +874,12 @@ class Ms {
|
|
|
859
874
|
}
|
|
860
875
|
}
|
|
861
876
|
const i = {
|
|
862
|
-
type:
|
|
877
|
+
type: S.Custom,
|
|
863
878
|
position: this._positions,
|
|
864
879
|
...this._normals.length > 0 && { normal: this._normals },
|
|
865
880
|
...this._uvs.length > 0 && { uv: this._uvs }
|
|
866
881
|
};
|
|
867
|
-
return new
|
|
882
|
+
return new $e(i);
|
|
868
883
|
}
|
|
869
884
|
/**
|
|
870
885
|
* Обрабатывает строку face (f) и разворачивает индексы в массивы для рендеринга
|
|
@@ -889,41 +904,41 @@ class Ms {
|
|
|
889
904
|
}
|
|
890
905
|
}
|
|
891
906
|
}
|
|
892
|
-
var
|
|
893
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
907
|
+
var Lt = Object.getOwnPropertyDescriptor, Dt = (t, e, s, i) => {
|
|
908
|
+
for (var r = i > 1 ? void 0 : i ? Lt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
894
909
|
(n = t[o]) && (r = n(r) || r);
|
|
895
910
|
return r;
|
|
896
911
|
}, Pe = (t, e) => (s, i) => e(s, i, t);
|
|
897
|
-
let
|
|
912
|
+
let q = class {
|
|
898
913
|
constructor(t, e) {
|
|
899
914
|
this._store = e, this._handlers = new Map(t.map((s) => [s.mode, s]));
|
|
900
915
|
}
|
|
901
916
|
/** Текущий режим отображения */
|
|
902
|
-
_currentMode =
|
|
917
|
+
_currentMode = V.Plane;
|
|
903
918
|
/** Хендлеры, которые управляют отображением */
|
|
904
919
|
_handlers;
|
|
905
920
|
/** Установка режима отображения */
|
|
906
921
|
manage(t) {
|
|
907
|
-
t !== this._currentMode && (this._handlers.get(this._currentMode)?.rollback(), t !==
|
|
922
|
+
t !== this._currentMode && (this._handlers.get(this._currentMode)?.rollback(), t !== V.Plane && this._handlers.get(t)?.handle(), this._currentMode = t, this._store.setDisplayMode(this._currentMode));
|
|
908
923
|
}
|
|
909
924
|
/** Освобождает ресурсы менеджера. */
|
|
910
925
|
dispose() {
|
|
911
|
-
this._handlers && this._handlers.clear(), this._currentMode =
|
|
926
|
+
this._handlers && this._handlers.clear(), this._currentMode = V.Plane, this._store.setDisplayMode(this._currentMode);
|
|
912
927
|
}
|
|
913
928
|
};
|
|
914
|
-
|
|
929
|
+
q = Dt([
|
|
915
930
|
u(),
|
|
916
931
|
Pe(0, W("IDisplayHandler")),
|
|
917
932
|
Pe(1, h("IEditorStore"))
|
|
918
|
-
],
|
|
919
|
-
var
|
|
920
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
933
|
+
], q);
|
|
934
|
+
var P = /* @__PURE__ */ ((t) => (t.Hover = "hover", t.Click = "click", t))(P || {}), Ct = Object.getOwnPropertyDescriptor, At = (t, e, s, i) => {
|
|
935
|
+
for (var r = i > 1 ? void 0 : i ? Ct(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
921
936
|
(n = t[o]) && (r = n(r) || r);
|
|
922
937
|
return r;
|
|
923
|
-
},
|
|
924
|
-
let
|
|
938
|
+
}, X = (t, e) => (s, i) => e(s, i, t);
|
|
939
|
+
let Q = class {
|
|
925
940
|
constructor(t, e, s) {
|
|
926
|
-
this._eventBus = t, this._store = s, this._handlers = new Map(e.map((i) => [i.mode, i])), this._eventBus.on(
|
|
941
|
+
this._eventBus = t, this._store = s, this._handlers = new Map(e.map((i) => [i.mode, i])), this._eventBus.on(H.SelectHover, this._onHover), this._eventBus.on(H.SelectClick, this._onClick);
|
|
927
942
|
}
|
|
928
943
|
/** Текущий режим выборки */
|
|
929
944
|
_currentMode = v.Mesh;
|
|
@@ -935,43 +950,43 @@ let q = class {
|
|
|
935
950
|
}
|
|
936
951
|
/** Обработчик события наведения на модель */
|
|
937
952
|
_onHover = (t) => {
|
|
938
|
-
this._handlers.get(this._currentMode)?.handle(t,
|
|
953
|
+
this._handlers.get(this._currentMode)?.handle(t, P.Hover);
|
|
939
954
|
};
|
|
940
955
|
/** Обработчик события клика на модель */
|
|
941
956
|
_onClick = (t) => {
|
|
942
|
-
this._handlers.get(this._currentMode)?.handle(t,
|
|
957
|
+
this._handlers.get(this._currentMode)?.handle(t, P.Click);
|
|
943
958
|
};
|
|
944
959
|
/** Освобождает ресурсы менеджера. */
|
|
945
960
|
dispose() {
|
|
946
|
-
this._handlers && this._handlers.clear(), this._eventBus.off(
|
|
961
|
+
this._handlers && this._handlers.clear(), this._eventBus.off(H.SelectHover, this._onHover), this._currentMode = v.Mesh, this._store.setSelectMode(this._currentMode);
|
|
947
962
|
}
|
|
948
963
|
};
|
|
949
|
-
|
|
964
|
+
Q = At([
|
|
950
965
|
u(),
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
],
|
|
955
|
-
class
|
|
966
|
+
X(0, h("EventBus")),
|
|
967
|
+
X(1, W("ISelectHandler")),
|
|
968
|
+
X(2, h("IEditorStore"))
|
|
969
|
+
], Q);
|
|
970
|
+
class xt {
|
|
956
971
|
/** Доступен ли инструмент при текущем режиме выборки */
|
|
957
972
|
isToolEnabled(e, s) {
|
|
958
|
-
return
|
|
973
|
+
return Me[s].includes(e);
|
|
959
974
|
}
|
|
960
975
|
/** Получение доступных инструментов для режима выборки*/
|
|
961
976
|
getEnabledTools(e) {
|
|
962
|
-
return
|
|
977
|
+
return Me[e];
|
|
963
978
|
}
|
|
964
979
|
}
|
|
965
|
-
var
|
|
966
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
980
|
+
var Rt = Object.getOwnPropertyDescriptor, jt = (t, e, s, i) => {
|
|
981
|
+
for (var r = i > 1 ? void 0 : i ? Rt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
967
982
|
(n = t[o]) && (r = n(r) || r);
|
|
968
983
|
return r;
|
|
969
|
-
},
|
|
970
|
-
let
|
|
984
|
+
}, Oe = (t, e) => (s, i) => e(s, i, t);
|
|
985
|
+
let J = class {
|
|
971
986
|
constructor(t, e) {
|
|
972
987
|
this._store = e, this._handlers = new Map(t.map((s) => [s.mode, s])), this._unsubSelected = this._store.onSelectedObjectChange(() => {
|
|
973
988
|
this._handlers.get(this._currentTool)?.handle();
|
|
974
|
-
}), this._policy = new
|
|
989
|
+
}), this._policy = new xt();
|
|
975
990
|
}
|
|
976
991
|
/** Текущий выбранный инструмент */
|
|
977
992
|
_currentTool = C.Translate;
|
|
@@ -991,19 +1006,19 @@ let Q = class {
|
|
|
991
1006
|
this._unsubSelected?.(), this._handlers && this._handlers.clear(), this._currentTool = C.Translate, this._store.setToolType(this._currentTool);
|
|
992
1007
|
}
|
|
993
1008
|
};
|
|
994
|
-
|
|
1009
|
+
J = jt([
|
|
995
1010
|
u(),
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
],
|
|
999
|
-
var
|
|
1000
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
1011
|
+
Oe(0, W("IToolHandler")),
|
|
1012
|
+
Oe(1, h("IEditorStore"))
|
|
1013
|
+
], J);
|
|
1014
|
+
var It = Object.getOwnPropertyDescriptor, Ht = (t, e, s, i) => {
|
|
1015
|
+
for (var r = i > 1 ? void 0 : i ? It(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1001
1016
|
(n = t[o]) && (r = n(r) || r);
|
|
1002
1017
|
return r;
|
|
1003
|
-
},
|
|
1004
|
-
let
|
|
1018
|
+
}, kt = (t, e) => (s, i) => e(s, i, t);
|
|
1019
|
+
let ee = class {
|
|
1005
1020
|
/** Текущий режим редактирования сцены */
|
|
1006
|
-
_currentMode =
|
|
1021
|
+
_currentMode = N.AddFigure;
|
|
1007
1022
|
/** Хендлеры, которые управляют отображением */
|
|
1008
1023
|
_handlers;
|
|
1009
1024
|
constructor(t) {
|
|
@@ -1011,28 +1026,28 @@ let J = class {
|
|
|
1011
1026
|
}
|
|
1012
1027
|
/** Установка режима редактирования сцены */
|
|
1013
1028
|
manage(t, e) {
|
|
1014
|
-
|
|
1029
|
+
t === N.AddFigure ? this._handlers.get(t)?.handle(e) : this._handlers.get(t)?.handle(), this._currentMode = t;
|
|
1015
1030
|
}
|
|
1016
1031
|
/** Освобождает ресурсы менеджера. */
|
|
1017
1032
|
dispose() {
|
|
1018
|
-
this._handlers && this._handlers.clear(), this._currentMode =
|
|
1033
|
+
this._handlers && this._handlers.clear(), this._currentMode = N.AddFigure;
|
|
1019
1034
|
}
|
|
1020
1035
|
};
|
|
1021
|
-
|
|
1036
|
+
ee = Ht([
|
|
1022
1037
|
u(),
|
|
1023
|
-
|
|
1024
|
-
],
|
|
1025
|
-
var
|
|
1026
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
1038
|
+
kt(0, W("ISceneHandler"))
|
|
1039
|
+
], ee);
|
|
1040
|
+
var Vt = Object.getOwnPropertyDescriptor, Nt = (t, e, s, i) => {
|
|
1041
|
+
for (var r = i > 1 ? void 0 : i ? Vt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1027
1042
|
(n = t[o]) && (r = n(r) || r);
|
|
1028
1043
|
return r;
|
|
1029
|
-
},
|
|
1030
|
-
let
|
|
1044
|
+
}, Yt = (t, e) => (s, i) => e(s, i, t);
|
|
1045
|
+
let te = class {
|
|
1031
1046
|
constructor(t) {
|
|
1032
1047
|
this._api = t;
|
|
1033
1048
|
}
|
|
1034
1049
|
/** Режим отображения. */
|
|
1035
|
-
mode =
|
|
1050
|
+
mode = V.Wireframe;
|
|
1036
1051
|
/** Сохраняем предыдущие значения wireframe для отката. */
|
|
1037
1052
|
_prevWireframe = /* @__PURE__ */ new Map();
|
|
1038
1053
|
/** Сохраняем исходные цвета материалов для отката */
|
|
@@ -1083,16 +1098,16 @@ let ee = class {
|
|
|
1083
1098
|
"wireframe" in e && !this._prevWireframe.has(t) && (this._prevWireframe.set(t, !!e.wireframe), e.wireframe = !0, t.needsUpdate = !0), e.color?.isColor && (this._prevColorMesh.has(t) || this._prevColorMesh.set(t, e.color.clone()), e.color.copy(this._wireColor));
|
|
1084
1099
|
}
|
|
1085
1100
|
};
|
|
1086
|
-
|
|
1101
|
+
te = Nt([
|
|
1087
1102
|
u(),
|
|
1088
|
-
|
|
1089
|
-
],
|
|
1090
|
-
var
|
|
1091
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
1103
|
+
Yt(0, h("RendererApi"))
|
|
1104
|
+
], te);
|
|
1105
|
+
var zt = Object.getOwnPropertyDescriptor, Ut = (t, e, s, i) => {
|
|
1106
|
+
for (var r = i > 1 ? void 0 : i ? zt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1092
1107
|
(n = t[o]) && (r = n(r) || r);
|
|
1093
1108
|
return r;
|
|
1094
|
-
},
|
|
1095
|
-
let
|
|
1109
|
+
}, Te = (t, e) => (s, i) => e(s, i, t);
|
|
1110
|
+
let se = class {
|
|
1096
1111
|
constructor(t, e) {
|
|
1097
1112
|
this._api = t, this._store = e;
|
|
1098
1113
|
}
|
|
@@ -1104,13 +1119,13 @@ let te = class {
|
|
|
1104
1119
|
_selectedMesh = null;
|
|
1105
1120
|
// Цвета, необходимые для переключения
|
|
1106
1121
|
/** Цвет ребер для фигуры, на которую навелись */
|
|
1107
|
-
_hoverColor =
|
|
1122
|
+
_hoverColor = F;
|
|
1108
1123
|
/** Цвет ребер для выделенной фигуры */
|
|
1109
|
-
_selectColor =
|
|
1124
|
+
_selectColor = Z;
|
|
1110
1125
|
/** Исходные цвета материалов линий для отката */
|
|
1111
1126
|
_origLineColors = /* @__PURE__ */ new WeakMap();
|
|
1112
1127
|
handle(t, e) {
|
|
1113
|
-
if (this._api.setRaycastMode(this.mode), e ===
|
|
1128
|
+
if (this._api.setRaycastMode(this.mode), e === P.Hover) {
|
|
1114
1129
|
if (!t) {
|
|
1115
1130
|
this._hoveredMesh && this._hoveredMesh !== this._selectedMesh && this._restoreEdgesColor(this._hoveredMesh), this._hoveredMesh = null;
|
|
1116
1131
|
return;
|
|
@@ -1118,7 +1133,7 @@ let te = class {
|
|
|
1118
1133
|
const s = t.intersection.object;
|
|
1119
1134
|
this._hoveredMesh !== s && (this._hoveredMesh && this._hoveredMesh !== this._selectedMesh && this._restoreEdgesColor(this._hoveredMesh), s !== this._selectedMesh && this._paintEdges(s, this._hoverColor), this._hoveredMesh = s);
|
|
1120
1135
|
}
|
|
1121
|
-
if (e ===
|
|
1136
|
+
if (e === P.Click) {
|
|
1122
1137
|
if (!t) {
|
|
1123
1138
|
this._selectedMesh && (this._restoreEdgesColor(this._selectedMesh), this._selectedMesh = null, this._store.setSelectedObject(null));
|
|
1124
1139
|
return;
|
|
@@ -1163,17 +1178,17 @@ let te = class {
|
|
|
1163
1178
|
});
|
|
1164
1179
|
}
|
|
1165
1180
|
};
|
|
1166
|
-
|
|
1181
|
+
se = Ut([
|
|
1167
1182
|
u(),
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
],
|
|
1171
|
-
var
|
|
1172
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
1183
|
+
Te(0, h("RendererApi")),
|
|
1184
|
+
Te(1, h("IEditorStore"))
|
|
1185
|
+
], se);
|
|
1186
|
+
var Wt = Object.getOwnPropertyDescriptor, Ft = (t, e, s, i) => {
|
|
1187
|
+
for (var r = i > 1 ? void 0 : i ? Wt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1173
1188
|
(n = t[o]) && (r = n(r) || r);
|
|
1174
1189
|
return r;
|
|
1175
|
-
},
|
|
1176
|
-
let
|
|
1190
|
+
}, Zt = (t, e) => (s, i) => e(s, i, t);
|
|
1191
|
+
let ie = class {
|
|
1177
1192
|
constructor(t) {
|
|
1178
1193
|
this._api = t;
|
|
1179
1194
|
}
|
|
@@ -1185,13 +1200,13 @@ let se = class {
|
|
|
1185
1200
|
_selected = null;
|
|
1186
1201
|
// Цвета, необходимые для переключения
|
|
1187
1202
|
/** Цвет грани, на которую навелись */
|
|
1188
|
-
_hoverColor =
|
|
1203
|
+
_hoverColor = F;
|
|
1189
1204
|
/** Цвет выделенной граней */
|
|
1190
|
-
_selectColor =
|
|
1205
|
+
_selectColor = Z;
|
|
1191
1206
|
/** Изначальный цвет граней у модели, перед наложением эффектов*/
|
|
1192
1207
|
_defaultColor = 2236962;
|
|
1193
1208
|
handle(t, e) {
|
|
1194
|
-
this._api.setRaycastMode(this.mode), e ===
|
|
1209
|
+
this._api.setRaycastMode(this.mode), e === P.Hover && console.log(t), e === P.Click && console.log(t);
|
|
1195
1210
|
}
|
|
1196
1211
|
rollback() {
|
|
1197
1212
|
throw new Error("Method not implemented.");
|
|
@@ -1201,18 +1216,18 @@ let se = class {
|
|
|
1201
1216
|
throw new Error("Method not implemented.");
|
|
1202
1217
|
}
|
|
1203
1218
|
};
|
|
1204
|
-
|
|
1219
|
+
ie = Ft([
|
|
1205
1220
|
u(),
|
|
1206
|
-
|
|
1207
|
-
],
|
|
1208
|
-
var
|
|
1209
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
1221
|
+
Zt(0, h("RendererApi"))
|
|
1222
|
+
], ie);
|
|
1223
|
+
var $t = Object.getOwnPropertyDescriptor, Bt = (t, e, s, i) => {
|
|
1224
|
+
for (var r = i > 1 ? void 0 : i ? $t(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1210
1225
|
(n = t[o]) && (r = n(r) || r);
|
|
1211
1226
|
return r;
|
|
1212
|
-
},
|
|
1213
|
-
let
|
|
1227
|
+
}, Le = (t, e) => (s, i) => e(s, i, t);
|
|
1228
|
+
let re = class {
|
|
1214
1229
|
constructor(t, e) {
|
|
1215
|
-
this._api = t, this._store = e, this._api.enableCameraLayer(
|
|
1230
|
+
this._api = t, this._store = e, this._api.enableCameraLayer(L), this._hoverVertex = this._makeOverlayVertex(this._hoverColor), this._selectVertex = this._makeOverlayVertex(this._selectColor), this._api.addObject(this._hoverVertex, L), this._api.addObject(this._selectVertex, L);
|
|
1216
1231
|
}
|
|
1217
1232
|
/** Режим, которым управляет хендлер, нужен только менеджеру */
|
|
1218
1233
|
mode = v.Vertex;
|
|
@@ -1224,11 +1239,11 @@ let ie = class {
|
|
|
1224
1239
|
_selectVertex;
|
|
1225
1240
|
// Цвета, необходимые для переключения
|
|
1226
1241
|
/** Цвет ребра, на которое навелись */
|
|
1227
|
-
_hoverColor =
|
|
1242
|
+
_hoverColor = F;
|
|
1228
1243
|
/** Цвет выделенного ребра */
|
|
1229
|
-
_selectColor =
|
|
1244
|
+
_selectColor = Z;
|
|
1230
1245
|
handle(t, e) {
|
|
1231
|
-
if (this._api.setRaycastMode(this.mode), e ===
|
|
1246
|
+
if (this._api.setRaycastMode(this.mode), e === P.Hover) {
|
|
1232
1247
|
if (!t) {
|
|
1233
1248
|
this._hoverVertex.visible = !1, this._hovered = null;
|
|
1234
1249
|
return;
|
|
@@ -1240,7 +1255,7 @@ let ie = class {
|
|
|
1240
1255
|
this._selected && this._same({ points: i, index: r }, this._selected) ? this._hoverVertex.visible = !1 : (this._writeWorldVertex(this._hoverVertex, i, r), this._hoverVertex.visible = !0);
|
|
1241
1256
|
return;
|
|
1242
1257
|
}
|
|
1243
|
-
if (e ===
|
|
1258
|
+
if (e === P.Click) {
|
|
1244
1259
|
if (!t) {
|
|
1245
1260
|
this._selectVertex.visible = !1, this._selected = null, this._store.setSelectedObject(null);
|
|
1246
1261
|
return;
|
|
@@ -1259,7 +1274,7 @@ let ie = class {
|
|
|
1259
1274
|
dispose() {
|
|
1260
1275
|
this.rollback(), this._api.removeObject(this._hoverVertex), this._api.removeObject(this._selectVertex), this._hoverVertex.geometry.dispose(), this._hoverVertex.material.dispose(), this._selectVertex.geometry.dispose(), this._selectVertex.material.dispose();
|
|
1261
1276
|
}
|
|
1262
|
-
_makeOverlayVertex(t, e =
|
|
1277
|
+
_makeOverlayVertex(t, e = tt) {
|
|
1263
1278
|
const s = new a.BufferGeometry();
|
|
1264
1279
|
s.setAttribute("position", new a.Float32BufferAttribute([0, 0, 0], 3));
|
|
1265
1280
|
const i = new a.PointsMaterial({
|
|
@@ -1272,7 +1287,7 @@ let ie = class {
|
|
|
1272
1287
|
opacity: 1
|
|
1273
1288
|
}), r = new a.Points(s, i);
|
|
1274
1289
|
return r.renderOrder = 1e3, r.raycast = () => {
|
|
1275
|
-
}, r.layers.set(
|
|
1290
|
+
}, r.layers.set(L), r.visible = !1, r;
|
|
1276
1291
|
}
|
|
1277
1292
|
/** Локальную вершину points переводим в world и пишем в target (прокси-точку) */
|
|
1278
1293
|
_writeWorldVertex(t, e, s) {
|
|
@@ -1288,21 +1303,21 @@ let ie = class {
|
|
|
1288
1303
|
}
|
|
1289
1304
|
/** Готовит метаданные для выбранной вершины и пишет их в _selectVertex.userData */
|
|
1290
1305
|
_prepareVertexMetadata(t, e) {
|
|
1291
|
-
const s =
|
|
1306
|
+
const s = Ve(t);
|
|
1292
1307
|
if (!s) return;
|
|
1293
1308
|
const i = t.geometry.getAttribute("position"), r = new a.Vector3(
|
|
1294
1309
|
i.getX(e),
|
|
1295
1310
|
i.getY(e),
|
|
1296
1311
|
i.getZ(e)
|
|
1297
|
-
).applyMatrix4(t.matrixWorld), o = new a.Matrix4().copy(s.matrixWorld).invert(), n = r.clone().applyMatrix4(o), _ = s.geometry.getAttribute("position"), m = 1e-6, f = m * m,
|
|
1312
|
+
).applyMatrix4(t.matrixWorld), o = new a.Matrix4().copy(s.matrixWorld).invert(), n = r.clone().applyMatrix4(o), _ = s.geometry.getAttribute("position"), m = 1e-6, f = m * m, D = new a.Vector3(), b = [];
|
|
1298
1313
|
for (let M = 0; M < _.count; M++)
|
|
1299
|
-
|
|
1314
|
+
D.fromBufferAttribute(_, M), D.distanceToSquared(n) < f && b.push(M);
|
|
1300
1315
|
const O = s.children.find((M) => M?.isLineSegments);
|
|
1301
1316
|
let y = [];
|
|
1302
1317
|
if (O) {
|
|
1303
|
-
const M = new a.Matrix4().copy(O.matrixWorld).invert(),
|
|
1304
|
-
for (let A = 0; A <
|
|
1305
|
-
|
|
1318
|
+
const M = new a.Matrix4().copy(O.matrixWorld).invert(), Y = r.clone().applyMatrix4(M), k = O.geometry.getAttribute("position"), z = new a.Vector3();
|
|
1319
|
+
for (let A = 0; A < k.count; A++)
|
|
1320
|
+
z.fromBufferAttribute(k, A), z.distanceToSquared(Y) < f && y.push(A);
|
|
1306
1321
|
}
|
|
1307
1322
|
this._selectVertex.userData.vertexInfo = {
|
|
1308
1323
|
points: t,
|
|
@@ -1326,15 +1341,18 @@ let ie = class {
|
|
|
1326
1341
|
(!n || n.count < 1) && (o.setAttribute("position", new a.BufferAttribute(new Float32Array(3), 3)), n = o.getAttribute("position")), n.setXYZ(0, 0, 0, 0), n.needsUpdate = !0, t.quaternion.identity(), t.scale.set(1, 1, 1), t.updateMatrixWorld(!0);
|
|
1327
1342
|
}
|
|
1328
1343
|
};
|
|
1329
|
-
|
|
1344
|
+
re = Bt([
|
|
1330
1345
|
u(),
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
],
|
|
1334
|
-
class
|
|
1346
|
+
Le(0, h("RendererApi")),
|
|
1347
|
+
Le(1, h("IEditorStore"))
|
|
1348
|
+
], re);
|
|
1349
|
+
class me {
|
|
1335
1350
|
constructor(e, s) {
|
|
1336
|
-
this.api = e, this.store = s
|
|
1351
|
+
this.api = e, this.store = s, this._unsubscribeTransform = this.api.onTransformChange(() => {
|
|
1352
|
+
this.store.getSelectedObject() && this.store.notifySelectedTransformChange?.();
|
|
1353
|
+
});
|
|
1337
1354
|
}
|
|
1355
|
+
_unsubscribeTransform;
|
|
1338
1356
|
/**
|
|
1339
1357
|
* Обновляет состояние инструмента под текущее выделение.
|
|
1340
1358
|
*/
|
|
@@ -1352,51 +1370,34 @@ class ue {
|
|
|
1352
1370
|
}
|
|
1353
1371
|
/** Освобождение ресурсов хендлера. */
|
|
1354
1372
|
dispose() {
|
|
1355
|
-
this.rollback();
|
|
1373
|
+
this.rollback(), this._unsubscribeTransform && this._unsubscribeTransform();
|
|
1356
1374
|
}
|
|
1357
1375
|
}
|
|
1358
|
-
var $t = Object.getOwnPropertyDescriptor, Bt = (t, e, s, i) => {
|
|
1359
|
-
for (var r = i > 1 ? void 0 : i ? $t(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1360
|
-
(n = t[o]) && (r = n(r) || r);
|
|
1361
|
-
return r;
|
|
1362
|
-
}, Te = (t, e) => (s, i) => e(s, i, t);
|
|
1363
|
-
let re = class extends ue {
|
|
1364
|
-
/** Инструмент, которым управляет хендлер, нужен только менеджеру */
|
|
1365
|
-
mode = C.Translate;
|
|
1366
|
-
constructor(t, e) {
|
|
1367
|
-
super(t, e);
|
|
1368
|
-
}
|
|
1369
|
-
};
|
|
1370
|
-
re = Bt([
|
|
1371
|
-
u(),
|
|
1372
|
-
Te(0, h("RendererApi")),
|
|
1373
|
-
Te(1, h("IEditorStore"))
|
|
1374
|
-
], re);
|
|
1375
1376
|
var Xt = Object.getOwnPropertyDescriptor, Gt = (t, e, s, i) => {
|
|
1376
1377
|
for (var r = i > 1 ? void 0 : i ? Xt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1377
1378
|
(n = t[o]) && (r = n(r) || r);
|
|
1378
1379
|
return r;
|
|
1379
|
-
},
|
|
1380
|
-
let oe = class extends
|
|
1380
|
+
}, De = (t, e) => (s, i) => e(s, i, t);
|
|
1381
|
+
let oe = class extends me {
|
|
1381
1382
|
/** Инструмент, которым управляет хендлер, нужен только менеджеру */
|
|
1382
|
-
mode = C.
|
|
1383
|
+
mode = C.Translate;
|
|
1383
1384
|
constructor(t, e) {
|
|
1384
1385
|
super(t, e);
|
|
1385
1386
|
}
|
|
1386
1387
|
};
|
|
1387
1388
|
oe = Gt([
|
|
1388
1389
|
u(),
|
|
1389
|
-
|
|
1390
|
-
|
|
1390
|
+
De(0, h("RendererApi")),
|
|
1391
|
+
De(1, h("IEditorStore"))
|
|
1391
1392
|
], oe);
|
|
1392
1393
|
var Kt = Object.getOwnPropertyDescriptor, qt = (t, e, s, i) => {
|
|
1393
1394
|
for (var r = i > 1 ? void 0 : i ? Kt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1394
1395
|
(n = t[o]) && (r = n(r) || r);
|
|
1395
1396
|
return r;
|
|
1396
1397
|
}, Ce = (t, e) => (s, i) => e(s, i, t);
|
|
1397
|
-
let ne = class extends
|
|
1398
|
+
let ne = class extends me {
|
|
1398
1399
|
/** Инструмент, которым управляет хендлер, нужен только менеджеру */
|
|
1399
|
-
mode = C.
|
|
1400
|
+
mode = C.Scale;
|
|
1400
1401
|
constructor(t, e) {
|
|
1401
1402
|
super(t, e);
|
|
1402
1403
|
}
|
|
@@ -1411,9 +1412,26 @@ var Qt = Object.getOwnPropertyDescriptor, Jt = (t, e, s, i) => {
|
|
|
1411
1412
|
(n = t[o]) && (r = n(r) || r);
|
|
1412
1413
|
return r;
|
|
1413
1414
|
}, Ae = (t, e) => (s, i) => e(s, i, t);
|
|
1414
|
-
let ae = class {
|
|
1415
|
+
let ae = class extends me {
|
|
1416
|
+
/** Инструмент, которым управляет хендлер, нужен только менеджеру */
|
|
1417
|
+
mode = C.Rotate;
|
|
1415
1418
|
constructor(t, e) {
|
|
1416
|
-
|
|
1419
|
+
super(t, e);
|
|
1420
|
+
}
|
|
1421
|
+
};
|
|
1422
|
+
ae = Jt([
|
|
1423
|
+
u(),
|
|
1424
|
+
Ae(0, h("RendererApi")),
|
|
1425
|
+
Ae(1, h("IEditorStore"))
|
|
1426
|
+
], ae);
|
|
1427
|
+
var es = Object.getOwnPropertyDescriptor, ts = (t, e, s, i) => {
|
|
1428
|
+
for (var r = i > 1 ? void 0 : i ? es(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1429
|
+
(n = t[o]) && (r = n(r) || r);
|
|
1430
|
+
return r;
|
|
1431
|
+
}, xe = (t, e) => (s, i) => e(s, i, t);
|
|
1432
|
+
let he = class {
|
|
1433
|
+
constructor(t, e) {
|
|
1434
|
+
this._api = t, this._store = e, this._api.enableCameraLayer(L), this._hoverLine = this._makeOverlayLine(this._hoverColor), this._selectLine = this._makeOverlayLine(this._selectColor), this._api.addObject(this._hoverLine, L), this._api.addObject(this._selectLine, L);
|
|
1417
1435
|
}
|
|
1418
1436
|
/** Режим, которым управляет хендлер, нужен только менеджеру */
|
|
1419
1437
|
mode = v.Edge;
|
|
@@ -1427,12 +1445,12 @@ let ae = class {
|
|
|
1427
1445
|
_selected = null;
|
|
1428
1446
|
// Цвета, необходимые для переключения
|
|
1429
1447
|
/** Цвет ребра, на которое навелись */
|
|
1430
|
-
_hoverColor =
|
|
1448
|
+
_hoverColor = F;
|
|
1431
1449
|
/** Цвет выделенного ребра */
|
|
1432
|
-
_selectColor =
|
|
1450
|
+
_selectColor = Z;
|
|
1433
1451
|
/** Обработка текущего режима выборки. */
|
|
1434
1452
|
handle(t, e) {
|
|
1435
|
-
if (this._api.setRaycastMode(this.mode), e ===
|
|
1453
|
+
if (this._api.setRaycastMode(this.mode), e === P.Hover) {
|
|
1436
1454
|
if (!t) {
|
|
1437
1455
|
this._hoverLine.visible = !1, this._hovered = null;
|
|
1438
1456
|
return;
|
|
@@ -1444,7 +1462,7 @@ let ae = class {
|
|
|
1444
1462
|
this._selected && this._same({ lines: i, seg: r }, this._selected) ? this._hoverLine.visible = !1 : (this._writeWorldSegment(this._hoverLine, i, r), this._hoverLine.visible = !0), this._hovered = { lines: i, seg: r };
|
|
1445
1463
|
return;
|
|
1446
1464
|
}
|
|
1447
|
-
if (e ===
|
|
1465
|
+
if (e === P.Click) {
|
|
1448
1466
|
if (!t) {
|
|
1449
1467
|
this._selectLine.visible = !1, this._selected = null, this._store.setSelectedObject(null);
|
|
1450
1468
|
return;
|
|
@@ -1479,7 +1497,7 @@ let ae = class {
|
|
|
1479
1497
|
opacity: 1
|
|
1480
1498
|
}), i = new a.Line(e, s);
|
|
1481
1499
|
return i.renderOrder = 1e3, i.raycast = () => {
|
|
1482
|
-
}, i.layers.set(
|
|
1500
|
+
}, i.layers.set(L), i.visible = !1, i;
|
|
1483
1501
|
}
|
|
1484
1502
|
/** Локальные точки сегмента переводим в target (который висит на сцене) */
|
|
1485
1503
|
_writeWorldSegment(t, e, s) {
|
|
@@ -1503,64 +1521,64 @@ let ae = class {
|
|
|
1503
1521
|
if (!isFinite(m) || m === 0) return;
|
|
1504
1522
|
const f = new a.Vector3().addVectors(n, c).multiplyScalar(0.5);
|
|
1505
1523
|
t.position.copy(f);
|
|
1506
|
-
const
|
|
1507
|
-
let b =
|
|
1508
|
-
(!b || b.count < 2) && (
|
|
1524
|
+
const D = t.geometry;
|
|
1525
|
+
let b = D.getAttribute("position");
|
|
1526
|
+
(!b || b.count < 2) && (D.setAttribute("position", new a.BufferAttribute(new Float32Array(6), 3)), b = D.getAttribute("position")), b.setXYZ(0, -m / 2, 0, 0), b.setXYZ(1, m / 2, 0, 0), b.needsUpdate = !0, _.normalize();
|
|
1509
1527
|
const O = new a.Quaternion().setFromUnitVectors(new a.Vector3(1, 0, 0), _);
|
|
1510
1528
|
t.quaternion.copy(O), t.updateMatrixWorld(!0);
|
|
1511
1529
|
}
|
|
1512
1530
|
/** Запись метаданных выбранного ребра для использования инструментов */
|
|
1513
1531
|
_prepareEdgeMetadata(t, e) {
|
|
1514
|
-
const s =
|
|
1532
|
+
const s = Ve(t);
|
|
1515
1533
|
if (!s) return;
|
|
1516
1534
|
const i = t.geometry.getAttribute("position"), r = e * 2, o = r + 1, n = new a.Vector3(i.getX(r), i.getY(r), i.getZ(r)).applyMatrix4(
|
|
1517
1535
|
t.matrixWorld
|
|
1518
1536
|
), c = new a.Vector3(i.getX(o), i.getY(o), i.getZ(o)).applyMatrix4(
|
|
1519
1537
|
t.matrixWorld
|
|
1520
|
-
), _ = new a.Matrix4().copy(s.matrixWorld).invert(), m = n.clone().applyMatrix4(_), f = c.clone().applyMatrix4(_), b = s.geometry.getAttribute("position"), O = new a.Vector3(), y = 1e-6, M = [],
|
|
1538
|
+
), _ = new a.Matrix4().copy(s.matrixWorld).invert(), m = n.clone().applyMatrix4(_), f = c.clone().applyMatrix4(_), b = s.geometry.getAttribute("position"), O = new a.Vector3(), y = 1e-6, M = [], Y = [];
|
|
1521
1539
|
for (let E = 0; E < b.count; E++)
|
|
1522
|
-
O.fromBufferAttribute(b, E), O.distanceToSquared(m) < y * y ? M.push(E) : O.distanceToSquared(f) < y * y &&
|
|
1523
|
-
const
|
|
1524
|
-
for (let E = 0; E <
|
|
1525
|
-
|
|
1540
|
+
O.fromBufferAttribute(b, E), O.distanceToSquared(m) < y * y ? M.push(E) : O.distanceToSquared(f) < y * y && Y.push(E);
|
|
1541
|
+
const k = new a.Matrix4().copy(t.matrixWorld).invert(), z = n.clone().applyMatrix4(k), A = c.clone().applyMatrix4(k), fe = t.geometry.getAttribute("position"), $ = new a.Vector3(), ge = [], be = [];
|
|
1542
|
+
for (let E = 0; E < fe.count; E++)
|
|
1543
|
+
$.fromBufferAttribute(fe, E), $.distanceToSquared(z) < y * y ? ge.push(E) : $.distanceToSquared(A) < y * y && be.push(E);
|
|
1526
1544
|
this._selectLine.userData.edgeInfo = {
|
|
1527
1545
|
lines: t,
|
|
1528
1546
|
seg: e,
|
|
1529
1547
|
mesh: s,
|
|
1530
1548
|
aIndices: M,
|
|
1531
|
-
bIndices:
|
|
1532
|
-
aEdgeIndices:
|
|
1533
|
-
bEdgeIndices:
|
|
1549
|
+
bIndices: Y,
|
|
1550
|
+
aEdgeIndices: ge,
|
|
1551
|
+
bEdgeIndices: be
|
|
1534
1552
|
};
|
|
1535
1553
|
}
|
|
1536
1554
|
};
|
|
1537
|
-
|
|
1555
|
+
he = ts([
|
|
1538
1556
|
u(),
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
],
|
|
1542
|
-
var
|
|
1543
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
1557
|
+
xe(0, h("RendererApi")),
|
|
1558
|
+
xe(1, h("IEditorStore"))
|
|
1559
|
+
], he);
|
|
1560
|
+
var ss = Object.getOwnPropertyDescriptor, is = (t, e, s, i) => {
|
|
1561
|
+
for (var r = i > 1 ? void 0 : i ? ss(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1544
1562
|
(n = t[o]) && (r = n(r) || r);
|
|
1545
1563
|
return r;
|
|
1546
|
-
},
|
|
1547
|
-
let
|
|
1564
|
+
}, rs = (t, e) => (s, i) => e(s, i, t);
|
|
1565
|
+
let le = class {
|
|
1548
1566
|
constructor(t) {
|
|
1549
1567
|
this._api = t;
|
|
1550
1568
|
}
|
|
1551
1569
|
/** Режим редактирования сцены */
|
|
1552
|
-
mode =
|
|
1570
|
+
mode = N.AddFigure;
|
|
1553
1571
|
/** Последняя добавленная фигура, нужно для отката через `ctrl + z`. */
|
|
1554
1572
|
_lastAddedMesh = null;
|
|
1555
1573
|
/** Добавление базовых фигур на сцену, которые приписаны в `FigureType`. */
|
|
1556
1574
|
handle(t) {
|
|
1557
|
-
const e =
|
|
1575
|
+
const e = et[t](), s = e.getAttribute("position");
|
|
1558
1576
|
s && s.setUsage && s.setUsage(a.DynamicDrawUsage);
|
|
1559
|
-
const i = new a.Mesh(e,
|
|
1560
|
-
i.layers.enable(
|
|
1561
|
-
const r =
|
|
1577
|
+
const i = new a.Mesh(e, Ie);
|
|
1578
|
+
i.layers.enable(ke);
|
|
1579
|
+
const r = Ye(i.geometry);
|
|
1562
1580
|
i.add(r);
|
|
1563
|
-
const o =
|
|
1581
|
+
const o = Ne(i.geometry);
|
|
1564
1582
|
i.add(o), this._api.addMesh(i), this._lastAddedMesh = i;
|
|
1565
1583
|
}
|
|
1566
1584
|
/** Срабатывает только на `ctrl + z`. */
|
|
@@ -1572,26 +1590,26 @@ let he = class {
|
|
|
1572
1590
|
this._lastAddedMesh = null;
|
|
1573
1591
|
}
|
|
1574
1592
|
};
|
|
1575
|
-
|
|
1593
|
+
le = is([
|
|
1576
1594
|
u(),
|
|
1577
|
-
|
|
1578
|
-
],
|
|
1579
|
-
var
|
|
1580
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
1595
|
+
rs(0, h("RendererApi"))
|
|
1596
|
+
], le);
|
|
1597
|
+
var os = Object.getOwnPropertyDescriptor, ns = (t, e, s, i) => {
|
|
1598
|
+
for (var r = i > 1 ? void 0 : i ? os(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1581
1599
|
(n = t[o]) && (r = n(r) || r);
|
|
1582
1600
|
return r;
|
|
1583
|
-
},
|
|
1584
|
-
let
|
|
1601
|
+
}, Re = (t, e) => (s, i) => e(s, i, t);
|
|
1602
|
+
let ce = class {
|
|
1585
1603
|
constructor(t, e) {
|
|
1586
1604
|
this._api = t, this._store = e;
|
|
1587
1605
|
}
|
|
1588
1606
|
/** Режим редактирования сцены */
|
|
1589
|
-
mode =
|
|
1607
|
+
mode = N.DeleteFigure;
|
|
1590
1608
|
/** Последняя удаленная фигура, сохраняем для отката через `ctrl + z` */
|
|
1591
1609
|
_lastDeletedMesh = null;
|
|
1592
1610
|
handle() {
|
|
1593
1611
|
const t = this._store.getSelectedObject();
|
|
1594
|
-
|
|
1612
|
+
ct(t) && (this._api.removeMesh(t), this._store.setSelectedObject(null), this._lastDeletedMesh = t);
|
|
1595
1613
|
}
|
|
1596
1614
|
/** Срабатывает только на `ctrl + z`. */
|
|
1597
1615
|
rollback() {
|
|
@@ -1602,17 +1620,17 @@ let le = class {
|
|
|
1602
1620
|
this._lastDeletedMesh = null;
|
|
1603
1621
|
}
|
|
1604
1622
|
};
|
|
1605
|
-
|
|
1623
|
+
ce = ns([
|
|
1606
1624
|
u(),
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
],
|
|
1610
|
-
var
|
|
1611
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
1625
|
+
Re(0, h("RendererApi")),
|
|
1626
|
+
Re(1, h("IEditorStore"))
|
|
1627
|
+
], ce);
|
|
1628
|
+
var as = Object.getOwnPropertyDescriptor, hs = (t, e, s, i) => {
|
|
1629
|
+
for (var r = i > 1 ? void 0 : i ? as(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1612
1630
|
(n = t[o]) && (r = n(r) || r);
|
|
1613
1631
|
return r;
|
|
1614
|
-
},
|
|
1615
|
-
let
|
|
1632
|
+
}, ls = (t, e) => (s, i) => e(s, i, t);
|
|
1633
|
+
let de = class {
|
|
1616
1634
|
constructor(t) {
|
|
1617
1635
|
this._renderer = t;
|
|
1618
1636
|
}
|
|
@@ -1666,19 +1684,23 @@ let ce = class {
|
|
|
1666
1684
|
enableCameraLayer(t) {
|
|
1667
1685
|
this._renderer.enableCameraLayer(t);
|
|
1668
1686
|
}
|
|
1687
|
+
/** @inheritdoc */
|
|
1688
|
+
onTransformChange(t) {
|
|
1689
|
+
return this._renderer.onTransformChange(t);
|
|
1690
|
+
}
|
|
1669
1691
|
};
|
|
1670
|
-
|
|
1692
|
+
de = hs([
|
|
1671
1693
|
u(),
|
|
1672
|
-
|
|
1673
|
-
],
|
|
1674
|
-
var
|
|
1675
|
-
for (var r = i > 1 ? void 0 : i ?
|
|
1694
|
+
ls(0, h("EditorRenderer"))
|
|
1695
|
+
], de);
|
|
1696
|
+
var cs = Object.getOwnPropertyDescriptor, ds = (t, e, s, i) => {
|
|
1697
|
+
for (var r = i > 1 ? void 0 : i ? cs(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1676
1698
|
(n = t[o]) && (r = n(r) || r);
|
|
1677
1699
|
return r;
|
|
1678
|
-
},
|
|
1679
|
-
let
|
|
1680
|
-
constructor(t, e, s, i, r) {
|
|
1681
|
-
this._displayManager = t, this._selectManager = e, this._toolManager = s, this._sceneManager = i, this._renderer = r, this.setSelectMode(v.Mesh), this.setToolMode(C.Translate);
|
|
1700
|
+
}, x = (t, e) => (s, i) => e(s, i, t);
|
|
1701
|
+
let _e = class {
|
|
1702
|
+
constructor(t, e, s, i, r, o) {
|
|
1703
|
+
this._displayManager = t, this._selectManager = e, this._toolManager = s, this._sceneManager = i, this._renderer = r, this._store = o, this.setSelectMode(v.Mesh), this.setToolMode(C.Translate);
|
|
1682
1704
|
}
|
|
1683
1705
|
setDisplayMode(t) {
|
|
1684
1706
|
this._displayManager.manage(t);
|
|
@@ -1701,36 +1723,52 @@ let de = class {
|
|
|
1701
1723
|
addFigure(t, e) {
|
|
1702
1724
|
this._sceneManager.manage(t, e);
|
|
1703
1725
|
}
|
|
1726
|
+
getSelectionStats() {
|
|
1727
|
+
return this._store.getSelectionStats();
|
|
1728
|
+
}
|
|
1729
|
+
onSelectionStatsChange(t) {
|
|
1730
|
+
const e = this._store.onSelectedObjectChange(() => {
|
|
1731
|
+
t();
|
|
1732
|
+
}), s = this._store.onSelectedTransformChange(() => {
|
|
1733
|
+
t();
|
|
1734
|
+
});
|
|
1735
|
+
return () => {
|
|
1736
|
+
e(), s();
|
|
1737
|
+
};
|
|
1738
|
+
}
|
|
1704
1739
|
dispose() {
|
|
1705
1740
|
this._displayManager.dispose(), this._selectManager.dispose(), this._renderer.dispose();
|
|
1706
1741
|
}
|
|
1707
1742
|
};
|
|
1708
|
-
|
|
1743
|
+
_e = ds([
|
|
1709
1744
|
u(),
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1745
|
+
x(0, h("IDisplayManager")),
|
|
1746
|
+
x(1, h("ISelectManager")),
|
|
1747
|
+
x(2, h("IToolManager")),
|
|
1748
|
+
x(3, h("ISceneManager")),
|
|
1749
|
+
x(4, h("EditorRenderer")),
|
|
1750
|
+
x(5, h("IEditorStore"))
|
|
1751
|
+
], _e);
|
|
1752
|
+
var _s = Object.getOwnPropertyDescriptor, ps = (t, e, s, i) => {
|
|
1753
|
+
for (var r = i > 1 ? void 0 : i ? _s(e, s) : e, o = t.length - 1, n; o >= 0; o--)
|
|
1718
1754
|
(n = t[o]) && (r = n(r) || r);
|
|
1719
1755
|
return r;
|
|
1720
1756
|
};
|
|
1721
|
-
let
|
|
1757
|
+
let pe = class {
|
|
1722
1758
|
/** Текущий режим выборки. */
|
|
1723
1759
|
_selectMode = v.Mesh;
|
|
1724
1760
|
/** Текущий выбранный инструмент. */
|
|
1725
1761
|
_toolType = C.Translate;
|
|
1726
1762
|
/** Выбранный режим отображения. */
|
|
1727
|
-
_displayMode =
|
|
1763
|
+
_displayMode = V.Plane;
|
|
1728
1764
|
/** Выбранный объект на сцене. */
|
|
1729
1765
|
_selectedObject = null;
|
|
1730
1766
|
/** Слушатели событий по изменению выбранного объекта. */
|
|
1731
1767
|
_selectedListeners = /* @__PURE__ */ new Set();
|
|
1768
|
+
/** Слушатели событий трансформации выбранного объекта. */
|
|
1769
|
+
_transformListeners = /* @__PURE__ */ new Set();
|
|
1732
1770
|
constructor() {
|
|
1733
|
-
|
|
1771
|
+
Je(this, {}, { autoBind: !0 });
|
|
1734
1772
|
}
|
|
1735
1773
|
/** @inheritdoc */
|
|
1736
1774
|
getSelectMode() {
|
|
@@ -1761,6 +1799,11 @@ let _e = class {
|
|
|
1761
1799
|
return this._selectedObject;
|
|
1762
1800
|
}
|
|
1763
1801
|
/** @inheritdoc */
|
|
1802
|
+
getSelectionStats() {
|
|
1803
|
+
const t = this._selectedObject;
|
|
1804
|
+
return t ? dt(t) : null;
|
|
1805
|
+
}
|
|
1806
|
+
/** @inheritdoc */
|
|
1764
1807
|
setSelectedObject(t) {
|
|
1765
1808
|
if (this._selectedObject !== t) {
|
|
1766
1809
|
this._selectedObject = t;
|
|
@@ -1771,25 +1814,37 @@ let _e = class {
|
|
|
1771
1814
|
onSelectedObjectChange(t) {
|
|
1772
1815
|
return this._selectedListeners.add(t), () => this._selectedListeners.delete(t);
|
|
1773
1816
|
}
|
|
1817
|
+
/** @inheritdoc */
|
|
1818
|
+
onSelectedTransformChange(t) {
|
|
1819
|
+
return this._transformListeners.add(t), () => this._transformListeners.delete(t);
|
|
1820
|
+
}
|
|
1821
|
+
/** @inheritdoc */
|
|
1822
|
+
notifySelectedTransformChange() {
|
|
1823
|
+
for (const t of this._transformListeners) t();
|
|
1824
|
+
}
|
|
1774
1825
|
};
|
|
1775
|
-
|
|
1826
|
+
pe = ps([
|
|
1776
1827
|
u()
|
|
1777
|
-
],
|
|
1828
|
+
], pe);
|
|
1778
1829
|
let je = !1;
|
|
1779
|
-
const d =
|
|
1780
|
-
function
|
|
1781
|
-
return je || (d.registerInstance("Canvas", t), d.registerSingleton("EventBus",
|
|
1782
|
-
}
|
|
1783
|
-
function Es(t) {
|
|
1784
|
-
return _s(t).resolve("EditorHub");
|
|
1830
|
+
const d = qe.createChildContainer();
|
|
1831
|
+
function us(t) {
|
|
1832
|
+
return je || (d.registerInstance("Canvas", t), d.registerSingleton("EventBus", G), d.registerSingleton("EditorRenderer", K), d.registerSingleton("RendererApi", de), d.registerSingleton("IDisplayHandler", te), d.registerSingleton("ISelectHandler", se), d.registerSingleton("ISelectHandler", ie), d.registerSingleton("ISelectHandler", he), d.registerSingleton("ISelectHandler", re), d.registerSingleton("IToolHandler", oe), d.registerSingleton("IToolHandler", ne), d.registerSingleton("IToolHandler", ae), d.registerSingleton("ISceneHandler", le), d.registerSingleton("ISceneHandler", ce), d.registerSingleton("IDisplayManager", q), d.registerSingleton("ISelectManager", Q), d.registerSingleton("IToolManager", J), d.registerSingleton("ISceneManager", ee), d.registerSingleton("EditorHub", _e), d.registerSingleton("IEditorStore", pe), je = !0), d;
|
|
1785
1833
|
}
|
|
1834
|
+
let j = null;
|
|
1835
|
+
const Ss = (t) => (j || (j = us(t)), j.resolve("EditorHub")), Ps = () => {
|
|
1836
|
+
if (!j)
|
|
1837
|
+
throw new Error("EditorHub is not initialized. Call createAppHub(canvas) first.");
|
|
1838
|
+
return j.resolve("EditorHub");
|
|
1839
|
+
};
|
|
1786
1840
|
export {
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1841
|
+
_e as EditorHub,
|
|
1842
|
+
K as EditorRenderer,
|
|
1843
|
+
G as EventBus,
|
|
1844
|
+
H as EventTopics,
|
|
1845
|
+
ws as ObjLoader,
|
|
1846
|
+
Es as PreviewRenderer,
|
|
1847
|
+
He as Renderer,
|
|
1848
|
+
Ss as createAppHub,
|
|
1849
|
+
Ps as getAppHub
|
|
1795
1850
|
};
|