Package org.geoforge.worldwind.layer

Source Code of org.geoforge.worldwind.layer.GfrRlrObjTloRndMltPntCircleAbs

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.geoforge.worldwind.layer;

import gov.nasa.worldwind.geom.LatLon;
import gov.nasa.worldwind.geom.Position;
import gov.nasa.worldwind.render.PointPlacemark;
import gov.nasa.worldwind.render.Renderable;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.logging.Logger;
import org.geoforge.lang.handler.IGfrHandlerLifeCycleObject;
import org.geoforge.lang.util.geography.GfrUtilDmsOperation;
import org.geoforge.java.util.logging.filehandler.FileHandlerLogger;
import org.geoforge.mdl.event.GfrEvtMdlIdAbs;
import org.geoforge.mdldat.event.GfrEvtMdlIdDatChangedGeometry;
import org.geoforge.worldwind.handler.IGfrHandlerWwdEarthObjectGeoforgeRenderableLayer;
import org.geoforge.worldwind.render.GfrShouldRedrawRnd;

/**
*
* @author robert
*/
abstract public class GfrRlrObjTloRndMltPntCircleAbs extends GfrRlrObjTloRndMltAbs
{
    // ----
    // begin: instantiate logger for this class
    final private static Logger _LOGGER_ = Logger.getLogger(GfrRlrObjTloRndMltPntCircleAbs.class.getName());

    static
    {
        GfrRlrObjTloRndMltPntCircleAbs._LOGGER_.addHandler(FileHandlerLogger.s_getInstance());
    }

    // end: instantiate logger for this class
    // ----
   
    abstract protected void _fillIn(List<Position> lstPos) throws Exception;
  
   protected GfrRlrObjTloRndMltPntCircleAbs(PropertyChangeListener lstShouldRedraw, String strId) throws Exception
   {
      super(lstShouldRedraw, strId);
     
      if (lstShouldRedraw != null)
           super.addPropertyChangeListener(lstShouldRedraw);
   }
  
   @Override
   public void destroy()
   {
      super.removePropertyChangeListener(super._lstShouldRedraw);
     
      super.destroy();
   }
  
   public ArrayList<Position> getPositionsRenderableObjects()
   {
      ArrayList<Position> lstPositions = new ArrayList<Position>();
     
      if (super._lstObject==null || super._lstObject.isEmpty())
         return lstPositions;
     
      for (int i=0; i<super._lstObject.size(); i++)
      {
         IGfrHandlerWwdEarthObjectGeoforgeRenderableLayer objCur = (IGfrHandlerWwdEarthObjectGeoforgeRenderableLayer) super._lstObject.get(i);
         PointPlacemark pntCur = (PointPlacemark) objCur;
        
         lstPositions.add(pntCur.getPosition());
      }
     
      return lstPositions;
   }
  

   @Override
   public Position getPositionBarycentricObjectGeoforgeWwdEarth() throws Exception
   {
      if (super._lstObject==null || super._lstObject.isEmpty())
         return null;
     
     
      double dblMinLat = 500;
      double dblMaxLat = -500;
      double dblMinLon = 500;
      double dblMaxLon = -500;

      for (int i=0; i<super._lstObject.size(); i++)
      {
         IGfrHandlerWwdEarthObjectGeoforgeRenderableLayer objCur = (IGfrHandlerWwdEarthObjectGeoforgeRenderableLayer) super._lstObject.get(i);
         PointPlacemark pntCur = (PointPlacemark) objCur;
         LatLon llnCur = pntCur.getPosition();
         //
         double[] dbls = llnCur.asDegreesArray();

         if (dbls[0] < dblMinLat)//=a
         {
            dblMinLat = dbls[0];
         }

         if (dbls[1] < dblMinLon)//=c
         {
            dblMinLon = dbls[1];
         }

         if (dbls[0] > dblMaxLat)//=b
         {
            dblMaxLat = dbls[0];
         }

         if (dbls[1] > dblMaxLon)//=d
         {
            dblMaxLon = dbls[1];
         }
      }

      double dblLat = dblMinLat;
      dblLat += dblMaxLat;
      dblLat /= 2;

      double dblLon = dblMinLon;
      dblLon += dblMaxLon;
      dblLon /= 2;

      return Position.fromDegrees(dblLat, dblLon);
   }


   @Override
   public double getCharacteristicDimensionObjectGeoforgeRenderableLayer() throws Exception
   {
      double dblMinLat = 500;
      double dblMaxLat = -500;
      double dblMinLon = 500;
      double dblMaxLon = -500;

      for (int i = 0; i < super._lstObject.size(); i++)
      {
         IGfrHandlerWwdEarthObjectGeoforgeRenderableLayer objCur = (IGfrHandlerWwdEarthObjectGeoforgeRenderableLayer) super._lstObject.get(i);
         PointPlacemark pntCur = (PointPlacemark) objCur;
         LatLon llnCur = pntCur.getPosition();
        
         double[] dbls = llnCur.asDegreesArray();

         if (dbls[0] < dblMinLat)//=a
         {
            dblMinLat = dbls[0];
         }

         if (dbls[1] < dblMinLon)//=c
         {
            dblMinLon = dbls[1];
         }

         if (dbls[0] > dblMaxLat)//=b
         {
            dblMaxLat = dbls[0];
         }

         if (dbls[1] > dblMaxLon)//=d
         {
            dblMaxLon = dbls[1];
         }
      }
     
      double dist = GfrUtilDmsOperation.s_getDistanceFromDeg(dblMinLat, dblMinLon, dblMaxLat, dblMaxLon);
      dist *= 2;
      return dist;  
   }
  
   @Override
   public void update(Observable obs, Object objEvt)
   {
      if (objEvt instanceof GfrEvtMdlIdDatChangedGeometry)
      {
         GfrEvtMdlIdAbs evtId = (GfrEvtMdlIdAbs) objEvt;
         String strId = evtId.getId();
        
         if (strId.compareTo(super._strId) != 0)
            return;
        
         GfrEvtMdlIdDatChangedGeometry evtChange = (GfrEvtMdlIdDatChangedGeometry) evtId;
         List<Position> lstPos = (List<Position>) evtChange.getGeometry();
         _clear_();
        
         if (lstPos!=null && !lstPos.isEmpty())
         {
            try
            {
               _fillIn(lstPos);
            }
           
            catch(Exception exc)
            {
               exc.printStackTrace();
               GfrRlrObjTloRndMltPntCircleAbs._LOGGER_.severe(exc.getMessage());
               // TODO: error dialog
               return;
            }
         }
        
         this.firePropertyChange(GfrShouldRedrawRnd.STR, null, null);
         return;
      }
     
      super.update(obs, objEvt);
   }
  
   private void _clear_()
   {
      if (super._lstObject!=null && !super._lstObject.isEmpty())
      {
         for (Renderable rndCur: super._lstObject)
         {
            super.removeRenderable(rndCur);
            ((IGfrHandlerLifeCycleObject) rndCur).destroy();
         }
      }
     
      super._lstObject.clear();
   }
}
TOP

Related Classes of org.geoforge.worldwind.layer.GfrRlrObjTloRndMltPntCircleAbs

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.