package armyc2.c2sd.renderer.test3;
//
import armyc2.c2sd.JavaLineArray.CELineArray;
import android.graphics.Typeface;
import java.util.ArrayList;
import armyc2.c2sd.JavaLineArray.TacticalLines;
import armyc2.c2sd.JavaLineArray.POINT2;
import armyc2.c2sd.JavaTacticalRenderer.clsMETOC;
import armyc2.c2sd.JavaRendererServer.RenderMultipoints.clsRenderer;
import armyc2.c2sd.graphics2d.*;
import armyc2.c2sd.renderer.utilities.*;
import armyc2.c2sd.JavaLineArray.lineutility;
import java.util.Iterator;
import java.util.List;
import android.graphics.Paint;
import android.graphics.Canvas;
import android.graphics.Path;
import android.content.Context;
import android.util.SparseArray;
import static armyc2.c2sd.JavaLineArray.lineutility.CalcDistanceDouble;
import sec.web.json.utilities.JSONObject;
import sec.web.render.SECWebRenderer;
import sec.web.render.PointConverter;
import sec.web.render.utilities.JavaRendererUtilities;
import java.io.File;
import java.io.BufferedWriter;
import java.io.FileWriter;
import armyc2.c2sd.renderer.test3.R;
///**
// *
// * @author Michael Deutch
// */
public final class utility {
protected static double leftLongitude;
protected static double rightLongitude;
protected static double upperLatitude;
protected static double lowerLatitude;
public static String linetype = "";
public static String T = "";
public static String T1 = "";
public static String H = "";
public static String H1 = "";
public static String W = "";
public static String W1 = "";
public static String linecolor = "";
public static String textcolor = "";
public static String fillcolor = "";
public static String AM="";
public static String AN="";
public static String X="";
public static String lineWidth="";
//public static String extents="";
public static String Rev="";
public static String symbolFillIds="";//"WOS-HHDF--P----";
/**
* uses the PointConversion to convert to geo
*
* @param pts
* @param converter
* @return
*/
private static ArrayList<POINT2> PixelsToLatLong(ArrayList<Point> pts,
IPointConversion converter) {
int j = 0;
Point pt = null;
Point2D pt2d = null;
ArrayList<Point2D> pts2d = new ArrayList();
for (j = 0; j < pts.size(); j++) {
pt = pts.get(j);
pt2d=new Point2D.Double(pt.x,pt.y);
pt2d = converter.PixelsToGeo(pt2d);
pts2d.add(pt2d);
}
ArrayList<POINT2> pts2 = new ArrayList();
int n=pts2d.size();
//for (j = 0; j < pts2d.size(); j++)
for (j = 0; j < n; j++)
{
pts2.add(new POINT2(pts2d.get(j).getX(), pts2d.get(j).getY()));
}
return pts2;
}
// imported from tactical test for the channel types
private static Point ComputeLastPoint(ArrayList<Point> arrLocation) {
Point locD = new Point(0, 0);
try {
Point locA = new Point(arrLocation.get(1).x, arrLocation.get(1).y);
// Get the first point (b) in pixels.
// var locB:Point=new Point(arrLocation[0].x,arrLocation[0].y);
Point locB = new Point(arrLocation.get(0).x, arrLocation.get(0).y);
// diagnostic 2-27-13
double dist = lineutility.CalcDistanceDouble(new POINT2(locA.x,
locA.y), new POINT2(locB.x, locB.y));
// Compute the distance in pixels from (a) to (b).
double dblDx = locB.x - locA.x;
double dblDy = locB.y - locA.y;
// Compute the dblAngle in radians from (a) to (b).
double dblTheta = Math.atan2(-dblDy, dblDx);
// Compute a reasonable intermediate point along the line from (a)
// to (b).
Point locC = new Point(0, 0);
locC.x = (int) (locA.x + 0.85 * dblDx);
locC.y = (int) (locA.y + 0.85 * dblDy);
// Put the last point on the left side of the line from (a) to (b).
double dblAngle = dblTheta + Math.PI / 2.0;
if (dblAngle > Math.PI) {
dblAngle = dblAngle - 2.0 * Math.PI;
}
if (dblAngle < -Math.PI) {
dblAngle = dblAngle + 2.0 * Math.PI;
}
// Set the magnitude of the dblWidth in pixels. Make sure it is at
// least 15 pixels.
double dblWidth = 30;// was 15
// diagnostic 2-27-13
if (dblWidth > dist) {
dblWidth = dist;
}
if (dblWidth < 10) {
dblWidth = 10;
}
// Compute the last point in pixels.
locD.x = (int) (locC.x + dblWidth * Math.cos(dblAngle));
locD.y = (int) (locC.y - dblWidth * Math.sin(dblAngle));
} catch (Exception e) {
// CJMTKExceptions.LogException(ex, ex.Source);
// throw e;
}
return locD;
} // End ComputeLastPoint
private static double displayWidth;
private static double displayHeight;
protected static void set_displayPixelsWidth(double value) {
displayWidth = value;
}
protected static void set_displayPixelsHeight(double value) {
displayHeight = value;
}
protected static void SetExtents(double ullon, double lrlon, double ullat,
double lrlat) {
leftLongitude = ullon;// -95.5;
rightLongitude = lrlon;// -93;
upperLatitude = ullat;// 33.5;
lowerLatitude = lrlat;// 32;
}
private static String TableType(int lineType) {
String str = "";
switch (lineType) {
case TacticalLines.DUMMY:
case TacticalLines.BS_AREA:
case TacticalLines.GENERAL:
case TacticalLines.NFA:
case TacticalLines.FFA:
case TacticalLines.DMAF:
case TacticalLines.DMA:
case TacticalLines.AIRFIELD:
case TacticalLines.ENCIRCLE:
case TacticalLines.STRONG:
case TacticalLines.FORT:
case TacticalLines.ZONE:
case TacticalLines.BELT:
case TacticalLines.DRCL:
case TacticalLines.DEPICT:
case TacticalLines.OBSAREA:
case TacticalLines.OBSFAREA:
case TacticalLines.RFA:
case TacticalLines.WFZ:
case TacticalLines.ASSY:
// from list
case TacticalLines.LAA:
case TacticalLines.RAD:
case TacticalLines.BIO:
case TacticalLines.CHEM:
case TacticalLines.UXO:
case TacticalLines.MINED:
case TacticalLines.PEN:
case TacticalLines.AIRHEAD:
case TacticalLines.AO:
case TacticalLines.ATKPOS:
case TacticalLines.ASSAULT:
case TacticalLines.PNO:
case TacticalLines.RSA:
case TacticalLines.RHA:
case TacticalLines.EPW:
case TacticalLines.DHA:
case TacticalLines.BOMB:
case TacticalLines.SERIES:
case TacticalLines.SMOKE:
case TacticalLines.AT:
case TacticalLines.FARP:
case TacticalLines.NAI:
case TacticalLines.EA1:
case TacticalLines.EA:
case TacticalLines.DSA:
case TacticalLines.BSA:
case TacticalLines.OBJ:
case TacticalLines.TAI:
case TacticalLines.BATTLE:
case TacticalLines.PZ:
case TacticalLines.LZ:
case TacticalLines.DZ:
case TacticalLines.FAADZ:
case TacticalLines.HIMEZ:
case TacticalLines.LOMEZ:
case TacticalLines.MEZ:
case TacticalLines.ROZ:
case TacticalLines.EZ:
case TacticalLines.HIDACZ:
case TacticalLines.FSA: // change 1
case TacticalLines.ATI:
case TacticalLines.CFFZ:
case TacticalLines.SENSOR:
case TacticalLines.CENSOR:
case TacticalLines.DA:
case TacticalLines.CFZ:
case TacticalLines.ZOR:
case TacticalLines.TBA:
case TacticalLines.TVAR:
case TacticalLines.KILLBOXBLUE:
case TacticalLines.KILLBOXPURPLE:
case TacticalLines.ACA:
case TacticalLines.BEACH:
case TacticalLines.BEACH_SLOPE_MODERATE:
case TacticalLines.BEACH_SLOPE_STEEP:
case TacticalLines.FOUL_GROUND:
case TacticalLines.KELP:
case TacticalLines.SWEPT_AREA:
case TacticalLines.OIL_RIG_FIELD:
case TacticalLines.WEIRS:
case TacticalLines.OPERATOR_DEFINED:
case TacticalLines.VDR_LEVEL_12:
case TacticalLines.VDR_LEVEL_23:
case TacticalLines.VDR_LEVEL_34:
case TacticalLines.VDR_LEVEL_45:
case TacticalLines.VDR_LEVEL_56:
case TacticalLines.VDR_LEVEL_67:
case TacticalLines.VDR_LEVEL_78:
case TacticalLines.VDR_LEVEL_89:
case TacticalLines.VDR_LEVEL_910:
case TacticalLines.IFR:
case TacticalLines.MVFR:
case TacticalLines.TURBULENCE:
case TacticalLines.ICING:
case TacticalLines.NON_CONVECTIVE:
case TacticalLines.CONVECTIVE:
case TacticalLines.FROZEN:
case TacticalLines.THUNDERSTORMS:
case TacticalLines.FOG:
case TacticalLines.SAND:
case TacticalLines.FREEFORM:
case TacticalLines.DEPTH_AREA:
case TacticalLines.ISLAND:
case TacticalLines.ANCHORAGE_AREA:
case TacticalLines.WATER:
case TacticalLines.FORESHORE_AREA:
case TacticalLines.DRYDOCK:
case TacticalLines.LOADING_FACILITY_AREA:
case TacticalLines.PERCHES:
case TacticalLines.UNDERWATER_HAZARD:
case TacticalLines.TRAINING_AREA:
case TacticalLines.DISCOLORED_WATER:
case TacticalLines.BEACH_SLOPE_FLAT:
case TacticalLines.BEACH_SLOPE_GENTLE:
case TacticalLines.SOLID_ROCK:
case TacticalLines.CLAY:
case TacticalLines.VERY_COARSE_SAND:
case TacticalLines.COARSE_SAND:
case TacticalLines.MEDIUM_SAND:
case TacticalLines.FINE_SAND:
case TacticalLines.VERY_FINE_SAND:
case TacticalLines.VERY_FINE_SILT:
case TacticalLines.FINE_SILT:
case TacticalLines.MEDIUM_SILT:
case TacticalLines.COARSE_SILT:
case TacticalLines.SAND_AND_SHELLS:
case TacticalLines.PEBBLES:
case TacticalLines.OYSTER_SHELLS:
case TacticalLines.BOULDERS:
case TacticalLines.BOTTOM_SEDIMENTS_LAND:
case TacticalLines.BOTTOM_SEDIMENTS_NO_DATA:
case TacticalLines.BOTTOM_ROUGHNESS_SMOOTH:
case TacticalLines.BOTTOM_ROUGHNESS_MODERATE:
case TacticalLines.BOTTOM_ROUGHNESS_ROUGH:
case TacticalLines.CLUTTER_HIGH:
case TacticalLines.CLUTTER_MEDIUM:
case TacticalLines.CLUTTER_LOW:
case TacticalLines.IMPACT_BURIAL_0:
case TacticalLines.IMPACT_BURIAL_10:
case TacticalLines.IMPACT_BURIAL_20:
case TacticalLines.IMPACT_BURIAL_75:
case TacticalLines.IMPACT_BURIAL_100:
case TacticalLines.BOTTOM_TYPE_A1:
case TacticalLines.BOTTOM_TYPE_A2:
case TacticalLines.BOTTOM_TYPE_A3:
case TacticalLines.BOTTOM_TYPE_B1:
case TacticalLines.BOTTOM_TYPE_B2:
case TacticalLines.BOTTOM_TYPE_B3:
case TacticalLines.BOTTOM_TYPE_C1:
case TacticalLines.BOTTOM_TYPE_C2:
case TacticalLines.BOTTOM_TYPE_C3:
case TacticalLines.BOTTOM_CATEGORY_A:
case TacticalLines.BOTTOM_CATEGORY_B:
case TacticalLines.BOTTOM_CATEGORY_C:
case TacticalLines.MARITIME_AREA:
case TacticalLines.SUBMERGED_CRIB:
case TacticalLines.TGMF:
case TacticalLines.TEST:
str = "polygon";
break;
case TacticalLines.FORTL:
str = "polyline";
break;
default:
str = "polyline";
break;
}
return str;
}
protected static int GetLinetype(String str, int rev) {
int linetype = -1;
linetype = clsMETOC.IsWeather(str);
if (linetype < 0) {
linetype = CELineArray.CGetLinetypeFromString(str, rev);
}
if (linetype >= 0) {
return linetype;
}
if (str.equalsIgnoreCase("track")) {
return -1;
}
if (str.equalsIgnoreCase("route")) {
return -1;
}
if (str.equalsIgnoreCase("cylinder")) {
return -1;
}
if (str.equalsIgnoreCase("curtain")) {
return -1;
}
if (str.equalsIgnoreCase("polyarc")) {
return -1;
}
if (str.equalsIgnoreCase("polygon")) {
return -1;
}
if (str.equalsIgnoreCase("radarc")) {
return -1;
}
if (str.equalsIgnoreCase("BS_AREA")) {
linetype = TacticalLines.BS_AREA;
} else if (str.equalsIgnoreCase("BS_LINE")) {
linetype = TacticalLines.BS_LINE;
} else if (str.equalsIgnoreCase("BS_CROSS")) {
linetype = TacticalLines.BS_CROSS;
} else if (str.equalsIgnoreCase("BS_ELLIPSE")) {
linetype = TacticalLines.BS_ELLIPSE;
} else if (str.equalsIgnoreCase("BS_RECTANGLE")) {
linetype = TacticalLines.BS_RECTANGLE;
} else if (str.equalsIgnoreCase("CFL")) {
linetype = TacticalLines.CFL;
} else if (str.equalsIgnoreCase("OVERHEAD_WIRE")) {
linetype = TacticalLines.OVERHEAD_WIRE;
} else if (str.equalsIgnoreCase("AMBUSH")) {
linetype = TacticalLines.AMBUSH;
} else if (str.equalsIgnoreCase("EASY")) {
linetype = TacticalLines.EASY;
} else if (str.equalsIgnoreCase("FOXHOLE")) {
linetype = TacticalLines.FOXHOLE;
} // TASKS
else if (str.equalsIgnoreCase("BLOCK")) {
linetype = TacticalLines.BLOCK;
} else if (str.equalsIgnoreCase("BREACH")) {
linetype = TacticalLines.BREACH;
} else if (str.equalsIgnoreCase("BYPASS")) {
linetype = TacticalLines.BYPASS;
} else if (str.equalsIgnoreCase("CANALIZE")) {
linetype = TacticalLines.CANALIZE;
} else if (str.equalsIgnoreCase("CLEAR")) {
linetype = TacticalLines.CLEAR;
} else if (str.equalsIgnoreCase("CONTAIN")) {
linetype = TacticalLines.CONTAIN;
} else if (str.equalsIgnoreCase("DELAY")) {
linetype = TacticalLines.DELAY;
} else if (str.equalsIgnoreCase("DISRUPT")) {
linetype = TacticalLines.DISRUPT;
} else if (str.equalsIgnoreCase("FIX")) {
linetype = TacticalLines.FIX;
} else if (str.equalsIgnoreCase("MNFLDFIX")) {
linetype = TacticalLines.MNFLDFIX;
} else if (str.equalsIgnoreCase("FOLLA")) {
linetype = TacticalLines.FOLLA;
} else if (str.equalsIgnoreCase("FOLSP")) {
linetype = TacticalLines.FOLSP;
} else if (str.equalsIgnoreCase("ISOLATE")) {
linetype = TacticalLines.ISOLATE;
} else if (str.equalsIgnoreCase("OCCUPY")) {
linetype = TacticalLines.OCCUPY;
} else if (str.equalsIgnoreCase("PENETRATE")) {
linetype = TacticalLines.PENETRATE;
} else if (str.equalsIgnoreCase("RIP")) {
linetype = TacticalLines.RIP;
} else if (str.equalsIgnoreCase("RETAIN")) {
linetype = TacticalLines.RETAIN;
} else if (str.equalsIgnoreCase("RETIRE")) {
linetype = TacticalLines.RETIRE;
} else if (str.equalsIgnoreCase("SECURE")) {
linetype = TacticalLines.SECURE;
} else if (str.equalsIgnoreCase("SCREEN")) {
linetype = TacticalLines.SCREEN;
} else if (str.equalsIgnoreCase("COVER")) {
linetype = TacticalLines.COVER;
} else if (str.equalsIgnoreCase("GUARD")) {
linetype = TacticalLines.GUARD;
} else if (str.equalsIgnoreCase("SEIZE")) {
linetype = TacticalLines.SEIZE;
} else if (str.equalsIgnoreCase("WITHDRAW")) {
linetype = TacticalLines.WITHDRAW;
} else if (str.equalsIgnoreCase("WDRAWUP")) {
linetype = TacticalLines.WDRAWUP;
} else if (str.equalsIgnoreCase("BOUNDARY")) {
linetype = TacticalLines.BOUNDARY;
} else if (str.equalsIgnoreCase("FLOT")) {
linetype = TacticalLines.FLOT;
} else if (str.equalsIgnoreCase("PL")) {
linetype = TacticalLines.PL;
} else if (str.equalsIgnoreCase("LL")) {
linetype = TacticalLines.LL;
} else if (str.equalsIgnoreCase("GENERAL")) {
linetype = TacticalLines.GENERAL;
} else if (str.equalsIgnoreCase("GENERIC")) {
linetype = TacticalLines.GENERIC;
} else if (str.equalsIgnoreCase("ASSY")) {
linetype = TacticalLines.ASSY;
} else if (str.equalsIgnoreCase("EA")) {
linetype = TacticalLines.EA;
} else if (str.equalsIgnoreCase("FORT")) {
linetype = TacticalLines.FORT;
} else if (str.equalsIgnoreCase("DZ")) {
linetype = TacticalLines.DZ;
} else if (str.equalsIgnoreCase("EZ")) {
linetype = TacticalLines.EZ;
} else if (str.equalsIgnoreCase("LZ")) {
linetype = TacticalLines.LZ;
} else if (str.equalsIgnoreCase("PZ")) {
linetype = TacticalLines.PZ;
} else if (str.equalsIgnoreCase("SARA")) {
linetype = TacticalLines.SARA;
} else if (str.equalsIgnoreCase("LAA")) {
linetype = TacticalLines.LAA;
} else if (str.equalsIgnoreCase("AIRFIELD")) {
linetype = TacticalLines.AIRFIELD;
} else if (str.equalsIgnoreCase("AC")) {
linetype = TacticalLines.AC;
} else if (str.equalsIgnoreCase("MRR")) {
linetype = TacticalLines.MRR;
} else if (str.equalsIgnoreCase("MRR_USAS")) {
linetype = TacticalLines.MRR_USAS;
} else if (str.equalsIgnoreCase("SAAFR")) {
linetype = TacticalLines.SAAFR;
} else if (str.equalsIgnoreCase("UAV")) {
linetype = TacticalLines.UAV;
} else if (str.equalsIgnoreCase("UAV_USAS")) {
linetype = TacticalLines.UAV_USAS;
} else if (str.equalsIgnoreCase("LLTR")) {
linetype = TacticalLines.LLTR;
} else if (str.equalsIgnoreCase("ROZ")) {
linetype = TacticalLines.ROZ;
} else if (str.equalsIgnoreCase("FAADZ")) {
linetype = TacticalLines.FAADZ;
} else if (str.equalsIgnoreCase("HIDACZ")) {
linetype = TacticalLines.HIDACZ;
} else if (str.equalsIgnoreCase("MEZ")) {
linetype = TacticalLines.MEZ;
} else if (str.equalsIgnoreCase("LOMEZ")) {
linetype = TacticalLines.LOMEZ;
} else if (str.equalsIgnoreCase("HIMEZ")) {
linetype = TacticalLines.HIMEZ;
} else if (str.equalsIgnoreCase("WFZ")) {
linetype = TacticalLines.WFZ;
} else if (str.equalsIgnoreCase("DECEIVE")) {
linetype = TacticalLines.DECEIVE;
} else if (str.equalsIgnoreCase("DIRATKFNT")) {
linetype = TacticalLines.DIRATKFNT;
} else if (str.equalsIgnoreCase("DMA")) {
linetype = TacticalLines.DMA;
} else if (str.equalsIgnoreCase("LINTGT")) {
linetype = TacticalLines.LINTGT;
} else if (str.equalsIgnoreCase("LINTGTS")) {
linetype = TacticalLines.LINTGTS;
} else if (str.equalsIgnoreCase("FPF")) {
linetype = TacticalLines.FPF;
} else if (str.equalsIgnoreCase("DMAF")) {
linetype = TacticalLines.DMAF;
} else if (str.equalsIgnoreCase("DUMMY")) {
linetype = TacticalLines.DUMMY;
} else if (str.equalsIgnoreCase("FEBA")) {
linetype = TacticalLines.FEBA;
} else if (str.equalsIgnoreCase("PDF")) {
linetype = TacticalLines.PDF;
} else if (str.equalsIgnoreCase("BATTLE")) {
linetype = TacticalLines.BATTLE;
} else if (str.equalsIgnoreCase("PNO")) {
linetype = TacticalLines.PNO;
} else if (str.equalsIgnoreCase("EA1")) {
linetype = TacticalLines.EA1;
} else if (str.equalsIgnoreCase("DIRATKAIR")) {
linetype = TacticalLines.DIRATKAIR;
} else if (str.equalsIgnoreCase("DIRATKGND")) {
linetype = TacticalLines.DIRATKGND;
} else if (str.equalsIgnoreCase("DIRATKSPT")) {
linetype = TacticalLines.DIRATKSPT;
} else if (str.equalsIgnoreCase("FCL")) {
linetype = TacticalLines.FCL;
} else if (str.equalsIgnoreCase("IL")) {
linetype = TacticalLines.IL;
} else if (str.equalsIgnoreCase("LOA")) {
linetype = TacticalLines.LOA;
} else if (str.equalsIgnoreCase("LOD")) {
linetype = TacticalLines.LOD;
} else if (str.equalsIgnoreCase("LDLC")) {
linetype = TacticalLines.LDLC;
} else if (str.equalsIgnoreCase("PLD")) {
linetype = TacticalLines.PLD;
} else if (str.equalsIgnoreCase("ASSAULT")) {
linetype = TacticalLines.ASSAULT;
} else if (str.equalsIgnoreCase("ATKPOS")) {
linetype = TacticalLines.ATKPOS;
} else if (str.equalsIgnoreCase("ATKBYFIRE")) {
linetype = TacticalLines.ATKBYFIRE;
} else if (str.equalsIgnoreCase("SPTBYFIRE")) {
linetype = TacticalLines.SPTBYFIRE;
} else if (str.equalsIgnoreCase("OBJ")) {
linetype = TacticalLines.OBJ;
} else if (str.equalsIgnoreCase("PEN")) {
linetype = TacticalLines.PEN;
} else if (str.equalsIgnoreCase("HOLD")) {
linetype = TacticalLines.HOLD;
} else if (str.equalsIgnoreCase("RELEASE")) {
linetype = TacticalLines.RELEASE;
} else if (str.equalsIgnoreCase("BRDGHD")) {
linetype = TacticalLines.BRDGHD;
} else if (str.equalsIgnoreCase("AO")) {
linetype = TacticalLines.AO;
} else if (str.equalsIgnoreCase("AIRHEAD")) {
linetype = TacticalLines.AIRHEAD;
} else if (str.equalsIgnoreCase("ENCIRCLE")) {
linetype = TacticalLines.ENCIRCLE;
} else if (str.equalsIgnoreCase("NAI")) {
linetype = TacticalLines.NAI;
} else if (str.equalsIgnoreCase("TAI")) {
linetype = TacticalLines.TAI;
} else if (str.equalsIgnoreCase("BELT")) {
linetype = TacticalLines.BELT;
} else if (str.equalsIgnoreCase("LINE")) {
linetype = TacticalLines.LINE;
} else if (str.equalsIgnoreCase("ZONE")) {
linetype = TacticalLines.ZONE;
} else if (str.equalsIgnoreCase("OBSFAREA")) {
linetype = TacticalLines.OBSFAREA;
} else if (str.equalsIgnoreCase("OBSAREA")) {
linetype = TacticalLines.OBSAREA;
} else if (str.equalsIgnoreCase("ABATIS")) {
linetype = TacticalLines.ABATIS;
} else if (str.equalsIgnoreCase("ATDITCH")) {
linetype = TacticalLines.ATDITCH;
} else if (str.equalsIgnoreCase("ATDITCHC")) {
linetype = TacticalLines.ATDITCHC;
} else if (str.equalsIgnoreCase("ATDITCHM")) {
linetype = TacticalLines.ATDITCHM;
} else if (str.equalsIgnoreCase("ATWALL")) {
linetype = TacticalLines.ATWALL;
} else if (str.equalsIgnoreCase("CLUSTER")) {
linetype = TacticalLines.CLUSTER;
} else if (str.equalsIgnoreCase("DEPICT")) {
linetype = TacticalLines.DEPICT;
} else if (str.equalsIgnoreCase("GAP")) {
linetype = TacticalLines.GAP;
} else if (str.equalsIgnoreCase("MINED")) {
linetype = TacticalLines.MINED;
} else if (str.equalsIgnoreCase("MNFLDBLK")) {
linetype = TacticalLines.MNFLDBLK;
} else if (str.equalsIgnoreCase("TURN")) {
linetype = TacticalLines.TURN;
} else if (str.equalsIgnoreCase("MNFLDDIS")) {
linetype = TacticalLines.MNFLDDIS;
} else if (str.equalsIgnoreCase("UXO")) {
linetype = TacticalLines.UXO;
} else if (str.equalsIgnoreCase("PLANNED")) {
linetype = TacticalLines.PLANNED;
} else if (str.equalsIgnoreCase("ESR1")) {
linetype = TacticalLines.ESR1;
} else if (str.equalsIgnoreCase("ESR2")) {
linetype = TacticalLines.ESR2;
} else if (str.equalsIgnoreCase("ROADBLK")) {
linetype = TacticalLines.ROADBLK;
} else if (str.equalsIgnoreCase("TRIP")) {
linetype = TacticalLines.TRIP;
} else if (str.equalsIgnoreCase("UNSP")) {
linetype = TacticalLines.UNSP;
} else if (str.equalsIgnoreCase("BYDIF")) {
linetype = TacticalLines.BYDIF;
} else if (str.equalsIgnoreCase("BYIMP")) {
linetype = TacticalLines.BYIMP;
} else if (str.equalsIgnoreCase("ASLTXING")) {
linetype = TacticalLines.ASLTXING;
} else if (str.equalsIgnoreCase("BRIDGE")) {
linetype = TacticalLines.BRIDGE;
} else if (str.equalsIgnoreCase("FERRY")) {
linetype = TacticalLines.FERRY;
} else if (str.equalsIgnoreCase("FORDSITE")) {
linetype = TacticalLines.FORDSITE;
} else if (str.equalsIgnoreCase("FORDIF")) {
linetype = TacticalLines.FORDIF;
} else if (str.equalsIgnoreCase("MFLANE")) {
linetype = TacticalLines.MFLANE;
} else if (str.equalsIgnoreCase("RAFT")) {
linetype = TacticalLines.RAFT;
} else if (str.equalsIgnoreCase("STRONG")) {
linetype = TacticalLines.STRONG;
} else if (str.equalsIgnoreCase("MSDZ")) {
linetype = TacticalLines.MSDZ;
} else if (str.equalsIgnoreCase("RAD")) {
linetype = TacticalLines.RAD;
} else if (str.equalsIgnoreCase("CHEM")) {
linetype = TacticalLines.CHEM;
} else if (str.equalsIgnoreCase("BIO")) {
linetype = TacticalLines.BIO;
} else if (str.equalsIgnoreCase("DRCL")) {
linetype = TacticalLines.DRCL;
} else if (str.equalsIgnoreCase("FSCL")) {
linetype = TacticalLines.FSCL;
} else if (str.equalsIgnoreCase("NFL")) {
linetype = TacticalLines.NFL;
} else if (str.equalsIgnoreCase("MFP")) {
linetype = TacticalLines.MFP;
} else if (str.equalsIgnoreCase("RFL")) {
linetype = TacticalLines.RFL;
} else if (str.equalsIgnoreCase("AT")) {
linetype = TacticalLines.AT;
} else if (str.equalsIgnoreCase("RECTANGULAR")) {
linetype = TacticalLines.RECTANGULAR;
} else if (str.equalsIgnoreCase("CIRCULAR")) {
linetype = TacticalLines.CIRCULAR;
} else if (str.equalsIgnoreCase("SERIES")) {
linetype = TacticalLines.SERIES;
} else if (str.equalsIgnoreCase("SMOKE")) {
linetype = TacticalLines.SMOKE;
} else if (str.equalsIgnoreCase("BOMB")) {
linetype = TacticalLines.BOMB;
} else if (str.equalsIgnoreCase("FORTL")) {
linetype = TacticalLines.FORTL;
} // FIRE SUPPORT AREAS
else if (str.equalsIgnoreCase("FSA")) {
linetype = TacticalLines.FSA;
} else if (str.equalsIgnoreCase("FSA_RECTANGULAR")) {
linetype = TacticalLines.FSA_RECTANGULAR;
} else if (str.equalsIgnoreCase("FSA_CIRCULAR")) {
linetype = TacticalLines.FSA_CIRCULAR;
} else if (str.equalsIgnoreCase("ACA")) {
linetype = TacticalLines.ACA;
} else if (str.equalsIgnoreCase("ACA_RECTANGULAR")) {
linetype = TacticalLines.ACA_RECTANGULAR;
} else if (str.equalsIgnoreCase("ACA_CIRCULAR")) {
linetype = TacticalLines.ACA_CIRCULAR;
} else if (str.equalsIgnoreCase("FFA")) {
linetype = TacticalLines.FFA;
} else if (str.equalsIgnoreCase("FFA_RECTANGULAR")) {
linetype = TacticalLines.FFA_RECTANGULAR;
} else if (str.equalsIgnoreCase("FFA_CIRCULAR")) {
linetype = TacticalLines.FFA_CIRCULAR;
} else if (str.equalsIgnoreCase("NFA")) {
linetype = TacticalLines.NFA;
} else if (str.equalsIgnoreCase("NFA_RECTANGULAR")) {
linetype = TacticalLines.NFA_RECTANGULAR;
} else if (str.equalsIgnoreCase("NFA_CIRCULAR")) {
linetype = TacticalLines.NFA_CIRCULAR;
} else if (str.equalsIgnoreCase("RFA")) {
linetype = TacticalLines.FFA;
} else if (str.equalsIgnoreCase("RFA_RECTANGULAR")) {
linetype = TacticalLines.RFA_RECTANGULAR;
} else if (str.equalsIgnoreCase("RFA_CIRCULAR")) {
linetype = TacticalLines.RFA_CIRCULAR;
} else if (str.equalsIgnoreCase("PAA")) {
linetype = TacticalLines.PAA;
} else if (str.equalsIgnoreCase("PAA_RECTANGULAR")) {
linetype = TacticalLines.PAA_RECTANGULAR;
} else if (str.equalsIgnoreCase("PAA_RECTANGULAR_REVC")) {
linetype = TacticalLines.PAA_RECTANGULAR_REVC;
} else if (str.equalsIgnoreCase("PAA_CIRCULAR")) {
linetype = TacticalLines.PAA_CIRCULAR;
} else if (str.equalsIgnoreCase("ATI")) {
linetype = TacticalLines.ATI;
} else if (str.equalsIgnoreCase("ATI_RECTANGULAR")) {
linetype = TacticalLines.ATI_RECTANGULAR;
} else if (str.equalsIgnoreCase("ATI_CIRCULAR")) {
linetype = TacticalLines.ATI_CIRCULAR;
} else if (str.equalsIgnoreCase("CFFZ")) {
linetype = TacticalLines.CFFZ;
} else if (str.equalsIgnoreCase("CFFZ_RECTANGULAR")) {
linetype = TacticalLines.CFFZ_RECTANGULAR;
} else if (str.equalsIgnoreCase("CFFZ_CIRCULAR")) {
linetype = TacticalLines.CFFZ_CIRCULAR;
} else if (str.equalsIgnoreCase("SENSOR")) {
linetype = TacticalLines.SENSOR;
} else if (str.equalsIgnoreCase("SENSOR_RECTANGULAR")) {
linetype = TacticalLines.SENSOR_RECTANGULAR;
} else if (str.equalsIgnoreCase("SENSOR_CIRCULAR")) {
linetype = TacticalLines.SENSOR_CIRCULAR;
} else if (str.equalsIgnoreCase("CENSOR")) {
linetype = TacticalLines.CENSOR;
} else if (str.equalsIgnoreCase("CENSOR_RECTANGULAR")) {
linetype = TacticalLines.CENSOR_RECTANGULAR;
} else if (str.equalsIgnoreCase("CENSOR_CIRCULAR")) {
linetype = TacticalLines.CENSOR_CIRCULAR;
} else if (str.equalsIgnoreCase("DA")) {
linetype = TacticalLines.DA;
} else if (str.equalsIgnoreCase("DA_RECTANGULAR")) {
linetype = TacticalLines.DA_RECTANGULAR;
} else if (str.equalsIgnoreCase("DA_CIRCULAR")) {
linetype = TacticalLines.DA_CIRCULAR;
} else if (str.equalsIgnoreCase("CFZ")) {
linetype = TacticalLines.CFZ;
} else if (str.equalsIgnoreCase("CFZ_RECTANGULAR")) {
linetype = TacticalLines.CFZ_RECTANGULAR;
} else if (str.equalsIgnoreCase("CFZ_CIRCULAR")) {
linetype = TacticalLines.CFZ_CIRCULAR;
} else if (str.equalsIgnoreCase("ZOR")) {
linetype = TacticalLines.ZOR;
} else if (str.equalsIgnoreCase("ZOR_RECTANGULAR")) {
linetype = TacticalLines.ZOR_RECTANGULAR;
} else if (str.equalsIgnoreCase("ZOR_CIRCULAR")) {
linetype = TacticalLines.ZOR_CIRCULAR;
} else if (str.equalsIgnoreCase("TBA")) {
linetype = TacticalLines.TBA;
} else if (str.equalsIgnoreCase("TBA_RECTANGULAR")) {
linetype = TacticalLines.TBA_RECTANGULAR;
} else if (str.equalsIgnoreCase("TBA_CIRCULAR")) {
linetype = TacticalLines.TBA_CIRCULAR;
} else if (str.equalsIgnoreCase("TVAR")) {
linetype = TacticalLines.TVAR;
} else if (str.equalsIgnoreCase("TVAR_RECTANGULAR")) {
linetype = TacticalLines.TVAR_RECTANGULAR;
} else if (str.equalsIgnoreCase("TVAR_CIRCULAR")) {
linetype = TacticalLines.TVAR_CIRCULAR;
} else if (str.equalsIgnoreCase("KILLBOXBLUE")) {
linetype = TacticalLines.KILLBOXBLUE;
} else if (str.equalsIgnoreCase("KILLBOXBLUE_RECTANGULAR")) {
linetype = TacticalLines.KILLBOXBLUE_RECTANGULAR;
} else if (str.equalsIgnoreCase("KILLBOXBLUE_CIRCULAR")) {
linetype = TacticalLines.KILLBOXBLUE_CIRCULAR;
} else if (str.equalsIgnoreCase("KILLBOXPURPLE")) {
linetype = TacticalLines.KILLBOXPURPLE;
} else if (str.equalsIgnoreCase("KILLBOXPURPLE_RECTANGULAR")) {
linetype = TacticalLines.KILLBOXPURPLE_RECTANGULAR;
} else if (str.equalsIgnoreCase("KILLBOXPURPLE_CIRCULAR")) {
linetype = TacticalLines.KILLBOXPURPLE_CIRCULAR;
} // RANGE FANS
else if (str.equalsIgnoreCase("RANGE_FAN")) {
linetype = TacticalLines.RANGE_FAN;
} else if (str.equalsIgnoreCase("SECTOR")) {
linetype = TacticalLines.RANGE_FAN_SECTOR;
} else if (str.equalsIgnoreCase("RANGE_FAN_SECTOR")) {
linetype = TacticalLines.RANGE_FAN_SECTOR;
} else if (str.equalsIgnoreCase("CONVOY")) {
linetype = TacticalLines.CONVOY;
} else if (str.equalsIgnoreCase("HCONVOY")) {
linetype = TacticalLines.HCONVOY;
} else if (str.equalsIgnoreCase("MSR")) {
linetype = TacticalLines.MSR;
} else if (str.equalsIgnoreCase("ASR")) {
linetype = TacticalLines.ASR;
} else if (str.equalsIgnoreCase("ONEWAY")) {
linetype = TacticalLines.ONEWAY;
} else if (str.equalsIgnoreCase("TWOWAY")) {
linetype = TacticalLines.TWOWAY;
} else if (str.equalsIgnoreCase("ALT")) {
linetype = TacticalLines.ALT;
} else if (str.equalsIgnoreCase("DHA")) {
linetype = TacticalLines.DHA;
} else if (str.equalsIgnoreCase("EPW")) {
linetype = TacticalLines.EPW;
} else if (str.equalsIgnoreCase("FARP")) {
linetype = TacticalLines.FARP;
} else if (str.equalsIgnoreCase("RHA")) {
linetype = TacticalLines.RHA;
} else if (str.equalsIgnoreCase("BSA")) {
linetype = TacticalLines.BSA;
} else if (str.equalsIgnoreCase("DSA")) {
linetype = TacticalLines.DSA;
} else if (str.equalsIgnoreCase("RSA")) {
linetype = TacticalLines.RSA;
} else if (str.equalsIgnoreCase("NAVIGATION")) {
linetype = TacticalLines.NAVIGATION;
} else if (str.equalsIgnoreCase("BEARING")) {
linetype = TacticalLines.BEARING;
} else if (str.equalsIgnoreCase("ELECTRO")) {
linetype = TacticalLines.ELECTRO;
} else if (str.equalsIgnoreCase("ACOUSTIC")) {
linetype = TacticalLines.ACOUSTIC;
} else if (str.equalsIgnoreCase("TORPEDO")) {
linetype = TacticalLines.TORPEDO;
} else if (str.equalsIgnoreCase("OPTICAL")) {
linetype = TacticalLines.OPTICAL;
} // the channel types
else if (str.equalsIgnoreCase("CATK")) {
linetype = TacticalLines.CATK;
} else if (str.equalsIgnoreCase("AAFNT")) {
linetype = TacticalLines.AAFNT;
} else if (str.equalsIgnoreCase("AXAD")) {
linetype = TacticalLines.AXAD;
} else if (str.equalsIgnoreCase("MAIN")) {
linetype = TacticalLines.MAIN;
} else if (str.equalsIgnoreCase("AIRAOA")) {
linetype = TacticalLines.AIRAOA;
} else if (str.equalsIgnoreCase("SPT")) {
linetype = TacticalLines.SPT;
} else if (str.equalsIgnoreCase("CATKBYFIRE")) {
linetype = TacticalLines.CATKBYFIRE;
} else if (str.equalsIgnoreCase("AAAAA")) {
linetype = TacticalLines.AAAAA;
} else if (str.equalsIgnoreCase("ROTARY")) {
linetype = TacticalLines.AAAAA;
} else if (str.equalsIgnoreCase("TRIPLE")) {
linetype = TacticalLines.TRIPLE;
} else if (str.equalsIgnoreCase("DOUBLEC")) {
linetype = TacticalLines.DOUBLEC;
} else if (str.equalsIgnoreCase("SINGLEC")) {
linetype = TacticalLines.SINGLEC;
} else if (str.equalsIgnoreCase("SINGLE")) {
linetype = TacticalLines.SINGLEC;
} else if (str.equalsIgnoreCase("HWFENCE")) {
linetype = TacticalLines.HWFENCE;
} else if (str.equalsIgnoreCase("LWFENCE")) {
linetype = TacticalLines.LWFENCE;
} // else if(str.equalsIgnoreCase("UNSP"))
// linetype=TacticalLines.UNSP;
else if (str.equalsIgnoreCase("DOUBLEA")) {
linetype = TacticalLines.DOUBLEA;
} else if (str.equalsIgnoreCase("SFENCE")) {
linetype = TacticalLines.SFENCE;
} else if (str.equalsIgnoreCase("DFENCE")) {
linetype = TacticalLines.DFENCE;
} else if (str.equalsIgnoreCase("LC")) {
linetype = TacticalLines.LC;
}
// rev C settings
if (RendererSettings.getInstance().getSymbologyStandard() == RendererSettings.Symbology_2525C) {
if (str.equalsIgnoreCase("SCREEN")) {
linetype = TacticalLines.SCREEN_REVC;
} else if (str.equalsIgnoreCase("COVER")) {
linetype = TacticalLines.COVER_REVC;
} else if (str.equalsIgnoreCase("GUARD")) {
linetype = TacticalLines.GUARD_REVC;
} else if (str.equalsIgnoreCase("SEIZE")) {
linetype = TacticalLines.SEIZE_REVC;
}
}
return linetype;
}
protected static int GetAutoshapeQty(String str, int rev) {
int numPts = -1;
// linetype=utility.GetLinetype(jTextField1.getText());
int linetype = GetLinetype(str, rev);
if (str.equalsIgnoreCase("cylinder"))
return 1;
if (str.equalsIgnoreCase("cylinder-------"))
return 1;
if (str.equalsIgnoreCase("radarc"))
return 1;
if (str.equalsIgnoreCase("radarc---------"))
return 1;
switch (linetype) {
case TacticalLines.RANGE_FAN_SECTOR:
case TacticalLines.RANGE_FAN:
numPts=1;
break;
case TacticalLines.FIX:
case TacticalLines.FOLLA:
case TacticalLines.FOLSP:
case TacticalLines.ISOLATE:
case TacticalLines.CORDONKNOCK:
case TacticalLines.CORDONSEARCH:
case TacticalLines.OCCUPY:
case TacticalLines.RETAIN:
case TacticalLines.SECURE:
case TacticalLines.MRR:
case TacticalLines.UAV:
// case TacticalLines.LLTR:
case TacticalLines.CLUSTER:
case TacticalLines.MNFLDFIX:
case TacticalLines.FERRY:
case TacticalLines.MFLANE:
case TacticalLines.RAFT:
case TacticalLines.FOXHOLE:
// case TacticalLines.LINTGT:
// case TacticalLines.LINTGTS:
case TacticalLines.FPF:
case TacticalLines.CONVOY:
case TacticalLines.HCONVOY:
case TacticalLines.BEARING:
case TacticalLines.NAVIGATION:
case TacticalLines.ELECTRO:
case TacticalLines.ACOUSTIC:
case TacticalLines.TORPEDO:
case TacticalLines.OPTICAL:
numPts = 2;
break;
case TacticalLines.RECTANGULAR:
case TacticalLines.BS_CROSS:
// case TacticalLines.RANGE_FAN://rev c
// case TacticalLines.RANGE_FAN_SECTOR://rev c
numPts = 1; // for RECTANGULAR change to 3 if using points
break;
case TacticalLines.PAA_CIRCULAR:
case TacticalLines.FSA_CIRCULAR:
case TacticalLines.ACA_CIRCULAR:
case TacticalLines.FFA_CIRCULAR:
case TacticalLines.NFA_CIRCULAR:
case TacticalLines.RFA_CIRCULAR:
case TacticalLines.ATI_CIRCULAR:
case TacticalLines.CFFZ_CIRCULAR:
case TacticalLines.SENSOR_CIRCULAR:
case TacticalLines.CENSOR_CIRCULAR:
case TacticalLines.DA_CIRCULAR:
case TacticalLines.CFZ_CIRCULAR:
case TacticalLines.ZOR_CIRCULAR:
case TacticalLines.TBA_CIRCULAR:
case TacticalLines.TVAR_CIRCULAR:
case TacticalLines.CIRCULAR:
case TacticalLines.KILLBOXBLUE_CIRCULAR:
case TacticalLines.KILLBOXPURPLE_CIRCULAR:
numPts = 1; // change to 2 if using points
break;
case TacticalLines.PAA_RECTANGULAR:
case TacticalLines.PAA_RECTANGULAR_REVC:
case TacticalLines.FSA_RECTANGULAR:
case TacticalLines.ACA_RECTANGULAR:
case TacticalLines.FFA_RECTANGULAR:
case TacticalLines.NFA_RECTANGULAR:
case TacticalLines.RFA_RECTANGULAR:
case TacticalLines.ATI_RECTANGULAR:
case TacticalLines.CFFZ_RECTANGULAR:
case TacticalLines.SENSOR_RECTANGULAR:
case TacticalLines.CENSOR_RECTANGULAR:
case TacticalLines.DA_RECTANGULAR:
case TacticalLines.CFZ_RECTANGULAR:
case TacticalLines.ZOR_RECTANGULAR:
case TacticalLines.TBA_RECTANGULAR:
case TacticalLines.TVAR_RECTANGULAR:
case TacticalLines.KILLBOXBLUE_RECTANGULAR:
case TacticalLines.KILLBOXPURPLE_RECTANGULAR:
case TacticalLines.BS_RECTANGLE:
numPts = 2; // change to 3 if using points
break;
case TacticalLines.BLOCK:
case TacticalLines.BREACH:
case TacticalLines.BYPASS:
case TacticalLines.CANALIZE:
case TacticalLines.CLEAR:
case TacticalLines.CONTAIN:
case TacticalLines.DELAY:
case TacticalLines.DISRUPT:
case TacticalLines.PENETRATE:
case TacticalLines.RETIRE:
case TacticalLines.SCREEN:
case TacticalLines.COVER:
case TacticalLines.GUARD:
case TacticalLines.SEIZE:
case TacticalLines.WDRAWUP:
case TacticalLines.WITHDRAW:
case TacticalLines.SARA:
case TacticalLines.DECEIVE:
// case TacticalLines.DUMMY:
case TacticalLines.PDF:
case TacticalLines.ATKBYFIRE:
case TacticalLines.AMBUSH:
// case TacticalLines.HOLD:
// case TacticalLines.BRDGHD:
case TacticalLines.MNFLDBLK:
case TacticalLines.TURN:
case TacticalLines.MNFLDDIS:
case TacticalLines.PLANNED:
case TacticalLines.ESR1:
case TacticalLines.ESR2:
case TacticalLines.ROADBLK:
case TacticalLines.TRIP:
case TacticalLines.EASY:
case TacticalLines.BYDIF:
case TacticalLines.BYIMP:
case TacticalLines.FORDSITE:
case TacticalLines.FORDIF:
case TacticalLines.IL:
case TacticalLines.BS_ELLIPSE:
// case TacticalLines.JET: //test only, then remove
numPts = 3;
break;
case TacticalLines.RIP:
case TacticalLines.SPTBYFIRE:
case TacticalLines.GAP:
case TacticalLines.ASLTXING:
case TacticalLines.BRIDGE:
case TacticalLines.MSDZ:
numPts = 4;
break;
// rev c
case TacticalLines.SCREEN_REVC:
case TacticalLines.COVER_REVC:
case TacticalLines.GUARD_REVC:
case TacticalLines.SEIZE_REVC:
numPts = 4;
break;
default:
numPts = 1000;
break;
}
if (rev == RendererSettings.Symbology_2525C) {
switch (linetype) {
case TacticalLines.UAV:
case TacticalLines.MRR:
numPts = 1000;
break;
}
}
return numPts;
}
private static ArrayList<POINT2> PointsToPOINT2(ArrayList<Point> pts) {
ArrayList<POINT2> pts2 = new ArrayList();
int j = 0;
Point pt = null;
POINT2 pt2 = null;
int n=pts.size();
//for (j = 0; j < pts.size(); j++)
for (j = 0; j < n; j++)
{
pt = pts.get(j);
pt2 = new POINT2(pt.getX(), pt.getY());
pts2.add(pt2);
}
return pts2;
}
private static ArrayList<Point2D> POINT2ToPoint2D(
ArrayList<POINT2> pts) {
ArrayList<Point2D> pts2d = new ArrayList();
int n=pts.size();
//for (int j = 0; j < pts.size(); j++)
for (int j = 0; j < n; j++)
{
pts2d.add(new Point2D.Double(pts.get(j).x, pts.get(j).y));
}
return pts2d;
}
/**
* Creates an MSS from the points and symbolid for testing
*
* @param symbolId
* @param uniqueId
* @param pts
* @return
*/
private static MilStdSymbol CreateMSS(String symbolId, String uniqueId,
ArrayList<POINT2> pts) {
// geo points
//ArrayList<Point2D.Double> pts2d = POINT2ToPoint2D(pts);
ArrayList<Point2D> pts2d = POINT2ToPoint2D(pts);
int rev = RendererSettings.getInstance().getSymbologyStandard();
int linetype = CELineArray.CGetLinetypeFromString(symbolId, rev);
MilStdSymbol mss = null;
try {
mss = new MilStdSymbol(symbolId, uniqueId, pts2d, null);
} catch (Exception e) {
}
//mss.setSymbologyStandard(RendererSettings.Symbology_2525C);
Color fillColor = null;
if(fillcolor.isEmpty()==false)
{
fillColor=SymbolUtilities.getColorFromHexString(fillcolor);
}
if(fillColor != null)
mss.setFillColor(fillColor);
Color lineColor = null;
Color textColor = null;
if(linecolor.isEmpty())
{
if(SymbolUtilities.isWeather(symbolId))
lineColor = SymbolUtilities.getLineColorOfWeather(symbolId);
else
lineColor=SymbolUtilities.getLineColorOfAffiliation(symbolId);
}
else
{
lineColor=SymbolUtilities.getColorFromHexString(linecolor);
}
if(textcolor.isEmpty())
textColor=lineColor;
else
textColor=SymbolUtilities.getColorFromHexString(textcolor);
if(AM.isEmpty())
AM="7000,6000,5000";
if(AN.isEmpty())
AN="45,315";
if(X.isEmpty())
X="27,54";
String[]am=AM.split(",");
String[] an=AN.split(",");
String[]x=X.split(",");
Double[]amd=new Double[am.length];
Double[]and=new Double[an.length];
Double[]xd=new Double[x.length];
int j=0;
for(j=0;j<am.length;j++)
amd[j]=Double.parseDouble(am[j]);
for(j=0;j<an.length;j++)
and[j]=Double.parseDouble(an[j]);
for(j=0;j<x.length;j++)
xd[j]=Double.parseDouble(x[j]);
mss.setLineColor(lineColor);
mss.setTextColor(textColor);
//mss.setLineWidth(2);
if(!lineWidth.isEmpty())
mss.setLineWidth(Integer.parseInt(lineWidth));
else
mss.setLineWidth(2);
mss.setModifier(ModifiersTG.T_UNIQUE_DESIGNATION_1, T);
mss.setModifier(ModifiersTG.T1_UNIQUE_DESIGNATION_2, T1);
mss.setModifier(ModifiersTG.H_ADDITIONAL_INFO_1, H);
mss.setModifier(ModifiersTG.H1_ADDITIONAL_INFO_2, H1);
mss.setModifier(ModifiersTG.H2_ADDITIONAL_INFO_3, "H2");
mss.setModifier(ModifiersTG.W_DTG_1, W);
mss.setModifier(ModifiersTG.W1_DTG_2, W1);
mss.setModifier(ModifiersTG.N_HOSTILE, "ENY");
for(j=0;j<amd.length;j++)
mss.setModifier_AM_AN_X(ModifiersTG.AM_DISTANCE, amd[j], j);
for(j=0;j<and.length;j++)
mss.setModifier_AM_AN_X(ModifiersTG.AN_AZIMUTH, and[j], j);
for(j=0;j<xd.length;j++)
mss.setModifier_AM_AN_X(ModifiersTG.X_ALTITUDE_DEPTH, xd[j], j);
// if (linetype == TacticalLines.AC || linetype == TacticalLines.SAAFR
// || linetype == TacticalLines.LLTR
// || linetype == TacticalLines.UAV
// || linetype == TacticalLines.MRR) {
// // try custon sizes
// mss.setModifier_AM_AN_X(ModifiersTG.AM_DISTANCE, amd[0], 0); // 4000
// mss.setModifier_AM_AN_X(ModifiersTG.AM_DISTANCE, amd[1], 1); // 3000
// mss.setModifier_AM_AN_X(ModifiersTG.X_ALTITUDE_DEPTH, xd[0], 0);//27
// mss.setModifier_AM_AN_X(ModifiersTG.X_ALTITUDE_DEPTH, xd[1], 1);//54
// } else if (linetype == TacticalLines.RANGE_FAN
// || linetype == TacticalLines.RANGE_FAN_SECTOR) {
// for(j=0;j<amd.length;j++)
// mss.setModifier_AM_AN_X(ModifiersTG.AM_DISTANCE, amd[j], j);
// for(j=0;j<amd.length;j++)
// mss.setModifier_AM_AN_X(ModifiersTG.AN_AZIMUTH, and[j], j);
// for(j=0;j<xd.length;j++)
// mss.setModifier_AM_AN_X(ModifiersTG.X_ALTITUDE_DEPTH, xd[j], j);
//
//
// } else// fire support areas
// {
// mss.setModifier_AM_AN_X(ModifiersTG.AM_DISTANCE, amd[0], 0);// radius
// // for
// // circles
// // or
// // width
// // for
// // rectangles,
// // rectangular
// // tgt
// mss.setModifier_AM_AN_X(ModifiersTG.AM_DISTANCE, amd[0], 1);// length
// // rectangular
// // tgt
// mss.setModifier_AM_AN_X(ModifiersTG.AN_AZIMUTH, and[0], 0); // attitude
// // rectangulat
// // tgt
// mss.setModifier_AM_AN_X(ModifiersTG.X_ALTITUDE_DEPTH, xd[0], 0);// alt
// // kill
// // box
// // purple
// mss.setModifier_AM_AN_X(ModifiersTG.X_ALTITUDE_DEPTH, xd[1], 1);// alt
// // kill
// // box
// // purple
// }
return mss;
}
private static String addAltitudes(String controlPtsStr) {
//ArrayList<String>alStr=new ArrayList();
String result = "";
String[] origPts = controlPtsStr.split(" ");
int j = 0;
String coords = "";
int n=origPts.length;
//for (j = 0; j < origPts.length; j++)
for (j = 0; j < n; j++)
{
coords = origPts[j];
coords += ",0";
if (j < origPts.length - 1) {
coords += " ";
}
result += coords;
}
return result;
}
/**
* string format is lon,lat lon,lat ...
*
* @param pts
* @return
*/
private static String controlPointsToString(ArrayList<POINT2> pts) {
String str = "";
int j = 0;
int n=pts.size();
//for (j = 0; j < pts.size(); j++)
for (j = 0; j < n; j++)
{
str += Double.toString(pts.get(j).x);
str += ",";
str += Double.toString(pts.get(j).y);
if (j < pts.size() - 1) {
str += " ";
}
}
return str;
}
private static String GetLinetype2(String str, int rev) {
//String str2=str.toString();
int linetype = GetLinetype(str, rev);
String str2 = str;
str2=str2.toUpperCase();
if (linetype < 0) {
//return a valid string the client can use for the symbol id
int n=str2.length();
//for (int j = str2.length(); j < 15; j++)
for (int j = n; j < 15; j++)
{
str2 += "-";
}
}
return str2;
}
/**
* computes the channel point for axis of advance symbols
* @param pts
* @param linetype
*/
private static void computePoint(ArrayList<Point>pts,int linetype)
{
switch (linetype) {
case TacticalLines.CATK:
case TacticalLines.CATKBYFIRE:
case TacticalLines.AAFNT:
case TacticalLines.AAAAA:
case TacticalLines.AIRAOA:
case TacticalLines.MAIN:
case TacticalLines.SPT:
case TacticalLines.AXAD:
case TacticalLines.CHANNEL:
Point pt = utility.ComputeLastPoint(pts);
pts.add(pt);
break;
default:
break;
}
}
/**
* The tester for the Google Earth plugin. Assumes pixels only are provided.
* If the linetype is fire support area then assume they are geo coords.
* Then use a best fit approach to convert them to pixels.
*
* @param pts
* @param defaultText
* @param g
*/
protected static String DoubleClickGE(ArrayList<Point> pts,
String defaultText, Canvas g2d, Context context) {
String strResult = "";
boolean renderAirControls = isAirspace(defaultText);
if (renderAirControls) {
return strResult;
}
//test text scaling
//RendererSettings.getInstance().setMPModifierFont("arial", Typeface.BOLD, 18, 2f);
//Object obj = System.getProperty("java.version");
ArrayList<Point2D> clipArea = new ArrayList();
defaultText=defaultText.toUpperCase();
clipArea.add(new Point2D.Double(0, 0));
clipArea.add(new Point2D.Double(displayWidth, 0));
clipArea.add(new Point2D.Double(displayWidth, displayHeight));
clipArea.add(new Point2D.Double(0, displayHeight));
clipArea.add(new Point2D.Double(0, 0));
int rev = 1;
if(Rev.isEmpty()==false)
{
if(Rev.equalsIgnoreCase("B"))
rev=0;
else
rev=1;
}
RendererSettings.getInstance().setSymbologyStandard(rev);
int linetype = utility.GetLinetype(defaultText, rev);
if (linetype < 0) {
defaultText = utility.GetLinetype2(defaultText, rev);
linetype = utility.GetLinetype(defaultText, rev);
}
//compute channel point for axis of advance
computePoint(pts,linetype);
//utility.ClosePolygon(pts, linetype);
//"-84.102854,39.799488,-84.100343,39.801342"
//leftLongitude=-84.102854;
//rightLongitude=-84.100343;
//lowerLatitude=39.799488;
//upperLatitude=39.801342;
IPointConversion converter = new PointConversion((int) displayWidth,
(int) displayHeight, upperLatitude, leftLongitude,
lowerLatitude, rightLongitude);
String symbolCode = clsSymbolCodeUtility.GetSymbolCode(linetype, rev);
if (defaultText.substring(0, 2).equalsIgnoreCase("10"))
{
if (defaultText.length() == 16) {
defaultText += "0000";
}
String symbolSet=defaultText.substring(4, 6);
String entityCode=defaultText.substring(10,16);
linetype=clsRenderer.getCMLineType(symbolSet, entityCode);
computePoint(pts,linetype);
symbolCode=defaultText;
}
ArrayList<POINT2> pts2 = PixelsToLatLong(pts, converter);
if (defaultText.length() == 15) {
symbolCode = defaultText;
}
MilStdSymbol mss = CreateMSS(symbolCode, "0", pts2);
boolean useDashArray=false;
//uncomment following line if client intends to calculate dashed lines to improve performance
//comment the line to allow renderer to calculate the dashes
useDashArray=true;
mss.setUseDashArray(useDashArray);
mss.setSymbologyStandard(rev);
//diagnostic
boolean renderAsMilStdSymbol=false;
//uncomment this line to run RendermultiPointAsMilstdSymbol
//renderAsMilStdSymbol=true;
if(T.equalsIgnoreCase("renderAsMSS"))
renderAsMilStdSymbol=true;
if(!renderAsMilStdSymbol)
{
clsRenderer.renderWithPolylines(mss, converter, clipArea, context);
drawShapeInfosGE(g2d, mss.getSymbolShapes(),useDashArray,mss.getSymbolID(),null);
drawShapeInfosText(g2d, mss.getModifierShapes(),null);
}
else
{
double sizeSquare = Math.abs(rightLongitude - leftLongitude);
if (sizeSquare > 180) {
sizeSquare = 360 - sizeSquare;
}
//end section
double scale = 541463 * sizeSquare;
String rectStr = getRectString(0, 0);
String controlPtsStr = controlPointsToString(pts2);
String altitudeMode = "";
SparseArray<String> modifiers = new SparseArray<String>();
SparseArray<String> attributes = new SparseArray<String>();
modifiers.put(ModifiersTG.T_UNIQUE_DESIGNATION_1, T);
modifiers.put(ModifiersTG.T1_UNIQUE_DESIGNATION_2, T1);
modifiers.put(ModifiersTG.AM_DISTANCE, AM);
modifiers.put(ModifiersTG.AN_AZIMUTH, AN);
modifiers.put(ModifiersTG.X_ALTITUDE_DEPTH, X);
modifiers.put(ModifiersTG.H1_ADDITIONAL_INFO_2, H1);
modifiers.put(ModifiersTG.W_DTG_1, W);
modifiers.put(ModifiersTG.W1_DTG_2, W1);
attributes.put(MilStdAttributes.FillColor, fillcolor);
attributes.put(MilStdAttributes.LineColor, linecolor);
attributes.put(MilStdAttributes.TextColor, textcolor);
attributes.put(MilStdAttributes.SymbologyStandard, Integer.toString(rev));
mss=sec.web.render.SECWebRenderer.RenderMultiPointAsMilStdSymbol("id", "name", "description", symbolCode, controlPtsStr, altitudeMode, scale, rectStr, modifiers, attributes, rev);
drawShapeInfosGE(g2d, mss.getSymbolShapes(),useDashArray,mss.getSymbolID(),converter);
drawShapeInfosText(g2d, mss.getModifierShapes(),converter);
}
//end diagnostic
return strResult;
}
private static void drawSECRendererCoords3d(Canvas g, ArrayList<String> coordStrings, IPointConversion converter) {
Paint paint = new Paint();
//BasicStroke stroke = new BasicStroke(2);
paint.setStyle(Paint.Style.FILL);
String coords = "";
String[] coordArray = null;
int j = 0, k = 0;
String[] triple = null;
double x1 = 0, y1 = 0, x2, y2;
int n=coordStrings.size();
//for (j = 0; j < coordStrings.size(); j++)
for (j = 0; j < n; j++)
{
coords = coordStrings.get(j);
coordArray = coords.split(" ");
int t=coordArray.length;
//for (k = 0; k < coordArray.length - 1; k++)
for (k = 0; k < t - 1; k++)
{
triple = coordArray[k].split(",");
if (triple.length < 3) {
continue;
}
x1 = Double.parseDouble(triple[0]);
y1 = Double.parseDouble(triple[1]);
//Point2D pt=new Point2D.Double(x1,y1);
Point2D pt = new Point2D.Double(x1, y1);
pt = converter.GeoToPixels(pt);
x1 = pt.getX();
y1 = pt.getY();
triple = coordArray[k + 1].split(",");
if (triple.length < 3) {
continue;
}
x2 = Double.parseDouble(triple[0]);
y2 = Double.parseDouble(triple[1]);
//pt=new Point2D.Double(x2,y2);
pt = new Point2D.Double(x2, y2);
pt = converter.GeoToPixels(pt);
x2 = pt.getX();
y2 = pt.getY();
g.drawLine((float) x1, (float) y1, (float) x2, (float) y2, paint);
}
}
}
private static String getRectString(double deltax, double deltay) {
String str = "";
// normalize deltas to start
deltax = Math.abs(deltax);
deltay = Math.abs(deltay);
double deltaLHS = 0, deltaRHS = 0, deltaTop = 0, deltaBottom = 0;
if (leftLongitude - rightLongitude > 180)// 179 to -179
{
deltaLHS = deltax;
deltaRHS = -deltax;
} else if (leftLongitude - rightLongitude < -180)// -179 to 179
{
deltaLHS = -deltax;
deltaRHS = deltax;
} else if (leftLongitude < rightLongitude) {
deltaLHS = deltax;
deltaRHS = -deltax;
} else if (leftLongitude > rightLongitude) {
deltaLHS = -deltax;
deltaRHS = deltax;
}
if (upperLatitude > lowerLatitude) {
deltaTop = -deltay;
deltaBottom = deltay;
} else {
deltaTop = deltay;
deltaBottom = -deltay;
}
str += Double.toString(leftLongitude + deltaLHS) + ",";
str += Double.toString(lowerLatitude + deltaBottom) + ",";
str += Double.toString(rightLongitude + deltaRHS) + ",";
str += Double.toString(upperLatitude + deltaTop);
return str;
}
/**
* draw the ArrayLists of polylines for the GoogleEarth project tester
*
* @param g
* @param l
*/
private static void drawShapeInfosGE(Canvas canvas, List<ShapeInfo> l, boolean useDashedLines, String symbolId,IPointConversion converter) {
try {
Iterator i = l.iterator();
int j = 0;
ArrayList<ArrayList<Point2D>> polylines = null;
ArrayList<Point2D> polyline = null;
int type = -1;
Path path = new Path();
Paint paint = new Paint();
BasicStroke stroke = null;
while (i.hasNext()) {
ShapeInfo spec = (ShapeInfo) i.next();
polylines = spec.getPolylines();
type = spec.getShapeType();
stroke = (BasicStroke) spec.getStroke();
if (spec.getFillColor() != null) {
paint.setColor(spec.getFillColor().toARGB());
}
paint.setStyle(Paint.Style.FILL);
if (spec.getShader() != null) {
paint.setShader(spec.getShader());
}
Point2D pt2d=null;
Point2D pixels=null;
if (spec.getFillColor() != null && spec.getFillColor().getAlpha() > 0) {
int n=polylines.size();
for (j = 0; j < n; j++)
{
path = new Path();
polyline = polylines.get(j);
//diagnostic
if(converter==null)
path.moveTo((int) polyline.get(0).getX(), (int) polyline.get(0).getY());
else
{
pt2d=polyline.get(0);
pixels=converter.GeoToPixels(pt2d);
path.moveTo((int) pixels.getX(), (int) pixels.getY());
}
int t=polyline.size();
for (int k = 1; k < t; k++)
{
if(converter==null)
path.lineTo((int) polyline.get(k).getX(), (int) polyline.get(k).getY());
else
{
pt2d=polyline.get(k);
pixels=converter.GeoToPixels(pt2d);
path.lineTo((int) pixels.getX(), (int) pixels.getY());
}
}
//end diagnostic
canvas.drawPath(path, paint);
}
}
BasicStroke s = (BasicStroke) spec.getStroke();
float[] dash = s.getDashArray();
if (spec.getLineColor() != null)
if(dash==null || useDashedLines==false)
{
paint = new Paint();
paint.setColor(spec.getLineColor().toARGB());
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(stroke.getLineWidth());
int n=polylines.size();
//for (j = 0; j < polylines.size(); j++)
for (j = 0; j < n; j++)
{
polyline = polylines.get(j);
path = new Path();
//diagnostic
if(converter==null)
path.moveTo((int) polyline.get(0).getX(), (int) polyline.get(0).getY());
else
{
pt2d=polyline.get(0);
pixels=converter.GeoToPixels(pt2d);
path.moveTo((int) pixels.getX(), (int) pixels.getY());
}
int t=polyline.size();
//for (int k = 1; k < polyline.size(); k++)
for (int k = 1; k < t; k++)
{
if(converter==null)
path.lineTo((int) polyline.get(k).getX(), (int) polyline.get(k).getY());
else
{
pt2d=polyline.get(k);
pixels=converter.GeoToPixels(pt2d);
path.lineTo((int) pixels.getX(), (int) pixels.getY());
}
}
//end diagnostic
canvas.drawPath(path, paint);
}
}
if (spec.getLineColor() != null && dash!=null && useDashedLines==true)
{
drawDashedPolylines(symbolId,polylines,spec,canvas);
}
}
} catch (Exception e) {
String s = e.getMessage();
return;
}
}
/**
*
* @param g
* @param l
*/
private static void drawShapeInfosText(Canvas g2d, List<ShapeInfo> l, IPointConversion converter) {
try {
Iterator i = l.iterator();
AffineTransform tx = null;
Point2D position = null;
double stringAngle = 0;
Paint paint = null;
int size = 0;
float x = 0, y = 0;
String str = "";
while (i.hasNext()) {
int n = g2d.save();
ShapeInfo spec = (ShapeInfo) i.next();
TextLayout tl = spec.getTextLayout();
size = tl.getBounds().height;
position = spec.getGlyphPosition();
if(converter != null)
{
position=spec.getModifierStringPosition();
position=converter.GeoToPixels(position);
}
stringAngle = spec.getModifierStringAngle();
g2d.rotate((float) stringAngle, (float) position.getX(), (float) position.getY());
//draw the text twice
paint = new Paint();
paint.setTextAlign(Paint.Align.CENTER);
paint.setStrokeWidth(2);
//paint.setColor(Color.WHITE.toARGB());
if(textcolor != null && !textcolor.isEmpty())
paint.setColor(SymbolUtilities.getColorFromHexString(textcolor).toARGB());
else
paint.setColor(spec.getLineColor().toARGB());
paint.setTextSize(size);
paint.setStyle(Paint.Style.STROKE);
//paint.setTextAlign(Paint.Align.LEFT);
x = (float) position.getX();
y = (float) position.getY();
str = spec.getModifierString();
g2d.drawText(str, x, y, paint);
//g2d.drawText(spec.getModifierString(), (float)position.getX(), (float)position.getY(),paint);
//g2d.rotate(-(float)stringAngle);
paint = new Paint();
paint.setTextSize(size);
paint.setTextAlign(Paint.Align.CENTER);
paint.setColor(spec.getLineColor().toARGB());
paint.setStyle(Paint.Style.FILL);
//paint.setTextAlign(Paint.Align.LEFT);
//g2d.drawText(spec.getModifierString(), (float)position.getX(), (float)position.getY(),paint);
g2d.drawText(str, x, y, paint);
g2d.restore();
//g2d.rotate(-(float)stringAngle);
//paint.setTextSize(10);
}//end whilc
}//end try
catch (Exception e) {
String s = e.getMessage();
return;
}
}
private static Boolean isAirspace(String defaultText) {
if (defaultText.equalsIgnoreCase("cake")) {
defaultText = "CAKE-----------";
}
if (defaultText.equalsIgnoreCase("line")) {
defaultText = "LINE-----------";
}
if (defaultText.equalsIgnoreCase("radarc")) {
defaultText = "RADARC---------";
}
if (defaultText.equalsIgnoreCase("polyarc")) {
defaultText = "POLYARC--------";
}
if (defaultText.equalsIgnoreCase("polygon")) {
defaultText = "POLYGON--------";
}
if (defaultText.equalsIgnoreCase("cylinder")) {
defaultText = "CYLINDER-------";
}
if (defaultText.equalsIgnoreCase("track")) {
defaultText = "TRACK----------";
}
if (defaultText.equalsIgnoreCase("route")) {
defaultText = "ROUTE----------";
}
if (defaultText.equalsIgnoreCase("orbit")) {
defaultText = "ORBIT----------";
}
if (defaultText.equalsIgnoreCase("curtain")) {
defaultText = "CURTAIN--------";
}
//boolean renderWithPolylines = true;
boolean renderAirControls = false;
if (defaultText.equals("CAKE-----------")) {
renderAirControls = true;
} else if (defaultText.equals("CYLINDER-------")) {
renderAirControls = true;
} else if (defaultText.equals("ROUTE----------")) {
renderAirControls = true;
} else if (defaultText.equals("RADARC---------")) {
renderAirControls = true;
} else if (defaultText.equals("POLYARC--------")) {
renderAirControls = true;
} else if (defaultText.equals("POLYGON--------")) {
renderAirControls = true;
} else if (defaultText.equals("TRACK----------")) {
renderAirControls = true;
} else if (defaultText.equals("ORBIT----------")) {
renderAirControls = true;
} else if (defaultText.equals("CURTAIN--------")) {
renderAirControls = true;
} else if (defaultText.equals("LINE--------")) {
renderAirControls = true;
}
return renderAirControls;
}
protected static String DoubleClickSECRenderer(ArrayList<Point> pts,
String defaultText, Canvas g2d) {
String strResult = "";
int rev = 1;
if(Rev.isEmpty()==false)
{
if(Rev.equalsIgnoreCase("B"))
rev=0;
else
rev=1;
}
RendererSettings.getInstance().setSymbologyStandard(rev);
int linetype = utility.GetLinetype(defaultText, rev);
if (linetype < 0) {
defaultText = utility.GetLinetype2(defaultText, rev);
linetype = utility.GetLinetype(defaultText, rev);
}
if (linetype > 0 && defaultText.length() != 15) {
defaultText = clsSymbolCodeUtility.GetSymbolCode(linetype, rev);
linetype = utility.GetLinetype(defaultText, rev);
}
//utility.ClosePolygon(pts, linetype);
ArrayList<POINT2> pts2 = PointsToPOINT2(pts);
double sizeSquare = Math.abs(rightLongitude - leftLongitude);
if (sizeSquare > 180) {
sizeSquare = 360 - sizeSquare;
}
double scale = 541463 * sizeSquare;
Point2D ptPixels = null;
Point2D ptGeo = null;
IPointConversion converter = null;
converter = new PointConverter(leftLongitude, upperLatitude, scale);
int j = 0;
POINT2 pt2 = null;
POINT2 pt2Geo = null;
ArrayList<POINT2> latLongs = new ArrayList();
int n=pts2.size();
//for (j = 0; j < pts2.size(); j++)
for (j = 0; j < n; j++)
{
pt2 = pts2.get(j);
ptPixels = new Point2D.Double(pt2.x, pt2.y);
ptGeo = converter.PixelsToGeo(ptPixels);
pt2Geo = new POINT2(ptGeo.getX(), ptGeo.getY());
latLongs.add(pt2Geo);
}
String hString = "0:FFFF00FF,1:FFFF00FF,2:FFFF00FF,3:FFFF00FF,4:FFFF00FF,5:FF00FFFF,6:FF00FFFF,7:FF00FFFF,8:FF00FFFF,9:FF00FFFF,10:FF00FFFF,11:FF00FFFF,12:FFFFFF00,13:FFFFFF00,14:FFFFFF00,15:FFFFFF00,16:FFFFFF00,17:FFFFFF00,18:FFFFFF00,19:FF0000FF,20:FF0000FF,21:FF0000FF,22:FF0000FF,23:FF0000FF,24:FFFF00FF,25:FFFF00FF,26:FFFF00FF,27:FFFF00FF,28:FFFF00FF,29:FFFF0000,30:FFFF0000,31:FFFF0000,32:FFFF0000,33:FFFF0000,34:FF00FFFF,35:FF00FFFF,36:FF00FFFF,37:FF00FFFF,38:FF00FFFF";
SparseArray<String> modifiers = new SparseArray<String>();
modifiers.put(ModifiersTG.T_UNIQUE_DESIGNATION_1, T);
modifiers.put(ModifiersTG.T1_UNIQUE_DESIGNATION_2, T1);
modifiers.put(ModifiersTG.H_ADDITIONAL_INFO_1, H);
modifiers.put(ModifiersTG.H1_ADDITIONAL_INFO_2, H1);
modifiers.put(ModifiersTG.H1_ADDITIONAL_INFO_2, "H2");
modifiers.put(ModifiersTG.W_DTG_1, W);
modifiers.put(ModifiersTG.W1_DTG_2, W1);
//diagnostic
if(!symbolFillIds.isEmpty())
modifiers.put(ModifiersTG.SYMBOL_FILL_IDS, symbolFillIds);
SparseArray<String> attributes = new SparseArray<String>();
String rectStr = getRectString(0, 0);
String controlPtsStr = controlPointsToString(latLongs);
String altitudeMode = "";
boolean renderAirControls=isAirspace(defaultText);
//Mil-Std-2525 symbols
if (!renderAirControls) {
modifiers.put(ModifiersTG.T_UNIQUE_DESIGNATION_1, T);
modifiers.put(ModifiersTG.T1_UNIQUE_DESIGNATION_2, T1);
modifiers.put(ModifiersTG.AM_DISTANCE, AM);
modifiers.put(ModifiersTG.AN_AZIMUTH, AN);
modifiers.put(ModifiersTG.X_ALTITUDE_DEPTH, X);
modifiers.put(ModifiersTG.H1_ADDITIONAL_INFO_2, H1);
modifiers.put(ModifiersTG.W_DTG_1, W);
modifiers.put(ModifiersTG.W1_DTG_2, W1);
attributes.put(MilStdAttributes.FillColor, fillcolor);
attributes.put(MilStdAttributes.LineColor, linecolor);
attributes.put(MilStdAttributes.TextColor, textcolor);
attributes.put(MilStdAttributes.SymbologyStandard, Integer.toString(rev));
if (JavaRendererUtilities.is3dSymbol(defaultText, modifiers)) {
attributes.put(MilStdAttributes.FillColor, "FF00FF00");
}
SECWebRenderer sec = new SECWebRenderer();
int format=0;
//format=2;
String strRender="";
boolean twod=false;
//twod=true;
if(!twod)
{
strRender = sec.RenderSymbol("id", "name", "description", defaultText, controlPtsStr, altitudeMode, scale, rectStr, modifiers, attributes, format, rev);
}
else
strRender = sec.RenderSymbol2D("id", "name", "description", defaultText, controlPtsStr, (int)displayWidth, (int)displayHeight, rectStr, modifiers, attributes, format, rev);
//WriteKMLFile(strRender);
strResult = strRender;
}
else //Airspaces
{
if(AM.isEmpty())
{
AM="6000,10000,4000,4000,5000,2000";
AN="15,345,60,100,30,150";
X="200,500,300,600,100,400";
}
String[]am=AM.split(",");
String[]an=AN.split(",");
String[]x=X.split(",");
//{attributes:[{radius1:5000, radius2:7500, minalt:0, maxalt:4000, leftAzimuth:180, rightAzimuth:270},{radius1:6000, radius2:8000, minalt:0, maxalt:8000, leftAzimuth:160, rightAzimuth:230}]}
String str="";
try
{
//attributesJSON=new JSONObject();
for(j=0;j<am.length/2;j++)
{
str+="{radius1:"+am[2*j]+", "+"radius2:"+am[2*j+1]+", "+"minalt:"+x[2*j]+", "+"maxalt:"+x[2*j+1]+", "+"leftAzimuth:"+an[2*j]+", "+"rightAzimuth:"+an[2*j+1]+"}";
if(j<am.length/2-1)
str+=",";
}
}
catch(Exception e)
{
}
str="["+str+"]";
String acAttributes="{attributes:"+str+"}";
//must add altitudes to control pts
controlPtsStr = addAltitudes(controlPtsStr);
//String acAttributes = "{attributes:[{radius1:5000, radius2:7500, minalt:0, maxalt:100, leftAzimuth:20, rightAzimuth:180}]}";
//acAttributes = "{attributes:[{radius1:5000, radius2:7500, minalt:0, maxalt:100, leftAzimuth:120, rightAzimuth:180},{radius1:6000, radius2:8000, minalt:0, maxalt:70, leftAzimuth:160, rightAzimuth:230}]}";
//acAttributes = "{attributes:[{radius1:5000, radius2:7500, minalt:0, maxalt:4000, leftAzimuth:180, rightAzimuth:270},{radius1:6000, radius2:8000, minalt:0, maxalt:8000, leftAzimuth:160, rightAzimuth:230}]}";
String strCake = "";
SECWebRenderer sec = new SECWebRenderer();
//acAttributes=str;
strCake = sec.Render3dSymbol("name", "id", defaultText, "", "ff0000ff", "800000ff", "", controlPtsStr, acAttributes);
strResult = strCake;
ArrayList<String> coordStrings = new ArrayList();
try {
//parseKML.parseLLTR(strRender,coordStrings);
parseKML.parseLLTR(strCake, coordStrings);
} catch (Exception exc) {
}
if (coordStrings.size() > 0) {
drawSECRendererCoords3d(g2d, coordStrings, converter);
}
}
return strResult;
}
private static Point2D ExtendAlongLineDouble2(POINT2 pt1, POINT2 pt2, double dist) {
double x = 0, y = 0;
try {
double dOriginalDistance = CalcDistanceDouble(pt1, pt2);
if (dOriginalDistance == 0 || dist == 0) {
return new Point2D.Double(pt1.x, pt1.y);
}
x = (dist / dOriginalDistance * (pt2.x - pt1.x) + pt1.x);
y = (dist / dOriginalDistance * (pt2.y - pt1.y) + pt1.y);
} catch (Exception exc) {
ErrorLogger.LogException("utility", "ExtendAlongLineDouble2",
new RendererException("Failed inside ExtendAlongLineDouble2", exc));
}
//return pt3;
return new Point2D.Double(x, y);
}
/**
* This function was added as a performance enhancement. The renderer normally creates a new array of length 2 points
* for each dash in the polyline. If the client sets useDashArray then the renderer skips this step so the client must compute
* the dashes based on the stroke dash array in the shape object.
*
* @param symbolId
* @param polylines
* @param shape
*/
private static void drawDashedPolylines(String symbolId, ArrayList<ArrayList<Point2D>> polylines, ShapeInfo shape, Canvas g2d) {
try {
//android.graphics.Point aPt = new android.graphics.Point();
int rev = RendererSettings.getInstance().getSymbologyStandard();
int linetype = GetLinetype(symbolId, rev);
Paint paint = new Paint();
paint.setColor(shape.getLineColor().toARGB());
paint.setStyle(Paint.Style.STROKE);
BasicStroke stroke=(BasicStroke)shape.getStroke();
paint.setStrokeWidth(stroke.getLineWidth());
if (shape.getLineColor() == null) {
return;
}
float[] dash = stroke.getDashArray();
float lineThickness = stroke.getLineWidth();
if (dash == null || dash.length < 2) {
return;
}
if (dash.length == 8)//dotted line
{
dash = new float[2];
dash[0] = 2f;
dash[1] = 2f;
stroke = new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER, 2f, dash, 0f);
shape.setStroke(stroke);
}
if (dash.length == 4) {
if (dash[0] == lineThickness * 2f && dash[1] == lineThickness * 2f && dash[2] == lineThickness * 2f && dash[3] == lineThickness * 2f)//this really looks awful in GE
{
dash = new float[2];
dash[0] = lineThickness;
dash[1] = lineThickness;
}
}
int j = 0, k = 0, i = 0, l = 0, n = 0;
ArrayList<Point2D> polyline = null;
Point2D pt2d0 = null, pt2d1 = null, pt2d2 = null, pt2d3 = null;
POINT2 pt0 = null, pt1 = null;
double dist = 0;
double patternLength = 0;
int numSegments = 0;
int t = dash.length;
for (j = 0; j < t; j++) {
patternLength += dash[j];
}
//sum is the end length of eash dash element
float sum[] = new float[dash.length];
double remainder = 0;
t = sum.length;
for (j = 0; j < t; j++) {
for (k = 0; k <= j; k++) {
sum[j] += dash[k];
}
}
boolean noShortSegments = false;
switch (linetype) {
case TacticalLines.LINTGT:
case TacticalLines.LINTGTS:
case TacticalLines.FPF:
case TacticalLines.HWFENCE:
case TacticalLines.LWFENCE:
case TacticalLines.DOUBLEA:
case TacticalLines.DFENCE:
case TacticalLines.SFENCE:
case TacticalLines.UNSP:
noShortSegments = true;
break;
default:
break;
}
t = polylines.size();
for (j = 0; j < t; j++) {
polyline = polylines.get(j);
int u = polyline.size();
for (k = 0; k < u - 1; k++) {
pt2d0 = polyline.get(k);
pt2d1 = polyline.get(k + 1);
pt0 = new POINT2(pt2d0.getX(), pt2d0.getY());
pt1 = new POINT2(pt2d1.getX(), pt2d1.getY());
dist = lineutility.CalcDistanceDouble(pt0, pt1);
numSegments = (int) (dist / patternLength);
if (noShortSegments) {
if (dist < 25) {
numSegments = 1;
}
}
for (l = 0; l < numSegments; l++) {
int v = dash.length;
for (i = 0; i < v; i++) {
//latlngs.clear();
if (i % 2 == 0) {
if (i == 0) {
pt2d2 = ExtendAlongLineDouble2(pt0, pt1, l * patternLength);
} else {
pt2d2 = ExtendAlongLineDouble2(pt0, pt1, l * patternLength + sum[i - 1]);
}
pt2d3 = ExtendAlongLineDouble2(pt0, pt1, l * patternLength + sum[i]);
g2d.drawLine((float)pt2d2.getX(), (float)pt2d2.getY(), (float)pt2d3.getX(), (float)pt2d3.getY(), paint);
}
}
}//end l loop
//for the remainder split the difference
remainder = dist - numSegments * patternLength;
if (remainder > 0) {
pt2d2 = ExtendAlongLineDouble2(pt0, pt1, numSegments * patternLength + remainder / 2);
g2d.drawLine((float)pt2d1.getX(), (float)pt2d1.getY(), (float)pt2d2.getX(), (float)pt2d2.getY(), paint);
}
}//end k loop
}//end j loop
} catch (Exception exc) {
ErrorLogger.LogException("utility", "createDashedPolylines",
new RendererException("Failed inside createDashedPolylines", exc));
}
}
}