¿Cómo dibujar formas y colorearlas con un botón?

Necesito llenar esta C para cada forma de él. En estas fotos tengo algunas formas donde quiero poner color, rojo o verde. Cuando hago clic en una forma de C y presiono un botón para poner rojo o verde. Intento esto en PowerPoint pero es difícil crear formas desde 0. Desea crear esta C en C # o vb.net.

Mi pregunta es, ¿cómo es posible crear estas formas en forma de C y colorearlas presionando un botón en C # o vb.net? Muchas gracias.

introduzca la descripción de la imagen aquí

No fue tan difícil como pensé, pero simplemente resolví la tarea creando no una ‘C’ sino un semicírculo . Para crear una forma ‘C’, debe dividir las formas en tres grupos: dos cuartos de círculo y un rectángulo. ¡Agregue todas las Shapes a la misma lista!

El procesamiento será el mismo, solo la parte de matemáticas será diferente. En realidad, las matemáticas para la parte del rectángulo serán incluso un poco más complicadas que la forma extremadamente sencilla en que funcionan los arcos 🙂

Aquí hay un ejemplo de una clase de Shape muy simple:

 class Shape { public GraphicsPath Path { get; set; } public Color FillColor { get; set; } public Shape(GraphicsPath gp) { Path = gp; } } 

Puede crear una List para esto de esta manera:

 List FillList(int segments, int angle1, int angle2, int inner, int outer, int rings) { List paths = new List(); float deltaA = 1f * (angle2 - angle1) / segments; float width = 1f * (outer - inner ) / rings; for (int s = 0; s < segments; s++) { float a = angle1 + s * deltaA; for (int r = 0; r < rings; r++) { float w1 = r * width; float w2 = w1 + width; GraphicsPath gp = new GraphicsPath(); RectangleF rect1 = new RectangleF(w1, w1, (outer - w1) * 2, (outer - w1) * 2); RectangleF rect2 = new RectangleF(w2, w2, (outer - w2) * 2, (outer - w2) * 2); gp.AddArc(rect1, a, deltaA); gp.AddArc(rect2, a + deltaA, -deltaA); gp.CloseFigure(); paths.Add(new Shape(gp)); } } return paths; } 

He agregado algunos NumericUpDowns para demostrar los parámetros en funcionamiento:

introduzca la descripción de la imagen aquí

Como puede ver, coloré las Shapes seleccionando una y luego seleccionando un color de una imagen de paleta.

Aquí está el evento de Paint del Form :

 private void Form1_Paint(object sender, PaintEventArgs e) { foreach (Shape gp in paths) { using (SolidBrush br = new SolidBrush(gp.FillColor)) if (gp.FillColor != null) e.Graphics.FillPath(br, gp.Path); e.Graphics.DrawPath(Pens.Black, gp.Path); if (gp == selected) e.Graphics.DrawPath(Pens.OrangeRed, gp.Path); } 

}

Las formas se rellenan con su Color si tienen una y también se dibujan en algún color; Utilizo un Pen negro fijo para esto y uno rojo para la forma Selected si hay uno.

Toda la selección y coloración es tan simple como esto:

 Shape selected = null; private void pictureBox1_MouseClick(object sender, MouseEventArgs e) { if (selected != null) { selected.FillColor = ((Bitmap)pictureBox1.Image).GetPixel(eX, eY); Invalidate(); } } private void Form1_MouseClick(object sender, MouseEventArgs e) { selected = null; foreach (Shape gp in paths) if (gp.Path.IsVisible(e.Location)) { selected = gp; break; } Invalidate(); }