/** * Returns a linearized version (i.e. a {@link PolygonPatch} that only uses {@link LinearRing}s as boundaries) of * the given {@link PolygonPatch}. * * @param patch * @param crit * determines the interpolation quality / number of interpolation points * @return {@link PolygonPatch} that only uses {@link LinearRing}s as boundaries */ public PolygonPatch linearize( PolygonPatch patch, LinearizationCriterion crit ) { Ring exteriorRing = patch.getExteriorRing(); Ring linearizedExteriorRing = null; if ( exteriorRing != null ) { linearizedExteriorRing = (Ring) curveLinearizer.linearize( exteriorRing, crit ); } List<Ring> interiorRings = patch.getInteriorRings(); List<Ring> linearizedInteriorRings = new ArrayList<Ring>( interiorRings.size() ); for ( Ring interiorRing : interiorRings ) { linearizedInteriorRings.add( (Ring) curveLinearizer.linearize( interiorRing, crit ) ); } return geomFac.createPolygonPatch( linearizedExteriorRing, linearizedInteriorRings ); } }
private PolygonPatch transform( PolygonPatch patch, Transformation trans ) throws TransformationException { Ring exterior = patch.getExteriorRing(); LinearRing transformedExteriorRing = transform( exterior, trans ); PolygonPatch result = null; PolygonPatchType type = patch.getPolygonPatchType(); switch ( type ) { case POLYGON_PATCH: List<Ring> interiorRings = ( patch ).getInteriorRings(); List<Ring> transformedInteriorRings = new ArrayList<Ring>( interiorRings == null ? 0 : interiorRings.size() ); if ( interiorRings != null && !interiorRings.isEmpty() ) { for ( Ring interior : interiorRings ) { if ( interior != null ) { LinearRing lr = transform( interior, trans ); transformedInteriorRings.add( lr ); } } } result = geomFactory.createPolygonPatch( transformedExteriorRing, transformedInteriorRings ); break; case RECTANGLE: result = geomFactory.createRectangle( transformedExteriorRing ); break; case TRIANGLE: result = geomFactory.createTriangle( transformedExteriorRing ); break; } return result; }
offx, offy ) ) ); movedPatches.add( fac.createPolygonPatch( movedExteriorRing, movedInteriorRings ) ); } else { throw new UnsupportedOperationException( "Cannot move non-planar surface patches." );
return geomFac.createPolygonPatch( exteriorRing, interiorRings );
GeometryFactory geomFac = new GeometryFactory(); List<SurfacePatch> patches = new ArrayList<SurfacePatch>(); patches.add( geomFac.createPolygonPatch( p.getExteriorRing(), p.getInteriorRings() ) ); geom = geomFac.createSurface( geom.getId(), patches, geom.getCoordinateSystem() ); } else if ( hierarchy.getCurveSubstitutions().contains( particle.getName() ) && geom instanceof LineString ) {