fix: 노드 삭제 시 고아 연결 정리 기능 추가
주요 변경사항: - CleanupOrphanConnections() 함수 추가 - 저장 시 고아 연결 자동 정리 - 로드 시 고아 연결 자동 제거 - 경로 예측에서 삭제된 노드 연결 사용 방지 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -78,6 +78,9 @@ namespace AGVNavigationCore.Models
|
||||
// 중복된 NodeId 정리
|
||||
FixDuplicateNodeIds(result.Nodes);
|
||||
|
||||
// 존재하지 않는 노드에 대한 연결 정리 (고아 연결 제거)
|
||||
CleanupOrphanConnections(result.Nodes);
|
||||
|
||||
// 양방향 연결 자동 설정 (A→B가 있으면 B→A도 설정)
|
||||
// 주의: CleanupDuplicateConnections()는 제거됨 - 양방향 연결을 단방향으로 변환하는 버그가 있었음
|
||||
EnsureBidirectionalConnections(result.Nodes);
|
||||
@@ -113,6 +116,9 @@ namespace AGVNavigationCore.Models
|
||||
{
|
||||
try
|
||||
{
|
||||
// 저장 전 고아 연결 정리 (삭제된 노드에 대한 연결 제거)
|
||||
CleanupOrphanConnections(nodes);
|
||||
|
||||
var mapData = new MapFileData
|
||||
{
|
||||
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>
|
||||
/// [사용 중지됨] 중복 연결을 정리합니다. 양방향 중복 연결을 단일 연결로 통합합니다.
|
||||
/// 주의: 이 함수는 버그가 있어 사용 중지됨 - 양방향 연결을 단방향으로 변환하여 경로 탐색 실패 발생
|
||||
|
||||
Reference in New Issue
Block a user