GEOS
3.9.1dev
|
Computes the raw offset curve for a single Geometry component (ring, line or point). More...
#include <OffsetCurveBuilder.h>
Public Member Functions | |
OffsetCurveBuilder (const geom::PrecisionModel *newPrecisionModel, const BufferParameters &nBufParams) | |
const BufferParameters & | getBufferParameters () const |
Gets the buffer parameters being used to generate the curve. More... | |
bool | isLineOffsetEmpty (double distance) |
void | getLineCurve (const geom::CoordinateSequence *inputPts, double distance, std::vector< geom::CoordinateSequence * > &lineList) |
This method handles single points as well as lines. More... | |
void | getSingleSidedLineCurve (const geom::CoordinateSequence *inputPts, double distance, std::vector< geom::CoordinateSequence * > &lineList, bool leftSide, bool rightSide) |
This method handles single points as well as lines. More... | |
void | getRingCurve (const geom::CoordinateSequence *inputPts, int side, double distance, std::vector< geom::CoordinateSequence * > &lineList) |
This method handles the degenerate cases of single points and lines, as well as rings. More... | |
Private Member Functions | |
double | simplifyTolerance (double bufDistance) |
Computes the distance tolerance to use during input line simplification. More... | |
void | computeLineBufferCurve (const geom::CoordinateSequence &inputPts, OffsetSegmentGenerator &segGen) |
void | computeSingleSidedBufferCurve (const geom::CoordinateSequence &inputPts, bool isRightSide, OffsetSegmentGenerator &segGen) |
void | computeRingBufferCurve (const geom::CoordinateSequence &inputPts, int side, OffsetSegmentGenerator &segGen) |
std::unique_ptr< OffsetSegmentGenerator > | getSegGen (double dist) |
void | computePointCurve (const geom::Coordinate &pt, OffsetSegmentGenerator &segGen) |
OffsetCurveBuilder (const OffsetCurveBuilder &other)=delete | |
OffsetCurveBuilder & | operator= (const OffsetCurveBuilder &rhs)=delete |
Private Attributes | |
double | distance |
const geom::PrecisionModel * | precisionModel |
const BufferParameters & | bufParams |
Static Private Attributes | |
static const double | SIMPLIFY_FACTOR |
Use a value which results in a potential distance error which is significantly less than the error due to the quadrant segment discretization. More... | |
Computes the raw offset curve for a single Geometry component (ring, line or point).
A raw offset curve line is not noded - it may contain self-intersections (and usually will). The final buffer polygon is computed by forming a topological graph of all the noded raw curves and tracing outside contours. The points in the raw curve are rounded to a given geom::PrecisionModel.
Definition at line 62 of file OffsetCurveBuilder.h.
|
inline |
Definition at line 72 of file OffsetCurveBuilder.h.
|
privatedelete |
|
private |
|
private |
|
private |
|
private |
|
inline |
Gets the buffer parameters being used to generate the curve.
Definition at line 86 of file OffsetCurveBuilder.h.
void geos::operation::buffer::OffsetCurveBuilder::getLineCurve | ( | const geom::CoordinateSequence * | inputPts, |
double | distance, | ||
std::vector< geom::CoordinateSequence * > & | lineList | ||
) |
This method handles single points as well as lines.
Lines are assumed to not be closed (the function will not fail for closed lines, but will generate superfluous line caps).
inputPts | input points |
distance | offset distance |
lineList | the std::vector to which the newly created CoordinateSequences will be pushed_back. Caller is responsible to delete these new elements. |
void geos::operation::buffer::OffsetCurveBuilder::getRingCurve | ( | const geom::CoordinateSequence * | inputPts, |
int | side, | ||
double | distance, | ||
std::vector< geom::CoordinateSequence * > & | lineList | ||
) |
This method handles the degenerate cases of single points and lines, as well as rings.
inputPts | input points |
side | a Position |
distance | offset distance |
lineList | the std::vector to which CoordinateSequences will be pushed_back |
|
private |
void geos::operation::buffer::OffsetCurveBuilder::getSingleSidedLineCurve | ( | const geom::CoordinateSequence * | inputPts, |
double | distance, | ||
std::vector< geom::CoordinateSequence * > & | lineList, | ||
bool | leftSide, | ||
bool | rightSide | ||
) |
This method handles single points as well as lines.
Lines are assumed to not be closed (the function will not fail for closed lines, but will generate superfluous line caps).
inputPts | input points |
distance | offset distance |
lineList | the std::vector to which newly created CoordinateSequences will be pushed_back. Caller will be responsible to delete them. |
leftSide | indicates that the left side buffer will be obtained/skipped |
rightSide | indicates that the right side buffer will be obtained/skipped |
bool geos::operation::buffer::OffsetCurveBuilder::isLineOffsetEmpty | ( | double | distance | ) |
Tests whether the offset curve for line or point geometries at the given offset distance is empty (does not exist). This is the case if:
distance | the offset curve distance |
|
privatedelete |
|
private |
Computes the distance tolerance to use during input line simplification.
bufDistance | the buffer distance |
|
private |
Definition at line 163 of file OffsetCurveBuilder.h.
|
private |
Definition at line 159 of file OffsetCurveBuilder.h.
|
private |
Definition at line 161 of file OffsetCurveBuilder.h.
|
staticprivate |
Use a value which results in a potential distance error which is significantly less than the error due to the quadrant segment discretization.
For QS = 8 a value of 100 is reasonable. This should produce a maximum of 1% distance error.
Definition at line 172 of file OffsetCurveBuilder.h.