printbench 0.4.4 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/printbench.js +68 -63
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -85,7 +85,7 @@ function onExported(payload: PrintBenchExportedPayload) {
|
|
|
85
85
|
| `selectedPartIds` | `string[]` | — | 受控选中。传入后画布点击只触发 `select-part`,由宿主回写 |
|
|
86
86
|
| `partColors` | `Record<string, string>` | — | 受控零件色,`#RRGGBB`,key 为零件 `id` |
|
|
87
87
|
| `diagnosisZIndex` | `number` | `100` | 诊断浮层 `z-index`。也可在外层设 CSS 变量 `--printbench-diagnosis-z` |
|
|
88
|
-
| `features` | `{ numeric?, primitives?, split?, drafts?, extras?, importUnit
|
|
88
|
+
| `features` | `{ numeric?, primitives?, split?, drafts?, extras?, importUnit?, hideEmpty?, hideStatusBar?, hidePanelModeToggle?, … }` | 能力项默认 `false` | 进阶能力。缺省精简:左栏仅导入 / 零件 / 导出 / 快照。未开 `drafts` 时不读不写自动草稿。未开 `importUnit` 时导入不弹单位确认。`hideEmpty` / `hideStatusBar` / `hidePanelModeToggle` 为 `true` 时分别隐藏空画布提示、底栏状态条、零件栏悬浮/通栏切换按钮。 |
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
嵌入预览示例(宿主列表 + 色板 + 自定义导出):
|
package/dist/printbench.js
CHANGED
|
@@ -3303,7 +3303,7 @@ function mI(g, B) {
|
|
|
3303
3303
|
o !== w && (r[o] = w);
|
|
3304
3304
|
};
|
|
3305
3305
|
for (let b = 0; b < C; b++) {
|
|
3306
|
-
const d = B[b * 3], o = B[b * 3 + 1], w = B[b * 3 + 2], M = g[d * 3], l = g[d * 3 + 1], L = g[d * 3 + 2], m = g[o * 3], H = g[o * 3 + 1], v = g[o * 3 + 2], V = g[w * 3], $ = g[w * 3 + 1], DA = g[w * 3 + 2],
|
|
3306
|
+
const d = B[b * 3], o = B[b * 3 + 1], w = B[b * 3 + 2], M = g[d * 3], l = g[d * 3 + 1], L = g[d * 3 + 2], m = g[o * 3], H = g[o * 3 + 1], v = g[o * 3 + 2], V = g[w * 3], $ = g[w * 3 + 1], DA = g[w * 3 + 2], gA = m - M, sA = H - l, NA = v - L, EI = V - M, yA = $ - l, CA = DA - L, UA = sA * CA - NA * yA, QA = NA * EI - gA * CA, YA = gA * yA - sA * EI, vA = 0.5 * Math.hypot(UA, QA, YA);
|
|
3307
3307
|
vA < 1e-12 && a++, D += vA, Q += M * UA + l * QA + L * YA;
|
|
3308
3308
|
for (const [iI, HA] of [[d, o], [o, w], [w, d]]) {
|
|
3309
3309
|
const XA = rQ(iI, HA);
|
|
@@ -3368,7 +3368,7 @@ const VA = Ug("printbench-project", () => {
|
|
|
3368
3368
|
const y = KA(i, t), h = H.value[y]?.trim();
|
|
3369
3369
|
return h || $(i, t);
|
|
3370
3370
|
})
|
|
3371
|
-
),
|
|
3371
|
+
), gA = AA(
|
|
3372
3372
|
() => A.value.map((i) => {
|
|
3373
3373
|
if (i.kind === "primary")
|
|
3374
3374
|
return C.value.find((t) => t.id === i.meshId)?.appearance;
|
|
@@ -3379,14 +3379,14 @@ const VA = Ug("printbench-project", () => {
|
|
|
3379
3379
|
index: t,
|
|
3380
3380
|
name: DA.value[t] ?? `零件 ${t + 1}`
|
|
3381
3381
|
}))
|
|
3382
|
-
), EI = AA(() => A.value.map((i, t) =>
|
|
3382
|
+
), EI = AA(() => A.value.map((i, t) => CA(t))), yA = AA(() => {
|
|
3383
3383
|
const i = {};
|
|
3384
3384
|
return A.value.forEach((t, y) => {
|
|
3385
|
-
const h =
|
|
3385
|
+
const h = CA(y);
|
|
3386
3386
|
h && (i[KA(t, y)] = IC(h));
|
|
3387
3387
|
}), i;
|
|
3388
3388
|
});
|
|
3389
|
-
function
|
|
3389
|
+
function CA(i) {
|
|
3390
3390
|
const t = A.value[i];
|
|
3391
3391
|
if (!t) return;
|
|
3392
3392
|
const y = KA(t, i), h = C.value.find((u) => u.id === y);
|
|
@@ -3479,7 +3479,7 @@ const VA = Ug("printbench-project", () => {
|
|
|
3479
3479
|
}
|
|
3480
3480
|
};
|
|
3481
3481
|
}
|
|
3482
|
-
function
|
|
3482
|
+
function IA() {
|
|
3483
3483
|
a.value = {
|
|
3484
3484
|
meshes: C.value.map(cI),
|
|
3485
3485
|
roots: nA(A.value)
|
|
@@ -3544,7 +3544,7 @@ const VA = Ug("printbench-project", () => {
|
|
|
3544
3544
|
kind: "primary",
|
|
3545
3545
|
meshId: j.id,
|
|
3546
3546
|
transform: [...xA]
|
|
3547
|
-
})), Q.value = [nA(A.value)], D.value = 0, s.value = -1, n.value = [], o.value = [],
|
|
3547
|
+
})), Q.value = [nA(A.value)], D.value = 0, s.value = -1, n.value = [], o.value = [], IA(), await P(), $A();
|
|
3548
3548
|
}
|
|
3549
3549
|
async function WI(i, t) {
|
|
3550
3550
|
const y = oA();
|
|
@@ -3556,7 +3556,7 @@ const VA = Ug("printbench-project", () => {
|
|
|
3556
3556
|
kind: "primary",
|
|
3557
3557
|
meshId: j.id,
|
|
3558
3558
|
transform: [...xA]
|
|
3559
|
-
})), Q.value = [nA(A.value)], D.value = 0, s.value = -1, n.value = [], o.value = [],
|
|
3559
|
+
})), Q.value = [nA(A.value)], D.value = 0, s.value = -1, n.value = [], o.value = [], IA(), await P(), $A();
|
|
3560
3560
|
} catch (h) {
|
|
3561
3561
|
throw y.toast("fail", h instanceof Error ? h.message : "导入失败"), A.value.length && P(), h;
|
|
3562
3562
|
} finally {
|
|
@@ -3713,13 +3713,13 @@ const VA = Ug("printbench-project", () => {
|
|
|
3713
3713
|
op: y,
|
|
3714
3714
|
a: PA(A.value[i]),
|
|
3715
3715
|
b: PA(A.value[t])
|
|
3716
|
-
}, u =
|
|
3716
|
+
}, u = CA(i), q = A.value.filter((j, X) => X !== i && X !== t);
|
|
3717
3717
|
q.push(h), A.value = q, s.value = q.length - 1, u && (m.value = { ...m.value, [h.id]: [u[0], u[1], u[2]] }), await P();
|
|
3718
3718
|
}
|
|
3719
3719
|
async function UI(i) {
|
|
3720
3720
|
if (i.length < 2) return;
|
|
3721
3721
|
eA();
|
|
3722
|
-
const t = i.map((q) => PA(A.value[q])), y = A.value.filter((q, j) => !i.includes(j)), h =
|
|
3722
|
+
const t = i.map((q) => PA(A.value[q])), y = A.value.filter((q, j) => !i.includes(j)), h = CA(i[0]), u = OA("merge");
|
|
3723
3723
|
y.push({ kind: "merge", id: u, nodes: t }), h && (m.value = { ...m.value, [u]: [h[0], h[1], h[2]] }), A.value = y, s.value = y.length - 1, await P();
|
|
3724
3724
|
}
|
|
3725
3725
|
async function YI() {
|
|
@@ -3731,7 +3731,7 @@ const VA = Ug("printbench-project", () => {
|
|
|
3731
3731
|
oA().toast("info", "当前零件没有可拆分的连通分量");
|
|
3732
3732
|
return;
|
|
3733
3733
|
}
|
|
3734
|
-
const h =
|
|
3734
|
+
const h = CA(i);
|
|
3735
3735
|
eA(), A.value.splice(i, 1), y.forEach((u, q) => {
|
|
3736
3736
|
const j = {
|
|
3737
3737
|
id: OA("mesh"),
|
|
@@ -3829,7 +3829,7 @@ const VA = Ug("printbench-project", () => {
|
|
|
3829
3829
|
} catch (wA) {
|
|
3830
3830
|
return q.toast("fail", wA instanceof Error ? wA.message : "切面拆件失败"), !1;
|
|
3831
3831
|
}
|
|
3832
|
-
const qA =
|
|
3832
|
+
const qA = CA(i), lI = t.length === 1;
|
|
3833
3833
|
return eA(), A.value.splice(i, 1), JA.forEach((wA, mA) => {
|
|
3834
3834
|
const AI = {
|
|
3835
3835
|
id: OA("mesh"),
|
|
@@ -3943,7 +3943,7 @@ const VA = Ug("printbench-project", () => {
|
|
|
3943
3943
|
selectedNode: v,
|
|
3944
3944
|
partNames: DA,
|
|
3945
3945
|
visibility: vA,
|
|
3946
|
-
appearances:
|
|
3946
|
+
appearances: gA,
|
|
3947
3947
|
printColors: EI,
|
|
3948
3948
|
partColorsById: yA,
|
|
3949
3949
|
partIds: sA,
|
|
@@ -3985,7 +3985,7 @@ const VA = Ug("printbench-project", () => {
|
|
|
3985
3985
|
setSelectionByPartIds: YA,
|
|
3986
3986
|
setPartColor: UA,
|
|
3987
3987
|
applyPartColorsHex: QA,
|
|
3988
|
-
printColorAt:
|
|
3988
|
+
printColorAt: CA,
|
|
3989
3989
|
snapshot: XI,
|
|
3990
3990
|
restore: zI,
|
|
3991
3991
|
tryRestoreDraft: $I,
|
|
@@ -4630,6 +4630,8 @@ const lo = {
|
|
|
4630
4630
|
extras: !0,
|
|
4631
4631
|
importUnit: !0,
|
|
4632
4632
|
hideEmpty: !1,
|
|
4633
|
+
hideStatusBar: !1,
|
|
4634
|
+
hidePanelModeToggle: !1,
|
|
4633
4635
|
leftPanelMode: "float",
|
|
4634
4636
|
actionButtons: "icon-text"
|
|
4635
4637
|
};
|
|
@@ -4642,6 +4644,8 @@ function dQ(g) {
|
|
|
4642
4644
|
extras: !!g?.extras,
|
|
4643
4645
|
importUnit: !!g?.importUnit,
|
|
4644
4646
|
hideEmpty: !!g?.hideEmpty,
|
|
4647
|
+
hideStatusBar: !!g?.hideStatusBar,
|
|
4648
|
+
hidePanelModeToggle: !!g?.hidePanelModeToggle,
|
|
4645
4649
|
leftPanelMode: g?.leftPanelMode === "dock" ? "dock" : "float",
|
|
4646
4650
|
actionButtons: g?.actionButtons === "icon" || g?.actionButtons === "text" ? g.actionButtons : "icon-text"
|
|
4647
4651
|
};
|
|
@@ -4872,10 +4876,10 @@ function uQ(g) {
|
|
|
4872
4876
|
}
|
|
4873
4877
|
async function Y() {
|
|
4874
4878
|
const M = B.fileName.replace(/\.[^.]+$/, "") || "printbench", l = 1 / Sg[n.value], L = B.evaluated.map((V, $) => {
|
|
4875
|
-
const DA = B.pendingDisplayMatrix($),
|
|
4879
|
+
const DA = B.pendingDisplayMatrix($), gA = DA ? Ig(V.positions, DA) : V.positions;
|
|
4876
4880
|
return {
|
|
4877
4881
|
...V,
|
|
4878
|
-
positions: l === 1 ?
|
|
4882
|
+
positions: l === 1 ? gA : Float32Array.from(gA, (sA) => sA * l)
|
|
4879
4883
|
};
|
|
4880
4884
|
}), m = RI(L);
|
|
4881
4885
|
r.value = 55;
|
|
@@ -5021,7 +5025,7 @@ function HQ(g) {
|
|
|
5021
5025
|
const NA = await f(l, L);
|
|
5022
5026
|
H = NA.blob, v = NA.width, V = NA.height, a.value = l;
|
|
5023
5027
|
}
|
|
5024
|
-
const $ = GQ(B.fileName, l), DA = oC(l),
|
|
5028
|
+
const $ = GQ(B.fileName, l), DA = oC(l), gA = {
|
|
5025
5029
|
action: M,
|
|
5026
5030
|
format: l,
|
|
5027
5031
|
fileName: $,
|
|
@@ -5031,15 +5035,15 @@ function HQ(g) {
|
|
|
5031
5035
|
height: V
|
|
5032
5036
|
};
|
|
5033
5037
|
if (A.value)
|
|
5034
|
-
return Q.onSnapshot?.(
|
|
5038
|
+
return Q.onSnapshot?.(gA), I.toast("ok", `已生成 ${$}`), d(), gA;
|
|
5035
5039
|
if (M === "download")
|
|
5036
|
-
return b(H, $), Q.onSnapshot?.(
|
|
5040
|
+
return b(H, $), Q.onSnapshot?.(gA), I.toast("ok", `已下载 ${$}`), d(), gA;
|
|
5037
5041
|
const sA = await tC(
|
|
5038
5042
|
H,
|
|
5039
5043
|
{ fileName: $, format: l },
|
|
5040
5044
|
{ endpoint: C.value }
|
|
5041
5045
|
);
|
|
5042
|
-
return Q.onSnapshot?.(
|
|
5046
|
+
return Q.onSnapshot?.(gA), I.toast("ok", sA.id ? `已上传 ${$} · ${sA.id}` : `已上传 ${$}`), d(), gA;
|
|
5043
5047
|
} catch (H) {
|
|
5044
5048
|
if (H instanceof ug)
|
|
5045
5049
|
return I.toast("info", H.message), null;
|
|
@@ -5885,7 +5889,8 @@ const dA = /* @__PURE__ */ aA({
|
|
|
5885
5889
|
}, [
|
|
5886
5890
|
E("div", $E, [
|
|
5887
5891
|
E("span", Ai, "零件树 · " + x(k(A).partNames.length), 1),
|
|
5888
|
-
|
|
5892
|
+
g.features.hidePanelModeToggle ? p("", !0) : (R(), U("button", {
|
|
5893
|
+
key: 0,
|
|
5889
5894
|
class: "panel-toggle",
|
|
5890
5895
|
type: "button",
|
|
5891
5896
|
title: g.panelMode === "float" ? "切换为通栏" : "切换为悬浮",
|
|
@@ -5897,7 +5902,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
5897
5902
|
fill: "currentColor"
|
|
5898
5903
|
}, null, 8, Ci)
|
|
5899
5904
|
]))
|
|
5900
|
-
], 8, Ii),
|
|
5905
|
+
], 8, Ii)),
|
|
5901
5906
|
E("button", {
|
|
5902
5907
|
class: "panel-toggle",
|
|
5903
5908
|
type: "button",
|
|
@@ -5951,7 +5956,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
5951
5956
|
type: "button",
|
|
5952
5957
|
title: "导入",
|
|
5953
5958
|
"aria-label": "导入",
|
|
5954
|
-
disabled: g.observe,
|
|
5959
|
+
disabled: g.observe || g.splitMode,
|
|
5955
5960
|
onClick: o[2] || (o[2] = (w) => C("import"))
|
|
5956
5961
|
}, [
|
|
5957
5962
|
r.value ? (R(), U("svg", si, [
|
|
@@ -5967,7 +5972,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
5967
5972
|
type: "button",
|
|
5968
5973
|
title: "导出",
|
|
5969
5974
|
"aria-label": "导出",
|
|
5970
|
-
disabled: !g.hasModel,
|
|
5975
|
+
disabled: !g.hasModel || g.splitMode,
|
|
5971
5976
|
onClick: o[3] || (o[3] = (w) => C("export"))
|
|
5972
5977
|
}, [
|
|
5973
5978
|
r.value ? (R(), U("svg", ni, [
|
|
@@ -5983,7 +5988,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
5983
5988
|
type: "button",
|
|
5984
5989
|
title: "复原到导入时的状态",
|
|
5985
5990
|
"aria-label": "复原",
|
|
5986
|
-
disabled: !g.hasModel || g.geomLocked,
|
|
5991
|
+
disabled: !g.hasModel || g.geomLocked || g.splitMode,
|
|
5987
5992
|
onClick: o[4] || (o[4] = (w) => C("restore"))
|
|
5988
5993
|
}, [
|
|
5989
5994
|
r.value ? (R(), U("svg", Mi, [
|
|
@@ -5999,7 +6004,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
5999
6004
|
type: "button",
|
|
6000
6005
|
title: "修复",
|
|
6001
6006
|
"aria-label": "修复",
|
|
6002
|
-
disabled: !g.hasModel || g.observe,
|
|
6007
|
+
disabled: !g.hasModel || g.observe || g.splitMode,
|
|
6003
6008
|
onClick: o[5] || (o[5] = (w) => C("repair"))
|
|
6004
6009
|
}, [
|
|
6005
6010
|
r.value ? (R(), U("svg", bi, [
|
|
@@ -6015,7 +6020,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
6015
6020
|
type: "button",
|
|
6016
6021
|
title: "复制",
|
|
6017
6022
|
"aria-label": "复制",
|
|
6018
|
-
disabled: !g.hasModel || !K.value || g.geomLocked,
|
|
6023
|
+
disabled: !g.hasModel || !K.value || g.geomLocked || g.splitMode,
|
|
6019
6024
|
onClick: o[6] || (o[6] = (w) => k(A).duplicatePart(k(A).selected))
|
|
6020
6025
|
}, [
|
|
6021
6026
|
r.value ? (R(), U("svg", Ui, [
|
|
@@ -6031,7 +6036,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
6031
6036
|
type: "button",
|
|
6032
6037
|
title: "删除",
|
|
6033
6038
|
"aria-label": "删除",
|
|
6034
|
-
disabled: !g.hasModel || !K.value || g.geomLocked,
|
|
6039
|
+
disabled: !g.hasModel || !K.value || g.geomLocked || g.splitMode,
|
|
6035
6040
|
onClick: e
|
|
6036
6041
|
}, [
|
|
6037
6042
|
r.value ? (R(), U("svg", Li, [
|
|
@@ -6602,11 +6607,11 @@ const dA = /* @__PURE__ */ aA({
|
|
|
6602
6607
|
let f = null;
|
|
6603
6608
|
const Y = S(!1), J = S(!1), b = S(!1), d = S(-1), o = S("difference"), w = S(1), M = S(!1), l = S(0);
|
|
6604
6609
|
S(0.5);
|
|
6605
|
-
const L = S(null), m = S([]), H = S(""), v = S(!1), V = S(0), $ = S(null), DA = S({ x: 0, y: 0, z: 0, rx: 0, ry: 0, rz: 0, sx: 1, sy: 1, sz: 1 }),
|
|
6610
|
+
const L = S(null), m = S([]), H = S(""), v = S(!1), V = S(0), $ = S(null), DA = S({ x: 0, y: 0, z: 0, rx: 0, ry: 0, rz: 0, sx: 1, sy: 1, sz: 1 }), gA = S(!1), sA = S(!0), NA = S("float"), EI = S(!1), yA = S(null), CA = S(null), UA = S(!1), QA = S(!1), YA = S(0), vA = S(0), iI = S(0), HA = S("sphere"), XA = S(0), eA = S(0), wI = S(!1);
|
|
6606
6611
|
let tA = null, SI = null, zA = !1;
|
|
6607
|
-
const P = AA(() => I.roots.length > 0), _I = AA(() => I.diagnosis?.bbox.min[1] ?? 0), cI = AA(() => I.diagnosis?.bbox.max[1] ?? 10),
|
|
6612
|
+
const P = AA(() => I.roots.length > 0), _I = AA(() => I.diagnosis?.bbox.min[1] ?? 0), cI = AA(() => I.diagnosis?.bbox.max[1] ?? 10), IA = AA(() => dQ(n.value));
|
|
6608
6613
|
GA(
|
|
6609
|
-
() =>
|
|
6614
|
+
() => IA.value.leftPanelMode,
|
|
6610
6615
|
(F) => {
|
|
6611
6616
|
NA.value = F;
|
|
6612
6617
|
},
|
|
@@ -6632,7 +6637,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
6632
6637
|
onLoaded: () => {
|
|
6633
6638
|
V.value = I.diagnosis?.bbox.max[1] ?? 0, l.value = I.diagnosis?.bbox.min[1] ?? 0;
|
|
6634
6639
|
},
|
|
6635
|
-
confirmUnit: () =>
|
|
6640
|
+
confirmUnit: () => IA.value.importUnit
|
|
6636
6641
|
}), { exportOpen: PI, exportFmt: UI, exportUnit: YI, exportProgress: sg, openExport: tg, confirmExport: rg, exportFile: Ng } = uQ({
|
|
6637
6642
|
onBlocking: (F) => Hg(F),
|
|
6638
6643
|
onRepair: () => pI()
|
|
@@ -6677,7 +6682,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
6677
6682
|
}
|
|
6678
6683
|
function j() {
|
|
6679
6684
|
if (e.value) {
|
|
6680
|
-
if (e.value.setGridVisible(C.state.showGrid), e.value.setLights(C.state.showLights), e.value.clipping = v.value, e.value.setClipHeight(V.value), e.value.setTransformSnap(
|
|
6685
|
+
if (e.value.setGridVisible(C.state.showGrid), e.value.setLights(C.state.showLights), e.value.clipping = v.value, e.value.setClipHeight(V.value), e.value.setTransformSnap(gA.value), e.value.syncMeshes(
|
|
6681
6686
|
I.evaluated,
|
|
6682
6687
|
I.partNames,
|
|
6683
6688
|
I.visibility,
|
|
@@ -6717,7 +6722,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
6717
6722
|
C.state.showBbox,
|
|
6718
6723
|
v.value,
|
|
6719
6724
|
V.value,
|
|
6720
|
-
|
|
6725
|
+
gA.value,
|
|
6721
6726
|
FA.value
|
|
6722
6727
|
],
|
|
6723
6728
|
() => j(),
|
|
@@ -6852,11 +6857,11 @@ const dA = /* @__PURE__ */ aA({
|
|
|
6852
6857
|
}, 80));
|
|
6853
6858
|
};
|
|
6854
6859
|
}
|
|
6855
|
-
if (window.addEventListener("keydown", mA), window.addEventListener("keyup", AI), window.addEventListener("beforeunload", () => I.scheduleAutosave()), I.setAutosaveEnabled(
|
|
6860
|
+
if (window.addEventListener("keydown", mA), window.addEventListener("keyup", AI), window.addEventListener("beforeunload", () => I.scheduleAutosave()), I.setAutosaveEnabled(IA.value.drafts), !EA.value && IA.value.drafts) {
|
|
6856
6861
|
const c = await iC();
|
|
6857
6862
|
c?.roots?.length && await A.ask("发现未完成草稿", "检测到上次编辑的项目草稿,是否恢复?") && await I.restore(c);
|
|
6858
6863
|
}
|
|
6859
|
-
!EA.value &&
|
|
6864
|
+
!EA.value && IA.value.extras && !C.state.skipTour && (d.value = 0);
|
|
6860
6865
|
try {
|
|
6861
6866
|
await I.ensureKernel(), r.onReady?.();
|
|
6862
6867
|
} catch {
|
|
@@ -6870,10 +6875,10 @@ const dA = /* @__PURE__ */ aA({
|
|
|
6870
6875
|
function mA(F) {
|
|
6871
6876
|
if (A.busy) return;
|
|
6872
6877
|
if (F.key === "Shift" && e.value?.setTransformSnap(!0), (F.ctrlKey || F.metaKey) && F.key.toLowerCase() === "z" && (F.preventDefault(), F.shiftKey ? I.redo() : I.undo()), (F.ctrlKey || F.metaKey) && F.key.toLowerCase() === "y" && (F.preventDefault(), I.redo()), (F.ctrlKey || F.metaKey) && F.key.toLowerCase() === "s") {
|
|
6873
|
-
if (F.preventDefault(), !
|
|
6878
|
+
if (F.preventDefault(), !IA.value.drafts) return;
|
|
6874
6879
|
I.scheduleAutosave(), A.toast("ok", "草稿已保存到本地");
|
|
6875
6880
|
}
|
|
6876
|
-
if (!(F.target instanceof HTMLElement && ["INPUT", "TEXTAREA", "SELECT"].includes(F.target.tagName)) && F.key.toLowerCase() === "p" && !F.ctrlKey && !F.metaKey && !EA.value &&
|
|
6881
|
+
if (!(F.target instanceof HTMLElement && ["INPUT", "TEXTAREA", "SELECT"].includes(F.target.tagName)) && F.key.toLowerCase() === "p" && !F.ctrlKey && !F.metaKey && !EA.value && IA.value.extras) {
|
|
6877
6882
|
A.setWorkspaceMode(A.workspaceMode === "preview" ? "edit" : "preview");
|
|
6878
6883
|
return;
|
|
6879
6884
|
}
|
|
@@ -6887,13 +6892,13 @@ const dA = /* @__PURE__ */ aA({
|
|
|
6887
6892
|
A.setWorkspaceMode("edit");
|
|
6888
6893
|
return;
|
|
6889
6894
|
}
|
|
6890
|
-
e.value?.detachGizmo(), e.value?.clearPreview(), M.value = !1, I.measureMode = "off", m.value = [], H.value = "", e.value?.setMeasureDraft([]),
|
|
6895
|
+
e.value?.detachGizmo(), e.value?.clearPreview(), M.value = !1, I.measureMode = "off", m.value = [], H.value = "", e.value?.setMeasureDraft([]), CA.value = null, yA.value = null;
|
|
6891
6896
|
}
|
|
6892
6897
|
F.key.toLowerCase() === "f" && !F.ctrlKey && e.value?.fit(), e.value && P.value && !QA.value && !FA.value && I.selected >= 0 && I.selectedIds.length && e.value.attachGizmo(I.selected, I.transformMode);
|
|
6893
6898
|
}
|
|
6894
6899
|
}
|
|
6895
6900
|
function AI(F) {
|
|
6896
|
-
F.key === "Shift" && !
|
|
6901
|
+
F.key === "Shift" && !gA.value && e.value?.setTransformSnap(!1);
|
|
6897
6902
|
}
|
|
6898
6903
|
async function LI() {
|
|
6899
6904
|
RA.value || !P.value || await A.ask("复原模型", "导入之后的修改都会丢掉,模型回到刚导入时的状态。", {
|
|
@@ -6916,7 +6921,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
6916
6921
|
UA.value = !1, e.value?.setCompareBefore(null), e.value?.setCompareAfterTint(!1), T ? $.value = null : I.undo(), j();
|
|
6917
6922
|
}
|
|
6918
6923
|
function oI() {
|
|
6919
|
-
if (!
|
|
6924
|
+
if (!IA.value.split || RA.value || !P.value || !e.value) return;
|
|
6920
6925
|
if (QA.value) {
|
|
6921
6926
|
Mg();
|
|
6922
6927
|
return;
|
|
@@ -6977,7 +6982,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
6977
6982
|
zA = !1;
|
|
6978
6983
|
return;
|
|
6979
6984
|
}
|
|
6980
|
-
if (
|
|
6985
|
+
if (CA.value = null, !e.value || !K.value) return;
|
|
6981
6986
|
const c = q(F);
|
|
6982
6987
|
if (QA.value) {
|
|
6983
6988
|
const kA = e.value.pickSplitPlane(c.nx, c.ny);
|
|
@@ -7043,7 +7048,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
7043
7048
|
function MC(F) {
|
|
7044
7049
|
if (F.preventDefault(), FA.value || !e.value || !K.value) return;
|
|
7045
7050
|
const c = q(F), T = e.value.pick(c.nx, c.ny)?.index ?? I.selected;
|
|
7046
|
-
|
|
7051
|
+
CA.value = { x: F.clientX, y: F.clientY, i: T }, I.setSelection([T], F.ctrlKey);
|
|
7047
7052
|
}
|
|
7048
7053
|
function hC() {
|
|
7049
7054
|
const F = m.value;
|
|
@@ -7149,7 +7154,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
7149
7154
|
L.value && navigator.clipboard.writeText(L.value), A.toast("ok", "已复制错误信息");
|
|
7150
7155
|
}
|
|
7151
7156
|
return GA(
|
|
7152
|
-
() =>
|
|
7157
|
+
() => IA.value.drafts,
|
|
7153
7158
|
(F) => I.setAutosaveEnabled(F),
|
|
7154
7159
|
{ immediate: !0 }
|
|
7155
7160
|
), GA(
|
|
@@ -7190,11 +7195,11 @@ const dA = /* @__PURE__ */ aA({
|
|
|
7190
7195
|
"has-model": P.value,
|
|
7191
7196
|
nx: DA.value,
|
|
7192
7197
|
"geom-locked": RA.value,
|
|
7193
|
-
features:
|
|
7198
|
+
features: IA.value,
|
|
7194
7199
|
observe: FA.value,
|
|
7195
7200
|
"clip-on": v.value,
|
|
7196
|
-
"snap-on":
|
|
7197
|
-
"onUpdate:snapOn": c[2] || (c[2] = (N) =>
|
|
7201
|
+
"snap-on": gA.value,
|
|
7202
|
+
"onUpdate:snapOn": c[2] || (c[2] = (N) => gA.value = N),
|
|
7198
7203
|
"bool-op": o.value,
|
|
7199
7204
|
"onUpdate:boolOp": c[3] || (c[3] = (N) => o.value = N),
|
|
7200
7205
|
"bool-b": w.value,
|
|
@@ -7218,7 +7223,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
7218
7223
|
onSettings: c[9] || (c[9] = (N) => Y.value = !0),
|
|
7219
7224
|
onHelp: c[10] || (c[10] = (N) => J.value = !0),
|
|
7220
7225
|
onSelect: dC,
|
|
7221
|
-
onPartMenu: c[11] || (c[11] = (N) =>
|
|
7226
|
+
onPartMenu: c[11] || (c[11] = (N) => CA.value = N),
|
|
7222
7227
|
onApplyNumeric: RC,
|
|
7223
7228
|
onAddPrim: fC,
|
|
7224
7229
|
onPreviewBool: KC,
|
|
@@ -7245,9 +7250,9 @@ const dA = /* @__PURE__ */ aA({
|
|
|
7245
7250
|
ref_key: "canvasRef",
|
|
7246
7251
|
ref: G
|
|
7247
7252
|
}, null, 512),
|
|
7248
|
-
!P.value && !
|
|
7253
|
+
!P.value && !IA.value.hideEmpty && !EA.value ? (R(), U("div", go, [...c[36] || (c[36] = [
|
|
7249
7254
|
E("h2", null, "拖入 GLB / STL / OBJ / 3MF 开始", -1),
|
|
7250
|
-
E("p", null, "
|
|
7255
|
+
E("p", null, "也可从网络地址导入,解析在浏览器内完成。", -1),
|
|
7251
7256
|
E("div", { class: "steps" }, [
|
|
7252
7257
|
E("div", null, [
|
|
7253
7258
|
E("b", null, "1"),
|
|
@@ -7259,7 +7264,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
7259
7264
|
]),
|
|
7260
7265
|
E("div", null, [
|
|
7261
7266
|
E("b", null, "3"),
|
|
7262
|
-
_("
|
|
7267
|
+
_(" 导出模型")
|
|
7263
7268
|
])
|
|
7264
7269
|
], -1)
|
|
7265
7270
|
])])) : p("", !0),
|
|
@@ -7290,7 +7295,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
7290
7295
|
class: "marquee",
|
|
7291
7296
|
style: Bg({ left: yA.value.x + "px", top: yA.value.y + "px", width: yA.value.w + "px", height: yA.value.h + "px" })
|
|
7292
7297
|
}, null, 4)) : p("", !0),
|
|
7293
|
-
|
|
7298
|
+
IA.value.extras && d.value >= 0 ? (R(), U("div", ao, [
|
|
7294
7299
|
d.value === 0 ? (R(), U("p", eo, "第一步:导入模型。对话框期间先按毫米预览包围盒,确认单位后再缩放。")) : d.value === 1 ? (R(), U("p", Fo, "第二步:点诊断条目飞到缺陷;必要时「修复」并看红绿对拍。")) : (R(), U("p", wo, "第三步:校验通过后导出二进制 STL 或 3MF,交给切片软件(Cura / PrusaSlicer 等)。")),
|
|
7295
7300
|
E("div", co, [
|
|
7296
7301
|
E("button", {
|
|
@@ -7313,13 +7318,13 @@ const dA = /* @__PURE__ */ aA({
|
|
|
7313
7318
|
"active-defect": $.value,
|
|
7314
7319
|
onFly: Hg
|
|
7315
7320
|
}, null, 8, ["open", "active-defect"])),
|
|
7316
|
-
EA.value
|
|
7317
|
-
|
|
7321
|
+
!EA.value && !IA.value.hideStatusBar ? (R(), z($D, { key: 2 })) : p("", !0),
|
|
7322
|
+
CA.value && !FA.value ? (R(), z(Io, {
|
|
7318
7323
|
key: 3,
|
|
7319
|
-
x:
|
|
7320
|
-
y:
|
|
7321
|
-
index:
|
|
7322
|
-
onClose: c[16] || (c[16] = (N) =>
|
|
7324
|
+
x: CA.value.x,
|
|
7325
|
+
y: CA.value.y,
|
|
7326
|
+
index: CA.value.i,
|
|
7327
|
+
onClose: c[16] || (c[16] = (N) => CA.value = null)
|
|
7323
7328
|
}, null, 8, ["x", "y", "index"])) : p("", !0),
|
|
7324
7329
|
k(ZI) && k(tI) ? (R(), z($Q, {
|
|
7325
7330
|
key: 4,
|
|
@@ -7336,7 +7341,7 @@ const dA = /* @__PURE__ */ aA({
|
|
|
7336
7341
|
onPick: k(ag),
|
|
7337
7342
|
onImportUrl: k(eg)
|
|
7338
7343
|
}, null, 8, ["url", "onPick", "onImportUrl"])) : p("", !0),
|
|
7339
|
-
|
|
7344
|
+
IA.value.importUnit && k(VI) ? (R(), z(vQ, {
|
|
7340
7345
|
key: 6,
|
|
7341
7346
|
"file-name": k(Dg)?.name,
|
|
7342
7347
|
unit: k(dI),
|
|
@@ -7364,23 +7369,23 @@ const dA = /* @__PURE__ */ aA({
|
|
|
7364
7369
|
onClose: c[24] || (c[24] = (N) => PI.value = !1),
|
|
7365
7370
|
onDownload: k(rg)
|
|
7366
7371
|
}, null, 8, ["format", "unit", "progress", "onDownload"])) : p("", !0),
|
|
7367
|
-
|
|
7372
|
+
IA.value.extras && Y.value ? (R(), z(YE, {
|
|
7368
7373
|
key: 9,
|
|
7369
7374
|
onClose: c[25] || (c[25] = (N) => Y.value = !1)
|
|
7370
7375
|
})) : p("", !0),
|
|
7371
|
-
|
|
7376
|
+
IA.value.extras && J.value ? (R(), z(lE, {
|
|
7372
7377
|
key: 10,
|
|
7373
7378
|
onClose: c[26] || (c[26] = (N) => J.value = !1),
|
|
7374
7379
|
onReplayTour: c[27] || (c[27] = (N) => d.value = 0)
|
|
7375
7380
|
})) : p("", !0),
|
|
7376
|
-
|
|
7381
|
+
IA.value.extras && b.value ? (R(), z(qE, {
|
|
7377
7382
|
key: 11,
|
|
7378
7383
|
printable: wI.value,
|
|
7379
7384
|
"onUpdate:printable": c[28] || (c[28] = (N) => wI.value = N),
|
|
7380
7385
|
onClose: c[29] || (c[29] = (N) => b.value = !1),
|
|
7381
7386
|
onDownload: SC
|
|
7382
7387
|
}, null, 8, ["printable"])) : p("", !0),
|
|
7383
|
-
|
|
7388
|
+
IA.value.drafts && k($I) ? (R(), z(PE, {
|
|
7384
7389
|
key: 12,
|
|
7385
7390
|
name: k(i),
|
|
7386
7391
|
"onUpdate:name": c[30] || (c[30] = (N) => HI(i) ? i.value = N : null),
|