2010年10月30日土曜日

SlimDXでDirect2Dの図形(円、角丸四角)

Direct2Dで線とか、四角とか、円を描いてみましょ!

今回は角が丸い四角形と円です。


<円>

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using SlimDX;
using SlimDX.Direct2D;
using SlimDX.Windows;

namespace Direct2DSample
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            var form = new RenderForm("SlimDX - Direct2D Sample");
            var factory = new Factory();

            var target = new WindowRenderTarget(factory,new WindowRenderTargetProperties(){
                Handle = form.Handle,
                PixelSize = form.ClientSize
            });

            var brush = new SolidColorBrush(target,Color.Aqua);

            var ellipse = new Ellipse(){
              Center = new Point(50,50),
              RadiusX = 50,
              RadiusY = 30
            };

            MessagePump.Run(form, () =>
            {
              target.BeginDraw();
              target.Clear();

              target.DrawEllipse(brush,ellipse);

              target.EndDraw();
            });

            foreach (var item in ObjectTable.Objects)
                item.Dispose();
        }
    }
}
サンプルです。実に華麗な円が描かれています。


            var brush = new SolidColorBrush(target,Color.Aqua);
ここでブラシを作っています。ブラシは筆です。筆を使って円を描くことになります。

            var ellipse = new Ellipse(){
              Center = new Point(50,50),
              RadiusX = 50,
              RadiusY = 30
            };
ここで描く円の形を作っています。この場合、円の中心が座標(50,50)で、横半径が50、縦半径が30の円です。

              target.DrawEllipse(brush,ellipse);
ここで実際に描画しています。さっき作ったブラシを使ってさっき作った円を描いています。もしも塗りつぶした円を描きたければ、
              target.FillEllipse(brush,ellipse);
とします。



<角丸四角>

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using SlimDX;
using SlimDX.Direct2D;
using SlimDX.Windows;

namespace Direct2DSample
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            var form = new RenderForm("SlimDX - Direct2D Sample");
            var factory = new Factory();

            var target = new WindowRenderTarget(factory,new WindowRenderTargetProperties(){
                Handle = form.Handle,
                PixelSize = form.ClientSize
            });

            var brush = new SolidColorBrush(target,Color.Aqua);

            var rectangle = new RoundedRectangle(){
              Left    = 10,
              Top     = 10,
              Right   = 10+100,
              Bottom  = 10+60,
              RadiusX = 20,
              RadiusY = 10
            };

            MessagePump.Run(form, () =>
            {
              target.BeginDraw();
              target.Clear();

              target.DrawRoundedRectangle(brush,rectangle);

              target.EndDraw();
            });

            foreach (var item in ObjectTable.Objects)
                item.Dispose();
        }
    }
}
田舎の展示会くらいなら掲げても恥ずかしくないような四角を描くことができました。


            var rectangle = new RoundedRectangle(){
              Left    = 10,
              Top     = 10,
              Right   = 10+100,
              Bottom  = 10+60,
              RadiusX = 20,
              RadiusY = 10
            };
ここで描きたい四角を作ります。
座標(10,10)に横幅100、縦幅60の四角形を描いています。
重要なのはどうやって角を丸くするかですが、円のときと同じようにRadiusXとRadiusYで丸みを作ります。この半径は、角丸四角形の四隅を切り取って繋げたときに出来る円の半径です。簡単ですね。

              target.DrawRoundedRectangle(brush,rectangle);
ここでさっき作った四角を描いています。中を塗りつぶしたいなら、いつものようにDrawをFillにします。
              target.FillRoundedRectangle(brush,rectangle);


0 件のコメント:

コメントを投稿