diff --git a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.Designer.cs b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.Designer.cs
index 64f9397..9dddbeb 100644
--- a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.Designer.cs
+++ b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.Designer.cs
@@ -64,7 +64,6 @@ namespace AGVMapEditor.Forms
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.btnSave = new System.Windows.Forms.ToolStripButton();
this.btnSaveAs = new System.Windows.Forms.ToolStripButton();
- this.testToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.statusStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
@@ -255,8 +254,7 @@ namespace AGVMapEditor.Forms
//
this.btnAddNode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.btnAddLabel,
- this.btnAddImage,
- this.testToolStripMenuItem});
+ this.btnAddImage});
this.btnAddNode.Image = ((System.Drawing.Image)(resources.GetObject("btnAddNode.Image")));
this.btnAddNode.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btnAddNode.Name = "btnAddNode";
@@ -419,13 +417,6 @@ namespace AGVMapEditor.Forms
this.btnSaveAs.ToolTipText = "다른 이름으로 저장";
this.btnSaveAs.Click += new System.EventHandler(this.btnSaveAs_Click);
//
- // testToolStripMenuItem
- //
- this.testToolStripMenuItem.Name = "testToolStripMenuItem";
- this.testToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
- this.testToolStripMenuItem.Text = "test";
- this.testToolStripMenuItem.Click += new System.EventHandler(this.testToolStripMenuItem_Click);
- //
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
@@ -499,6 +490,5 @@ namespace AGVMapEditor.Forms
private System.Windows.Forms.ToolStripButton btnAddImage;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.Panel panel1;
- private System.Windows.Forms.ToolStripMenuItem testToolStripMenuItem;
}
}
\ No newline at end of file
diff --git a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs
index 7c76c63..9a9aeee 100644
--- a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs
+++ b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs
@@ -114,6 +114,7 @@ namespace AGVMapEditor.Forms
_mapCanvas.NodeMoved += OnNodeMoved;
_mapCanvas.NodeDeleted += OnNodeDeleted;
_mapCanvas.ConnectionDeleted += OnConnectionDeleted;
+ _mapCanvas.ImageNodeDoubleClicked += OnImageNodeDoubleClicked;
_mapCanvas.MapChanged += OnMapChanged;
// 스플리터 패널에 맵 캔버스 추가
@@ -218,6 +219,24 @@ namespace AGVMapEditor.Forms
UpdateNodeProperties(); // 연결 정보 업데이트
}
+ private void OnImageNodeDoubleClicked(object sender, MapNode node)
+ {
+ // 이미지 노드 더블클릭 시 이미지 편집창 표시
+ if (node != null && node.Type == NodeType.Image)
+ {
+ using (var editor = new ImageEditorForm(node))
+ {
+ if (editor.ShowDialog(this) == DialogResult.OK)
+ {
+ _hasChanges = true;
+ UpdateTitle();
+ _mapCanvas.Invalidate(); // 캔버스 다시 그리기
+ UpdateNodeProperties(); // 속성 업데이트
+ }
+ }
+ }
+ }
+
private void OnMapChanged(object sender, EventArgs e)
{
_hasChanges = true;
@@ -1143,9 +1162,5 @@ namespace AGVMapEditor.Forms
}
}
- private void testToolStripMenuItem_Click(object sender, EventArgs e)
- {
- _mapCanvas.CurrentEditMode = UnifiedAGVCanvas.EditMode.AddLabel;
- }
}
}
\ No newline at end of file
diff --git a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.resx b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.resx
index d1d15bc..5346a8d 100644
--- a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.resx
+++ b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.resx
@@ -120,28 +120,10 @@
132, 17
-
- 249, 17
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK
- YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X
- /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t
- I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM
- cX79DFKrHHD5d9D26hvicx4pABt2lpg10zYzU0zr7+e3xXGcrkEB2O2TNec9nJFwB3alZn5jZorfeDZh
- 6Q3g8s06BeCoKF4MRURoH1+BY2oNCbeb0TIclIYxOhzf8frTOuo7FxCbbVIAzpni0iceEc8vhzEwGkJD
- lx83ymxifejdKjRNk/8PWnyIyTQqAJek0jqHwfEVscu31baIu8+90sTE4nY025dQ2/5FIPpnXlzKuK8A
- HBUzHot52djqQ6HZhfR7IwK4mKpHtvEDMqvfCiQ6zaAAXM8x94aIWTNrLLG4kVUzgaTSPlzLtyJOZxbb
- 1wtfyg4Q+AfA3aZlButjSfxGcUJBk4g5tuP3haQKRKXcUQDOmbvNTpPOJeFFjordZmbWTNvMTHFUcpUC
- nOccAdABIDXXE1nzAAAAAElFTkSuQmCC
-
-
462, 17
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
@@ -299,6 +281,27 @@
UaXercygfFZaPW6h2fEOOkaO5bFky+6bmasTbWfxp8lO/PXDIP625MQfJ1rxSOUx2ZUsJJnYK2mGqe4S
HJ614ej7AbzC3cfzjyqwNUP1+eX5lO1Kf1I9q001eCz5eMndjBfdLXj6XhEeqTn8/anu4A6l958aNh8x
OMtS8OvWLDxcqf7i1KfsUnr+q+Gqozv7Sw5ZHKa0bYm/v22YpTjaxhhxAAAAAElFTkSuQmCC
+
+
+
+ 249, 17
+
+
+ 249, 17
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK
+ YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X
+ /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t
+ I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM
+ cX79DFKrHHD5d9D26hvicx4pABt2lpg10zYzU0zr7+e3xXGcrkEB2O2TNec9nJFwB3alZn5jZorfeDZh
+ 6Q3g8s06BeCoKF4MRURoH1+BY2oNCbeb0TIclIYxOhzf8frTOuo7FxCbbVIAzpni0iceEc8vhzEwGkJD
+ lx83ymxifejdKjRNk/8PWnyIyTQqAJek0jqHwfEVscu31baIu8+90sTE4nY025dQ2/5FIPpnXlzKuK8A
+ HBUzHot52djqQ6HZhfR7IwK4mKpHtvEDMqvfCiQ6zaAAXM8x94aIWTNrLLG4kVUzgaTSPlzLtyJOZxbb
+ 1wtfyg4Q+AfA3aZlButjSfxGcUJBk4g5tuP3haQKRKXcUQDOmbvNTpPOJeFFjordZmbWTNvMTHFUcpUC
+ nOccAdABIDXXE1nzAAAAAElFTkSuQmCC
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/AGVNavigationCore.csproj b/Cs_HMI/AGVLogic/AGVNavigationCore/AGVNavigationCore.csproj
index d04e3fc..38dd5f6 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/AGVNavigationCore.csproj
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/AGVNavigationCore.csproj
@@ -47,6 +47,7 @@
prompt
+
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs
index 35883c7..e79563c 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs
@@ -56,11 +56,81 @@ namespace AGVNavigationCore.Controls
if (hitNode != null)
{
- // 노드 속성 편집 (이벤트 발생)
- NodeSelected?.Invoke(this, hitNode);
+ // 노드 타입별 더블클릭 액션
+ switch (hitNode.Type)
+ {
+ case NodeType.Normal:
+ case NodeType.Rotation:
+ case NodeType.Docking:
+ case NodeType.Charging:
+ HandleNormalNodeDoubleClick(hitNode);
+ break;
+
+ case NodeType.Label:
+ HandleLabelNodeDoubleClick(hitNode);
+ break;
+
+ case NodeType.Image:
+ HandleImageNodeDoubleClick(hitNode);
+ break;
+
+ default:
+ // 기본 동작: 노드 선택 이벤트 발생
+ NodeSelected?.Invoke(this, hitNode);
+ break;
+ }
}
}
+ private void HandleNormalNodeDoubleClick(MapNode node)
+ {
+ // RFID 입력창 표시
+ string currentRfid = node.RfidId ?? "";
+ string newRfid = Microsoft.VisualBasic.Interaction.InputBox(
+ $"노드 '{node.Name}'의 RFID를 입력하세요:",
+ "RFID 설정",
+ currentRfid);
+
+ if (!string.IsNullOrWhiteSpace(newRfid) && newRfid != currentRfid)
+ {
+ node.RfidId = newRfid.Trim();
+ MapChanged?.Invoke(this, EventArgs.Empty);
+ Invalidate();
+ }
+
+ // 노드 선택 이벤트도 발생 (속성창 업데이트)
+ NodeSelected?.Invoke(this, node);
+ }
+
+ private void HandleLabelNodeDoubleClick(MapNode node)
+ {
+ // 라벨 텍스트 입력창 표시
+ string currentText = node.Name ?? "새 라벨";
+ string newText = Microsoft.VisualBasic.Interaction.InputBox(
+ "라벨 텍스트를 입력하세요:",
+ "라벨 편집",
+ currentText);
+
+ if (!string.IsNullOrWhiteSpace(newText) && newText != currentText)
+ {
+ node.Name = newText.Trim();
+ MapChanged?.Invoke(this, EventArgs.Empty);
+ Invalidate();
+ }
+
+ // 노드 선택 이벤트도 발생 (속성창 업데이트)
+ NodeSelected?.Invoke(this, node);
+ }
+
+ private void HandleImageNodeDoubleClick(MapNode node)
+ {
+ // 이미지 노드는 선택 이벤트만 발생 (MainForm에서 이미지 편집 버튼 활성화됨)
+ NodeSelected?.Invoke(this, node);
+
+ // 이미지 편집 이벤트 발생 (MainForm에서 처리)
+ ImageNodeDoubleClicked?.Invoke(this, node);
+ }
+
private void UnifiedAGVCanvas_MouseDown(object sender, MouseEventArgs e)
{
var worldPoint = ScreenToWorld(e.Location);
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.cs
index d053046..c340465 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.cs
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.cs
@@ -142,6 +142,7 @@ namespace AGVNavigationCore.Controls
public event EventHandler NodeDeleted;
public event EventHandler NodeMoved;
public event EventHandler<(MapNode From, MapNode To)> ConnectionDeleted;
+ public event EventHandler ImageNodeDoubleClicked;
public event EventHandler MapChanged;
#endregion