C#中与Java的GeneralPath相对应的是什么?

huangapple go评论88阅读模式
英文:

What is the c# equivalent to Java's GeneralPath?

问题

以下是翻译好的内容:

"Say I need to covert this java program into a C# program.

What is the C# equivalent to java's GeneralPath found in the package java.awt.geom?"

英文:

Say I need to covert this java program into a C# program.

What is the C# equivalent to java's GeneralPath found in the package java.awt.geom?

答案1

得分: 2

以下是翻译好的内容:

等效的(如果使用 System.Drawing)是:

System.Drawing.Drawing2D.GraphicsPath

你可以这样绘制线条:

var gp1 = new GraphicsPath();
gp1.AddLines(new Point[]
{
    new Point(50, 10),
    new Point(70, 80),
    new Point(90, 40),
    new Point(10, 40),
    new Point(50, 80)
});
gp1.CloseFigure();
e.Graphics.DrawPath(new Pen(new SolidBrush(Color.Red)), gp1);

GraphisPath 没有二次贝塞尔曲线,但你可以将其拟合为三次贝塞尔曲线。以下是执行此操作的扩展方法:

public static class GraphicsPathExtensions
{
    public static void AddQuadraticBezier(
        this GraphicsPath graphicsPath, PointF start, PointF ctrl, PointF end)
    {
        var c1 = new PointF(start.X, start.Y);
        c1.X += (2.0f / 3.0f) * (ctrl.X - start.X);
        c1.Y += (2.0f / 3.0f) * (ctrl.Y - start.Y);

        var c2 = new PointF(ctrl.X, ctrl.Y);
        c2.X += (end.X - ctrl.X) / 3.0f;
        c2.Y += (end.Y - ctrl.Y) / 3.0f;

        graphicsPath.AddBezier(start, c1, c2, end);
    }

    public static void AddQuadraticBezier(
        this GraphicsPath graphicsPath, Point start, Point ctrl, Point end)
    {
        graphicsPath.AddQuadraticBezier(
            new PointF(start.X, start.Y),
            new PointF(ctrl.X, ctrl.Y),
            new PointF(end.X, end.Y));
    }
}

你可以这样调用它:

var gp6 = new GraphicsPath();
gp6.AddQuadraticBezier(
    new Point(120, 180),
    new Point(150, 120),
    new Point(180, 180));
gp6.CloseFigure();
e.Graphics.DrawPath(new Pen(new SolidBrush(Color.Red)), gp6);

以下是所有示例的示例:

var gp7 = new GraphicsPath();
gp7.AddBezier(
    new Point(220, 150),
    new Point(240, 130),
    new Point(280, 160),
    new Point(300, 140));
gp7.AddLine(
    new Point(300, 140),
    new Point(300, 180));
gp7.AddQuadraticBezier(
    new Point(300, 180),
    new Point(260, 160),
    new Point(220, 180));
gp7.CloseFigure();
e.Graphics.DrawPath(new Pen(new SolidBrush(Color.Red)), gp7);
英文:

The equivalent (if using System.Drawing) is:

System.Drawing.Drawing2D.GraphicsPath

You can do lines as so:

var gp1 = new GraphicsPath();
gp1.AddLines(new Point[]
{
	new Point(50, 10),
	new Point(70, 80),
	new Point(90, 40),
	new Point(10, 40),
	new Point(50, 80)
});
gp1.CloseFigure();
e.Graphics.DrawPath(new Pen(new SolidBrush(Color.Red)), gp1);

GraphisPath does not have a Quadratic Bezier, but you can fit it in to a Cubic Bezier. Here is an extension to do that:

public static class GraphicsPathExtensions
{
	public static void AddQuadraticBezier(
		this GraphicsPath graphicsPath, PointF start, PointF ctrl, PointF end)
	{
		var c1 = new PointF(start.X, start.Y);
		c1.X += (2.0f / 3.0f) * (ctrl.X - start.X);
		c1.Y += (2.0f / 3.0f) * (ctrl.Y - start.Y);

		var c2 = new PointF(ctrl.X, ctrl.Y);
		c2.X += (end.X - ctrl.X) / 3.0f;
		c2.Y += (end.Y - ctrl.Y) / 3.0f;

		graphicsPath.AddBezier(start, c1, c2, end);
	}

	public static void AddQuadraticBezier(
		this GraphicsPath graphicsPath, Point start, Point ctrl, Point end)
	{
		graphicsPath.AddQuadraticBezier(
			new PointF(start.X, start.Y),
			new PointF(ctrl.X, ctrl.Y),
			new PointF(end.X, end.Y));
	}
}

You could call it as so:

var gp6 = new GraphicsPath();
gp6.AddQuadraticBezier(
	new Point(120, 180),
	new Point(150, 120),
	new Point(180, 180));
gp6.CloseFigure();
e.Graphics.DrawPath(new Pen(new SolidBrush(Color.Red)), gp6);

Here is an example of all of them:

var gp7 = new GraphicsPath();
gp7.AddBezier(
	new Point(220, 150),
	new Point(240, 130),
	new Point(280, 160),
	new Point(300, 140));
gp7.AddLine(
	new Point(300, 140),
	new Point(300, 180));
gp7.AddQuadraticBezier(
	new Point(300, 180),
	new Point(260, 160),
	new Point(220, 180));
gp7.CloseFigure();
e.Graphics.DrawPath(new Pen(new SolidBrush(Color.Red)), gp7);

huangapple
  • 本文由 发表于 2020年9月16日 03:28:13
  • 转载请务必保留本文链接:https://go.coder-hub.com/63908632.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定