Exemple #1
0
        /// <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);
        }
Exemple #7
0
        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;
 }
Exemple #13
0
 /// <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;
 }
Exemple #14
0
 /// <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;
 }