-1

私はそれが可能だと信じていますが、そのようなものは何も見ていません。長方形 (水平方向と垂直方向) を次のように動作させたいと思います。ちょっと基本的なCAD図面になります。

プロジェクトは、Visual Studio 2010 Ultimate in c# とフレームワーク 4 で作成されます。

誰かが手がかりやチュートリアルへの道を持っているなら、私は感謝します.

ありがとう !

編集:私の試みがあります。

System.Drawing.Rectangle rectangle1 = new System.Drawing.Rectangle(30, 40, 50, 200);          System.Drawing.Rectangle rectangle2 = new System.Drawing.Rectangle(30, 190, 200, 50);
e.Graphics.DrawRectangle(Pens.Blue, rectangle1);
e.Graphics.DrawRectangle(Pens.GreenYellow, rectangle2);
System.Drawing.Rectangle rectangle3 = System.Drawing.Rectangle.Intersect(rectangle1, rectangle2);
e.Graphics.DrawRectangle(Pens.White, rectangle3);
4

1 に答える 1

1

Rectangles を GraphicsPath に追加し、GdipWindingModeOutline() API を使用して、このSOの質問のようにアウトラインのみに変換します。

GraphicsPath からの L 字型のアウトライン

具体的には、あなたの例では:

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    [DllImport(@"gdiplus.dll")]
    public static extern int GdipWindingModeOutline(HandleRef path, IntPtr matrix, float flatness);

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        Rectangle rectangle1 = new Rectangle(30, 40, 50, 200); 
        Rectangle rectangle2 = new Rectangle(30, 190, 200, 50);

        GraphicsPath gp = new GraphicsPath();
        gp.AddRectangle(rectangle1);
        gp.AddRectangle(rectangle2);

        HandleRef handle = new HandleRef(gp, (IntPtr)gp.GetType().GetField("nativePath", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(gp));
        GdipWindingModeOutline(handle, IntPtr.Zero, 0.25F);

        e.Graphics.DrawPath(Pens.Blue, gp);
    }

}
于 2013-10-18T15:35:50.643 に答える