"feat:Enable-hover-highlight-and-refactor"
This commit is contained in:
@@ -427,7 +427,7 @@ namespace AGVSimulator.Forms
|
||||
if(targetNode.Type == NodeType.Buffer)
|
||||
{
|
||||
var lastDetailPath = advancedResult.DetailedPath.Last();
|
||||
if(lastDetailPath.NodeId == targetNode.NodeId) //마지막노드 재확인
|
||||
if(lastDetailPath.NodeId == targetNode.Id) //마지막노드 재확인
|
||||
{
|
||||
//버퍼에 도킹할때에는 마지막 노드에서 멈추고 시퀀스를 적용해야한다
|
||||
advancedResult.DetailedPath = advancedResult.DetailedPath.Take(advancedResult.DetailedPath.Count - 1).ToList();
|
||||
@@ -492,7 +492,7 @@ namespace AGVSimulator.Forms
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTargetNodeSelected(object sender, List<MapNode> selectedNodes)
|
||||
private void OnTargetNodeSelected(object sender, List<NodeBase> selectedNodes)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -511,9 +511,9 @@ namespace AGVSimulator.Forms
|
||||
if (selectedNode == null) return;
|
||||
|
||||
// 목적지를 선택된 노드로 설정
|
||||
SetTargetNodeInCombo(selectedNode.NodeId);
|
||||
SetTargetNodeInCombo(selectedNode.Id);
|
||||
|
||||
var displayText = GetDisplayName(selectedNode.NodeId);
|
||||
var displayText = GetDisplayName(selectedNode.Id);
|
||||
_statusLabel.Text = $"타겟계산 - 목적지: {displayText}";
|
||||
|
||||
// 자동으로 경로 계산 수행
|
||||
@@ -578,7 +578,7 @@ namespace AGVSimulator.Forms
|
||||
for (int i = 0; i < _startNodeCombo.Items.Count; i++)
|
||||
{
|
||||
var item = _startNodeCombo.Items[i].ToString();
|
||||
if (item.Contains($"[{closestNode.NodeId}]"))
|
||||
if (item.Contains($"[{closestNode.Id}]"))
|
||||
{
|
||||
_startNodeCombo.SelectedIndex = i;
|
||||
break;
|
||||
@@ -649,7 +649,7 @@ namespace AGVSimulator.Forms
|
||||
if (existingNode != null)
|
||||
{
|
||||
// 이미 존재하는 노드로 이동
|
||||
Program.WriteLine($"[맵 스캔] RFID '{rfidId}'는 이미 존재합니다 (노드: {existingNode.NodeId})");
|
||||
Program.WriteLine($"[맵 스캔] RFID '{rfidId}'는 이미 존재합니다 (노드: {existingNode.Id})");
|
||||
|
||||
// 기존 노드로 AGV 위치 설정
|
||||
_simulatorCanvas.SetAGVPosition(selectedAGV.AgvId, existingNode, currentDirection);
|
||||
@@ -659,7 +659,7 @@ namespace AGVSimulator.Forms
|
||||
_lastNodeAddTime = DateTime.Now;
|
||||
_lastScanDirection = currentDirection; // 방향 업데이트
|
||||
|
||||
_statusLabel.Text = $"기존 노드로 이동: {existingNode.NodeId} [{GetDirectionSymbol(currentDirection)}]";
|
||||
_statusLabel.Text = $"기존 노드로 이동: {existingNode.Id} [{GetDirectionSymbol(currentDirection)}]";
|
||||
_rfidTextBox.Text = "";
|
||||
return;
|
||||
}
|
||||
@@ -720,12 +720,11 @@ namespace AGVSimulator.Forms
|
||||
var newNodeId = $"{_scanNodeCounter:D3}";
|
||||
var newNode = new MapNode
|
||||
{
|
||||
NodeId = newNodeId,
|
||||
Id = newNodeId,
|
||||
RfidId = rfidId,
|
||||
Position = new Point(newX, newY),
|
||||
Type = NodeType.Normal,
|
||||
IsActive = true,
|
||||
Name = $"N{_scanNodeCounter}"
|
||||
IsActive = true
|
||||
};
|
||||
|
||||
// 맵에 추가
|
||||
@@ -738,10 +737,10 @@ namespace AGVSimulator.Forms
|
||||
if (_lastScannedNode != null)
|
||||
{
|
||||
// 양방향 연결 (ConnectedNodes에 추가 - JSON 저장됨)
|
||||
_lastScannedNode.AddConnection(newNode.NodeId);
|
||||
newNode.AddConnection(_lastScannedNode.NodeId);
|
||||
_lastScannedNode.AddConnection(newNode.Id);
|
||||
newNode.AddConnection(_lastScannedNode.Id);
|
||||
|
||||
Program.WriteLine($"[맵 스캔] 연결 생성: {_lastScannedNode.NodeId} ↔ {newNode.NodeId}");
|
||||
Program.WriteLine($"[맵 스캔] 연결 생성: {_lastScannedNode.Id} ↔ {newNode.Id}");
|
||||
}
|
||||
|
||||
// AGV 위치 설정
|
||||
@@ -752,7 +751,7 @@ namespace AGVSimulator.Forms
|
||||
_simulatorCanvas.Nodes = _mapNodes;
|
||||
|
||||
// 화면을 새 노드 위치로 이동
|
||||
_simulatorCanvas.PanToNode(newNode.NodeId);
|
||||
_simulatorCanvas.PanToNode(newNode.Id);
|
||||
_simulatorCanvas.Invalidate();
|
||||
|
||||
// 상태 업데이트
|
||||
@@ -764,10 +763,10 @@ namespace AGVSimulator.Forms
|
||||
// UI 업데이트
|
||||
UpdateNodeComboBoxes();
|
||||
|
||||
_statusLabel.Text = $"노드 생성: {newNode.NodeId} (RFID: {rfidId}) [{GetDirectionSymbol(currentDirection)}] - 총 {_mapNodes.Count}개";
|
||||
_statusLabel.Text = $"노드 생성: {newNode.Id} (RFID: {rfidId}) [{GetDirectionSymbol(currentDirection)}] - 총 {_mapNodes.Count}개";
|
||||
_rfidTextBox.Text = "";
|
||||
|
||||
Program.WriteLine($"[맵 스캔] 노드 생성 완료: {newNode.NodeId} (RFID: {rfidId}) at ({newX}, {newY}), 방향: {currentDirection}");
|
||||
Program.WriteLine($"[맵 스캔] 노드 생성 완료: {newNode.Id} (RFID: {rfidId}) at ({newX}, {newY}), 방향: {currentDirection}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -875,15 +874,15 @@ namespace AGVSimulator.Forms
|
||||
|
||||
|
||||
//이전위치와 동일한지 체크한다.
|
||||
if (selectedAGV.CurrentNodeId == targetNode.NodeId && selectedAGV.CurrentDirection == selectedDirection)
|
||||
if (selectedAGV.CurrentNodeId == targetNode.Id && selectedAGV.CurrentDirection == selectedDirection)
|
||||
{
|
||||
Program.WriteLine($"이전 노드위치와 모터의 방향이 동일하여 현재 위치 변경이 취소됩니다(NODE:{targetNode.NodeId},RFID:{targetNode.RfidId},DIR:{selectedDirection})");
|
||||
Program.WriteLine($"이전 노드위치와 모터의 방향이 동일하여 현재 위치 변경이 취소됩니다(NODE:{targetNode.Id},RFID:{targetNode.RfidId},DIR:{selectedDirection})");
|
||||
return;
|
||||
}
|
||||
|
||||
// 콘솔 출력 (상세한 리프트 방향 계산 과정)
|
||||
Program.WriteLine($"[AGV-{selectedAGV.AgvId}] 위치 설정:");
|
||||
Program.WriteLine($" RFID: {rfidId} → 노드: {targetNode.NodeId}");
|
||||
Program.WriteLine($" RFID: {rfidId} → 노드: {targetNode.Id}");
|
||||
Program.WriteLine($" 위치: ({targetNode.Position.X}, {targetNode.Position.Y})");
|
||||
Program.WriteLine($" 방향: {selectedDirectionItem?.DisplayText ?? "전진"} ({selectedDirection})");
|
||||
|
||||
@@ -912,14 +911,14 @@ namespace AGVSimulator.Forms
|
||||
CalculateLiftDirectionDetailed(selectedAGV);
|
||||
Program.WriteLine("");
|
||||
|
||||
_statusLabel.Text = $"{selectedAGV.AgvId} 위치를 RFID '{rfidId}' (노드: {targetNode.NodeId}), 방향: {selectedDirectionItem?.DisplayText ?? "전진"}로 설정했습니다.";
|
||||
_statusLabel.Text = $"{selectedAGV.AgvId} 위치를 RFID '{rfidId}' (노드: {targetNode.Id}), 방향: {selectedDirectionItem?.DisplayText ?? "전진"}로 설정했습니다.";
|
||||
_rfidTextBox.Text = ""; // 입력 필드 초기화
|
||||
|
||||
// 시뮬레이터 캔버스의 해당 노드로 이동
|
||||
//_simulatorCanvas.PanToNode(targetNode.NodeId);
|
||||
|
||||
// 시작 노드 콤보박스를 현재 위치로 자동 선택
|
||||
SetStartNodeToCombo(targetNode.NodeId);
|
||||
SetStartNodeToCombo(targetNode.Id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -956,11 +955,10 @@ namespace AGVSimulator.Forms
|
||||
return "RFID가 할당된 노드가 없습니다.";
|
||||
|
||||
// 처음 10개의 RFID만 표시 (노드 이름 포함)
|
||||
var rfidList = nodesWithRfid.Take(10).Select(n =>
|
||||
var rfidList = nodesWithRfid.Take(10).Select((Func<MapNode, string>)(n =>
|
||||
{
|
||||
var nodeNamePart = !string.IsNullOrEmpty(n.Name) ? $" {n.Name}" : "";
|
||||
return $"- {n.RfidId} → {n.NodeId}{nodeNamePart}";
|
||||
});
|
||||
return $"- {n.RfidId} → {n.Id}";
|
||||
}));
|
||||
var result = string.Join("\n", rfidList);
|
||||
|
||||
if (nodesWithRfid.Count > 10)
|
||||
@@ -1060,8 +1058,7 @@ namespace AGVSimulator.Forms
|
||||
if (node.IsActive && node.HasRfid())
|
||||
{
|
||||
// {rfid} - [{node}] {name} 형식으로 ComboBoxItem 생성
|
||||
var nodeNamePart = !string.IsNullOrEmpty(node.Name) ? $" {node.Name}" : "";
|
||||
var displayText = $"{node.RfidId} - [{node.NodeId}]{nodeNamePart}";
|
||||
var displayText = $"{node.RfidId} - [{node.Id}]";
|
||||
var item = new ComboBoxItem<MapNode>(node, displayText);
|
||||
|
||||
_startNodeCombo.Items.Add(item);
|
||||
@@ -1262,7 +1259,7 @@ namespace AGVSimulator.Forms
|
||||
/// </summary>
|
||||
private string GetRfidByNodeId(string nodeId)
|
||||
{
|
||||
var node = _mapNodes?.FirstOrDefault(n => n.NodeId == nodeId);
|
||||
var node = _mapNodes?.FirstOrDefault(n => n.Id == nodeId);
|
||||
return node?.HasRfid() == true ? node.RfidId : nodeId;
|
||||
}
|
||||
|
||||
@@ -1271,7 +1268,7 @@ namespace AGVSimulator.Forms
|
||||
/// </summary>
|
||||
private string GetDisplayName(string nodeId)
|
||||
{
|
||||
var node = _mapNodes?.FirstOrDefault(n => n.NodeId == nodeId);
|
||||
var node = _mapNodes?.FirstOrDefault(n => n.Id == nodeId);
|
||||
if (node != null && !string.IsNullOrEmpty(node.RfidId))
|
||||
{
|
||||
return node.RfidId;
|
||||
@@ -1628,7 +1625,7 @@ namespace AGVSimulator.Forms
|
||||
if (!string.IsNullOrEmpty(node.RfidId))
|
||||
return node.RfidId;
|
||||
|
||||
return $"({node.NodeId})";
|
||||
return $"({node.Id})";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1655,7 +1652,7 @@ namespace AGVSimulator.Forms
|
||||
for (int i = 0; i < _targetNodeCombo.Items.Count; i++)
|
||||
{
|
||||
var item = _targetNodeCombo.Items[i] as ComboBoxItem<MapNode>;
|
||||
if (item?.Value?.NodeId == nodeId)
|
||||
if (item?.Value?.Id == nodeId)
|
||||
{
|
||||
_targetNodeCombo.SelectedIndex = i;
|
||||
return;
|
||||
@@ -1669,7 +1666,7 @@ namespace AGVSimulator.Forms
|
||||
private PathTestLogItem CreateTestResultFromUI(MapNode prevNode, MapNode targetNode,
|
||||
string directionName, (bool result, string message) calcResult)
|
||||
{
|
||||
var currentNode = _mapNodes.FirstOrDefault(n => n.NodeId ==
|
||||
var currentNode = _mapNodes.FirstOrDefault(n => n.Id ==
|
||||
(_agvListCombo.SelectedItem as VirtualAGV)?.CurrentNodeId);
|
||||
|
||||
var logItem = new PathTestLogItem
|
||||
@@ -1741,8 +1738,8 @@ namespace AGVSimulator.Forms
|
||||
continue;
|
||||
|
||||
// 중복 방지 (A→B와 B→A를 같은 것으로 간주)
|
||||
var pairKey1 = $"{nodeA.NodeId}→{nodeB.NodeId}";
|
||||
var pairKey2 = $"{nodeB.NodeId}→{nodeA.NodeId}";
|
||||
var pairKey1 = $"{nodeA.Id}→{nodeB.Id}";
|
||||
var pairKey2 = $"{nodeB.Id}→{nodeA.Id}";
|
||||
|
||||
if (nodeA.HasRfid() && nodeB.HasRfid() && !processedPairs.Contains(pairKey1) && !processedPairs.Contains(pairKey2))
|
||||
{
|
||||
@@ -1848,7 +1845,7 @@ namespace AGVSimulator.Forms
|
||||
prb1.Value = (int)((double)currentTest / totalTests * 100);
|
||||
|
||||
// 목표 노드 콤보박스 선택
|
||||
SetTargetNodeComboBox(dockingTarget.NodeId);
|
||||
SetTargetNodeComboBox(dockingTarget.Id);
|
||||
|
||||
// 경로 계산 버튼 클릭 (실제 사용자 동작)
|
||||
var calcResult = CalcPath();
|
||||
|
||||
Reference in New Issue
Block a user