2015-08-24 66 views
-2

System.DrawingSystem.Drawing.Drawing2D中,我只能畫出水平或垂直的形狀。現在我想繪製自定義形狀。在winform中繪製自定義橢圓C#

給定點A,B,C,D的座標。我想畫一個橢圓,就像圖中的藍色一樣。 enter image description here

+1

所以,你將不得不做一點點,而基本的數學。然後你需要做一個TranslateTransform,RotateTransform,最後是DrawEllispse。之後可能是一個ResetTransform。 – TaW

+0

閱讀[RotateTransform](https://msdn.microsoft.com/en-us/library/a0z3f662(v = vs.110).aspx) –

回答

2

下面的例子是從MSDN採取:

private void RotateTransformAngle(PaintEventArgs e) 
{ 
    // Set world transform of graphics object to translate. 
    e.Graphics.TranslateTransform(100.0F, 0.0F); 

    // Then to rotate, prepending rotation matrix. 
    e.Graphics.RotateTransform(30.0F); 

    // Draw rotated, translated ellipse to screen. 
    e.Graphics.DrawEllipse(new Pen(Color.Blue, 3), 0, 0, 200, 80); 
} 
1

正確的解決方案涉及:

  • 使用Graphics.TranslateTransform向中心移動到原點計算中心
  • 計算Size和使用Graphics.RotateTransform旋轉畫布
  • 繪製橢圓與Graphics.DrawEllipse
  • 重置Graphcis對象

這需要一點Math但會產生真實的和精細的橢圓包圍Rectangle

  • 的..

    爲了好玩,你也可能想玩一個便宜的,假的解決方案:我使用DrawClosedCurve方法與張力。

    爲了測試我添加了一個TrackBar設置了Maximum100。的周圍0.8f 80左右,即Tensions

    價值創造相當不錯的橢球:

    enter image description here

    private void panel1_Paint(object sender, PaintEventArgs e) 
    { 
        List<Point> points1 = new List<Point>() 
        { new Point(300, 100), new Point(500, 300), new Point(400, 500), new Point(200, 300) }; 
    
        List<Point> points2 = new List<Point>() 
        { new Point(100, 100), new Point(500, 100), new Point(500, 400), new Point(100, 400) }; 
    
        e.Graphics.DrawClosedCurve(Pens.Red, points1.ToArray(), 
         (float)(trackBar1.Value/100f), System.Drawing.Drawing2D.FillMode.Alternate); 
    
        e.Graphics.DrawClosedCurve(Pens.Blue, points2.ToArray(), 
         (float)(trackBar1.Value/100f), System.Drawing.Drawing2D.FillMode.Alternate); 
    }