/// <summary> /// Runs a ScaledNoder on input. /// Input vertices should be rounded to precision model. /// </summary> /// <param name="geom"></param> /// <param name="scaleFactor"></param> /// <returns>The noded geometry</returns> public static Geometry ScaledNoding(Geometry geom, double scaleFactor) { var segs = CreateSegmentStrings(geom); var fixedPM = new PrecisionModel(scaleFactor); var noder = new ScaledNoder(new MCIndexSnapRounder(new PrecisionModel(1.0)), fixedPM.Scale); noder.ComputeNodes(segs); var nodedSegStrings = noder.GetNodedSubstrings(); return(SegmentStringUtil.ToGeometry(nodedSegStrings, geom.Factory)); }
private void BufferFixedPrecision(IPrecisionModel fixedPrecModel) { INoder noder = new ScaledNoder(new MCIndexSnapRounder(new PrecisionModel(1.0)), fixedPrecModel.Scale); var bufBuilder = new BufferBuilder(_bufParams); bufBuilder.WorkingPrecisionModel = fixedPrecModel; bufBuilder.Noder = noder; // this may throw an exception, if robustness errors are encountered _resultGeometry = bufBuilder.Buffer(_argGeom, _distance); }
/// <summary> /// /// </summary> /// <param name="fixedPM"></param> private void BufferFixedPrecision(IPrecisionModel fixedPM) { INoder noder = new ScaledNoder(new MCIndexSnapRounder(new PrecisionModel(1.0)), fixedPM.Scale); BufferBuilder bufBuilder = new BufferBuilder(); bufBuilder.WorkingPrecisionModel = fixedPM; bufBuilder.Noder = noder; bufBuilder.QuadrantSegments = quadrantSegments; bufBuilder.EndCapStyle = endCapStyle; // this may throw an exception, if robustness errors are encountered resultGeometry = bufBuilder.Buffer(argGeom, distance); }