我编写了自己的折线类,它基本上保留了可以使用矩阵修改的点列表。多段线可以添加到其他多段线并在公共端点处连接。当终点等于起点时,折线将代表一个多边形。
然后,我有一种方法可以通过使用一系列 lineTo() 调用迭代点列表来将我的多边形转换为 Path 对象。然后,此路径将作为我 View 的 onDraw 方法中的剪辑路径应用到画布上。
它非常适合复杂的多边形,我可以绘制该路径来验证它的准确性。
到目前为止一切都很好,除了当我有一个中间有一个不规则孔的复合多边形时我注意到了一些问题。我现在应该停止称它为多边形,因为它是另一个多边形内的多边形。
例如,考虑下图,其中外框和中间的“城堡”形状都是用作剪辑路径的同一 Path 对象的一部分。# 代表绘制区域。
+---------+
|#########|
|#+-+#+-+#|
|#| |#| |#|
|#| +-+ |#|
|#| |#|
|#+-----+#|
|#########|
+---------+
我希望外盒外面和内部“城堡”形状内的所有东西都被剪掉。我看到的问题是内部形状没有被正确剪裁。似乎是光线追踪算法的问题。
任何想法都会有所帮助。
编辑:另外,我尝试测试每个 Region.Op 模式,但都没有解决问题。我怀疑我需要采取措施来检测是否存在“漏洞”并做一些有创意的事情。