build-dxf 0.0.20-2 → 0.0.20-20

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.
Files changed (34) hide show
  1. package/README.md +3 -0
  2. package/package.json +1 -1
  3. package/src/build.js +1377 -1916
  4. package/src/index.css +1 -629
  5. package/src/index.js +7 -7
  6. package/src/index2.js +327 -528
  7. package/src/index3.js +1809 -1715
  8. package/src/selectLocalFile.js +1955 -3145
  9. package/src/utils/CommandManager/CommandFlow.d.ts +17 -0
  10. package/src/utils/CommandManager/CommandManager.d.ts +23 -0
  11. package/src/utils/DxfSystem/components/AngleCorrectionDxf.d.ts +9 -0
  12. package/src/utils/DxfSystem/components/Dxf.d.ts +36 -5
  13. package/src/utils/DxfSystem/components/LineAnalysis.d.ts +3 -1
  14. package/src/utils/DxfSystem/index.d.ts +2 -0
  15. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/CommandFlowComponent.d.ts +4 -1
  16. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/ConnectionLine.d.ts +33 -0
  17. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/Default.d.ts +0 -20
  18. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/DeleteSelectLine.d.ts +28 -0
  19. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/DeleteSelectWindow.d.ts +33 -0
  20. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/DrawDoorLine.d.ts +24 -4
  21. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/DrawLine.d.ts +20 -4
  22. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/DrawWindow.d.ts +25 -2
  23. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/IntersectionConnectionLine.d.ts +33 -0
  24. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/MergeLine.d.ts +33 -0
  25. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/PointDrag.d.ts +14 -1
  26. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/SelectAll.d.ts +30 -0
  27. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/VerticalCorrection.d.ts +82 -0
  28. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/VerticalReferenceLine.d.ts +21 -0
  29. package/src/utils/DxfSystem/plugin/Editor/components/CommandFlow/ViewAngle.d.ts +21 -0
  30. package/src/utils/DxfSystem/plugin/Editor/components/RenderManager.d.ts +4 -1
  31. package/src/utils/DxfSystem/plugin/Editor/components/index.d.ts +1 -0
  32. package/src/utils/Quadtree/LineSegment.d.ts +19 -0
  33. package/src/utils/Quadtree/Point.d.ts +9 -2
  34. package/src/utils/deepClone.d.ts +6 -0
package/src/index3.js CHANGED
@@ -1,134 +1,73 @@
1
- import * as THREE from "three";
2
- import { i as isString, n as noop, r as resolveUnref, t as tryOnScopeDispose, c as isClient, d as tryOnMounted, e as identity, f as buildProps, g as definePropType, _ as _export_sfc$1, u as useNamespace, h as isNumber, j as addUnit, w as withInstall, k as useEmptyValuesProps, l as useSizeProp, p as provideGlobalConfig, m as iconPropType, o as useGlobalComponentSettings, T as TypeComponentsMap, q as ElIcon, s as TypeComponents, v as useTimeoutFn, x as isString$1, y as isFunction, z as isBoolean, A as isElement, B as withInstallFunction, L as Lines, D as DomEventRegister, b as ElCheckbox, E as ElButton, S as SelectLocalFile } from "./selectLocalFile.js";
3
- import { C as Component, L as LineSegment, P as Point, B as Box2, E as EventDispatcher, b as PointVirtualGrid, Q as Quadtree, W as WhiteModel } from "./build.js";
4
- import { watch, ref, defineComponent, computed, createElementBlock, openBlock, normalizeClass, unref, renderSlot, createVNode, Transition, withCtx, withDirectives, createElementVNode, normalizeStyle, createTextVNode, toDisplayString, vShow, shallowReactive, onMounted, createBlock, createCommentVNode, resolveDynamicComponent, Fragment, withModifiers, nextTick, isVNode, render, toRaw, onUnmounted, renderList, createStaticVNode, createApp } from "vue";
1
+ import * as m from "three";
2
+ import { i as ct, n as mt, r as qe, t as Ue, c as Pe, d as ht, e as ut, f as Ae, g as Q, _ as Ze, u as pt, h as ye, j as _e, w as gt, k as vt, l as ft, p as yt, m as wt, o as bt, T as Ne, q as Oe, s as Ct, v as xt, x as Re, y as De, z as ke, A as Et, B as Mt, L as we, D as Lt, b as Ke, E as ge, S as kt } from "./selectLocalFile.js";
3
+ import { C as Ee, L as ce, P as W, B as Ye, E as Xe, b as Fe, Q as ze, W as It } from "./build.js";
5
4
  import "clipper-lib";
6
5
  import "dxf-writer";
7
6
  import "three/addons/controls/OrbitControls.js";
