1

C# グラフィックを使用してロゼットを作成することを楽しみにしています...これが私が達成しようとしていることです: ロゼット

今まで私はこれをしました:

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 つの円を描きましたが、真ん中にある rossete を含む円のみを表示したいと思います。メインサークルの外側にある余分な行を取り除く方法..誰かが私にいくつかのコード行を与えて、これがどのように行われるかを示すことができれば、私はそれを感謝します.

4

1 に答える 1

0

中央の円の長方形から始めて、それを何パーセントか Inflate() します。次に、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();

これが私の完成した、切り取られたロゼットです: Graphics.SetClip() で完成したロゼット

于 2013-05-06T20:00:59.717 に答える