mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 08:37:25 -05:00
ant to gradle. Removes linux and windows application launch scripts and produces an executable jar with all resources included.
163 lines
5.0 KiB
Java
163 lines
5.0 KiB
Java
/*******************************************************************************
|
|
* sdrtrunk
|
|
* Copyright (C) 2014-2017 Dennis Sheirer
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
*
|
|
******************************************************************************/
|
|
package io.github.dsheirer.map;
|
|
|
|
import io.github.dsheirer.icon.IconManager;
|
|
import org.jdesktop.swingx.JXMapViewer;
|
|
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.awt.geom.Point2D;
|
|
import java.util.Set;
|
|
|
|
public class PlottableEntityRenderer
|
|
{
|
|
private IconManager mIconManager;
|
|
|
|
public PlottableEntityRenderer(IconManager iconManager)
|
|
{
|
|
mIconManager = iconManager;
|
|
}
|
|
|
|
public void paintPlottableEntity(Graphics2D g, JXMapViewer viewer, PlottableEntity entity, boolean antiAliasing)
|
|
{
|
|
Graphics2D graphics = (Graphics2D) g.create();
|
|
|
|
if(antiAliasing)
|
|
{
|
|
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
|
|
RenderingHints.VALUE_ANTIALIAS_ON);
|
|
}
|
|
|
|
/**
|
|
* Use the entity's preferred color for lines and labels
|
|
*/
|
|
graphics.setColor(entity.getColor());
|
|
|
|
/**
|
|
* Convert the lat/long geoposition to an x/y point on the viewer
|
|
*/
|
|
Point2D point = viewer.getTileFactory().geoToPixel(
|
|
entity.getCurrentGeoPosition(), viewer.getZoom());
|
|
|
|
/**
|
|
* Paint the route first, so the icon and label overlay it
|
|
*/
|
|
paintRoute(graphics, viewer, entity);
|
|
|
|
/**
|
|
* Paint the icon at the current location
|
|
*/
|
|
ImageIcon icon = getIcon(entity);
|
|
|
|
paintIcon(graphics, point, icon);
|
|
|
|
/**
|
|
* Paint the label offset to the right of the icon
|
|
*/
|
|
paintLabel(graphics, point, entity, (int) (icon.getIconWidth() / 2), 0);
|
|
|
|
/**
|
|
* Cleanup
|
|
*/
|
|
graphics.dispose();
|
|
}
|
|
|
|
private ImageIcon getIcon(PlottableEntity entity)
|
|
{
|
|
return mIconManager.getIcon(entity.getMapIconName(), IconManager.DEFAULT_ICON_SIZE);
|
|
}
|
|
|
|
private void paintIcon(Graphics2D graphics,
|
|
Point2D point,
|
|
ImageIcon icon)
|
|
{
|
|
graphics.drawImage(icon.getImage(),
|
|
(int) point.getX() - (icon.getIconWidth() / 2),
|
|
(int) point.getY() - (icon.getIconHeight() / 2),
|
|
null);
|
|
|
|
}
|
|
|
|
private void paintLabel(Graphics2D graphics,
|
|
Point2D point,
|
|
PlottableEntity entity,
|
|
int xOffset,
|
|
int yOffset)
|
|
{
|
|
graphics.drawString(entity.getLabel(),
|
|
(int) point.getX() + xOffset,
|
|
(int) point.getY() + yOffset);
|
|
}
|
|
|
|
/**
|
|
* Paints a two-tone route from the entity's list of plottables (locations).
|
|
* using black as a wider background route, and the entity's preferred color
|
|
* as a narrower foreground route.
|
|
*/
|
|
private void paintRoute(Graphics2D graphics,
|
|
JXMapViewer viewer,
|
|
PlottableEntity entity)
|
|
{
|
|
Set<Plottable> plottables = entity.getPlottables();
|
|
|
|
if(plottables.size() > 1)
|
|
{
|
|
// Draw the route with a black background line
|
|
graphics.setColor(Color.BLACK);
|
|
graphics.setStroke(new BasicStroke(3));
|
|
|
|
drawRoute(plottables, graphics, viewer);
|
|
|
|
// Draw the route again, in the entity's preferred color
|
|
graphics.setColor(entity.getColor());
|
|
graphics.setStroke(new BasicStroke(1));
|
|
|
|
drawRoute(plottables, graphics, viewer);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Draws a route from a list of plottables
|
|
*/
|
|
private void drawRoute(Set<Plottable> plottables,
|
|
Graphics2D g,
|
|
JXMapViewer viewer)
|
|
{
|
|
Point2D lastPoint = null;
|
|
|
|
for(Plottable plottable : plottables)
|
|
{
|
|
// convert geo-coordinate to world bitmap pixel
|
|
Point2D currentPoint = viewer.getTileFactory()
|
|
.geoToPixel(plottable.getGeoPosition(), viewer.getZoom());
|
|
|
|
if(lastPoint != null)
|
|
{
|
|
g.drawLine((int) lastPoint.getX(), (int) lastPoint.getY(),
|
|
(int) currentPoint.getX(), (int) currentPoint.getY());
|
|
}
|
|
|
|
lastPoint = currentPoint;
|
|
}
|
|
}
|
|
}
|
|
|
|
|