/*
* Licensed Materials - Property of Rogue Wave Software, Inc.
* © Copyright Rogue Wave Software, Inc. 2014, 2017
* © Copyright IBM Corp. 2009, 2014
* © Copyright ILOG 1996, 2009
* All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* The Software and Documentation were developed at private expense and
* are "Commercial Items" as that term is defined at 48 CFR 2.101,
* consisting of "Commercial Computer Software" and
* "Commercial Computer Software Documentation", as such terms are
* used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
* as applicable.
*/
import java.awt.Color;
import ilog.views.IlvGraphic;
import ilog.views.IlvPoint;
import ilog.views.graphic.IlvGraphicSet;
import ilog.views.maps.IlvCoordinate;
import ilog.views.maps.IlvMapFeature;
import ilog.views.maps.IlvMapGeometry;
import ilog.views.maps.IlvMapRenderException;
import ilog.views.maps.geometry.IlvMapCurve;
import ilog.views.maps.geometry.IlvMapLineString;
import ilog.views.maps.geometry.IlvMapMultiCurve;
import ilog.views.maps.projection.IlvProjectionException;
import ilog.views.maps.projection.IlvProjectionUtil;
import ilog.views.maps.rendering.IlvDefaultCurveRenderer;
import ilog.views.maps.srs.coordtrans.IlvCoordinateTransformation;
import ilog.views.maps.srs.coordtrans.IlvCoordinateTransformationException;
/**
* A renderer that takes curve geometries and transforms them into road or
* railroad graphical objects.
*/
public class IlvRailroadRenderer extends IlvDefaultCurveRenderer {
IlvRailroadAttributes _attributes;
// Dummy colors just to show how to customize indexed properties.
Color[] _dummy = new Color[3]; // here we define an array of 3 colors, but you
// can create
// and unlimited array and handle the size and the allocation of the array in
// the get/set
// methods.
public IlvRailroadRenderer() {
super();
}
Override
public IlvGraphic makeGraphic(IlvMapFeature feature, IlvCoordinateTransformation tr)
throws IlvMapRenderException, IlvCoordinateTransformationException {
IlvMapGeometry geometry = feature.getGeometry();
if (geometry == null)
throw new IllegalArgumentException("No geometry");
if (geometry instanceof IlvMapMultiCurve)
return createGraphicFromMultiCurve(feature, tr);
if (geometry instanceof IlvMapCurve)
return createGraphicFromCurve(feature, tr);
throw new IlvMapRenderException("Not an IlvMapCurve geometry");
}
IlvGraphic createGraphicFromMultiCurve(IlvMapFeature feature, IlvCoordinateTransformation tr)
throws IlvMapRenderException, IlvCoordinateTransformationException {
IlvMapMultiCurve multiCurve = (IlvMapMultiCurve) feature.getGeometry();
int count = multiCurve.getCardinal();
if (count == 0)
throw new IllegalArgumentException("MultiCurve with no curve");
if (count == 1) {
feature.setGeometry(multiCurve.getCurve(0));
IlvGraphic g = makeGraphic(feature, tr);
feature.setGeometry(multiCurve);
return g;
}
IlvGraphicSet result = new IlvGraphicSet();
for (int i = 0; i < count; i++) {
IlvMapCurve curve = multiCurve.getCurve(i);
feature.setGeometry(curve);
IlvGraphic g = makeGraphic(feature, tr);
if (g != null)
result.addObject(g, false);
}
feature.setGeometry(multiCurve);
return result;
}
IlvGraphic createGraphicFromCurve(IlvMapFeature feature, IlvCoordinateTransformation tr)
throws IlvMapRenderException, IlvProjectionException, IlvCoordinateTransformationException {
IlvMapGeometry geometry = feature.getGeometry();
IlvMapLineString ls = (IlvMapLineString) geometry;
int count = ls.getPointCount();
if (count == 0)
return null;
IlvPoint[] p = makePoints(tr, ls, count);
IlvRailroadAttributes ra = getAttributes();
IlvRailroad g = new IlvRailroad(p, false, ra);
return g;
}
IlvPoint[] makePoints(IlvCoordinateTransformation tr, IlvMapLineString ls, int count)
throws IlvCoordinateTransformationException {
IlvPoint p[] = new IlvPoint[count];
for (int i = 0; i < count; i++) {
p[i] = new IlvPoint();
IlvCoordinate c = ls.getPoint(i);
IlvProjectionUtil.ToViews(tr, c, p[i]);
}
return p;
}
public IlvRailroadAttributes getAttributes() {
if (_attributes == null)
_attributes = new IlvRailroadAttributes();
return _attributes;
}
public void setAttributes(IlvRailroadAttributes a) {
_attributes = a;
}
// The "dummy" methods below are here just to show how to use
// indexed properties with CSS.
public Color getDummy(int i) {
return _dummy[i];
}
public Color[] getDummy() {
return _dummy;
}
public void setDummy(Color[] val) {
_dummy = val;
}
public void setDummy(int i, Color val) {
_dummy[i] = val;
}
}