2017-06-12 13 views
2

私はペイントアプリケーションを作っています。私が描く線の太さをどのように保つことができるのだろうかと思います。だから私のアプリケーションは、描画されたすべての線の点のリストのリストを使用し、新しい線が描画されるたびにそれらをすべて描画します。今私はペンのサイズを変更すると、すべての線のサイズが変更され、すべてが再描画されるので、1つの問題があります。ペンサイズを維持しますか?

マイコード:

 //Create new pen 
     Pen p = new Pen(Color.Black, penSize); 
     //Set linecaps for start and end to round 
     p.StartCap = LineCap.Round; 
     p.EndCap = LineCap.Round; 
     //Turn on AntiAlias 
     e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; 
     //For each list of line coords, draw all lines 
     foreach (List<Point> lstP in previousPoints) 
     { 
      e.Graphics.DrawLine(p, lstP[0], lstP[1]); 
     } 
     p.Dispose(); 

私は1つのループの中にペンサイズを変更するのではなく、どのように私は、線幅を維持することができPen.Width()を使用することができます知っていますか?

+0

[この投稿はDrawActionクラスについて](https://stackoverflow.com/questions/28714411/update-a-drawing-without-deleting-the-previous-one/28716887?s=6 | 0.1736#28716887) – TaW

答えて

3

List<List<Point>>の代わりにList<Point>とペンの幅を持つクラスを作成し、そのリストを使用します。私たちも色をつけますが、あなたはそれを省略することができます。

private List<MyPointList> previousPoints; 

そして、ループを通る:

foreach (MyPointList lstP in previousPoints) { 
    using (var p = new Pen(lstP.Color, lstP.PenWidth)) { 
     e.Graphics.DrawLine(p, lstP.Points[0], lstP.Points[1]); 
    } 
} 

usingブロックはペンを配置

public class MyPointList { 
    public List<Point> Points { get; set; } 
    public float PenWidth { get; set; } 
    public Color Color { get; set; } 
} 

はpreviousPointsそれらのリストを作成します。

コメントでカイルが指摘しているように、MyPointListにも図面を行う方法を与えることができます。

実際には、あなたが抽象または仮想Draw(Graphics g)メソッドで基本クラスを書くことができます:

public abstract class MyDrawingThing { 
    public abstract void Draw(Graphics g); 
} 

public class MyPointList : MyDrawingThing { 
    public List<Point> Points { get; set; } 
    public float PenWidth { get; set; } 
    public Color Color { get; set; } 

    public override void Draw(Graphics g) { 
     using (var p = new Pen(Color, PenWidth)) { 
      g.DrawLine(p, Points[0], Points[1]); 
     } 
    } 
} 

...などのように使用します。

private List<MyDrawingThing> previousPoints; 

foreach (MyDrawingThing thing in previousPoints) { 
    thing.Draw(e.Graphics); 
} 

が描くダースの異なるサブクラスを書きます円、弧、lolcats、何でも。

+0

あなたは天才です!ありがとう。 –

+2

実際、 'Pen'を使って線を描画するこのカスタムクラスに' Draw'メソッドを追加することさえできます。 – Kyle

+1

@Kyleありがとう、私はそれを追加しました。 –

関連する問題