/* public */ void PolygonizeGraph::deleteCutEdges(std::vector<const LineString*> &cutLines) { computeNextCWEdges(); typedef std::vector<PolygonizeDirectedEdge*> DirEdges; // label the current set of edgerings DirEdges junk; findLabeledEdgeRings(dirEdges, junk); junk.clear(); // not needed anymore /* * Cut Edges are edges where both dirEdges have the same label. * Delete them, and record them */ for (DirEdges::size_type i=0, in=dirEdges.size(); i<in; ++i) { DirectedEdge *de_ = dirEdges[i]; #ifdef GEOS_CAST_PARANOIA assert(dynamic_cast<PolygonizeDirectedEdge*>(de_)); #endif PolygonizeDirectedEdge *de = static_cast<PolygonizeDirectedEdge*>(de_); if (de->isMarked()) continue; DirectedEdge *sym_ = de->getSym(); #ifdef GEOS_CAST_PARANOIA assert(dynamic_cast<PolygonizeDirectedEdge*>(sym_)); #endif PolygonizeDirectedEdge *sym = static_cast<PolygonizeDirectedEdge*>(sym_); if (de->getLabel()==sym->getLabel()) { de->setMarked(true); sym->setMarked(true); // save the line as a cut edge Edge *e_ = de->getEdge(); #ifdef GEOS_CAST_PARANOIA assert(dynamic_cast<PolygonizeEdge*>(e_)); #endif PolygonizeEdge *e = static_cast<PolygonizeEdge*>(e_); cutLines.push_back(e->getLine()); } } }
/*private*/ CoordinateSequence* EdgeRing::getCoordinates() { if(ringPts == nullptr) { ringPts = factory->getCoordinateSequenceFactory()->create(); for(DeList::size_type i = 0, e = deList.size(); i < e; ++i) { const DirectedEdge* de = deList[i]; assert(dynamic_cast<PolygonizeEdge*>(de->getEdge())); PolygonizeEdge* edge = static_cast<PolygonizeEdge*>(de->getEdge()); addEdge(edge->getLine()->getCoordinatesRO(), de->getEdgeDirection(), ringPts); } } return ringPts; }