【问题标题】:remove a point/operation from java.awt.geom.GeneralPath从 java.awt.geom.GeneralPath 中删除一个点/操作
【发布时间】:2013-02-03 11:28:43
【问题描述】:

有什么方法可以删除一条一般路径的点吗? 我画了一个 GeneralPath 如下:

GeneralPath gp1=new GeneralPath();
gp1.moveTo(5,5);
gp1.lineTo(10,10);
gp1.lineto(10,30);
gp1.curveTo(2, 2, 7, 7, 5, 5);
gp1.closePath();

现在我想删除一个特定的点/操作,例如 lineto(10,10) 而不从新创建 GeneralPath。 (性能原因)

下面的命令是我喜欢的,但这不可用:

GeneralPath.removesegment(1);

附上一张截图,应该可以解释我的愿望 :-) 我想删除我的 GeneralPath 中的蓝色标记点。

感谢和问候

【问题讨论】:

    标签: java geometry pathgeometry


    【解决方案1】:

    Path2D.Float 派生自GeneralPath,不提供对其内部数据结构的访问,并且不允许进行您想要的那种操作。因此,除非您准备重新实现GeneralPath 或规避访问限制,否则根本无法实现这一目标。

    另一方面,我怀疑性能应该是一个很大的问题。我认为在大多数应用程序中,绘制路径比在内存中操作它们花费更多时间,因此从现有路径创建新路径不会花费太长时间。我将使用PathIterator 周围的包装器来实现这一点,因此您可以使用Path2D.append 将数据移动到新路径。包装器会简单地检测您要删除的点并跳过这些点,将其他所有内容委托给原始路径的默认迭代器。

    【讨论】:

    • 非常感谢。您的回答让我确信不会有性能问题,我会尝试在代码的其他部分进行优化。谢谢和最好的问候
    • 关于优化的第一条规则是:不要这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 2011-06-06
    • 2012-09-18
    • 2017-03-04
    • 2014-12-14
    相关资源
    最近更新 更多