<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    Hello,<br>
    <br>
    The code looks correct (don't forget to call
    context.switchToDisplayCRS() or switchToDisplayCRS() to set the
    system in which you are painting), if you need more examples you can
    have a look at the<br>
    WMS/WMTS/OSM-TMS/KML Clients modules, they all use custom subclasses
    of MapLayer and GraphicBuilders.<br>
    <br>
    When you say it doesn't work. does it pass in the targetgraphic or
    builder code ? or not at all ?<br>
    - try adding the graphicbuilder before you add it in the map .
    (maybe a cache issue)<br>
    - ensure the layer is visible.<br>
    <br>
    <br>
    johann<br>
    <br>
    <br>
    On 07/25/2011 09:10 AM, Thys Meintjes wrote:
    <blockquote
cite="mid:CAHRf99mEpKgq476BtgQ7tjdg+YqEr-GAGm9KE8MvCx0GemLAxQ@mail.gmail.com"
      type="cite">Hi All,
      <div><br>
      </div>
      <div>I'm attempting to keep my special target graphics layer
        sperate from the coverage or shape layers.</div>
      <div>First I just added the builder to a EmptyMapLayer form
        MapBuilder - but that failed to produce any output - maybe</div>
      <div>I should have added a envelope ?</div>
      <div><br>
      </div>
      <div>I then tried adding the GraphicsBuilder to the first map
        layer in the context:</div>
      <div><br clear="all">
        <div>
          <div>  public void
            addTargetGraphicsBuilder(TargetGraphicBuilder builder) {</div>
          <div>        MapLayer targetLayer = context.layers().get(0);</div>
          <div>        targetLayer.graphicBuilders().add(builder);</div>
          <div>    }</div>
        </div>
        <div><br>
        </div>
        <div>The first maplayer is a coverage... That didn't work
          either. I kind of expected it to...</div>
        <div><br>
        </div>
        <div>The demo code uses a FeatureLayer with a GraphicsBuilder.
          Because I have a bunch of points (targets) </div>
        <div>I could conceivably make a Feature of each of them - add it
          to a store and create a FeatureLayer from that. </div>
        <div>These points are not static and they have a life time of
          about 10 seconds so the data changes continuously.</div>
        <div>I don't know if that is the correct approach though.</div>
        <div><br>
        </div>
        <div>I guess my question is how do I use a GraphicsBuilder to
          build to a dedicated maplayer. And If I can how do I construct</div>
        <div>a maplayer with minimal ceremony for use with a
          GraphicsBuilder.</div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div>Here is my builder - in case I did something stupid:</div>
        <div><br>
        </div>
        <div>
          <div>public class TargetGraphicBuilder implements
            GraphicBuilder<GraphicJ2D> {</div>
          <div><br>
          </div>
          <div>    private final static Logger logger =
            LoggerFactory.getLogger(TargetGraphicBuilder.class);</div>
          <div>    private TargetManager targetManager;</div>
          <div><br>
          </div>
          <div>    public TargetGraphicBuilder(TargetManager manager) {</div>
          <div>        targetManager = manager;</div>
          <div>    }</div>
          <div><br>
          </div>
          <div>    @Override</div>
          <div>    public Collection<GraphicJ2D>
            createGraphics(MapLayer layer, Canvas canvas) {</div>
          <div><br>
          </div>
          <div>        if (canvas instanceof J2DCanvas) {</div>
          <div>            final J2DCanvas j2dcanvas = (J2DCanvas)
            canvas;</div>
          <div>            return makeTargets(j2dcanvas);</div>
          <div>        }</div>
          <div>        logger.debug("Canvas not a J2DCanvas");</div>
          <div>        return Collections.emptyList();</div>
          <div>    }</div>
          <div><br>
          </div>
          <div>    private Collection makeTargets(J2DCanvas canvas) {</div>
          <div>        ArrayList<TargetGraphic> targetGraphics =
            new ArrayList<TargetGraphic>();</div>
          <div>        for (Target t : targetManager.getAllTargets()) {</div>
          <div>            targetGraphics.add(new TargetGraphic(canvas,
            t));</div>
          <div>        }</div>
          <div>        //return
            Collections.unmodifiableList(targetGraphics);</div>
          <div>        return targetGraphics;</div>
          <div>    }</div>
          <div><br>
          </div>
          <div>    @Override</div>
          <div>    public Class<GraphicJ2D> getGraphicType() {</div>
          <div>        return GraphicJ2D.class;</div>
          <div>    }</div>
          <div><br>
          </div>
          <div>    @Override</div>
          <div>    public Image getLegend(MapLayer layer) throws
            PortrayalException {</div>
          <div>        return null;</div>
          <div>    }</div>
          <div><br>
          </div>
          <div>    public String getName() {</div>
          <div>        return targetManager.getName();</div>
          <div>    }</div>
        </div>
        <div><br>
        </div>
        <div>And the graphic:</div>
        <div>
          <br>
        </div>
        <div>
          <div>public class TargetGraphic extends AbstractGraphicJ2D {</div>
          <div><br>
          </div>
          <div>    private final static Logger logger =
            LoggerFactory.getLogger(TargetGraphic.class);</div>
          <div>    private Target target;</div>
          <div><br>
          </div>
          <div>    public TargetGraphic(J2DCanvas canvas, Target target)
            {</div>
          <div>        super(canvas, canvas.getObjectiveCRS2D());</div>
          <div>        this.target = target;</div>
          <div>    }</div>
          <div><br>
          </div>
          <div>
                @Override</div>
          <div>    public void paint(RenderingContext2D context) {</div>
          <div>        final Graphics2D g2d = context.getGraphics();</div>
          <div><br>
          </div>
          <div>        // transform from geographic to screen space</div>
          <div>        final AffineTransform2D transformer =
            context.getObjectiveToDisplay();</div>
          <div>        DirectPosition targetPos = target.getPosition();</div>
          <div>        logger.debug(targetPos.toString());</div>
          <div>        Point2D.Double center = new
            Point2D.Double(targetPos.getOrdinate(1),
            targetPos.getOrdinate(0));</div>
          <div>        transformer.transform(center, center);</div>
          <div>        logger.debug("Transformed center: " + center);</div>
          <div><br>
          </div>
          <div>        // paint a simple circle</div>
          <div>        final Shape circle = new
            Ellipse2D.Double(center.x - 5, center.y - 5, 10, 10);</div>
          <div>        g2d.setStroke(new BasicStroke(4));</div>
          <div>        g2d.setColor(Color.WHITE);</div>
          <div>        g2d.draw(circle);</div>
          <div>        g2d.setPaint(Color.RED);</div>
          <div>        g2d.fill(circle);</div>
          <div>        g2d.setStroke(new BasicStroke(2));</div>
          <div>        g2d.setColor(Color.BLACK);</div>
          <div>        g2d.draw(circle);</div>
          <div><br>
          </div>
          <div>    }</div>
          <div><br>
          </div>
          <div>    @Override</div>
          <div>    public List<Graphic>
            getGraphicAt(RenderingContext context, SearchArea mask,
            VisitFilter filter, List<Graphic> graphics) {</div>
          <div>        return graphics;</div>
          <div>    }</div>
          <div>}</div>
        </div>
        <div><br>
        </div>
        <div>Note that the graphic works correctly when I add it to the
          canvas container directly:</div>
        <div>
          <div><br>
          </div>
          <div>   private void addTarget(Target target) {</div>
          <div>        TargetGraphic tg = new TargetGraphic(canvas,
            target);</div>
          <div>        canvas.getContainer().add(tg);</div>
          <div>    }</div>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
        -- <br>
        Thys Meintjes<br>
        <br>
        <br>
      </div>
      <pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
Geotoolkit mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Geotoolkit@lists.osgeo.org">Geotoolkit@lists.osgeo.org</a>
<a class="moz-txt-link-freetext" href="http://lists.osgeo.org/mailman/listinfo/geotoolkit">http://lists.osgeo.org/mailman/listinfo/geotoolkit</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>