Package com.bbn.openmap.layer.location

Source Code of com.bbn.openmap.layer.location.Link

// **********************************************************************
//
// <copyright>
//
//  BBN Technologies
//  10 Moulton Street
//  Cambridge, MA 02138
//  (617) 873-8000
//
//  Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/layer/location/Link.java,v $
// $RCSfile: Link.java,v $
// $Revision: 1.2.2.2 $
// $Date: 2005/08/09 18:19:00 $
// $Author: dietrick $
//
// **********************************************************************

package com.bbn.openmap.layer.location;

/*  Java Core  */
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Paint;
import java.awt.Stroke;

import com.bbn.openmap.omGraphics.OMGraphic;
import com.bbn.openmap.omGraphics.OMLine;
import com.bbn.openmap.util.Debug;

/**
* A Link is a relationship between Locations, represented as a line
* between them. If you want to draw the endpoints, use a
* LocationHandler for them.
* <P>
*
* Although this class extends from Location, it doesn't handle
* displaying a name for the link that well. The name will appear as
* the first node's marker name, although it should declutter if
* needed.
*/
public class Link extends Location {

    /*
     * The other endpoints of the link, in decimal degrees. The first
     * endpoints are contained in the Location superclass.
     */
    /** The lat of point 2. */
    public float lat2 = 0.0f;
    /** The lon of point 2. */
    public float lon2 = 0.0f;
    /** The x of point 2. */
    public int x2 = 0;
    /** The y of point 2. */
    public int y2 = 0;

    // /** The x offset of point 2, never used. */
    // public int xOffset2 = 0;
    // /** The y offset of point 2, never used. */
    // public int yOffset2 = 0;

    /** the default color is black */
    public static Color DEFAULT_COLOR = Color.black;
    /** the default dash style - not dashed */
    public static boolean DEFAULT_DASHED = false;
    /** the default line type - straight */
    public static int DEFAULT_LINETYPE = OMGraphic.LINETYPE_STRAIGHT;
    /** the default line thickness - 1 */
    public static float DEFAULT_THICKNESS = 1.0f;

    /**
     * A plain contructor if you are planning on setting everything
     * yourself.
     */
    public Link() {}

    /**
     * Construct a Link with the given attributes
     *
     * @param lat1 latitude of start-point
     * @param lon1 longitude of start-point
     * @param lat2 latitude of end-point
     * @param lon2 longitude of endpoint
     * @param details A string that gives information about this link
     * @param paint the link's displayed edge java.awt.Paint (Color).
     * @param dashed Is it a dashed line?
     * @param thickness The line thickness.
     * @param linetype LINETYPE_STRAIGHT, LINETYPE_GREATCIRCLE,
     *        LINETYPE_RHUMB
     */
    public Link(float lat1, float lon1, float lat2, float lon2, String details,
            Paint paint, boolean dashed, float thickness, int linetype) {

        if (Debug.debugging("location")) {
            Debug.output("Link(" + lat1 + ", " + lon1 + ", " + lat2 + ", "
                    + lon2 + ", " + details + ", " + paint + ", " + dashed
                    + ", " + thickness + ", " + linetype + ")");
        }

        this.lat = lat1;
        this.lon = lon1;
        this.lat2 = lat2;
        this.lon2 = lon2;

        if (details != null) {
            this.details = details;
        } else {
            this.details = "";
        }

        OMLine link = new OMLine(lat1, lon1, lat2, lon2, linetype);
        setLinkDrawingParameters(link, paint, thickness, dashed);
        setLocationMarker(link);
    }

    /**
     * Construct a Link with the given attribute
     *
     * @param x1 Starting x point of Link
     * @param y1 Starting y point of Link
     * @param x2 End x point of Link
     * @param y2 End y point of Link
     * @param details A string that gives information about this link
     * @param paint the link's displayed edge java.awt.Paint (Color).
     * @param dashed Is it a dashed line?
     * @param thickness The line thickness.
     */
    public Link(int x1, int y1, int x2, int y2, String details, Paint paint,
            boolean dashed, float thickness) {

        if (Debug.debugging("location")) {
            Debug.output("Link(" + x1 + ", " + y1 + ", " + x2 + ", " + y2 + ")");
        }

        this.x = x1;
        this.y = y1;
        this.x2 = x2;
        this.y2 = y2;

        if (details != null) {
            this.details = details;
        } else {
            this.details = "";
        }

        OMLine link = new OMLine(x1, y1, x2, y2);
        setLinkDrawingParameters(link, paint, thickness, dashed);
        setLocationMarker(link);
    }

    /**
     * Set the drawing attributes of the link
     *
     * @param link the line used for the link
     * @param paint the line color
     * @param thickness the thickness of the line
     * @param dashed true if the line should be dashed
     */
    public void setLinkDrawingParameters(OMLine link, Paint paint,
                                         float thickness, boolean dashed) {
        Stroke stroke;
        if (dashed) {
            // create a basic default dash
            float[] dash = { 8.0f, 8.0f };
            stroke = new BasicStroke(thickness, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f);
        } else {
            stroke = new BasicStroke(thickness);
        }

        link.setStroke(stroke);
        link.setLinePaint(paint);
    }

    /**
     * Set the location for the link
     *
     * @param lat1 the latitude of the first location
     * @param lon1 the longitude of the first location
     * @param lat2 the latitude of the second location
     * @param lon2 the longitude of the second location
     */
    public void setLocation(float lat1, float lon1, float lat2, float lon2) {

        this.lat = lat1;
        this.lon = lon1;
        this.lat2 = lat2;
        this.lon2 = lon2;

        OMLine line = (OMLine) getLocationMarker();
        float[] locs = { lat1, lon1, lat2, lon2 };
        line.setLL(locs);
    }

    /**
     * Set new coordinates for this link.
     *
     * @param x1 the x coordinate of the first location
     * @param y1 the y coordinate of the first location
     * @param x2 the x coordinate of the second location
     * @param y2 the y coordinate of the second location
     */
    public void setLocation(int x1, int y1, int x2, int y2) {

        this.x = x1;
        this.y = y1;
        this.x2 = x2;
        this.y2 = y2;

        int xy[] = new int[4];
        xy[0] = this.x = x1;
        xy[1] = this.y = y1;
        xy[2] = this.x2 = x2;
        xy[3] = this.y2 = y2;
        OMLine link = getLink();
        link.setPts(xy);
        link.setRenderType(RENDERTYPE_XY);
    }

    /** Does nothing - marker handled in setLocation methods. */
    public void setGraphicLocations(float latitude, float longitude) {}

    /** Does nothing - marker handled in setLocation methods. */
    public void setGraphicLocations(int x, int y) {}

    /** Does nothing - marker handled in setLocation methods. */
    public void setGraphicLocations(float latitude, float longitude,
                                    int offsetX, int offsetY) {}

    public void setLinkColor(Paint linkPaint) {
        // location is actually the link graphic. getLink() does the
        // proper casting.
        if (location != null) {
            getLink().setLinePaint(linkPaint);
        }
    }

    public void setShowLink(boolean showLinks) {
        showLocation = showLinks;
    }

    public boolean isShowLink() {
        return showLocation;
    }

    public OMLine getLink() {
        return (OMLine) getLocationMarker();
    }
}
TOP

Related Classes of com.bbn.openmap.layer.location.Link

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.