//------------------------------------------------------------------------------ private void BuildResult(PolygonsClp polyg) { polyg.Clear(); polyg.Capacity = m_PolyOuts.Count; for (int i = 0; i < m_PolyOuts.Count; i++) { OutRec outRec = m_PolyOuts[i]; if (outRec.pts == null) continue; OutPt p = outRec.pts; int cnt = PointCount(p); if (cnt < 3) continue; PolygonClp pg = new PolygonClp(cnt); for (int j = 0; j < cnt; j++) { pg.Add(p.pt); p = p.prev; } polyg.Add(pg); } }
//------------------------------------------------------------------------------ public static void PolyTreeToPolygons(PolyTree polytree, PolygonsClp polygons) { polygons.Clear(); polygons.Capacity = polytree.Total; AddPolyNodeToPolygons(polytree, polygons); }
//------------------------------------------------------------------------------ public bool Execute(ClipType clipType, PolygonsClp solution, PolyFillType subjFillType, PolyFillType clipFillType) { if (m_ExecuteLocked) return false; m_ExecuteLocked = true; solution.Clear(); m_SubjFillType = subjFillType; m_ClipFillType = clipFillType; m_ClipType = clipType; m_UsingPolyTree = false; bool succeeded = ExecuteInternal(); //build the return polygons ... if (succeeded) BuildResult(solution); m_ExecuteLocked = false; return succeeded; }