[geotk] Re: Adding GraphicBuilder to its own MapLayer
Thys Meintjes
sthysel at gmail.com
Tue Jul 26 06:31:42 EDT 2011
A yes, thanks - I realized this only after posting last time.
Thanks Johann
On Tue, Jul 26, 2011 at 12:28 PM, Sorel <johann.sorel at geomatys.fr> wrote:
> **
> Hello,
>
> Like you noticed, the graphic objects are cached, (the createGraphics is
> only called once).
> You must see the rendering engine very much like a 3D scene graph.
> There is a root node which contains other graphics and so on, so the
> createGraphics can return a single Graphic which contain several children
> graphics for each radar.
> The graphic builder takes the MapLayer and the J2DCanvas in parameter, this
> allow the graphic to attach a listener on the MapLayer and update his
> graphic children when needed or recreate it's children each time.
>
> The canvas can be repaint at any time using :
> getCanvas().getController().repaint();
>
> You can choose to repaint only on events or use an external thread to
> repaint at regular interval.
>
> johann
>
>
>
> On 07/26/2011 11:42 AM, Thys Meintjes wrote:
>
> After adding some logs I noticed the following:
>
> The TargetGraphicBuilder's createGraphics() is only called when loaded
> or when the state changed. It seems that the underlying
> assumption for the builder is that it will only be called once or twice to
> create a set of static graphics.... This does not fit with my
> use case where the targetmanager manages a list of dynamically changing
> targets. I assumed createGraphics will be called every time
> a repaint is needed - but this is not the case it seems.
>
> Is there anything I can do about this ? Is there a way of adding a
> graphic directly to a map layer ?
>
> public class TargetGraphicBuilder implements GraphicBuilder<GraphicJ2D> {
>
> private final static Logger logger =
> LoggerFactory.getLogger(TargetGraphicBuilder.class);
> private TargetManager targetManager;
>
> public TargetGraphicBuilder(TargetManager manager) {
> targetManager = manager;
>
> }
>
> @Override
> public Collection<GraphicJ2D> createGraphics(MapLayer layer, Canvas
> canvas) {
> logger.debug("Creating Graphics");
> if (canvas instanceof J2DCanvas) {
> final J2DCanvas j2dcanvas = (J2DCanvas) canvas;
> return makeTargets(j2dcanvas);
> }
> logger.debug("Canvas not a J2DCanvas");
> return Collections.emptyList();
> }
>
> private Collection makeTargets(J2DCanvas canvas) {
> ArrayList<TargetGraphic> targetGraphics = new
> ArrayList<TargetGraphic>();
> for (Target t : targetManager.getAllTargets()) {
> targetGraphics.add(new TargetGraphic(canvas, t));
> }
> return Collections.unmodifiableList(targetGraphics);
> }
>
> @Override
> public Class<GraphicJ2D> getGraphicType() {
> return GraphicJ2D.class;
> }
>
> @Override
> public Image getLegend(MapLayer layer) throws PortrayalException {
> return null;
> }
>
> public String getName() {
> return targetManager.getName();
> }
> }
>
> --
> Thys Meintjes
>
>
>
> _______________________________________________
> Geotoolkit mailing list
> Geotoolkit at lists.osgeo.orghttp://lists.osgeo.org/mailman/listinfo/geotoolkit
>
>
>
> _______________________________________________
> Geotoolkit mailing list
> Geotoolkit at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/geotoolkit
>
>
--
Thys Meintjes
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/geotoolkit/attachments/20110726/30f45ab8/attachment.html
More information about the Geotoolkit
mailing list