2013-05-06 38 views
1

我期待着做一个花环使用C#图形... 这里是我想要实现: Rosette如何画玫瑰花?

直到现在我这样做:

Pen lapsi = new Pen(Color.Black, 3); 

     Rectangle katrori = new Rectangle(250, 200, 200, 200); 
     Rectangle katrori2 = new Rectangle(350, 200, 200, 200); 
     Rectangle katrori3 = new Rectangle(150, 200, 200, 200); 

     Rectangle katrori4 = new Rectangle(200, 110, 200, 200); 
     Rectangle katrori5 = new Rectangle(200, 285, 200, 200); 
     Rectangle katrori6 = new Rectangle(295, 110, 200, 200); 
     Rectangle katrori7 = new Rectangle(300, 282, 200, 200); 

     Graphics g = this.CreateGraphics(); 

     g.DrawEllipse(lapsi, katrori); //kryesor 
     g.DrawEllipse(lapsi, katrori2); //djatht 
     g.DrawEllipse(lapsi, katrori3); //majt 
     g.DrawEllipse(lapsi, katrori4); //nalt-majt 
     g.DrawEllipse(lapsi, katrori5); //posht-majt 
     g.DrawEllipse(lapsi, katrori6); //nalt-djatht 
     g.DrawEllipse(lapsi, katrori7);//posht djatht 

我画7到目前为止,但我只想显示在中间包含罗斯特的一个。如何摆脱主圈外的那些额外的线.. 如果有人可以给我一些代码行,并告诉我这是如何完成的,我会很感激。

+0

这是一个C#的问题,不是一个C的问题。相应地重新标记。 – 2013-05-06 19:23:46

+0

意外地按下输入,ty :) – Kastriot 2013-05-06 19:29:41

回答

0

从您的中心圆的矩形开始,并按某个百分比膨胀()。接下来,创建一个GraphicsPath()并通过AddEllipse()使用膨胀的矩形添加一个椭圆。最后,使用SetClip()来裁剪图形表面。这将防止正在显示椭圆形以外的任何东西:

 Pen lapsi = new Pen(Color.Black, 3); 

     Rectangle katrori = new Rectangle(250, 200, 200, 200); 
     Rectangle katrori2 = new Rectangle(350, 200, 200, 200); 
     Rectangle katrori3 = new Rectangle(150, 200, 200, 200); 

     Rectangle katrori4 = new Rectangle(200, 110, 200, 200); 
     Rectangle katrori5 = new Rectangle(200, 285, 200, 200); 
     Rectangle katrori6 = new Rectangle(295, 110, 200, 200); 
     Rectangle katrori7 = new Rectangle(300, 282, 200, 200); 

     Graphics g = this.CreateGraphics(); 

     Rectangle clippingRectangle = new Rectangle(katrori.Location, katrori.Size); 
     clippingRectangle.Inflate((int)(katrori.Width * .2), (int)(katrori.Width * .2)); 
     System.Drawing.Drawing2D.GraphicsPath GP = new System.Drawing.Drawing2D.GraphicsPath(); 
     GP.AddEllipse(clippingRectangle); 
     g.SetClip(GP); 

     g.DrawEllipse(lapsi, katrori); //kryesor 
     g.DrawEllipse(lapsi, katrori2); //djatht 
     g.DrawEllipse(lapsi, katrori3); //majt 
     g.DrawEllipse(lapsi, katrori4); //nalt-majt 
     g.DrawEllipse(lapsi, katrori5); //posht-majt 
     g.DrawEllipse(lapsi, katrori6); //nalt-djatht 
     g.DrawEllipse(lapsi, katrori7);//posht djatht 

     g.Dispose(); 

这里是我完成的,修剪玫瑰花: Finished Rosette via Graphics.SetClip()

+0

它的工作,我从中学到了... 谢谢 – Kastriot 2013-05-06 21:50:20