官方对这个多边形运算的解释:
对于Difference,如果是如下的情况:
那么得到的结果,在solution里面只有一个多边形[a,b,m,1,4,c,d]
,即黄色的部分,是符合预期的。
但如果是如下的情况:
得到的solution结果里面是有2个多边形的,
[a,b,c,d]
和[1,2,3,4]
,如果再经过ply2tri运算后,只能得到[1,2,3,4]
,很明显不符合预期的。
注意:clipper.Execute()有2个重载函数,PolyTree中可以拿到Holes的信息
在clipper中,是能正常绘制出黄色区域的,看了源码的测试例后发现:
solution的结果仍旧是
[a,b,c,d]
和[1,2,3,4]
,不过它的绘制方式发生了变化, 细分多边形Tess,在这篇文章中也解释了为啥使用Tess
至此,也就确认问题在poly2tri
,clipper本身的处理是没有问题的
通过这个测试例会发现有个holes
的概念,顾名思义就是可以在多边形内挖洞
需要注意的是,poly2tri对Point的一些要求
- hole必须在polygon内,不能和polygon相交
- 2个不同的hole之间不能相交
- hole、polygon不能有重复的点
否则结果可能会不符合预期
网友评论