/* ********************************************************************** * * Use, duplication, or disclosure by the Government is subject to * restricted rights as set forth in the DFARS. * * BBNT Solutions LLC * A Part of * Verizon * 10 Moulton Street * Cambridge, MA 02138 * (617) 873-3000 * * Copyright (C) 2002 by BBNT Solutions, LLC * All Rights Reserved. * ********************************************************************** */ package com.bbn.openmap.layer.beanbox; import java.util.Vector; import com.bbn.openmap.proj.GreatCircle; import com.bbn.openmap.proj.Length; import com.bbn.openmap.proj.coords.LatLonPoint; import com.bbn.openmap.tools.beanbox.BeanLayoutManager; import com.bbn.openmap.util.Debug; /** * A layout manager for laying out SimpleBeanbObject beans in a wall * formation. The WallFormationLayout object is itself a bean. */ public class WallFormationLayout extends BeanLayoutManager { private float separationInNM; private float bearingInDeg; public WallFormationLayout() { this(35, 90, null); } public WallFormationLayout(float sep, float bearing, SimpleBeanContainer c) { this.separationInNM = sep; this.bearingInDeg = bearing; super._container = c; } public float getSeparationInNM() { return separationInNM; } public void setSeparationInNM(float sep) { separationInNM = sep; layoutContainer(); } public float getBearingInDeg() { return bearingInDeg; } public void setBearingInDeg(float bearing) { if (bearing < 0) bearing = 360 - bearing; bearingInDeg = bearing % 360; layoutContainer(); } /** * Called by the SimpleBeanContainer to layout its contents. */ public void layoutContainer() { //System.out.println("Called> layoutContainer"); if (super._container == null) return; SimpleBeanContainer container = (SimpleBeanContainer) _container; Vector contents = super._container.getContents(); if (contents == null || contents.isEmpty()) return; LatLonPoint midllp = new LatLonPoint.Float(container.getLatitude(), container.getLongitude()); LatLonPoint[] llps = new LatLonPoint[contents.size()]; if (contents.size() == 1) llps[0] = midllp; else { float angle1Deg = bearingInDeg - 90; float angle1Rad = (float) Math.toRadians(angle1Deg); float angle2Deg = bearingInDeg + 90; float angle2Rad = (float) Math.toRadians(angle2Deg); int numBeans = contents.size(); float spanNM = (numBeans - 1) * separationInNM; LatLonPoint cornerllp1 = midllp.getPoint( Length.NM.toRadians(spanNM / 2), angle1Rad); llps[0] = cornerllp1; for (int i = 1; i < contents.size(); i++) llps[i] = GreatCircle.sphericalBetween((float)cornerllp1.getRadLat(), (float)cornerllp1.getRadLon(), Length.NM.toRadians(separationInNM) * i, angle2Rad); } for (int i = 0; i < contents.size(); i++) { Long id = (Long) contents.get(i); Debug.error("Here in WallFormationLayout, trying to get layer SimpleBeanObjects"); /*SimpleBeanObject obj = SimpleBeanLayer.getLayer().getObject(id); if (obj == null) continue; obj.setLatitude(llps[i].getLatitude()); obj.setLongitude(llps[i].getLongitude()); obj.setBearingInDeg(bearingInDeg); */ } // SimpleBeanLayer.getLayer().updateGraphics(); } }