This commit is contained in:
2026-05-16 15:48:04 +08:00
parent 25c193b35a
commit 98c1c46728
5 changed files with 71 additions and 21 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

View File

@ -509,11 +509,13 @@
if (result.code === 200) { if (result.code === 200) {
console.log(result.data); console.log(result.data);
sku = currentText; sku = currentText;
const { placement_zone, enable_placement_zone } = result.data; const { enable_placement_zone,wall_divisions } = result.data;
// const {position_x, position_y, position_z} = data; // const {position_x, position_y, position_z} = data;
if (enable_placement_zone && placement_zone != undefined) { if (enable_placement_zone && wall_divisions != undefined) {
// await initPlacementZoneConfig(placement_zone); // await initPlacementZoneConfig(placement_zone);
await placementWall(); console.log(wall_divisions);
await placementWall(wall_divisions);
} }
} }
@ -824,17 +826,16 @@
}; };
const placementWall = () => { const placementWall = (walls) => {
// 只清除旧的放置区域网格,不清除模型 // 只清除旧的放置区域网格,不清除模型
kernel.dropZone.clearZones(); kernel.dropZone.clearZones();
const divisions = walls.map(wall => ({
name: wall.name, // 获取最后一个下划线后的部分
divisions: wall.divisions
}))
console.log(divisions);
kernel.dropZone.updateDivisions({ kernel.dropZone.updateDivisions(divisions);
"前": 4,
"后": 1,
"左": 1,
"右": 1
});
// 显示放置区域 // 显示放置区域
kernel.dropZone.show(); kernel.dropZone.show();
dropZoneVisible = true; dropZoneVisible = true;

View File

@ -83,19 +83,63 @@ export class AppDropZone {
/** /**
* 更新墙面分割数并重新生成放置区域 * 更新墙面分割数并重新生成放置区域
* @param divisions 分割数对象key 为墙面名称value 为分割数,例如 { "前": 4, "后": 1, "左": 1, "右": 1 } * @param divisions 分割数数组,每个元素包含 name方向标识前/后/左/右)和 divisions分割数
* @example
* updateDivisions([
* { name: "前", divisions: 4 },
* { name: "后", divisions: 1 },
* { name: "左", divisions: 1 },
* { name: "右", divisions: 1 }
* ])
* 支持模糊匹配:墙面名称中包含"前"、"后"、"左"、"右"等关键字即可匹配
*/ */
updateDivisions(divisions: Record<string, number>): PlacementZoneInfo[] { updateDivisions(divisions: Array<{ name: string; divisions: number }>): PlacementZoneInfo[] {
if (!this.dropZoneConfig) { if (!this.dropZoneConfig) {
console.error('未设置放置区域配置数据,请先调用 setData'); console.error('未设置放置区域配置数据,请先调用 setData');
return []; return [];
} }
// 将数组转换为对象映射
const divisionsMap: Record<string, number> = {};
divisions.forEach(item => {
divisionsMap[item.name] = item.divisions;
});
// 定义方向关键字映射(支持中英文)
const directionKeywords: Record<string, string[]> = {
'前': ['前', 'front', 'qian'],
'后': ['后', 'back', 'hou'],
'左': ['左', 'left', 'zuo'],
'右': ['右', 'right', 'you']
};
// 匹配墙面名称到方向
const matchDirection = (wallName: string): string | null => {
const lowerName = wallName.toLowerCase();
for (const [direction, keywords] of Object.entries(directionKeywords)) {
for (const keyword of keywords) {
if (lowerName.includes(keyword.toLowerCase()) || wallName.includes(keyword)) {
return direction;
}
}
}
return null;
};
// 更新配置中的墙面分割数 // 更新配置中的墙面分割数
this.dropZoneConfig.walls = this.dropZoneConfig.walls.map(wall => ({ this.dropZoneConfig.walls = this.dropZoneConfig.walls.map(wall => {
...wall, const direction = matchDirection(wall.name);
divisions: divisions[wall.name] !== undefined ? divisions[wall.name] : wall.divisions || 1 const newDivisions = direction && divisionsMap[direction] !== undefined
})); ? divisionsMap[direction]
: wall.divisions || 1;
console.log(`墙面 "${wall.name}" 匹配到方向: ${direction}, 分割数: ${newDivisions}`);
return {
...wall,
divisions: newDivisions
};
});
// 清除旧的放置区域网格(不清除模型) // 清除旧的放置区域网格(不清除模型)
this.clearZones(); this.clearZones();

View File

@ -325,11 +325,16 @@ export class KernelAdapter {
}, },
/** /**
* 更新墙面分割数并重新生成放置区域 * 更新墙面分割数并重新生成放置区域
* @param divisions 分割数对象key 为墙面名称value 为分割数 * @param divisions 分割数数组,每个元素包含 name方向标识前/后/左/右)和 divisions分割数
* @example * @example
* kernel.dropZone.updateDivisions({ "前": 4, "后": 1, "左": 1, "右": 1 }); * kernel.dropZone.updateDivisions([
* { name: "前", divisions: 4 },
* { name: "后", divisions: 1 },
* { name: "左", divisions: 1 },
* { name: "右", divisions: 1 }
* ]);
*/ */
updateDivisions: (divisions: Record<string, number>): any[] => { updateDivisions: (divisions: Array<{ name: string; divisions: number }>): any[] => {
return this.mainApp.appDropZone.updateDivisions(divisions); return this.mainApp.appDropZone.updateDivisions(divisions);
}, },
/** /**