Problems with Layer

From: Gubler, Rüdiger <rgubler@init-ka.de>
Date: Mon Aug 26 2002 - 06:37:45 EDT

Hi,

i have the following Layer added to OpenMap 4.5. The Indicatorlights shows that
there is some calculation but nothing is shown.

Whats wrong?

package com.initka.bprocess.gis.display.layers;

import java.text.Format;
import java.awt.Color;
import java.awt.event.ComponentListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import javax.swing.SwingConstants;

import com.bbn.openmap.Layer;
import com.bbn.openmap.LatLonPoint;
import com.bbn.openmap.proj.Projection;
import com.bbn.openmap.event.ProjectionEvent;
import com.bbn.openmap.event.MapMouseListener;
import com.bbn.openmap.event.SelectMouseMode;
import com.bbn.openmap.event.NavMouseMode;
import com.bbn.openmap.event.NavMouseMode2;
import com.bbn.openmap.event.LayerStatusEvent;
import com.bbn.openmap.event.InfoDisplayEvent;
import com.bbn.openmap.omGraphics.OMGraphic;
import com.bbn.openmap.omGraphics.OMGraphicList;
import com.bbn.openmap.omGraphics.OMCircle;
import com.bbn.openmap.util.SwingWorker;

public class VehicleLayer
    extends Layer
    implements ComponentListener, ActionListener, MapMouseListener
{
  public static final String VM_VERSION = "$Revision: $";
  public static final String _redrawCommand = "redraw";
  protected Projection _projection = null;
  protected String _projID = null;
  protected OMGraphicList _omgraphics = null;
  private LayerWorker _currentWorker;
  private boolean _cancelled = false;

  public VehicleLayer()
  {
  }

  public String[] getMouseModeServiceList()
  {
    return new String[]
    {
      SelectMouseMode.modeID,
      NavMouseMode.modeID,
      NavMouseMode2.modeID
    };
  }

  public void paint( java.awt.Graphics g )
  {
    if (_omgraphics != null)
    {
      _omgraphics.render(g);
    }
  }

  public MapMouseListener getMapMouseListener()
  {
    return this;
  }

  public void dataChanged()
  {
    repaint();
  }

  public boolean getShowInfoLine()
  {
    return _showInfoLine;
  }

  public void projectionChanged( ProjectionEvent ev )
  {
    Projection newProj = ev.getProjection();
    String newPID = newProj.getProjectionID();

    if (newPID == _projID) // projection not really different
    {
      repaint();
      return;
    }
    _projection = newProj;
    _projID = newPID;

    // kill old list
    _omgraphics = null;

    // redo the layer
    computeLayer();
  }

  public void componentHidden( ComponentEvent e ) {}
  public void componentResized( ComponentEvent e ) {}
  public void componentMoved( ComponentEvent e ) {}

  public void componentShown(ComponentEvent e)
  {
    repaint();
  }

  public void actionPerformed (ActionEvent e)
  {
    String cmd = e.getActionCommand();
    if (cmd == _redrawCommand)
    {
      repaint();
    }
  }

  // No interrest but must be implemented
  public boolean mouseReleased( MouseEvent mouseEvent )
  {
    return false;
  }

  // No interrest but must be implemented
  public boolean mouseClicked( MouseEvent mouseEvent )
  {
    return false;
  }

  // No interrest but must be implemented
  public boolean mouseMoved( MouseEvent mouseEvent )
  {
    return false;
  }

  // No interrest but must be implemented
  public void mouseMoved(){}

  // No interrest but must be implemented
  public void mouseExited( MouseEvent mouseEvent ) {}

  // No interrest but must be implemented
  public void mouseEntered( MouseEvent mouseEvent ) {}

  // No interrest but must be implemented
  public boolean mouseDragged( MouseEvent mouseEvent )
  {
    return false;
  }

  // No interrest but must be implemented
  public boolean mousePressed( MouseEvent mouseEvent )
  {
    return false;
  }

  class LayerWorker extends SwingWorker
  {

    public LayerWorker ()
    {
      super();
    }

    /**
     * Compute the value to be returned by the <code>get</code> method.
     */
    public Object construct()
    {
      fireStatusUpdate(LayerStatusEvent.START_WORKING);
      try {
        OMGraphicList list = computeGraphics();
        return list;
      }
      catch (OutOfMemoryError e)
      {
        e.printStackTrace();
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }

      // Something went wrong.
      _omgraphics = null;
      fireRequestMessage(new InfoDisplayEvent(this, "ERROR"));
      fireStatusUpdate(LayerStatusEvent.FINISH_WORKING);
      return null;
    }

    /**
     * Called on the event dispatching thread (not on the worker thread)
     * after the <code>construct</code> method has returned.
     */
    public void finished()
    {
      fireStatusUpdate(LayerStatusEvent.FINISH_WORKING);
      workerComplete(this);
    }
  }

  protected synchronized void workerComplete( LayerWorker worker )
  {
    if (!_cancelled)
    {
      _currentWorker = null;
      _omgraphics = (OMGraphicList)worker.get();
      repaint();
    }
    else
    {
      _cancelled = false;
      _currentWorker = new LayerWorker();
      _currentWorker.execute();
    }
  }

  protected synchronized void computeLayer()
  {
    if (_projection == null)
    {
      return;
    }

    if (isVisible())
    {
      if (_omgraphics != null)
      {
        // If we already have graphics, just slap 'em up there.
        // This is probably because this layer was hidden and
        // is now being shown.
        repaint();
      }
      else
      {
        if (_currentWorker == null)
        {
          // No graphics. If we're not already computing graphics,
          // then compute new graphics.
          _currentWorker = new LayerWorker();
          _currentWorker.execute();
        }
        else
        {
          // We're already computing. Set the cancel flag and
          // return. The DcwWorker management code will fire
          // up a new computation when the current worker stops.
          _cancelled = true;
        }
      }
    }
  }

  private OMGraphicList computeGraphics()
  {
    OMGraphicList list = new OMGraphicList();

    for( int x = -87800; x <= -86000; x++ )
    {
      for( int y = 40450; y <= 40480; y++ )
      {

        OMCircle omCircle = new OMCircle( ((float)y / 1000), ((float)x / 1000), 200 );
        omCircle.setFillPaint( Color.green );
        list.addOMGraphic( omCircle );

        OMCircle omCircle2 = new OMCircle( ((float)x / 1000), ((float)y / 1000), 200 );
        omCircle2.setFillPaint( Color.pink );
        list.addOMGraphic( omCircle2 );

      }
    }

    return list;
  }

}

Yours Rüdiger

--
[To unsubscribe to this list send an email to "majdart@bbn.com"
with the following text in the BODY of the message "unsubscribe openmap-users"]
Received on Mon Aug 26 06:41:37 2002

This archive was generated by hypermail 2.1.8 : Thu May 12 2005 - 07:18:33 EDT