/* private */ void Centroid::addShell(const CoordinateSequence& pts) { size_t len = pts.size(); if (len > 0) setBasePoint(pts[0]); bool isPositiveArea = ! CGAlgorithms::isCCW(&pts); for (size_t i = 0; i < len - 1; ++i) { addTriangle(*areaBasePt, pts[i], pts[i+1], isPositiveArea); } addLineSegments(pts); }
/*public*/ void CentroidArea::add(const Geometry *geom) { if(const Polygon *poly=dynamic_cast<const Polygon*>(geom)) { setBasePoint(poly->getExteriorRing()->getCoordinateN(0)); add(poly); } else if(const GeometryCollection *gc=dynamic_cast<const GeometryCollection*>(geom)) { for(std::size_t i=0, n=gc->getNumGeometries(); i<n; ++i) { add(gc->getGeometryN(i)); } } }
/*public*/ void CentroidArea::add(const CoordinateSequence *ring) { setBasePoint(ring->getAt(0)); addShell(ring); }