1
This commit is contained in:
BIN
ScreenShot_2026-05-16_144953_084.png
Normal file
BIN
ScreenShot_2026-05-16_144953_084.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 244 KiB |
BIN
ScreenShot_2026-05-16_154304_965.png
Normal file
BIN
ScreenShot_2026-05-16_154304_965.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 152 KiB |
25
index.html
25
index.html
@ -509,11 +509,13 @@
|
||||
if (result.code === 200) {
|
||||
console.log(result.data);
|
||||
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;
|
||||
if (enable_placement_zone && placement_zone != undefined) {
|
||||
if (enable_placement_zone && wall_divisions != undefined) {
|
||||
// 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.updateDivisions({
|
||||
"前": 4,
|
||||
"后": 1,
|
||||
"左": 1,
|
||||
"右": 1
|
||||
});
|
||||
|
||||
const divisions = walls.map(wall => ({
|
||||
name: wall.name, // 获取最后一个下划线后的部分
|
||||
divisions: wall.divisions
|
||||
}))
|
||||
console.log(divisions);
|
||||
|
||||
kernel.dropZone.updateDivisions(divisions);
|
||||
// 显示放置区域
|
||||
kernel.dropZone.show();
|
||||
dropZoneVisible = true;
|
||||
|
||||
@ -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) {
|
||||
console.error('未设置放置区域配置数据,请先调用 setData');
|
||||
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 => ({
|
||||
...wall,
|
||||
divisions: divisions[wall.name] !== undefined ? divisions[wall.name] : wall.divisions || 1
|
||||
}));
|
||||
this.dropZoneConfig.walls = this.dropZoneConfig.walls.map(wall => {
|
||||
const direction = matchDirection(wall.name);
|
||||
const newDivisions = direction && divisionsMap[direction] !== undefined
|
||||
? divisionsMap[direction]
|
||||
: wall.divisions || 1;
|
||||
|
||||
console.log(`墙面 "${wall.name}" 匹配到方向: ${direction}, 分割数: ${newDivisions}`);
|
||||
|
||||
return {
|
||||
...wall,
|
||||
divisions: newDivisions
|
||||
};
|
||||
});
|
||||
|
||||
// 清除旧的放置区域网格(不清除模型)
|
||||
this.clearZones();
|
||||
|
||||
@ -325,11 +325,16 @@ export class KernelAdapter {
|
||||
},
|
||||
/**
|
||||
* 更新墙面分割数并重新生成放置区域
|
||||
* @param divisions 分割数对象,key 为墙面名称,value 为分割数
|
||||
* @param divisions 分割数数组,每个元素包含 name(方向标识:前/后/左/右)和 divisions(分割数)
|
||||
* @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);
|
||||
},
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user