Dude you are working *way* to hard - let geotools do the work for you!

It automatically knows it is looking for a color; and will convert your string 
value to a colour as needed.
So a simple ff.proeprty("column") will suffice; as long as the values can be 
parsed as a color.

For more information on why your function did not work; you needed to register 
it with the system (so it can for example copy it (which is what 
DuplicatingFilterVisitor is doing). It looks like we did not trust you to 
modify the filter as it was being used for rendering - so they made a copy.

There is a tutorial on making functions here (and registering them for the 
library):
- http://docs.geotools.org/latest/userguide/tutorial/advanced/function.html

(Note this tutorial is "Advanced" as it involves you contributing a new idea to 
geotools; and not simply using what is there)



-- 
Jody Garnett


On Thursday, 2 June 2011 at 7:23 AM, Javier Moreno wrote:

> Argh... looks like in fact the problem is somewhere else, throwing an 
> exception like this one:
> 
> java.lang.RuntimeException: Unable to find function Color 
> at org.geotools.filter.FunctionFinder.findFunction(FunctionFinder.java:177)
> at org.geotools.filter.FunctionFinder.findFunction(FunctionFinder.java:74)
> at org.geotools.filter.FilterFactoryImpl.function(FilterFactoryImpl.java:467)
> at 
> org.geotools.filter.visitor.DuplicatingFilterVisitor.visit(DuplicatingFilterVisitor.java:309)
> at 
> org.geotools.filter.FunctionExpressionImpl.accept(FunctionExpressionImpl.java:147)
> at 
> org.geotools.styling.visitor.DuplicatingStyleVisitor.copy(DuplicatingStyleVisitor.java:420)
> at 
> org.geotools.styling.visitor.DuplicatingStyleVisitor.visit(DuplicatingStyleVisitor.java:669)
> at org.geotools.styling.FillImpl.accept(FillImpl.java:199)
> at 
> org.geotools.styling.visitor.DuplicatingStyleVisitor.copy(DuplicatingStyleVisitor.java:451)
> at 
> org.geotools.styling.visitor.DuplicatingStyleVisitor.visit(DuplicatingStyleVisitor.java:878)
> at org.geotools.styling.MarkImpl.accept(MarkImpl.java:204)
> at 
> org.geotools.styling.visitor.DuplicatingStyleVisitor.copy(DuplicatingStyleVisitor.java:523)
> at 
> org.geotools.styling.visitor.DuplicatingStyleVisitor.copy(DuplicatingStyleVisitor.java:851)
> at 
> org.geotools.styling.visitor.DuplicatingStyleVisitor.visit(DuplicatingStyleVisitor.java:818)
> at org.geotools.styling.GraphicImpl.accept(GraphicImpl.java:367)
> at 
> org.geotools.styling.visitor.DuplicatingStyleVisitor.copy(DuplicatingStyleVisitor.java:439)
> at 
> org.geotools.styling.visitor.DuplicatingStyleVisitor.visit(DuplicatingStyleVisitor.java:724)
> at 
> org.geotools.styling.visitor.UomRescaleStyleVisitor.visit(UomRescaleStyleVisitor.java:180)
> at 
> org.geotools.styling.PointSymbolizerImpl.accept(PointSymbolizerImpl.java:91)
> at 
> org.geotools.styling.visitor.DuplicatingStyleVisitor.copy(DuplicatingStyleVisitor.java:537)
> at 
> org.geotools.styling.visitor.DuplicatingStyleVisitor.visit(DuplicatingStyleVisitor.java:275)
> at 
> org.geotools.renderer.lite.StreamingRenderer.rescaleFeatureTypeStyle(StreamingRenderer.java:1846)
> at 
> org.geotools.renderer.lite.StreamingRenderer.applyUnitRescale(StreamingRenderer.java:1824)
> at 
> org.geotools.renderer.lite.StreamingRenderer.processStylers(StreamingRenderer.java:1774)
> at 
> org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:707)
> at 
> org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:533)
> 
> 
> 
> On Wed, Jun 1, 2011 at 11:09 PM, Javier Moreno <[email protected] 
> (mailto:[email protected])> wrote:
> >  Hi everybody! 
> > 
> > I'm trying to stylish a shape and I would like to draw the points with the 
> > color that is written in a feature attribute. The name of the attribute is 
> > "FILL" and its value is just a rgb triplet string ("#A0A0A0", for example). 
> > 
> > I've been looking at the documentation and as far as I can understand it 
> > should result in something like this (based on an example of the doc):
> > 
> > class ColorFunction extends FunctionExpressionImpl { 
> >  public static final FunctionName NAME = new 
> > FunctionNameImpl("Colorizador", 0); 
> >  public ColorFunction() {
> >  super("Color", filterFactory.literal("Color"));
> >  super.fallback = 
> > CommonFactoryFinder.getFilterFactory2(null).literal(Color.WHITE);
> >  }
> >  @Override
> >  public int getArgCount() {
> >  return 0;
> >  }
> > 
> >  @Override
> >  public Object evaluate(SimpleFeature feature) {
> > String fill = (String) feature.getAttribute("FILL");
> >  ...
> >  Color color = new Color(...);
> >  return color;
> >  } 
> > }
> > 
> > 
> > class XXX { 
> >  ...
> >  public Style getStyle() {
> > style = styleFactory.createStyle();
> >  FeatureTypeStyle fts = styleFactory.createFeatureTypeStyle(
> >  new Rule[]{ this.createRule("dummy", 10); }
> > style.featureTypeStyles().add(fts);
> >  return style;
> >  }
> > 
> >  protected Rule createRule(String name, int size) { 
> > ColorFunction colorFn = new ColorFunction();
> > 
> >  Graphic gr = styleFactory.createDefaultGraphic();
> >  Mark mark = styleFactory.getCircleMark();
> > mark.setStroke(styleFactory.createStroke(
> >  colorFn, filterFactory.literal(1), filterFactory.literal(0.5)));
> >  mark.setFill(styleFactory.createFill(
> >  colorFn, filterFactory.literal(1),  filterFactory.literal(0.3),  null));
> >  gr.graphicalSymbols().clear();
> >  gr.graphicalSymbols().add(mark);
> >  gr.setSize(filterFactory.literal(size));
> >  Rule rule = styleFactory.createRule();
> >  PointSymbolizer sym = styleFactory.createPointSymbolizer(gr, null);
> >  rule.setName(name);
> >  rule.symbolizers().add(sym);
> >  return rule;
> >  }
> > 
> > }
> > 
> > If I've understood it right once applied the StreamingRenderer should 
> > invoke the ColorFunction evaluate(...) method for each point instance but 
> > looks like it's never call and I'm running out of ideas. Could someone tell 
> > me what's happening? Maybe am I absolutely wrong about the way this should 
> > be implemented? 
> > 
> > Thanks in advance!
> > 
> > jv 
> ------------------------------------------------------------------------------
> Simplify data backup and recovery for your virtual environment with vRanger. 
> Installation's a snap, and flexible recovery options mean your data is safe,
> secure and there when you need it. Data protection magic?
> Nope - It's vRanger. Get your free trial download today. 
> http://p.sf.net/sfu/quest-sfdev2dev
> _______________________________________________
> Geotools-gt2-users mailing list
> [email protected] 
> (mailto:[email protected])
> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

------------------------------------------------------------------------------
Simplify data backup and recovery for your virtual environment with vRanger. 
Installation's a snap, and flexible recovery options mean your data is safe,
secure and there when you need it. Data protection magic?
Nope - It's vRanger. Get your free trial download today. 
http://p.sf.net/sfu/quest-sfdev2dev
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to