2010/11/28(Sun) 23:20:30 編集(投稿者)
今日は一日家でのんびりしていたので、GraphicsPath.AddPieメソッドを説明するコードを書いてみました。
(ぶっちゃけ何かのドローツールで説明する図を書いて、どこかのサイトにアップロードした方が早いですw)
VB2008で新規プロジェクトを立ち上げて、以下のコードを貼り付けて実行してください。
そうするとAddPieメソッドの引数に何をどう設定すればいいのか、たぶんわかると思います。
※ソースコードの内容は追わなくて大丈夫です。このコード本体はGraphicsPath.AddPieメソッドの
説明には関係ないので、あくまで実行結果で表示される説明図を見ていただければOKです。
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ClientSize = New Size(600, 600)
Me.BackgroundImage = New Bitmap(600, 600)
Dim g As Graphics = Graphics.FromImage(Me.BackgroundImage)
DrawBackground(g)
DrawDescription(g)
End Sub
Private Sub DrawBackground(ByVal g As Graphics)
g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAliasGridFit
g.TranslateTransform(10, 10)
g.Clear(Color.White)
g.DrawRectangle(Pens.Black, New Rectangle(0, 0, 580, 580))
Using p = New Pen(Color.LightGray, 1)
p.DashStyle = Drawing2D.DashStyle.DashDot
For i = 0 To 580 Step 5
g.DrawLine(p, i, 0, i, 580)
g.DrawLine(p, 0, i, 580, i)
Next
End Using
Using p = New Pen(Color.DarkGray, 1)
For i = 0 To 580 Step 20
g.DrawLine(p, i, 0, i, 580)
g.DrawLine(p, 0, i, 580, i)
Next
End Using
End Sub
Private Sub DrawDescription(ByVal g As Graphics)
g.TranslateTransform(80, 80)
Dim titleF As Font = New Font(Me.Font.FontFamily, 12, FontStyle.Bold Or FontStyle.Underline)
Dim f As Font = New Font(Me.Font.FontFamily, 11, FontStyle.Bold)
DrawString(g, "GraphicsPath.AddPieメソッドの引数の意味", titleF, Brushes.Black, Brushes.LightGray, -80, -75)
g.FillRectangle(Brushes.LightBlue, New Rectangle(0, 0, 200, 200))
Using p = New Pen(Color.Blue, 2)
g.DrawRectangle(p, New Rectangle(0, 0, 200, 200))
End Using
Using p = New Pen(Color.LimeGreen, 2)
g.DrawCurve(p, New Point() {New Point(0, 0), New Point(25, -7), New Point(50, -10)})
DrawString(g, "width", f, Brushes.LimeGreen, Brushes.Black, 80, -20)
g.DrawCurve(p, New Point() {New Point(200, 0), New Point(175, -7), New Point(150, -10)})
End Using
Using p = New Pen(Color.Cyan, 2)
g.DrawCurve(p, New Point() {New Point(0, 0), New Point(-7, 25), New Point(-10, 50)})
DrawString(g, "height", f, Brushes.Cyan, Brushes.Black, -45, 80)
g.DrawCurve(p, New Point() {New Point(0, 200), New Point(-7, 175), New Point(-10, 150)})
End Using
g.FillEllipse(Brushes.Gold, New Rectangle(-2, -2, 4, 4))
Using p = New Pen(Color.Orange, 2)
g.DrawEllipse(p, New Rectangle(-2, -2, 4, 4))
DrawString(g, "(x, y)", f, Brushes.Orange, Brushes.Black, -15, -25)
End Using
g.FillEllipse(Brushes.YellowGreen, New Rectangle(0, 0, 200, 200))
Using p = New Pen(Color.Green, 2)
g.DrawEllipse(p, New Rectangle(0, 0, 200, 200))
End Using
g.FillPie(Brushes.Gold, New Rectangle(0, 0, 200, 200), -60, -80)
Using p = New Pen(Color.Yellow, 2)
g.DrawPie(p, New Rectangle(0, 0, 200, 200), -60, -80)
End Using
Using p = New Pen(Color.Black, 2)
g.DrawBezier(p, New Point(115, 30), New Point(120, 15), New Point(125, 5), New Point(130, 0))
g.DrawBezier(p, New Point(130, 0), New Point(139, -11), New Point(148, -11), New Point(150, 0))
g.DrawBezier(p, New Point(150, 0), New Point(148, 15), New Point(134, 13), New Point(132, 0))
g.DrawBezier(p, New Point(132, 0), New Point(135, -10), New Point(140, -15), New Point(160, -30))
DrawString(g, "描きたい扇", f, Brushes.BlueViolet, Brushes.Black, 160, -40)
End Using
Using p = New Pen(Color.Black, 2)
g.DrawBezier(p, New Point(191, 38), New Point(193, 29), New Point(198, 20), New Point(205, 9))
g.DrawBezier(p, New Point(205, 9), New Point(209, 0), New Point(216, 0), New Point(220, 10))
g.DrawBezier(p, New Point(220, 10), New Point(216, 20), New Point(209, 20), New Point(206, 11))
g.DrawBezier(p, New Point(206, 11), New Point(212, 0), New Point(220, -9), New Point(228, -17))
DrawString(g, "扇に外接する長方形(Rectangle)", f, Brushes.Chocolate, Brushes.Black, 210, -25)
End Using
Using p = New Pen(Color.Brown, 2)
g.DrawLine(p, 100, 100, 200, 100)
DrawString(g, "0°", f, Brushes.Black, Brushes.White, 205, 95)
End Using
Using p = New Pen(Color.Brown, 2)
p.CustomEndCap = New Drawing2D.AdjustableArrowCap(5, 5)
g.DrawArc(p, New Rectangle(70, 70, 60, 60), 0, -60)
DrawString(g, "-60°(startAngle)", f, Brushes.Red, Brushes.White, 130, 75)
g.DrawArc(p, New Rectangle(60, 60, 80, 80), -60, -80)
DrawString(g, "-80°(sweepAngle)", f, Brushes.DarkBlue, Brushes.White, 75, 45)
End Using
DrawString(g, "引数(x, y)の意味", titleF, Brushes.Black, Brushes.LightGray, -80, -60 + 280)
ButtonRenderer.DrawButton(g, New Rectangle(0 - 40, 260, 200, 200), VisualStyles.PushButtonState.Normal)
Using buttonF = New Font(Me.Font.FontFamily, 11)
DrawString(g, "Button1", buttonF, Brushes.Black, Brushes.White, 70 - 40, 350)
End Using
g.FillEllipse(Brushes.Gold, New Rectangle(-2 - 40, -2 + 260, 4, 4))
Using p = New Pen(Color.Orange, 2)
g.DrawEllipse(p, New Rectangle(-2 - 40, -2 + 260, 4, 4))
DrawString(g, "(0, 0)", f, Brushes.Orange, Brushes.Black, -15 - 40, -20 + 260)
End Using
Using br = New SolidBrush(Color.FromArgb(128, Color.LightBlue.R, Color.LightBlue.G, Color.LightBlue.B))
g.FillRectangle(br, New Rectangle(0 + 40, 260 + 30, 200, 200))
End Using
Using p = New Pen(Color.Blue, 2)
g.DrawRectangle(p, New Rectangle(0 + 40, 260 + 30, 200, 200))
End Using
g.FillEllipse(Brushes.Gold, New Rectangle(-2 + 40, -2 + 260 + 30, 4, 4))
Using p = New Pen(Color.Orange, 2)
g.DrawEllipse(p, New Rectangle(-2 + 40, -2 + 260 + 30, 4, 4))
DrawString(g, "(x, y)", f, Brushes.Orange, Brushes.Black, -15 + 40, -20 + 260 + 30)
End Using
Using br = New SolidBrush(Color.FromArgb(128, Color.Gold.R, Color.Gold.G, Color.Gold.B))
g.FillPie(br, New Rectangle(0 + 40, 260 + 30, 200, 200), -60, -80)
End Using
Using p = New Pen(Color.Yellow, 2)
g.DrawPie(p, New Rectangle(0 + 40, 260 + 30, 200, 200), -60, -80)
End Using
Using p = New Pen(Color.Red, 2)
p.DashStyle = Drawing2D.DashStyle.Dash
g.DrawLine(p, 160 - 1, 290, 160 - 1, 360)
End Using
DrawString(g, "ボタンの左上を原点として右方向x、下方向y", f, Brushes.Navy, Brushes.LightGray, 240 - 30, 260 - 40)
DrawString(g, "の分だけ扇の位置がずれることになる。だから、", f, Brushes.Navy, Brushes.LightGray, 240 - 30, 260 - 20)
DrawString(g, "幅や高さがそのままならずらした分だけ、右側が", f, Brushes.Navy, Brushes.LightGray, 240 - 30, 260)
DrawString(g, "欠ける(赤い点線の右側)。", f, Brushes.Navy, Brushes.LightGray, 240 - 30 + 50, 260 + 20)
End Sub
Private Sub DrawString(ByVal g As Graphics, ByVal text As String, ByVal f As Font, ByVal fore As Brush, ByVal back As Brush, ByVal x As Integer, ByVal y As Integer)
g.DrawString(text, f, back, x + 1, y + 1)
g.DrawString(text, f, fore, x, y)
End Sub
End Class