Package com.bbn.openmap.layer.specialist

Source Code of com.bbn.openmap.layer.specialist.JPoly

// **********************************************************************
//
// <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/corba/com/bbn/openmap/layer/specialist/JPoly.java,v
// $
// $RCSfile: JPoly.java,v $
// $Revision: 1.2.2.1 $
// $Date: 2004/10/14 18:26:31 $
// $Author: dietrick $
//
// **********************************************************************

package com.bbn.openmap.layer.specialist;

import com.bbn.openmap.CSpecialist.LLPoint;
import com.bbn.openmap.CSpecialist.PolyPackage.*;
import com.bbn.openmap.omGraphics.*;
import com.bbn.openmap.proj.ProjMath;
import java.io.Serializable;

public class JPoly extends OMPoly implements Serializable, JObjectHolder {

    protected transient com.bbn.openmap.CSpecialist.EComp object = null;

    /** Constructor. */
    public JPoly(EPoly epoly) {
        super();
        JGraphic.fillOMGraphicParams(this, epoly.egraphic);

        java.awt.Color fc = JGraphic.getColor(epoly.egraphic.fillColor);
        setIsPolygon(fc != null);

        units = OMGraphic.RADIANS;
        lat = ProjMath.degToRad(epoly.ll1.lat);
        lon = ProjMath.degToRad(epoly.ll1.lon);

        int npts = epoly.xypoints.length;
        if (npts > 0) {
            xs = new int[npts];
            ys = new int[npts];

            for (int i = 0; i < npts; i++) {
                xs[i] = epoly.xypoints[i].x;
                ys[i] = epoly.xypoints[i].y;
            }
        }

        npts = epoly.llpoints.length;
        if (npts > 0) {
            int i, j;
            rawllpts = (isPolygon) ? new float[npts * 2 + 2]//*2 for
                                                            // pairs
                                                            // +2 for
                                                            // connect
                    : new float[npts * 2];//*2 for pairs

            for (i = 0, j = 0; i < npts; i++, j += 2) {
                rawllpts[j] = ProjMath.degToRad(epoly.llpoints[i].lat);
                rawllpts[j + 1] = ProjMath.degToRad(epoly.llpoints[i].lon);
            }
            if (isPolygon) {//connect the polygon
                rawllpts[j] = rawllpts[0];
                rawllpts[j + 1] = rawllpts[1];
            }
        }

        coordMode = getCoordMode(epoly.cMode);
    }

    public static int getCoordMode(CoordMode cMode) {

        int cm;
        switch (cMode.value()) {
        case CoordMode._CModePrevious:
            cm = COORDMODE_PREVIOUS;
            break;
        default:
            cm = COORDMODE_ORIGIN;
            break;
        }
        return cm;

    }

    public void setObject(com.bbn.openmap.CSpecialist.EComp aObject) {
        object = aObject;
    }

    public com.bbn.openmap.CSpecialist.EComp getObject() {
        return object;
    }

    public void update(
                       com.bbn.openmap.CSpecialist.GraphicPackage.GF_update update) {
        JGraphic.update((JObjectHolder) this, update);
    }

    /**
     * update() - takes a PolyPackage.PF_update and changes the fields
     * that need to be. Called as a result of a gesture.
     */
    public void update(com.bbn.openmap.CSpecialist.PolyPackage.PF_update update) {
        int npts;

        switch (update.discriminator().value()) {

        // set fixed point
        case com.bbn.openmap.CSpecialist.PolyPackage.settableFields._PF_ll1:
            LLPoint ll = update.ll1();
            lat = ll.lat;
            lon = ll.lon;
            setNeedToRegenerate(true);
            break;

        // set coordinate mode

        case com.bbn.openmap.CSpecialist.PolyPackage.settableFields._PF_cMode:
            int newMode = getCoordMode(update.cMode());
            if (newMode != coordMode) {
                coordMode = newMode;
                setNeedToRegenerate(true);
            }
            break;

        // set xypoints
        case com.bbn.openmap.CSpecialist.PolyPackage.settableFields._PF_xypoints:

            com.bbn.openmap.CSpecialist.XYPoint[] xypoints = update.xypoints();
            npts = xypoints.length;
            if (npts > 0) {
                xs = new int[npts];
                ys = new int[npts];

                for (int i = 0; i < npts; i++) {
                    xs[i] = xypoints[i].x;
                    ys[i] = xypoints[i].y;
                }
            }

            if (renderType != RENDERTYPE_LATLON)
                setNeedToRegenerate(true);
            break;

        // set llpoints
        case com.bbn.openmap.CSpecialist.PolyPackage.settableFields._PF_llpoints:
            com.bbn.openmap.CSpecialist.LLPoint[] llpoints = update.llpoints();
            npts = llpoints.length;
            if (npts > 0) {
                rawllpts = new float[npts * 2];

                for (int i = 0; i < npts; i += 2) {
                    rawllpts[i] = llpoints[i].lat;
                    rawllpts[i + 1] = llpoints[i].lon;
                }
            }

            if (renderType == RENDERTYPE_LATLON)
                setNeedToRegenerate(true);
            break;

        default:
            System.err.println("JPoly.update: invalid poly update");
            break;
        }
    }
}
TOP

Related Classes of com.bbn.openmap.layer.specialist.JPoly

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.