printbench 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -155
- package/dist/printbench.d.ts +1 -0
- package/dist/printbench.js +1266 -1246
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,56 +1,38 @@
|
|
|
1
1
|
# PrintBench
|
|
2
2
|
|
|
3
|
-
纯浏览器 3D 打印模型工作台(Vue 3 + three.js + Manifold
|
|
3
|
+
纯浏览器 3D 打印模型工作台(Vue 3 + three.js + Manifold)。在浏览器内解析、体检、修复网格,再导出给切片软件。几何处理在本地完成,审核报告默认不上传。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
可作为 **Vue 3 组件** 嵌入其它项目。需现代浏览器(WebGL、Web Worker、WASM)。
|
|
6
6
|
|
|
7
|
-
##
|
|
8
|
-
|
|
9
|
-
- Node.js(建议 20+)
|
|
10
|
-
- 现代浏览器(需 WebGL、Web Worker、WASM)
|
|
7
|
+
## 安装
|
|
11
8
|
|
|
12
9
|
```bash
|
|
13
|
-
npm install
|
|
14
|
-
npm run dev # 打开提示的地址,进入 /print-bench/
|
|
15
|
-
npm run build # 产出 SPA 静态资源(写入 dist/)
|
|
16
|
-
npm run build:lib # 产出可被宿主安装的库(写入 dist/,与 SPA 互斥覆盖)
|
|
17
|
-
npm run preview # 预览 SPA 构建结果
|
|
18
|
-
npm test
|
|
10
|
+
npm install printbench
|
|
19
11
|
```
|
|
20
12
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
## 作为 npm 库嵌入(独立 Vue 宿主)
|
|
13
|
+
Peer 依赖(宿主需自行安装,大版本对齐):
|
|
24
14
|
|
|
25
|
-
|
|
15
|
+
- `vue` ^3.5
|
|
16
|
+
- `pinia` ^3
|
|
26
17
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
npm run build:lib
|
|
31
|
-
```
|
|
18
|
+
`three`、`manifold-3d` 等运行时依赖会随本包安装。请在宿主中注册 Pinia(`app.use(createPinia())`)。
|
|
32
19
|
|
|
33
|
-
|
|
20
|
+
### Vite 宿主
|
|
34
21
|
|
|
35
|
-
|
|
22
|
+
开发时建议排除预打包:
|
|
36
23
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"printbench": "file:../PrintBench",
|
|
45
|
-
"vue": "^3.5.0",
|
|
46
|
-
"pinia": "^3.0.0"
|
|
47
|
-
}
|
|
48
|
-
}
|
|
24
|
+
```ts
|
|
25
|
+
// vite.config.ts
|
|
26
|
+
export default defineConfig({
|
|
27
|
+
optimizeDeps: {
|
|
28
|
+
exclude: ['printbench', 'manifold-3d'],
|
|
29
|
+
},
|
|
30
|
+
})
|
|
49
31
|
```
|
|
50
32
|
|
|
51
|
-
|
|
33
|
+
改配置后删除 `node_modules/.vite` 再重启 `dev`。
|
|
52
34
|
|
|
53
|
-
|
|
35
|
+
## 使用
|
|
54
36
|
|
|
55
37
|
```ts
|
|
56
38
|
import { createApp } from 'vue'
|
|
@@ -63,11 +45,22 @@ createApp(App).use(createPinia()).mount('#app')
|
|
|
63
45
|
```
|
|
64
46
|
|
|
65
47
|
```vue
|
|
48
|
+
<script setup lang="ts">
|
|
49
|
+
import { PrintBench } from 'printbench'
|
|
50
|
+
import type { PrintBenchExportedPayload } from 'printbench'
|
|
51
|
+
import 'printbench/style.css'
|
|
52
|
+
|
|
53
|
+
function onExported(payload: PrintBenchExportedPayload) {
|
|
54
|
+
// payload.blob / payload.fileName / payload.format / payload.unit
|
|
55
|
+
}
|
|
56
|
+
</script>
|
|
57
|
+
|
|
66
58
|
<template>
|
|
67
59
|
<PrintBench
|
|
68
60
|
height="100vh"
|
|
69
61
|
upload-url="https://api.example.com/api/printbench/exports"
|
|
70
62
|
:model-url="modelUrl"
|
|
63
|
+
:custom-export="false"
|
|
71
64
|
@ready="onReady"
|
|
72
65
|
@error="onError"
|
|
73
66
|
@exported="onExported"
|
|
@@ -76,149 +69,77 @@ createApp(App).use(createPinia()).mount('#app')
|
|
|
76
69
|
</template>
|
|
77
70
|
```
|
|
78
71
|
|
|
79
|
-
|
|
80
|
-
|-------|------|
|
|
81
|
-
| `uploadUrl` | 导出上传地址;优先于构建时的 `VITE_UPLOAD_URL` |
|
|
82
|
-
| `modelUrl` | 挂载后自动按 URL 导入模型 |
|
|
83
|
-
| `height` | 根容器高度,默认 `100%` |
|
|
84
|
-
|
|
85
|
-
| emits | 说明 |
|
|
86
|
-
|-------|------|
|
|
87
|
-
| `ready` | 几何内核就绪 |
|
|
88
|
-
| `error` | 可展示错误信息 |
|
|
89
|
-
| `exported` | `{ format, fileName, blob, unit, axis? }` |
|
|
90
|
-
| `report` | 审核报告对象(下载 JSON/HTML 时触发) |
|
|
72
|
+
### Props
|
|
91
73
|
|
|
92
|
-
|
|
74
|
+
| 属性 | 类型 | 默认 | 说明 |
|
|
75
|
+
|------|------|------|------|
|
|
76
|
+
| `height` | `string` | `'100%'` | 根容器高度 |
|
|
77
|
+
| `modelUrl` | `string` | — | 挂载后按 URL 自动导入模型(需 CORS) |
|
|
78
|
+
| `uploadUrl` | `string` | — | 「一键上传」的 POST 地址;未设则提示接口未配置 |
|
|
79
|
+
| `customExport` | `boolean` | `false` | 为 `true` 时,下载 / 一键上传只生成文件并触发 `exported`,不本地下载、不 POST |
|
|
93
80
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
```ts
|
|
97
|
-
optimizeDeps: {
|
|
98
|
-
exclude: ['printbench', 'manifold-3d'],
|
|
99
|
-
},
|
|
100
|
-
```
|
|
81
|
+
### Events
|
|
101
82
|
|
|
102
|
-
|
|
83
|
+
| 事件 | 负载 | 说明 |
|
|
84
|
+
|------|------|------|
|
|
85
|
+
| `ready` | — | 几何内核就绪 |
|
|
86
|
+
| `error` | `string` | 可展示错误 |
|
|
87
|
+
| `exported` | `{ format, fileName, blob, unit, axis? }` | 导出完成(下载、上传或 `customExport` 均会触发) |
|
|
88
|
+
| `report` | 审核报告对象 | 下载 JSON / HTML 审核报告时触发 |
|
|
103
89
|
|
|
104
|
-
|
|
90
|
+
`exported` 的 `format` 为 `'stl' | '3mf'`;多零件 STL 时 `fileName` 为 zip,`blob` 为打包后的文件。
|
|
105
91
|
|
|
106
|
-
|
|
107
|
-
2. **看右侧诊断** → 点条目飞到缺陷;需要时 **一键修复**(红绿对拍后确认)
|
|
108
|
-
3. **导出** STL / 3MF → 在切片软件(Cura、PrusaSlicer 等)里按毫米(或导出时所选单位)解释坐标
|
|
92
|
+
「一键上传」以 `multipart/form-data` POST,字段为 `file` 与 `meta`(JSON:fileName、format、unit 等)。
|
|
109
93
|
|
|
110
|
-
|
|
94
|
+
## 工作台能力
|
|
111
95
|
|
|
112
|
-
|
|
96
|
+
推荐流程:导入模型并确认单位 → 看右侧诊断,必要时一键修复 → 导出 STL / 3MF 给切片软件(坐标按毫米或导出时所选单位解释)。
|
|
113
97
|
|
|
114
|
-
|
|
98
|
+
有红色阻断项时无法导出。黄色警告可继续,但可能影响打印质量。
|
|
115
99
|
|
|
116
|
-
|
|
117
|
-
- 拖入画布,或粘贴文件
|
|
118
|
-
- 填写 **http(s) 直链**(粘贴链接也会打开导入框)
|
|
100
|
+
### 导入
|
|
119
101
|
|
|
120
|
-
|
|
102
|
+
支持 **GLB / GLTF / STL / OBJ / 3MF**,以及含上述模型的 **ZIP**,单文件约 **500MB**。可从本地选择、拖入画布、粘贴文件,或填写 http(s) 直链(需 CORS;GitHub `blob` 会改成 raw)。
|
|
121
103
|
|
|
122
|
-
|
|
104
|
+
导入后按毫米预览包围盒,再选真实单位(mm / cm / m)。3MF 会读文件内 model unit。动画、材质不进入打印网格。
|
|
123
105
|
|
|
124
|
-
|
|
106
|
+
### 界面
|
|
125
107
|
|
|
126
108
|
| 区域 | 作用 |
|
|
127
109
|
|------|------|
|
|
128
|
-
| 顶栏 |
|
|
129
|
-
| 左栏 |
|
|
130
|
-
| 画布 | 轨道旋转缩放;双击或 **F**
|
|
131
|
-
| 右栏 |
|
|
110
|
+
| 顶栏 | 导入、撤销/重做、修复、导出、显示模式、测量、草稿、设置、帮助 |
|
|
111
|
+
| 左栏 | 零件树与编辑(布尔、拆件、切底座等),可收起 |
|
|
112
|
+
| 画布 | 轨道旋转缩放;双击或 **F** 自适应;**复位视角** 回默认相机 |
|
|
113
|
+
| 右栏 | 诊断与测量,可收起 |
|
|
132
114
|
| 底栏 | 包围盒、内部单位 mm、体积、文件名 |
|
|
133
115
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
## 顶栏菜单
|
|
137
|
-
|
|
138
|
-
从左到右大致是:进文件 → 看模型 → 量尺寸 → 修复与导出;最右侧是草稿、设置、帮助。左栏的零件树、布尔、切底座等不在顶栏。
|
|
139
|
-
|
|
140
|
-
**文件与历史**
|
|
141
|
-
|
|
142
|
-
| 项 | 说明 |
|
|
143
|
-
|----|------|
|
|
144
|
-
| 导入 | 本地文件或 http(s) 地址;拖放、粘贴文件或链接也可 |
|
|
145
|
-
| 撤销 / 重做 | 操作树历史(Ctrl+Z / Ctrl+Y) |
|
|
146
|
-
| 一键修复 | 对当前模型修复,画布红/绿对拍,确认才保留 |
|
|
147
|
-
| 导出 | 红级诊断会拦截;黄级可选择继续。对话框内可下载 STL/3MF,或一键上传 |
|
|
148
|
-
| 审核报告 | 体积、包围盒、校验与测量;可下 JSON/HTML;无红级时可本地标「可打印」 |
|
|
149
|
-
|
|
150
|
-
**观察(不改网格)**
|
|
151
|
-
|
|
152
|
-
| 项 | 说明 |
|
|
153
|
-
|----|------|
|
|
154
|
-
| 复位视角 | 相机回到默认朝向与距离,不改零件姿态。画布 **双击** 或 **F** 是按模型自适应取景,与复位不同 |
|
|
155
|
-
| 实体 / 线框 / 半透明 / 法线 | 仅改变显示,不改变几何 |
|
|
156
|
-
| 壁厚热力图 | 按设置中的最小壁厚给顶点着色,便于看薄壁 |
|
|
157
|
-
| 剖切 | 画布出现高度滑条,按 Y 切开看内部。与左栏 **切割 +Y**(真裁掉底座)不是同一功能 |
|
|
116
|
+
### 导出
|
|
158
117
|
|
|
159
|
-
|
|
118
|
+
- **STL**:二进制;无单位字段,切片软件需与导出单位一致(推荐毫米)。单零件 `.stl`,多零件 `.zip`(每件一个 STL)
|
|
119
|
+
- **3MF**:自带毫米单位;每零件单独 object
|
|
160
120
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
**右侧(随时可用)**
|
|
164
|
-
|
|
165
|
-
| 项 | 说明 |
|
|
166
|
-
|----|------|
|
|
167
|
-
| 草稿 | 命名保存 / 打开 / 删除;Ctrl+S 另有自动草稿 |
|
|
168
|
-
| 设置 | 默认导入单位、默认导出格式、网格/灯光/包围盒、最小壁厚 |
|
|
169
|
-
| 帮助 | 教程与快捷键,可重看引导 |
|
|
170
|
-
|
|
171
|
-
## 变换与零件
|
|
172
|
-
|
|
173
|
-
- 工具 **1 / 2 / 3**:移动、旋转、缩放;画布上拖手柄
|
|
174
|
-
- **打印拆件**:左栏放置切面,移动/旋转后确认。沿同一平面拆成两块(默认锯缝 0 mm)。可选球形/方形卡扣:正侧挖卯、负侧加榫,原位互补对插。须先是封闭实体;与「拆分碎片」不同
|
|
175
|
-
- **轴向吸附(Shift)**:移动 1 mm、旋转 15°、缩放 0.1;勾选则常开
|
|
176
|
-
- **数值变换**:位移(mm)、欧拉角(度,XYZ 序)、缩放;点「应用数值」写入当前零件
|
|
177
|
-
- **Ctrl** 点选 / 框选;右键菜单:显隐、复制、删除、合并所选
|
|
178
|
-
- 可添加立方体 / 圆柱 / 球 / 棱柱,再做并集、差集、交集(先预览,再确认精算)
|
|
179
|
-
|
|
180
|
-
## 诊断与修复
|
|
181
|
-
|
|
182
|
-
导入后自动体检(封闭、流形、薄壁等)。点诊断飞到开边、薄壁等位置。
|
|
183
|
-
|
|
184
|
-
**一键修复**:红为修复前、绿为修复后,确认才保留。破洞过多可先 **拆分碎片** 或 **简化对拍**。
|
|
185
|
-
|
|
186
|
-
**打印拆件**:左栏放置切面并确认,Manifold 按平面裁成两块(可设锯缝)。可选球形/方形卡扣(切口互补对插)。须水密。与顶栏剖切、切底座不是同一功能。
|
|
187
|
-
|
|
188
|
-
**切底座 / 切割 +Y**:按给定高度用 +Y 平面裁掉下方,便于贴床。
|
|
189
|
-
|
|
190
|
-
**简化对拍**:降低面数,红绿对比后确认或撤销。
|
|
191
|
-
|
|
192
|
-
顶栏 **剖切** 只改显示,不改网格。**壁厚热力图** 按设置里的最小壁厚着色。
|
|
193
|
-
|
|
194
|
-
## 测量
|
|
195
|
-
|
|
196
|
-
见上文「顶栏菜单 · 测量」。结果列在右栏。
|
|
197
|
-
|
|
198
|
-
## 导出与审核
|
|
199
|
-
|
|
200
|
-
- **STL**:二进制;轴向与当前导入或编辑后的网格一致。单个零件为 `.stl`;多个零件打包为 `.zip`(每件一个 STL),再导入可保持零件个数。STL 无单位字段,切片软件需与导出单位一致(推荐毫米)
|
|
201
|
-
- **3MF**:自带毫米单位;每个零件单独写成 object,导入时按对象拆开
|
|
202
|
-
- **一键上传**:生成与下载相同的文件后,以 `multipart/form-data` POST 到服务端预留接口(字段 `file`、`meta` JSON)。配置环境变量 `VITE_UPLOAD_URL`(参见 `.env.example`)后生效;未配置时提示接口已预留。
|
|
203
|
-
|
|
204
|
-
**审核报告**:体积、包围盒、校验与测量;可下载 JSON / HTML。无红级阻断时可本地标记为可打印。上传走同一预留接口。
|
|
205
|
-
|
|
206
|
-
## 草稿与设置
|
|
207
|
-
|
|
208
|
-
- **Ctrl+S**:自动草稿到浏览器本地
|
|
209
|
-
- **草稿**:命名保存 / 打开 / 删除
|
|
210
|
-
- **设置**:默认导入单位、默认导出格式、网格/灯光/包围盒、最小壁厚(mm)
|
|
211
|
-
|
|
212
|
-
## 快捷键
|
|
121
|
+
### 快捷键
|
|
213
122
|
|
|
214
123
|
| 按键 | 作用 |
|
|
215
124
|
|------|------|
|
|
216
125
|
| Ctrl+Z / Ctrl+Y | 撤销 / 重做 |
|
|
217
|
-
| Ctrl+S |
|
|
126
|
+
| Ctrl+S | 保存自动草稿(IndexedDB) |
|
|
218
127
|
| 1 / 2 / 3 | 移动 / 旋转 / 缩放 |
|
|
219
128
|
| Esc | 取消手柄、预览、测量 |
|
|
220
|
-
| F |
|
|
129
|
+
| F | 按模型自适应视角 |
|
|
221
130
|
| Shift | 变换吸附 |
|
|
222
131
|
| Ctrl | 多选、框选 |
|
|
223
132
|
|
|
224
|
-
|
|
133
|
+
草稿保存在浏览器本地。设置含默认导入单位、默认导出格式、网格/灯光、最小壁厚。
|
|
134
|
+
|
|
135
|
+
## 开发本仓库
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
npm install
|
|
139
|
+
npm run dev # 完整站,路径 /print-bench/
|
|
140
|
+
npm run build # SPA 静态资源(写入 dist/)
|
|
141
|
+
npm run build:lib # npm 库产物(写入 dist/,与 SPA 互斥覆盖)
|
|
142
|
+
npm test
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
发布前请使用 `npm run build:lib`,不要用 SPA 的 `build` 覆盖 `dist/`。
|