【问题标题】:ArcTo from SVG Path to Java AWT从 SVG 路径到 Java AWT 的 ArcTo
【发布时间】:2017-10-31 03:35:36
【问题描述】:

我的 Java awt 开发被一些数学困住了。

我需要将 SVG 的 Path 命令放入 awt 的路径中。一切正常,但后来我遇到了 ArcTo 命令,我仍然无法正确操作。

AWT 的 ArcTo 命令需要包含 Arc 的 Rectangle 的 x 和 y 坐标、宽度和高度、angleStart、弧的角度范围以及弧结束的类型(无关)。

new Arc2D.Double(x, y, w, h, start, extent, type);

SVG 的 ArcTo 命令仅此而已。 Svg 给出圆弧的 X 和 Y 半径、一个旋转、两个布尔值(标志)和一个目标点。这两个标志用于在其他参数留下的四种弧的可能性之间进行选择。 This link shows nicely how it's done.

A rx ry x-axis-rotation large-arc-flag sweep-flag x y

JavaFX 的 ArcTo 命令几乎没有这样的作用,

new ArcTo(radiusX, radiusY, xAxisRotation, arcExtent, arcY, largeArcFlag, sweepFlag);

我的数学还不够好,无法在这两个构造函数之间进行这种转换。我会继续我的研究,但我现在真的迷路了,我真的需要你的帮助!

【问题讨论】:

  • Here 是 OpenJFX 源代码。 private addArcTo 方法正是执行该计算。
  • SVG arcs 可以旋转 GDI 样式(就像你的 Arc2D)不能。如果您可以在 gfx 上应用矩阵,那么您可以将 SVG 弧转换为轴对齐的椭圆弧 + 将其转换为所需弧的变换矩阵......不容易做到......但仍然可行(将纵横比从椭圆转换为圆计算并转换回椭圆有很大帮助......顺便说一句,在 SVG 文档中有 SVG 弧的方程。如果转换矩阵不是一个选项,您需要将弧转换为折线,但会丢失信息......请参阅Converting an svg arc to lines跨度>
  • @ccprog 非常感谢,这项工作就像一个魅力。需要进行一些小的调整,但结果是完美的。对我来说数学太多了。

标签: java math svg path awt


【解决方案1】:

我使用 batik SVG 库来实现 SVG 图形。你可以蜡染的 ExtendedGeneralPath,它有一个 arcTo() 方法,它具有与 SVG 路径命令相同的顺序的完全相同的参数。例如,当你绘制路径 XX 时,下面给了我一个心形:

    ExtendedGeneralPath XX = new ExtendedGeneralPath();

    XX.moveTo(10, 30);
    XX.arcTo(20, 20, 0, false, true, 50, 30);
    XX.arcTo(20, 20, 0, false, true, 90, 30);
    XX.quadTo(90, 60, 50, 90);
    XX.quadTo(10, 60, 10, 30);
    XX.closePath(); 

【讨论】:

    猜你喜欢
    • 2011-10-07
    • 2011-10-13
    • 2015-05-20
    • 2012-09-14
    • 2012-03-16
    • 2017-07-24
    • 2022-01-03
    • 1970-01-01
    • 2019-12-13
    相关资源
    最近更新 更多