【问题标题】:Detect collision between svg path and svg text检测 svg 路径和 svg 文本之间的冲突
【发布时间】:2015-03-05 22:19:46
【问题描述】:

假设我有一个 svg 路径和一段文本。我想弄清楚它们相交的地方。我不确定从哪里开始,因为 svg 路径的 getBBox() 函数没有帮助。

我应该从哪里开始?

【问题讨论】:

  • 当你说“它们相交的地方”时,你是什么意思?您是指线条接触的字符,还是线条接触任何字形轮廓的确切位置,或者仅仅是它们是否完全相互接触?
  • 它们完全相互接触的地方 - 或者,为了简化,当文本的边界框接触线时。

标签: svg path collision-detection


【解决方案1】:

您通过getBBox() 获得了文本边界框。不幸的是,您可能已经发现,这不是字形的紧密边界框。它包括字体的完整下降高度和上升高度。但是,它应该为您提供一个合理的近似值。

下一步是确定路径与边界框的位置。获得完美的数学解决方案非常困难,但有一些迭代方法更容易并能提供良好的结果。

路径元素有一个 couple of DOM functions 可以提供帮助:getTotalLength()getPointAtLength()。您可以沿着从 0 到路径长度的路径,调用 getPointAtLength(),直到返回的点位于文本 bbox 内。

如果您想获得更准确的信息并确定文本中的哪个字符触及线,有一些DOM functions on SVG text elements 应该很有用。例如,`getExtentOfChar(n) 返回文本中第 n 个字符的边界。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2013-03-14
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多