我必须以图形方式表示一个有向图,如下图所示。
替代文字 http://img694.imageshack.us/img694/1605/graf.gif
我有一个 C# 表单,当我用鼠标点击它时,我必须绘制一个节点。如果我单击表单上尚未绘制节点的某个位置,则意味着我单击了绘制节点的意图,如果它是一个节点,我必须选择它并记住它。在下一次鼠标点击时,如果我触摸一个尚未绘制节点的地方,这意味着我想绘制一个新节点,如果它是我点击的节点,我需要从第一个记忆的节点开始画线到选定的一个并添加道路成本详细信息。
当我点击表格时,我知道如何绘制代表图形节点的圆圈。我正在使用以下代码:
namespace RepGraficaAUnuiGraf
{
public partial class Form1 : Form
{
Graphics graphDrawingArea;
Bitmap bmpDrawingArea;
Graphics graph;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
bmpDrawingArea = new Bitmap(Width, Height);
graphDrawingArea = Graphics.FromImage(bmpDrawingArea);
graph = Graphics.FromHwnd(this.Handle);
}
private void Form1_Click(object sender, EventArgs e)
{
DrawCentralCircle(((MouseEventArgs)e).X, ((MouseEventArgs)e).Y, 15);
graph.DrawImage(bmpDrawingArea, 0, 0);
}
void DrawCentralCircle(int CenterX, int CenterY, int Radius)
{
int start = CenterX - Radius;
int end = CenterY - Radius;
int diam = Radius * 2;
bmpDrawingArea = new Bitmap(Width, Height);
graphDrawingArea = Graphics.FromImage(bmpDrawingArea);
graphDrawingArea.DrawEllipse(new Pen(Color.Blue), start, end, diam, diam);
graphDrawingArea.DrawString("1", new Font("Tahoma", 13), Brushes.Black, new PointF(CenterX - 8, CenterY - 10));
}
}
}
我的问题是如何确定我是否在表单上的坐标 (x,y) 上绘制了一个节点,它是哪一个?我想将节点表示为按钮,具有标记或类似于节点号的东西(在图中,圣巴巴拉应该是 1,巴斯托应该是 2 等)