GraphicParser(Factory factory) { this(factory, factory.styleBuilder.createGraphic(null, null, null)); }
/** * creates a graphic object * * @param externalGraphics an array of external graphics to use if displayable * @param marks an array of marks to use * @param symbols an array of symbols to use * @param opacity - the opacity of the graphic * @param size - the size of the graphic * @param rotation - the rotation from the top of the page of the graphic * @return the graphic created */ public Graphic createGraphic( ExternalGraphic[] externalGraphics, Mark[] marks, Symbol[] symbols, double opacity, double size, double rotation) { return createGraphic( externalGraphics, marks, symbols, literalExpression(opacity), literalExpression(size), literalExpression(rotation)); }
/** Checks if creating a Graphic with an ExternalGraphics works. */ public void testWithExternalGraphics() throws Exception { StyleBuilder sb = new StyleBuilder(); URL urlExternal = getClass().getResource("/data/sld/blob.gif"); ExternalGraphic extg = sb.createExternalGraphic(urlExternal, "image/svg+xml"); Graphic graphic = sb.createGraphic(extg, null, null); assertEquals(1, graphic.graphicalSymbols().size()); }
public static Symbolizer[] getSymbolizers( Class<? extends Geometry> type, Color baseColor, boolean useTransparency) { StyleBuilder builder = new StyleBuilder(); Symbolizer[] syms = new Symbolizer[1]; if (LineString.class.isAssignableFrom(type) || MultiLineString.class.isAssignableFrom(type)) syms[0] = builder.createLineSymbolizer(baseColor, 2); if (Point.class.isAssignableFrom(type) || MultiPoint.class.isAssignableFrom(type)) { PointSymbolizer point = builder.createPointSymbolizer(builder.createGraphic()); // set graphic size to 10 by default point.getGraphic() .setSize( (Expression) CommonFactoryFinder.getFilterFactory(GeoTools.getDefaultHints()) .literal(10)); // danger assumes a Mark! point.getGraphic().getMarks()[0].setFill(builder.createFill(baseColor)); syms[0] = point; } if (Polygon.class.isAssignableFrom(type) || MultiPolygon.class.isAssignableFrom(type)) { syms[0] = builder.createPolygonSymbolizer( builder.createStroke(baseColor, 2), builder.createFill(baseColor, useTransparency ? .6 : 1.0)); } return syms; }
@Test public void testUnreachableExternalGraphic() throws Exception { File file = new File(TestData.getResource(this, "draw.png").toURI()); URL resource = new File(file.getParent(), "draw-not-there.png").toURI().toURL(); PointSymbolizer ps = sb.createPointSymbolizer( sb.createGraphic( null, null, sb.createExternalGraphic(resource, "image/png"))); ps.getGraphic().setSize(sb.literalExpression(null)); Style style = sb.createStyle(ps); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(0, rbe.getBuffer()); assertFalse(rbe.isEstimateAccurate()); }
@Test public void testGraphicAnchor() { Graphic g = sb.createGraphic(); g.setAnchorPoint(sb.createAnchorPoint(ff.property("ax"), ff.property("ay"))); StyleAttributeExtractor extractor = new StyleAttributeExtractor(); g.accept(extractor); // check the plain names Set<String> atts = extractor.getAttributeNameSet(); assertEquals(2, atts.size()); assertTrue(atts.contains("ax")); assertTrue(atts.contains("ay")); }
@Test public void testResizeExternalGraphic() throws IOException { File imageFile = new File("./src/test/resources/org/geotools/renderer/lite/test-data/draw.png") .getCanonicalFile(); assertTrue(imageFile.exists()); String fileUrl = URLs.fileToUrl(imageFile).toExternalForm(); PointSymbolizer ps = sb.createPointSymbolizer( sb.createGraphic( null, null, sb.createExternalGraphic(fileUrl, "image/png"))); GraphicsAwareDpiRescaleStyleVisitor visitor = new GraphicsAwareDpiRescaleStyleVisitor(2); ps.accept(visitor); PointSymbolizer resized = (PointSymbolizer) visitor.getCopy(); Expression size = resized.getGraphic().getSize(); assertTrue(size instanceof Literal); // original image height was 22 assertEquals(44, size.evaluate(null, Integer.class).intValue()); }
public void testPointSymbolizer() throws Exception { URL urlExternal = getClass().getResource("/data/sld/blob.gif"); ExternalGraphic extg = sb.createExternalGraphic(urlExternal, "image/svg+xml"); Graphic graphic = sb.createGraphic(extg, null, null); PointSymbolizer pointSymb = sb.createPointSymbolizer(graphic); pointSymb.accept(visitor); PointSymbolizer clone = (PointSymbolizer) visitor.getCopy(); assertCopy(pointSymb, clone); assertEqualsContract(pointSymb, clone); PointSymbolizer notEq = sf.getDefaultPointSymbolizer(); notEq.setGeometryPropertyName("something_else"); assertEqualsContract(clone, notEq, pointSymb); }
/** Checks if the Displacement settings are exported to XML */ public void testDisplacement() throws Exception { StyleBuilder sb = new StyleBuilder(); Graphic graphic; { graphic = sb.createGraphic(); Displacement disp = sb.createDisplacement(10.1, -5.5); graphic.setDisplacement(disp); } Displacement disp = graphic.getDisplacement(); assertNotNull(disp); assertEquals(disp.getDisplacementX().toString(), "10.1"); assertEquals(disp.getDisplacementY().toString(), "-5.5"); } }
public void testPointSymbolizerWithGeomFunction() throws Exception { URL urlExternal = getClass().getResource("/data/sld/blob.gif"); ExternalGraphic extg = sb.createExternalGraphic(urlExternal, "image/svg+xml"); Graphic graphic = sb.createGraphic(extg, null, null); PointSymbolizer pointSymb = sb.createPointSymbolizer(graphic); // Set a function as geometry Function geomFunc = ff.function("centroid", ff.property("thr_geom")); pointSymb.setGeometry(geomFunc); pointSymb.accept(visitor); PointSymbolizer copy = (PointSymbolizer) visitor.getCopy(); assertEquals( "Any Expression set as Geometry must be correctly replicated", geomFunc, copy.getGeometry()); }
@Test public void testResizeMark() { PointSymbolizer ps = sb.createPointSymbolizer(sb.createGraphic(null, sb.createMark("square"), null)); GraphicsAwareDpiRescaleStyleVisitor visitor = new GraphicsAwareDpiRescaleStyleVisitor(2); ps.accept(visitor); PointSymbolizer resized = (PointSymbolizer) visitor.getCopy(); Expression size = resized.getGraphic().getSize(); assertTrue(size instanceof Literal); assertEquals(32, size.evaluate(null, Integer.class).intValue()); }
@Test public void testLiteralParseGraphics() { Graphic g = sb.createGraphic(); g.setSize(sb.literalExpression("10.0")); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(g); assertEquals(11, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); } }
@Test public void testRescalePolygonMargin() throws Exception { // create a graphic that needs rescaling StyleBuilder sb = new StyleBuilder(); // a graphic fill Fill fill = sb.createFill(); fill.setColor(null); fill.setGraphicFill( sb.createGraphic(null, sb.createMark("square", null, sb.createStroke(2)), null)); // a polygon and line symbolizer using them PolygonSymbolizer polygonSymbolizer = sb.createPolygonSymbolizer(sb.createStroke(), fill); polygonSymbolizer.getOptions().put(PolygonSymbolizer.GRAPHIC_MARGIN_KEY, "1 2 3 4"); // rescale it polygonSymbolizer.accept(visitor); PolygonSymbolizer rps = (PolygonSymbolizer) visitor.getCopy(); Mark rm = (Mark) rps.getFill().getGraphicFill().graphicalSymbols().get(0); assertEquals(4.0, rm.getStroke().getWidth().evaluate(null, Double.class), 0d); assertEquals("2 4 6 8", rps.getOptions().get(PolygonSymbolizer.GRAPHIC_MARGIN_KEY)); } }
@Test public void testSimpleGraphic() { PointSymbolizer ps = sb.createPointSymbolizer( sb.createGraphic(null, sb.createMark(sb.MARK_CIRCLE), null)); ps.getGraphic().setSize(sb.literalExpression(15)); Style style = sb.createStyle(ps); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(16, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); }
@Test public void testMarkNoSizeNoStroke() throws Exception { StyleBuilder sb = new StyleBuilder(); Mark mark = sb.createMark("square"); mark.setStroke(null); Graphic graphic = sb.createGraphic(null, mark, null); graphic.setSize(NilExpression.NIL); PointSymbolizer ps = sb.createPointSymbolizer(graphic); Style style = sb.createStyle(ps); MetaBufferEstimator estimator = new MetaBufferEstimator(); style.accept(estimator); assertTrue(estimator.isEstimateAccurate()); assertEquals(16, estimator.getBuffer()); }
@Test public void testReachableExternalGraphic() { URL resource = TestData.getResource(this, "draw.png"); PointSymbolizer ps = sb.createPointSymbolizer( sb.createGraphic( null, null, sb.createExternalGraphic(resource, "image/png"))); ps.getGraphic().setSize(sb.literalExpression(null)); Style style = sb.createStyle(ps); MetaBufferEstimator rbe = new MetaBufferEstimator(); rbe.visit(style); assertEquals(24, rbe.getBuffer()); assertTrue(rbe.isEstimateAccurate()); }
/** * Tests size calculation of dynamically sized feature, using real-world units combined with * DPI-based resizing. */ @Test public void testCombinedResizingDpiUom() { // given: Point with dynamic size in real-world units int sizeNum = 10; double scaleDpi = 2; double scaleUom = 3; PointSymbolizer symbolizer = sb.createPointSymbolizer(); Graphic graphic = sb.createGraphic(); graphic.setSize(ff.function("strConcat", ff.property("size"), ff.literal("m"))); symbolizer.setGraphic(graphic); // when: DPI based resizing is applied RescaleStyleVisitor dpiVisitor = new GraphicsAwareDpiRescaleStyleVisitor(scaleDpi); symbolizer.accept(dpiVisitor); symbolizer = (PointSymbolizer) dpiVisitor.getCopy(); // and: UOM resizing is applied UomRescaleStyleVisitor uomVisitor = new UomRescaleStyleVisitor(scaleUom); uomVisitor.visit(symbolizer); symbolizer = (PointSymbolizer) uomVisitor.getCopy(); SimpleFeature feature = createFeatureSized(sizeNum); // then: only the UOM resizing must have an effect Double size = symbolizer.getGraphic().getSize().evaluate(feature, Double.class); assertEquals(sizeNum * scaleUom, size.doubleValue(), 0d); }
@Test public void testRescaleGraphicPointSymbolizer() { // create a graphic that needs rescaling StyleBuilder sb = new StyleBuilder(); // create a circle Mark circle = sb.createMark("circle", null, sb.createStroke(500)); Graphic g = sb.createGraphic(null, circle, null); // a point symbolizer with the specified circle PointSymbolizer ps = sb.createPointSymbolizer(g); // first see it in feet ps.setUnitOfMeasure(USCustomary.FOOT); // rescale it UomRescaleStyleVisitor visitor = new UomRescaleStyleVisitor(10); ps.accept(visitor); PointSymbolizer rps = (PointSymbolizer) visitor.getCopy(); Mark rm = (Mark) rps.getGraphic().graphicalSymbols().get(0); assertEquals(1524.0, rm.getStroke().getWidth().evaluate(null, Double.class), 0d); // now let's see the same in meters ps.setUnitOfMeasure(SI.METRE); // rescale it visitor = new UomRescaleStyleVisitor(10); ps.accept(visitor); rps = (PointSymbolizer) visitor.getCopy(); rm = (Mark) rps.getGraphic().graphicalSymbols().get(0); assertEquals(5000.0, rm.getStroke().getWidth().evaluate(null, Double.class), 0d); }
@Test public void testMarkStroke() throws Exception { StyleBuilder sb = new StyleBuilder(); Mark mark = sb.createMark("square"); mark.getStroke().setWidth(sb.getFilterFactory().literal(10)); Graphic graphic = sb.createGraphic(null, mark, null); graphic.setSize(NilExpression.NIL); PointSymbolizer ps = sb.createPointSymbolizer(graphic); Style style = sb.createStyle(ps); MetaBufferEstimator estimator = new MetaBufferEstimator(); style.accept(estimator); assertTrue(estimator.isEstimateAccurate()); assertEquals(26, estimator.getBuffer()); }
@Test public void testGraphicSizeFunction() throws Exception { StyleBuilder sb = new StyleBuilder(); Mark mark = sb.createMark("square"); mark.setStroke(null); Graphic graphic = sb.createGraphic(null, mark, null); FilterFactory2 ff = sb.getFilterFactory(); graphic.setSize(ff.function("env", ff.literal("test"))); PointSymbolizer ps = sb.createPointSymbolizer(graphic); Style style = sb.createStyle(ps); try { EnvFunction.setGlobalValue("test", 10); MetaBufferEstimator estimator = new MetaBufferEstimator(); style.accept(estimator); assertTrue(estimator.isEstimateAccurate()); assertEquals(10, estimator.getBuffer()); } finally { EnvFunction.clearGlobalValues(); } }