下の画像のように、有向グラフをグラフィカルに表現する必要があります。
代替テキスト 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 などにする必要があります)。