Sertac Akyus がコメントで悲しんでいるように、必要なのは線を引くための 2 つの基準点だけです。
また、LineTo コマンドを使用して、ボックスの親コントロールのキャンバスに簡単に線を引くことができます。
あなたの例を見てみましょう。Box1 と Box2 の間に線を引くには、次の手順を使用します。
//Move point to the bottom midle of the Box1
Parent.Canvas.MoveTo(Box1.Left+(Box1.Width div 2),Box1.Top+Box1.Height);
//Draw a line to the top middle of the Box2
Parent.Canvas.LineTo(Box2.Left+(Box2.Width div 2),Box2.Top);
ここで、ラインが必ずしもそれを横切るのではなく、その境界にのみつながるように、どのコントロールがより高いかに特別な注意を払う必要があります。
次のように、あるボックスの中心点から別のボックスの中心点まで線を引くだけで、生活を少し楽にすることもできます
//Move point to the center of first box
Parent.Canvas.MoveTo(Box1.Left+(Box1.Width div 2),Box1.Top+(Box1.Height div 2));
//Draw a line to the center point of second box
Parent.Canvas.LineTo(Box2.Left+(Box2.Width div 2),Box2.Top+(Box2.Height div 2));
しかし、これは最初のアプローチほど良く見えないかもしれません。
とにかく、マインド グラフを使用すると、遅かれ早かれ、直線を描くだけでは不十分な状況に遭遇する可能性があります。
そのような場合は、曲線の描画 (少なくとも S 字曲線の描画) のサポートを提供する必要があります。これらを使用して、ユーザーが他のボックスを横切らないように適切に調整できるようにする必要があります。ただし、それには、ユーザーが特定の行を選択してから、その特定のプロパティを調整する機能が必要です。
もう 1 つの高度な方法として、曲線の自動描画があります。このようなアプローチでは、バックグラウンドでパスファインディング アルゴリズムを使用して、可能なライン パスを表す複数の参照ポイントを見つけ、次にこれらの参照ポイントを介して Catmul-Rom スパインをレンダリングする機能を使用します。
残念ながら、私はまだ自分で実装しようとしているので、この高度なアプローチのコード例を提供することはできません.