This commit is contained in:
2026-05-14 23:59:54 +08:00
parent efc3951227
commit b41c3e80bf
10 changed files with 20 additions and 10 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

View File

@ -859,8 +859,12 @@
// 只清除旧的放置区域网格,不清除模型 // 只清除旧的放置区域网格,不清除模型
kernel.dropZone.clearZones(); kernel.dropZone.clearZones();
// 使用新的 API只传入分割数 // 如果传入了 divisions使用统一分割数否则使用每个墙面自己的分割数
kernel.dropZone.generateDropZones(divisions); if (divisions !== undefined) {
kernel.dropZone.generateDropZones(divisions);
} else {
kernel.dropZone.generateDropZones();
}
// 显示放置区域 // 显示放置区域
kernel.dropZone.show(); kernel.dropZone.show();

View File

@ -33,7 +33,7 @@ const models = data.data // 这就是模型列表
models.forEach(model => { models.forEach(model => {
console.log(model); console.log(model);
kernel.dropZone.setData(model.placement_zone); // kernel.dropZone.setData(model.placement_zone);
kernel.model.add({ kernel.model.add({
modelId: model.id, modelId: model.id,
modelUrl: model.file_url, modelUrl: model.file_url,

View File

@ -54,10 +54,10 @@ export class AppDropZone {
/** /**
* 生成放置区域 * 生成放置区域
* @param divisions 分割数量(必传) * @param divisions 可选的统一分割数量,如果不传则使用每个墙面自己的 divisions
* @param config 配置参数(可选,如果不传则使用 setData 设置的数据) * @param config 配置参数(可选,如果不传则使用 setData 设置的数据)
*/ */
generateDropZones(divisions: number, config?: DropZoneConfig): PlacementZoneInfo[] { generateDropZones(divisions?: number, config?: DropZoneConfig): PlacementZoneInfo[] {
const finalConfig = config || this.dropZoneConfig; const finalConfig = config || this.dropZoneConfig;
if (!finalConfig) { if (!finalConfig) {
@ -65,12 +65,13 @@ export class AppDropZone {
return []; return [];
} }
// 为所有墙面设置分割数,同时保留其他配置属性 // 为墙面设置分割数
const configWithDivisions: DropZoneConfig = { const configWithDivisions: DropZoneConfig = {
...finalConfig, // 保留所有配置属性color, alpha, thickness, showBorder, borderColor ...finalConfig, // 保留所有配置属性color, alpha, thickness, showBorder, borderColor
walls: finalConfig.walls.map(wall => ({ walls: finalConfig.walls.map(wall => ({
...wall, ...wall,
divisions: divisions // 如果传入了统一的 divisions使用它否则使用墙面自己的 divisions都没有则默认为 1
divisions: divisions !== undefined ? divisions : (wall.divisions || 1)
})) }))
}; };

View File

@ -260,6 +260,7 @@ export class KernelAdapter {
endPoint: [number, number, number]; endPoint: [number, number, number];
height: number; height: number;
offset?: number; offset?: number;
divisions?: number;
}>; }>;
color?: string; color?: string;
alpha?: number; alpha?: number;
@ -305,7 +306,8 @@ export class KernelAdapter {
startPoint: new Vector3(startPoint[0], startPoint[1], startPoint[2]), startPoint: new Vector3(startPoint[0], startPoint[1], startPoint[2]),
endPoint: new Vector3(endPoint[0], endPoint[1], endPoint[2]), endPoint: new Vector3(endPoint[0], endPoint[1], endPoint[2]),
height: parseFloat(wall.height), 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) // 过滤掉无效的墙面 }).filter((wall: any) => wall !== null) // 过滤掉无效的墙面
}; };
@ -314,11 +316,14 @@ export class KernelAdapter {
}, },
/** /**
* 生成放置区域(使用已存储的配置数据) * 生成放置区域(使用已存储的配置数据)
* @param divisions 分割数量 * @param divisions 可选的统一分割数量,如果不传则使用每个墙面自己的 divisions
* @example * @example
* // 使用每个墙面自己的分割数
* kernel.dropZone.generateDropZones();
* // 或者统一设置所有墙面的分割数
* kernel.dropZone.generateDropZones(5); * kernel.dropZone.generateDropZones(5);
*/ */
generateDropZones: (divisions: number): any[] => { generateDropZones: (divisions?: number): any[] => {
return this.mainApp.appDropZone.generateDropZones(divisions); return this.mainApp.appDropZone.generateDropZones(divisions);
}, },
/** /**