C# Windows form
Переделать код чтобы он создал окружность с крестом внутри, а не это фигуру.
Код:
public partial class Form1 : Form
{
int i, j, k, q, w, a, b,kol;
bool f, f1, f2, f3, f4, f_tmp;
GraphicsPath[] p;
GraphicsPath tmp = new GraphicsPath();
PointF[] v = new PointF[19];
PointF d, u;
float t_;
double pi = Math.PI / 180;
Color[] c1, c2;
Color c_1 = Color.Black, c_2 = Color.Red;
bool[] vid;
PointF[] kv = new PointF[8];
RectangleF rect;
float[] t;
public Form1()
{
InitializeComponent();
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (f1)
{
v[9].X =v[3].X= d.X;
v[9].Y =v[10].Y=v[11].Y=v[12].Y=v[13].Y= d.Y;
v[3].Y = v[2].Y = v[1].Y = v[0].Y = v[18].Y =v[17].Y= e.Y;
v[14].X = v[15].X = v[16].X = e.X;
v[6].Y = v[15].Y = d.Y + (e.Y - d.Y) / 2;
v[6].X = v[10].X = v[2].X = d.X+ (0.35f* (e.X - d.X));
v[0].X = v[18].X = v[12].X = d.X + (0.7f*(e.X - d.X));
v[1].X = v[11].X = d.X+ (0.5f* (e.X - d.X));
v[13].X = v[17].X = v[12].X + 0.553f * ((e.X - d.X) / 2);
v[14].Y = v[15].Y - 0.553f * ((e.Y - d.Y) / 2);
v[16].Y = v[15].Y + 0.553f * ((e.Y - d.Y) / 2);
v[4].X = v[8].X = v[3].X + 0.3f * (v[6].X - v[3].X);
v[5].X = v[7].X = v[3].X + 0.7f * (v[6].X - v[3].X);
v[4].Y = v[3].Y + 0.3f * (v[6].Y - v[3].Y);
v[5].Y = v[3].Y + 0.7f * (v[6].Y - v[3].Y);
v[7].Y = v[9].Y + 0.7f * (v[6].Y - v[9].Y);
v[8].Y = v[9].Y + 0.3f * (v[6].Y - v[9].Y);
tmp.Reset();
tmp.AddBeziers(v);
Invalidate();
}
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics gr = e.Graphics;
if (kol > 0)
{
for (i = 0; i < kol; i++)
{
gr.FillPath(new SolidBrush(c2[i]), p[i]);
gr.DrawPath(new Pen(c1[i], t[i]), p[i]);
}
for (i = 0; i < vid.Length; i++)
{
if (vid[i])
{
for (j = 0; j < 8; j++)
gr.FillRectangle(new SolidBrush(Color.Black), kv[j].X, kv[j].Y, 10, 10);
break;
}
}
}
if (f1)
{
gr.FillPath(new SolidBrush(c_2), tmp);
gr.DrawPath(new Pen(c_1, (float)numericUpDown8.Value), tmp);
}
}
private void Form1_Load(object sender, EventArgs e)
{
t_ = (float)numericUpDown8.Value;
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
if (kol > 0 && f1 == false) // выделение объектов
{
for (i = vid.Length - 1; i > -1; i--)
{
if (p[i].IsVisible(e.Location)) { vid[i] = !vid[i];
kvadrati();
Invalidate(); return;
}
} for (i = 0; i < vid.Length; i++) vid[i] = false;
numericUpDown8.Value =(decimal) t_;
Invalidate();
}
if (f1) // рисование объектов
{
f1 = f = false; Cursor = Cursors.Default;
kol++;
Array.Resize(ref p, kol); p[kol - 1] = new GraphicsPath(); p[kol - 1].AddPath(tmp, true);
Array.Resize(ref c1, kol); c1[kol - 1] = button1.BackColor;
Array.Resize(ref c2, kol); c2[kol - 1] = button2.BackColor;
Array.Resize(ref vid, kol);
Array.Resize(ref t, kol); t[kol - 1] = (float)numericUpDown8.Value;
Invalidate();
}
}
private void button1_Click(object sender, EventArgs e)
{
colorDialog1.Color = button1.BackColor;
colorDialog1.ShowDialog();
button1.BackColor = colorDialog1.Color;
if (kol==0) {c_1=button1.BackColor; return;}
f3 = false;
for (i = 0; i < vid.Length; i++)
{
if (vid[i]) { c1[i] = button1.BackColor; f3 = true; }
}
if (f3 == false) c_1 = button1.BackColor;
}
private void button2_Click(object sender, EventArgs e)
{
colorDialog1.Color = button2.BackColor;
colorDialog1.ShowDialog();
button2.BackColor = colorDialog1.Color;
if (kol == 0) { c_2 = button2.BackColor; return; }
f3 = false;
for (i = 0; i < vid.Length; i++)
{
if (vid[i]) { c2[i] = button2.BackColor; f3 = true; }
}
if (f3 == false) c_2 = button2.BackColor;
}
private void выделитьВсеToolStripMenuItem_Click(object sender, EventArgs e)
{
for (i = 0; i < t.Length; i++) vid[i] = true;
kvadrati();
Invalidate();
}
void kvadrati()
{
tmp.Reset();
for (j = 0; j < vid.Length; j++)
{
if (vid[j]) tmp.AddPath(p[j], true);
}
rect = tmp.GetBounds();
kv[0].X = rect.Left - 10; kv[0].Y = rect.Top - 10;
kv[1].X = rect.Left + rect.Width / 2 - 5; kv[1].Y = rect.Top - 10;
kv[2].X = rect.Right; kv[2].Y = rect.Top - 10;
kv[3].X = rect.Left - 10; kv[3].Y = rect.Top + rect.Height / 2 - 5;
kv[4].X = rect.Right; kv[4].Y = rect.Top + rect.Height / 2 - 5;
kv[5].X = rect.Left - 10; kv[5].Y = rect.Bottom;
kv[6].X = kv[1].X; kv[6].Y = rect.Bottom;
kv[7].X = rect.Right; kv[7].Y = rect.Bottom;
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete && kol > 0)
{
udalenie();
}
}
void udalenie()
{
k = q = 0;
for (i = 0; i < kol; i++)
{
if (vid[i] == false)
{
p[k] = p[i]; c1[k] = c1[i]; c2[k] = c2[i];
t[k] = t[i]; vid[k] = vid[i]; k++;
}
else q++;
}
kol -= q;
Array.Resize(ref p, kol);
Array.Resize(ref c1, kol);
Array.Resize(ref c2, kol);
Array.Resize(ref t, kol);
Array.Resize(ref vid, kol);
tmp.Reset();
Invalidate();
}
private void удалитьToolStripMenuItem_Click(object sender, EventArgs e)
{
udalenie();
}
private void numericUpDown8_ValueChanged(object sender, EventArgs e)
{
f_tmp = false;
for (i = 0; i < kol; i++)
{
if (vid[i]) { t[i] = (float)numericUpDown8.Value; f_tmp = true; }
}
if (f_tmp == false) t_ = (float)numericUpDown8.Value;
kvadrati();
Invalidate();
}
private void нижнийToolStripMenuItem_Click(object sender, EventArgs e)
{
for (i = 0; i < kol; i++) vid[i] = false;
if (sender==niz) vid[0] = true;
else vid[kol - 1] = true;
kvadrati();
Invalidate();
}
}
}