paper.js:有什么方法可以使用 onMouseEnter/Leave 和透明路径填充?

paper.js: Any way to use onMouseEnter/Leave with transparent path fill?

我有一个 paper.js 矢量场景,其中包含带有轮廓但没有填充或透明填充的路径。当路径具有具有任何非零 alpha 值的填充颜色时,附加到每个路径的 onMouseEnter/onMouseLeave 事件正确触发,例如#00000001。当填充是透明的或不存在时,我只会在光标在形状上移动时碰巧碰到轮廓时触发 onMouseEnter 事件。

虽然最小 alpha 解决方案有效,或者我可以确保填充颜色与背景颜色相匹配,但我有重叠的形状,并且更喜欢不需要像那样可能导致问题的几乎正确的 hack 的解决方案许多形状堆叠起来。

This example 使用全局命中测试,我想我可以通过一些重新架构使其工作。这是最好的方法吗?

有什么方法可以让透明填充的路径在光标在形状内移动时始终触发 onMouseEnter 事件?

paper.js 非常努力地从命中结果中排除透明路径。最后,对我有用的最务实的事情是修补我感兴趣的各个路径。我使用的是 Typescript,因此注释:

(myPath as any)._hitTestSelf = function(point: paper.Point): paper.HitResult | undefined {
    // This conditional replaces the original paper.Item one:
    // if (options.fill && this.hasFill() && this._contains(point))
    if (this._contains(point)) 
        // HitResult doesn't expose a constructor; we need to build it ourselves.
        const result = new paper.HitResult()
        result.type = 'fill'
        result.item = this
        return result
    }
}

我知道有很多关于效率、一般的猴子补丁等的警告,我可能忽略了,但是,好吧,WFM。

顺便说一句,我很乐意将 allowTransparent 视为 paper.js 中命中测试的一个选项。挖掘了源代码后,我认为这不会太难吗?