//********************************************************************** // //<copyright> // //BBN Technologies, a Verizon Company //10 Moulton Street //Cambridge, MA 02138 //(617) 873-8000 // //Copyright (C) BBNT Solutions LLC. All rights reserved. // //</copyright> //********************************************************************** // //$Source: ///cvs/darwars/ambush/aar/src/com/bbn/ambush/mission/MissionHandler.java,v //$ //$RCSfile: SphereBox.java,v $ //$Revision: 1.1 $ //$Date: 2006/04/07 17:44:36 $ //$Author: dietrick $ // //********************************************************************** package com.bbn.openmap.tools.j3d.geometry; import javax.vecmath.Point3d; import com.bbn.openmap.proj.coords.LatLonPoint; import com.bbn.openmap.tools.j3d.J3DGeo; public class SphereBox { LatLonPoint upper; LatLonPoint lower; double lowerElevation; double upperElevation; public SphereBox() { lowerElevation = Double.POSITIVE_INFINITY; upperElevation = Double.NEGATIVE_INFINITY; } public SphereBox(Point3d lower, Point3d upper) { init(new J3DGeo(lower.x, lower.y, lower.z)); add(upper); } public SphereBox(J3DGeo lower, J3DGeo upper) { init(lower); add(upper); } public SphereBox(SphereBox sBox) { this.upper = sBox.upper; this.lower = sBox.lower; lowerElevation = sBox.lowerElevation; upperElevation = sBox.upperElevation; } public void init(J3DGeo lower) { this.lower = new LatLonPoint.Double(lower.getLatitudeRadians(), lower.getLongitudeRadians(), true); this.upper = new LatLonPoint.Double(lower.getLatitudeRadians(), lower.getLongitudeRadians(), true); lowerElevation = lower.length(); upperElevation = lowerElevation; } public J3DGeo getLower() { if (lower != null) { return new J3DGeo(lower.getRadLat(), lower.getRadLon(), false, lowerElevation); } return null; } public J3DGeo getUpper() { if (upper != null) { return new J3DGeo(upper.getRadLat(), upper.getRadLon(), false, upperElevation); } return null; } public void add(Point3d pt) { add(new J3DGeo(pt.x, pt.y, pt.z)); } public void add(J3DGeo pt) { if (lower == null) { init(pt); return; } double llat = lower.getRadLat(); double llon = lower.getRadLon(); double ulat = upper.getRadLat(); double ulon = upper.getRadLon(); double lat = pt.getLatitudeRadians(); double lon = pt.getLongitudeRadians(); double elev = pt.length(); if (lat < llat) { llat = lat; } if (lat > ulat) { ulat = lat; } if (lon < llon) { llon = lon; } if (lon > ulon) { ulon = lon; } if (elev < lowerElevation) { lowerElevation = elev; } if (elev > upperElevation) { upperElevation = elev; } upper.setLatLon(ulat, ulon, true); lower.setLatLon(llat, llon, true); } public void add(SphereBox sBox) { J3DGeo lg = sBox.getLower(); J3DGeo ug = sBox.getUpper(); if (lg != null) add(lg); if (ug != null) add(ug); } }