C#中級 コーディング例
G4)ナミモク四角
ナミナミが付いた四角を描く
public void MokuRect()
{
Bitmap imgBitmap = new Bitmap(600, 600);//pictureBoxのサイズ
pictureBox.Image = imgBitmap;
Graphics grf = Graphics.FromImage(imgBitmap);
Pen pen = new Pen(Color.Red, 0.1f);
//設定
float curveHeight = 10;//カーブの高さ
int segmentWCount = 10;//横片のカーブの数量
int segmentHCount = 10;//縦片のカーブの仮数量
PointF startPointF = new PointF(100, 100);//描き始め位置
PointF endPointF = new PointF(100, 100);//描き終わり仮位置
int width = 200;//四角幅
int height = 150;//四角高さ
float segmentWidth = width / segmentWCount;//横片カーブ幅
//設定調整
if (width % segmentWCount != 0) { segmentWidth = (int)(width / segmentWCount); }
segmentHCount = (int)(height / segmentWidth);
float segmentHeight = height / segmentHCount;
//上片
for (int i = 0; i < segmentWCount; i++)
{
float px1 = startPointF.X + i * segmentWidth;
float py1 = startPointF.Y;
float px2 = px1 + segmentWidth / 3;
float py2 = startPointF.Y - curveHeight;
float px3 = px1 + (segmentWidth * 2 / 3);
float py3 = py2;
float px4 = px1 + segmentWidth;
float py4 = py1;
endPointF.X = px4;
endPointF.Y = py4;
grf.DrawBezier(pen, new PointF(px1, py1), new PointF(px2, py2), new PointF(px3, py3),newPointF(px4, py4));
}
grf.DrawLine(pen, endPointF.X, endPointF.Y, startPointF.X + width, startPointF.Y);//繋ぎ
//右片
for (int i = 0; i < segmentHCount; i++)
{
float px1 = startPointF.X + width;
float py1 = startPointF.Y + i * segmentHeight;
float px2 = startPointF.X + width + curveHeight;
float py2 = py1 + segmentHeight / 3;
float px3 = px2;
float py3 = py1 + (segmentHeight * 2 / 3);
float px4 = px1;
float py4 = py1 + segmentHeight;
endPointF.X = px4;
endPointF.Y = py4;
grf.DrawBezier(pen, new PointF(px1, py1), new PointF(px2, py2), new PointF(px3, py3),newPointF(px4, py4));
}
grf.DrawLine(pen, endPointF.X, endPointF.Y, startPointF.X+width, startPointF.Y+height);//繋ぎ
//下片
for (int i = 0; i < segmentWCount; i++)
{
float px1 = startPointF.X + width - i * segmentWidth;
float py1 = startPointF.Y + height;
float px2 = px1 - segmentWidth / 3;
float py2 = startPointF.Y + height + curveHeight;
float px3 = px1 - (segmentWidth * 2 / 3);
float py3 = py2;
float px4 = px1 - segmentWidth;
float py4 = py1;
endPointF.X = px4;
endPointF.Y = py4;
grf.DrawBezier(pen, new PointF(px1, py1), new PointF(px2, py2), new PointF(px3, py3),newPointF(px4, py4));
}
grf.DrawLine(pen, endPointF.X, endPointF.Y, startPointF.X, startPointF.Y + height);//繋ぎ
//左片
for (int i = 0; i < segmentHCount; i++)
{
float px1 = startPointF.X;
float py1 = startPointF.Y + height - i * segmentHeight;
float px2 = startPointF.X - curveHeight;
float py2 = py1 - segmentHeight / 3;
float px3 = px2;
float py3 = py1 - (segmentHeight * 2 / 3);
float px4 = px1;
float py4 = py1 - segmentHeight;
endPointF.X = px4;
endPointF.Y = py4;
grf.DrawBezier(pen, new PointF(px1, py1), new PointF(px2, py2), new PointF(px3, py3),newPointF(px4, py4));
}
grf.DrawLine(pen, endPointF.X, endPointF.Y, startPointF.X, startPointF.Y);//繋ぎ
pictureBox.Image = imgBitmap;
grf.Dispose();
}
