Major improvements to AGV navigation system: • Consolidated RFID management into MapNode, removing duplicate RfidMapping class • Enhanced MapNode with RFID metadata fields (RfidStatus, RfidDescription) • Added automatic bidirectional connection generation in pathfinding algorithms • Updated all components to use unified MapNode-based RFID system • Added command line argument support for AGVMapEditor auto-loading files • Fixed pathfinding failures by ensuring proper node connectivity Technical changes: - Removed RfidMapping class and dependencies across all projects - Updated AStarPathfinder with EnsureBidirectionalConnections() method - Modified MapLoader to use AssignAutoRfidIds() for RFID automation - Enhanced UnifiedAGVCanvas, SimulatorForm, and MainForm for MapNode integration - Improved data consistency and reduced memory footprint 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
107 lines
3.2 KiB
C#
107 lines
3.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace AGVNavigationCore.PathFinding
|
|
{
|
|
/// <summary>
|
|
/// 경로 계산 결과
|
|
/// </summary>
|
|
public class PathResult
|
|
{
|
|
/// <summary>
|
|
/// 경로 찾기 성공 여부
|
|
/// </summary>
|
|
public bool Success { get; set; }
|
|
|
|
/// <summary>
|
|
/// 경로 노드 ID 목록 (시작 → 목적지 순서)
|
|
/// </summary>
|
|
public List<string> Path { get; set; }
|
|
|
|
/// <summary>
|
|
/// 총 거리
|
|
/// </summary>
|
|
public float TotalDistance { get; set; }
|
|
|
|
/// <summary>
|
|
/// 계산 소요 시간 (밀리초)
|
|
/// </summary>
|
|
public long CalculationTimeMs { get; set; }
|
|
|
|
/// <summary>
|
|
/// 탐색한 노드 수
|
|
/// </summary>
|
|
public int ExploredNodeCount { get; set; }
|
|
|
|
/// <summary>
|
|
/// 오류 메시지 (실패시)
|
|
/// </summary>
|
|
public string ErrorMessage { get; set; }
|
|
|
|
/// <summary>
|
|
/// 기본 생성자
|
|
/// </summary>
|
|
public PathResult()
|
|
{
|
|
Success = false;
|
|
Path = new List<string>();
|
|
TotalDistance = 0;
|
|
CalculationTimeMs = 0;
|
|
ExploredNodeCount = 0;
|
|
ErrorMessage = string.Empty;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 성공 결과 생성
|
|
/// </summary>
|
|
/// <param name="path">경로</param>
|
|
/// <param name="totalDistance">총 거리</param>
|
|
/// <param name="calculationTimeMs">계산 시간</param>
|
|
/// <param name="exploredNodeCount">탐색 노드 수</param>
|
|
/// <returns>성공 결과</returns>
|
|
public static PathResult CreateSuccess(List<string> path, float totalDistance, long calculationTimeMs, int exploredNodeCount)
|
|
{
|
|
return new PathResult
|
|
{
|
|
Success = true,
|
|
Path = new List<string>(path),
|
|
TotalDistance = totalDistance,
|
|
CalculationTimeMs = calculationTimeMs,
|
|
ExploredNodeCount = exploredNodeCount
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// 실패 결과 생성
|
|
/// </summary>
|
|
/// <param name="errorMessage">오류 메시지</param>
|
|
/// <param name="calculationTimeMs">계산 시간</param>
|
|
/// <param name="exploredNodeCount">탐색 노드 수</param>
|
|
/// <returns>실패 결과</returns>
|
|
public static PathResult CreateFailure(string errorMessage, long calculationTimeMs, int exploredNodeCount)
|
|
{
|
|
return new PathResult
|
|
{
|
|
Success = false,
|
|
ErrorMessage = errorMessage,
|
|
CalculationTimeMs = calculationTimeMs,
|
|
ExploredNodeCount = exploredNodeCount
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// 문자열 표현
|
|
/// </summary>
|
|
public override string ToString()
|
|
{
|
|
if (Success)
|
|
{
|
|
return $"Success: {Path.Count} nodes, {TotalDistance:F1}px, {CalculationTimeMs}ms";
|
|
}
|
|
else
|
|
{
|
|
return $"Failed: {ErrorMessage}, {CalculationTimeMs}ms";
|
|
}
|
|
}
|
|
}
|
|
} |