fix: 노드 삭제 시 고아 연결 정리 기능 추가

주요 변경사항:
- CleanupOrphanConnections() 함수 추가
- 저장 시 고아 연결 자동 정리
- 로드 시 고아 연결 자동 제거
- 경로 예측에서 삭제된 노드 연결 사용 방지

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
backuppc
2025-10-30 09:43:04 +09:00
parent 3f6db7113f
commit 34a804e538
2 changed files with 36 additions and 1 deletions

View File

@@ -78,6 +78,9 @@ namespace AGVNavigationCore.Models
// 중복된 NodeId 정리 // 중복된 NodeId 정리
FixDuplicateNodeIds(result.Nodes); FixDuplicateNodeIds(result.Nodes);
// 존재하지 않는 노드에 대한 연결 정리 (고아 연결 제거)
CleanupOrphanConnections(result.Nodes);
// 양방향 연결 자동 설정 (A→B가 있으면 B→A도 설정) // 양방향 연결 자동 설정 (A→B가 있으면 B→A도 설정)
// 주의: CleanupDuplicateConnections()는 제거됨 - 양방향 연결을 단방향으로 변환하는 버그가 있었음 // 주의: CleanupDuplicateConnections()는 제거됨 - 양방향 연결을 단방향으로 변환하는 버그가 있었음
EnsureBidirectionalConnections(result.Nodes); EnsureBidirectionalConnections(result.Nodes);
@@ -113,6 +116,9 @@ namespace AGVNavigationCore.Models
{ {
try try
{ {
// 저장 전 고아 연결 정리 (삭제된 노드에 대한 연결 제거)
CleanupOrphanConnections(nodes);
var mapData = new MapFileData var mapData = new MapFileData
{ {
Nodes = nodes, Nodes = nodes,
@@ -298,6 +304,35 @@ namespace AGVNavigationCore.Models
} }
} }
/// <summary>
/// 존재하지 않는 노드에 대한 연결을 정리합니다 (고아 연결 제거).
/// 노드 삭제 후 저장된 맵 파일에서 삭제된 노드 ID가 ConnectedNodes에 남아있는 경우를 처리합니다.
/// </summary>
/// <param name="mapNodes">맵 노드 목록</param>
private static void CleanupOrphanConnections(List<MapNode> mapNodes)
{
if (mapNodes == null || mapNodes.Count == 0) return;
// 존재하는 모든 노드 ID 집합 생성
var validNodeIds = new HashSet<string>(mapNodes.Select(n => n.NodeId));
// 각 노드의 연결을 검증하고 존재하지 않는 노드 ID 제거
foreach (var node in mapNodes)
{
if (node.ConnectedNodes == null || node.ConnectedNodes.Count == 0)
continue;
var orphanConnections = node.ConnectedNodes
.Where(connectedId => !validNodeIds.Contains(connectedId))
.ToList();
foreach (var orphanId in orphanConnections)
{
node.RemoveConnection(orphanId);
}
}
}
/// <summary> /// <summary>
/// [사용 중지됨] 중복 연결을 정리합니다. 양방향 중복 연결을 단일 연결로 통합합니다. /// [사용 중지됨] 중복 연결을 정리합니다. 양방향 중복 연결을 단일 연결로 통합합니다.
/// 주의: 이 함수는 버그가 있어 사용 중지됨 - 양방향 연결을 단방향으로 변환하여 경로 탐색 실패 발생 /// 주의: 이 함수는 버그가 있어 사용 중지됨 - 양방향 연결을 단방향으로 변환하여 경로 탐색 실패 발생

View File

@@ -1082,6 +1082,6 @@
"DisplayText": "N031 - [030]" "DisplayText": "N031 - [030]"
} }
], ],
"CreatedDate": "2025-10-30T09:30:01.9333244+09:00", "CreatedDate": "2025-10-30T09:37:03.9172219+09:00",
"Version": "1.0" "Version": "1.0"
} }