This commit is contained in:
backuppc
2026-02-10 14:53:54 +09:00
parent c2cc5d67ae
commit 471b8ff9c4
18 changed files with 786 additions and 743 deletions

View File

@@ -774,7 +774,7 @@ namespace AGVMapEditor.Forms
private void RefreshNodeList()
{
listBoxNodes.DataSource = null;
listBoxNodes.DataSource = this._mapCanvas.Nodes;
listBoxNodes.DataSource = this._mapCanvas.Items;
listBoxNodes.DisplayMember = "DisplayText";
listBoxNodes.ValueMember = "Id";
@@ -790,7 +790,7 @@ namespace AGVMapEditor.Forms
private void ListBoxNodes_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBoxNodes.SelectedItem is MapNode selectedNode)
if (listBoxNodes.SelectedItem is NodeBase selectedNode)
{
_selectedNode = selectedNode;
UpdateNodeProperties();
@@ -1673,5 +1673,52 @@ namespace AGVMapEditor.Forms
// 현재 선택된 노드의 속성창 및 리스트 갱신
UpdateNodeProperties();
}
private void btAddMagnet_Click(object sender, EventArgs e)
{
// 마그넷 추가
var result = MessageBox.Show("곡선 마그넷(Bezier)을 추가하시겠습니까?\n(예: 베지어 곡선, 아니오: 직선, 취소: 중단)",
"마그넷 타입 선택", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (result == DialogResult.Cancel) return;
bool isBezier = (result == DialogResult.Yes);
// 화면 중앙 좌표 계산 (World Coordinate)
float zoom = _mapCanvas.ZoomFactor;
PointF pan = _mapCanvas.PanOffset;
float worldCX = (_mapCanvas.Width / 2f) / zoom - pan.X;
float worldCY = (_mapCanvas.Height / 2f) / zoom - pan.Y;
// 고유 ID 생성
string id = _mapCanvas.GenerateUniqueNodeId();
var magnet = new MapMagnet { Id = id };
// 점 생성 시 정규화(Snap) 처리
int cx = (int)worldCX;
int cy = (int)worldCY;
magnet.StartPoint = new Point(cx - 50, cy);
magnet.EndPoint = new Point(cx + 50, cy);
if (isBezier)
{
magnet.ControlPoint = new MapMagnet.MagnetPoint { X = cx, Y = cy - 50 };
}
// 캔버스에 추가
_mapCanvas.Magnets.Add(magnet);
_hasChanges = true;
UpdateTitle();
RefreshMapCanvas();
RefreshNodeList();
// 추가된 마그넷 선택
//_mapCanvas.SelectedNode = magnet;
UpdateNodeProperties();
}
}
}