customforge 0.1.0-alpha.2 → 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/CHANGELOG.md +91 -56
- package/LICENSES/NunitoSans-OFL.txt +93 -93
- package/LICENSES/plain-mug-CC-BY-4.0.txt +11 -0
- package/README.md +592 -461
- package/README.zh-CN.md +587 -459
- package/dist/{ProductCustomizer-rMRyWe7L.js → ProductCustomizer-BnjY3v7d.js} +898 -156
- package/dist/ProductCustomizer-BnjY3v7d.js.map +1 -0
- package/dist/bridge/TextureBridge.d.ts +1 -1
- package/dist/core/api.d.ts +94 -0
- package/dist/core/api.d.ts.map +1 -0
- package/dist/core/config.d.ts +3 -12
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/design.d.ts.map +1 -1
- package/dist/core/types.d.ts +183 -5
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/uv.d.ts +8 -0
- package/dist/core/uv.d.ts.map +1 -0
- package/dist/cup_decal_small_margins.glb +0 -0
- package/dist/customizer/ProductCustomizer.d.ts +98 -9
- package/dist/customizer/ProductCustomizer.d.ts.map +1 -1
- package/dist/editor/DesignEditor.d.ts +118 -10
- package/dist/editor/DesignEditor.d.ts.map +1 -1
- package/dist/editor/uvBounds.d.ts +15 -0
- package/dist/editor/uvBounds.d.ts.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/style.css +2120 -1327
- package/dist/viewer/ProductViewer.d.ts +37 -6
- package/dist/viewer/ProductViewer.d.ts.map +1 -1
- package/dist/viewer/uvLayout.d.ts +11 -0
- package/dist/viewer/uvLayout.d.ts.map +1 -0
- package/dist/workbench/CustomForgeWorkbench.d.ts +85 -8
- package/dist/workbench/CustomForgeWorkbench.d.ts.map +1 -1
- package/dist/workbench/config.d.ts +42 -1
- package/dist/workbench/config.d.ts.map +1 -1
- package/dist/workbench/icons.d.ts.map +1 -1
- package/dist/workbench/index.d.ts +3 -3
- package/dist/workbench/index.d.ts.map +1 -1
- package/dist/workbench/template.d.ts.map +1 -1
- package/dist/workbench/types.d.ts +261 -13
- package/dist/workbench/types.d.ts.map +1 -1
- package/dist/workbench.js +1248 -116
- package/dist/workbench.js.map +1 -1
- package/package.json +27 -20
- package/dist/ProductCustomizer-rMRyWe7L.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Canvas
|
|
2
|
-
import type { AddImageOptions, AddTextOptions, DesignDocument, DesignObject, HistoryState } from '../core/types';
|
|
1
|
+
import { Canvas } from 'fabric';
|
|
2
|
+
import type { AddImageOptions, AddTextOptions, CanvasBounds, DesignCanvas as DesignCanvasSize, DesignDocument, DesignObject, EditorAppearance, HistoryState, ImageDesignObject, TextDesignObject, UpdateObjectTransformOptions, UpdateTextOptions } from '../core/types';
|
|
3
|
+
import type { UvLayout } from '../core/uv';
|
|
3
4
|
/** 二维编辑器内部初始化配置 */
|
|
4
5
|
interface DesignEditorOptions {
|
|
5
6
|
/** 画布逻辑宽度,单位为像素 */
|
|
@@ -8,6 +9,18 @@ interface DesignEditorOptions {
|
|
|
8
9
|
height: number;
|
|
9
10
|
/** 最多保留的撤销步骤数量 */
|
|
10
11
|
historyLimit: number;
|
|
12
|
+
/** 编辑画布的无障碍名称 */
|
|
13
|
+
ariaLabel?: string;
|
|
14
|
+
/** 未提供内容时添加到画布的默认文字 */
|
|
15
|
+
defaultText?: string;
|
|
16
|
+
/** 空文字对象的默认名称 */
|
|
17
|
+
textObjectName?: string;
|
|
18
|
+
/** 普通图片对象的默认名称 */
|
|
19
|
+
imageObjectName?: string;
|
|
20
|
+
/** 背景图片对象的默认名称 */
|
|
21
|
+
backgroundObjectName?: string;
|
|
22
|
+
/** 选择框、对象控制点和 UV 辅助层外观 */
|
|
23
|
+
appearance?: EditorAppearance;
|
|
11
24
|
}
|
|
12
25
|
type RenderListener = () => void;
|
|
13
26
|
type SelectionListener = (objectIds: string[]) => void;
|
|
@@ -15,7 +28,7 @@ type HistoryListener = (state: HistoryState) => void;
|
|
|
15
28
|
/**
|
|
16
29
|
* 基于 Fabric.js 的二维纹理编辑器
|
|
17
30
|
*
|
|
18
|
-
*
|
|
31
|
+
* 负责基础纹理、UV 区域辅助层、文字、图片、对象选择和 PNG 导出
|
|
19
32
|
* 显示尺寸可以响应容器变化,内部逻辑尺寸保持不变
|
|
20
33
|
*/
|
|
21
34
|
export declare class DesignEditor {
|
|
@@ -24,6 +37,12 @@ export declare class DesignEditor {
|
|
|
24
37
|
private readonly host;
|
|
25
38
|
private readonly width;
|
|
26
39
|
private readonly height;
|
|
40
|
+
private readonly defaultText;
|
|
41
|
+
private readonly textObjectName;
|
|
42
|
+
private readonly imageObjectName;
|
|
43
|
+
private readonly backgroundObjectName;
|
|
44
|
+
private readonly appearance;
|
|
45
|
+
private editableBounds;
|
|
27
46
|
private readonly renderListeners;
|
|
28
47
|
private readonly selectionListeners;
|
|
29
48
|
private readonly historyListeners;
|
|
@@ -36,17 +55,29 @@ export declare class DesignEditor {
|
|
|
36
55
|
private readonly imageRoles;
|
|
37
56
|
private readonly resizeObserver;
|
|
38
57
|
private readonly history;
|
|
58
|
+
private readonly uvOverlay;
|
|
59
|
+
private readonly textureRenderer;
|
|
60
|
+
private readonly textureCanvasElement;
|
|
61
|
+
private readonly textureContext;
|
|
39
62
|
private historySignature;
|
|
40
63
|
private historyTimer?;
|
|
41
64
|
private historyBusy;
|
|
65
|
+
private renderingTexture;
|
|
42
66
|
private objectIdSequence;
|
|
43
67
|
/**
|
|
44
68
|
* @param host 二维编辑器挂载容器
|
|
45
69
|
* @param options 画布逻辑尺寸和历史容量
|
|
46
70
|
*/
|
|
47
71
|
constructor(host: HTMLElement, options: DesignEditorOptions);
|
|
48
|
-
/** 供 Three.js 创建 CanvasTexture
|
|
72
|
+
/** 供 Three.js 创建 CanvasTexture 的纯设计画布,不包含选择框和变换控件 */
|
|
49
73
|
get textureCanvas(): HTMLCanvasElement;
|
|
74
|
+
/**
|
|
75
|
+
* 在交互画布上显示目标 Mesh 的 UV 可打印区域,但不写入实时纹理或导出图片
|
|
76
|
+
*
|
|
77
|
+
* @param layout 从当前目标 Mesh 提取的 UV 布局
|
|
78
|
+
* @param flipY 是否按照垂直翻转后的纹理方向显示
|
|
79
|
+
*/
|
|
80
|
+
setUvLayout(layout: UvLayout, flipY: boolean): void;
|
|
50
81
|
/** 当前画布中设计对象的数量,不包含产品基础纹理 */
|
|
51
82
|
get objectCount(): number;
|
|
52
83
|
/**
|
|
@@ -80,6 +111,10 @@ export declare class DesignEditor {
|
|
|
80
111
|
* @returns 按画布层级从后到前排列的对象数组
|
|
81
112
|
*/
|
|
82
113
|
getObjects(): DesignObject[];
|
|
114
|
+
/** 返回当前逻辑画布尺寸 */
|
|
115
|
+
getCanvasSize(): DesignCanvasSize;
|
|
116
|
+
/** 返回当前 UV 可打印区域的独立包围框 */
|
|
117
|
+
getPrintableBounds(): CanvasBounds;
|
|
83
118
|
/** 当前选中对象的 ID,按画布层级从后到前排列 */
|
|
84
119
|
getSelectedObjectIds(): string[];
|
|
85
120
|
/**
|
|
@@ -89,6 +124,21 @@ export declare class DesignEditor {
|
|
|
89
124
|
* @returns 是否找到并选中了对象
|
|
90
125
|
*/
|
|
91
126
|
selectObject(id: string): boolean;
|
|
127
|
+
/**
|
|
128
|
+
* 按稳定 ID 同时选中多个可见对象
|
|
129
|
+
*
|
|
130
|
+
* 所有 ID 都必须有效且对象可见,否则保持原选区不变
|
|
131
|
+
*
|
|
132
|
+
* @param ids 对象 ID,空数组表示清除选区
|
|
133
|
+
* @returns 是否应用了请求的选区
|
|
134
|
+
*/
|
|
135
|
+
selectObjects(ids: readonly string[]): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* 清除当前画布选区,不修改设计内容或历史记录
|
|
138
|
+
*
|
|
139
|
+
* @returns 清除前是否存在选中对象
|
|
140
|
+
*/
|
|
141
|
+
clearSelection(): boolean;
|
|
92
142
|
/**
|
|
93
143
|
* 按稳定 ID 删除一个对象
|
|
94
144
|
*
|
|
@@ -104,6 +154,15 @@ export declare class DesignEditor {
|
|
|
104
154
|
* @returns 对象层级是否发生变化
|
|
105
155
|
*/
|
|
106
156
|
moveObject(id: string, index: number): boolean;
|
|
157
|
+
/**
|
|
158
|
+
* 将现有图片转换为铺满当前 UV 可打印区域的设计背景
|
|
159
|
+
*
|
|
160
|
+
* 转换会替换已有设计背景、重置旋转、锁定对象并移动到最底层
|
|
161
|
+
*
|
|
162
|
+
* @param id Design JSON 中的图片对象 ID
|
|
163
|
+
* @returns 是否找到普通图片并完成转换
|
|
164
|
+
*/
|
|
165
|
+
setImageAsBackground(id: string): boolean;
|
|
107
166
|
/**
|
|
108
167
|
* 修改对象在图层面板中的名称
|
|
109
168
|
*
|
|
@@ -129,7 +188,37 @@ export declare class DesignEditor {
|
|
|
129
188
|
*/
|
|
130
189
|
setObjectLocked(id: string, locked: boolean): boolean;
|
|
131
190
|
/**
|
|
132
|
-
*
|
|
191
|
+
* 更新对象中心位置、缩放、旋转和翻转
|
|
192
|
+
*
|
|
193
|
+
* 对象最终仍会约束在逻辑画布内,连续调用会合并为一个历史步骤
|
|
194
|
+
*
|
|
195
|
+
* @param id Design JSON 中的对象 ID
|
|
196
|
+
* @param options 要更新的变换字段
|
|
197
|
+
* @returns 约束后的对象快照,找不到对象时返回 undefined
|
|
198
|
+
* @throws 数值无效或缩放倍数不大于零时抛出错误
|
|
199
|
+
*/
|
|
200
|
+
updateObjectTransform(id: string, options: UpdateObjectTransformOptions): DesignObject | undefined;
|
|
201
|
+
/**
|
|
202
|
+
* 修改已有文字对象的内容和排版样式
|
|
203
|
+
*
|
|
204
|
+
* 连续调用会在短暂空闲后合并为一个历史步骤
|
|
205
|
+
* 字体必须由消费页面提前加载,否则浏览器会使用回退字体
|
|
206
|
+
*
|
|
207
|
+
* @param id Design JSON 中的对象 ID
|
|
208
|
+
* @param options 要修改的文字属性,未传字段保持不变
|
|
209
|
+
* @returns 是否找到并更新了文字对象
|
|
210
|
+
* @throws 字号、行高、字距、字重或 CSS 颜色不符合约束时抛出错误
|
|
211
|
+
*/
|
|
212
|
+
updateText(id: string, options: UpdateTextOptions): boolean;
|
|
213
|
+
/**
|
|
214
|
+
* 让一个未锁定文字对象进入画布内联编辑状态
|
|
215
|
+
*
|
|
216
|
+
* @param id Design JSON 中的对象 ID
|
|
217
|
+
* @returns 是否找到文字对象并进入编辑状态
|
|
218
|
+
*/
|
|
219
|
+
editText(id: string): boolean;
|
|
220
|
+
/**
|
|
221
|
+
* 设置铺满画布的基础纹理,不传地址时恢复透明背景
|
|
133
222
|
*
|
|
134
223
|
* 背景纹理不参与对象选择,但会包含在实时纹理和 PNG 导出中
|
|
135
224
|
*
|
|
@@ -144,22 +233,22 @@ export declare class DesignEditor {
|
|
|
144
233
|
* 对象过大时会等比缩小,越界时会自动移回画布
|
|
145
234
|
*
|
|
146
235
|
* @param options 文字内容、位置和样式
|
|
147
|
-
* @returns
|
|
236
|
+
* @returns 创建后的可持久化文字对象快照
|
|
148
237
|
*/
|
|
149
|
-
addText(options?: AddTextOptions):
|
|
238
|
+
addText(options?: AddTextOptions): TextDesignObject;
|
|
150
239
|
/**
|
|
151
240
|
* 加载、添加并选中一个图片对象
|
|
152
241
|
*
|
|
153
|
-
* role 为 background
|
|
242
|
+
* role 为 background 时替换已有设计背景、铺满当前 UV 可打印区域并默认锁定在最底层
|
|
154
243
|
* 图片位置使用画布像素坐标,原点位于图片中心
|
|
155
244
|
* 对象过大时会等比缩小,越界时会自动移回画布
|
|
156
245
|
* 远程图片必须提供正确的 CORS 响应头才能安全导出 PNG
|
|
157
246
|
*
|
|
158
247
|
* @param options 图片地址、中心位置和显示宽度
|
|
159
|
-
* @returns
|
|
248
|
+
* @returns 创建后的可持久化图片对象快照
|
|
160
249
|
* @throws 图片加载失败或被 CORS 策略阻止时抛出错误
|
|
161
250
|
*/
|
|
162
|
-
addImage(options: AddImageOptions): Promise<
|
|
251
|
+
addImage(options: AddImageOptions): Promise<ImageDesignObject>;
|
|
163
252
|
/**
|
|
164
253
|
* 返回与 Fabric.js 无关的当前设计快照
|
|
165
254
|
*
|
|
@@ -206,6 +295,20 @@ export declare class DesignEditor {
|
|
|
206
295
|
* @throws 画布被无 CORS 授权的远程图片污染时抛出安全错误
|
|
207
296
|
*/
|
|
208
297
|
exportTexture(filename?: string): void;
|
|
298
|
+
/**
|
|
299
|
+
* 返回不含选择框和 UV 辅助层的 PNG Data URL
|
|
300
|
+
*
|
|
301
|
+
* @returns 与逻辑画布同尺寸的 PNG Data URL
|
|
302
|
+
* @throws 远程图片污染 Canvas 时抛出安全错误
|
|
303
|
+
*/
|
|
304
|
+
getTextureDataUrl(): string;
|
|
305
|
+
/**
|
|
306
|
+
* 异步返回不含选择框和 UV 辅助层的 PNG Blob
|
|
307
|
+
*
|
|
308
|
+
* @returns 与逻辑画布同尺寸的 PNG Blob
|
|
309
|
+
* @throws 远程图片污染 Canvas 或浏览器无法编码时抛出错误
|
|
310
|
+
*/
|
|
311
|
+
getTextureBlob(): Promise<Blob>;
|
|
209
312
|
/** 释放 ResizeObserver、事件监听和 Fabric Canvas */
|
|
210
313
|
destroy(): void;
|
|
211
314
|
private addAndSelect;
|
|
@@ -226,6 +329,11 @@ export declare class DesignEditor {
|
|
|
226
329
|
private notifyHistoryChange;
|
|
227
330
|
private constrainObjectToCanvas;
|
|
228
331
|
private resizeDisplay;
|
|
332
|
+
private applySelection;
|
|
333
|
+
private objectControlAppearance;
|
|
334
|
+
private validateTransformOptions;
|
|
335
|
+
private fitImageToEditableBounds;
|
|
336
|
+
private renderTextureCanvas;
|
|
229
337
|
private markRenderState;
|
|
230
338
|
}
|
|
231
339
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DesignEditor.d.ts","sourceRoot":"","sources":["../../src/editor/DesignEditor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"DesignEditor.d.ts","sourceRoot":"","sources":["../../src/editor/DesignEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EAKP,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,YAAY,IAAI,gBAAgB,EAEhC,cAAc,EACd,YAAY,EAEZ,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EAEjB,gBAAgB,EAGhB,4BAA4B,EAC5B,iBAAiB,EAClB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA0C1C,mBAAmB;AACnB,UAAU,mBAAmB;IAC3B,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAA;IAEb,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAA;IAEd,kBAAkB;IAClB,YAAY,EAAE,MAAM,CAAA;IAEpB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,iBAAiB;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,kBAAkB;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,kBAAkB;IAClB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B,0BAA0B;IAC1B,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAC9B;AAED,KAAK,cAAc,GAAG,MAAM,IAAI,CAAA;AAChC,KAAK,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;AACtD,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;AAiBpD;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAEvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4B;IACvD,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4B;IAC5D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA+B;IAClE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8C;IACzE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAmB;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,YAAY,CAAC,CAA+B;IACpD,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,gBAAgB,CAAI;IAE5B;;;OAGG;IACH,YAAY,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EA0F1D;IAED,qDAAqD;IACrD,IAAI,aAAa,IAAI,iBAAiB,CAErC;IAED;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAwElD;IAED,6BAA6B;IAC7B,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI,CAG7C;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAGzD;IAED;;;;;OAKG;IACH,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,IAAI,CAGrD;IAED,sBAAsB;IACtB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,sBAAsB;IACtB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;OAIG;IACH,UAAU,IAAI,YAAY,EAAE,CAE3B;IAED,iBAAiB;IACjB,aAAa,IAAI,gBAAgB,CAEhC;IAED,0BAA0B;IAC1B,kBAAkB,IAAI,YAAY,CAEjC;IAED,6BAA6B;IAC7B,oBAAoB,IAAI,MAAM,EAAE,CAK/B;IAED;;;;;OAKG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEhC;IAED;;;;;;;OAOG;IACH,aAAa,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAe7C;IAED;;;;OAIG;IACH,cAAc,IAAI,OAAO,CASxB;IAED;;;;;OAKG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAiBhC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CA0B7C;IAED;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAoBxC;IAED;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAY9C;IAED;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAezD;IAED;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAWpD;IAED;;;;;;;;;OASG;IACH,qBAAqB,CACnB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,4BAA4B,GACpC,YAAY,GAAG,SAAS,CAmC1B;IAED;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAyF1D;IAED;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAiB5B;IAED;;;;;;;OAOG;IACG,oBAAoB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBtD;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,gBAAgB,CAwBtD;IAED;;;;;;;;;;;OAWG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyBnE;IAED;;;;;;;OAOG;IACH,UAAU,IAAI,cAAc,CAM3B;IAED;;;;;;;OAOG;IACG,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9C;YAEa,aAAa;IA2D3B;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAiB7B;IAED;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAiB7B;IAED,wBAAwB;IACxB,YAAY,IAAI,IAAI,CAMnB;IAED;;;;OAIG;IACH,cAAc,IAAI,OAAO,CAiBxB;IAED;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,SAAuB,GAAG,IAAI,CAKnD;IAED;;;;;OAKG;IACH,iBAAiB,IAAI,MAAM,CAG1B;IAED;;;;;OAKG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAW9B;IAED,4CAA4C;IAC5C,OAAO,IAAI,IAAI,CAad;IAED,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,eAAe;IAwDvB,OAAO,CAAC,kBAAkB;YAaZ,sBAAsB;IAsCpC,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,uBAAuB;IAwB/B,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,wBAAwB;IA4BhC,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,eAAe;CA4BxB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { UvLayout } from '../core/uv';
|
|
2
|
+
import type { ObjectBounds } from './objectBounds';
|
|
3
|
+
/**
|
|
4
|
+
* 将 UV 三角形的坐标范围转换为逻辑画布包围框
|
|
5
|
+
*
|
|
6
|
+
* UV 坐标会限制在 0 到 1 之间;布局为空、无效或退化时回退到整张画布
|
|
7
|
+
*
|
|
8
|
+
* @param layout 当前可打印 Mesh 的 UV 布局
|
|
9
|
+
* @param flipY 是否按照垂直翻转后的纹理方向计算
|
|
10
|
+
* @param canvasWidth 逻辑画布宽度
|
|
11
|
+
* @param canvasHeight 逻辑画布高度
|
|
12
|
+
* @returns 当前 UV 可打印区域在逻辑画布中的轴对齐包围框
|
|
13
|
+
*/
|
|
14
|
+
export declare function calculateUvCanvasBounds(layout: UvLayout, flipY: boolean, canvasWidth: number, canvasHeight: number): ObjectBounds;
|
|
15
|
+
//# sourceMappingURL=uvBounds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uvBounds.d.ts","sourceRoot":"","sources":["../../src/editor/uvBounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAMlD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,YAAY,CAmCd"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import './style.css';
|
|
2
2
|
import { ProductCustomizer } from './customizer/ProductCustomizer';
|
|
3
|
+
import type { ProductCustomizerApi } from './core/api';
|
|
3
4
|
import type { CustomizerOptions } from './core/types';
|
|
4
5
|
/**
|
|
5
6
|
* 创建产品定制器实例并完成模型、编辑器和纹理同步初始化
|
|
@@ -24,7 +25,8 @@ import type { CustomizerOptions } from './core/types';
|
|
|
24
25
|
* })
|
|
25
26
|
* ```
|
|
26
27
|
*/
|
|
27
|
-
export declare function createCustomizer(options: CustomizerOptions): Promise<
|
|
28
|
+
export declare function createCustomizer(options: CustomizerOptions): Promise<ProductCustomizerApi>;
|
|
28
29
|
export { ProductCustomizer };
|
|
29
|
-
export type {
|
|
30
|
+
export type { CustomizerEventListener, ProductCustomizerApi, } from './core/api';
|
|
31
|
+
export type { AddImageOptions, AddTextOptions, CanvasBounds, CustomizerAppearance, CustomizerEventMap, CustomizerEventName, CustomizerOptions, CustomizerState, DesignCanvas, DesignDocument, DesignImageRole, DesignObject, DesignObjectState, DesignObjectTransform, ElementTarget, ImageDesignObject, EditorAppearance, HistoryState, ProductConfiguration, ProductViewState, ResolvedProductConfiguration, TextAlignment, TextDesignObject, TextFontStyle, TextFontWeight, UpdateObjectTransformOptions, UpdateTextOptions, Vector3Value, ViewerAppearance, } from './core/types';
|
|
30
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAC5B,YAAY,EACV,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,4BAA4B,EAC5B,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,4BAA4B,EAC5B,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,MAAM,cAAc,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import './style.css'\
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import './style.css'\nimport { ProductCustomizer } from './customizer/ProductCustomizer'\nimport type { ProductCustomizerApi } from './core/api'\nimport type { CustomizerOptions } from './core/types'\n\n/**\n * 创建产品定制器实例并完成模型、编辑器和纹理同步初始化\n *\n * 仅支持浏览器环境,应在 DOM 挂载容器可用后调用\n * 编辑器和查看器必须使用两个不同的容器\n * 不再使用返回的实例时必须调用 `destroy()` 释放资源\n *\n * @param options 编辑器容器、查看器容器和产品资源配置\n * @returns 初始化完成的产品定制器实例\n * @throws DOM 容器不存在、两个容器相同、模型加载失败或目标 Mesh 不存在时抛出错误\n *\n * @example\n * ```ts\n * const customizer = await createCustomizer({\n * editor: '#editor',\n * viewer: '#viewer',\n * product: {\n * modelUrl: 'https://example.com/product.glb',\n * surfaceMesh: 'PrintArea',\n * },\n * })\n * ```\n */\nexport async function createCustomizer(\n options: CustomizerOptions,\n): Promise<ProductCustomizerApi> {\n return ProductCustomizer.create(options)\n}\n\nexport { ProductCustomizer }\nexport type {\n CustomizerEventListener,\n ProductCustomizerApi,\n} from './core/api'\nexport type {\n AddImageOptions,\n AddTextOptions,\n CanvasBounds,\n CustomizerAppearance,\n CustomizerEventMap,\n CustomizerEventName,\n CustomizerOptions,\n CustomizerState,\n DesignCanvas,\n DesignDocument,\n DesignImageRole,\n DesignObject,\n DesignObjectState,\n DesignObjectTransform,\n ElementTarget,\n ImageDesignObject,\n EditorAppearance,\n HistoryState,\n ProductConfiguration,\n ProductViewState,\n ResolvedProductConfiguration,\n TextAlignment,\n TextDesignObject,\n TextFontStyle,\n TextFontWeight,\n UpdateObjectTransformOptions,\n UpdateTextOptions,\n Vector3Value,\n ViewerAppearance,\n} from './core/types'\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,eAAsB,iBACpB,SAC+B;CAC/B,OAAO,kBAAkB,OAAO,OAAO;AACzC"}
|