/// <summary> /// Computes the buffer for a geometry for a given buffer distance /// and accuracy of approximation. /// </summary> /// <param name="g"> the geometry to buffer</param> /// <param name="distance"> the buffer distance</param> /// <param name="parameters"> the buffer parameters to use</param> /// <returns> the buffer of the input geometry</returns> public static Geometry Buffer(Geometry g, double distance, BufferParameters parameters) { var bufOp = new BufferOp(g, parameters); var geomBuf = bufOp.GetResultGeometry(distance); return(geomBuf); }
public static IGeometry BufferMitredJoin(IGeometry g, double distance) { BufferParameters bufParams = new BufferParameters(); bufParams.JoinStyle = JoinStyle.Mitre; return BufferOp.Buffer(g, distance, bufParams); }
public static IGeometry LogoBuffer(IGeometry g, double distance) { var lines = LogoLines(g); var bufParams = new BufferParameters(); bufParams.EndCapStyle = EndCapStyle.Square; return BufferOp.Buffer(lines, distance, bufParams); }
public OffsetCurveBuilder( PrecisionModel precisionModel, BufferParameters bufParams ) { _precisionModel = precisionModel; _bufParams = bufParams; }
public static IGeometry bufferWithSimplify(IGeometry g, double? distance, double? simplifyFactor) { double dist = 0; if (distance != null) dist = distance.Value; BufferParameters bufParams = new BufferParameters(); if (simplifyFactor != null) bufParams.SimplifyFactor = simplifyFactor.Value; return BufferOp.Buffer(g, dist, bufParams); }
public static IGeometry BufferOffsetCurveWithParams(IGeometry g, Double? distance, int? quadrantSegments, int? capStyle, int? joinStyle, Double? mitreLimit) { double dist = 0; if (distance != null) dist = distance.Value; var bufParams = new BufferParameters(); if (quadrantSegments != null) bufParams.QuadrantSegments = quadrantSegments.Value; if (capStyle != null) bufParams.EndCapStyle = (EndCapStyle)capStyle.Value; if (joinStyle != null) bufParams.JoinStyle = (JoinStyle)joinStyle.Value; if (mitreLimit != null) bufParams.MitreLimit = mitreLimit.Value; return BuildCurveSet(g, dist, bufParams); }
public OffsetSegmentGenerator(PrecisionModel precisionModel, BufferParameters bufParams, double distance) { _precisionModel = precisionModel; _bufParams = bufParams; // compute intersections in full precision, to provide accuracy // the points are rounded as they are inserted into the curve line _li = new RobustLineIntersector(); _filletAngleQuantum = Math.PI / 2.0 / bufParams.QuadrantSegments; /** * Non-round joins cause issues with short closing segments, so don't use * them. In any case, non-round joins only really make sense for relatively * small buffer distances. */ if (bufParams.QuadrantSegments >= 8 && bufParams.JoinStyle == JoinStyle.Round) { _closingSegLengthFactor = MaxClosingSegLenFactor; } Init(distance); }
public OldOffsetCurveBuilder( PrecisionModel precisionModel, BufferParameters bufParams ) { _precisionModel = precisionModel; _bufParams = bufParams; // compute intersections in full precision, to provide accuracy // the points are rounded as they are inserted into the curve line _li = new RobustLineIntersector(); _filletAngleQuantum = Math.PI / 2.0 / bufParams.QuadrantSegments; /** * Non-round joins cause issues with short closing segments, * so don't use them. In any case, non-round joins * only really make sense for relatively small buffer distances. */ if (bufParams.QuadrantSegments >= 8 && bufParams.JoinStyle == JoinStyle.Round) { closingSegFactor = MAX_CLOSING_SEG_FRACTION; } }
public void Buffer3() { var geometry = reader.Read( @"LINESTRING(1250.7665 446.9385,1137.8786 170.4488,1136.3666106287267 166.74557327980631,1139.485009866369 125.36515638486206,1137.8786 121.7019)"); Assert.IsNotNull(geometry); Assert.IsTrue(geometry.IsValid); BufferParameters parameters = new BufferParameters() {EndCapStyle = EndCapStyle.Round}; var curveBuilder = new OffsetCurveBuilder( geometry.PrecisionModel, parameters); var curveSetBuilder = new OffsetCurveSetBuilder(geometry, 5, curveBuilder); var bufferSegStrList = curveSetBuilder.GetCurves(); Assert.AreEqual(1, bufferSegStrList.Count); var segmentString = (NodedSegmentString) bufferSegStrList[0]; Assert.AreEqual(45, segmentString.Count); for (var i = 0; i < segmentString.Coordinates.Length; i++) { var coord = segmentString.Coordinates[i]; Debug.WriteLine(String.Format("{1:R} {2:R}", i, coord.X, coord.Y)); } }
protected virtual bool TestBufferMitredJoin() { Geometry geoResult = (Geometry)_objResult; double dArg; Double.TryParse((string)_objArgument1, NumberStyles.Any, GetNumberFormatInfo(), out dArg); if (_bIsDefaultTarget && _objGeometryA != null) { var bp = new BufferParameters {JoinStyle = JoinStyle.Mitre}; Geometry buffer = (Geometry) _objGeometryA.Buffer(dArg, bp); if (buffer != null) { if (_resultMatcher is IResultMatcher<GeometryResult>) { var exp = new GeometryResult(geoResult); var res = new GeometryResult(buffer); return ((IResultMatcher<GeometryResult>) _resultMatcher).IsMatch( _objGeometryA, "buffer", new[] {_objArgument1}, res, exp, _dTolerance); } return buffer.Equals(geoResult); } } return false; }
public static IGeometry SingleSidedBuffer(IGeometry geom, double distance) { var bufParams = new BufferParameters { IsSingleSided = true }; return BufferOp.Buffer(geom, distance, bufParams); }
public static IGeometry SingleSidedBufferCurve(IGeometry geom, double distance) { var bufParam = new BufferParameters(); bufParam.IsSingleSided = true; var ocb = new OffsetCurveBuilder( geom.Factory.PrecisionModel, bufParam ); var pts = ocb.GetLineCurve(geom.Coordinates, distance); var curve = geom.Factory.CreateLineString(pts); return curve; }
/// <summary> /// Initializes a buffer computation for the given geometry /// with the given set of parameters /// </summary> /// <param name="g"> the geometry to buffer</param> /// <param name="bufParams"> the buffer parameters to use</param> public BufferOp(Geometry g, BufferParameters bufParams) { _argGeom = g; _bufParams = bufParams; }
/// <summary> /// Initializes a new instance of the <see cref="BufferBuilder"/> class using the given parameters. /// </summary> /// <param name="bufParams">The buffer parameters to use.</param> public BufferBuilder(BufferParameters bufParams) { _bufParams = bufParams; }