8
- function unrefElement(elRef) {
9
- var _a;
10
- const plain = resolveUnref(elRef);
11
- return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;
7
+ import { watch as J, ref as S, defineComponent as me, computed as B, createElementBlock as O, openBlock as P, normalizeClass as T, unref as g, renderSlot as Ce, createVNode as F, Transition as xe, withCtx as j, withDirectives as $e, createElementVNode as I, normalizeStyle as Se, createTextVNode as se, toDisplayString as ie, vShow as et, shallowReactive as Dt, onMounted as tt, createBlock as ve, createCommentVNode as Z, resolveDynamicComponent as Pt, Fragment as fe, withModifiers as At, nextTick as be, isVNode as nt, render as Te, toRaw as St, onUnmounted as Bt, renderList as Ie, createStaticVNode as _t, TransitionGroup as Nt, createApp as Ot } from "vue";
8
+ function ot(i) {
9
+ var e;
10
+ const t = qe(i);
11
+ return (e = t?.$el) != null ? e : t;
12
12
  }
13
- const defaultWindow = isClient ? window : void 0;
14
- function useEventListener(...args) {
15
- let target;
16
- let events;
17
- let listeners;
18
- let options;
19
- if (isString(args[0]) || Array.isArray(args[0])) {
20
- [events, listeners, options] = args;
21
- target = defaultWindow;
22
- } else {
23
- [target, events, listeners, options] = args;
24
- }
25
- if (!target)
26
- return noop;
27
- if (!Array.isArray(events))
28
- events = [events];
29
- if (!Array.isArray(listeners))
30
- listeners = [listeners];
31
- const cleanups = [];
32
- const cleanup = () => {
33
- cleanups.forEach((fn) => fn());
34
- cleanups.length = 0;
13
+ const at = Pe ? window : void 0;
14
+ function Rt(...i) {
15
+ let e, t, n, o;
16
+ if (ct(i[0]) || Array.isArray(i[0]) ? ([t, n, o] = i, e = at) : [e, t, n, o] = i, !e)
17
+ return mt;
18
+ Array.isArray(t) || (t = [t]), Array.isArray(n) || (n = [n]);
19
+ const a = [], s = () => {
20
+ a.forEach((c) => c()), a.length = 0;
21
+ }, r = (c, h, y, w) => (c.addEventListener(h, y, w), () => c.removeEventListener(h, y, w)), l = J(() => [ot(e), qe(o)], ([c, h]) => {
22
+ s(), c && a.push(...t.flatMap((y) => n.map((w) => r(c, y, w, h))));
23
+ }, { immediate: !0, flush: "post" }), d = () => {
24
+ l(), s();
35
25
  };
36
- const register = (el, event, listener, options2) => {
37
- el.addEventListener(event, listener, options2);
38
- return () => el.removeEventListener(event, listener, options2);
39
- };
40
- const stopWatch = watch(() => [unrefElement(target), resolveUnref(options)], ([el, options2]) => {
41
- cleanup();
42
- if (!el)
43
- return;
44
- cleanups.push(...events.flatMap((event) => {
45
- return listeners.map((listener) => register(el, event, listener, options2));
46
- }));
47
- }, { immediate: true, flush: "post" });
48
- const stop = () => {
49
- stopWatch();
50
- cleanup();
51
- };
52
- tryOnScopeDispose(stop);
53
- return stop;
26
+ return Ue(d), d;
54
27
  }
55
- function useSupported(callback, sync = false) {
56
- const isSupported = ref();
57
- const update = () => isSupported.value = Boolean(callback());
58
- update();
59
- tryOnMounted(update, sync);
60
- return isSupported;
28
+ function Kt(i, e = !1) {
29
+ const t = S(), n = () => t.value = !!i();
30
+ return n(), ht(n, e), t;
61
31
  }
62
- const _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
63
- const globalKey = "__vueuse_ssr_handlers__";
64
- _global[globalKey] = _global[globalKey] || {};
65
- var __getOwnPropSymbols$g = Object.getOwnPropertySymbols;
66
- var __hasOwnProp$g = Object.prototype.hasOwnProperty;
67
- var __propIsEnum$g = Object.prototype.propertyIsEnumerable;
68
- var __objRest$2 = (source, exclude) => {
69
- var target = {};
70
- for (var prop in source)
71
- if (__hasOwnProp$g.call(source, prop) && exclude.indexOf(prop) < 0)
72
- target[prop] = source[prop];
73
- if (source != null && __getOwnPropSymbols$g)
74
- for (var prop of __getOwnPropSymbols$g(source)) {
75
- if (exclude.indexOf(prop) < 0 && __propIsEnum$g.call(source, prop))
76
- target[prop] = source[prop];
77
- }
78
- return target;
32
+ const Ve = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {}, je = "__vueuse_ssr_handlers__";
33
+ Ve[je] = Ve[je] || {};
34
+ var Ge = Object.getOwnPropertySymbols, Ft = Object.prototype.hasOwnProperty, zt = Object.prototype.propertyIsEnumerable, Tt = (i, e) => {
35
+ var t = {};
36
+ for (var n in i)
37
+ Ft.call(i, n) && e.indexOf(n) < 0 && (t[n] = i[n]);
38
+ if (i != null && Ge)
39
+ for (var n of Ge(i))
40
+ e.indexOf(n) < 0 && zt.call(i, n) && (t[n] = i[n]);
41
+ return t;
79
42
  };
80
- function useResizeObserver(target, callback, options = {}) {
81
- const _a = options, { window: window2 = defaultWindow } = _a, observerOptions = __objRest$2(_a, ["window"]);
82
- let observer;
83
- const isSupported = useSupported(() => window2 && "ResizeObserver" in window2);
84
- const cleanup = () => {
85
- if (observer) {
86
- observer.disconnect();
87
- observer = void 0;
88
- }
89
- };
90
- const stopWatch = watch(() => unrefElement(target), (el) => {
91
- cleanup();
92
- if (isSupported.value && window2 && el) {
93
- observer = new ResizeObserver(callback);
94
- observer.observe(el, observerOptions);
95
- }
96
- }, { immediate: true, flush: "post" });
97
- const stop = () => {
98
- cleanup();
99
- stopWatch();
43
+ function Vt(i, e, t = {}) {
44
+ const n = t, { window: o = at } = n, a = Tt(n, ["window"]);
45
+ let s;
46
+ const r = Kt(() => o && "ResizeObserver" in o), l = () => {
47
+ s && (s.disconnect(), s = void 0);
48
+ }, d = J(() => ot(i), (h) => {
49
+ l(), r.value && o && h && (s = new ResizeObserver(e), s.observe(h, a));
50
+ }, { immediate: !0, flush: "post" }), c = () => {
51
+ l(), d();
100
52
  };
101
- tryOnScopeDispose(stop);
102
- return {
103
- isSupported,
104
- stop
53
+ return Ue(c), {
54
+ isSupported: r,
55
+ stop: c
105
56
  };
106
57
  }
107
- var SwipeDirection;
108
- (function(SwipeDirection2) {
109
- SwipeDirection2["UP"] = "UP";
110
- SwipeDirection2["RIGHT"] = "RIGHT";
111
- SwipeDirection2["DOWN"] = "DOWN";
112
- SwipeDirection2["LEFT"] = "LEFT";
113
- SwipeDirection2["NONE"] = "NONE";
114
- })(SwipeDirection || (SwipeDirection = {}));
115
- var __defProp = Object.defineProperty;
116
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
117
- var __hasOwnProp = Object.prototype.hasOwnProperty;
118
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
119
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
120
- var __spreadValues = (a, b) => {
121
- for (var prop in b || (b = {}))
122
- if (__hasOwnProp.call(b, prop))
123
- __defNormalProp(a, prop, b[prop]);
124
- if (__getOwnPropSymbols)
125
- for (var prop of __getOwnPropSymbols(b)) {
126
- if (__propIsEnum.call(b, prop))
127
- __defNormalProp(a, prop, b[prop]);
128
- }
129
- return a;
58
+ var Qe;
59
+ (function(i) {
60
+ i.UP = "UP", i.RIGHT = "RIGHT", i.DOWN = "DOWN", i.LEFT = "LEFT", i.NONE = "NONE";
61
+ })(Qe || (Qe = {}));
62
+ var jt = Object.defineProperty, He = Object.getOwnPropertySymbols, Gt = Object.prototype.hasOwnProperty, Qt = Object.prototype.propertyIsEnumerable, Je = (i, e, t) => e in i ? jt(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t, Ht = (i, e) => {
63
+ for (var t in e || (e = {}))
64
+ Gt.call(e, t) && Je(i, t, e[t]);
65
+ if (He)
66
+ for (var t of He(e))
67
+ Qt.call(e, t) && Je(i, t, e[t]);
68
+ return i;
130
69
  };
131
- const _TransitionPresets = {
70
+ const Jt = {
132
71
  easeInSine: [0.12, 0, 0.39, 0],
133
72
  easeOutSine: [0.61, 1, 0.88, 1],
134
73
  easeInOutSine: [0.37, 0, 0.63, 1],
@@ -154,14 +93,12 @@ const _TransitionPresets = {
154
93
  easeOutBack: [0.34, 1.56, 0.64, 1],
155
94
  easeInOutBack: [0.68, -0.6, 0.32, 1.6]
156
95
  };
157
- __spreadValues({
158
- linear: identity
159
- }, _TransitionPresets);
160
- const mutable = (val) => val;
161
- const EVENT_CODE = {
96
+ Ht({
97
+ linear: ut
98
+ }, Jt);
99
+ const Wt = (i) => i, qt = {
162
100
  esc: "Escape"
163
- };
164
- const badgeProps = buildProps({
101
+ }, Ut = Ae({
165
102
  value: {
166
103
  type: [String, Number],
167
104
  default: ""
@@ -179,546 +116,440 @@ const badgeProps = buildProps({
179
116
  },
180
117
  showZero: {
181
118
  type: Boolean,
182
- default: true
119
+ default: !0
183
120
  },
184
121
  color: String,
185
122
  badgeStyle: {
186
- type: definePropType([String, Object, Array])
123
+ type: Q([String, Object, Array])
187
124
  },
188
125
  offset: {
189
- type: definePropType(Array),
126
+ type: Q(Array),
190
127
  default: [0, 0]
191
128
  },
192
129
  badgeClass: {
193
130
  type: String
194
131
  }
195
- });
196
- const __default__$1 = defineComponent({
132
+ }), Zt = me({
197
133
  name: "ElBadge"
198
- });
199
- const _sfc_main$2 = /* @__PURE__ */ defineComponent({
200
- ...__default__$1,
201
- props: badgeProps,
202
- setup(__props, { expose }) {
203
- const props = __props;
204
- const ns = useNamespace("badge");
205
- const content = computed(() => {
206
- if (props.isDot)
207
- return "";
208
- if (isNumber(props.value) && isNumber(props.max)) {
209
- return props.max < props.value ? `${props.max}+` : `${props.value}`;
210
- }
211
- return `${props.value}`;
212
- });
213
- const style = computed(() => {
214
- var _a, _b, _c, _d, _e;
134
+ }), Yt = /* @__PURE__ */ me({
135
+ ...Zt,
136
+ props: Ut,
137
+ setup(i, { expose: e }) {
138
+ const t = i, n = pt("badge"), o = B(() => t.isDot ? "" : ye(t.value) && ye(t.max) ? t.max < t.value ? `${t.max}+` : `${t.value}` : `${t.value}`), a = B(() => {
139
+ var s, r, l, d, c;
215
140
  return [
216
141
  {
217
- backgroundColor: props.color,
218
- marginRight: addUnit(-((_b = (_a = props.offset) == null ? void 0 : _a[0]) != null ? _b : 0)),
219
- marginTop: addUnit((_d = (_c = props.offset) == null ? void 0 : _c[1]) != null ? _d : 0)
142
+ backgroundColor: t.color,
143
+ marginRight: _e(-((r = (s = t.offset) == null ? void 0 : s[0]) != null ? r : 0)),
144
+ marginTop: _e((d = (l = t.offset) == null ? void 0 : l[1]) != null ? d : 0)
220
145
  },
221
- (_e = props.badgeStyle) != null ? _e : {}
146
+ (c = t.badgeStyle) != null ? c : {}
222
147
  ];
223
148
  });
224
- expose({
225
- content
226
- });
227
- return (_ctx, _cache) => {
228
- return openBlock(), createElementBlock("div", {
229
- class: normalizeClass(unref(ns).b())
230
- }, [
231
- renderSlot(_ctx.$slots, "default"),
232
- createVNode(Transition, {
233
- name: `${unref(ns).namespace.value}-zoom-in-center`,
234
- persisted: ""
235
- }, {
236
- default: withCtx(() => [
237
- withDirectives(createElementVNode("sup", {
238
- class: normalizeClass([
239
- unref(ns).e("content"),
240
- unref(ns).em("content", _ctx.type),
241
- unref(ns).is("fixed", !!_ctx.$slots.default),
242
- unref(ns).is("dot", _ctx.isDot),
243
- unref(ns).is("hide-zero", !_ctx.showZero && props.value === 0),
244
- _ctx.badgeClass
245
- ]),
246
- style: normalizeStyle(unref(style))
247
- }, [
248
- renderSlot(_ctx.$slots, "content", { value: unref(content) }, () => [
249
- createTextVNode(toDisplayString(unref(content)), 1)
250
- ])
251
- ], 6), [
252
- [vShow, !_ctx.hidden && (unref(content) || _ctx.isDot || _ctx.$slots.content)]
149
+ return e({
150
+ content: o
151
+ }), (s, r) => (P(), O("div", {
152
+ class: T(g(n).b())
153
+ }, [
154
+ Ce(s.$slots, "default"),
155
+ F(xe, {
156
+ name: `${g(n).namespace.value}-zoom-in-center`,
157
+ persisted: ""
158
+ }, {
159
+ default: j(() => [
160
+ $e(I("sup", {
161
+ class: T([
162
+ g(n).e("content"),
163
+ g(n).em("content", s.type),
164
+ g(n).is("fixed", !!s.$slots.default),
165
+ g(n).is("dot", s.isDot),
166
+ g(n).is("hide-zero", !s.showZero && t.value === 0),
167
+ s.badgeClass
168
+ ]),
169
+ style: Se(g(a))
170
+ }, [
171
+ Ce(s.$slots, "content", { value: g(o) }, () => [
172
+ se(ie(g(o)), 1)
253
173
  ])
254
- ]),
255
- _: 3
256
- }, 8, ["name"])
257
- ], 2);
258
- };
174
+ ], 6), [
175
+ [et, !s.hidden && (g(o) || s.isDot || s.$slots.content)]
176
+ ])
177
+ ]),
178
+ _: 3
179
+ }, 8, ["name"])
180
+ ], 2));
259
181
  }
260
182
  });
261
- var Badge = /* @__PURE__ */ _export_sfc$1(_sfc_main$2, [["__file", "badge.vue"]]);
262
- const ElBadge = withInstall(Badge);
263
- const configProviderProps = buildProps({
183
+ var Xt = /* @__PURE__ */ Ze(Yt, [["__file", "badge.vue"]]);
184
+ const $t = gt(Xt), en = Ae({
264
185
  a11y: {
265
186
  type: Boolean,
266
- default: true
187
+ default: !0
267
188
  },
268
189
  locale: {
269
- type: definePropType(Object)
190
+ type: Q(Object)
270
191
  },
271
- size: useSizeProp,
192
+ size: ft,
272
193
  button: {
273
- type: definePropType(Object)
194
+ type: Q(Object)
274
195
  },
275
196
  card: {
276
- type: definePropType(Object)
197
+ type: Q(Object)
277
198
  },
278
199
  dialog: {
279
- type: definePropType(Object)
200
+ type: Q(Object)
280
201
  },
281
202
  link: {
282
- type: definePropType(Object)
203
+ type: Q(Object)
283
204
  },
284
205
  experimentalFeatures: {
285
- type: definePropType(Object)
206
+ type: Q(Object)
286
207
  },
287
208
  keyboardNavigation: {
288
209
  type: Boolean,
289
- default: true
210
+ default: !0
290
211
  },
291
212
  message: {
292
- type: definePropType(Object)
213
+ type: Q(Object)
293
214
  },
294
215
  zIndex: Number,
295
216
  namespace: {
296
217
  type: String,
297
218
  default: "el"
298
219
  },
299
- ...useEmptyValuesProps
300
- });
301
- const messageConfig = {};
302
- defineComponent({
220
+ ...vt
221
+ }), z = {};
222
+ me({
303
223
  name: "ElConfigProvider",
304
- props: configProviderProps,
305
- setup(props, { slots }) {
306
- const config = provideGlobalConfig(props);
307
- watch(() => props.message, (val) => {
308
- var _a, _b;
309
- Object.assign(messageConfig, (_b = (_a = config == null ? void 0 : config.value) == null ? void 0 : _a.message) != null ? _b : {}, val != null ? val : {});
310
- }, { immediate: true, deep: true });
311
- return () => renderSlot(slots, "default", { config: config == null ? void 0 : config.value });
224
+ props: en,
225
+ setup(i, { slots: e }) {
226
+ const t = yt(i);
227
+ return J(() => i.message, (n) => {
228
+ var o, a;
229
+ Object.assign(z, (a = (o = t?.value) == null ? void 0 : o.message) != null ? a : {}, n ?? {});
230
+ }, { immediate: !0, deep: !0 }), () => Ce(e, "default", { config: t?.value });
312
231
  }
313
232
  });
314
- const messageTypes = [
233
+ const st = [
315
234
  "primary",
316
235
  "success",
317
236
  "info",
318
237
  "warning",
319
238
  "error"
320
- ];
321
- const messageDefaults = mutable({
239
+ ], N = Wt({
322
240
  customClass: "",
323
- dangerouslyUseHTMLString: false,
241
+ dangerouslyUseHTMLString: !1,
324
242
  duration: 3e3,
325
243
  icon: void 0,
326
244
  id: "",
327
245
  message: "",
328
246
  onClose: void 0,
329
- showClose: false,
247
+ showClose: !1,
330
248
  type: "info",
331
- plain: false,
249
+ plain: !1,
332
250
  offset: 16,
333
251
  zIndex: 0,
334
- grouping: false,
252
+ grouping: !1,
335
253
  repeatNum: 1,
336
- appendTo: isClient ? document.body : void 0
337
- });
338
- const messageProps = buildProps({
254
+ appendTo: Pe ? document.body : void 0
255
+ }), tn = Ae({
339
256
  customClass: {
340
257
  type: String,
341
- default: messageDefaults.customClass
258
+ default: N.customClass
342
259
  },
343
260
  dangerouslyUseHTMLString: {
344
261
  type: Boolean,
345
- default: messageDefaults.dangerouslyUseHTMLString
262
+ default: N.dangerouslyUseHTMLString
346
263
  },
347
264
  duration: {
348
265
  type: Number,
349
- default: messageDefaults.duration
266
+ default: N.duration
350
267
  },
351
268
  icon: {
352
- type: iconPropType,
353
- default: messageDefaults.icon
269
+ type: wt,
270
+ default: N.icon
354
271
  },
355
272
  id: {
356
273
  type: String,
357
- default: messageDefaults.id
274
+ default: N.id
358
275
  },
359
276
  message: {
360
- type: definePropType([
277
+ type: Q([
361
278
  String,
362
279
  Object,
363
280
  Function
364
281
  ]),
365
- default: messageDefaults.message
282
+ default: N.message
366
283
  },
367
284
  onClose: {
368
- type: definePropType(Function),
369
- default: messageDefaults.onClose
285
+ type: Q(Function),
286
+ default: N.onClose
370
287
  },
371
288
  showClose: {
372
289
  type: Boolean,
373
- default: messageDefaults.showClose
290
+ default: N.showClose
374
291
  },
375
292
  type: {
376
293
  type: String,
377
- values: messageTypes,
378
- default: messageDefaults.type
294
+ values: st,
295
+ default: N.type
379
296
  },
380
297
  plain: {
381
298
  type: Boolean,
382
- default: messageDefaults.plain
299
+ default: N.plain
383
300
  },
384
301
  offset: {
385
302
  type: Number,
386
- default: messageDefaults.offset
303
+ default: N.offset
387
304
  },
388
305
  zIndex: {
389
306
  type: Number,
390
- default: messageDefaults.zIndex
307
+ default: N.zIndex
391
308
  },
392
309
  grouping: {
393
310
  type: Boolean,
394
- default: messageDefaults.grouping
311
+ default: N.grouping
395
312
  },
396
313
  repeatNum: {
397
314
  type: Number,
398
- default: messageDefaults.repeatNum
399
- }
400
- });
401
- const messageEmits = {
402
- destroy: () => true
403
- };
404
- const instances = shallowReactive([]);
405
- const getInstance = (id) => {
406
- const idx = instances.findIndex((instance) => instance.id === id);
407
- const current = instances[idx];
408
- let prev;
409
- if (idx > 0) {
410
- prev = instances[idx - 1];
411
- }
412
- return { current, prev };
413
- };
414
- const getLastOffset = (id) => {
415
- const { prev } = getInstance(id);
416
- if (!prev)
417
- return 0;
418
- return prev.vm.exposed.bottom.value;
419
- };
420
- const getOffsetOrSpace = (id, offset) => {
421
- const idx = instances.findIndex((instance) => instance.id === id);
422
- return idx > 0 ? 16 : offset;
423
- };
424
- const __default__ = defineComponent({
315
+ default: N.repeatNum
316
+ }
317
+ }), nn = {
318
+ destroy: () => !0
319
+ }, H = Dt([]), on = (i) => {
320
+ const e = H.findIndex((o) => o.id === i), t = H[e];
321
+ let n;
322
+ return e > 0 && (n = H[e - 1]), { current: t, prev: n };
323
+ }, an = (i) => {
324
+ const { prev: e } = on(i);
325
+ return e ? e.vm.exposed.bottom.value : 0;
326
+ }, sn = (i, e) => H.findIndex((n) => n.id === i) > 0 ? 16 : e, rn = me({
425
327
  name: "ElMessage"
426
- });
427
- const _sfc_main$1 = /* @__PURE__ */ defineComponent({
428
- ...__default__,
429
- props: messageProps,
430
- emits: messageEmits,
431
- setup(__props, { expose, emit }) {
432
- const props = __props;
433
- const { Close } = TypeComponents;
434
- const isStartTransition = ref(false);
435
- const { ns, zIndex } = useGlobalComponentSettings("message");
436
- const { currentZIndex, nextZIndex } = zIndex;
437
- const messageRef = ref();
438
- const visible = ref(false);
439
- const height = ref(0);
440
- let stopTimer = void 0;
441
- const badgeType = computed(() => props.type ? props.type === "error" ? "danger" : props.type : "info");
442
- const typeClass = computed(() => {
443
- const type = props.type;
444
- return { [ns.bm("icon", type)]: type && TypeComponentsMap[type] };
445
- });
446
- const iconComponent = computed(() => props.icon || TypeComponentsMap[props.type] || "");
447
- const lastOffset = computed(() => getLastOffset(props.id));
448
- const offset = computed(() => getOffsetOrSpace(props.id, props.offset) + lastOffset.value);
449
- const bottom = computed(() => height.value + offset.value);
450
- const customStyle = computed(() => ({
451
- top: `${offset.value}px`,
452
- zIndex: currentZIndex.value
328
+ }), dn = /* @__PURE__ */ me({
329
+ ...rn,
330
+ props: tn,
331
+ emits: nn,
332
+ setup(i, { expose: e, emit: t }) {
333
+ const n = i, { Close: o } = Ct, a = S(!1), { ns: s, zIndex: r } = bt("message"), { currentZIndex: l, nextZIndex: d } = r, c = S(), h = S(!1), y = S(0);
334
+ let w;
335
+ const b = B(() => n.type ? n.type === "error" ? "danger" : n.type : "info"), f = B(() => {
336
+ const p = n.type;
337
+ return { [s.bm("icon", p)]: p && Ne[p] };
338
+ }), M = B(() => n.icon || Ne[n.type] || ""), L = B(() => an(n.id)), A = B(() => sn(n.id, n.offset) + L.value), G = B(() => y.value + A.value), E = B(() => ({
339
+ top: `${A.value}px`,
340
+ zIndex: l.value
453
341
  }));
454
- function startTimer() {
455
- if (props.duration === 0)
456
- return;
457
- ({ stop: stopTimer } = useTimeoutFn(() => {
458
- close();
459
- }, props.duration));
342
+ function K() {
343
+ n.duration !== 0 && ({ stop: w } = xt(() => {
344
+ x();
345
+ }, n.duration));
460
346
  }
461
- function clearTimer() {
462
- stopTimer == null ? void 0 : stopTimer();
347
+ function k() {
348
+ w?.();
463
349
  }
464
- function close() {
465
- visible.value = false;
466
- nextTick(() => {
467
- var _a;
468
- if (!isStartTransition.value) {
469
- (_a = props.onClose) == null ? void 0 : _a.call(props);
470
- emit("destroy");
471
- }
350
+ function x() {
351
+ h.value = !1, be(() => {
352
+ var p;
353
+ a.value || ((p = n.onClose) == null || p.call(n), t("destroy"));
472
354
  });
473
355
  }
474
- function keydown({ code }) {
475
- if (code === EVENT_CODE.esc) {
476
- close();
477
- }
356
+ function _({ code: p }) {
357
+ p === qt.esc && x();
478
358
  }
479
- onMounted(() => {
480
- startTimer();
481
- nextZIndex();
482
- visible.value = true;
483
- });
484
- watch(() => props.repeatNum, () => {
485
- clearTimer();
486
- startTimer();
487
- });
488
- useEventListener(document, "keydown", keydown);
489
- useResizeObserver(messageRef, () => {
490
- height.value = messageRef.value.getBoundingClientRect().height;
491
- });
492
- expose({
493
- visible,
494
- bottom,
495
- close
496
- });
497
- return (_ctx, _cache) => {
498
- return openBlock(), createBlock(Transition, {
499
- name: unref(ns).b("fade"),
500
- onBeforeEnter: ($event) => isStartTransition.value = true,
501
- onBeforeLeave: _ctx.onClose,
502
- onAfterLeave: ($event) => _ctx.$emit("destroy"),
503
- persisted: ""
504
- }, {
505
- default: withCtx(() => [
506
- withDirectives(createElementVNode("div", {
507
- id: _ctx.id,
508
- ref_key: "messageRef",
509
- ref: messageRef,
510
- class: normalizeClass([
511
- unref(ns).b(),
512
- { [unref(ns).m(_ctx.type)]: _ctx.type },
513
- unref(ns).is("closable", _ctx.showClose),
514
- unref(ns).is("plain", _ctx.plain),
515
- _ctx.customClass
359
+ return tt(() => {
360
+ K(), d(), h.value = !0;
361
+ }), J(() => n.repeatNum, () => {
362
+ k(), K();
363
+ }), Rt(document, "keydown", _), Vt(c, () => {
364
+ y.value = c.value.getBoundingClientRect().height;
365
+ }), e({
366
+ visible: h,
367
+ bottom: G,
368
+ close: x
369
+ }), (p, q) => (P(), ve(xe, {
370
+ name: g(s).b("fade"),
371
+ onBeforeEnter: (R) => a.value = !0,
372
+ onBeforeLeave: p.onClose,
373
+ onAfterLeave: (R) => p.$emit("destroy"),
374
+ persisted: ""
375
+ }, {
376
+ default: j(() => [
377
+ $e(I("div", {
378
+ id: p.id,
379
+ ref_key: "messageRef",
380
+ ref: c,
381
+ class: T([
382
+ g(s).b(),
383
+ { [g(s).m(p.type)]: p.type },
384
+ g(s).is("closable", p.showClose),
385
+ g(s).is("plain", p.plain),
386
+ p.customClass
387
+ ]),
388
+ style: Se(g(E)),
389
+ role: "alert",
390
+ onMouseenter: k,
391
+ onMouseleave: K
392
+ }, [
393
+ p.repeatNum > 1 ? (P(), ve(g($t), {
394
+ key: 0,
395
+ value: p.repeatNum,
396
+ type: g(b),
397
+ class: T(g(s).e("badge"))
398
+ }, null, 8, ["value", "type", "class"])) : Z("v-if", !0),
399
+ g(M) ? (P(), ve(g(Oe), {
400
+ key: 1,
401
+ class: T([g(s).e("icon"), g(f)])
402
+ }, {
403
+ default: j(() => [
404
+ (P(), ve(Pt(g(M))))
516
405
  ]),
517
- style: normalizeStyle(unref(customStyle)),
518
- role: "alert",
519
- onMouseenter: clearTimer,
520
- onMouseleave: startTimer
521
- }, [
522
- _ctx.repeatNum > 1 ? (openBlock(), createBlock(unref(ElBadge), {
406
+ _: 1
407
+ }, 8, ["class"])) : Z("v-if", !0),
408
+ Ce(p.$slots, "default", {}, () => [
409
+ p.dangerouslyUseHTMLString ? (P(), O(fe, { key: 1 }, [
410
+ Z(" Caution here, message could've been compromised, never use user's input as message "),
411
+ I("p", {
412
+ class: T(g(s).e("content")),
413
+ innerHTML: p.message
414
+ }, null, 10, ["innerHTML"])
415
+ ], 2112)) : (P(), O("p", {
523
416
  key: 0,
524
- value: _ctx.repeatNum,
525
- type: unref(badgeType),
526
- class: normalizeClass(unref(ns).e("badge"))
527
- }, null, 8, ["value", "type", "class"])) : createCommentVNode("v-if", true),
528
- unref(iconComponent) ? (openBlock(), createBlock(unref(ElIcon), {
529
- key: 1,
530
- class: normalizeClass([unref(ns).e("icon"), unref(typeClass)])
531
- }, {
532
- default: withCtx(() => [
533
- (openBlock(), createBlock(resolveDynamicComponent(unref(iconComponent))))
534
- ]),
535
- _: 1
536
- }, 8, ["class"])) : createCommentVNode("v-if", true),
537
- renderSlot(_ctx.$slots, "default", {}, () => [
538
- !_ctx.dangerouslyUseHTMLString ? (openBlock(), createElementBlock("p", {
539
- key: 0,
540
- class: normalizeClass(unref(ns).e("content"))
541
- }, toDisplayString(_ctx.message), 3)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
542
- createCommentVNode(" Caution here, message could've been compromised, never use user's input as message "),
543
- createElementVNode("p", {
544
- class: normalizeClass(unref(ns).e("content")),
545
- innerHTML: _ctx.message
546
- }, null, 10, ["innerHTML"])
547
- ], 2112))
417
+ class: T(g(s).e("content"))
418
+ }, ie(p.message), 3))
419
+ ]),
420
+ p.showClose ? (P(), ve(g(Oe), {
421
+ key: 2,
422
+ class: T(g(s).e("closeBtn")),
423
+ onClick: At(x, ["stop"])
424
+ }, {
425
+ default: j(() => [
426
+ F(g(o))
548
427
  ]),
549
- _ctx.showClose ? (openBlock(), createBlock(unref(ElIcon), {
550
- key: 2,
551
- class: normalizeClass(unref(ns).e("closeBtn")),
552
- onClick: withModifiers(close, ["stop"])
553
- }, {
554
- default: withCtx(() => [
555
- createVNode(unref(Close))
556
- ]),
557
- _: 1
558
- }, 8, ["class", "onClick"])) : createCommentVNode("v-if", true)
559
- ], 46, ["id"]), [
560
- [vShow, visible.value]
561
- ])
562
- ]),
563
- _: 3
564
- }, 8, ["name", "onBeforeEnter", "onBeforeLeave", "onAfterLeave"]);
565
- };
428
+ _: 1
429
+ }, 8, ["class", "onClick"])) : Z("v-if", !0)
430
+ ], 46, ["id"]), [
431
+ [et, h.value]
432
+ ])
433
+ ]),
434
+ _: 3
435
+ }, 8, ["name", "onBeforeEnter", "onBeforeLeave", "onAfterLeave"]));
566
436
  }
567
437
  });
568
- var MessageConstructor = /* @__PURE__ */ _export_sfc$1(_sfc_main$1, [["__file", "message.vue"]]);
569
- let seed = 1;
570
- const normalizeOptions = (params) => {
571
- const options = !params || isString$1(params) || isVNode(params) || isFunction(params) ? { message: params } : params;
572
- const normalized = {
573
- ...messageDefaults,
574
- ...options
438
+ var ln = /* @__PURE__ */ Ze(dn, [["__file", "message.vue"]]);
439
+ let cn = 1;
440
+ const it = (i) => {
441
+ const e = !i || Re(i) || nt(i) || De(i) ? { message: i } : i, t = {
442
+ ...N,
443
+ ...e
575
444
  };
576
- if (!normalized.appendTo) {
577
- normalized.appendTo = document.body;
578
- } else if (isString$1(normalized.appendTo)) {
579
- let appendTo = document.querySelector(normalized.appendTo);
580
- if (!isElement(appendTo)) {
581
- appendTo = document.body;
582
- }
583
- normalized.appendTo = appendTo;
584
- }
585
- if (isBoolean(messageConfig.grouping) && !normalized.grouping) {
586
- normalized.grouping = messageConfig.grouping;
587
- }
588
- if (isNumber(messageConfig.duration) && normalized.duration === 3e3) {
589
- normalized.duration = messageConfig.duration;
590
- }
591
- if (isNumber(messageConfig.offset) && normalized.offset === 16) {
592
- normalized.offset = messageConfig.offset;
593
- }
594
- if (isBoolean(messageConfig.showClose) && !normalized.showClose) {
595
- normalized.showClose = messageConfig.showClose;
596
- }
597
- if (isBoolean(messageConfig.plain) && !normalized.plain) {
598
- normalized.plain = messageConfig.plain;
599
- }
600
- return normalized;
601
- };
602
- const closeMessage = (instance) => {
603
- const idx = instances.indexOf(instance);
604
- if (idx === -1)
445
+ if (!t.appendTo)
446
+ t.appendTo = document.body;
447
+ else if (Re(t.appendTo)) {
448
+ let n = document.querySelector(t.appendTo);
449
+ Et(n) || (n = document.body), t.appendTo = n;
450
+ }
451
+ return ke(z.grouping) && !t.grouping && (t.grouping = z.grouping), ye(z.duration) && t.duration === 3e3 && (t.duration = z.duration), ye(z.offset) && t.offset === 16 && (t.offset = z.offset), ke(z.showClose) && !t.showClose && (t.showClose = z.showClose), ke(z.plain) && !t.plain && (t.plain = z.plain), t;
452
+ }, mn = (i) => {
453
+ const e = H.indexOf(i);
454
+ if (e === -1)
605
455
  return;
606
- instances.splice(idx, 1);
607
- const { handler } = instance;
608
- handler.close();
609
- };
610
- const createMessage = ({ appendTo, ...options }, context) => {
611
- const id = `message_${seed++}`;
612
- const userOnClose = options.onClose;
613
- const container = document.createElement("div");
614
- const props = {
615
- ...options,
616
- id,
456
+ H.splice(e, 1);
457
+ const { handler: t } = i;
458
+ t.close();
459
+ }, hn = ({ appendTo: i, ...e }, t) => {
460
+ const n = `message_${cn++}`, o = e.onClose, a = document.createElement("div"), s = {
461
+ ...e,
462
+ id: n,
617
463
  onClose: () => {
618
- userOnClose == null ? void 0 : userOnClose();
619
- closeMessage(instance);
464
+ o?.(), mn(c);
620
465
  },
621
466
  onDestroy: () => {
622
- render(null, container);
467
+ Te(null, a);
623
468
  }
624
- };
625
- const vnode = createVNode(MessageConstructor, props, isFunction(props.message) || isVNode(props.message) ? {
626
- default: isFunction(props.message) ? props.message : () => props.message
469
+ }, r = F(ln, s, De(s.message) || nt(s.message) ? {
470
+ default: De(s.message) ? s.message : () => s.message
627
471
  } : null);
628
- vnode.appContext = context || message._context;
629
- render(vnode, container);
630
- appendTo.appendChild(container.firstElementChild);
631
- const vm = vnode.component;
632
- const handler = {
633
- close: () => {
634
- vm.exposed.close();
635
- }
636
- };
637
- const instance = {
638
- id,
639
- vnode,
640
- vm,
641
- handler,
642
- props: vnode.component.props
472
+ r.appContext = t || le._context, Te(r, a), i.appendChild(a.firstElementChild);
473
+ const l = r.component, c = {
474
+ id: n,
475
+ vnode: r,
476
+ vm: l,
477
+ handler: {
478
+ close: () => {
479
+ l.exposed.close();
480
+ }
481
+ },
482
+ props: r.component.props
643
483
  };
644
- return instance;
645
- };
646
- const message = (options = {}, context) => {
647
- if (!isClient)
648
- return { close: () => void 0 };
649
- const normalized = normalizeOptions(options);
650
- if (normalized.grouping && instances.length) {
651
- const instance2 = instances.find(({ vnode: vm }) => {
652
- var _a;
653
- return ((_a = vm.props) == null ? void 0 : _a.message) === normalized.message;
484
+ return c;
485
+ }, le = (i = {}, e) => {
486
+ if (!Pe)
487
+ return { close: () => {
488
+ } };
489
+ const t = it(i);
490
+ if (t.grouping && H.length) {
491
+ const o = H.find(({ vnode: a }) => {
492
+ var s;
493
+ return ((s = a.props) == null ? void 0 : s.message) === t.message;
654
494
  });
655
- if (instance2) {
656
- instance2.props.repeatNum += 1;
657
- instance2.props.type = normalized.type;
658
- return instance2.handler;
659
- }
660
- }
661
- if (isNumber(messageConfig.max) && instances.length >= messageConfig.max) {
662
- return { close: () => void 0 };
663
- }
664
- const instance = createMessage(normalized, context);
665
- instances.push(instance);
666
- return instance.handler;
495
+ if (o)
496
+ return o.props.repeatNum += 1, o.props.type = t.type, o.handler;
497
+ }
498
+ if (ye(z.max) && H.length >= z.max)
499
+ return { close: () => {
500
+ } };
501
+ const n = hn(t, e);
502
+ return H.push(n), n.handler;
667
503
  };
668
- messageTypes.forEach((type) => {
669
- message[type] = (options = {}, appContext) => {
670
- const normalized = normalizeOptions(options);
671
- return message({ ...normalized, type }, appContext);
504
+ st.forEach((i) => {
505
+ le[i] = (e = {}, t) => {
506
+ const n = it(e);
507
+ return le({ ...n, type: i }, t);
672
508
  };
673
509
  });
674
- function closeAll(type) {
675
- const instancesToClose = [...instances];
676
- for (const instance of instancesToClose) {
677
- if (!type || type === instance.props.type) {
678
- instance.handler.close();
679
- }
680
- }
510
+ function un(i) {
511
+ const e = [...H];
512
+ for (const t of e)
513
+ (!i || i === t.props.type) && t.handler.close();
681
514
  }
682
- message.closeAll = closeAll;
683
- message._context = null;
684
- const ElMessage = withInstallFunction(message, "$message");
685
- class CommandFlowComponent extends Component {
515
+ le.closeAll = un;
516
+ le._context = null;
517
+ const D = Mt(le, "$message");
518
+ class V extends Ee {
686
519
  _renderer;
687
520
  get renderer() {
688
- if (!this._renderer) this._renderer = this.parent?.findComponentByName("Renderer");
689
- return this._renderer;
521
+ return this._renderer || (this._renderer = this.parent?.findComponentByName("Renderer")), this._renderer;
690
522
  }
691
523
  _domElement;
692
524
  get domElement() {
693
- if (!this._domElement) this._domElement = this.editor?.domContainer?.domElement;
694
- return this._domElement;
525
+ return this._domElement || (this._domElement = this.editor?.domContainer?.domElement), this._domElement;
695
526
  }
696
527
  _editor;
697
528
  get editor() {
698
- if (!this._editor) this._editor = this.parent?.findComponentByName("Editor");
699
- return this._editor;
529
+ return this._editor || (this._editor = this.parent?.findComponentByName("Editor")), this._editor;
700
530
  }
701
531
  _eventInput;
702
532
  get eventInput() {
703
- if (!this._eventInput) this._eventInput = this.parent?.findComponentByName("EventInput");
704
- return this._eventInput;
533
+ return this._eventInput || (this._eventInput = this.parent?.findComponentByName("EventInput")), this._eventInput;
705
534
  }
706
535
  _renderManager;
707
536
  get renderManager() {
708
- if (!this._renderManager) this._renderManager = this.parent?.findComponentByName("RenderManager");
709
- return this._renderManager;
537
+ return this._renderManager || (this._renderManager = this.parent?.findComponentByName("RenderManager")), this._renderManager;
710
538
  }
711
539
  _commandManager;
712
540
  get commandManager() {
713
- if (!this._commandManager) this._commandManager = this.editor?.commandManager;
714
- return this._commandManager;
541
+ return this._commandManager || (this._commandManager = this.editor?.commandManager), this._commandManager;
542
+ }
543
+ _default;
544
+ get default() {
545
+ return this._default || (this._default = this.parent?.findComponentByName("Default")), this._default;
715
546
  }
716
547
  interruptKeys = ["escape"];
717
548
  commandName = "";
718
549
  constructor() {
719
550
  super();
720
551
  }
721
- onAddFromParent(parent) {
552
+ onAddFromParent(e) {
722
553
  this.editor.addEventListener("cancelCommand", () => {
723
554
  this.cancel();
724
555
  });
@@ -727,22 +558,21 @@ class CommandFlowComponent extends Component {
727
558
  * 取消
728
559
  */
729
560
  cancel() {
730
- if (this.editor.commandManager.currentName !== this.commandName) return;
731
- this.editor.commandManager.cancel();
561
+ const e = this.commandName || this.constructor.commandName;
562
+ this.commandManager.currentName === e && this.commandManager.cancel();
732
563
  }
733
564
  /**
734
- * 创建中断
565
+ * 创建中断处理命令节点
735
566
  * @returns
736
567
  */
737
568
  createInterrupt() {
738
- return (next, data) => {
569
+ return (e, t) => {
739
570
  this.addEventRecord(
740
571
  "clear",
741
- this.editor?.eventInput.addEventListener("codeChange", async () => {
742
- if (this.editor.eventInput.isKeyDowns(this.interruptKeys)) this.cancel();
572
+ this.eventInput.addEventListener("codeChange", async () => {
573
+ this.eventInput.isKeyDowns(this.interruptKeys) && this.cancel();
743
574
  })
744
- );
745
- next(data);
575
+ ), e(t);
746
576
  };
747
577
  }
748
578
  /**
@@ -750,305 +580,166 @@ class CommandFlowComponent extends Component {
750
580
  * @param cursor
751
581
  * @returns
752
582
  */
753
- createCursor(cursor) {
754
- return (next, data) => {
755
- const defaultCursor = this.domElement.style.cursor;
756
- this.domElement.style.cursor = cursor;
757
- this.addEventRecord("clear", () => {
758
- this.domElement.style.cursor = defaultCursor ?? "default";
759
- });
760
- next(data);
583
+ createCursor(e) {
584
+ return (t, n) => {
585
+ const o = this.domElement.style.cursor;
586
+ this.domElement.style.cursor = e, this.addEventRecord("clear", () => {
587
+ this.domElement.style.cursor = o ?? "default";
588
+ }), t(n);
761
589
  };
762
590
  }
763
591
  /**
764
592
  * 创建清理
765
593
  * @returns
766
594
  */
767
- createFinally(keys = []) {
595
+ createFinally(e = []) {
768
596
  return () => {
769
- this.canceEventRecord("clear");
770
- keys.forEach((k) => this.canceEventRecord(k));
597
+ this.canceEventRecord("clear"), e.forEach((t) => this.canceEventRecord(t));
771
598
  };
772
599
  }
773
600
  }
774
- class DrawLine extends CommandFlowComponent {
601
+ class pn extends V {
775
602
  static name = "DrawLine";
776
- container = new THREE.Group();
603
+ container = new m.Group();
777
604
  interruptKeys = ["escape"];
778
605
  withdrawalKeys = ["control", "z"];
779
606
  shortcutKeys = ["control", "l"];
780
607
  confirmKeys = ["enter"];
781
608
  commandName = "draw-line";
782
- onAddFromParent(parent) {
783
- super.onAddFromParent(parent);
784
- this.editor.container.add(this.container);
785
- const commandFlow = this.commandManager.addCommandFlow(this.commandName).add(this.createInterrupt()).add(this.createCursor("crosshair")).add(this.selectPoint.bind(this));
786
- commandFlow.addEventListener("finally", this.createFinally());
787
- commandFlow.addEventListener("completed", (e) => this.completed(e.data));
788
- this.eventInput.addKeyCombination(this.commandName, this.shortcutKeys);
789
- this.eventInput.addEventListener("codeChange", async () => this.eventInput.isKeyCombination(this.commandName) && await this.commandManager.start(this.commandName));
790
- this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
609
+ onAddFromParent(e) {
610
+ super.onAddFromParent(e), this.editor.container.add(this.container);
611
+ const t = this.commandManager.addCommandFlow(this.commandName).add(this.createInterrupt()).add(this.createCursor("crosshair")).add(this.selectPoint.bind(this)).add(this.end.bind(this)).addRollback(this.rollback.bind(this)).addRevokeRollback(this.revokeRollback.bind(this));
612
+ t.addEventListener("finally", this.createFinally()), t.addEventListener("completed", (n) => this.completed(n.data)), this.eventInput.addKeyCombination(this.commandName, this.shortcutKeys), this.eventInput.addEventListener("codeChange", async () => this.eventInput.isKeyCombination(this.commandName) && await this.commandManager.start(this.commandName)), this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
791
613
  }
792
614
  /** 选择点
793
615
  * @param next
794
616
  */
795
- selectPoint(next) {
796
- let editor = this.parent?.findComponentByName("Editor"), start = null, end = null, points = [], circle = new THREE.Mesh(new THREE.SphereGeometry(0.05), new THREE.MeshBasicMaterial({ color: 65280 })), dom = editor.domContainer.domElement, line2 = new Lines([], 16711935), auxiliaryLine = new Lines([
797
- new THREE.Vector3(-1e4, 0, 0),
798
- new THREE.Vector3(1e4, 0, 0),
799
- new THREE.Vector3(0, -1e4, 0),
800
- new THREE.Vector3(0, 1e4, 0)
617
+ selectPoint(e) {
618
+ let t = this.parent?.findComponentByName("Editor"), n = null, o = null, a = [], s = new m.Mesh(new m.SphereGeometry(0.05), new m.MeshBasicMaterial({ color: 65280 })), r = t.domContainer.domElement, l = new we([], 16711935), d = new we([
619
+ new m.Vector3(-1e4, 0, 0),
620
+ new m.Vector3(1e4, 0, 0),
621
+ new m.Vector3(0, -1e4, 0),
622
+ new m.Vector3(0, 1e4, 0)
801
623
  ], 16711935);
802
- auxiliaryLine.material = new THREE.LineDashedMaterial({
624
+ d.material = new m.LineDashedMaterial({
803
625
  color: 4235007,
804
626
  dashSize: 0.1,
805
627
  gapSize: 0.1,
806
628
  linewidth: 0.1
807
- });
808
- this.container.add(line2);
809
- const updateLine = () => {
810
- line2.setPoint(...points, start, end);
811
- auxiliaryLine.position.copy(end);
812
- this.container.add(auxiliaryLine);
813
- auxiliaryLine.computeLineDistances();
814
- };
815
- const currentPoint = new THREE.Vector3();
629
+ }), this.container.add(l);
630
+ const c = () => {
631
+ l.setPoint(...a, n, o), d.position.copy(o), this.container.add(d), d.computeLineDistances();
632
+ }, h = new m.Vector3();
816
633
  this.addEventRecord(
817
634
  "clear",
818
- editor.addEventListener("pointerPositionChange", () => {
819
- const { point, find } = editor.renderManager.adsorption();
820
- if (find) {
821
- circle.position.set(point.x, point.y, 0);
822
- this.container.add(circle);
823
- dom.style.cursor = "none";
824
- } else {
825
- circle.removeFromParent();
826
- dom.style.cursor = "crosshair";
827
- }
828
- currentPoint.copy(point);
829
- if (!(start && end)) return;
830
- if (editor.eventInput.isKeyDown("shift")) {
831
- const x = Math.abs(editor.pointerPosition.x - start.x), y = Math.abs(editor.pointerPosition.y - start.y);
832
- if (x > y) end.set(editor.pointerPosition.x, start.y, 0);
833
- else end.set(start.x, editor.pointerPosition.y, 0);
834
- updateLine();
835
- currentPoint.copy(end);
836
- return;
635
+ t.addEventListener("pointerPositionChange", () => {
636
+ const { point: y, find: w } = t.renderManager.adsorption();
637
+ if (this.dispatchEvent({ type: "pointerMove", point: y }), w ? (s.position.set(y.x, y.y, 0), this.container.add(s), r.style.cursor = "none") : (s.removeFromParent(), r.style.cursor = "crosshair"), h.copy(y), !!(n && o)) {
638
+ if (t.eventInput.isKeyDown("shift")) {
639
+ const b = Math.abs(t.pointerPosition.x - n.x), f = Math.abs(t.pointerPosition.y - n.y);
640
+ b > f ? o.set(t.pointerPosition.x, n.y, 0) : o.set(n.x, t.pointerPosition.y, 0), c(), h.copy(o);
641
+ return;
642
+ }
643
+ o.set(t.pointerPosition.x, t.pointerPosition.y, 0), c();
837
644
  }
838
- end.set(editor.pointerPosition.x, editor.pointerPosition.y, 0);
839
- updateLine();
840
645
  }),
841
- editor.eventInput.addEventListener("codeChange", async () => {
842
- if (editor.eventInput.isKeyDown("mouse_0")) {
843
- if (!start) {
844
- start = currentPoint.clone();
845
- end = currentPoint.clone();
846
- updateLine();
646
+ t.eventInput.addEventListener("codeChange", async () => {
647
+ if (t.eventInput.isKeyDown("mouse_0")) {
648
+ if (!n) {
649
+ n = h.clone(), o = h.clone(), c();
847
650
  return;
848
651
  }
849
- end = currentPoint.clone();
850
- points.push(start.clone(), end.clone());
851
- start.copy(end);
852
- updateLine();
853
- } else if (editor.eventInput.isOnlyKeyDowns(this.withdrawalKeys)) {
854
- if (points.length) {
855
- const { point } = editor.renderManager.adsorption();
856
- points.pop();
857
- end?.copy(point);
858
- start?.copy(points.pop());
859
- updateLine();
652
+ o = h.clone(), a.push(n.clone(), o.clone()), n.copy(o), c();
653
+ } else if (t.eventInput.isOnlyKeyDowns(this.withdrawalKeys)) {
654
+ if (a.length) {
655
+ const { point: y } = t.renderManager.adsorption();
656
+ a.pop(), o?.copy(y), n?.copy(a.pop()), c();
860
657
  }
861
- } else if (editor.eventInput.isKeyDowns(this.confirmKeys)) next(points);
658
+ } else t.eventInput.isKeyDowns(this.confirmKeys) && e(a);
862
659
  }),
863
660
  function() {
864
- line2.removeFromParent();
865
- circle.removeFromParent();
866
- auxiliaryLine.removeFromParent();
661
+ l.removeFromParent(), s.removeFromParent(), d.removeFromParent();
867
662
  }
868
663
  );
869
664
  }
665
+ /** 结束, 汇总结果
666
+ * @param points
667
+ */
668
+ end(e, t) {
669
+ const n = [];
670
+ for (let o = 0; o < t.length; o += 2)
671
+ n.push(new ce(W.from(t[o]), W.from(t[o + 1])));
672
+ e(n);
673
+ }
870
674
  /** 执行完成
871
675
  */
872
- completed(points) {
873
- const editor = this.editor, lines = [];
874
- for (let i = 0; i < points.length; i += 2) {
875
- lines.push(new LineSegment(Point.from(points[i]), Point.from(points[i + 1])));
876
- }
877
- editor.renderManager.addLines(lines);
878
- editor.renderManager.draw();
676
+ completed(e) {
677
+ this.renderManager.addLines(e), this.renderManager.draw();
678
+ }
679
+ /** 回滚操作
680
+ * @param data
681
+ */
682
+ rollback(e) {
683
+ return e.forEach((t) => this.renderManager.removeLine(t)), this.renderManager.draw(), e;
684
+ }
685
+ /** 撤回回滚
686
+ * @param lines
687
+ * @returns
688
+ */
689
+ revokeRollback(e) {
690
+ return this.completed(e), e;
879
691
  }
880
692
  }
881
- class Default extends Component {
693
+ class Be extends Ee {
882
694
  static name = "Default";
883
695
  get editor() {
884
696
  return this.parent?.findComponentByName("Editor");
885
697
  }
886
698
  renderer;
887
- container = new THREE.Group();
699
+ container = new m.Group();
888
700
  onAddFromParent() {
889
- const editor = this.editor, commandManager = editor.commandManager;
890
- this.renderer = this.parent?.findComponentByName("Renderer");
891
- editor.container.add(this.container);
892
- commandManager.addCommandFlow("default").add(this.start.bind(this)).addEventListener("finally", this.finally.bind(this));
893
- commandManager.addEventListener("startedBefore", (e) => {
894
- if (e.currentName === "default" && e.name !== "default") commandManager.cancel();
895
- });
896
- commandManager.addEventListener("finally", (e) => e.name !== "default" && commandManager.start("default"));
897
- editor.eventInput.addCancelDefaultBehavior(() => editor.eventInput.isOnlyKeyDowns(["control", "g"]));
701
+ const e = this.editor, t = e.commandManager;
702
+ this.renderer = this.parent?.findComponentByName("Renderer"), e.container.add(this.container), t.addCommandFlow("default").add(this.start.bind(this)).addEventListener("finally", this.finally.bind(this)), t.addEventListener("startedBefore", (n) => {
703
+ n.currentName === "default" && n.name !== "default" && t.cancel();
704
+ }), t.addEventListener("finally", (n) => n.name !== "default" && t.start("default")), e.eventInput.addCancelDefaultBehavior(() => e.eventInput.isOnlyKeyDowns(["control", "g"]));
898
705
  }
899
706
  selectLines = [];
900
- selectLineObject3D = new THREE.Mesh();
707
+ selectLineObject3D = new m.Mesh();
901
708
  /** 添加选择的线段
902
709
  * @param lineSegment
903
710
  */
904
- addSelectLine(lineSegment) {
905
- if (this.selectLines.indexOf(lineSegment) > -1) return;
906
- this.selectLines.push(lineSegment);
907
- this.updateSelectLinesGeometry();
908
- this.dispatchEvent({
711
+ addSelectLine(e) {
712
+ this.selectLines.indexOf(e) > -1 || (this.selectLines.push(e), this.updateSelectLinesGeometry(), this.dispatchEvent({
909
713
  type: "selectLineChange"
910
- });
714
+ }));
911
715
  }
912
716
  /** 移除选择的线段
913
717
  * @param lineSegment
914
718
  */
915
- removeSelectLine(lineSegment) {
916
- const i = this.selectLines.indexOf(lineSegment);
917
- if (i > -1) {
918
- this.selectLines.splice(i, 1);
919
- this.updateSelectLinesGeometry();
920
- this.dispatchEvent({
921
- type: "selectLineChange"
922
- });
923
- }
719
+ removeSelectLine(e) {
720
+ const t = this.selectLines.indexOf(e);
721
+ t > -1 && (this.selectLines.splice(t, 1), this.updateSelectLinesGeometry(), this.dispatchEvent({
722
+ type: "selectLineChange"
723
+ }));
924
724
  }
925
725
  /**
926
726
  * 移除所有选中线段
927
727
  */
928
728
  removeSelectLineAll() {
929
- this.selectLines.length = 0;
930
- this.dispatchEvent({
729
+ this.selectLines.length = 0, this.dispatchEvent({
931
730
  type: "selectLineChange"
932
731
  });
933
732
  }
934
- /**
935
- * 删除选择的线段
936
- */
937
- deleteSelectLine() {
938
- const editor = this.editor;
939
- this.selectLines.forEach((line2) => editor.renderManager.removeLine(line2));
940
- this.removeSelectLineAll();
941
- this.updateSelectLinesGeometry();
942
- ElMessage({ message: "删除成功", type: "success" });
943
- }
944
- /**
945
- * 删除选择线段上的窗户
946
- */
947
- deleteSelectWindow() {
948
- let is = false;
949
- this.selectLines.forEach((line2) => {
950
- if (!line2.userData.isWindow) return;
951
- line2.userData = {};
952
- is = true;
953
- });
954
- this.editor.renderManager.draw();
955
- is && ElMessage({ message: "删除窗户成功", type: "success" });
956
- }
957
- /**
958
- * 如果只选择两个线段,可为两个未链接的点创建连接
959
- */
960
- connection() {
961
- if (this.selectLines.length !== 2) {
962
- ElMessage({ message: "连接失败,请选择两个线段", type: "warning" });
963
- return;
964
- }
965
- const editor = this.editor;
966
- let start, end, diatance = Infinity;
967
- for (let i = 0; i < 2; i++)
968
- for (let j = 0; j < 2; j++) {
969
- const point1 = this.selectLines[0].points[i];
970
- const point2 = this.selectLines[1].points[j];
971
- const d = point1.distance(point2);
972
- if (d < diatance) {
973
- start = point1;
974
- end = point2;
975
- diatance = d;
976
- }
977
- }
978
- if (start && end) {
979
- const line2 = new LineSegment(start.clone(), end.clone());
980
- editor.renderManager.addLine(line2);
981
- editor.renderManager.draw();
982
- ElMessage({ message: "连接成功", type: "success" });
983
- }
984
- }
985
- /**
986
- * 如果只选择两个线段,可为两个未链接的点创建连接, 通过计算交点,线段延长到交点
987
- */
988
- intersectionConnection() {
989
- if (this.selectLines.length !== 2) {
990
- ElMessage({ message: "连接失败,请选择两个线段", type: "warning" });
991
- return;
992
- }
993
- const editor = this.editor, line1 = this.selectLines[0], line2 = this.selectLines[1], point = this.selectLines[0].getIntersection(this.selectLines[1]);
994
- if (!point) return;
995
- editor.renderManager.removeLine(line1);
996
- editor.renderManager.removeLine(line2);
997
- if (line1.start.distance(point) < line1.end.distance(point)) {
998
- line1.start.copy(point);
999
- } else {
1000
- line1.end.copy(point);
1001
- }
1002
- if (line2.start.distance(point) < line2.end.distance(point)) {
1003
- line2.start.copy(point);
1004
- } else {
1005
- line2.end.copy(point);
1006
- }
1007
- editor.renderManager.addLines([line1, line2]);
1008
- editor.renderManager.draw();
1009
- ElMessage({ message: "连接成功", type: "success" });
1010
- }
1011
- /**
1012
- * 如果只选择两个线段, 且两个线段在一条路径上,合并线段
1013
- */
1014
- mergeLine() {
1015
- if (this.selectLines.length !== 2) {
1016
- ElMessage({ message: "未执行线段合并,请选择两条线段", type: "warning" });
1017
- return;
1018
- }
1019
- const editor = this.editor, line1 = this.selectLines[0], line2 = this.selectLines[1];
1020
- for (let i = 0; i < line1.points.length; i++) {
1021
- const p1 = line1.points[i];
1022
- for (let j = 0; j < line2.points.length; j++) {
1023
- const p2 = line2.points[j];
1024
- if (p1.equal(p2)) {
1025
- const p1Next = line1.points[(i + 1) % 2];
1026
- const p2Next = line2.points[(j + 1) % 2];
1027
- editor.renderManager.removeLine(line1);
1028
- editor.renderManager.removeLine(line2);
1029
- const line3 = new LineSegment(p1Next, p2Next);
1030
- editor.renderManager.addLine(line3);
1031
- editor.renderManager.draw();
1032
- ElMessage({ message: "已合并", type: "success" });
1033
- return;
1034
- }
1035
- }
1036
- }
1037
- ElMessage({ message: "合并失败,两条线未找到共用点", type: "warning" });
1038
- }
1039
733
  _timer = null;
1040
734
  /**
1041
735
  * 更新选择的线段
1042
736
  */
1043
737
  updateSelectLinesGeometry() {
1044
- if (this._timer) clearTimeout(this._timer);
1045
- this._timer = setTimeout(() => {
738
+ this._timer && clearTimeout(this._timer), this._timer = setTimeout(() => {
1046
739
  if (this.destroyed) return;
1047
- if (this.selectLines.length) this.container.add(this.selectLineObject3D);
1048
- else this.selectLineObject3D.removeFromParent();
1049
- const editor = this.editor;
1050
- const position = this.selectLines.flatMap((line2) => line2.expandToRectangle(0.04, "bothSides").createGeometry());
1051
- this.selectLineObject3D.geometry = editor.renderManager.createGeometry({ position }, position.length / 3);
740
+ this.selectLines.length ? this.container.add(this.selectLineObject3D) : this.selectLineObject3D.removeFromParent();
741
+ const e = this.editor, t = this.selectLines.flatMap((n) => n.expandToRectangle(0.04, "bothSides").createGeometry());
742
+ this.selectLineObject3D.geometry = e.renderManager.createGeometry({ position: t }, t.length / 3);
1052
743
  }, 10);
1053
744
  }
1054
745
  /**
@@ -1056,109 +747,74 @@ class Default extends Component {
1056
747
  * @param next
1057
748
  */
1058
749
  start() {
1059
- const editor = this.editor, eventInput = editor.eventInput, object3D = new THREE.Mesh(), dom = editor.domContainer.domElement;
1060
- let currentSelectLine = null;
1061
- object3D.position.z = 0.01;
1062
- this.selectLineObject3D.position.z = object3D.position.z + 0.01;
1063
- object3D.material = new THREE.MeshBasicMaterial({ color: 55561 });
1064
- eventInput.addKeyCombination("intersectionConnection", ["control", "shift", "l"]);
1065
- eventInput.addKeyCombination("connection", ["shift", "l"]);
1066
- eventInput.addKeyCombination("mergeLine", ["control", "g"]);
1067
- this.addEventRecord("clear", () => {
1068
- eventInput.removeKeyCombination("intersectionConnection");
1069
- eventInput.removeKeyCombination("connection");
1070
- eventInput.removeKeyCombination("mergeLine");
1071
- });
1072
- const showSelectBox = () => {
1073
- const startPoint = editor.pointerPosition.clone(), endPoint = editor.pointerPosition.clone(), mesh = new THREE.Mesh();
1074
- this.container.add(mesh);
1075
- mesh.position.z = 0.05;
1076
- mesh.material = new THREE.MeshBasicMaterial({
750
+ const e = this.editor, t = e.eventInput, n = new m.Mesh(), o = e.domContainer.domElement;
751
+ let a = null;
752
+ n.position.z = 1e-3, this.selectLineObject3D.position.z = n.position.z + 1e-3, n.material = new m.MeshBasicMaterial({ color: 55561 });
753
+ const s = () => {
754
+ const r = e.pointerPosition.clone(), l = e.pointerPosition.clone(), d = new m.Mesh();
755
+ this.container.add(d), d.position.z = 0.05, d.material = new m.MeshBasicMaterial({
1077
756
  color: 16777215,
1078
- transparent: true,
757
+ transparent: !0,
1079
758
  opacity: 0.5
1080
759
  });
1081
- const update = () => {
1082
- const minX = Math.min(startPoint.x, endPoint.x), maxX = Math.max(startPoint.x, endPoint.x), minY = Math.min(startPoint.y, endPoint.y), maxY = Math.max(startPoint.y, endPoint.y);
1083
- const position = [
1084
- minX,
1085
- maxY,
760
+ const c = () => {
761
+ const w = Math.min(r.x, l.x), b = Math.max(r.x, l.x), f = Math.min(r.y, l.y), M = Math.max(r.y, l.y), L = [
762
+ w,
763
+ M,
1086
764
  0,
1087
- maxX,
1088
- minY,
765
+ b,
766
+ f,
1089
767
  0,
1090
- maxX,
1091
- maxY,
768
+ b,
769
+ M,
1092
770
  0,
1093
- minX,
1094
- maxY,
771
+ w,
772
+ M,
1095
773
  0,
1096
- minX,
1097
- minY,
774
+ w,
775
+ f,
1098
776
  0,
1099
- maxX,
1100
- minY,
777
+ b,
778
+ f,
1101
779
  0
1102
780
  ];
1103
- mesh.geometry = editor.renderManager.createGeometry({ position }, position.length / 3);
1104
- };
1105
- const move = () => {
1106
- endPoint.copy(editor.pointerPosition);
1107
- update();
781
+ d.geometry = e.renderManager.createGeometry({ position: L }, L.length / 3);
782
+ }, h = () => {
783
+ l.copy(e.pointerPosition), c();
784
+ }, y = () => {
785
+ document.removeEventListener("mousemove", h), document.removeEventListener("mouseup", y), d.removeFromParent();
786
+ const w = Math.min(r.x, l.x), b = Math.max(r.x, l.x), f = Math.min(r.y, l.y), M = Math.max(r.y, l.y), L = new Ye(w, b, f, M), A = e.renderManager.quadtree.queryBox(L);
787
+ this.removeSelectLineAll(), A.forEach((G) => this.addSelectLine(G.line)), this.updateSelectLinesGeometry();
1108
788
  };
1109
- const end = () => {
1110
- document.removeEventListener("mousemove", move);
1111
- document.removeEventListener("mouseup", end);
1112
- mesh.removeFromParent();
1113
- const minX = Math.min(startPoint.x, endPoint.x), maxX = Math.max(startPoint.x, endPoint.x), minY = Math.min(startPoint.y, endPoint.y), maxY = Math.max(startPoint.y, endPoint.y);
1114
- const box = new Box2(minX, maxX, minY, maxY);
1115
- const resultList = editor.renderManager.quadtree.queryBox(box);
1116
- this.removeSelectLineAll();
1117
- resultList.forEach((result) => this.addSelectLine(result.line));
1118
- this.updateSelectLinesGeometry();
1119
- };
1120
- document.addEventListener("mousemove", move);
1121
- document.addEventListener("mouseup", end);
789
+ document.addEventListener("mousemove", h), document.addEventListener("mouseup", y);
1122
790
  };
1123
791
  this.addEventRecord(
1124
792
  "clear",
1125
793
  // 注册鼠标指针位置变化事件
1126
- editor.addEventListener("pointerPositionChange", () => {
1127
- const { line: line2 } = editor.renderManager.adsorption(0.05);
1128
- if (line2) {
1129
- const rectangle = line2.expandToRectangle(0.02, "bothSides");
1130
- object3D.geometry = editor.renderManager.createGeometry({ position: rectangle.createGeometry() }, 6);
1131
- this.container.add(object3D);
1132
- dom.style.cursor = "pointer";
1133
- currentSelectLine = line2;
1134
- } else {
1135
- object3D.removeFromParent();
1136
- dom.style.cursor = "default";
1137
- currentSelectLine = null;
1138
- }
794
+ e.addEventListener("pointerPositionChange", () => {
795
+ const { line: r } = e.renderManager.adsorption(0.04);
796
+ if (r) {
797
+ const l = r.expandToRectangle(0.025, "bothSides");
798
+ n.geometry = e.renderManager.createGeometry({ position: l.createGeometry() }, 6), this.container.add(n), o.style.cursor = "pointer", a = r;
799
+ } else
800
+ n.removeFromParent(), o.style.cursor = "default", a = null;
1139
801
  }),
1140
- eventInput.addEventListener("codeChange", () => {
1141
- if (eventInput.isKeyDown("mouse_0")) {
1142
- if (!currentSelectLine) return showSelectBox();
1143
- if (eventInput.isKeyDown("alt")) {
1144
- return this.removeSelectLine(currentSelectLine);
1145
- }
1146
- if (!eventInput.isKeyDown("control")) this.removeSelectLineAll();
1147
- this.addSelectLine(currentSelectLine);
1148
- } else if (eventInput.isOnlyKeyDown("delete")) {
1149
- this.deleteSelectLine();
1150
- } else if (eventInput.isKeyDowns(["q", "delete"])) {
1151
- this.deleteSelectWindow();
1152
- } else if (eventInput.isKeyCombination("connection")) {
1153
- this.connection();
1154
- } else if (eventInput.isKeyCombination("intersectionConnection")) {
1155
- this.intersectionConnection();
1156
- } else if (eventInput.isKeyCombination("mergeLine")) {
1157
- this.mergeLine();
1158
- }
802
+ t.addEventListener("codeChange", () => {
803
+ if (t.isKeyDown("mouse_0")) {
804
+ if (!a) return s();
805
+ if (t.isKeyDown("alt"))
806
+ return this.removeSelectLine(a);
807
+ t.isKeyDown("control") || this.removeSelectLineAll(), this.addSelectLine(a);
808
+ } else if (t.isKeyDown("mouse_1")) {
809
+ if (!a) return;
810
+ this.removeSelectLine(a);
811
+ } else if (t.isKeyDown("mouse_2")) {
812
+ if (!a) return;
813
+ this.addSelectLine(a);
814
+ } else t.isKeyDowns(["control", "z"]) ? e.commandManager.rollback() : t.isKeyDowns(["control", "y"]) && e.commandManager.revokeRollback();
1159
815
  }),
1160
816
  function() {
1161
- object3D.removeFromParent();
817
+ n.removeFromParent();
1162
818
  }
1163
819
  );
1164
820
  }
@@ -1166,32 +822,55 @@ class Default extends Component {
1166
822
  * 清理
1167
823
  */
1168
824
  finally() {
1169
- this.canceEventRecord("clear");
1170
- this.removeSelectLineAll();
1171
- this.updateSelectLinesGeometry();
825
+ this.canceEventRecord("clear"), this.removeSelectLineAll(), this.updateSelectLinesGeometry();
1172
826
  }
1173
827
  }
1174
- class CommandFlow extends EventDispatcher {
828
+ class gn extends Xe {
1175
829
  list = [];
1176
- add(operation) {
1177
- this.list.push(operation);
1178
- return this;
830
+ rollbacklist = [];
831
+ revokeRollbacklist = [];
832
+ // 是否写入操作记录
833
+ writeOperationList = !0;
834
+ /**
835
+ *
836
+ * @param operation
837
+ * @returns
838
+ */
839
+ add(e) {
840
+ return this.list.push(e), this;
841
+ }
842
+ /** 添加回滚回调列表
843
+ * @param callBack
844
+ */
845
+ addRollback(e) {
846
+ return this.rollbacklist.push(e), this;
847
+ }
848
+ /** 添加撤回回滚回调列表
849
+ * @param callBack
850
+ * @returns
851
+ */
852
+ addRevokeRollback(e) {
853
+ return this.revokeRollbacklist.push(e), this;
1179
854
  }
1180
855
  }
1181
- class CommandManager extends EventDispatcher {
856
+ class vn extends Xe {
1182
857
  commandFlowMap = /* @__PURE__ */ new Map();
1183
- lock = false;
858
+ lock = !1;
1184
859
  abortController = null;
1185
860
  resolve = null;
1186
861
  currentName = null;
1187
- _disabled = false;
1188
- set disabled(disabled) {
1189
- this._disabled = disabled;
1190
- if (this._disabled) this.cancel();
862
+ _disabled = !1;
863
+ set disabled(e) {
864
+ this._disabled = e, this._disabled && this.cancel();
1191
865
  }
1192
866
  get disabled() {
1193
867
  return this._disabled;
1194
868
  }
869
+ /**
870
+ * 操作记录
871
+ */
872
+ operationList = [];
873
+ rollbackList = [];
1195
874
  constructor() {
1196
875
  super();
1197
876
  }
@@ -1199,11 +878,10 @@ class CommandManager extends EventDispatcher {
1199
878
  * @param name
1200
879
  * @returns
1201
880
  */
1202
- addCommandFlow(name) {
1203
- if (this.commandFlowMap.has(name)) throw new Error(`${name} 命令已经存在`);
1204
- const commandFlow = new CommandFlow();
1205
- this.commandFlowMap.set(name, commandFlow);
1206
- return commandFlow;
881
+ addCommandFlow(e) {
882
+ if (this.commandFlowMap.has(e)) throw new Error(`${e} 命令已经存在`);
883
+ const t = new gn();
884
+ return this.commandFlowMap.set(e, t), t;
1207
885
  }
1208
886
  executionPromise = null;
1209
887
  executionResolve = null;
@@ -1211,118 +889,135 @@ class CommandManager extends EventDispatcher {
1211
889
  * @param name
1212
890
  * @returns
1213
891
  */
1214
- async start(name, data = null, step = 0) {
892
+ async start(e, t = null, n = 0) {
1215
893
  if (this.disabled) throw new Error("命令管理器已禁用,无法启动新的命令流");
1216
- this.dispatchEvent({
894
+ if (this.dispatchEvent({
1217
895
  type: "startedBefore",
1218
- name,
896
+ name: e,
1219
897
  currentName: this.currentName
1220
- });
1221
- this.executionPromise && await this.executionPromise;
1222
- this.executionPromise = null;
1223
- if (this.lock) {
1224
- throw new Error("命令管理器已被锁定,无法启动新的命令流");
1225
- }
1226
- const commandFlow = this.commandFlowMap.get(name);
1227
- if (!commandFlow) {
1228
- throw new Error(`命令流 ${name} 不存在`);
1229
- }
1230
- this.lock = true;
1231
- this.abortController = new AbortController();
1232
- this.currentName = name;
1233
- commandFlow.dispatchEvent({ type: "started" });
1234
- this.dispatchEvent({ type: "started", name });
898
+ }), this.executionPromise && await this.executionPromise, this.executionPromise = null, this.lock)
899
+ throw new Error("命令管理器已被 " + this.currentName + " 命令锁定,无法启动新的命令流,请退出或等待命令执行结束");
900
+ const o = this.commandFlowMap.get(e);
901
+ if (!o)
902
+ throw new Error(`命令流 ${e} 不存在`);
903
+ this.lock = !0, this.abortController = new AbortController(), this.currentName = e, o.dispatchEvent({ type: "started" }), this.dispatchEvent({ type: "started", name: e });
1235
904
  try {
1236
- for (let i = step; i < commandFlow.list.length; i++) {
1237
- const operation = commandFlow.list[i];
1238
- commandFlow.dispatchEvent({ type: "executing", index: i });
1239
- this.dispatchEvent({ type: "executing", name, index: i });
1240
- data = await new Promise((resolve) => {
1241
- this.resolve = resolve;
1242
- operation(resolve, data);
1243
- });
1244
- if (this.abortController.signal.aborted) {
1245
- commandFlow.dispatchEvent({ type: "executionInterrupt", index: i });
1246
- this.dispatchEvent({ type: "executionInterrupt", name, index: i });
1247
- this.dispatchEvent({ type: "cancel", name });
905
+ for (let a = n; a < o.list.length; a++) {
906
+ const s = o.list[a];
907
+ if (o.dispatchEvent({ type: "executing", index: a }), this.dispatchEvent({ type: "executing", name: e, index: a }), t = await new Promise((r) => {
908
+ this.resolve = r, s(r, t);
909
+ }), this.abortController.signal.aborted) {
910
+ o.dispatchEvent({ type: "executionInterrupt", index: a }), this.dispatchEvent({ type: "executionInterrupt", name: e, index: a }), this.dispatchEvent({ type: "cancel", name: e });
1248
911
  break;
1249
- } else {
1250
- commandFlow.dispatchEvent({ type: "executionCompleted", index: i, data });
1251
- this.dispatchEvent({ type: "executionCompleted", name, index: i, data });
1252
- }
912
+ } else
913
+ o.dispatchEvent({ type: "executionCompleted", index: a, data: t }), this.dispatchEvent({ type: "executionCompleted", name: e, index: a, data: t });
1253
914
  }
1254
- } catch (error) {
1255
- console.error(error);
915
+ } catch (a) {
916
+ console.error(a);
1256
917
  } finally {
1257
- if (this.abortController && !this.abortController.signal.aborted) {
1258
- commandFlow.dispatchEvent({ type: "completed", data });
1259
- this.dispatchEvent({ type: "completed", name, data });
1260
- }
1261
- this.lock = false;
1262
- this.abortController = null;
1263
- this.currentName = null;
1264
- commandFlow.dispatchEvent({ type: "finally" });
1265
- this.dispatchEvent({ type: "finally", name });
1266
- if (this.executionResolve) {
1267
- this.executionResolve(null);
1268
- this.executionResolve = null;
1269
- }
918
+ this.abortController && !this.abortController.signal.aborted && (o.dispatchEvent({ type: "completed", data: t }), this.dispatchEvent({ type: "completed", name: e, data: t }), o.writeOperationList && (this.operationList.push({ name: e, data: t }), this.rollbackList.length = 0)), this.lock = !1, this.abortController = null, this.currentName = null, o.dispatchEvent({ type: "finally" }), this.dispatchEvent({ type: "finally", name: e }), this.executionResolve && (this.executionResolve(null), this.executionResolve = null);
1270
919
  }
1271
- return data;
920
+ return t;
1272
921
  }
1273
922
  /** 取消当前命令
1274
923
  */
1275
924
  cancel() {
1276
- if (this.abortController) {
1277
- this.abortController.abort();
1278
- if (this.resolve) this.resolve();
1279
- this.executionPromise = new Promise((resolve) => this.executionResolve = resolve);
925
+ this.abortController && (this.abortController.abort(), this.resolve && this.resolve(), this.executionPromise = new Promise((e) => this.executionResolve = e));
926
+ }
927
+ /**
928
+ * 回滚
929
+ */
930
+ rollback() {
931
+ try {
932
+ const e = this.operationList.pop();
933
+ if (!e) return !1;
934
+ const t = this.commandFlowMap.get(e.name);
935
+ if (!t) return !1;
936
+ const n = t.rollbacklist.reduce((o, a) => a(o), e.data);
937
+ return this.dispatchEvent({ type: "rollback", name: e.name }), this.rollbackList.push({
938
+ data: n,
939
+ name: e.name
940
+ }), !0;
941
+ } catch (e) {
942
+ throw new Error(`回滚失败:${e}`);
943
+ }
944
+ }
945
+ /**
946
+ * 撤销回滚
947
+ */
948
+ revokeRollback() {
949
+ try {
950
+ const e = this.rollbackList.pop();
951
+ if (!e) return !1;
952
+ const t = this.commandFlowMap.get(e.name);
953
+ if (!t) return !1;
954
+ const n = t.revokeRollbacklist.reduce((o, a) => a(o), e.data);
955
+ return this.dispatchEvent({ type: "revokeRollback", name: e.name }), this.operationList.push({ name: e.name, data: n }), !0;
956
+ } catch (e) {
957
+ throw new Error(`撤回回滚失败:${e}`);
1280
958
  }
1281
959
  }
1282
960
  }
1283
- const door = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1757902601497'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='9801'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M761.344%20119.296H226.816c-18.944%200-39.424%2011.776-39.424%2030.72V921.6h614.4V148.48c0.512-18.944-22.016-29.184-40.448-29.184z%20m-537.6%20768c-2.048%200-2.048%200%200%200L221.696%20163.84c0-5.12%205.12-10.24%2010.24-10.24h522.24c8.704%200%2013.824%205.12%2013.824%2013.824v720.384s0%201.536-1.536%201.536h-15.36V194.56c0-16.896-8.704-24.064-29.184-24.064H266.24c-18.944%200-27.136%208.704-27.136%2024.064v692.736h-15.36z%20m49.152%200V204.8H716.8v682.496H272.896z'%20p-id='9802'%3e%3c/path%3e%3cpath%20d='M648.704%20508.416c-16.896%200-32.256%2013.824-32.256%2032.256%200%2016.896%2013.824%2032.256%2032.256%2032.256s32.256-13.824%2032.256-32.256c0-16.896-13.824-32.256-32.256-32.256z'%20p-id='9803'%3e%3c/path%3e%3c/svg%3e";
1284
- const __vite_glob_0_0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
961
+ const fn = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='5569'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20fill='%23555'%20width='16'%20height='16'%3e%3cpath%20d='M522.1888%20811.3152a412.1088%20412.1088%200%200%200-114.5344-269.7728l-244.48%20269.7728h359.0144zM450.816%20493.824c83.5072%2085.3504%20132.7104%20197.4784%20136.5504%20317.4912h417.5872v63.232H18.9952L676.1472%20149.4016l48.9472%2041.7792-274.2784%20302.6432z'%20%3e%3c/path%3e%3c/svg%3e", yn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
962
+ __proto__: null,
963
+ default: fn
964
+ }, Symbol.toStringTag, { value: "Module" })), wn = "data:image/svg+xml,%3csvg%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23555'%20width='16'%20height='16'%3e%3cpath%20d='M639.999191%20893.597594c-0.999994-54.699654-36.39977-101.099361-85.39946-118.399252-6.39996-2.199986-10.599933-8.299948-10.599933-14.999905V263.801573c0-6.699958%204.199973-12.799919%2010.599933-14.999905%2049.09969-17.299891%2084.399467-63.599598%2085.39946-118.399252C641.299183%2059.902862%20583.399549%200.503237%20512.899994%200.00324%20441.800444-0.496757%20384.000809%2057.00288%20384.000809%20128.002431c0%2055.699648%2035.599775%20103.099349%2085.299461%20120.699238%206.39996%202.299985%2010.699932%208.299948%2010.699932%2015.099904v496.396864c0%206.799957-4.299973%2012.799919-10.699932%2015.099904-49.699686%2017.599889-85.299461%2064.999589-85.299461%20120.699238%200%2070.999551%2057.799635%20128.499188%20128.899185%20127.999191%2070.499555-0.499997%20128.399189-59.899622%20127.099197-130.399176zM448.000404%20128.002431c0-35.299777%2028.699819-63.999596%2063.999596-63.999595s63.999596%2028.699819%2063.999596%2063.999595-28.699819%2063.999596-63.999596%2063.999596-63.999596-28.699819-63.999596-63.999596z%20m0%20767.995148c0-35.299777%2028.699819-63.999596%2063.999596-63.999596s63.999596%2028.699819%2063.999596%2063.999596-28.699819%2063.999596-63.999596%2063.999595-63.999596-28.699819-63.999596-63.999595z'%3e%3c/path%3e%3c/svg%3e", bn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
965
+ __proto__: null,
966
+ default: wn
967
+ }, Symbol.toStringTag, { value: "Module" })), Cn = "data:image/svg+xml,%3csvg%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23555'%20width='16'%20height='16'%3e%3cpath%20d='M909.050991%20169.476903l-217.554898%200%200-31.346939c0-39.5866-32.205493-71.792093-71.793116-71.792093L408.15591%2066.337871c-39.5866%200-71.792093%2032.205493-71.792093%2071.792093l0%2031.346939L113.349581%20169.476903c-11.013845%200-19.942191%208.940626-19.942191%2019.954471s8.928347%2019.954471%2019.942191%2019.954471l84.264149%200%200%20640.687918c0%2060.479443%2049.203632%20109.683075%20109.683075%20109.683075l416.474366%200c60.479443%200%20109.683075-49.203632%20109.683075-109.683075L833.454246%20209.385844l75.595722%200c11.012821%200%2019.942191-8.940626%2019.942191-19.954471S920.063813%20169.476903%20909.050991%20169.476903zM376.2482%20138.130987c0-17.593703%2014.314007-31.907711%2031.907711-31.907711l211.547067%200c17.593703%200%2031.907711%2014.314007%2031.907711%2031.907711l0%2031.346939L376.2482%20169.477926%20376.2482%20138.130987zM793.569864%20850.074785c0%2038.486546-31.312146%2069.798692-69.798692%2069.798692L307.297828%20919.873478c-38.486546%200-69.798692-31.312146-69.798692-69.798692L237.499136%20211.042577l556.070728%200L793.569864%20850.074785zM510.662539%20861.276918c11.012821%200%2019.954471-8.92937%2019.954471-19.942191L530.61701%20294.912753c0-11.013845-8.94165-19.942191-19.954471-19.942191s-19.954471%208.928347-19.954471%2019.942191L490.708068%20841.334727C490.708068%20852.347548%20499.649717%20861.276918%20510.662539%20861.276918zM374.562814%20801.449321c11.012821%200%2019.954471-8.92937%2019.954471-19.942191L394.517285%20354.74035c0-11.013845-8.94165-19.942191-19.954471-19.942191s-19.954471%208.928347-19.954471%2019.942191l0%20426.76678C354.608344%20792.519951%20363.549993%20801.449321%20374.562814%20801.449321zM649.832182%20801.449321c11.012821%200%2019.954471-8.92937%2019.954471-19.942191L669.786653%20354.74035c0-11.013845-8.94165-19.942191-19.954471-19.942191s-19.954471%208.928347-19.954471%2019.942191l0%20426.76678C629.877711%20792.519951%20638.81936%20801.449321%20649.832182%20801.449321z'%20%3e%3c/path%3e%3c/svg%3e", xn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
968
+ __proto__: null,
969
+ default: Cn
970
+ }, Symbol.toStringTag, { value: "Module" })), En = "data:image/svg+xml,%3csvg%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23555'%20width='16'%20height='16'%3e%3cpath%20d='M220.451548%20913.518482V318.145854c0-27.62038%2022.505495-50.125874%2050.125875-50.125874H865.95005c27.62038%200%2050.125874%2022.505495%2050.125874%2050.125874v218.917083h59.332667V318.145854c0-60.355644-49.102897-109.458541-109.458541-109.458541h-39.896104v-99.228772C826.053946%2049.102897%20776.951049%200%20716.595405%200H121.222777C60.867133%200%2011.764236%2049.102897%2011.764236%20109.458541V705.854146c0%2060.355644%2049.102897%20109.458541%20109.458541%20109.458541h39.896104v99.228772c0%2060.355644%2049.102897%20109.458541%20109.458542%20109.458541h257.790209v-59.332667H269.554446c-26.597403-1.022977-49.102897-23.528472-49.102898-51.148851z%20m-59.332667-595.372628v436.811189h-39.896104c-27.62038%200-50.125874-22.505495-50.125874-50.125874V109.458541c0-27.62038%2022.505495-50.125874%2050.125874-50.125874H716.595405c27.62038%200%2050.125874%2022.505495%2050.125874%2050.125874v99.228772H269.554446c-59.332667%200-108.435564%2049.102897-108.435565%20109.458541z'%20%3e%3c/path%3e%3cpath%20d='M902.777223%20854.185814l98.205794-98.205794c15.344655-15.344655%2015.344655-40.919081%200-56.263736s-40.919081-15.344655-56.263736%200L846.513487%20797.922078%20747.284715%20699.716284c-15.344655-15.344655-40.919081-15.344655-56.263736%200s-15.344655%2040.919081%200%2056.263736l98.205794%2098.205794-98.205794%2098.205794c-15.344655%2015.344655-15.344655%2040.919081%200%2056.263737s40.919081%2015.344655%2056.263736%200l98.205794-98.205795%2098.205795%2098.205795c15.344655%2015.344655%2040.919081%2015.344655%2056.263736%200s15.344655-40.919081%200-56.263737l-97.182817-98.205794z'%20%3e%3c/path%3e%3c/svg%3e", Mn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
971
+ __proto__: null,
972
+ default: En
973
+ }, Symbol.toStringTag, { value: "Module" })), Ln = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1757902601497'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='9801'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M761.344%20119.296H226.816c-18.944%200-39.424%2011.776-39.424%2030.72V921.6h614.4V148.48c0.512-18.944-22.016-29.184-40.448-29.184z%20m-537.6%20768c-2.048%200-2.048%200%200%200L221.696%20163.84c0-5.12%205.12-10.24%2010.24-10.24h522.24c8.704%200%2013.824%205.12%2013.824%2013.824v720.384s0%201.536-1.536%201.536h-15.36V194.56c0-16.896-8.704-24.064-29.184-24.064H266.24c-18.944%200-27.136%208.704-27.136%2024.064v692.736h-15.36z%20m49.152%200V204.8H716.8v682.496H272.896z'%20p-id='9802'%3e%3c/path%3e%3cpath%20d='M648.704%20508.416c-16.896%200-32.256%2013.824-32.256%2032.256%200%2016.896%2013.824%2032.256%2032.256%2032.256s32.256-13.824%2032.256-32.256c0-16.896-13.824-32.256-32.256-32.256z'%20p-id='9803'%3e%3c/path%3e%3c/svg%3e", kn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
974
+ __proto__: null,
975
+ default: Ln
976
+ }, Symbol.toStringTag, { value: "Module" })), In = "data:image/svg+xml,%3csvg%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23555'%20width='16'%20height='16'%3e%3cpath%20d='M491.80027198%20557.44938977c-10.0998647-15.14979706-20.19972802-25.24966037-35.34952507-35.34952507-15.14979706-10.0998647-30.29959271-15.14979706-50.49932211-15.14979704-55.54925309%200-100.99864286%2045.44938977-100.99864287%20100.99864285%200%2015.14979706%205.04993234%2035.34952507%2015.14979568%2050.49932212%2010.0998647%2015.14979706%2020.19972802%2030.29959271%2035.34952506%2035.34952508%2015.14979706%2010.0998647%2035.34952507%2015.14979706%2050.49932213%2015.14979567%2055.54925309%200%20100.99864286-45.44938977%20100.99864286-100.99864287%200-15.14979706-5.04993234-35.34952507-15.14979568-50.49932074z%20m-85.84884718%20100.99864286h-15.14979706c-20.19972802-5.04993234-30.29959271-20.19972802-35.34952507-35.34952507V612.99864286c0-30.29959271%2025.24966037-50.49932212%2050.49932213-50.49932074h10.09986469c15.14979706%205.04993234%2030.29959271%2015.14979706%2035.34952507%2035.34952507v15.14979567c5.04993234%2025.24966037-20.19972802%2045.44938977-45.44938976%2045.44938977z'%3e%3c/path%3e%3cpath%20d='M390.80162774%20658.44803263l-40.39945604%2040.39945743-227.24694747%20222.19701373-35.34952506-35.34952508%20227.24694745-227.24694608%2040.39945605-40.39945743c5.04993234%2020.19972802%2020.19972802%2035.34952507%2035.34952507%2040.39945743zM648.34816793%20405.9514248l-40.39945742%2040.3994574-116.14843853%20116.14843992-40.39945742%2035.34952507c-5.04993234-20.19972802-20.19972802-30.29959271-35.34952507-35.34952507l40.39945742-40.39945742%20116.14843853-111.09850756%2035.34952507-35.34952507c10.0998647%2015.14979706%2020.19972802%2025.24966037%2040.39945742%2030.29959273zM926.09443614%20133.25508894L749.34681078%20310.00271428l-40.3994574%2040.39945742c-5.04993234-20.19972802-15.14979706-35.34952507-30.29959272-40.39945742l35.34952506-40.39945742%20176.74762534-176.74762535%2035.34952508%2040.39945743z'%20%3e%3c/path%3e%3cpath%20d='M749.34681078%20310.00271428c-10.0998647-15.14979706-20.19972802-30.29959271-35.34952506-35.34952506-15.14979706-10.0998647-35.34952507-15.14979706-55.54925309-15.14979706-55.54925309%200-100.99864286%2045.44938977-100.99864286%20100.99864286%200%2020.19972802%205.04993234%2040.39945743%2015.14979567%2055.54925447%2010.0998647%2015.14979706%2020.19972802%2025.24966037%2035.34952507%2035.34952507%2015.14979706%2010.0998647%2030.29959271%2015.14979706%2050.49932212%2015.14979567%2055.54925309%200%20100.99864286-45.44938977%20100.99864286-100.99864286%200-25.24966037-5.04993234-40.39945743-10.09986471-55.54925309z%20m-90.89877815%2095.94871052h-10.0998647c-20.19972802-5.04993234-35.34952507-15.14979706-40.39945742-35.34952509%200-5.04993234-5.04993234-10.0998647-5.04993234-15.14979704%200-30.29959271%2025.24966037-50.49932212%2050.49932212-50.49932074%205.04993234%200%2010.0998647%200%2015.14979704%205.04993235%2015.14979706%205.04993234%2030.29959271%2020.19972802%2030.29959273%2040.39945742v10.09986332c10.0998647%2025.24966037-15.14979706%2045.44938977-40.39945743%2045.44938978z'%20%3e%3c/path%3e%3c/svg%3e", Dn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
977
+ __proto__: null,
978
+ default: In
979
+ }, Symbol.toStringTag, { value: "Module" })), Pn = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1757902422799'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='1735'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M843.2%20726.4c-20.2%200-39.2%205.2-55.8%2014.3L283.8%20237.2c9-16.5%2014.1-35.4%2014.1-55.5%200-64.2-52.3-116.5-116.5-116.5S65%20117.4%2065%20181.6s52.3%20116.5%20116.5%20116.5c20.2%200%2039.2-5.2%2055.8-14.2l503.5%20503.5c-9%2016.5-14.1%2035.4-14.1%2055.5%200%2064.2%2052.3%20116.5%20116.5%20116.5s116.5-52.3%20116.5-116.5-52.3-116.5-116.5-116.5zM181.4%20232.1c-27.8%200-50.5-22.6-50.5-50.5s22.6-50.5%2050.5-50.5%2050.5%2022.6%2050.5%2050.5-22.6%2050.5-50.5%2050.5z%20m661.8%20661.3c-27.8%200-50.5-22.6-50.5-50.5%200-27.8%2022.6-50.5%2050.5-50.5s50.5%2022.6%2050.5%2050.5c0%2027.8-22.7%2050.5-50.5%2050.5z'%20fill='%23231815'%20p-id='1736'%3e%3c/path%3e%3c/svg%3e", An = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
980
+ __proto__: null,
981
+ default: Pn
982
+ }, Symbol.toStringTag, { value: "Module" })), Sn = "data:image/svg+xml,%3csvg%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23555'%20width='16'%20height='16'%3e%3cpath%20d='M114.176%2046.528h618.496c37.312%200.064%2067.584%2030.336%2067.648%2067.648v618.56c0%2037.248-30.336%2067.584-67.648%2067.584H114.176A67.776%2067.776%200%200%201%2046.528%20732.8V114.176c0-37.312%2030.336-67.648%2067.648-67.648z%20m2.176%20686.208l616.32-2.24-2.176-616.32-614.144%202.176v616.32zM907.648%20291.2l2.176%20616.32H291.264a34.88%2034.88%200%201%200%200%2069.888h618.56c37.312%200%2067.648-30.336%2067.648-67.648V291.264a34.88%2034.88%200%201%200-69.824%200z'%20%3e%3c/path%3e%3c/svg%3e", Bn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
983
+ __proto__: null,
984
+ default: Sn
985
+ }, Symbol.toStringTag, { value: "Module" })), _n = "data:image/svg+xml,%3csvg%20viewBox='0%200%201029%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23555'%20width='16'%20height='16'%3e%3cpath%20d='M788.17984%2016l-55.424%2060.672%20116.48%20106.56H418.13184a410.816%20410.816%200%201%200%200%20821.632h547.712v-82.176H418.13184a328.64%20328.64%200%200%201%200-657.28l441.792-0.128-124.8%2098.368%2050.752%2064.512%20243.328-191.488L788.17984%2016z'%3e%3c/path%3e%3c/svg%3e", Nn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
986
+ __proto__: null,
987
+ default: _n
988
+ }, Symbol.toStringTag, { value: "Module" })), On = "data:image/svg+xml,%3csvg%20viewBox='0%200%201048%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23555'%20width='16'%20height='16'%3e%3cpath%20d='M310.04722%20451.334244A49.95122%2049.95122%200%200%201%20239.416195%20521.990244L27.473171%20310.04722a49.95122%2049.95122%200%200%201%200-70.631025L239.416195%2027.473171a49.95122%2049.95122%200%200%201%2070.631025%2070.631024l-126.651318%20126.626342L649.365854%20224.780488c220.709463%200%20399.609756%20178.900293%20399.609756%20399.609756s-178.900293%20399.609756-399.609756%20399.609756H124.878049a49.95122%2049.95122%200%201%201%200-99.902439h524.487805c165.513366%200%20299.707317-134.193951%20299.707317-299.707317s-134.193951-299.707317-299.707317-299.707317H183.395902l126.651318%20126.651317z'%3e%3c/path%3e%3c/svg%3e", Rn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
989
+ __proto__: null,
990
+ default: On
991
+ }, Symbol.toStringTag, { value: "Module" })), Kn = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='11576'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20fill='%23555'%20width='16'%20height='16'%3e%3cpath%20d='M102.4%20302.08c5.12%205.12%2015.36%2010.24%2025.6%2010.24s15.36-5.12%2025.6-10.24l174.08-174.08c5.12-5.12%2010.24-15.36%2010.24-25.6s-5.12-15.36-10.24-25.6c-20.48-5.12-40.96-5.12-51.2%2010.24l-148.48%20153.6-71.68-76.8C51.2%20158.72%2040.96%20158.72%2035.84%20158.72c-10.24%200-15.36%205.12-25.6%2010.24-5.12%205.12-10.24%2010.24-10.24%2020.48s5.12%2015.36%2010.24%2025.6L102.4%20302.08zM276.48%20409.6l-148.48%20153.6-71.68-71.68C51.2%20486.4%2040.96%20481.28%2035.84%20481.28c-10.24%200-15.36%205.12-25.6%2010.24-5.12%2010.24-10.24%2015.36-10.24%2025.6s5.12%2015.36%2010.24%2025.6L102.4%20629.76c5.12%205.12%2015.36%2010.24%2025.6%2010.24s15.36-5.12%2025.6-10.24L322.56%20460.8c5.12-5.12%2010.24-15.36%2010.24-25.6s-5.12-15.36-10.24-25.6c-10.24-10.24-30.72-10.24-46.08%200z%20m0%20327.68l-148.48%20153.6L56.32%20819.2c-5.12-5.12-15.36-10.24-25.6-10.24s-15.36%205.12-25.6%2010.24c0%205.12-5.12%2015.36-5.12%2025.6s5.12%2015.36%2010.24%2025.6L102.4%20957.44c5.12%205.12%2015.36%2010.24%2025.6%2010.24h5.12c10.24%200%2015.36-5.12%2025.6-10.24l174.08-174.08c5.12-5.12%2010.24-15.36%2010.24-25.6s-5.12-15.36-10.24-25.6c-25.6-5.12-40.96-5.12-56.32%205.12zM1024%20153.6c0%2030.72-25.6%2056.32-56.32%2056.32h-460.8c-30.72%200-61.44-25.6-61.44-56.32%200-30.72%2025.6-56.32%2056.32-56.32h455.68c35.84-5.12%2066.56%2020.48%2066.56%2056.32z%20m0%20358.4c0%2030.72-25.6%2056.32-56.32%2056.32h-460.8c-30.72%200-56.32-25.6-56.32-56.32s25.6-56.32%2056.32-56.32h455.68c35.84%200%2061.44%2025.6%2061.44%2056.32z%20m-5.12%20358.4c0%2030.72-25.6%2056.32-56.32%2056.32h-460.8c-30.72%200-56.32-25.6-56.32-56.32%200-30.72%2025.6-56.32%2056.32-56.32h455.68c35.84%200%2061.44%2025.6%2061.44%2056.32z%20m0%200'%20%3e%3c/path%3e%3c/svg%3e", Fn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1285
992
  __proto__: null,
1286
- default: door
1287
- }, Symbol.toStringTag, { value: "Module" }));
1288
- const line = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1757902422799'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='1735'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M843.2%20726.4c-20.2%200-39.2%205.2-55.8%2014.3L283.8%20237.2c9-16.5%2014.1-35.4%2014.1-55.5%200-64.2-52.3-116.5-116.5-116.5S65%20117.4%2065%20181.6s52.3%20116.5%20116.5%20116.5c20.2%200%2039.2-5.2%2055.8-14.2l503.5%20503.5c-9%2016.5-14.1%2035.4-14.1%2055.5%200%2064.2%2052.3%20116.5%20116.5%20116.5s116.5-52.3%20116.5-116.5-52.3-116.5-116.5-116.5zM181.4%20232.1c-27.8%200-50.5-22.6-50.5-50.5s22.6-50.5%2050.5-50.5%2050.5%2022.6%2050.5%2050.5-22.6%2050.5-50.5%2050.5z%20m661.8%20661.3c-27.8%200-50.5-22.6-50.5-50.5%200-27.8%2022.6-50.5%2050.5-50.5s50.5%2022.6%2050.5%2050.5c0%2027.8-22.7%2050.5-50.5%2050.5z'%20fill='%23231815'%20p-id='1736'%3e%3c/path%3e%3c/svg%3e";
1289
- const __vite_glob_0_1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
993
+ default: Kn
994
+ }, Symbol.toStringTag, { value: "Module" })), zn = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1757902488735'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='3957'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M520.416%20179.392c-12.384%200-22.4%204.672-22.4%2010.432l-0.032%20139.136c0%205.76%2010.016%2010.432%2022.368%2010.432%2012.352%200%2022.368-4.672%2022.368-10.432l0.064-139.136c0-5.76-10.016-10.432-22.4-10.432M520.32%20623.04c-12.352%200-22.368%204.64-22.368%2010.4l-0.032%20139.168c0%205.76%2010.016%2010.432%2022.368%2010.432%2012.352%200%2022.368-4.672%2022.368-10.432l0.064-139.168c0-5.76-10.016-10.4-22.4-10.4M800.256%20458.72l-139.168-0.064c-5.76%200-10.432%2010.016-10.432%2022.4%200%2012.352%204.672%2022.368%2010.432%2022.368l139.168%200.032c5.76%200%2010.4-10.016%2010.4-22.368%200-12.352-4.64-22.368-10.4-22.4zM352.256%20458.72l-139.168-0.064c-5.76%200-10.432%2010.016-10.432%2022.4%200%2012.352%204.672%2022.368%2010.432%2022.368l139.168%200.032c5.76%200%2010.4-10.016%2010.4-22.368%200-12.352-4.64-22.368-10.4-22.4M801.568%20748.672l-72.544-72.544%2073.792-23.2a4.416%204.416%200%200%200%200.096-8.384l-183.136-62.4a4.416%204.416%200%200%200-5.6%205.568l62.464%20183.168a4.416%204.416%200%200%200%208.352-0.064l23.36-73.6%2072.32%2072.32a14.752%2014.752%200%200%200%2020.896-20.864M510.688%20382.112c49.952%200%2092.8%2040.832%2092.8%2092.8%200%2051.968-42.848%2092.8-92.8%2092.8-49.984%200-92.8-40.832-92.8-92.8%200-51.968%2042.816-92.8%2092.8-92.8z'%20p-id='3958'%3e%3c/path%3e%3c/svg%3e", Tn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1290
995
  __proto__: null,
1291
- default: line
1292
- }, Symbol.toStringTag, { value: "Module" }));
1293
- const selectPoint = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1757902488735'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='3957'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M520.416%20179.392c-12.384%200-22.4%204.672-22.4%2010.432l-0.032%20139.136c0%205.76%2010.016%2010.432%2022.368%2010.432%2012.352%200%2022.368-4.672%2022.368-10.432l0.064-139.136c0-5.76-10.016-10.432-22.4-10.432M520.32%20623.04c-12.352%200-22.368%204.64-22.368%2010.4l-0.032%20139.168c0%205.76%2010.016%2010.432%2022.368%2010.432%2012.352%200%2022.368-4.672%2022.368-10.432l0.064-139.168c0-5.76-10.016-10.4-22.4-10.4M800.256%20458.72l-139.168-0.064c-5.76%200-10.432%2010.016-10.432%2022.4%200%2012.352%204.672%2022.368%2010.432%2022.368l139.168%200.032c5.76%200%2010.4-10.016%2010.4-22.368%200-12.352-4.64-22.368-10.4-22.4zM352.256%20458.72l-139.168-0.064c-5.76%200-10.432%2010.016-10.432%2022.4%200%2012.352%204.672%2022.368%2010.432%2022.368l139.168%200.032c5.76%200%2010.4-10.016%2010.4-22.368%200-12.352-4.64-22.368-10.4-22.4M801.568%20748.672l-72.544-72.544%2073.792-23.2a4.416%204.416%200%200%200%200.096-8.384l-183.136-62.4a4.416%204.416%200%200%200-5.6%205.568l62.464%20183.168a4.416%204.416%200%200%200%208.352-0.064l23.36-73.6%2072.32%2072.32a14.752%2014.752%200%200%200%2020.896-20.864M510.688%20382.112c49.952%200%2092.8%2040.832%2092.8%2092.8%200%2051.968-42.848%2092.8-92.8%2092.8-49.984%200-92.8-40.832-92.8-92.8%200-51.968%2042.816-92.8%2092.8-92.8z'%20p-id='3958'%3e%3c/path%3e%3c/svg%3e";
1294
- const __vite_glob_0_2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
996
+ default: zn
997
+ }, Symbol.toStringTag, { value: "Module" })), Vn = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='10587'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20fill='%23555'%20width='16'%20height='16'%3e%3cpath%20d='M64.21%20703.88h888.34M64.21%20667.88h888.34v72H64.21z'%3e%3c/path%3e%3cpath%20d='M509.58%20102.72v566.13M473.58%20102.72h72v566.14h-72z'%3e%3c/path%3e%3c/svg%3e", jn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1295
998
  __proto__: null,
1296
- default: selectPoint
1297
- }, Symbol.toStringTag, { value: "Module" }));
1298
- const window$1 = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1757902547951'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='5129'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M59.355%2091.776v867.881h867.881V91.776H59.356zM897.31%20929.73H89.282V121.703h808.027V929.73z'%20fill=''%20p-id='5130'%3e%3c/path%3e%3cpath%20d='M833.964%20185.048H152.627v681.337h681.337V185.048z%20m-355.632%20651.41H182.554V532.2h295.778v304.257z%20m0-334.184H182.554V214.975h295.778v287.299z%20m325.705%20334.184H508.259V532.2h295.778v304.257z%20m0-334.184H508.259V214.975h295.778v287.299z'%20fill=''%20p-id='5131'%3e%3c/path%3e%3c/svg%3e";
1299
- const __vite_glob_0_3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
999
+ default: Vn
1000
+ }, Symbol.toStringTag, { value: "Module" })), Gn = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1757902547951'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='5129'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M59.355%2091.776v867.881h867.881V91.776H59.356zM897.31%20929.73H89.282V121.703h808.027V929.73z'%20fill=''%20p-id='5130'%3e%3c/path%3e%3cpath%20d='M833.964%20185.048H152.627v681.337h681.337V185.048z%20m-355.632%20651.41H182.554V532.2h295.778v304.257z%20m0-334.184H182.554V214.975h295.778v287.299z%20m325.705%20334.184H508.259V532.2h295.778v304.257z%20m0-334.184H508.259V214.975h295.778v287.299z'%20fill=''%20p-id='5131'%3e%3c/path%3e%3c/svg%3e", Qn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1300
1001
  __proto__: null,
1301
- default: window$1
1302
- }, Symbol.toStringTag, { value: "Module" }));
1303
- class RenderManager extends Component {
1002
+ default: Gn
1003
+ }, Symbol.toStringTag, { value: "Module" })), Hn = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAKdUlEQVR4AeydbZrUKBRGq2YjOjvpWYntStSVjK5EdzLOSsr7arBLOkkBAcLHmacwlQQInMsZUvdP/3Xhv+oEbrfbk5XYz1P1gfLAC4KwCCCwQwBBduBwCwIIwhqAwA4BBNmBwy0IFBQEuBDonwCC9B9DZlCQAIIUhEvX/RNAkP5jyAwKEkCQgnDpun8CfQrSP3dm0AkBBOkkUAzzHAIIcg53ntoJAQTpJFAM8xwCCHIOd57aCQEE8QLFKQTuCSDIPQ2+Q8AjgCAeEE4hcE8AQe5p8B0CHgEE8YBwCoF7AghyT6Psd3rvkACCdBg0hlyPAILUY82TOiSAIB0GjSHXI4Ag9VjzpA4JIEiHQXs9ZK6UIoAgpcjS7xAEEGSIMDKJUgQQpBRZ+h2CAIIMEUYmUYoAgpQiO0q/k88DQSZfAEx/nwCC7PPh7uQEEGTyBcD09wkgyD4f7k5OAEEmXwBnTr+HZyNID1FijKcRQBAP/e12e2vl2cqHUsUe+c5K7OddqfG4fmMHNEN9BPGifL1ev9ulN1Y+FizP1nfsR21Kjun/2AHNUB9BVqJsknyyy1qMdpji89nm/HmKmUZOEkE2gNmCkSTaTTZqDHP5m831/TCz+TWRbP8iyA5KWzh/2+2RJfluc/zH5shngwCCbIC5u6wFNKIkmhM7x12g174iyBqVu2v2f1gtpBFft97b3L7dTZWvKwQQZAWKf8kWkn7Aqvi3ej1HjsDIIUggKJNEu8gImS0yVoExV7XXgugqZZXAIoleuVbvd3CRjFVkkBAkEphJ0mtmi4xVZKxVHUFEIb70ltnSrkfGKj7OFwRJgGa7iBacfpPomNBD9Sb8KE9EjiCJ4EwSZbVUEnuo1gw5DqCuKsiBcTbZ1CTRLtJyZouM1cGVgyAHAS6StPiqRcbqYGzVHEFE4WAxSVrLbJGxOhhT1xxBHInjx1YyW9rNyFgdj+fPHhDkJ4bj/9guooWp3yQ6Hu8wvQd+lKeze9VyFEFeTeyMCyaJsloqZzxez0QOUchYECQjTHVlkmgXOSOzRcZKAchcECQzUHW3SFLzVYuMlcAXKAhSAKq6NElqZbbIWAl4oYIghcAu3ZbObGmXImO1wC5xQJCHVNMr2C6iBazfJDqmd7Tdkh/l22yy3EGQLBi3OzFJlNVS2a6Udgc50rhFtUKQKFxplU0S7SI5M1tkrNJCEd0KQaKRpTVYJMnxqkXGKi0ESa0QJAlbWiOT5Ghmi4xVGvrkVgiSjC654UtmK64L7T5krOKYHa6NIIcRxnVgu4gWun6T6BjTmB/lMbQy1UWQTCBjujFJlNVSCW2GHKGkMtdDkMxAQ7szSbSLhGS2yFiFQi1QD0EKQA3tcpFk71WLjFUozEL1EKQQ2NBuTZKtzNahjFXo86m3TwBB9vnUuutntrSrkLGqRX/nOQiyA6fWLdtFJIR+k+iox/KjXBQaKAjSQBA0BJNEWS0V5BCQRgqCNBIIDcMk+WRFkuiU0gABBGkgCJ0NYarhIshU4WaysQQQJJYY9acigCBThZvJxhJAkFhi1J+KAIJMFe7WJ9ve+BCkvZgwooYIIEhDwWAo7RFAkPZiwogaIoAgDQWDobRHAEHaiwkjKkEgsU8ESQRHszkIIMgccWaWiQQQJBEczeYggCBzxJlZJhJAkERwNJuDQIggc5BglhBYIZBNkNvt9kSBQStrYGWtJ13KJsjy9K92pFwuMDiXgS3DPJ/cguQZFb1AoBECCNJIIBhGmwROFqRNKIwKAo4AgjgSHCGwQgBBVqBwCQKOAII4EhwhsEIAQVagcAkCjsC4grgZcoTAAQIIcgAeTccngCDjx5gZHiCAIAfg0XR8ArkF0V9KolwuMDiXQTZzswlyvV71ByenKMy1/VjnMiSbILkGRD8QaIkAgrQUDcbSHAEEaS4kDKglAgjSUjQYS3MEEKStkDCaxgggSGMBYThtEUCQtuLBaBojgCCNBYThtEUAQdqKB6NpjACCNBaQcsOh5xQCCJJCjTbTEECQaULNRFMIIEgKNdpMQwBBpgk1E00hgCAp1GjzJ4GBzxBk4OAyteMEEOQ4Q3oYmACCNBTc2+32bOVDQ0OafigI0sgSMDGebCj/Wvlo39/akU8DBBCkgSAsQuiP7rjR/Ldcc+fTHs+eOIKcHIFFBO0c/ki+Lvf865xXJIAgFWFvPEpy6PXKv63XrA9I4mOpe44gdXn/8TRb/FtyuHrP9uWdFT4nEUCQk8CbHFr8Ko9GoB/tZLYeUSp0H0EKgd3r1uTQK5V2j71q9/ckiV657q/x/RiBoNYIEoQpXyWTQwv9PmMV2jmZrVBSGeshSEaYj7pa5IjZOfwuyWz5RAqfI0hhwF73kkOvV97l4FPtPmS2gnEdr4ggxxkG9WC7x1E53HP0w57MlqNR+IgghQGre5NDi1pFpzmKfrST2cpB8kEfaYI86JTbLwRMDr1Safd4uZjnmyTRK1ee3uhllQCCrGLJc9Hk0AJOyViFDoDMViipxHoIkgjuUbNFjhI7h/9oMls+kYznCJIRpteV5NDrlXc5+6l2KTJb2bH+6hBBfnHI+q/tHrXkcONWAoDMlqOR8dicIBnndkpXJocWq0rt5+tHO5mtzNQRJCNQk0OvVNo9MvYa1ZUk0StXVCMqbxNAkG02UXdMDi3Mkhmr0PGQ2QolFVAPQQIgPaqyyHHmzuEPkcyWTyTxHEESwXnNJIder7zLp51qNyOzlQH/TIJkwPW6C9s9WpPDDVKJAjJbjkbiEUESwamZyaFFqKLTFot+tJPZOhAZBEmEZ3LolUq7R2IP1ZpJEr1yVXvgSA9CkIRomhxacC1krEJHT2YrlJRXD0E8II9OFzl62Dn8qZDZ8okEnCNIACSviuTQ69Xd5S6+atcjsxUZKgSJAGa7R69yuFkqoUBmy9EIOCJIACRVMTm0uFR02nPRj3YyW4ERRJAAUCaHXqm0ewTU7qKKJNErVxeDPXOQCPKAvsmhhdRTxurBjH7fJrP1G8X2FwTZZnNZ5Dh359gZX4ZbZLYeQESQfUCSQ69X+7X6vavdkczWTvwQZAOO7R6jy+FmrsQDmS1HwzsiiAdEpyaHFo2KTmco+tFOZmsl0giyAsUuvbHysWD5bH3HftSm5JhixzNFfQRZCfP1ev10LVjskV+sxH6+5B6T31/sgGaojyAzRJk5JhNAkGR0NJyBAILMEGXmmEwAQZLR0XAGAggyQ5Trz3GYJyLIMKFkIiUIIEgJqvQ5DAEEGSaUTKQEAQQpQZU+hyGAIMOEcpaJ1J0ngtTlzdM6I4AgnQWM4dYlgCB1efO0zgggSGcBY7h1CSBIXd48rWUCK2NDkBUoXIKAI4AgjgRHCKwQQJAVKFyCgCOAII4ERwisEECQFShcgoAjkEsQ1x9HCAxFAEGGCieTyU0AQXITpb+hCCDIUOFkMrkJIEhuovQ3FIEOBBmKN5PpjACCdBYwhluXAILU5c3TOiOAIJ0FjOHWJYAgdXnztM4IzC1IZ8FiuPUJIEh95jyxIwII0lGwGGp9AghSnzlP7IgAgnQULIZanwCCFGJOt2MQ+AEAAP//U3PGlQAAAAZJREFUAwA3ILMm/jaVEAAAAABJRU5ErkJggg==", Jn = new m.TextureLoader(), Wn = Jn.load(Hn);
1004
+ class qn extends Ee {
1304
1005
  static name = "RenderManager";
1305
- container = new THREE.Group();
1006
+ container = new m.Group();
1306
1007
  lines = [];
1307
- pointVirtualGrid = new PointVirtualGrid();
1308
- quadtree = new Quadtree(new Box2());
1008
+ pointVirtualGrid = new Fe();
1009
+ quadtree = new ze(new Ye());
1309
1010
  actionHistory = /* @__PURE__ */ new Set();
1011
+ verticalReferenceLineFlag = new m.Mesh(new m.PlaneGeometry(0.3, 0.3), new m.MeshBasicMaterial({ map: Wn, color: 58111, transparent: !0 }));
1310
1012
  onAddFromParent() {
1311
- const dxfLineModel = this.dxfLineModel;
1312
- this.editor.container.add(this.container);
1313
- this.editor.container.add(dxfLineModel.dxfModelGroup);
1314
- dxfLineModel.dxfLineModel.material = new THREE.LineBasicMaterial({
1315
- transparent: true,
1013
+ const e = this.dxfLineModel;
1014
+ this.editor.container.add(this.container), this.editor.container.add(e.dxfModelGroup), e.dxfLineModel.material = new m.LineBasicMaterial({
1015
+ transparent: !0,
1316
1016
  opacity: 0.5,
1317
1017
  color: 16777215
1318
- });
1319
- dxfLineModel.addEventListener("modelUpdate", (e) => {
1320
- e.model.position.z = 0;
1321
- dxfLineModel.dxfDoorsLineModel.visible = false;
1322
- });
1323
- this.variable.addEventListener("dxfVisible", (e) => dxfLineModel.dxfModelGroup.visible = e.value);
1324
- this.dxf.addEventListener("createGroup", () => this.reset());
1325
- this.reset();
1018
+ }), e.addEventListener("modelUpdate", (t) => {
1019
+ t.model.position.z = 0, e.dxfDoorsLineModel.visible = !1;
1020
+ }), this.variable.addEventListener("dxfVisible", (t) => e.dxfModelGroup.visible = t.value), this.dxf.addEventListener("createGroup", () => this.reset()), this.reset();
1326
1021
  }
1327
1022
  updatedMode = null;
1328
1023
  /** 重新设置数据
@@ -1331,183 +1026,149 @@ class RenderManager extends Component {
1331
1026
  if (this.updatedMode === "self") {
1332
1027
  this.updatedMode = null;
1333
1028
  return;
1334
- } else {
1029
+ } else
1335
1030
  this.updatedMode = "dxf";
1336
- }
1337
- this.pointVirtualGrid = new PointVirtualGrid();
1338
- const box = this.dxf.box.clone().expansion(Math.max(this.dxf.box.width, this.dxf.box.height) * 2);
1339
- if (box.width === 0 || box.height === 0) box.set(-200, -200, 200, 200);
1340
- this.quadtree = new Quadtree(box);
1341
- this.lines.length = 0;
1342
- this.dxf.lineSegments.forEach((line2) => {
1343
- if (line2.userData.isDoor && !line2.userData.doorDirectConnection) return;
1344
- this.addLine(line2.clone());
1345
- });
1346
- this.dxf.doorLineSegment.forEach((line2) => {
1347
- const door2 = line2.clone();
1348
- door2.userData = {
1349
- isDoor: true,
1350
- doorDirectConnection: true
1351
- };
1352
- this.addLine(door2);
1353
- });
1354
- this.draw();
1031
+ this.pointVirtualGrid = new Fe();
1032
+ const e = this.dxf.box.clone().expansion(Math.max(this.dxf.box.width, this.dxf.box.height) * 2);
1033
+ (e.width === 0 || e.height === 0) && e.set(-200, -200, 200, 200), this.quadtree = new ze(e), this.lines.length = 0, this.dxf.lineSegments.forEach((t) => {
1034
+ t.userData.isDoor && !t.userData.doorDirectConnection || this.addLine(t.clone());
1035
+ }), this.dxf.doorLineSegment.forEach((t) => {
1036
+ const n = t.clone();
1037
+ n.userData = {
1038
+ isDoor: !0,
1039
+ doorDirectConnection: !0
1040
+ }, this.addLine(n);
1041
+ }), this.draw();
1355
1042
  }
1356
1043
  /** 添加线段
1357
1044
  * @param line
1358
1045
  */
1359
- addLine(line2) {
1360
- if (!line2.userData) line2.userData = {};
1361
- this.lines.push(line2);
1362
- this.pointVirtualGrid.insert(line2.start, line2);
1363
- this.pointVirtualGrid.insert(line2.end, line2);
1364
- const quadtreeNode = {
1365
- line: line2,
1046
+ addLine(e) {
1047
+ e.userData || (e.userData = {}), this.lines.push(e), this.pointVirtualGrid.insert(e.start, e), this.pointVirtualGrid.insert(e.end, e);
1048
+ const t = {
1049
+ line: e,
1366
1050
  userData: void 0
1367
1051
  };
1368
- line2.userData.quadtreeNode = quadtreeNode;
1369
- this.quadtree.insert(quadtreeNode);
1370
- this.actionHistory.add({
1052
+ e.userData.quadtreeNode = t, this.quadtree.insert(t), this.actionHistory.add({
1371
1053
  type: "addLine",
1372
- data: [line2]
1054
+ data: [e]
1373
1055
  });
1374
1056
  }
1375
1057
  /**
1376
1058
  * 批量添加
1377
1059
  * @param lines
1378
1060
  */
1379
- addLines(lines) {
1380
- for (let i = 0; i < lines.length; i++) {
1381
- const line2 = lines[i];
1382
- this.lines.push(line2);
1383
- this.pointVirtualGrid.insert(line2.start, line2);
1384
- this.pointVirtualGrid.insert(line2.end, line2);
1385
- const quadtreeNode = {
1386
- line: line2,
1061
+ addLines(e) {
1062
+ for (let t = 0; t < e.length; t++) {
1063
+ const n = e[t];
1064
+ this.lines.push(n), this.pointVirtualGrid.insert(n.start, n), this.pointVirtualGrid.insert(n.end, n);
1065
+ const o = {
1066
+ line: n,
1387
1067
  userData: void 0
1388
1068
  };
1389
- line2.userData.quadtreeNode = quadtreeNode;
1390
- this.quadtree.insert(quadtreeNode);
1069
+ n.userData.quadtreeNode = o, this.quadtree.insert(o);
1391
1070
  }
1392
1071
  this.actionHistory.add({
1393
1072
  type: "addLine",
1394
- data: [...lines]
1073
+ data: [...e]
1395
1074
  });
1396
1075
  }
1397
1076
  /** 移除线段
1398
1077
  * @param line
1399
1078
  */
1400
- removeLine(line2) {
1401
- line2.userData.quadtreeNode && this.quadtree.remove(line2.userData.quadtreeNode);
1402
- this.pointVirtualGrid.remove(line2.start);
1403
- this.pointVirtualGrid.remove(line2.end);
1404
- const index = this.lines.indexOf(line2);
1405
- this.lines.splice(index, 1);
1406
- this.draw();
1407
- this.actionHistory.add({
1079
+ removeLine(e) {
1080
+ e.userData.quadtreeNode && this.quadtree.remove(e.userData.quadtreeNode), this.pointVirtualGrid.remove(e.start), this.pointVirtualGrid.remove(e.end);
1081
+ const t = this.lines.indexOf(e);
1082
+ this.lines.splice(t, 1), this.draw(), this.actionHistory.add({
1408
1083
  type: "removeLine",
1409
- data: [line2]
1084
+ data: [e]
1410
1085
  });
1411
1086
  }
1412
1087
  /**
1413
1088
  * 绘制
1414
1089
  */
1415
- draw(synchronize = true) {
1090
+ draw(e = !0) {
1416
1091
  this.container.clear();
1417
- const position = [], doorPosition = [], windowPosition = [];
1418
- this.lines.forEach((line2) => {
1419
- line2.points.forEach((p) => {
1420
- if (line2.userData.isDoor) doorPosition.push(p.x, p.y, 0);
1421
- else position.push(p.x, p.y, 0);
1422
- });
1423
- if (line2.userData.isWindow && line2.userData.drawDoorData) {
1424
- line2.userData.drawDoorData.forEach(({ width, p }) => {
1425
- const center = Point.from(p), direction = line2.direction(), start = center.clone().add(direction.clone().multiplyScalar(width * 0.5)), end = center.clone().add(direction.clone().multiplyScalar(-width * 0.5));
1426
- windowPosition.push(start.x, start.y, 1e-3);
1427
- windowPosition.push(end.x, end.y, 1e-3);
1428
- });
1092
+ const t = [], n = [], o = [];
1093
+ this.lines.forEach((a) => {
1094
+ if (a.points.forEach((s) => {
1095
+ a.userData.isDoor ? n.push(s.x, s.y, 0) : t.push(s.x, s.y, 0);
1096
+ }), a.userData.isWindow && a.userData.drawWindow && a.userData.drawWindow.forEach(({ width: s, p: r }) => {
1097
+ const l = W.from(r), d = a.direction(), c = l.clone().add(d.clone().multiplyScalar(s * 0.5)), h = l.clone().add(d.clone().multiplyScalar(-s * 0.5));
1098
+ o.push(c.x, c.y, 1e-3), o.push(h.x, h.y, 1e-3);
1099
+ }), a.userData.isVerticalReferenceLine) {
1100
+ const s = a.center;
1101
+ this.verticalReferenceLineFlag.position.set(s.x, s.y, 0), this.container.add(this.verticalReferenceLineFlag);
1429
1102
  }
1430
- });
1431
- position.length && this.renderer.createLineSegments({
1432
- position
1433
- }, position.length / 3, {
1103
+ }), t.length && this.renderer.createLineSegments({
1104
+ position: t
1105
+ }, t.length / 3, {
1434
1106
  color: 5745151
1435
- }, this.container);
1436
- doorPosition.length && this.renderer.createLineSegments({
1437
- position: doorPosition
1438
- }, doorPosition.length / 3, {
1107
+ }, this.container), n.length && this.renderer.createLineSegments({
1108
+ position: n
1109
+ }, n.length / 3, {
1439
1110
  color: 16776960
1440
- }, this.container);
1441
- windowPosition.length && this.renderer.createLineSegments({
1442
- position: windowPosition
1443
- }, windowPosition.length / 3, {
1111
+ }, this.container), o.length && this.renderer.createLineSegments({
1112
+ position: o
1113
+ }, o.length / 3, {
1444
1114
  color: 16711935
1445
- }, this.container);
1446
- synchronize && this.synchronizeDxf();
1115
+ }, this.container), e && this.synchronizeDxf();
1447
1116
  }
1448
1117
  /** 获取鼠标当前点, 吸附后的点
1449
1118
  * @param point
1450
1119
  * @returns
1451
1120
  */
1452
- adsorption(radius = 0.1, pointVirtualGrid = this.pointVirtualGrid, quadtree = this.quadtree) {
1453
- const editor = this.parent?.findComponentByName("Editor"), point = Point.from(editor.pointerPosition);
1454
- const p = pointVirtualGrid.queryCircle(point, radius).sort((a, b) => a.point.distance(point) - b.point.distance(point));
1455
- if (p.length) return {
1456
- point: new THREE.Vector3(p[0].point.x, p[0].point.y, 0),
1457
- find: true,
1121
+ adsorption(e = 0.1, t = this.pointVirtualGrid, n = this.quadtree) {
1122
+ const o = this.parent?.findComponentByName("Editor"), a = W.from(o.pointerPosition), s = t.queryCircle(a, e).sort((l, d) => l.point.distance(a) - d.point.distance(a));
1123
+ if (s.length) return {
1124
+ point: new m.Vector3(s[0].point.x, s[0].point.y, 0),
1125
+ find: !0,
1458
1126
  mode: "point",
1459
- line: p[0].userData
1127
+ line: s[0].userData
1460
1128
  };
1461
- let result = quadtree.queryCircle(point, radius);
1462
- if (result.length) {
1463
- let projectPoints = result.map((res) => res.line.projectPoint(point));
1464
- projectPoints.sort((a, b) => {
1465
- if (a && b) return a.distance(point) - b.distance(point);
1466
- return 0;
1467
- });
1468
- result = result.filter((_, i) => !!projectPoints[i]);
1469
- projectPoints = projectPoints.filter((_, i) => !!projectPoints[i]);
1470
- return {
1471
- point: new THREE.Vector3(projectPoints[0].x, projectPoints[0].y, 0),
1472
- find: true,
1129
+ let r = n.queryCircle(a, e);
1130
+ if (r.length) {
1131
+ let l = r.map((d) => d.line.projectPoint(a));
1132
+ return l.sort((d, c) => d && c ? d.distance(a) - c.distance(a) : 0), r = r.filter((d, c) => !!l[c]), l = l.filter((d, c) => !!l[c]), {
1133
+ point: new m.Vector3(l[0].x, l[0].y, 0),
1134
+ find: !0,
1473
1135
  mode: "line",
1474
- line: result[0].line
1136
+ line: r[0].line
1475
1137
  };
1476
1138
  }
1477
1139
  return {
1478
- point: new THREE.Vector3(editor.pointerPosition.x, editor.pointerPosition.y, 0),
1479
- find: false
1140
+ point: new m.Vector3(o.pointerPosition.x, o.pointerPosition.y, 0),
1141
+ find: !1
1480
1142
  };
1481
1143
  }
1482
1144
  /** 创建几何体
1483
1145
  * @param rectangle
1484
1146
  */
1485
- createGeometry(map, count) {
1486
- const geometry = new THREE.BufferGeometry();
1487
- Object.keys(map).forEach((k) => {
1488
- geometry.setAttribute("position", new THREE.BufferAttribute(new Float32Array(map[k]), map[k].length / count));
1489
- });
1490
- return geometry;
1147
+ createGeometry(e, t) {
1148
+ const n = new m.BufferGeometry();
1149
+ return Object.keys(e).forEach((o) => {
1150
+ n.setAttribute("position", new m.BufferAttribute(new Float32Array(e[o]), e[o].length / t));
1151
+ }), n;
1491
1152
  }
1492
1153
  /**
1493
1154
  * 转为json
1494
1155
  */
1495
1156
  toJson() {
1496
- return this.lines.map((line2) => {
1497
- const userData = line2.userData;
1498
- const drawDoorData = userData.drawDoorData;
1499
- const insetionArr = this.quadtree.queryLineSegment(line2).filter((r) => r.line !== line2 && !r.userData?.isDoor).map((r) => ({ index: this.lines.indexOf(r.line) }));
1157
+ return this.lines.map((e) => {
1158
+ const t = e.userData, n = t.drawWindow, o = this.quadtree.queryLineSegment(e).filter((a) => a.line !== e && !a.userData?.isDoor).map((a) => ({ index: this.lines.indexOf(a.line) }));
1500
1159
  return {
1501
- start: line2.start.toJson(),
1502
- end: line2.end.toJson(),
1503
- insetionArr,
1504
- isDoor: userData.isDoor,
1505
- doorDirectConnection: userData.isDoor,
1506
- isWindow: userData.isWindow,
1507
- drawDoorData: drawDoorData && drawDoorData.map((w) => ({
1508
- p: { x: w.p.x, y: w.p.y, z: w.p.z },
1509
- width: w.width,
1510
- full: w.full
1160
+ start: e.start.toJson(this.dxf.originalZAverage),
1161
+ end: e.end.toJson(this.dxf.originalZAverage),
1162
+ insetionArr: o,
1163
+ isDoor: t.isDoor,
1164
+ doorDirectConnection: t.isDoor,
1165
+ length: e.length(),
1166
+ isWindow: t.isWindow,
1167
+ isVerticalReferenceLine: t.isVerticalReferenceLine,
1168
+ drawWindow: n && n.map((a) => ({
1169
+ p: { x: a.p.x, y: a.p.y, z: a.p.z },
1170
+ width: a.width,
1171
+ full: a.full
1511
1172
  }))
1512
1173
  };
1513
1174
  });
@@ -1521,13 +1182,11 @@ class RenderManager extends Component {
1521
1182
  this.updatedMode = null;
1522
1183
  return;
1523
1184
  }
1524
- if (this._timer) clearTimeout(this._timer);
1525
- setTimeout(() => {
1185
+ this._timer && clearTimeout(this._timer), this._timer = setTimeout(() => {
1526
1186
  this.updatedMode = "self";
1527
- const dxf = this.dxf;
1528
- const json = this.toJson();
1529
- dxf.set(json).then(() => {
1530
- dxf.lineOffset();
1187
+ const e = this.dxf, t = this.toJson();
1188
+ e.set(t).then(() => {
1189
+ e.lineOffset();
1531
1190
  });
1532
1191
  }, 10);
1533
1192
  }
@@ -1550,625 +1209,1100 @@ class RenderManager extends Component {
1550
1209
  return this.parent?.findComponentByName("DxfLineModel");
1551
1210
  }
1552
1211
  }
1553
- class DrawDoorLine extends CommandFlowComponent {
1212
+ class Un extends V {
1554
1213
  static name = "DrawDoorLine";
1555
- container = new THREE.Group();
1214
+ container = new m.Group();
1556
1215
  interruptKeys = ["escape"];
1557
1216
  shortcutKeys = ["control", "m"];
1558
1217
  commandName = "draw-door-line";
1559
- onAddFromParent(parent) {
1560
- super.onAddFromParent(parent);
1561
- const editor = parent.findComponentByName("Editor"), eventInput = editor.eventInput, commandManager = editor.commandManager;
1218
+ onAddFromParent(e) {
1219
+ super.onAddFromParent(e);
1220
+ const t = e.findComponentByName("Editor"), n = t.eventInput, o = t.commandManager;
1562
1221
  this.editor.container.add(this.container);
1563
- const commandFlow = this.commandManager.addCommandFlow("draw-door-line").add(this.createInterrupt()).add(this.createCursor("no-drop")).add(this.selectPoint.bind(this));
1564
- eventInput.addKeyCombination(this.commandName, this.shortcutKeys);
1565
- commandFlow.addEventListener("finally", this.createFinally());
1566
- commandFlow.addEventListener("completed", (e) => this.completed(e.data));
1567
- eventInput.addCancelDefaultBehavior(() => eventInput.isOnlyKeyDowns(this.shortcutKeys));
1568
- eventInput.addEventListener("codeChange", async () => {
1569
- eventInput.isKeyCombination(this.commandName) && await commandManager.start(this.commandName);
1222
+ const a = this.commandManager.addCommandFlow("draw-door-line").add(this.createInterrupt()).add(this.createCursor("no-drop")).add(this.selectPoint.bind(this)).add(this.end.bind(this)).addRollback(this.rollback.bind(this)).addRevokeRollback(this.revokeRollback.bind(this));
1223
+ n.addKeyCombination(this.commandName, this.shortcutKeys), a.addEventListener("finally", this.createFinally()), a.addEventListener("completed", (s) => this.completed(s.data)), n.addCancelDefaultBehavior(() => n.isOnlyKeyDowns(this.shortcutKeys)), n.addEventListener("codeChange", async () => {
1224
+ n.isKeyCombination(this.commandName) && await o.start(this.commandName);
1570
1225
  });
1571
1226
  }
1572
1227
  /** 选择点
1573
1228
  * @param next
1574
1229
  */
1575
- selectPoint(next) {
1576
- let editor = this.parent?.findComponentByName("Editor"), start = null, circle = new THREE.Mesh(new THREE.SphereGeometry(0.05), new THREE.MeshBasicMaterial({ color: 65280 })), line2 = new Lines([], 16711935), auxiliaryLine = new Lines([
1577
- new THREE.Vector3(-1e4, 0, 0),
1578
- new THREE.Vector3(1e4, 0, 0),
1579
- new THREE.Vector3(0, -1e4, 0),
1580
- new THREE.Vector3(0, 1e4, 0)
1230
+ selectPoint(e) {
1231
+ let t = this.parent?.findComponentByName("Editor"), n = null, o = new m.Mesh(new m.SphereGeometry(0.05), new m.MeshBasicMaterial({ color: 65280 })), a = new we([], 16711935), s = new we([
1232
+ new m.Vector3(-1e4, 0, 0),
1233
+ new m.Vector3(1e4, 0, 0),
1234
+ new m.Vector3(0, -1e4, 0),
1235
+ new m.Vector3(0, 1e4, 0)
1581
1236
  ], 16711935);
1582
- auxiliaryLine.material = new THREE.LineDashedMaterial({
1237
+ s.material = new m.LineDashedMaterial({
1583
1238
  color: 4235007,
1584
1239
  dashSize: 0.1,
1585
1240
  gapSize: 0.1,
1586
1241
  linewidth: 0.1
1587
- });
1588
- this.container.add(line2);
1589
- let currentPoint = null;
1242
+ }), this.container.add(a);
1243
+ let r = null;
1590
1244
  this.addEventRecord(
1591
1245
  "clear",
1592
- editor.addEventListener("pointerPositionChange", () => {
1593
- const { point, find } = editor.renderManager.adsorption(0.05);
1594
- start && line2.setPoint(start, point);
1595
- if (find) {
1596
- circle.position.set(point.x, point.y, 0);
1597
- this.container.add(circle);
1598
- this.domElement.style.cursor = "none";
1599
- currentPoint = point.clone();
1600
- } else {
1601
- currentPoint = null;
1602
- circle.removeFromParent();
1603
- this.domElement.style.cursor = "no-drop";
1604
- }
1246
+ t.addEventListener("pointerPositionChange", () => {
1247
+ const { point: l, find: d } = t.renderManager.adsorption(0.05);
1248
+ n && a.setPoint(n, l), this.dispatchEvent({ type: "pointerMove", point: l }), d ? (o.position.set(l.x, l.y, 0), this.container.add(o), this.domElement.style.cursor = "none", r = l.clone()) : (r = null, o.removeFromParent(), this.domElement.style.cursor = "no-drop");
1605
1249
  }),
1606
- editor.eventInput.addEventListener("codeChange", async () => {
1607
- if (editor.eventInput.isKeyDown("mouse_0") && currentPoint) {
1608
- if (!start) {
1609
- start = currentPoint.clone();
1250
+ t.eventInput.addEventListener("codeChange", async () => {
1251
+ if (t.eventInput.isKeyDown("mouse_0") && r) {
1252
+ if (!n) {
1253
+ n = r.clone();
1610
1254
  return;
1611
1255
  }
1612
- next([start.clone(), currentPoint.clone()]);
1256
+ e([n.clone(), r.clone()]);
1613
1257
  }
1614
1258
  }),
1615
1259
  function() {
1616
- line2.removeFromParent();
1617
- circle.removeFromParent();
1618
- auxiliaryLine.removeFromParent();
1260
+ a.removeFromParent(), o.removeFromParent(), s.removeFromParent();
1619
1261
  }
1620
1262
  );
1621
1263
  }
1622
- /** 执行完成
1264
+ /**
1265
+ * 结束处理
1266
+ * @param next
1267
+ * @param points
1623
1268
  */
1624
- completed(points) {
1625
- const editor = this.editor, lines = [];
1626
- for (let i = 0; i < points.length; i += 2) {
1627
- const line2 = new LineSegment(Point.from(points[i]), Point.from(points[i + 1]));
1628
- line2.userData.isDoor = true;
1629
- line2.userData.doorDirectConnection = true;
1630
- lines.push(line2);
1269
+ end(e, t) {
1270
+ const n = [];
1271
+ for (let o = 0; o < t.length; o += 2) {
1272
+ const a = new ce(W.from(t[o]), W.from(t[o + 1]));
1273
+ a.userData.isDoor = !0, a.userData.doorDirectConnection = !0, n.push(a);
1631
1274
  }
1632
- editor.renderManager.addLines(lines);
1633
- editor.renderManager.draw();
1275
+ e(n);
1276
+ }
1277
+ /** 执行完成
1278
+ */
1279
+ completed(e) {
1280
+ this.renderManager.addLines(e), this.renderManager.draw();
1281
+ }
1282
+ /** 回滚操作
1283
+ * @param data
1284
+ */
1285
+ rollback(e) {
1286
+ return e.forEach((t) => this.renderManager.removeLine(t)), this.renderManager.draw(), e;
1287
+ }
1288
+ /** 撤回回滚
1289
+ * @param lines
1290
+ * @returns
1291
+ */
1292
+ revokeRollback(e) {
1293
+ return this.completed(e), e;
1634
1294
  }
1635
1295
  }
1636
- class DrawWindow extends CommandFlowComponent {
1296
+ class Zn extends V {
1637
1297
  static name = "DrawWindow";
1638
- container = new THREE.Group();
1298
+ container = new m.Group();
1639
1299
  interruptKeys = ["escape"];
1640
1300
  shortcutKeys = ["control", "q"];
1641
1301
  commandName = "draw-window-line";
1642
- onAddFromParent(parent) {
1643
- super.onAddFromParent(parent);
1644
- this.editor.container.add(this.container);
1645
- const commandFlow = this.commandManager.addCommandFlow(this.commandName).add(this.createInterrupt()).add(this.createCursor("no-drop")).add(this.selectPointStart.bind(this)).add(this.selectPointEnd.bind(this));
1646
- commandFlow.addEventListener("finally", this.createFinally(["selectPointStart"]));
1647
- commandFlow.addEventListener("completed", (e) => this.completed(e.data));
1648
- this.eventInput.addKeyCombination(this.commandName, this.shortcutKeys);
1649
- this.eventInput.addEventListener("codeChange", async () => this.eventInput.isKeyCombination(this.commandName) && await this.commandManager.start(this.commandName));
1650
- this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
1302
+ onAddFromParent(e) {
1303
+ super.onAddFromParent(e), this.editor.container.add(this.container);
1304
+ const t = this.commandManager.addCommandFlow(this.commandName).add(this.createInterrupt()).add(this.createCursor("no-drop")).add(this.selectPointStart.bind(this)).add(this.selectPointEnd.bind(this)).add(this.end.bind(this)).addRollback(this.rollback.bind(this)).addRevokeRollback(this.revokeRollback.bind(this));
1305
+ t.addEventListener("finally", this.createFinally(["selectPointStart"])), t.addEventListener("completed", (n) => this.completed(n.data)), this.eventInput.addKeyCombination(this.commandName, this.shortcutKeys), this.eventInput.addEventListener("codeChange", async () => this.eventInput.isKeyCombination(this.commandName) && await this.commandManager.start(this.commandName)), this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
1651
1306
  }
1652
1307
  /** 选择开始点
1653
1308
  * @param next
1654
1309
  */
1655
- selectPointStart(next) {
1656
- let currentPoint = null, circle = new THREE.Mesh(new THREE.SphereGeometry(0.05), new THREE.MeshBasicMaterial({ color: 16711935 })), currentLine = null;
1310
+ selectPointStart(e) {
1311
+ let t = null, n = new m.Mesh(new m.SphereGeometry(0.05), new m.MeshBasicMaterial({ color: 16711935 })), o = null;
1657
1312
  this.addEventRecord("selectPointStart").add(this.editor.addEventListener("pointerPositionChange", () => {
1658
- const { point, line: line2, find } = this.editor.renderManager.adsorption();
1659
- if (find) {
1660
- this.domElement.style.cursor = "none";
1661
- circle.position.copy(point);
1662
- currentLine = line2;
1663
- currentPoint = point.clone();
1664
- this.container.add(circle);
1665
- } else {
1666
- this.domElement.style.cursor = "no-drop";
1667
- currentPoint = null;
1668
- circle.removeFromParent();
1669
- }
1313
+ const { point: a, line: s, find: r } = this.editor.renderManager.adsorption();
1314
+ this.dispatchEvent({ type: "pointerMove", point: a }), r ? (this.domElement.style.cursor = "none", n.position.copy(a), o = s, t = a.clone(), this.container.add(n)) : (this.domElement.style.cursor = "no-drop", t = null, n.removeFromParent());
1670
1315
  })).add(this.eventInput.addEventListener("codeChange", () => {
1671
- if (this.eventInput.isKeyDown("mouse_0") && currentPoint) {
1672
- this.canceEventRecord("selectPointStart");
1673
- next({ point: currentPoint, line: currentLine });
1674
- }
1675
- }));
1676
- this.addEventRecord("clear").add(() => circle.removeFromParent());
1316
+ this.eventInput.isKeyDown("mouse_0") && t && (this.canceEventRecord("selectPointStart"), e({ point: t, line: o }));
1317
+ })), this.addEventRecord("clear").add(() => n.removeFromParent());
1677
1318
  }
1678
1319
  /** 选择结束点
1679
1320
  * @param next
1680
1321
  */
1681
- selectPointEnd(next, { point, line: line2 }) {
1682
- let currentPoint = null, circle = new THREE.Mesh(new THREE.SphereGeometry(0.05), new THREE.MeshBasicMaterial({ color: 16711935 }));
1683
- this.addEventRecord("clear").add(() => circle.removeFromParent()).add(this.editor.addEventListener("pointerPositionChange", () => {
1684
- const { point: point2, find, line: l } = this.editor.renderManager.adsorption();
1685
- if (find && l === line2) {
1686
- this.domElement.style.cursor = "none";
1687
- circle.position.copy(point2);
1688
- currentPoint = point2.clone();
1689
- this.container.add(circle);
1690
- } else {
1691
- this.domElement.style.cursor = "no-drop";
1692
- currentPoint = null;
1693
- circle.removeFromParent();
1694
- }
1322
+ selectPointEnd(e, { point: t, line: n }) {
1323
+ let o = null, a = new m.Mesh(new m.SphereGeometry(0.05), new m.MeshBasicMaterial({ color: 16711935 }));
1324
+ this.addEventRecord("clear").add(() => a.removeFromParent()).add(this.editor.addEventListener("pointerPositionChange", () => {
1325
+ const { point: s, find: r, line: l } = this.editor.renderManager.adsorption();
1326
+ this.dispatchEvent({ type: "pointerMove", point: s }), r && l === n ? (this.domElement.style.cursor = "none", a.position.copy(s), o = s.clone(), this.container.add(a)) : (this.domElement.style.cursor = "no-drop", o = null, a.removeFromParent());
1695
1327
  })).add(this.eventInput.addEventListener("codeChange", () => {
1696
- if (this.eventInput.isKeyDown("mouse_0") && currentPoint) next({ line: line2, start: point, end: currentPoint });
1328
+ this.eventInput.isKeyDown("mouse_0") && o && e({ line: n, start: t, end: o });
1697
1329
  }));
1698
1330
  }
1331
+ /**
1332
+ * 结束处理
1333
+ * @param next
1334
+ * @param points
1335
+ */
1336
+ end(e, { start: t, end: n, line: o }) {
1337
+ const a = new ce(W.from(t), W.from(n)), s = a.center, r = a.length(), l = {
1338
+ p: new m.Vector3(s.x, s.y, 0),
1339
+ width: r,
1340
+ full: Math.abs(r - o.length()) < 0.01
1341
+ };
1342
+ e({ line: o, doorDataItem: l });
1343
+ }
1699
1344
  /** 执行完成
1700
1345
  */
1701
- completed(data) {
1702
- const start = data.start, end = data.end, line2 = data.line, win = new LineSegment(Point.from(start), Point.from(end)), center = win.center, len = win.length();
1703
- line2.userData.isWindow = true;
1704
- if (!line2.userData.drawDoorData) line2.userData.drawDoorData = [];
1705
- line2.userData.drawDoorData.push({
1706
- p: new THREE.Vector3(center.x, center.y, 0),
1707
- width: len,
1708
- full: Math.abs(len - line2.length()) < 0.01
1346
+ completed({ doorDataItem: e, line: t }) {
1347
+ t.userData.isWindow = !0, t.userData.drawWindow || (t.userData.drawWindow = []), t.userData.drawWindow.push(e), this.renderManager.draw();
1348
+ }
1349
+ /** 回滚操作
1350
+ * @param data
1351
+ */
1352
+ rollback(e) {
1353
+ const { doorDataItem: t, line: n } = e;
1354
+ if (n.userData.drawWindow) {
1355
+ const o = n.userData.drawWindow.indexOf(t);
1356
+ o !== -1 && (n.userData.drawWindow.splice(o, 1), n.userData.drawWindow.length === 0 && (delete n.userData.drawWindow, delete n.userData.isWindow), this.renderManager.draw());
1357
+ }
1358
+ return e;
1359
+ }
1360
+ /** 撤回回滚
1361
+ * @param data
1362
+ * @returns
1363
+ */
1364
+ revokeRollback(e) {
1365
+ return this.completed(e), e;
1366
+ }
1367
+ }
1368
+ class de extends V {
1369
+ static name = "VerticalCorrection";
1370
+ container = new m.Group();
1371
+ shortcutKeys = ["control", "c"];
1372
+ shortcutKeys2 = ["control", "shift", "c"];
1373
+ static commandName = "verticalCorrection";
1374
+ recursion = !1;
1375
+ onAddFromParent(e) {
1376
+ super.onAddFromParent(e), this.editor.container.add(this.container), this.container.position.z = 1e-3;
1377
+ const t = this.commandManager.addCommandFlow(de.commandName).add(this.createInterrupt()).add(this.constraint.bind(this)).add(this.verticalCorrection.bind(this)).addRollback(this.rollback.bind(this)).addRevokeRollback(this.revokeRollback.bind(this));
1378
+ t.addEventListener("finally", this.createFinally()), t.addEventListener("completed", (n) => this.completed(n.data)), t.addEventListener("started", () => {
1379
+ !this.eventInput.isOnlyKeyDowns(this.shortcutKeys) && !this.eventInput.isOnlyKeyDowns(this.shortcutKeys2) && (this.recursion = !1);
1380
+ }), this.eventInput.addEventListener("codeChange", async () => {
1381
+ this.eventInput.isOnlyKeyDowns(this.shortcutKeys) ? (this.recursion = !1, this.commandManager.start(de.commandName, [...this.default.selectLines])) : this.eventInput.isOnlyKeyDowns(this.shortcutKeys2) && (this.recursion = !0, this.commandManager.start(de.commandName, [...this.default.selectLines]));
1382
+ }), this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys) || this.eventInput.isOnlyKeyDowns(this.shortcutKeys2));
1383
+ }
1384
+ /**
1385
+ * 进入命令约束
1386
+ */
1387
+ constraint(e, t) {
1388
+ Array.isArray(t) ? t.length !== 1 ? (D({ message: "请选择一条线段", type: "warning" }), this.cancel()) : e(t) : (D({ message: "进入命令失败", type: "warning" }), this.cancel());
1389
+ }
1390
+ /**
1391
+ * 线段是否为结尾线段
1392
+ * @param line
1393
+ */
1394
+ lineIsPathEnd(e) {
1395
+ for (let t = 0; t < e.points.length; t++) {
1396
+ const n = e.points[t];
1397
+ if (this.renderManager.pointVirtualGrid.queryPoint(n).filter((a) => !a.point.equal(n)).length === 0) return !0;
1398
+ }
1399
+ return !1;
1400
+ }
1401
+ /**
1402
+ *
1403
+ * @param line0
1404
+ * @param line1
1405
+ */
1406
+ isTowLineSegmentConnect(e, t) {
1407
+ return !!(e.start.equal(t.start) || e.start.equal(t.end) || e.end.equal(t.start) || e.end.equal(t.end));
1408
+ }
1409
+ /**
1410
+ * 获取所有相同点的位置信息
1411
+ * @param point
1412
+ * @param point2
1413
+ */
1414
+ getSamePointAll(e, t) {
1415
+ const n = this.renderManager.pointVirtualGrid.queryPoint(e), o = n.filter((a) => t !== a.userData && a.userData?.directionEqual(t));
1416
+ return {
1417
+ queryList: n,
1418
+ parallelList: o
1419
+ };
1420
+ }
1421
+ /**
1422
+ *
1423
+ * @param line
1424
+ * @param point
1425
+ * @param newPoint
1426
+ */
1427
+ setLine(e, t, n, o = []) {
1428
+ e.direction();
1429
+ const a = e.start.equal(t) ? e.start : e.end, s = e.start.equal(t) ? e.end : e.start;
1430
+ e.clone().set(a, s);
1431
+ const { queryList: r, parallelList: l } = this.getSamePointAll(a, e);
1432
+ r.forEach((d) => {
1709
1433
  });
1710
- this.renderManager.draw();
1434
+ }
1435
+ /** 修正2
1436
+ * 第一步:确定需要修复的线段
1437
+ * 第二步:查找与该线段相交的其他线段
1438
+ * 第三步:找出两端点相交的线段,其他为区间相交
1439
+ * 第四步:修正相交的线段的另一个端点
1440
+ * 第五步:判断是否有方向一致的线段,有就调整,调整方法:查找连续平行的线段,求点在线段方向的投影,直到不平行的线段结束
1441
+ * 第六步: 中间线段采用投影修正
1442
+ * @param targettLine
1443
+ * @param vistedList
1444
+ */
1445
+ correction(e, t, n = [], o = /* @__PURE__ */ new Set()) {
1446
+ if (o.has(e)) return;
1447
+ o.add(e);
1448
+ const a = this.renderManager.quadtree.queryLineSegment(e).filter(({ line: d }) => !(d === e || d.userData.isDoor || o.has(d))).map((d) => d.line), s = e.direction(), [r, l] = a.reduce((d, c) => {
1449
+ const [h, y] = d;
1450
+ return t && (c.start.equal(t) || c.end.equal(t)) || (e.sameEndpoint(c) ? h.push(c) : y.push(c)), d;
1451
+ }, [[], []]);
1452
+ return r.filter((d) => {
1453
+ const c = d.direction(), h = s.angleBetween(c, "angle");
1454
+ if (Math.abs(90 - h) > 20) return !1;
1455
+ const w = e.sameEndpointAsStart(d) ? e.start : e.end, b = d.sameEndpointAsStart(e) ? d.end : d.start;
1456
+ if (o.has(b))
1457
+ return !1;
1458
+ const f = new ce(
1459
+ b.clone().add(s.clone().multiplyScalar(1)),
1460
+ b.clone().add(s.clone().multiplyScalar(-1))
1461
+ ), M = f.projectPoint(w, !1);
1462
+ if (M) {
1463
+ const { queryList: L, parallelList: A } = this.getSamePointAll(b, d), G = L.map((E) => {
1464
+ const K = {
1465
+ point: E.point,
1466
+ oldPoint: E.point.clone(),
1467
+ newPoint: M,
1468
+ line: E.userData
1469
+ };
1470
+ return o.add(E.point), K;
1471
+ });
1472
+ if (A.length) {
1473
+ let E = A[0].userData, K = d, k = d.clone();
1474
+ k.start.equal(b) ? k.start.copy(M) : k.end.copy(M);
1475
+ const x = /* @__PURE__ */ new Set();
1476
+ for (; E && !x.has(E); ) {
1477
+ x.add(E);
1478
+ const _ = E.sameEndpointAsStart(K) ? E.end : E.start, p = k.projectPoint(_, !1);
1479
+ if (p) {
1480
+ const { queryList: q, parallelList: R } = this.getSamePointAll(_, E);
1481
+ if (K = E.clone(), q.forEach((Y) => {
1482
+ const he = {
1483
+ point: Y.point,
1484
+ oldPoint: Y.point.clone(),
1485
+ newPoint: p,
1486
+ line: Y.userData
1487
+ };
1488
+ G.push(he);
1489
+ }), R.length) {
1490
+ E = R[0].userData;
1491
+ continue;
1492
+ }
1493
+ }
1494
+ E = null;
1495
+ }
1496
+ }
1497
+ G.map((E) => E.point.copy(E.newPoint)), n.push(G);
1498
+ }
1499
+ return !1;
1500
+ }), this.recursion && a.forEach((d) => this.correction(d, void 0, n, o)), n;
1501
+ }
1502
+ /** 开始
1503
+ * @param next
1504
+ */
1505
+ verticalCorrection(e, t) {
1506
+ e(this.correction(t[0]));
1507
+ }
1508
+ /** 执行完成
1509
+ * @param data
1510
+ */
1511
+ completed(e) {
1512
+ e.forEach((t) => {
1513
+ t.forEach((n) => {
1514
+ const { line: o, newPoint: a, point: s } = n;
1515
+ s.copy(a), this.renderManager.removeLine(o), this.renderManager.addLine(o);
1516
+ });
1517
+ }), this.renderManager.draw();
1518
+ }
1519
+ /** 回滚操作
1520
+ * @param data
1521
+ */
1522
+ rollback(e) {
1523
+ for (let t = e.length - 1; t >= 0; t--) {
1524
+ const n = e[t];
1525
+ for (let o = n.length - 1; o >= 0; o--) {
1526
+ const a = n[o], { line: s, oldPoint: r, point: l } = a;
1527
+ l.copy(r), this.renderManager.removeLine(s), this.renderManager.addLine(s);
1528
+ }
1529
+ }
1530
+ return this.renderManager.draw(), e;
1531
+ }
1532
+ /** 撤回回滚
1533
+ * @param lines
1534
+ * @returns
1535
+ */
1536
+ revokeRollback(e) {
1537
+ return this.completed(e), e;
1538
+ }
1539
+ }
1540
+ class X extends V {
1541
+ static name = "MergeLine";
1542
+ shortcutKeys = ["control", "g"];
1543
+ static commandName = "merge-line";
1544
+ onAddFromParent(e) {
1545
+ super.onAddFromParent(e);
1546
+ const t = e.findComponentByType(Be), n = this.commandManager.addCommandFlow(X.commandName).add(this.createInterrupt()).add(this.constraint.bind(this)).add(this.mergeLine.bind(this)).addRollback(this.rollback.bind(this)).addRevokeRollback(this.revokeRollback.bind(this));
1547
+ n.addEventListener("finally", this.createFinally()), n.addEventListener("completed", (o) => this.completed(o.data)), this.eventInput.addKeyCombination(X.commandName, this.shortcutKeys), this.eventInput.addEventListener("codeChange", async () => {
1548
+ t?.selectLines.length === 2 && this.eventInput.isKeyCombination(X.commandName) && await this.commandManager.start(X.commandName, [...this.default.selectLines]);
1549
+ }), this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
1550
+ }
1551
+ /**
1552
+ * 进入命令约束
1553
+ */
1554
+ constraint(e, t) {
1555
+ Array.isArray(t) ? t.length !== 2 ? (D({ message: "未执行线段合并,请选择两条线段", type: "warning" }), this.cancel()) : e(t) : (D({ message: "进入命令失败", type: "warning" }), this.cancel());
1556
+ }
1557
+ /** 开始
1558
+ * @param next
1559
+ * @todo 合并所有
1560
+ */
1561
+ mergeLine(e, t) {
1562
+ const n = t[0], o = t[1];
1563
+ for (let a = 0; a < n.points.length; a++) {
1564
+ const s = n.points[a];
1565
+ for (let r = 0; r < o.points.length; r++) {
1566
+ const l = o.points[r];
1567
+ if (s.equal(l)) {
1568
+ const d = n.points[(a + 1) % 2], c = o.points[(r + 1) % 2], h = new ce(d, c);
1569
+ return e({ line1: n, line2: o, newLine: h }), D({ message: "已合并", type: "success" });
1570
+ }
1571
+ }
1572
+ }
1573
+ D({ message: "合并失败,两条线未找到共用点", type: "warning" }), this.commandManager.cancel();
1574
+ }
1575
+ /** 执行完成
1576
+ * @param data
1577
+ */
1578
+ completed(e) {
1579
+ this.renderManager.removeLine(e.line1), this.renderManager.removeLine(e.line2), this.renderManager.addLine(e.newLine), this.renderManager.draw();
1580
+ }
1581
+ /** 回滚操作
1582
+ * @param data
1583
+ */
1584
+ rollback(e) {
1585
+ return this.renderManager.addLines([e.line1, e.line2]), this.renderManager.removeLine(e.newLine), this.renderManager.draw(), e;
1586
+ }
1587
+ /** 撤回回滚
1588
+ * @param lines
1589
+ * @returns
1590
+ */
1591
+ revokeRollback(e) {
1592
+ return this.completed(e), e;
1593
+ }
1594
+ }
1595
+ class $ extends V {
1596
+ static name = "DeleteSelectLine";
1597
+ shortcutKeys = ["Delete"];
1598
+ static commandName = "deleteSelectLine";
1599
+ onAddFromParent(e) {
1600
+ super.onAddFromParent(e), this.commandManager.addCommandFlow($.commandName).add(this.createInterrupt()).add(this.constraint.bind(this)).add(this.delete.bind(this)).addRollback(this.rollback.bind(this)).addRevokeRollback(this.revokeRollback.bind(this)).addEventListener("finally", this.createFinally()), this.eventInput.addKeyCombination($.commandName, this.shortcutKeys), this.eventInput.addEventListener("codeChange", async () => {
1601
+ this.eventInput.isKeyCombination($.commandName) && await this.commandManager.start($.commandName, [...this.default.selectLines]);
1602
+ }), this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
1603
+ }
1604
+ /**
1605
+ * 进入命令约束
1606
+ */
1607
+ constraint(e, t) {
1608
+ Array.isArray(t) ? t.length === 0 ? (D({ message: "请选择线段", type: "warning" }), this.cancel()) : e(t) : (D({ message: "进入命令失败", type: "warning" }), this.cancel());
1609
+ }
1610
+ /** 开始
1611
+ * @param next
1612
+ */
1613
+ delete(e, t) {
1614
+ t.forEach((n) => this.renderManager.removeLine(n)), D({ message: "删除成功", type: "success" }), e(t);
1615
+ }
1616
+ /** 回滚操作
1617
+ * @param data
1618
+ */
1619
+ rollback(e) {
1620
+ return this.renderManager.addLines(e), this.renderManager.draw(), e;
1621
+ }
1622
+ /** 撤回回滚
1623
+ * @param lines
1624
+ * @returns
1625
+ */
1626
+ revokeRollback(e) {
1627
+ return e.forEach((t) => this.renderManager.removeLine(t)), e;
1628
+ }
1629
+ }
1630
+ class ee extends V {
1631
+ static name = "ConnectionLine";
1632
+ shortcutKeys = ["Shift", "L"];
1633
+ static commandName = "connectionLine";
1634
+ onAddFromParent(e) {
1635
+ super.onAddFromParent(e);
1636
+ const t = this.commandManager.addCommandFlow(ee.commandName).add(this.createInterrupt()).add(this.constraint.bind(this)).add(this.connection.bind(this)).addRollback(this.rollback.bind(this)).addRevokeRollback(this.revokeRollback.bind(this));
1637
+ t.addEventListener("finally", this.createFinally()), t.addEventListener("completed", (n) => this.completed(n.data)), this.eventInput.addKeyCombination(ee.commandName, this.shortcutKeys), this.eventInput.addEventListener("codeChange", async () => {
1638
+ this.eventInput.isKeyCombination(ee.commandName) && await this.commandManager.start(ee.commandName, [...this.default.selectLines]);
1639
+ }), this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
1640
+ }
1641
+ /**
1642
+ * 进入命令约束
1643
+ */
1644
+ constraint(e, t) {
1645
+ Array.isArray(t) ? t.length !== 2 ? (D({ message: "请选择2条线段", type: "warning" }), this.cancel()) : e(t) : (D({ message: "进入命令失败", type: "warning" }), this.cancel());
1646
+ }
1647
+ /** 连接
1648
+ * @param next
1649
+ */
1650
+ connection(e, t) {
1651
+ let n, o, a = 1 / 0;
1652
+ for (let s = 0; s < 2; s++)
1653
+ for (let r = 0; r < 2; r++) {
1654
+ const l = t[0].points[s], d = t[1].points[r], c = l.distance(d);
1655
+ c < a && (n = l, o = d, a = c);
1656
+ }
1657
+ if (n && o) {
1658
+ const s = new ce(n.clone(), o.clone());
1659
+ e(s), D({ message: "连接成功", type: "success" });
1660
+ } else this.cancel();
1661
+ }
1662
+ /** 成功
1663
+ * @param next
1664
+ * @param selectLines
1665
+ */
1666
+ completed(e) {
1667
+ this.renderManager.addLine(e), this.renderManager.draw();
1668
+ }
1669
+ /** 回滚操作
1670
+ * @param data
1671
+ */
1672
+ rollback(e) {
1673
+ return this.renderManager.removeLine(e), e;
1674
+ }
1675
+ /** 撤回回滚
1676
+ * @param lines
1677
+ * @returns
1678
+ */
1679
+ revokeRollback(e) {
1680
+ return this.completed(e), e;
1681
+ }
1682
+ }
1683
+ class te extends V {
1684
+ static name = "IntersectionConnectionLine";
1685
+ shortcutKeys = ["control", "Shift", "L"];
1686
+ static commandName = "intersectionConnectionLine";
1687
+ onAddFromParent(e) {
1688
+ super.onAddFromParent(e);
1689
+ const t = this.commandManager.addCommandFlow(te.commandName).add(this.createInterrupt()).add(this.constraint.bind(this)).add(this.connection.bind(this)).addRollback(this.rollback.bind(this)).addRevokeRollback(this.revokeRollback.bind(this));
1690
+ t.addEventListener("finally", this.createFinally()), t.addEventListener("completed", (n) => this.completed(n.data)), this.eventInput.addKeyCombination(te.commandName, this.shortcutKeys), this.eventInput.addEventListener("codeChange", async () => {
1691
+ this.eventInput.isKeyCombination(te.commandName) && await this.commandManager.start(te.commandName, [...this.default.selectLines]);
1692
+ }), this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
1693
+ }
1694
+ /**
1695
+ * 进入命令约束
1696
+ */
1697
+ constraint(e, t) {
1698
+ Array.isArray(t) ? t.length !== 2 ? (D({ message: "请选择2条线段", type: "warning" }), this.cancel()) : e(t) : (D({ message: "进入命令失败", type: "warning" }), this.cancel());
1699
+ }
1700
+ /** 开始
1701
+ * @param next
1702
+ */
1703
+ connection(e, t) {
1704
+ const n = t[0], o = t[1], a = t[0].getIntersection(t[1]);
1705
+ if (!a) return;
1706
+ const s = n.points.map((c) => c.clone()), r = o.points.map((c) => c.clone());
1707
+ n.start.distance(a) < n.end.distance(a) ? n.start.copy(a) : n.end.copy(a), o.start.distance(a) < o.end.distance(a) ? o.start.copy(a) : o.end.copy(a);
1708
+ const l = n.points.map((c) => c.clone()), d = o.points.map((c) => c.clone());
1709
+ e({ line1: n, line2: o, oldLine1: s, oldLine2: r, newLine1: l, newLine2: d }), D({ message: "连接成功", type: "success" });
1710
+ }
1711
+ /** 执行完成
1712
+ * @param next
1713
+ * @param selectLines
1714
+ */
1715
+ completed({ line1: e, line2: t, newLine1: n, newLine2: o }) {
1716
+ this.renderManager.removeLine(e), this.renderManager.removeLine(t), e.set(...n), t.set(...o), this.renderManager.addLines([e, t]), this.renderManager.draw();
1717
+ }
1718
+ /** 回滚操作
1719
+ * @param data
1720
+ */
1721
+ rollback(e) {
1722
+ const { line1: t, line2: n, oldLine1: o, oldLine2: a } = e;
1723
+ return this.renderManager.removeLine(t), this.renderManager.removeLine(n), t.set(...o), n.set(...a), this.renderManager.addLines([t, n]), this.renderManager.draw(), e;
1724
+ }
1725
+ /** 撤回回滚
1726
+ * @param lines
1727
+ * @returns
1728
+ */
1729
+ revokeRollback(e) {
1730
+ return this.completed(e), e;
1711
1731
  }
1712
1732
  }
1713
- const _hoisted_1 = {
1733
+ class ne extends V {
1734
+ static name = "DeleteSelectWindow";
1735
+ shortcutKeys = ["Q", "Delete"];
1736
+ static commandName = "deleteSelectWindow";
1737
+ onAddFromParent(e) {
1738
+ super.onAddFromParent(e);
1739
+ const t = this.commandManager.addCommandFlow(ne.commandName).add(this.createInterrupt()).add(this.constraint.bind(this)).add(this.end.bind(this)).addRollback(this.rollback.bind(this)).addRevokeRollback(this.revokeRollback.bind(this));
1740
+ t.addEventListener("finally", this.createFinally()), t.addEventListener("completed", (n) => this.completed(n.data)), this.eventInput.addKeyCombination(ne.commandName, this.shortcutKeys), this.eventInput.addEventListener("codeChange", async () => {
1741
+ this.eventInput.isKeyCombination(ne.commandName) && await this.commandManager.start(ne.commandName, [...this.default.selectLines]);
1742
+ }), this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
1743
+ }
1744
+ /**
1745
+ * 进入命令约束
1746
+ */
1747
+ constraint(e, t) {
1748
+ Array.isArray(t) ? t.some((n) => n.userData.isWindow) ? e(t) : (D({ message: "请选择有窗户线段", type: "warning" }), this.cancel()) : (D({ message: "进入命令失败", type: "warning" }), this.cancel());
1749
+ }
1750
+ /** 开始
1751
+ * @param next
1752
+ */
1753
+ end(e, t) {
1754
+ let n = !1, o = [];
1755
+ t.forEach((a) => {
1756
+ a.userData.isWindow && (o.push({
1757
+ line: a,
1758
+ drawDoorData: a.userData.drawDoorData
1759
+ }), n = !0);
1760
+ }), n && D({ message: "删除窗户成功", type: "success" }), e(o);
1761
+ }
1762
+ /**
1763
+ * 完成
1764
+ * @param list
1765
+ */
1766
+ completed(e) {
1767
+ e.forEach((t) => {
1768
+ const n = t.line.userData;
1769
+ n && (delete n.isWindow, delete n.drawDoorData);
1770
+ }), this.renderManager.draw();
1771
+ }
1772
+ /** 回滚操作
1773
+ * @param data
1774
+ */
1775
+ rollback(e) {
1776
+ return e.forEach((t) => {
1777
+ t.line.userData || (t.line.userData = {});
1778
+ const n = t.line.userData;
1779
+ n.isWindow = !0, n.drawDoorData = t.drawDoorData;
1780
+ }), this.renderManager.draw(), e;
1781
+ }
1782
+ /** 撤回回滚
1783
+ * @param lines
1784
+ * @returns
1785
+ */
1786
+ revokeRollback(e) {
1787
+ return this.completed(e), e;
1788
+ }
1789
+ }
1790
+ class oe extends V {
1791
+ static name = "SelectAll";
1792
+ container = new m.Group();
1793
+ shortcutKeys = ["control", "a"];
1794
+ static commandName = "selectAll";
1795
+ onAddFromParent(e) {
1796
+ super.onAddFromParent(e), this.editor.container.add(this.container), this.container.position.z = 1e-3;
1797
+ const t = this.commandManager.addCommandFlow(oe.commandName).add(this.createInterrupt()).add(this.selectAll.bind(this)).addRollback(this.rollback.bind(this)).addRevokeRollback(this.revokeRollback.bind(this));
1798
+ t.writeOperationList = !1, t.addEventListener("finally", this.createFinally()), t.addEventListener("completed", (n) => this.completed(n.data)), this.eventInput.addKeyCombination(oe.commandName, this.shortcutKeys), this.eventInput.addEventListener("codeChange", async () => {
1799
+ this.eventInput.isKeyCombination(oe.commandName) && await this.commandManager.start(oe.commandName);
1800
+ }), this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
1801
+ }
1802
+ /** 开始
1803
+ * @param next
1804
+ */
1805
+ selectAll(e) {
1806
+ e([...this.renderManager.lines]);
1807
+ }
1808
+ /** 执行完成
1809
+ */
1810
+ completed(e) {
1811
+ e.map((t) => this.default.addSelectLine(t));
1812
+ }
1813
+ /** 回滚操作
1814
+ * @param lines
1815
+ */
1816
+ rollback(e) {
1817
+ return e.map((t) => this.default.removeSelectLine(t)), e;
1818
+ }
1819
+ /** 撤回回滚
1820
+ * @param lines
1821
+ * @returns
1822
+ */
1823
+ revokeRollback(e) {
1824
+ return this.completed(e), e;
1825
+ }
1826
+ }
1827
+ class ae extends V {
1828
+ static name = "ViewAngle";
1829
+ shortcutKeys = ["r"];
1830
+ static commandName = "viewAngle";
1831
+ onAddFromParent(e) {
1832
+ super.onAddFromParent(e);
1833
+ const t = this.commandManager.addCommandFlow(ae.commandName).add(this.createInterrupt()).add(this.constraint.bind(this)).add(this.viewAngle.bind(this));
1834
+ t.writeOperationList = !1, t.addEventListener("finally", this.createFinally()), this.eventInput.addKeyCombination(ae.commandName, this.shortcutKeys), this.eventInput.addEventListener("codeChange", async () => {
1835
+ this.eventInput.isKeyCombination(ae.commandName) && await this.commandManager.start(ae.commandName, [...this.default.selectLines]);
1836
+ }), this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
1837
+ }
1838
+ /**
1839
+ * 进入命令约束
1840
+ */
1841
+ constraint(e, t) {
1842
+ Array.isArray(t) ? t.length !== 2 || !t[0].sameEndpoint(t[1]) ? (D({ message: "请选择两条具有端点相交的线段", type: "warning" }), this.cancel()) : e(t) : (D({ message: "进入命令失败", type: "warning" }), this.cancel());
1843
+ }
1844
+ /**
1845
+ *
1846
+ * @param next
1847
+ * @param selectLines
1848
+ */
1849
+ viewAngle(e, t) {
1850
+ const [n, o] = t, a = Math.min(0.5, n.length(), o.length());
1851
+ let s, r, l, d = 0, c = 0;
1852
+ n.sameEndpointAsStart(o) ? (s = n.start, r = n.end) : (s = n.end, r = n.start), o.sameEndpointAsStart(n) ? l = o.end : l = o.start;
1853
+ function h(x, _) {
1854
+ const p = _.x - x.x, q = _.y - x.y;
1855
+ let R = Math.atan2(q, p) * (180 / Math.PI);
1856
+ return R < 0 && (R += 360), R;
1857
+ }
1858
+ const y = h(s, r), w = h(s, l), b = Math.min(y, w), f = Math.max(y, w), M = [];
1859
+ function L(x, _) {
1860
+ for (let p = x; p <= _; p++) {
1861
+ const q = Math.cos(p * Math.PI / 180) * a + s.x, R = Math.sin(p * Math.PI / 180) * a + s.y, Y = Math.cos((p + 1) * Math.PI / 180) * a + s.x, he = Math.sin((p + 1) * Math.PI / 180) * a + s.y;
1862
+ M.push(q, R, 0, Y, he, 0);
1863
+ }
1864
+ }
1865
+ f - b > 180 ? (L(0, b), L(f, 360), d = 360 - (f - b), c = (f + d / 2) % 360) : (L(b, f), d = f - b, c = b + d / 2);
1866
+ const A = new m.LineSegments();
1867
+ A.geometry = this.renderManager.createGeometry({
1868
+ position: M
1869
+ }, M.length / 3), A.material = new m.LineBasicMaterial({ color: 16711935 }), this.renderManager.container.add(A);
1870
+ const G = Math.cos(c * Math.PI / 180) * a + s.x, E = Math.sin(c * Math.PI / 180) * a + s.y, K = this.renderer.createText(Number(d.toFixed(2)), new m.Vector3(G, E, 0), {
1871
+ textShadow: "0px 0px 2px #000"
1872
+ }, this.renderManager.container);
1873
+ let k = 0;
1874
+ this.addEventRecord("clear").add(() => A.removeFromParent()).add(() => K.removeFromParent()).add(this.eventInput.addEventListener("codeChange", () => {
1875
+ this.eventInput.isOnlyKeyDown("enter") ? e() : this.eventInput.isOnlyKeyDown("mouse_0") && (k++, k === 1 ? setTimeout(() => k = 0, 500) : k === 2 && (e(), k = 0));
1876
+ }));
1877
+ }
1878
+ }
1879
+ const Yn = {
1714
1880
  key: 0,
1715
1881
  class: "mt-[5px] text-[#ccc] text-[11px] absolute left-[10px] bottom-[10px] rounded-[8px] min-w-[150px] bg-black/15 p-[10px]"
1716
- };
1717
- const _hoisted_2 = { class: "text-start max-w-[150px]" };
1718
- const _hoisted_3 = { class: "inline-block ml-[10px] text-[var(--color-primary)]" };
1719
- const _hoisted_4 = {
1882
+ }, Xn = { class: "text-start max-w-[150px]" }, $n = { class: "inline-block ml-[10px] text-[var(--color-primary)]" }, eo = {
1720
1883
  key: 0,
1721
- class: "p-[5px] min-w-[140px]"
1722
- };
1723
- const _hoisted_5 = { class: "text-[14px] flex flex-col" };
1724
- const _hoisted_6 = ["onClick"];
1725
- const _hoisted_7 = { class: "flex flex-row items-center" };
1726
- const _hoisted_8 = { class: "flex justify-center items-center size-[20px] bg-[#f0f0f0] rounded-[2px] mr-[10px]" };
1727
- const _hoisted_9 = ["src"];
1728
- const _hoisted_10 = {
1884
+ class: "p-[5px] max-w-[200px]"
1885
+ }, to = { class: "text-[14px] flex flex-col" }, no = ["onClick"], oo = { class: "flex flex-row items-center" }, ao = { class: "flex justify-center items-center size-[20px] bg-[#f0f0f0] rounded-[2px] mr-[10px]" }, so = ["src"], io = { class: "text-wrap" }, ro = {
1729
1886
  key: 1,
1730
1887
  class: "text-[#999]"
1731
- };
1732
- const _hoisted_11 = {
1888
+ }, lo = {
1733
1889
  style: { "--el-color-primary": "var(--primary-color)" },
1734
1890
  class: "flex flex-row items-center justify-between gap-[10px] mt-[10px] text-[10px]"
1735
- };
1736
- const _hoisted_12 = {
1891
+ }, co = {
1737
1892
  key: 0,
1738
1893
  class: "flex flex-row items-center flex-wrap justify-between gap-[10px] mt-[10px] text-[10px]"
1739
- };
1740
- const _hoisted_13 = { class: "border-t-1 border-t-[#eee] mt-[5px] pt-[5px] h-[20px] flex items-center gap-[10px]" };
1741
- const _hoisted_14 = {
1742
- key: 1,
1743
- class: "select-none flex-1 flex justify-center text-[12px] text-[#999]"
1744
- };
1745
- const _sfc_main = /* @__PURE__ */ defineComponent({
1894
+ }, mo = { class: "flex-wrap border-t-1 border-t-[#eee] mt-[5px] pt-[5px] flex items-center gap-[10px]" }, ho = ["onClick", "title"], uo = ["src"], po = /* @__PURE__ */ me({
1746
1895
  __name: "EditorTool",
1747
1896
  props: {
1748
1897
  dxfSystem: {},
1749
1898
  permission: {}
1750
1899
  },
1751
- setup(__props) {
1752
- function setEditorToolPosition(left, top, rect = elRef.value.getBoundingClientRect(), toolBarRect = toolBarRef.value.getBoundingClientRect()) {
1753
- const minX = 0, maxX = rect.width - toolBarRect.width, minY = 0, maxY = rect.height - toolBarRect.height;
1754
- left = Math.max(minX, Math.min(left, maxX));
1755
- top = Math.max(minY, Math.min(top, maxY));
1756
- toolBarPosition.value = { left, top };
1900
+ setup(i) {
1901
+ function e(C, u, v = h.value.getBoundingClientRect(), U = y.value.getBoundingClientRect()) {
1902
+ const ue = v.width - U.width, pe = 0, Le = v.height - U.height;
1903
+ C = Math.max(0, Math.min(C, ue)), u = Math.max(pe, Math.min(u, Le)), k.value = { left: C, top: u };
1757
1904
  }
1758
- function startCurrentCommandItem(item) {
1759
- if (currentCommand.value === item.command) return;
1760
- editor.commandManager.start(item.command);
1905
+ function t(C) {
1906
+ b.value === C.command || b.value !== "default" || L.commandManager.start(C.command);
1761
1907
  }
1762
- function setLines(lines) {
1763
- if (lines) {
1764
- localStorage.setItem("lines", JSON.stringify(lines));
1908
+ function n(C) {
1909
+ if (C) {
1910
+ localStorage.setItem("lines", JSON.stringify(C));
1765
1911
  try {
1766
- dxfSystem.Dxf.set(lines);
1767
- dxfSystem.Dxf.lineOffset();
1768
- } catch (error) {
1769
- console.log(error);
1912
+ f.Dxf.set(C), f.Dxf.lineOffset();
1913
+ } catch (u) {
1914
+ console.log(u);
1770
1915
  }
1771
1916
  }
1772
1917
  }
1773
- async function selectLocalFile() {
1774
- const data = await SelectLocalFile.json();
1775
- if (Array.isArray(data)) {
1776
- localStorage.removeItem("orbitControls");
1777
- setLines(data);
1778
- }
1918
+ async function o() {
1919
+ const C = await kt.json();
1920
+ Array.isArray(C) && (localStorage.removeItem("orbitControls"), n(C));
1779
1921
  }
1780
- function dragMoveHelper({ offsetX, offsetY }) {
1781
- domEventRegister.mouseMoveEventProxylock = true;
1782
- const cusor = document.body.style.cursor;
1922
+ function a({ offsetX: C, offsetY: u }) {
1923
+ M.mouseMoveEventProxylock = !0;
1924
+ const v = document.body.style.cursor;
1783
1925
  document.body.style.cursor = "move";
1784
- const move = (e) => {
1785
- const rect = elRef.value.getBoundingClientRect(), toolBarRect = toolBarRef.value.getBoundingClientRect();
1786
- setEditorToolPosition(
1787
- e.pageX - rect.left - offsetX,
1788
- e.pageY - rect.top - offsetY,
1789
- rect,
1790
- toolBarRect
1791
- );
1792
- e.stopPropagation();
1793
- document.body.style.cursor = "move";
1926
+ const U = (ue) => {
1927
+ const pe = h.value.getBoundingClientRect(), Le = y.value.getBoundingClientRect();
1928
+ e(
1929
+ ue.pageX - pe.left - C,
1930
+ ue.pageY - pe.top - u,
1931
+ pe,
1932
+ Le
1933
+ ), ue.stopPropagation(), document.body.style.cursor = "move";
1934
+ }, Me = () => {
1935
+ document.body.removeEventListener("mousemove", U), document.removeEventListener("mouseup", Me), document.body.style.cursor = v, M.mouseMoveEventProxylock = !1;
1794
1936
  };
1795
- const end = () => {
1796
- document.body.removeEventListener("mousemove", move);
1797
- document.removeEventListener("mouseup", end);
1798
- document.body.style.cursor = cusor;
1799
- domEventRegister.mouseMoveEventProxylock = false;
1800
- };
1801
- document.body.addEventListener("mousemove", move);
1802
- document.addEventListener("mouseup", end);
1937
+ document.body.addEventListener("mousemove", U), document.addEventListener("mouseup", Me);
1803
1938
  }
1804
- const props = __props;
1805
- const originalLineVisible = ref(true), dxfVisible = ref(true), whiteModelVisible = ref(true), isLook = ref(false), elRef = ref(), toolBarRef = ref(), toolBarExpand = ref(true), currentCommand = ref(""), dxfSystem = toRaw(props.dxfSystem), domEventRegister = dxfSystem.findComponentByType(DomEventRegister), editor = dxfSystem.findComponentByType(Editor$1), defaultComponent = dxfSystem.findComponentByType(Default), whiteModel = dxfSystem.findComponentByType(WhiteModel), toolBarPosition = ref({ left: 10, top: 10 }), images = /* @__PURE__ */ Object.assign({ "./assets/images/door.svg": __vite_glob_0_0, "./assets/images/line.svg": __vite_glob_0_1, "./assets/images/selectPoint.svg": __vite_glob_0_2, "./assets/images/window.svg": __vite_glob_0_3 }), showShortcutKey = ref(false), selectLineCount = ref(0), hasWindowLine = ref(false), resizeObserver = new ResizeObserver(() => setEditorToolPosition(toolBarPosition.value.left, toolBarPosition.value.top)), shortcutKeys = [
1806
- { "name": "开启绘制线段命令", "shortcut": "Ctrl + L" },
1807
- { "name": "开启绘制门线命令", "shortcut": "Ctrl + M" },
1808
- { "name": "开启绘制窗户线命令", "shortcut": "Ctrl + Q" },
1809
- { "name": "开启点修改命令", "shortcut": "Ctrl + P" },
1810
- { "name": "线段方向移动线段点(点修改命令下)", "shortcut": "Shift + 移动" },
1811
- { "name": "删除线段", "shortcut": "选中 + Delete" },
1812
- { "name": "删除窗户线", "shortcut": "选中 + Q + Delete" },
1813
- { "name": "选中", "shortcut": "鼠标左键" },
1814
- { "name": "多选", "shortcut": "鼠标左键 + Ctrl" },
1815
- { "name": "取消选中", "shortcut": "鼠标左键 + Alt" },
1816
- { "name": "框选", "shortcut": "鼠标左键 + 移动" },
1817
- { "name": "线段同方向合并", "shortcut": "Ctrl + G" },
1818
- { "name": "线段连接", "shortcut": "选中 + Shift + L" },
1819
- { "name": "线段交点连接", "shortcut": "选中 + Ctrl + Shift + L" },
1820
- { "name": "命令确认", "shortcut": "Enter" },
1821
- { "name": "取消命令", "shortcut": "Esc" }
1822
- ], commandList = [
1939
+ const s = i, r = S(!0), l = S(!0), d = S(!0), c = S(!1), h = S(), y = S(), w = S(!0), b = S(""), f = St(s.dxfSystem), M = f.findComponentByType(Lt), L = f.findComponentByType(rt), A = f.findComponentByType(Be), G = f.findComponentByType(It), E = S(0), K = S(0), k = S({ left: 10, top: 10 }), x = /* @__PURE__ */ Object.assign({ "./assets/images/angle.svg": yn, "./assets/images/connection.svg": bn, "./assets/images/deleteSelectLine.svg": xn, "./assets/images/deleteSelectWindow.svg": Mn, "./assets/images/door.svg": kn, "./assets/images/intersectionConnection.svg": Dn, "./assets/images/line.svg": An, "./assets/images/mergeLine.svg": Bn, "./assets/images/revokeRollback.svg": Nn, "./assets/images/rollback.svg": Rn, "./assets/images/selectAll.svg": Fn, "./assets/images/selectPoint.svg": Tn, "./assets/images/verticalCorrection.svg": jn, "./assets/images/window.svg": Qn }), _ = S(!1), p = S(0), q = S(!1), R = new ResizeObserver(() => e(k.value.left, k.value.top)), Y = [
1940
+ { name: "开启绘制线段命令", shortcut: "Ctrl + L" },
1941
+ { name: "开启绘制门线命令", shortcut: "Ctrl + M" },
1942
+ { name: "开启绘制窗户线命令", shortcut: "Ctrl + Q" },
1943
+ { name: "开启点修改命令", shortcut: "Ctrl + P" },
1944
+ { name: "线段方向移动线段点(点修改命令下)", shortcut: "Shift + 移动" },
1945
+ { name: "删除线段", shortcut: "选中 + Delete" },
1946
+ { name: "删除窗户线", shortcut: "选中 + Q + Delete" },
1947
+ { name: "选中", shortcut: "鼠标左键" },
1948
+ { name: "多选", shortcut: "鼠标左键 + Ctrl" },
1949
+ { name: "取消选中", shortcut: "鼠标左键 + Alt" },
1950
+ { name: "框选", shortcut: "鼠标左键 + 移动" },
1951
+ { name: "线段同方向合并", shortcut: "Ctrl + G" },
1952
+ { name: "线段连接", shortcut: "选中 + Shift + L" },
1953
+ { name: "线段交点连接", shortcut: "选中 + Ctrl + Shift + L" },
1954
+ { name: "垂直修正", shortcut: "Ctrl + C 或 Ctrl + Shift + C" },
1955
+ { name: "命令确认", shortcut: "Enter" },
1956
+ { name: "取消命令", shortcut: "Esc" },
1957
+ { name: "回滚操作", shortcut: "Ctrl + Z" },
1958
+ { name: "取消回滚操作", shortcut: "Ctrl + Y" }
1959
+ ], he = [
1823
1960
  {
1824
1961
  command: "default",
1825
1962
  name: "默认",
1826
- show: false,
1963
+ show: !1,
1827
1964
  shortcut: ""
1828
1965
  },
1829
1966
  {
1830
1967
  command: "draw-line",
1831
1968
  name: "绘制线段",
1832
- src: images["./assets/images/line.svg"].default,
1833
- show: true,
1969
+ src: x["./assets/images/line.svg"].default,
1970
+ show: !0,
1834
1971
  shortcut: "Ctrl + L"
1835
1972
  },
1836
1973
  {
1837
1974
  command: "draw-door-line",
1838
1975
  name: "绘制门线",
1839
- show: true,
1840
- src: images["./assets/images/door.svg"].default,
1976
+ show: !0,
1977
+ src: x["./assets/images/door.svg"].default,
1841
1978
  shortcut: "Ctrl + M"
1842
1979
  },
1843
1980
  {
1844
1981
  command: "draw-window-line",
1845
1982
  name: "绘制窗户线",
1846
- show: true,
1847
- src: images["./assets/images/window.svg"].default,
1983
+ show: !0,
1984
+ src: x["./assets/images/window.svg"].default,
1848
1985
  shortcut: "Ctrl + Q"
1849
1986
  },
1850
1987
  {
1851
1988
  command: "point",
1852
1989
  name: "点修改",
1853
- show: true,
1854
- src: images["./assets/images/selectPoint.svg"].default,
1990
+ show: !0,
1991
+ src: x["./assets/images/selectPoint.svg"].default,
1855
1992
  shortcut: "Ctrl + P"
1856
1993
  }
1994
+ ], dt = [
1995
+ {
1996
+ command: "",
1997
+ name: "操作回滚",
1998
+ src: x["./assets/images/rollback.svg"].default,
1999
+ show: B(() => E.value !== 0),
2000
+ shortcut: "Ctrl + Z",
2001
+ action() {
2002
+ L.commandManager.rollback();
2003
+ }
2004
+ },
2005
+ {
2006
+ command: "",
2007
+ name: "撤销操作回滚",
2008
+ src: x["./assets/images/revokeRollback.svg"].default,
2009
+ show: B(() => K.value !== 0),
2010
+ shortcut: "Ctrl + Y",
2011
+ class: "rotateY-[180deg]",
2012
+ action() {
2013
+ L.commandManager.revokeRollback();
2014
+ }
2015
+ },
2016
+ {
2017
+ command: X.commandName,
2018
+ name: "合并",
2019
+ src: x["./assets/images/mergeLine.svg"].default,
2020
+ show: B(() => p.value === 2),
2021
+ shortcut: "Ctrl + G"
2022
+ },
2023
+ {
2024
+ command: ee.commandName,
2025
+ name: "两点连接",
2026
+ show: B(() => p.value === 2),
2027
+ src: x["./assets/images/connection.svg"].default,
2028
+ shortcut: "Shift + L"
2029
+ },
2030
+ {
2031
+ command: te.commandName,
2032
+ name: "延长线交点连接",
2033
+ show: B(() => p.value === 2),
2034
+ src: x["./assets/images/intersectionConnection.svg"].default,
2035
+ shortcut: "Ctrl + Shift + L"
2036
+ },
2037
+ {
2038
+ command: de.commandName,
2039
+ name: "线段垂直纠正",
2040
+ show: B(() => p.value === 1),
2041
+ src: x["./assets/images/verticalCorrection.svg"].default,
2042
+ shortcut: "Ctrl + C 或 Ctrl + Shift + C"
2043
+ },
2044
+ {
2045
+ command: ae.commandName,
2046
+ name: "角度显示",
2047
+ show: B(() => p.value === 2 && A.selectLines[0].sameEndpoint(A.selectLines[1])),
2048
+ src: x["./assets/images/angle.svg"].default,
2049
+ shortcut: "r"
2050
+ },
2051
+ {
2052
+ command: oe.commandName,
2053
+ name: "全选",
2054
+ show: B(() => p.value !== L.renderManager.lines.length),
2055
+ src: x["./assets/images/selectAll.svg"].default,
2056
+ shortcut: "Ctrl + A"
2057
+ },
2058
+ {
2059
+ command: ne.commandName,
2060
+ name: "清除窗户",
2061
+ show: B(() => q.value),
2062
+ src: x["./assets/images/deleteSelectWindow.svg"].default,
2063
+ shortcut: "Q + Delete"
2064
+ },
2065
+ {
2066
+ command: $.commandName,
2067
+ name: "删除",
2068
+ show: B(() => p.value > 0),
2069
+ src: x["./assets/images/deleteSelectLine.svg"].default,
2070
+ shortcut: "Delete"
2071
+ }
1857
2072
  ];
1858
- watch(toolBarPosition, () => localStorage.setItem("editorToolPosition", JSON.stringify(toolBarPosition.value)));
1859
- watch(showShortcutKey, () => localStorage.setItem("showShortcutKey", showShortcutKey.value + ""));
1860
- watch(toolBarExpand, () => localStorage.setItem("toolBarExpand", toolBarExpand.value + ""));
1861
- watch(originalLineVisible, () => dxfSystem.Variable.set("originalLineVisible", originalLineVisible.value));
1862
- watch(dxfVisible, () => dxfSystem.Variable.set("dxfVisible", dxfVisible.value));
1863
- watch(whiteModelVisible, () => dxfSystem.Variable.set("whiteModelVisible", whiteModelVisible.value));
1864
- dxfSystem.Variable.addEventListener("isLook", (e) => isLook.value = e.value);
1865
- dxfSystem.Variable.addEventListener("originalLineVisible", (e) => originalLineVisible.value = e.value);
1866
- dxfSystem.Variable.addEventListener("dxfVisible", (e) => dxfVisible.value = e.value);
1867
- dxfSystem.Variable.addEventListener("whiteModelVisible", (e) => whiteModelVisible.value = e.value);
1868
- const startedEventCancel = editor.commandManager.addEventListener("started", (e) => {
1869
- currentCommand.value = e.name;
2073
+ J(k, () => localStorage.setItem("editorToolPosition", JSON.stringify(k.value))), J(_, () => localStorage.setItem("showShortcutKey", _.value + "")), J(w, () => {
2074
+ localStorage.setItem("toolBarExpand", w.value + ""), w.value && be(() => e(k.value.left, k.value.top));
2075
+ }), J(r, () => f.Variable.set("originalLineVisible", r.value)), J(l, () => f.Variable.set("dxfVisible", l.value)), J(d, () => f.Variable.set("whiteModelVisible", d.value)), f.Variable.addEventListener("isLook", (C) => c.value = C.value), f.Variable.addEventListener("originalLineVisible", (C) => r.value = C.value), f.Variable.addEventListener("dxfVisible", (C) => l.value = C.value), f.Variable.addEventListener("whiteModelVisible", (C) => d.value = C.value);
2076
+ const lt = L.commandManager.addEventListener("started", (C) => {
2077
+ b.value = C.name;
1870
2078
  });
1871
- if (localStorage.getItem("showShortcutKey")) {
1872
- showShortcutKey.value = localStorage.getItem("showShortcutKey") === "true";
1873
- }
1874
- if (localStorage.getItem("toolBarExpand")) {
1875
- toolBarExpand.value = localStorage.getItem("toolBarExpand") === "true";
1876
- }
1877
- onMounted(() => {
1878
- toolBarRef.value.style.display = "none";
1879
- setTimeout(() => {
1880
- toolBarRef.value.style.display = "block";
1881
- if (localStorage.getItem("editorToolPosition")) {
1882
- const { left, top } = JSON.parse(localStorage.getItem("editorToolPosition") ?? "{}");
1883
- setEditorToolPosition(left, top);
1884
- nextTick(() => resizeObserver.observe(elRef.value));
1885
- } else {
1886
- nextTick(() => resizeObserver.observe(elRef.value));
1887
- }
1888
- }, 20);
1889
- defaultComponent.addEventListener("selectLineChange", () => {
1890
- selectLineCount.value = defaultComponent.selectLines.length;
1891
- hasWindowLine.value = defaultComponent.selectLines.some((l) => l.userData.isWindow);
2079
+ return localStorage.getItem("showShortcutKey") && (_.value = localStorage.getItem("showShortcutKey") === "true"), localStorage.getItem("toolBarExpand") && (w.value = localStorage.getItem("toolBarExpand") === "true"), tt(() => {
2080
+ y.value.style.display = "none", setTimeout(() => {
2081
+ if (y.value.style.display = "block", localStorage.getItem("editorToolPosition")) {
2082
+ const { left: C, top: u } = JSON.parse(localStorage.getItem("editorToolPosition") ?? "{}");
2083
+ e(C, u), be(() => R.observe(h.value));
2084
+ } else
2085
+ be(() => R.observe(h.value));
2086
+ }, 100), A.addEventListener("selectLineChange", () => {
2087
+ p.value = A.selectLines.length, q.value = A.selectLines.some((C) => C.userData.isWindow);
2088
+ }), ["rollback", "completed", "revokeRollback"].forEach((C) => {
2089
+ L.commandManager.addEventListener(C, () => {
2090
+ setTimeout(() => {
2091
+ E.value = L.commandManager.operationList.length, K.value = L.commandManager.rollbackList.length;
2092
+ });
2093
+ });
1892
2094
  });
1893
- });
1894
- onUnmounted(() => {
1895
- domEventRegister.mouseMoveEventProxylock = false;
1896
- startedEventCancel();
1897
- resizeObserver.disconnect();
1898
- });
1899
- return (_ctx, _cache) => {
1900
- return openBlock(), createElementBlock("div", {
1901
- ref_key: "elRef",
1902
- ref: elRef,
1903
- class: "editorTool pointer-events-none overflow-hidden absolute left-0 top-0 w-full h-full z-[10000] flex flex-row justify-between p-[5px] box-border select-none pointer-events-[all]"
2095
+ }), Bt(() => {
2096
+ M.mouseMoveEventProxylock = !1, lt(), R.disconnect();
2097
+ }), (C, u) => (P(), O("div", {
2098
+ ref_key: "elRef",
2099
+ ref: h,
2100
+ class: "editorTool pointer-events-none overflow-hidden absolute left-0 top-0 w-full h-full z-[20] flex flex-row justify-between p-[5px] box-border select-none pointer-events-[all]"
2101
+ }, [
2102
+ F(xe, null, {
2103
+ default: j(() => [
2104
+ _.value ? (P(), O("div", Yn, [
2105
+ (P(), O(fe, null, Ie(Y, (v) => I("div", {
2106
+ class: "p-[4px_0px] flex justify-between text-right border-b-1 border-b-[rgba(255,255,255,0.1)] last-of-type:border-b-0",
2107
+ key: v.name
2108
+ }, [
2109
+ I("p", Xn, ie(v.name), 1),
2110
+ I("span", $n, ie(v.shortcut), 1)
2111
+ ])), 64))
2112
+ ])) : Z("", !0)
2113
+ ]),
2114
+ _: 1
2115
+ }),
2116
+ I("div", {
2117
+ ref_key: "toolBarRef",
2118
+ ref: y,
2119
+ style: Se({ left: k.value.left + "px", top: k.value.top + "px" }),
2120
+ class: T(["overflow-hidden pointer-events-auto w-fit max-w-[260px] transition-[border-radius] text-[#333] absolute z-[11] bg-white select-none", { "rounded-[8px] ": w.value }]),
2121
+ onMousedown: u[9] || (u[9] = (v) => v.stopPropagation())
1904
2122
  }, [
1905
- createVNode(Transition, null, {
1906
- default: withCtx(() => [
1907
- showShortcutKey.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
1908
- (openBlock(), createElementBlock(Fragment, null, renderList(shortcutKeys, (item) => {
1909
- return createElementVNode("p", {
1910
- class: "p-[4px_0px] flex justify-between text-right border-b-1 border-b-[rgba(255,255,255,0.1)] last-of-type:border-b-0",
1911
- key: item.name
1912
- }, [
1913
- createElementVNode("p", _hoisted_2, toDisplayString(item.name), 1),
1914
- createElementVNode("span", _hoisted_3, toDisplayString(item.shortcut), 1)
1915
- ]);
1916
- }), 64))
1917
- ])) : createCommentVNode("", true)
1918
- ]),
1919
- _: 1
1920
- }),
1921
- createElementVNode("div", {
1922
- ref_key: "toolBarRef",
1923
- ref: toolBarRef,
1924
- style: normalizeStyle({ left: toolBarPosition.value.left + "px", top: toolBarPosition.value.top + "px" }),
1925
- class: normalizeClass(["pointer-events-auto max-w-[260px] transition-[border-radius] text-[#333] absolute z-[11] bg-white select-none", { "rounded-[8px] ": toolBarExpand.value }]),
1926
- onMousedown: _cache[13] || (_cache[13] = (e) => e.stopPropagation())
2123
+ I("div", {
2124
+ onMousedown: a,
2125
+ class: T([{ "border-b-[#eee] border-b-1": w.value }, "flex flex-row justify-between header text-[14px] font-bold p-[10px 0px]"])
1927
2126
  }, [
1928
- createElementVNode("div", {
1929
- onMousedown: dragMoveHelper,
1930
- class: normalizeClass([{ "border-b-[#eee]": toolBarExpand.value }, "flex flex-row justify-between header text-[14px] font-bold p-[10px 0px] border-b-1"])
2127
+ u[11] || (u[11] = _t('<div class="flex flex-row" data-v-304aacf0><div class="p-[2px_5px] flex items-center pointer-events-none" data-v-304aacf0><svg fill="#aaa" width="20" height="20" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" data-v-304aacf0><path d="M341.333333 298.666667a85.333333 85.333333 0 1 0 0-170.666667 85.333333 85.333333 0 0 0 0 170.666667z m0 298.666666a85.333333 85.333333 0 1 0 0-170.666666 85.333333 85.333333 0 0 0 0 170.666666z m85.333334 213.333334a85.333333 85.333333 0 1 1-170.666667 0 85.333333 85.333333 0 0 1 170.666667 0z m256-512a85.333333 85.333333 0 1 0 0-170.666667 85.333333 85.333333 0 0 0 0 170.666667z m85.333333 213.333333a85.333333 85.333333 0 1 1-170.666667 0 85.333333 85.333333 0 0 1 170.666667 0z m-85.333333 384a85.333333 85.333333 0 1 0 0-170.666667 85.333333 85.333333 0 0 0 0 170.666667z" data-v-304aacf0></path></svg></div><h5 class="flex text-nowrap text-[12px] items-center pointer-events-none" data-v-304aacf0>绘制工具</h5></div>', 1)),
2128
+ I("div", {
2129
+ onMousedown: u[0] || (u[0] = (v) => v.stopPropagation()),
2130
+ onClick: u[1] || (u[1] = (v) => w.value = !w.value),
2131
+ class: "cursor-pointer flex items-center p-[0px_5px]"
1931
2132
  }, [
1932
- _cache[15] || (_cache[15] = createStaticVNode('<div class="flex flex-row" data-v-26d57fb7><div class="p-[2px_5px] flex items-center pointer-events-none" data-v-26d57fb7><svg fill="#aaa" width="20" height="20" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" data-v-26d57fb7><path d="M341.333333 298.666667a85.333333 85.333333 0 1 0 0-170.666667 85.333333 85.333333 0 0 0 0 170.666667z m0 298.666666a85.333333 85.333333 0 1 0 0-170.666666 85.333333 85.333333 0 0 0 0 170.666666z m85.333334 213.333334a85.333333 85.333333 0 1 1-170.666667 0 85.333333 85.333333 0 0 1 170.666667 0z m256-512a85.333333 85.333333 0 1 0 0-170.666667 85.333333 85.333333 0 0 0 0 170.666667z m85.333333 213.333333a85.333333 85.333333 0 1 1-170.666667 0 85.333333 85.333333 0 0 1 170.666667 0z m-85.333333 384a85.333333 85.333333 0 1 0 0-170.666667 85.333333 85.333333 0 0 0 0 170.666667z" data-v-26d57fb7></path></svg></div><h5 class="flex text-[12px] items-center pointer-events-none" data-v-26d57fb7>绘制工具</h5></div>', 1)),
1933
- createElementVNode("div", {
1934
- onMousedown: _cache[0] || (_cache[0] = (e) => e.stopPropagation()),
1935
- onClick: _cache[1] || (_cache[1] = ($event) => toolBarExpand.value = !toolBarExpand.value),
1936
- class: "cursor-pointer flex items-center p-[0px_5px]"
2133
+ (P(), O("svg", {
2134
+ fill: "#666",
2135
+ class: T([{ "rotate-90": w.value }, "transition-all"]),
2136
+ viewBox: "0 0 1024 1024",
2137
+ version: "1.1",
2138
+ xmlns: "http://www.w3.org/2000/svg",
2139
+ width: "12",
2140
+ height: "12"
2141
+ }, u[10] || (u[10] = [
2142
+ I("path", { d: "M315.050667 938.666667a60.757333 60.757333 0 0 0 41.813333-16.298667L750.933333 551.338667a53.418667 53.418667 0 0 0 0-78.677334L356.864 101.632a61.696 61.696 0 0 0-83.541333 0 53.418667 53.418667 0 0 0-0.256 78.677333L625.408 512 273.066667 843.690667a53.418667 53.418667 0 0 0 0 78.677333 60.757333 60.757333 0 0 0 41.984 16.298667z" }, null, -1)
2143
+ ]), 2))
2144
+ ], 32)
2145
+ ], 34),
2146
+ w.value ? (P(), O("div", eo, [
2147
+ I("ul", to, [
2148
+ (P(), O(fe, null, Ie(he, (v) => (P(), O(fe, {
2149
+ key: v.command
1937
2150
  }, [
1938
- (openBlock(), createElementBlock("svg", {
1939
- fill: "#666",
1940
- class: normalizeClass([{ "rotate-90": toolBarExpand.value }, "transition-all"]),
1941
- viewBox: "0 0 1024 1024",
1942
- version: "1.1",
1943
- xmlns: "http://www.w3.org/2000/svg",
1944
- width: "12",
1945
- height: "12"
1946
- }, _cache[14] || (_cache[14] = [
1947
- createElementVNode("path", { d: "M315.050667 938.666667a60.757333 60.757333 0 0 0 41.813333-16.298667L750.933333 551.338667a53.418667 53.418667 0 0 0 0-78.677334L356.864 101.632a61.696 61.696 0 0 0-83.541333 0 53.418667 53.418667 0 0 0-0.256 78.677333L625.408 512 273.066667 843.690667a53.418667 53.418667 0 0 0 0 78.677333 60.757333 60.757333 0 0 0 41.984 16.298667z" }, null, -1)
1948
- ]), 2))
1949
- ], 32)
1950
- ], 34),
1951
- toolBarExpand.value ? (openBlock(), createElementBlock("div", _hoisted_4, [
1952
- createElementVNode("ul", _hoisted_5, [
1953
- (openBlock(), createElementBlock(Fragment, null, renderList(commandList, (item) => {
1954
- return openBlock(), createElementBlock(Fragment, {
1955
- key: item.command
1956
- }, [
1957
- item.show ? (openBlock(), createElementBlock("li", {
1958
- key: 0,
1959
- onClick: ($event) => startCurrentCommandItem(item),
1960
- class: normalizeClass([{ "!bg-[var(--primary-color)] text-[#fff]": currentCommand.value === item.command }, "gap-[20px] text-[12px] hover:bg-[#ddd] transition-all rounded-[6px] p-[5px] flex flex-row items-center justify-between cursor-pointer"])
2151
+ v.show ? (P(), O("li", {
2152
+ key: 0,
2153
+ onClick: (U) => t(v),
2154
+ class: T([{
2155
+ "!bg-[var(--primary-color)] text-[#fff]": b.value === v.command,
2156
+ "!cursor-no-drop": b.value !== v.command && b.value !== "default"
2157
+ }, "gap-[10px] text-[12px] hover:bg-[#ddd] transition-all rounded-[6px] p-[5px] flex flex-row items-center justify-between cursor-pointer"])
2158
+ }, [
2159
+ I("div", oo, [
2160
+ I("div", ao, [
2161
+ I("img", {
2162
+ class: "size-[14px]",
2163
+ src: v.src,
2164
+ alt: "",
2165
+ srcset: ""
2166
+ }, null, 8, so)
2167
+ ]),
2168
+ I("span", io, ie(v.name), 1)
2169
+ ]),
2170
+ b.value === v.command ? (P(), O("div", {
2171
+ key: 0,
2172
+ title: "取消命令(Esc)",
2173
+ class: "active:scale-[0.7] transition-all",
2174
+ onClick: u[2] || (u[2] = (U) => (g(L).cancelCommand(), U.stopPropagation()))
2175
+ }, u[12] || (u[12] = [
2176
+ I("svg", {
2177
+ fill: "#fff",
2178
+ width: "16",
2179
+ height: "16",
2180
+ viewBox: "0 0 1024 1024",
2181
+ version: "1.1",
2182
+ xmlns: "http://www.w3.org/2000/svg"
1961
2183
  }, [
1962
- createElementVNode("div", _hoisted_7, [
1963
- createElementVNode("div", _hoisted_8, [
1964
- createElementVNode("img", {
1965
- class: "size-[14px]",
1966
- src: item.src,
1967
- alt: "",
1968
- srcset: ""
1969
- }, null, 8, _hoisted_9)
1970
- ]),
1971
- createElementVNode("span", null, toDisplayString(item.name), 1)
1972
- ]),
1973
- currentCommand.value === item.command ? (openBlock(), createElementBlock("div", {
1974
- key: 0,
1975
- title: "取消命令(Esc)",
1976
- class: "active:scale-[0.7] transition-all",
1977
- onClick: _cache[2] || (_cache[2] = (e) => (unref(editor).cancelCommand(), e.stopPropagation()))
1978
- }, _cache[16] || (_cache[16] = [
1979
- createElementVNode("svg", {
1980
- fill: "#fff",
1981
- width: "16",
1982
- height: "16",
1983
- viewBox: "0 0 1024 1024",
1984
- version: "1.1",
1985
- xmlns: "http://www.w3.org/2000/svg"
1986
- }, [
1987
- createElementVNode("path", { d: "M511.104 0C228.821333 0 0 228.821333 0 511.104c0 282.282667 228.821333 511.104 511.104 511.104 282.282667 0 511.104-228.842667 511.104-511.104C1022.208 228.821333 793.386667 0 511.104 0zM511.104 898.496c-213.973333 0-387.434667-173.44-387.434667-387.413333 0-213.952 173.44-387.413333 387.434667-387.413333 213.952 0 387.392 173.44 387.392 387.413333C898.496 725.056 725.056 898.496 511.104 898.496z" }),
1988
- createElementVNode("path", { d: "M236.437333 463.914667l549.333333 0 0 96.874667-549.333333 0 0-96.874667Z" })
1989
- ], -1)
1990
- ]))) : item.shortcut ? (openBlock(), createElementBlock("div", _hoisted_10, toDisplayString(item.shortcut), 1)) : createCommentVNode("", true)
1991
- ], 10, _hoisted_6)) : createCommentVNode("", true)
1992
- ], 64);
1993
- }), 64))
1994
- ]),
1995
- createElementVNode("div", _hoisted_11, [
1996
- createVNode(unref(ElCheckbox), {
1997
- size: "small",
1998
- modelValue: showShortcutKey.value,
1999
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => showShortcutKey.value = $event),
2000
- label: "快捷键提示"
2001
- }, null, 8, ["modelValue"]),
2002
- createVNode(unref(ElCheckbox), {
2003
- size: "small",
2004
- modelValue: dxfVisible.value,
2005
- "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => dxfVisible.value = $event),
2006
- label: "dxf"
2007
- }, null, 8, ["modelValue"])
2008
- ]),
2009
- _ctx.permission === "admin" ? (openBlock(), createElementBlock("div", _hoisted_12, [
2010
- createVNode(unref(ElButton), {
2011
- style: { "padding": "5px", "font-size": "10px" },
2012
- size: "small",
2013
- type: "success",
2014
- onClick: selectLocalFile
2015
- }, {
2016
- default: withCtx(() => _cache[17] || (_cache[17] = [
2017
- createTextVNode(" 选择文件 ", -1)
2018
- ])),
2019
- _: 1,
2020
- __: [17]
2021
- }),
2022
- createVNode(unref(ElButton), {
2023
- style: { "padding": "5px", "font-size": "10px" },
2024
- size: "small",
2025
- type: "primary",
2026
- onClick: _cache[5] || (_cache[5] = ($event) => unref(dxfSystem).Dxf.download("test.dxf"))
2027
- }, {
2028
- default: withCtx(() => _cache[18] || (_cache[18] = [
2029
- createTextVNode(" 下载 DXF ", -1)
2030
- ])),
2031
- _: 1,
2032
- __: [18]
2033
- }),
2034
- createVNode(unref(ElButton), {
2035
- style: { "padding": "5px", "font-size": "10px" },
2036
- size: "small",
2037
- type: "primary",
2038
- onClick: _cache[6] || (_cache[6] = ($event) => unref(whiteModel).downloadGltf("test.glb", true))
2039
- }, {
2040
- default: withCtx(() => _cache[19] || (_cache[19] = [
2041
- createTextVNode(" 下载 白膜 ", -1)
2042
- ])),
2043
- _: 1,
2044
- __: [19]
2045
- }),
2046
- createVNode(unref(ElButton), {
2047
- style: { "padding": "5px", "font-size": "10px" },
2048
- size: "small",
2049
- type: "primary",
2050
- onClick: _cache[7] || (_cache[7] = ($event) => console.log(unref(dxfSystem).Dxf.originalData))
2051
- }, {
2052
- default: withCtx(() => _cache[20] || (_cache[20] = [
2053
- createTextVNode(" 打印Json ", -1)
2054
- ])),
2055
- _: 1,
2056
- __: [20]
2057
- })
2058
- ])) : createCommentVNode("", true),
2059
- createVNode(Transition, null, {
2060
- default: withCtx(() => [
2061
- createElementVNode("div", _hoisted_13, [
2062
- selectLineCount.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
2063
- selectLineCount.value == 2 ? (openBlock(), createElementBlock("div", {
2064
- key: 0,
2065
- onClick: _cache[8] || (_cache[8] = ($event) => unref(defaultComponent).mergeLine()),
2066
- title: "合并(Ctrl + G)",
2067
- class: "active:scale-[0.8] transition-all cursor-pointer"
2068
- }, _cache[21] || (_cache[21] = [
2069
- createElementVNode("svg", {
2070
- viewBox: "0 0 1024 1024",
2071
- version: "1.1",
2072
- xmlns: "http://www.w3.org/2000/svg",
2073
- fill: "#555",
2074
- width: "16",
2075
- height: "16"
2076
- }, [
2077
- createElementVNode("path", { d: "M114.176 46.528h618.496c37.312 0.064 67.584 30.336 67.648 67.648v618.56c0 37.248-30.336 67.584-67.648 67.584H114.176A67.776 67.776 0 0 1 46.528 732.8V114.176c0-37.312 30.336-67.648 67.648-67.648z m2.176 686.208l616.32-2.24-2.176-616.32-614.144 2.176v616.32zM907.648 291.2l2.176 616.32H291.264a34.88 34.88 0 1 0 0 69.888h618.56c37.312 0 67.648-30.336 67.648-67.648V291.264a34.88 34.88 0 1 0-69.824 0z" })
2078
- ], -1)
2079
- ]))) : createCommentVNode("", true),
2080
- selectLineCount.value == 2 ? (openBlock(), createElementBlock("div", {
2081
- key: 1,
2082
- onClick: _cache[9] || (_cache[9] = ($event) => unref(defaultComponent).connection()),
2083
- title: "两点连接(Shift + L)",
2084
- class: "active:scale-[0.8] transition-all cursor-pointer"
2085
- }, _cache[22] || (_cache[22] = [
2086
- createElementVNode("svg", {
2087
- viewBox: "0 0 1024 1024",
2088
- version: "1.1",
2089
- xmlns: "http://www.w3.org/2000/svg",
2090
- fill: "#555",
2091
- width: "16",
2092
- height: "16"
2093
- }, [
2094
- createElementVNode("path", { d: "M639.999191 893.597594c-0.999994-54.699654-36.39977-101.099361-85.39946-118.399252-6.39996-2.199986-10.599933-8.299948-10.599933-14.999905V263.801573c0-6.699958 4.199973-12.799919 10.599933-14.999905 49.09969-17.299891 84.399467-63.599598 85.39946-118.399252C641.299183 59.902862 583.399549 0.503237 512.899994 0.00324 441.800444-0.496757 384.000809 57.00288 384.000809 128.002431c0 55.699648 35.599775 103.099349 85.299461 120.699238 6.39996 2.299985 10.699932 8.299948 10.699932 15.099904v496.396864c0 6.799957-4.299973 12.799919-10.699932 15.099904-49.699686 17.599889-85.299461 64.999589-85.299461 120.699238 0 70.999551 57.799635 128.499188 128.899185 127.999191 70.499555-0.499997 128.399189-59.899622 127.099197-130.399176zM448.000404 128.002431c0-35.299777 28.699819-63.999596 63.999596-63.999595s63.999596 28.699819 63.999596 63.999595-28.699819 63.999596-63.999596 63.999596-63.999596-28.699819-63.999596-63.999596z m0 767.995148c0-35.299777 28.699819-63.999596 63.999596-63.999596s63.999596 28.699819 63.999596 63.999596-28.699819 63.999596-63.999596 63.999595-63.999596-28.699819-63.999596-63.999595z" })
2095
- ], -1)
2096
- ]))) : createCommentVNode("", true),
2097
- selectLineCount.value == 2 ? (openBlock(), createElementBlock("div", {
2098
- key: 2,
2099
- onClick: _cache[10] || (_cache[10] = ($event) => unref(defaultComponent).intersectionConnection()),
2100
- title: "延长线交点连接(Ctrl + Shift + L)",
2101
- class: "active:scale-[0.8] transition-all cursor-pointer"
2102
- }, _cache[23] || (_cache[23] = [
2103
- createElementVNode("svg", {
2104
- viewBox: "0 0 1024 1024",
2105
- version: "1.1",
2106
- xmlns: "http://www.w3.org/2000/svg",
2107
- fill: "#555",
2108
- width: "16",
2109
- height: "16"
2110
- }, [
2111
- createElementVNode("path", { d: "M491.80027198 557.44938977c-10.0998647-15.14979706-20.19972802-25.24966037-35.34952507-35.34952507-15.14979706-10.0998647-30.29959271-15.14979706-50.49932211-15.14979704-55.54925309 0-100.99864286 45.44938977-100.99864287 100.99864285 0 15.14979706 5.04993234 35.34952507 15.14979568 50.49932212 10.0998647 15.14979706 20.19972802 30.29959271 35.34952506 35.34952508 15.14979706 10.0998647 35.34952507 15.14979706 50.49932213 15.14979567 55.54925309 0 100.99864286-45.44938977 100.99864286-100.99864287 0-15.14979706-5.04993234-35.34952507-15.14979568-50.49932074z m-85.84884718 100.99864286h-15.14979706c-20.19972802-5.04993234-30.29959271-20.19972802-35.34952507-35.34952507V612.99864286c0-30.29959271 25.24966037-50.49932212 50.49932213-50.49932074h10.09986469c15.14979706 5.04993234 30.29959271 15.14979706 35.34952507 35.34952507v15.14979567c5.04993234 25.24966037-20.19972802 45.44938977-45.44938976 45.44938977z" }),
2112
- createElementVNode("path", { d: "M390.80162774 658.44803263l-40.39945604 40.39945743-227.24694747 222.19701373-35.34952506-35.34952508 227.24694745-227.24694608 40.39945605-40.39945743c5.04993234 20.19972802 20.19972802 35.34952507 35.34952507 40.39945743zM648.34816793 405.9514248l-40.39945742 40.3994574-116.14843853 116.14843992-40.39945742 35.34952507c-5.04993234-20.19972802-20.19972802-30.29959271-35.34952507-35.34952507l40.39945742-40.39945742 116.14843853-111.09850756 35.34952507-35.34952507c10.0998647 15.14979706 20.19972802 25.24966037 40.39945742 30.29959273zM926.09443614 133.25508894L749.34681078 310.00271428l-40.3994574 40.39945742c-5.04993234-20.19972802-15.14979706-35.34952507-30.29959272-40.39945742l35.34952506-40.39945742 176.74762534-176.74762535 35.34952508 40.39945743z" }),
2113
- createElementVNode("path", { d: "M749.34681078 310.00271428c-10.0998647-15.14979706-20.19972802-30.29959271-35.34952506-35.34952506-15.14979706-10.0998647-35.34952507-15.14979706-55.54925309-15.14979706-55.54925309 0-100.99864286 45.44938977-100.99864286 100.99864286 0 20.19972802 5.04993234 40.39945743 15.14979567 55.54925447 10.0998647 15.14979706 20.19972802 25.24966037 35.34952507 35.34952507 15.14979706 10.0998647 30.29959271 15.14979706 50.49932212 15.14979567 55.54925309 0 100.99864286-45.44938977 100.99864286-100.99864286 0-25.24966037-5.04993234-40.39945743-10.09986471-55.54925309z m-90.89877815 95.94871052h-10.0998647c-20.19972802-5.04993234-35.34952507-15.14979706-40.39945742-35.34952509 0-5.04993234-5.04993234-10.0998647-5.04993234-15.14979704 0-30.29959271 25.24966037-50.49932212 50.49932212-50.49932074 5.04993234 0 10.0998647 0 15.14979704 5.04993235 15.14979706 5.04993234 30.29959271 20.19972802 30.29959273 40.39945742v10.09986332c10.0998647 25.24966037-15.14979706 45.44938977-40.39945743 45.44938978z" })
2114
- ], -1)
2115
- ]))) : createCommentVNode("", true),
2116
- hasWindowLine.value ? (openBlock(), createElementBlock("div", {
2117
- key: 3,
2118
- onClick: _cache[11] || (_cache[11] = ($event) => unref(defaultComponent).deleteSelectWindow()),
2119
- title: "清除窗户(Q + Delete)",
2120
- class: "active:scale-[0.8] transition-all cursor-pointer"
2121
- }, _cache[24] || (_cache[24] = [
2122
- createElementVNode("svg", {
2123
- viewBox: "0 0 1024 1024",
2124
- version: "1.1",
2125
- xmlns: "http://www.w3.org/2000/svg",
2126
- fill: "#555",
2127
- width: "16",
2128
- height: "16"
2129
- }, [
2130
- createElementVNode("path", { d: "M220.451548 913.518482V318.145854c0-27.62038 22.505495-50.125874 50.125875-50.125874H865.95005c27.62038 0 50.125874 22.505495 50.125874 50.125874v218.917083h59.332667V318.145854c0-60.355644-49.102897-109.458541-109.458541-109.458541h-39.896104v-99.228772C826.053946 49.102897 776.951049 0 716.595405 0H121.222777C60.867133 0 11.764236 49.102897 11.764236 109.458541V705.854146c0 60.355644 49.102897 109.458541 109.458541 109.458541h39.896104v99.228772c0 60.355644 49.102897 109.458541 109.458542 109.458541h257.790209v-59.332667H269.554446c-26.597403-1.022977-49.102897-23.528472-49.102898-51.148851z m-59.332667-595.372628v436.811189h-39.896104c-27.62038 0-50.125874-22.505495-50.125874-50.125874V109.458541c0-27.62038 22.505495-50.125874 50.125874-50.125874H716.595405c27.62038 0 50.125874 22.505495 50.125874 50.125874v99.228772H269.554446c-59.332667 0-108.435564 49.102897-108.435565 109.458541z" }),
2131
- createElementVNode("path", { d: "M902.777223 854.185814l98.205794-98.205794c15.344655-15.344655 15.344655-40.919081 0-56.263736s-40.919081-15.344655-56.263736 0L846.513487 797.922078 747.284715 699.716284c-15.344655-15.344655-40.919081-15.344655-56.263736 0s-15.344655 40.919081 0 56.263736l98.205794 98.205794-98.205794 98.205794c-15.344655 15.344655-15.344655 40.919081 0 56.263737s40.919081 15.344655 56.263736 0l98.205794-98.205795 98.205795 98.205795c15.344655 15.344655 40.919081 15.344655 56.263736 0s15.344655-40.919081 0-56.263737l-97.182817-98.205794z" })
2132
- ], -1)
2133
- ]))) : createCommentVNode("", true),
2134
- createElementVNode("div", {
2135
- onClick: _cache[12] || (_cache[12] = ($event) => unref(defaultComponent).deleteSelectLine()),
2136
- title: "删除(Delete)",
2137
- class: "active:scale-[0.8] transition-all cursor-pointer"
2138
- }, _cache[25] || (_cache[25] = [
2139
- createElementVNode("svg", {
2140
- viewBox: "0 0 1024 1024",
2141
- version: "1.1",
2142
- xmlns: "http://www.w3.org/2000/svg",
2143
- fill: "#555",
2144
- width: "16",
2145
- height: "16"
2146
- }, [
2147
- createElementVNode("path", { d: "M909.050991 169.476903l-217.554898 0 0-31.346939c0-39.5866-32.205493-71.792093-71.793116-71.792093L408.15591 66.337871c-39.5866 0-71.792093 32.205493-71.792093 71.792093l0 31.346939L113.349581 169.476903c-11.013845 0-19.942191 8.940626-19.942191 19.954471s8.928347 19.954471 19.942191 19.954471l84.264149 0 0 640.687918c0 60.479443 49.203632 109.683075 109.683075 109.683075l416.474366 0c60.479443 0 109.683075-49.203632 109.683075-109.683075L833.454246 209.385844l75.595722 0c11.012821 0 19.942191-8.940626 19.942191-19.954471S920.063813 169.476903 909.050991 169.476903zM376.2482 138.130987c0-17.593703 14.314007-31.907711 31.907711-31.907711l211.547067 0c17.593703 0 31.907711 14.314007 31.907711 31.907711l0 31.346939L376.2482 169.477926 376.2482 138.130987zM793.569864 850.074785c0 38.486546-31.312146 69.798692-69.798692 69.798692L307.297828 919.873478c-38.486546 0-69.798692-31.312146-69.798692-69.798692L237.499136 211.042577l556.070728 0L793.569864 850.074785zM510.662539 861.276918c11.012821 0 19.954471-8.92937 19.954471-19.942191L530.61701 294.912753c0-11.013845-8.94165-19.942191-19.954471-19.942191s-19.954471 8.928347-19.954471 19.942191L490.708068 841.334727C490.708068 852.347548 499.649717 861.276918 510.662539 861.276918zM374.562814 801.449321c11.012821 0 19.954471-8.92937 19.954471-19.942191L394.517285 354.74035c0-11.013845-8.94165-19.942191-19.954471-19.942191s-19.954471 8.928347-19.954471 19.942191l0 426.76678C354.608344 792.519951 363.549993 801.449321 374.562814 801.449321zM649.832182 801.449321c11.012821 0 19.954471-8.92937 19.954471-19.942191L669.786653 354.74035c0-11.013845-8.94165-19.942191-19.954471-19.942191s-19.954471 8.928347-19.954471 19.942191l0 426.76678C629.877711 792.519951 638.81936 801.449321 649.832182 801.449321z" })
2148
- ], -1)
2149
- ]))
2150
- ], 64)) : (openBlock(), createElementBlock("div", _hoisted_14, " 无可用操作 "))
2151
- ])
2152
- ]),
2153
- _: 1
2184
+ I("path", { d: "M511.104 0C228.821333 0 0 228.821333 0 511.104c0 282.282667 228.821333 511.104 511.104 511.104 282.282667 0 511.104-228.842667 511.104-511.104C1022.208 228.821333 793.386667 0 511.104 0zM511.104 898.496c-213.973333 0-387.434667-173.44-387.434667-387.413333 0-213.952 173.44-387.413333 387.434667-387.413333 213.952 0 387.392 173.44 387.392 387.413333C898.496 725.056 725.056 898.496 511.104 898.496z" }),
2185
+ I("path", { d: "M236.437333 463.914667l549.333333 0 0 96.874667-549.333333 0 0-96.874667Z" })
2186
+ ], -1)
2187
+ ]))) : v.shortcut ? (P(), O("div", ro, ie(v.shortcut), 1)) : Z("", !0)
2188
+ ], 10, no)) : Z("", !0)
2189
+ ], 64))), 64))
2190
+ ]),
2191
+ I("div", lo, [
2192
+ F(g(Ke), {
2193
+ size: "small",
2194
+ modelValue: _.value,
2195
+ "onUpdate:modelValue": u[3] || (u[3] = (v) => _.value = v),
2196
+ label: "快捷键提示"
2197
+ }, null, 8, ["modelValue"]),
2198
+ F(g(Ke), {
2199
+ size: "small",
2200
+ modelValue: l.value,
2201
+ "onUpdate:modelValue": u[4] || (u[4] = (v) => l.value = v),
2202
+ label: "dxf"
2203
+ }, null, 8, ["modelValue"])
2204
+ ]),
2205
+ C.permission === "admin" ? (P(), O("div", co, [
2206
+ F(g(ge), {
2207
+ style: { padding: "5px", "font-size": "10px" },
2208
+ size: "small",
2209
+ type: "success",
2210
+ onClick: o
2211
+ }, {
2212
+ default: j(() => u[13] || (u[13] = [
2213
+ se(" 选择文件 ", -1)
2214
+ ])),
2215
+ _: 1,
2216
+ __: [13]
2217
+ }),
2218
+ F(g(ge), {
2219
+ style: { padding: "5px", "font-size": "10px" },
2220
+ size: "small",
2221
+ type: "primary",
2222
+ onClick: u[5] || (u[5] = (v) => console.log(g(f).Dxf.originalData))
2223
+ }, {
2224
+ default: j(() => u[14] || (u[14] = [
2225
+ se(" 打印Json ", -1)
2226
+ ])),
2227
+ _: 1,
2228
+ __: [14]
2229
+ }),
2230
+ F(g(ge), {
2231
+ style: { padding: "5px", "font-size": "10px" },
2232
+ size: "small",
2233
+ type: "primary",
2234
+ onClick: u[6] || (u[6] = (v) => g(f).Dxf.download("test.dxf"))
2235
+ }, {
2236
+ default: j(() => u[15] || (u[15] = [
2237
+ se(" 下载DXF ", -1)
2238
+ ])),
2239
+ _: 1,
2240
+ __: [15]
2241
+ }),
2242
+ F(g(ge), {
2243
+ style: { padding: "5px", "font-size": "10px" },
2244
+ size: "small",
2245
+ type: "primary",
2246
+ onClick: u[7] || (u[7] = (v) => g(f).AngleCorrectionDxf.downloadImage("dxf.jpg"))
2247
+ }, {
2248
+ default: j(() => u[16] || (u[16] = [
2249
+ se(" 下载JPG ", -1)
2250
+ ])),
2251
+ _: 1,
2252
+ __: [16]
2253
+ }),
2254
+ F(g(ge), {
2255
+ style: { padding: "5px", "font-size": "10px" },
2256
+ size: "small",
2257
+ type: "primary",
2258
+ onClick: u[8] || (u[8] = (v) => g(G).downloadGltf("test.glb", !0))
2259
+ }, {
2260
+ default: j(() => u[17] || (u[17] = [
2261
+ se(" 下载白膜 ", -1)
2262
+ ])),
2263
+ _: 1,
2264
+ __: [17]
2154
2265
  })
2155
- ])) : createCommentVNode("", true)
2156
- ], 38)
2157
- ], 512);
2158
- };
2159
- }
2160
- });
2161
- const _export_sfc = (sfc, props) => {
2162
- const target = sfc.__vccOpts || sfc;
2163
- for (const [key, val] of props) {
2164
- target[key] = val;
2165
- }
2166
- return target;
2167
- };
2168
- const EditorTool = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-26d57fb7"]]);
2169
- let Editor$1 = class Editor extends Component {
2266
+ ])) : Z("", !0),
2267
+ F(xe, null, {
2268
+ default: j(() => [
2269
+ I("div", mo, [
2270
+ F(Nt, null, {
2271
+ default: j(() => [
2272
+ (P(), O(fe, null, Ie(dt, (v) => I("div", {
2273
+ onClick: (U) => v.show.value && b.value === "default" && (v.action ? v.action() : g(L).commandManager.start(v.command, [...g(A).selectLines])),
2274
+ title: `${v.name}(${v.shortcut})`,
2275
+ class: T(["size-[20px] flex justify-center items-center relative overflow-hidden active:scale-[0.8] border-1 border-[#ccc] rounded-[4px] transition-all cursor-pointer", {
2276
+ "opacity-30 bg-[#ccc] !cursor-no-drop active:!scale-[1]": !v.show.value || b.value !== "default",
2277
+ [v.class ?? ""]: !0
2278
+ }]),
2279
+ key: v.command
2280
+ }, [
2281
+ I("img", {
2282
+ class: "size-[14px]",
2283
+ src: v.src
2284
+ }, null, 8, uo)
2285
+ ], 10, ho)), 64))
2286
+ ]),
2287
+ _: 1
2288
+ })
2289
+ ])
2290
+ ]),
2291
+ _: 1
2292
+ })
2293
+ ])) : Z("", !0)
2294
+ ], 38)
2295
+ ], 512));
2296
+ }
2297
+ }), go = (i, e) => {
2298
+ const t = i.__vccOpts || i;
2299
+ for (const [n, o] of e)
2300
+ t[n] = o;
2301
+ return t;
2302
+ }, vo = /* @__PURE__ */ go(po, [["__scopeId", "data-v-304aacf0"]]);
2303
+ let rt = class extends Ee {
2170
2304
  static name = "Editor";
2171
- container = new THREE.Group();
2305
+ container = new m.Group();
2172
2306
  get renderer() {
2173
2307
  return this.parent?.findComponentByName("Renderer");
2174
2308
  }
@@ -2190,32 +2324,23 @@ let Editor$1 = class Editor extends Component {
2190
2324
  get domContainer() {
2191
2325
  return this.parent?.findComponentByName("DomContainer");
2192
2326
  }
2193
- commandManager = new CommandManager();
2194
- plane = new THREE.Mesh(new THREE.PlaneGeometry(2e3, 2e3, 2, 2));
2327
+ commandManager = new vn();
2328
+ plane = new m.Mesh(new m.PlaneGeometry(2e3, 2e3, 2, 2));
2195
2329
  app;
2196
2330
  domElement = document.createElement("div");
2197
2331
  viewPermission;
2198
- constructor(viewPermission) {
2199
- super();
2200
- this.viewPermission = viewPermission;
2332
+ constructor(e) {
2333
+ super(), this.viewPermission = e;
2201
2334
  }
2202
2335
  onAddFromParent() {
2203
2336
  setTimeout(() => this.openEdit(), 10);
2204
- const grid = new THREE.GridHelper(200, 100, 6710886, 4473924);
2205
- grid.rotation.x = Math.PI * 0.5;
2206
- grid.position.z = -0.01;
2207
- this.container.add(grid);
2208
- this.container.add(this.plane);
2209
- this.plane.visible = false;
2210
- const cancelEvent = this.addEventListener("update", () => {
2211
- if (this.domContainer.domElement.parentElement) {
2212
- this.domContainer.domElement.parentElement.appendChild(this.domElement);
2213
- cancelEvent();
2214
- }
2337
+ const e = new m.GridHelper(200, 100, 6710886, 4473924);
2338
+ e.rotation.x = Math.PI * 0.5, e.position.z = -0.01, this.container.add(e), this.container.add(this.plane), this.plane.visible = !1;
2339
+ const t = this.addEventListener("update", () => {
2340
+ this.domContainer.domElement.parentElement && (this.domContainer.domElement.parentElement.appendChild(this.domElement), t());
2215
2341
  });
2216
2342
  setTimeout(() => {
2217
- this.app = createApp(EditorTool, { dxfSystem: this.parent, permission: this.viewPermission });
2218
- this.app.mount(this.domElement);
2343
+ this.app = Ot(vo, { dxfSystem: this.parent, permission: this.viewPermission }), this.app.mount(this.domElement);
2219
2344
  });
2220
2345
  }
2221
2346
  /**
@@ -2226,172 +2351,141 @@ let Editor$1 = class Editor extends Component {
2226
2351
  type: "cancelCommand"
2227
2352
  });
2228
2353
  }
2229
- coords = new THREE.Vector2();
2230
- pointerPosition = new THREE.Vector2();
2354
+ coords = new m.Vector2();
2355
+ pointerPosition = new m.Vector2();
2231
2356
  _exitEditCallBack;
2232
2357
  /**
2233
2358
  * 打开编辑器
2234
2359
  */
2235
2360
  openEdit() {
2236
- const renderer = this.renderer, domEventRegister = this.domEventRegister, dxf = this.dxf, orbitControls = renderer.orbitControls, camera = renderer.camera, center = dxf.box.center, cameraPosition = renderer.camera.position.clone(), target = orbitControls?.target?.clone(), size = new THREE.Vector2(), raycaster = new THREE.Raycaster(), coords = this.coords, pointerPosition = this.pointerPosition;
2237
- this.container.position.z = dxf.originalZAverage;
2238
- renderer.scene.add(this.container);
2239
- camera.position.set(center.x, center.y, 5);
2240
- if (orbitControls) {
2241
- orbitControls.target.set(center.x, center.y, 0);
2242
- orbitControls.enableRotate = false;
2243
- }
2244
- const mousemoveFun = () => {
2245
- renderer.renderer.getSize(size);
2246
- const x = domEventRegister.pointer.x / size.x * 2 - 1;
2247
- const y = -(domEventRegister.pointer.y / size.y * 2 - 1);
2248
- coords.set(x, y);
2249
- raycaster.setFromCamera(coords, renderer.camera);
2250
- const intersections = raycaster.intersectObject(this.plane);
2251
- if (intersections.length) {
2252
- pointerPosition.copy(intersections[0].point);
2253
- this.dispatchEvent({
2254
- type: "pointerPositionChange",
2255
- position: pointerPosition
2256
- });
2257
- }
2361
+ const e = this.renderer, t = this.domEventRegister, n = this.dxf, o = e.orbitControls, a = e.camera, s = n.box.center, r = e.camera.position.clone(), l = o?.target?.clone(), d = new m.Vector2(), c = new m.Raycaster(), h = this.coords, y = this.pointerPosition;
2362
+ this.container.position.z = n.originalZAverage, e.scene.add(this.container), o && (a.position.set(s.x, s.y, 15), o.target.set(s.x, s.y, 0), o.enableRotate = !1);
2363
+ const w = () => {
2364
+ e.renderer.getSize(d);
2365
+ const b = t.pointer.x / d.x * 2 - 1, f = -(t.pointer.y / d.y * 2 - 1);
2366
+ h.set(b, f), c.setFromCamera(h, e.camera.children.length ? e.camera.children[0] : e.camera);
2367
+ const M = c.intersectObject(this.plane);
2368
+ M.length && (y.copy(M[0].point), this.dispatchEvent({
2369
+ type: "pointerPositionChange",
2370
+ position: y
2371
+ }));
2258
2372
  };
2259
- domEventRegister.addEventListener("mousemove", mousemoveFun);
2260
- this.commandManager.disabled = false;
2261
- this.commandManager.start("default");
2262
- this._exitEditCallBack = () => {
2263
- domEventRegister.removeEventListener("mousemove", mousemoveFun);
2264
- camera.position.copy(cameraPosition);
2265
- if (orbitControls) {
2266
- orbitControls.enableRotate = true;
2267
- orbitControls.target.copy(target);
2268
- }
2373
+ t.addEventListener("mousemove", w), this.commandManager.disabled = !1, this.commandManager.start("default"), this._exitEditCallBack = () => {
2374
+ t.removeEventListener("mousemove", w), o && (a.position.copy(r), o.enableRotate = !0, o.target.copy(l));
2269
2375
  };
2270
2376
  }
2271
2377
  /**
2272
2378
  * 退出编辑
2273
2379
  */
2274
2380
  exitEdit() {
2275
- if (typeof this._exitEditCallBack === "function") {
2276
- this._exitEditCallBack();
2277
- this._exitEditCallBack = void 0;
2278
- this.commandManager.disabled = true;
2279
- }
2381
+ typeof this._exitEditCallBack == "function" && (this._exitEditCallBack(), this._exitEditCallBack = void 0, this.commandManager.disabled = !0);
2280
2382
  }
2281
2383
  destroy() {
2282
- super.destroy();
2283
- this.exitEdit();
2284
- this.renderer.scene.remove(this.container);
2285
- this.domElement.remove();
2286
- this.app?.unmount();
2384
+ super.destroy(), this.exitEdit(), this.renderer.scene.remove(this.container), this.domElement.remove(), this.app?.unmount();
2287
2385
  }
2288
2386
  };
2289
- class PointDrag extends CommandFlowComponent {
2387
+ class fo extends V {
2290
2388
  static name = "PointDrag";
2291
- container = new THREE.Group();
2389
+ container = new m.Group();
2292
2390
  interruptKeys = ["escape"];
2293
2391
  shortcutKeys = ["control", "p"];
2294
2392
  commandName = "point";
2295
- onAddFromParent(parent) {
2296
- super.onAddFromParent(parent);
2297
- this.editor.container.add(this.container);
2298
- this.container.position.z = 1e-3;
2299
- const commandFlow = this.commandManager.addCommandFlow(this.commandName).add(this.createInterrupt()).add(this.createCursor("crosshair")).add(this.selectPoint.bind(this)).add(this.drag.bind(this));
2300
- commandFlow.addEventListener("finally", this.createFinally());
2301
- commandFlow.addEventListener("completed", (e) => this.completed(e.data));
2302
- this.eventInput.addKeyCombination(this.commandName, this.shortcutKeys);
2303
- this.eventInput.addEventListener("codeChange", async () => this.eventInput.isKeyCombination(this.commandName) && await this.commandManager.start(this.commandName));
2304
- this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
2393
+ onAddFromParent(e) {
2394
+ super.onAddFromParent(e), this.editor.container.add(this.container), this.container.position.z = 1e-3;
2395
+ const t = this.commandManager.addCommandFlow(this.commandName).add(this.createInterrupt()).add(this.createCursor("crosshair")).add(this.selectPoint.bind(this)).add(this.drag.bind(this)).addRollback(this.rollback.bind(this)).addRevokeRollback(this.revokeRollback.bind(this));
2396
+ t.addEventListener("finally", this.createFinally()), t.addEventListener("completed", (n) => this.completed(n.data)), this.eventInput.addKeyCombination(this.commandName, this.shortcutKeys), this.eventInput.addEventListener("codeChange", async () => this.eventInput.isKeyCombination(this.commandName) && await this.commandManager.start(this.commandName)), this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
2305
2397
  }
2306
2398
  /** 选择开始点
2307
2399
  * @param next
2308
2400
  */
2309
- selectPoint(next) {
2310
- let currentPoint = null, circle = new THREE.Mesh(new THREE.SphereGeometry(0.05), new THREE.MeshBasicMaterial({ color: 16711935 })), currentLine = null;
2401
+ selectPoint(e) {
2402
+ let t = null, n = new m.Mesh(new m.SphereGeometry(0.05), new m.MeshBasicMaterial({ color: 16711935 })), o = null;
2311
2403
  this.addEventRecord("selectPointStart").add(this.editor.addEventListener("pointerPositionChange", () => {
2312
- const { point, line: line2, find, mode } = this.editor.renderManager.adsorption();
2313
- if (find && mode === "point") {
2314
- this.domElement.style.cursor = "none";
2315
- circle.position.copy(point);
2316
- currentLine = line2;
2317
- currentPoint = point.clone();
2318
- this.container.add(circle);
2319
- } else {
2320
- this.domElement.style.cursor = "no-drop";
2321
- currentPoint = null;
2322
- circle.removeFromParent();
2323
- }
2404
+ const { point: a, line: s, find: r, mode: l } = this.editor.renderManager.adsorption();
2405
+ this.dispatchEvent({ type: "pointerMove", point: a }), r && l === "point" ? (this.domElement.style.cursor = "none", n.position.copy(a), o = s, t = a.clone(), this.container.add(n)) : (this.domElement.style.cursor = "no-drop", t = null, n.removeFromParent());
2324
2406
  })).add(this.eventInput.addEventListener("codeChange", () => {
2325
- if (this.eventInput.isKeyDown("mouse_0") && currentPoint) {
2326
- this.canceEventRecord("selectPointStart");
2327
- circle.material.color.set(65280);
2328
- next({ point: currentPoint, line: currentLine });
2329
- }
2330
- }));
2331
- this.addEventRecord("clear").add(() => circle.removeFromParent());
2407
+ this.eventInput.isKeyDown("mouse_0") && t && (this.canceEventRecord("selectPointStart"), n.material.color.set(65280), e({ point: t, line: o }));
2408
+ })), this.addEventRecord("clear").add(() => n.removeFromParent());
2332
2409
  }
2333
2410
  /** 拖拽点
2334
2411
  * @description 拖拽点到指定位置
2335
2412
  * @param next
2336
2413
  * @param param1
2337
2414
  */
2338
- drag(next, { point, line: line2 }) {
2415
+ drag(e, { point: t, line: n }) {
2339
2416
  this.domElement.style.cursor = "crosshair";
2340
- const mode = line2.start.equal(Point.from(point)) ? "start" : "end", start = mode == "start" ? new THREE.Vector3(line2.end.x, line2.end.y, 0) : new THREE.Vector3(line2.start.x, line2.start.y, 0), end = point.clone(), lines = new Lines([start, end], 16711935), circle = new THREE.Mesh(new THREE.SphereGeometry(0.03), new THREE.MeshBasicMaterial({ color: 16711935 }));
2341
- this.container.add(lines);
2342
- this.addEventRecord("clear").add(this.editor.addEventListener("pointerPositionChange", () => {
2343
- let { point: point2, find } = this.editor.renderManager.adsorption(), cursor = "none";
2344
- if (point2) {
2345
- if (this.eventInput.isKeyDown("shift")) {
2346
- const p = line2.projectPoint(Point.from(point2), false);
2347
- point2.set(p?.x ?? point2.x, p?.y ?? point2.y, 0);
2348
- find = true;
2349
- cursor = "crosshair";
2417
+ const o = n.start.equal(W.from(t)) ? "start" : "end", a = o == "start" ? new m.Vector3(n.end.x, n.end.y, 0) : new m.Vector3(n.start.x, n.start.y, 0), s = t.clone(), r = new we([a, s], 16711935), l = new m.Mesh(new m.SphereGeometry(0.03), new m.MeshBasicMaterial({ color: 16711935 }));
2418
+ this.container.add(r), this.addEventRecord("clear").add(this.editor.addEventListener("pointerPositionChange", () => {
2419
+ let { point: d, find: c } = this.editor.renderManager.adsorption(), h = "none";
2420
+ if (d) {
2421
+ if (this.dispatchEvent({ type: "pointerMove", point: d }), this.eventInput.isKeyDown("shift")) {
2422
+ const y = n.projectPoint(W.from(d), !1);
2423
+ d.set(y?.x ?? d.x, y?.y ?? d.y, 0), c = !0, h = "crosshair";
2350
2424
  }
2351
- if (find) {
2352
- circle.position.copy(point2);
2353
- this.container.add(circle);
2354
- } else {
2355
- circle.removeFromParent();
2356
- cursor = "crosshair";
2357
- }
2358
- end.copy(point2);
2359
- lines.setPoint(start, end);
2360
- this.domElement.style.cursor = cursor;
2425
+ c ? (l.position.copy(d), this.container.add(l)) : (l.removeFromParent(), h = "crosshair"), s.copy(d), r.setPoint(a, s), this.domElement.style.cursor = h;
2361
2426
  }
2362
2427
  })).add(this.eventInput.addEventListener("codeChange", () => {
2363
- if (this.eventInput.isKeyDown("mouse_0")) {
2364
- this.canceEventRecord("selectPointStart");
2365
- next({ point: end, line: line2, mode });
2366
- }
2367
- })).add(() => circle.removeFromParent()).add(() => lines.removeFromParent());
2428
+ this.eventInput.isKeyDown("mouse_0") && (this.canceEventRecord("selectPointStart"), e({ point: s, oldPoint: o === "end" ? n.end.clone() : n.start.clone(), line: n, mode: o }));
2429
+ })).add(() => l.removeFromParent()).add(() => r.removeFromParent());
2368
2430
  }
2369
2431
  /** 执行完成
2370
2432
  */
2371
- completed(data) {
2372
- const { line: line2, point, mode } = data;
2373
- this.renderManager.removeLine(line2);
2374
- if (mode === "end") line2.end.set(point.x, point.y);
2375
- else if (mode === "start") line2.start.set(point.x, point.y);
2376
- this.renderManager.addLine(line2);
2377
- this.renderManager.draw();
2433
+ completed(e) {
2434
+ const { line: t, point: n, mode: o } = e;
2435
+ this.renderManager.removeLine(t), o === "end" ? t.end.set(n.x, n.y) : o === "start" && t.start.set(n.x, n.y), this.renderManager.addLine(t), this.renderManager.draw();
2436
+ }
2437
+ /** 回滚操作
2438
+ * @param data
2439
+ */
2440
+ rollback(e) {
2441
+ const { line: t, oldPoint: n, mode: o } = e;
2442
+ return o === "end" ? t.end.set(n.x, n.y) : o === "start" && t.start.set(n.x, n.y), this.renderManager.addLine(t), this.renderManager.draw(), e;
2443
+ }
2444
+ /** 撤回回滚
2445
+ * @param lines
2446
+ * @returns
2447
+ */
2448
+ revokeRollback(e) {
2449
+ return this.completed(e), e;
2450
+ }
2451
+ }
2452
+ class re extends V {
2453
+ static name = "VerticalReferenceLine";
2454
+ shortcutKeys = ["v"];
2455
+ static commandName = "VerticalReferenceLine";
2456
+ onAddFromParent(e) {
2457
+ super.onAddFromParent(e);
2458
+ const t = this.commandManager.addCommandFlow(re.commandName).add(this.createInterrupt()).add(this.constraint.bind(this)).add(this.verticalReferenceLine.bind(this));
2459
+ t.writeOperationList = !1, t.addEventListener("finally", this.createFinally()), this.eventInput.addKeyCombination(re.commandName, this.shortcutKeys), this.eventInput.addEventListener("codeChange", async () => {
2460
+ this.eventInput.isKeyCombination(re.commandName) && await this.commandManager.start(re.commandName, [...this.default.selectLines]);
2461
+ }), this.eventInput.addCancelDefaultBehavior(() => this.eventInput.isOnlyKeyDowns(this.shortcutKeys));
2462
+ }
2463
+ /**
2464
+ * 进入命令约束
2465
+ */
2466
+ constraint(e, t) {
2467
+ Array.isArray(t) ? t.length !== 1 ? (D({ message: "请选择一条线段", type: "warning" }), this.cancel()) : e(t) : (D({ message: "进入命令失败", type: "warning" }), this.cancel());
2468
+ }
2469
+ /**
2470
+ *
2471
+ * @param next
2472
+ * @param selectLines
2473
+ */
2474
+ verticalReferenceLine(e, t) {
2475
+ this.renderManager.lines.forEach((n) => {
2476
+ delete n.userData.isVerticalReferenceLine;
2477
+ }), t[0].userData.isVerticalReferenceLine = !0, e(), this.renderManager.draw();
2378
2478
  }
2379
2479
  }
2380
- function Editor_(dxfSystem, option = {}) {
2381
- dxfSystem.addComponent(new Editor$1(option.viewPermission));
2382
- dxfSystem.addComponent(new RenderManager());
2383
- dxfSystem.addComponent(new Default());
2384
- dxfSystem.addComponent(new DrawLine());
2385
- dxfSystem.addComponent(new DrawDoorLine());
2386
- dxfSystem.addComponent(new DrawWindow());
2387
- dxfSystem.addComponent(new PointDrag());
2480
+ function We(i, e = {}) {
2481
+ i.addComponent(new rt(e.viewPermission)), i.addComponent(new qn()), i.addComponent(new Be()), i.addComponent(new pn()), i.addComponent(new Un()), i.addComponent(new Zn()), i.addComponent(new fo()), i.addComponent(new $()), i.addComponent(new X()), i.addComponent(new de()), i.addComponent(new ee()), i.addComponent(new te()), i.addComponent(new ne()), i.addComponent(new oe()), i.addComponent(new ae()), i.addComponent(new re());
2388
2482
  }
2389
- const Editor2 = Object.assign(Editor_, {
2390
- create(option = {}) {
2391
- return (dxfSystem) => Editor_(dxfSystem, option);
2483
+ const Lo = Object.assign(We, {
2484
+ create(i = {}) {
2485
+ return (e) => We(e, i);
2392
2486
  }
2393
2487
  });
2394
2488
  export {
2395
- Editor2 as Editor,
2396
- Editor_
2489
+ Lo as Editor,
2490
+ We as Editor_
2397
2491
  };