diff --git a/ScreenShot_2026-05-14_211724_525.png b/ScreenShot_2026-05-14_211724_525.png new file mode 100644 index 0000000..a5422af Binary files /dev/null and b/ScreenShot_2026-05-14_211724_525.png differ diff --git a/ScreenShot_2026-05-14_214732_699.png b/ScreenShot_2026-05-14_214732_699.png new file mode 100644 index 0000000..c77e161 Binary files /dev/null and b/ScreenShot_2026-05-14_214732_699.png differ diff --git a/ScreenShot_2026-05-14_225837_961.png b/ScreenShot_2026-05-14_225837_961.png new file mode 100644 index 0000000..87ce116 Binary files /dev/null and b/ScreenShot_2026-05-14_225837_961.png differ diff --git a/ScreenShot_2026-05-14_231715_439.png b/ScreenShot_2026-05-14_231715_439.png new file mode 100644 index 0000000..b1c96d2 Binary files /dev/null and b/ScreenShot_2026-05-14_231715_439.png differ diff --git a/ScreenShot_2026-05-14_232613_280.png b/ScreenShot_2026-05-14_232613_280.png new file mode 100644 index 0000000..3cb29f8 Binary files /dev/null and b/ScreenShot_2026-05-14_232613_280.png differ diff --git a/ScreenShot_2026-05-14_233850_275.png b/ScreenShot_2026-05-14_233850_275.png new file mode 100644 index 0000000..659489c Binary files /dev/null and b/ScreenShot_2026-05-14_233850_275.png differ diff --git a/index.html b/index.html index d85b98d..de80c03 100644 --- a/index.html +++ b/index.html @@ -859,8 +859,12 @@ // 只清除旧的放置区域网格,不清除模型 kernel.dropZone.clearZones(); - // 使用新的 API:只传入分割数量 - kernel.dropZone.generateDropZones(divisions); + // 如果传入了 divisions,使用统一分割数;否则使用每个墙面自己的分割数 + if (divisions !== undefined) { + kernel.dropZone.generateDropZones(divisions); + } else { + kernel.dropZone.generateDropZones(); + } // 显示放置区域 kernel.dropZone.show(); diff --git a/index.js b/index.js index d4fbf9a..9b95025 100644 --- a/index.js +++ b/index.js @@ -33,7 +33,7 @@ const models = data.data // 这就是模型列表 models.forEach(model => { console.log(model); - kernel.dropZone.setData(model.placement_zone); + // kernel.dropZone.setData(model.placement_zone); kernel.model.add({ modelId: model.id, modelUrl: model.file_url, diff --git a/src/babylonjs/AppDropZone.ts b/src/babylonjs/AppDropZone.ts index 3b21f2d..6ce8fe7 100644 --- a/src/babylonjs/AppDropZone.ts +++ b/src/babylonjs/AppDropZone.ts @@ -54,10 +54,10 @@ export class AppDropZone { /** * 生成放置区域 - * @param divisions 分割数量(必传) + * @param divisions 可选的统一分割数量,如果不传则使用每个墙面自己的 divisions * @param config 配置参数(可选,如果不传则使用 setData 设置的数据) */ - generateDropZones(divisions: number, config?: DropZoneConfig): PlacementZoneInfo[] { + generateDropZones(divisions?: number, config?: DropZoneConfig): PlacementZoneInfo[] { const finalConfig = config || this.dropZoneConfig; if (!finalConfig) { @@ -65,12 +65,13 @@ export class AppDropZone { return []; } - // 为所有墙面设置分割数,同时保留其他配置属性 + // 为墙面设置分割数 const configWithDivisions: DropZoneConfig = { ...finalConfig, // 保留所有配置属性(color, alpha, thickness, showBorder, borderColor) walls: finalConfig.walls.map(wall => ({ ...wall, - divisions: divisions + // 如果传入了统一的 divisions,使用它;否则使用墙面自己的 divisions;都没有则默认为 1 + divisions: divisions !== undefined ? divisions : (wall.divisions || 1) })) }; diff --git a/src/kernel/Adapter.ts b/src/kernel/Adapter.ts index e7722d8..167b723 100644 --- a/src/kernel/Adapter.ts +++ b/src/kernel/Adapter.ts @@ -260,6 +260,7 @@ export class KernelAdapter { endPoint: [number, number, number]; height: number; offset?: number; + divisions?: number; }>; color?: string; alpha?: number; @@ -305,7 +306,8 @@ export class KernelAdapter { startPoint: new Vector3(startPoint[0], startPoint[1], startPoint[2]), endPoint: new Vector3(endPoint[0], endPoint[1], endPoint[2]), height: parseFloat(wall.height), - offset: wall.offset ? parseFloat(wall.offset) : undefined + offset: wall.offset ? parseFloat(wall.offset) : undefined, + divisions: wall.divisions ? parseInt(wall.divisions) : undefined }; }).filter((wall: any) => wall !== null) // 过滤掉无效的墙面 }; @@ -314,11 +316,14 @@ export class KernelAdapter { }, /** * 生成放置区域(使用已存储的配置数据) - * @param divisions 分割数量 + * @param divisions 可选的统一分割数量,如果不传则使用每个墙面自己的 divisions * @example + * // 使用每个墙面自己的分割数 + * kernel.dropZone.generateDropZones(); + * // 或者统一设置所有墙面的分割数 * kernel.dropZone.generateDropZones(5); */ - generateDropZones: (divisions: number): any[] => { + generateDropZones: (divisions?: number): any[] => { return this.mainApp.appDropZone.generateDropZones(divisions); }, /**