diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs index b400602..35883c7 100644 --- a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs +++ b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs @@ -27,6 +27,14 @@ namespace AGVNavigationCore.Controls HandleAddNodeClick(worldPoint); break; + case EditMode.AddLabel: + HandleAddLabelClick(worldPoint); + break; + + case EditMode.AddImage: + HandleAddImageClick(worldPoint); + break; + case EditMode.Connect: HandleConnectClick(hitNode); break; @@ -502,6 +510,60 @@ namespace AGVNavigationCore.Controls Invalidate(); } + private void HandleAddLabelClick(Point worldPoint) + { + // 그리드 스냅 + if (ModifierKeys.HasFlag(Keys.Control)) + { + worldPoint.X = (worldPoint.X / GRID_SIZE) * GRID_SIZE; + worldPoint.Y = (worldPoint.Y / GRID_SIZE) * GRID_SIZE; + } + + // 고유한 NodeId 생성 + string newNodeId = GenerateUniqueNodeId(); + + var newNode = new MapNode + { + NodeId = newNodeId, + Position = worldPoint, + Type = NodeType.Label, + Name = "새 라벨" + }; + + _nodes.Add(newNode); + + NodeAdded?.Invoke(this, newNode); + MapChanged?.Invoke(this, EventArgs.Empty); + Invalidate(); + } + + private void HandleAddImageClick(Point worldPoint) + { + // 그리드 스냅 + if (ModifierKeys.HasFlag(Keys.Control)) + { + worldPoint.X = (worldPoint.X / GRID_SIZE) * GRID_SIZE; + worldPoint.Y = (worldPoint.Y / GRID_SIZE) * GRID_SIZE; + } + + // 고유한 NodeId 생성 + string newNodeId = GenerateUniqueNodeId(); + + var newNode = new MapNode + { + NodeId = newNodeId, + Position = worldPoint, + Type = NodeType.Image, + Name = "새 이미지" + }; + + _nodes.Add(newNode); + + NodeAdded?.Invoke(this, newNode); + MapChanged?.Invoke(this, EventArgs.Empty); + Invalidate(); + } + /// /// 중복되지 않는 고유한 NodeId 생성 ///