Geometry transformToWorldCrsAndClip( final Geometry geom ) { final Geometry geomInWorldCrs = rendererContext.geomHelper.transform( geom ); if ( rendererContext.clipper == null ) { LOG.warn( "No clipper defined, geometry will be ignored for rendering" ); return null; } return rendererContext.clipper.clipGeometry( geomInWorldCrs ); }
T g2 = transformLinearized( g );
void render( PolygonStyling styling, Surface surface ) { for ( SurfacePatch patch : surface.getPatches() ) { if ( patch instanceof PolygonPatch ) { LinkedList<Double> lines = new LinkedList<Double>(); PolygonPatch polygonPatch = (PolygonPatch) patch; // just appending the holes appears to work, the Java2D rendering mechanism can determine that they lie // inside and thus no substraction etc. is needed. This speeds up things SIGNIFICANTLY GeneralPath polygon = new GeneralPath( WIND_EVEN_ODD ); for ( Curve curve : polygonPatch.getBoundaryRings() ) { Double d = geomHelper.fromCurve( curve, true ); lines.add( d ); polygon.append( d, false ); } fillRenderer.applyFill( styling.fill, styling.uom ); graphics.fill( polygon ); for ( Double d : lines ) { strokeRenderer.applyStroke( styling.stroke, styling.uom, d, styling.perpendicularOffset, styling.perpendicularOffsetType ); } } else { throw new IllegalArgumentException( "Cannot render non-planar surfaces." ); } } }
RendererContext( double pixelSize, double res, Graphics2D graphics, Java2DRenderer renderer, Envelope bbox, int width, AffineTransform worldToScreen ) { this.graphics = graphics; if ( bbox != null ) { geomHelper = new GeometryHelper( bbox, width, worldToScreen ); clipper = new GeometryClipper( bbox, width ); } uomCalculator = new UomCalculator( pixelSize, res ); fillRenderer = new Java2DFillRenderer( uomCalculator, graphics ); strokeRenderer = new Java2DStrokeRenderer( graphics, uomCalculator, fillRenderer ); svgRenderer = new SvgRenderer(); polygonRenderer = new PolygonRenderer( geomHelper, fillRenderer, strokeRenderer, graphics, renderer ); curveRenderer = new CurveRenderer( renderer ); pointRenderer = new PointRenderer( renderer.worldToScreen, this ); }
void render( TextStyling styling, Font font, String text, Curve c ) { java.awt.Stroke stroke = new TextStroke( text, font, styling.linePlacement ); if ( isZero( ( (TextStroke) stroke ).getLineHeight() ) ) { return; } stroke = applyOffset( styling, stroke ); Double line = renderer.rendererContext.geomHelper.fromCurve( c, false ); if ( styling.halo != null ) { Stroke haloStroke = new HaloStroke( text, font, styling.linePlacement, styling.halo, styling.uom, renderer.rendererContext.uomCalculator ); haloStroke = applyOffset( styling, haloStroke ); renderer.rendererContext.fillRenderer.applyFill( styling.halo.fill, styling.uom ); renderer.graphics.setStroke( haloStroke ); renderer.graphics.draw( line ); } renderer.rendererContext.fillRenderer.applyFill( styling.fill, styling.uom ); renderer.graphics.setStroke( stroke ); renderer.graphics.draw( line ); }
@Override public void createLabel( TextStyling styling, String text, Geometry geom ) { if ( geom == null ) { LOG.debug( "Trying to render null geometry." ); } if ( text == null || text.length() == 0 ) { LOG.debug( "Trying to render null or zero length text." ); } geom = renderer.rendererContext.geomHelper.transform( geom ); geom = renderer.rendererContext.clipper.clipGeometry( geom ); Font font = textRenderer.convertFont( styling ); handleGeometryTypes( styling, text, font, geom ); }
private void handlePolygonWithAutoPlacement( TextStyling styling, Font font, String text, Polygon geom ) { Geometry transformedGeom = renderer.rendererContext.geomHelper.transform( geom ); MultiPoint points = renderer.rendererContext.clipper.calculateInteriorPoints( transformedGeom ); if ( geom == null ) return; handleMultiGeometry( styling, text, font, (MultiGeometry) points ); }
renderGeometry = rendererContext.geomHelper.transform( geom );
private <T extends Geometry> T transformLinearized( T g ) { if ( g instanceof Surface ) { @SuppressWarnings("unchecked") T g2 = (T) transform( linearizer.linearize( (Surface) g, new NumPointsCriterion( 100 ) ) ); g2.setCoordinateSystem( g.getCoordinateSystem() ); return g2; } if ( g instanceof Curve ) { @SuppressWarnings("unchecked") T g2 = (T) transform( linearizer.linearize( (Curve) g, new NumPointsCriterion( 100 ) ) ); g2.setCoordinateSystem( g.getCoordinateSystem() ); return g2; } return null; }
@Override public void render( final PointStyling styling, final Geometry geom ) { if ( geom == null ) { LOG.debug( "Trying to render null geometry." ); return; } if ( geom instanceof Point ) { final Point pointInWorldCrs = (Point) rendererContext.geomHelper.transform( geom ); rendererContext.pointRenderer.render( styling, pointInWorldCrs.get0(), pointInWorldCrs.get1() ); return; } final Geometry clippedGeometry = transformToWorldCrsAndClip( geom ); if ( clippedGeometry == null ) { return; } if ( clippedGeometry instanceof Surface ) { rendererContext.polygonRenderer.render( styling, (Surface) clippedGeometry ); } else if ( clippedGeometry instanceof Curve ) { rendererContext.curveRenderer.render( styling, (Curve) clippedGeometry ); } else if ( clippedGeometry instanceof MultiGeometry<?> ) { final MultiGeometry<?> mc = (MultiGeometry<?>) clippedGeometry; for ( final Geometry g : mc ) { render( styling, g ); } } }