2

使用剪裁器库偏移多边形时,我得到了很多尖峰,不幸的是,这在我的用例中是不可接受的,我不知道如何摆脱它。我尝试了所有类型的连接类型设置,但无法实现任何目标。任何帮助将不胜感激。

我的应用程序分层模型并计算轮廓多边形。然后它还必须偏移轮廓。具有大量曲线的图层往往会出现一个或多个尖峰,例如: 在此处输入图像描述

现在这似乎还不错,但是一旦它发生在很多层上,模型就会变成这样: 在此处输入图像描述

重要的是要注意,在不偏移轮廓的情况下,我没有得到这些尖峰。

这是一个包含输入多边形的文件: http: //sdrv.ms/H7ysUC

这是一个包含输出多边形的文件: http: //sdrv.ms/1fLoZjT

该操作的参数是带有默认限制的 jtRound JointType 的偏移操作。增量为-25000。我还尝试了所有其他 JoinTypes,限制范围从 0 到 1000,但它们都创建了完全相同的尖峰。其他的 JoinTypes 虽然有一些其他的奇怪的效果。

4

1 回答 1

2

好的,我可以确认有错误。当相邻的多边形边缘几乎共线时会发生这种情况。

这是clipper.cs中大约第4220行的修复(尚未经过大量测试)

      void OffsetPoint(JoinType jointype)
      {
          m_sinA = (normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y);
          if (Math.Abs(m_sinA) < 0.00005) return; //ADD THIS LINE (todo - check this!)
          else if (m_sinA > 1.0) m_sinA = 1.0;
          else if (m_sinA < -1.0) m_sinA = -1.0;

注意:0.00005 只是一个足够接近零的值,以消除您提供的样品中的尖峰,但可能需要通过进一步测试重新调整。

于 2013-10-19T22:16:59.027 回答