增加配件吸附功能

This commit is contained in:
2026-05-25 12:35:19 +08:00
parent 62eda81895
commit c6257883e5
6 changed files with 374 additions and 13 deletions

View File

@ -123,14 +123,7 @@ export class AppDropZone {
divisionsMap[item.name] = item.divisions;
});
// 定义方向关键字映射(支持中英文)
const directionKeywords: Record<string, string[]> = {
'前': ['前', 'front', 'qian'],
'后': ['后', 'back', 'hou'],
'左': ['左', 'left', 'zuo'],
'右': ['右', 'right', 'you']
};
// 匹配墙面名称(精确匹配)
const matchWallName = (wallName: string): number | null => {
// 提取墙面名称的最后部分(最后一个下划线之后)
@ -166,6 +159,11 @@ export class AppDropZone {
})
.filter(wall => wall !== null) as typeof this.dropZoneConfig.walls; // 过滤掉未配置的墙面
// 更新 wallDivisionsMap重要用于后续的自动排列和拖拽检查
this.dropZoneConfig.walls.forEach(wall => {
this.wallDivisionsMap.set(wall.name, wall.divisions);
});
// 清除旧的放置区域网格(不清除模型)
this.clearZones();
@ -419,7 +417,7 @@ export class AppDropZone {
if (this.appModel) {
// 计算新位置(从放置区域的中心点加上法线偏移)
const offsetDistance = 0.05;
const offsetDistance = 0; // 增加偏移距离,让模型更往外
const targetPosition = targetZone.center.add(targetZone.normal.scale(offsetDistance));
// 计算旋转角度(根据法线方向)
@ -510,6 +508,14 @@ export class AppDropZone {
this.placementWall.show();
}
/**
* 只显示指定墙面的放置区域
* @param wallName 墙面名称
*/
showWall(wallName: string): void {
this.placementWall.showWall(wallName);
}
/**
* 隐藏所有放置区域
*/