我需要填写这个C来表示他的每一个形状。在这张照片中,我有一些形状,我想把颜色,红色或绿色。当我从C点击一个形状时,我按一个按钮放红色或绿色。我在PowerPoint中尝试这个,但很难从0创建形状。想在C#或vb.net中创建此C。
我的问题是,如何通过在C#或vb.net中按一个按钮,以C的形式创建这些形状并对其进行着色。非常感谢。
答案 0 :(得分:6)
这并不像我想象的那么难,但我通过创造一个' C'来完成简单任务。但是半圈。创造一个' C'形状你需要将形状分成三个组:两个四分之一圆和一个矩形..将所有Shapes
添加到同一个列表中!
处理将是相同的,只是数学部分会有所不同。实际上,矩形部分的数学运算甚至比它对弧的极其简单的方式更复杂: - )
以下是一个非常简单的Shape
类的示例:
class Shape
{
public GraphicsPath Path { get; set; }
public Color FillColor { get; set; }
public Shape(GraphicsPath gp) { Path = gp; }
}
您可以为此创建List<Shape>
:
List<Shape> FillList(int segments, int angle1, int angle2, int inner, int outer, int rings)
{
List<Shape> paths = new List<Shape>();
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;
}
我添加了一些NumericUpDowns
来演示工作中的参数:
如您所见,我通过选择一个然后从调色板图像中选择颜色为Shapes
着色。
以下是Form
&#39; Paint
事件:
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);
}
}
如果形状有一个并且也以某种颜色绘制,则形状会填充颜色;我为此使用固定的黑色Pen
,如果有Selected
形状,则使用红色的Shape selected = null;
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
if (selected != null)
{
selected.FillColor = ((Bitmap)pictureBox1.Image).GetPixel(e.X, e.Y);
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();
}
形状。
整个选择和着色就像这样简单:
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(event -> System.out.println("Hello World!"));
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
scene.getStylesheets().add("/styling/styles.css");
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}