//------------------------------------------------------------------------------ private void BuildResult2(PolyTree polytree) { polytree.Clear(); //add each output polygon/contour to polytree ... polytree.m_AllPolys.Capacity = m_PolyOuts.Count; for (int i = 0; i < m_PolyOuts.Count; i++) { OutRec outRec = m_PolyOuts[i]; int cnt = PointCount(outRec.pts); if (cnt < 3) continue; FixHoleLinkage(outRec); PolyNode pn = new PolyNode(); polytree.m_AllPolys.Add(pn); outRec.polyNode = pn; pn.m_polygon.Capacity = cnt; OutPt op = outRec.pts; for (int j = 0; j < cnt; j++) { pn.m_polygon.Add(op.pt); op = op.prev; } } //fixup PolyNode links etc ... polytree.m_Childs.Capacity = m_PolyOuts.Count; for (int i = 0; i < m_PolyOuts.Count; i++) { OutRec outRec = m_PolyOuts[i]; if (outRec.polyNode == null) continue; if (outRec.FirstLeft == null) polytree.AddChild(outRec.polyNode); else outRec.FirstLeft.polyNode.AddChild(outRec.polyNode); } }
//------------------------------------------------------------------------------ public static void AddPolyNodeToPolygons(PolyNode polynode, PolygonsClp polygons) { if (polynode.Contour.Count > 0) polygons.Add(polynode.Contour); foreach (PolyNode pn in polynode.Childs) AddPolyNodeToPolygons(pn, polygons); }
internal void AddChild(PolyNode Child) { int cnt = m_Childs.Count; m_Childs.Add(Child); Child.m_Parent = this; Child.m_Index = cnt; }