/** * Construct * * @param clipping * The clipping {@link Polygon} */ public PolygonClipper(final Polygon clipping) { this.jtsClipping = getJts(clipping); }
private List<PolyLine> runPolyLineClipping(final PolyLine subject, final BiFunction<Geometry, Geometry, Geometry> application) { final List<PolyLine> result = new ArrayList<>(); for (final com.vividsolutions.jts.geom.Polygon jtsClipping : this.jtsClippings) { result.addAll(processPolyLine( application.apply(PolygonClipper.getJts(subject), jtsClipping))); } return result; } }
public List<? extends PolyLine> not(final PolyLine subject) { return processResult(getJts(subject).difference(this.jtsClipping)); }
public List<? extends PolyLine> xor(final PolyLine subject) { return processResult(getJts(subject).symDifference(this.jtsClipping)); }
public List<? extends PolyLine> and(final PolyLine subject) { return processResult(getJts(subject).intersection(this.jtsClipping)); }
public List<? extends PolyLine> union(final PolyLine subject) { return processResult(getJts(subject).union(this.jtsClipping)); }
private MultiPolygon runPolygonClipping(final Polygon subject, final BiFunction<Geometry, Geometry, Geometry> application) { MultiPolygon result = new MultiPolygon(new MultiMap<>()); for (final com.vividsolutions.jts.geom.Polygon jtsClipping : this.jtsClippings) { result = result.merge(processMultiPolygon( application.apply(PolygonClipper.getJts(subject), jtsClipping))); } return result; }