agv 노드 정보 정리 세분화

This commit is contained in:
backuppc
2025-12-09 13:18:22 +09:00
parent 455e18f427
commit 9db031c305
28 changed files with 992 additions and 1476 deletions

View File

@@ -416,10 +416,10 @@ namespace AGVNavigationCore.Controls
case NodeType.Normal:
ghostBrush = new SolidBrush(Color.FromArgb(120, 100, 149, 237)); // 반투명 파란색
break;
case NodeType.Rotation:
ghostBrush = new SolidBrush(Color.FromArgb(120, 255, 165, 0)); // 반투명 주황색
break;
case NodeType.Docking:
case NodeType.Loader:
case NodeType.UnLoader:
case NodeType.Clearner:
case NodeType.Buffer:
ghostBrush = new SolidBrush(Color.FromArgb(120, 50, 205, 50)); // 반투명 초록색
break;
case NodeType.Charging:
@@ -439,7 +439,10 @@ namespace AGVNavigationCore.Controls
case NodeType.Image:
DrawImageGhost(g);
break;
case NodeType.Docking:
case NodeType.Loader:
case NodeType.UnLoader:
case NodeType.Clearner:
case NodeType.Buffer:
DrawPentagonGhost(g, ghostBrush);
break;
case NodeType.Charging:
@@ -646,7 +649,10 @@ namespace AGVNavigationCore.Controls
switch (node.Type)
{
case NodeType.Docking:
case NodeType.Loader:
case NodeType.UnLoader:
case NodeType.Clearner:
case NodeType.Buffer:
DrawPentagonNodeShape(g, node, brush);
break;
case NodeType.Charging:
@@ -723,6 +729,13 @@ namespace AGVNavigationCore.Controls
{
DrawDuplicateRfidMarker(g, node);
}
// CanCross 가능 노드 표시 (교차지점으로 사용 가능)
if (node.DisableCross==true)
{
var crossRect = new Rectangle(rect.X - 3, rect.Y - 3, rect.Width + 6, rect.Height + 6);
g.DrawEllipse(new Pen(Color.DeepSkyBlue, 3), crossRect);
}
}
private void DrawPentagonNodeShape(Graphics g, MapNode node, Brush brush)
@@ -826,6 +839,21 @@ namespace AGVNavigationCore.Controls
{
DrawDuplicateRfidMarker(g, node);
}
// CanCross 가능 노드 표시 (교차지점으로 사용 가능)
if (node.DisableCross==false)
{
var crossPoints = new Point[5];
for (int i = 0; i < 5; i++)
{
var angle = (Math.PI * 2 * i / 5) - Math.PI / 2;
crossPoints[i] = new Point(
(int)(center.X + (radius + 4) * Math.Cos(angle)),
(int)(center.Y + (radius + 4) * Math.Sin(angle))
);
}
g.DrawPolygon(new Pen(Color.Gold, 3), crossPoints);
}
}
private void DrawTriangleNodeShape(Graphics g, MapNode node, Brush brush)
@@ -929,6 +957,21 @@ namespace AGVNavigationCore.Controls
{
DrawDuplicateRfidMarker(g, node);
}
// CanCross 가능 노드 표시 (교차지점으로 사용 가능)
if (node.DisableCross==false)
{
var crossPoints = new Point[3];
for (int i = 0; i < 3; i++)
{
var angle = (Math.PI * 2 * i / 3) - Math.PI / 2;
crossPoints[i] = new Point(
(int)(center.X + (radius + 4) * Math.Cos(angle)),
(int)(center.Y + (radius + 4) * Math.Sin(angle))
);
}
g.DrawPolygon(new Pen(Color.Gold, 3), crossPoints);
}
}
private void DrawNodeLabel(Graphics g, MapNode node)

View File

@@ -108,8 +108,10 @@ namespace AGVNavigationCore.Controls
switch (hitNode.Type)
{
case NodeType.Normal:
case NodeType.Rotation:
case NodeType.Docking:
case NodeType.Loader:
case NodeType.UnLoader:
case NodeType.Clearner:
case NodeType.Buffer:
case NodeType.Charging:
HandleNormalNodeDoubleClick(hitNode);
break;
@@ -429,7 +431,10 @@ namespace AGVNavigationCore.Controls
{
switch (node.Type)
{
case NodeType.Docking:
case NodeType.Loader:
case NodeType.UnLoader:
case NodeType.Clearner:
case NodeType.Buffer:
return IsPointInPentagon(point, node);
case NodeType.Charging:
return IsPointInTriangle(point, node);