[geos-commits] r3649 - in trunk: . include/geos/operation/buffer src/operation/buffer
svn_geos at osgeo.org
svn_geos at osgeo.org
Mon May 28 05:29:48 PDT 2012
Author: strk
Date: 2012-05-28 05:29:47 -0700 (Mon, 28 May 2012)
New Revision: 3649
Added:
trunk/include/geos/operation/buffer/BufferInputLineSimplifier.h
Removed:
trunk/src/operation/buffer/BufferInputLineSimplifier.h
Modified:
trunk/NEWS
trunk/include/geos/operation/buffer/Makefile.am
trunk/src/operation/buffer/BufferInputLineSimplifier.cpp
trunk/src/operation/buffer/Makefile.am
trunk/src/operation/buffer/OffsetCurveBuilder.cpp
trunk/src/operation/buffer/OffsetSegmentGenerator.cpp
Log:
Install BufferInputLineSimplifier.h header (#548)
Thanks ylan for the patch
Modified: trunk/NEWS
===================================================================
--- trunk/NEWS 2012-05-28 07:48:02 UTC (rev 3648)
+++ trunk/NEWS 2012-05-28 12:29:47 UTC (rev 3649)
@@ -4,6 +4,7 @@
- New things:
- CAPI: GEOSNode (#496) - PHP: Geometry->node
- GeometryPrecisionReducer class
+ - BufferInputLineSimplifier header exposed (#548)
- C++ API changes:
- New noding::GeometryNoder class
- Added BufferOp::setSingleSided
Copied: trunk/include/geos/operation/buffer/BufferInputLineSimplifier.h (from rev 3648, trunk/src/operation/buffer/BufferInputLineSimplifier.h)
===================================================================
--- trunk/include/geos/operation/buffer/BufferInputLineSimplifier.h (rev 0)
+++ trunk/include/geos/operation/buffer/BufferInputLineSimplifier.h 2012-05-28 12:29:47 UTC (rev 3649)
@@ -0,0 +1,190 @@
+/**********************************************************************
+ *
+ * GEOS - Geometry Engine Open Source
+ * http://geos.osgeo.org
+ *
+ * Copyright (C) 2009 Sandro Santilli <strk at keybit.net>
+ *
+ * This is free software; you can redistribute and/or modify it under
+ * the terms of the GNU Lesser General Public Licence as published
+ * by the Free Software Foundation.
+ * See the COPYING file for more information.
+ *
+ **********************************************************************
+ *
+ * Last port: operation/buffer/BufferInputLineSimplifier.java r320 (JTS-1.12)
+ *
+ **********************************************************************/
+
+#ifndef GEOS_OP_BUFFER_BUFFERINPUTLINESIMPLIFIER_H
+#define GEOS_OP_BUFFER_BUFFERINPUTLINESIMPLIFIER_H
+
+#include <geos/geom/CoordinateSequence.h> // complete type required
+#include <geos/algorithm/CGAlgorithms.h> // for enum
+
+#include <memory>
+#include <vector> // for composition
+
+
+// Forward declarations
+namespace geos {
+ namespace geom {
+ class CoordinateSequence;
+ //class PrecisionModel;
+ }
+}
+
+namespace geos {
+namespace operation { // geos.operation
+namespace buffer { // geos.operation.buffer
+
+/** \brief
+ * Simplifies a buffer input line to
+ * remove concavities with shallow depth.
+ *
+ * The most important benefit of doing this
+ * is to reduce the number of points and the complexity of
+ * shape which will be buffered.
+ * It also reduces the risk of gores created by
+ * the quantized fillet arcs (although this issue
+ * should be eliminated in any case by the
+ * offset curve generation logic).
+ *
+ * A key aspect of the simplification is that it
+ * affects inside (concave or inward) corners only.
+ * Convex (outward) corners are preserved, since they
+ * are required to ensure that the generated buffer curve
+ * lies at the correct distance from the input geometry.
+ *
+ * Another important heuristic used is that the end segments
+ * of the input are never simplified. This ensures that
+ * the client buffer code is able to generate end caps faithfully.
+ *
+ * No attempt is made to avoid self-intersections in the output.
+ * This is acceptable for use for generating a buffer offset curve,
+ * since the buffer algorithm is insensitive to invalid polygonal
+ * geometry. However,
+ * this means that this algorithm
+ * cannot be used as a general-purpose polygon simplification technique.
+ *
+ * @author Martin Davis
+ *
+ */
+class BufferInputLineSimplifier
+{
+
+public:
+
+ /**
+ * Simplify the input coordinate list.
+ *
+ * If the distance tolerance is positive,
+ * concavities on the LEFT side of the line are simplified.
+ * If the supplied distance tolerance is negative,
+ * concavities on the RIGHT side of the line are simplified.
+ *
+ * @param inputLine the coordinate sequence to simplify
+ * @param distanceTol simplification distance tolerance to use
+ * @return a simplified version of the coordinate sequence
+ */
+ static std::auto_ptr<geom::CoordinateSequence> simplify(
+ const geom::CoordinateSequence& inputLine, double distanceTol);
+
+ BufferInputLineSimplifier(const geom::CoordinateSequence& input);
+
+ /**
+ * Simplify the input coordinate list.
+ * If the distance tolerance is positive,
+ * concavities on the LEFT side of the line are simplified.
+ * If the supplied distance tolerance is negative,
+ * concavities on the RIGHT side of the line are simplified.
+ *
+ * @param distanceTol simplification distance tolerance to use
+ * @return the simplified coordinate list
+ */
+ std::auto_ptr<geom::CoordinateSequence> simplify(double distanceTol);
+
+private:
+
+ /**
+ * Uses a sliding window containing 3 vertices to detect shallow angles
+ * in which the middle vertex can be deleted, since it does not
+ * affect the shape of the resulting buffer in a significant way.
+ * @return
+ */
+ bool deleteShallowConcavities();
+
+ /**
+ * Finds the next non-deleted index,
+ * or the end of the point array if none
+ *
+ * @param index
+ * @return the next non-deleted index, if any
+ * @return inputLine.size() if there are no more non-deleted indices
+ */
+ unsigned int findNextNonDeletedIndex(unsigned int index) const;
+
+ std::auto_ptr<geom::CoordinateSequence> collapseLine() const;
+
+ bool isDeletable(int i0, int i1, int i2, double distanceTol) const;
+
+ bool isShallowConcavity(const geom::Coordinate& p0,
+ const geom::Coordinate& p1,
+ const geom::Coordinate& p2,
+ double distanceTol) const;
+
+ /**
+ * Checks for shallowness over a sample of points in the given section.
+ *
+ * This helps prevents the siplification from incrementally
+ * "skipping" over points which are in fact non-shallow.
+ *
+ * @param p0 start coordinate of section
+ * @param p2 end coordinate of section
+ * @param i0 start index of section
+ * @param i2 end index of section
+ * @param distanceTol distance tolerance
+ * @return
+ */
+ bool isShallowSampled(const geom::Coordinate& p0,
+ const geom::Coordinate& p2,
+ int i0, int i2, double distanceTol) const;
+
+ bool isShallow(const geom::Coordinate& p0,
+ const geom::Coordinate& p1,
+ const geom::Coordinate& p2,
+ double distanceTol) const;
+
+ bool isConcave(const geom::Coordinate& p0,
+ const geom::Coordinate& p1,
+ const geom::Coordinate& p2) const;
+
+ static const int NUM_PTS_TO_CHECK = 10;
+
+ static const int INIT = 0;
+ static const int DELETE = 1;
+ static const int KEEP = 1;
+
+ const geom::CoordinateSequence& inputLine;
+ double distanceTol;
+ std::vector<int> isDeleted;
+
+ int angleOrientation;
+
+ // Declare type as noncopyable
+ BufferInputLineSimplifier(const BufferInputLineSimplifier& other);
+ BufferInputLineSimplifier& operator=(const BufferInputLineSimplifier& rhs);
+};
+
+
+} // namespace geos.operation.buffer
+} // namespace geos.operation
+} // namespace geos
+
+
+#endif // ndef GEOS_OP_BUFFER_BUFFERINPUTLINESIMPLIFIER_H
+
+/**********************************************************************
+ * $Log$
+ **********************************************************************/
+
Modified: trunk/include/geos/operation/buffer/Makefile.am
===================================================================
--- trunk/include/geos/operation/buffer/Makefile.am 2012-05-28 07:48:02 UTC (rev 3648)
+++ trunk/include/geos/operation/buffer/Makefile.am 2012-05-28 12:29:47 UTC (rev 3649)
@@ -1,14 +1,15 @@
#
-# This file is part of project GEOS (http://trac.osgeo.org/geos/)
+# This file is part of project GEOS (http://trac.osgeo.org/geos/)
#
-#SUBDIRS =
+#SUBDIRS =
-#EXTRA_DIST =
+#EXTRA_DIST =
geosdir = $(includedir)/geos/operation/buffer
geos_HEADERS = \
BufferBuilder.h \
+ BufferInputLineSimplifier.h \
BufferOp.h \
BufferParameters.h \
BufferSubgraph.h \
@@ -17,4 +18,4 @@
OffsetSegmentGenerator.h \
OffsetSegmentString.h \
RightmostEdgeFinder.h \
- SubgraphDepthLocater.h
+ SubgraphDepthLocater.h
Modified: trunk/src/operation/buffer/BufferInputLineSimplifier.cpp
===================================================================
--- trunk/src/operation/buffer/BufferInputLineSimplifier.cpp 2012-05-28 07:48:02 UTC (rev 3648)
+++ trunk/src/operation/buffer/BufferInputLineSimplifier.cpp 2012-05-28 12:29:47 UTC (rev 3649)
@@ -7,7 +7,7 @@
*
* This is free software; you can redistribute and/or modify it under
* the terms of the GNU Lesser General Public Licence as published
- * by the Free Software Foundation.
+ * by the Free Software Foundation.
* See the COPYING file for more information.
*
**********************************************************************
@@ -16,7 +16,7 @@
*
**********************************************************************/
-#include "BufferInputLineSimplifier.h"
+#include <geos/operation/buffer/BufferInputLineSimplifier.h>
#include <geos/geom/CoordinateSequence.h> // for inlines
#include <geos/geom/CoordinateArraySequence.h> // for constructing the return
#include <geos/algorithm/CGAlgorithms.h> // for use
@@ -43,7 +43,7 @@
{}
/*public static*/
-std::auto_ptr<geom::CoordinateSequence>
+std::auto_ptr<geom::CoordinateSequence>
BufferInputLineSimplifier::simplify(const geom::CoordinateSequence& inputLine,
double distanceTol)
{
@@ -52,7 +52,7 @@
}
/* public */
-std::auto_ptr<geom::CoordinateSequence>
+std::auto_ptr<geom::CoordinateSequence>
BufferInputLineSimplifier::simplify(double nDistanceTol)
{
distanceTol = fabs(nDistanceTol);
@@ -121,12 +121,12 @@
}
/* private */
-std::auto_ptr<geom::CoordinateSequence>
+std::auto_ptr<geom::CoordinateSequence>
BufferInputLineSimplifier::collapseLine() const
{
std::auto_ptr<geom::CoordinateSequence> coordList(
new CoordinateArraySequence());
-
+
for (size_t i=0, n=inputLine.size(); i<n; ++i)
{
if (isDeleted[i] != DELETE)
Deleted: trunk/src/operation/buffer/BufferInputLineSimplifier.h
===================================================================
--- trunk/src/operation/buffer/BufferInputLineSimplifier.h 2012-05-28 07:48:02 UTC (rev 3648)
+++ trunk/src/operation/buffer/BufferInputLineSimplifier.h 2012-05-28 12:29:47 UTC (rev 3649)
@@ -1,190 +0,0 @@
-/**********************************************************************
- *
- * GEOS - Geometry Engine Open Source
- * http://geos.osgeo.org
- *
- * Copyright (C) 2009 Sandro Santilli <strk at keybit.net>
- *
- * This is free software; you can redistribute and/or modify it under
- * the terms of the GNU Lesser General Public Licence as published
- * by the Free Software Foundation.
- * See the COPYING file for more information.
- *
- **********************************************************************
- *
- * Last port: operation/buffer/BufferInputLineSimplifier.java r320 (JTS-1.12)
- *
- **********************************************************************/
-
-#ifndef GEOS_OP_BUFFER_BUFFERINPUTLINESIMPLIFIER_H
-#define GEOS_OP_BUFFER_BUFFERINPUTLINESIMPLIFIER_H
-
-#include <geos/geom/CoordinateSequence.h> // complete type required
-#include <geos/algorithm/CGAlgorithms.h> // for enum
-
-#include <memory>
-#include <vector> // for composition
-
-
-// Forward declarations
-namespace geos {
- namespace geom {
- class CoordinateSequence;
- //class PrecisionModel;
- }
-}
-
-namespace geos {
-namespace operation { // geos.operation
-namespace buffer { // geos.operation.buffer
-
-/** \brief
- * Simplifies a buffer input line to
- * remove concavities with shallow depth.
- *
- * The most important benefit of doing this
- * is to reduce the number of points and the complexity of
- * shape which will be buffered.
- * It also reduces the risk of gores created by
- * the quantized fillet arcs (although this issue
- * should be eliminated in any case by the
- * offset curve generation logic).
- *
- * A key aspect of the simplification is that it
- * affects inside (concave or inward) corners only.
- * Convex (outward) corners are preserved, since they
- * are required to ensure that the generated buffer curve
- * lies at the correct distance from the input geometry.
- *
- * Another important heuristic used is that the end segments
- * of the input are never simplified. This ensures that
- * the client buffer code is able to generate end caps faithfully.
- *
- * No attempt is made to avoid self-intersections in the output.
- * This is acceptable for use for generating a buffer offset curve,
- * since the buffer algorithm is insensitive to invalid polygonal
- * geometry. However,
- * this means that this algorithm
- * cannot be used as a general-purpose polygon simplification technique.
- *
- * @author Martin Davis
- *
- */
-class BufferInputLineSimplifier
-{
-
-public:
-
- /**
- * Simplify the input coordinate list.
- *
- * If the distance tolerance is positive,
- * concavities on the LEFT side of the line are simplified.
- * If the supplied distance tolerance is negative,
- * concavities on the RIGHT side of the line are simplified.
- *
- * @param inputLine the coordinate sequence to simplify
- * @param distanceTol simplification distance tolerance to use
- * @return a simplified version of the coordinate sequence
- */
- static std::auto_ptr<geom::CoordinateSequence> simplify(
- const geom::CoordinateSequence& inputLine, double distanceTol);
-
- BufferInputLineSimplifier(const geom::CoordinateSequence& input);
-
- /**
- * Simplify the input coordinate list.
- * If the distance tolerance is positive,
- * concavities on the LEFT side of the line are simplified.
- * If the supplied distance tolerance is negative,
- * concavities on the RIGHT side of the line are simplified.
- *
- * @param distanceTol simplification distance tolerance to use
- * @return the simplified coordinate list
- */
- std::auto_ptr<geom::CoordinateSequence> simplify(double distanceTol);
-
-private:
-
- /**
- * Uses a sliding window containing 3 vertices to detect shallow angles
- * in which the middle vertex can be deleted, since it does not
- * affect the shape of the resulting buffer in a significant way.
- * @return
- */
- bool deleteShallowConcavities();
-
- /**
- * Finds the next non-deleted index,
- * or the end of the point array if none
- *
- * @param index
- * @return the next non-deleted index, if any
- * @return inputLine.size() if there are no more non-deleted indices
- */
- unsigned int findNextNonDeletedIndex(unsigned int index) const;
-
- std::auto_ptr<geom::CoordinateSequence> collapseLine() const;
-
- bool isDeletable(int i0, int i1, int i2, double distanceTol) const;
-
- bool isShallowConcavity(const geom::Coordinate& p0,
- const geom::Coordinate& p1,
- const geom::Coordinate& p2,
- double distanceTol) const;
-
- /**
- * Checks for shallowness over a sample of points in the given section.
- *
- * This helps prevents the siplification from incrementally
- * "skipping" over points which are in fact non-shallow.
- *
- * @param p0 start coordinate of section
- * @param p2 end coordinate of section
- * @param i0 start index of section
- * @param i2 end index of section
- * @param distanceTol distance tolerance
- * @return
- */
- bool isShallowSampled(const geom::Coordinate& p0,
- const geom::Coordinate& p2,
- int i0, int i2, double distanceTol) const;
-
- bool isShallow(const geom::Coordinate& p0,
- const geom::Coordinate& p1,
- const geom::Coordinate& p2,
- double distanceTol) const;
-
- bool isConcave(const geom::Coordinate& p0,
- const geom::Coordinate& p1,
- const geom::Coordinate& p2) const;
-
- static const int NUM_PTS_TO_CHECK = 10;
-
- static const int INIT = 0;
- static const int DELETE = 1;
- static const int KEEP = 1;
-
- const geom::CoordinateSequence& inputLine;
- double distanceTol;
- std::vector<int> isDeleted;
-
- int angleOrientation;
-
- // Declare type as noncopyable
- BufferInputLineSimplifier(const BufferInputLineSimplifier& other);
- BufferInputLineSimplifier& operator=(const BufferInputLineSimplifier& rhs);
-};
-
-
-} // namespace geos.operation.buffer
-} // namespace geos.operation
-} // namespace geos
-
-
-#endif // ndef GEOS_OP_BUFFER_BUFFERINPUTLINESIMPLIFIER_H
-
-/**********************************************************************
- * $Log$
- **********************************************************************/
-
Modified: trunk/src/operation/buffer/Makefile.am
===================================================================
--- trunk/src/operation/buffer/Makefile.am 2012-05-28 07:48:02 UTC (rev 3648)
+++ trunk/src/operation/buffer/Makefile.am 2012-05-28 12:29:47 UTC (rev 3649)
@@ -1,16 +1,15 @@
#
-# This file is part of project GEOS (http://trac.osgeo.org/geos/)
+# This file is part of project GEOS (http://trac.osgeo.org/geos/)
#
-SUBDIRS =
+SUBDIRS =
noinst_LTLIBRARIES = libopbuffer.la
-INCLUDES = -I$(top_srcdir)/include
+INCLUDES = -I$(top_srcdir)/include
libopbuffer_la_SOURCES = \
BufferBuilder.cpp \
BufferInputLineSimplifier.cpp \
- BufferInputLineSimplifier.h \
BufferOp.cpp \
BufferParameters.cpp \
BufferSubgraph.cpp \
@@ -21,4 +20,4 @@
SubgraphDepthLocater.cpp \
$(NULL)
-libopbuffer_la_LIBADD =
+libopbuffer_la_LIBADD =
Modified: trunk/src/operation/buffer/OffsetCurveBuilder.cpp
===================================================================
--- trunk/src/operation/buffer/OffsetCurveBuilder.cpp 2012-05-28 07:48:02 UTC (rev 3648)
+++ trunk/src/operation/buffer/OffsetCurveBuilder.cpp 2012-05-28 12:29:47 UTC (rev 3649)
@@ -9,7 +9,7 @@
*
* This is free software; you can redistribute and/or modify it under
* the terms of the GNU Lesser General Public Licence as published
- * by the Free Software Foundation.
+ * by the Free Software Foundation.
* See the COPYING file for more information.
*
**********************************************************************
@@ -25,6 +25,7 @@
#include <geos/algorithm/CGAlgorithms.h>
#include <geos/algorithm/Angle.h>
#include <geos/operation/buffer/OffsetCurveBuilder.h>
+#include <geos/operation/buffer/BufferInputLineSimplifier.h>
#include <geos/operation/buffer/BufferOp.h>
#include <geos/operation/buffer/BufferParameters.h>
#include <geos/geomgraph/Position.h>
@@ -36,8 +37,6 @@
#include <geos/algorithm/HCoordinate.h>
#include <geos/util.h>
-#include "BufferInputLineSimplifier.h"
-
#ifndef GEOS_DEBUG
#define GEOS_DEBUG 0
#endif
@@ -103,7 +102,7 @@
/*public*/
void
-OffsetCurveBuilder::getSingleSidedLineCurve(const CoordinateSequence* inputPts,
+OffsetCurveBuilder::getSingleSidedLineCurve(const CoordinateSequence* inputPts,
double distance, vector<CoordinateSequence*>& lineList, bool leftSide,
bool rightSide)
{
@@ -123,7 +122,7 @@
if ( leftSide ) {
//--------- compute points for left side of line
// Simplify the appropriate side of the line before generating
- std::auto_ptr<CoordinateSequence> simp1_ =
+ std::auto_ptr<CoordinateSequence> simp1_ =
BufferInputLineSimplifier::simplify( *inputPts, distTol );
const CoordinateSequence& simp1 = *simp1_;
@@ -141,7 +140,7 @@
//---------- compute points for right side of line
// Simplify the appropriate side of the line before generating
- std::auto_ptr<CoordinateSequence> simp2_ =
+ std::auto_ptr<CoordinateSequence> simp2_ =
BufferInputLineSimplifier::simplify( *inputPts, -distTol );
const CoordinateSequence& simp2 = *simp2_;
@@ -198,7 +197,7 @@
//--------- compute points for left side of line
// Simplify the appropriate side of the line before generating
- std::auto_ptr<CoordinateSequence> simp1_ =
+ std::auto_ptr<CoordinateSequence> simp1_ =
BufferInputLineSimplifier::simplify(inputPts, distTol);
const CoordinateSequence& simp1 = *simp1_;
@@ -214,7 +213,7 @@
//---------- compute points for right side of line
// Simplify the appropriate side of the line before generating
- std::auto_ptr<CoordinateSequence> simp2_ =
+ std::auto_ptr<CoordinateSequence> simp2_ =
BufferInputLineSimplifier::simplify(inputPts, -distTol);
const CoordinateSequence& simp2 = *simp2_;
@@ -239,8 +238,8 @@
double distTol = simplifyTolerance(distance);
// ensure that correct side is simplified
if (side == Position::RIGHT)
- distTol = -distTol;
- std::auto_ptr<CoordinateSequence> simp_ =
+ distTol = -distTol;
+ std::auto_ptr<CoordinateSequence> simp_ =
BufferInputLineSimplifier::simplify(inputPts, distTol);
const CoordinateSequence& simp = *simp_;
@@ -268,7 +267,7 @@
//---------- compute points for right side of line
// Simplify the appropriate side of the line before generating
- std::auto_ptr<CoordinateSequence> simp2_ =
+ std::auto_ptr<CoordinateSequence> simp2_ =
BufferInputLineSimplifier::simplify(inputPts, -distTol);
const CoordinateSequence& simp2 = *simp2_;
@@ -286,7 +285,7 @@
//--------- compute points for left side of line
// Simplify the appropriate side of the line before generating
- std::auto_ptr<CoordinateSequence> simp1_ =
+ std::auto_ptr<CoordinateSequence> simp1_ =
BufferInputLineSimplifier::simplify(inputPts, distTol);
const CoordinateSequence& simp1 = *simp1_;
Modified: trunk/src/operation/buffer/OffsetSegmentGenerator.cpp
===================================================================
--- trunk/src/operation/buffer/OffsetSegmentGenerator.cpp 2012-05-28 07:48:02 UTC (rev 3648)
+++ trunk/src/operation/buffer/OffsetSegmentGenerator.cpp 2012-05-28 12:29:47 UTC (rev 3649)
@@ -7,7 +7,7 @@
*
* This is free software; you can redistribute and/or modify it under
* the terms of the GNU Lesser General Public Licence as published
- * by the Free Software Foundation.
+ * by the Free Software Foundation.
* See the COPYING file for more information.
*
**********************************************************************
@@ -25,6 +25,7 @@
#include <geos/operation/buffer/OffsetSegmentGenerator.h>
#include <geos/operation/buffer/OffsetSegmentString.h>
#include <geos/operation/buffer/BufferOp.h>
+#include <geos/operation/buffer/BufferInputLineSimplifier.h>
#include <geos/operation/buffer/BufferParameters.h>
#include <geos/geomgraph/Position.h>
#include <geos/geom/CoordinateArraySequence.h>
@@ -35,8 +36,6 @@
#include <geos/algorithm/HCoordinate.h>
#include <geos/util.h>
-#include "BufferInputLineSimplifier.h"
-
#ifndef GEOS_DEBUG
#define GEOS_DEBUG 0
#endif
@@ -152,7 +151,7 @@
(orientation==CGAlgorithms::CLOCKWISE
&& side==Position::LEFT)
||
- (orientation==CGAlgorithms::COUNTERCLOCKWISE
+ (orientation==CGAlgorithms::COUNTERCLOCKWISE
&& side==Position::RIGHT);
if (orientation==0)
@@ -334,7 +333,7 @@
if (numInt>= 2)
{
/**
- * Segments are collinear but reversing.
+ * Segments are collinear but reversing.
* Add an "end-cap" fillet
* all the way around to other direction
*
@@ -386,7 +385,7 @@
}
else
{
- // add a circular fillet connecting the endpoints
+ // add a circular fillet connecting the endpoints
// of the offset segments
if (addStartPoint) segList.addPt(offset0.p1);
@@ -423,7 +422,7 @@
// since it is completely internal to the buffer polygon.
//
// In complex buffer cases the closing segment may cut across many
- // other segments in the generated offset curve.
+ // other segments in the generated offset curve.
// In order to improve the performance of the noding, the closing
// segment should be kept as short as possible.
// (But not too short, since that would defeat it's purpose).
More information about the geos-commits
mailing list