All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gov.nasa.worldwind.symbology.milstd2525.graphics.DefaultOffsets Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2012 United States Government as represented by the Administrator of the
 * National Aeronautics and Space Administration.
 * All Rights Reserved.
 */

package gov.nasa.worldwind.symbology.milstd2525.graphics;

import gov.nasa.worldwind.render.Offset;

import java.util.*;

import static gov.nasa.worldwind.symbology.milstd2525.graphics.TacGrpSidc.*;

/**
 * Object to provide default offsets for MIL-STD-2525C tactical point graphics. The offset is used to align a point on
 * the graphic with the graphic's geographic position. This class automatically populates the map with values
 * appropriate for the point graphic images supplied by World Wind.
 *
 * @author pabercrombie
 * @version $Id: DefaultOffsets.java 542 2012-04-24 19:08:12Z pabercrombie $
 * @see gov.nasa.worldwind.symbology.AbstractTacticalSymbol#setOffset(gov.nasa.worldwind.render.Offset)
 */
public class DefaultOffsets
{
    /** Offset to align the center of the graphic with the geographic position. */
    protected static Offset DEFAULT_OFFSET = Offset.CENTER;

    /** Offset to align a point 25% up from the bottom edge with the geographic position. */
    public static final Offset OFFSET_BOTTOM_QUARTER = Offset.fromFraction(0.5, 0.25);

    /** Offset for the Drop Point graphic (2.X.2.1.1.3.2). */
    public static final Offset OFFSET_C2GM_GNL_PNT_WPN_DRPPNT = Offset.fromFraction(0.5, 0.17);

    /** Offset for the Antitank Mine with Anti-handling Device graphic (2.X.3.1.5.3). */
    public static final Offset OFFSET_MOBSU_OBST_MNE_ATMAHD = Offset.fromFraction(0.5, 0.75);
    /** Offset for the Antipersonnel (AP) Mines graphic (2.X.3.1.5.5). */
    public static final Offset OFFSET_MOBSU_OBST_MNE_APMNE = Offset.fromFraction(0.5, 0.35);
    /** Offset for the Wide Area Mines graphic (2.X.3.1.5.6). */
    public static final Offset OFFSET_MOBSU_OBST_MNE_WAMNE = Offset.fromFraction(0.5, 0.71);

    /** Offset for the Sea Mine-Like Hazard graphic (2.X.6.2.1). */
    public static final Offset OFFSET_OTH_HAZ_SML = Offset.fromFraction(0.5, 0.33);

    /** Map to store defaults. */
    protected Map offsets = new HashMap();

    /** Create the map and populate it with the default offsets. */
    public DefaultOffsets()
    {
        this.populate();
    }

    /**
     * Determine the default offset for a graphic.
     *
     * @param sidc Masked SIDC for a point graphic.
     *
     * @return Default offset for the specified graphic.
     */
    public Offset get(String sidc)
    {
        Offset offset = this.offsets.get(sidc);
        return offset != null ? offset : DEFAULT_OFFSET;
    }

    /** Populate the map with default offsets. */
    protected void populate()
    {
        // A bunch of graphics are anchored on the bottom edge
        this.putAll(Offset.BOTTOM_CENTER,
            C2GM_GNL_PNT_USW_UH2_BCON,
            C2GM_GNL_PNT_USW_UH2_LCON,
            C2GM_GNL_PNT_USW_UH2_SNK,
            C2GM_GNL_PNT_USW_SNBY,
            C2GM_GNL_PNT_USW_SNBY_BT,

            C2GM_GNL_PNT_REFPNT_PNTINR,
            C2GM_GNL_PNT_WPN_ENTPNT,
            C2GM_GNL_PNT_WPN_GRDZRO,
            C2GM_GNL_PNT_WPN_MSLPNT,

            C2GM_GNL_PNT_ACTPNT,
            C2GM_GNL_PNT_ACTPNT_CHKPNT,
            C2GM_GNL_PNT_ACTPNT_CONPNT,
            C2GM_GNL_PNT_ACTPNT_LNKUPT,
            C2GM_GNL_PNT_ACTPNT_PSSPNT,
            C2GM_GNL_PNT_ACTPNT_RAYPNT,
            C2GM_GNL_PNT_ACTPNT_RELPNT,
            C2GM_GNL_PNT_ACTPNT_STRPNT,
            C2GM_GNL_PNT_ACTPNT_AMNPNT,

            C2GM_AVN_PNT_DAPP,
            C2GM_OFF_PNT_PNTD,

            MOBSU_OBST_ATO_TDTSM_FIXPFD,
            MOBSU_OBST_ATO_TDTSM_MVB,
            MOBSU_OBST_ATO_TDTSM_MVBPFD,
            MOBSU_OBST_AVN_TWR_LOW,
            MOBSU_OBST_AVN_TWR_HIGH,
            MOBSU_OBSTBP_CSGSTE_ERP,

            MOBSU_CBRN_NDGZ,
            MOBSU_CBRN_FAOTP,
            MOBSU_CBRN_REEVNT_BIO,
            MOBSU_CBRN_REEVNT_CML,
            MOBSU_CBRN_DECONP_USP,
            MOBSU_CBRN_DECONP_ALTUSP,
            MOBSU_CBRN_DECONP_TRP,
            MOBSU_CBRN_DECONP_EQT,
            MOBSU_CBRN_DECONP_EQTTRP,
            MOBSU_CBRN_DECONP_OPDECN,
            MOBSU_CBRN_DECONP_TRGH,

            FSUPP_PNT_C2PNT_SCP,
            FSUPP_PNT_C2PNT_FP,
            FSUPP_PNT_C2PNT_RP,
            FSUPP_PNT_C2PNT_HP,
            FSUPP_PNT_C2PNT_LP,

            CSS_PNT_AEP,
            CSS_PNT_CBNP,
            CSS_PNT_CCP,
            CSS_PNT_CVP,
            CSS_PNT_DCP,
            CSS_PNT_EPWCP,
            CSS_PNT_LRP,
            CSS_PNT_MCP,
            CSS_PNT_RRRP,
            CSS_PNT_ROM,
            CSS_PNT_TCP,
            CSS_PNT_TTP,
            CSS_PNT_UMC,
            CSS_PNT_SPT_GNL,
            CSS_PNT_SPT_CLS1,
            CSS_PNT_SPT_CLS2,
            CSS_PNT_SPT_CLS3,
            CSS_PNT_SPT_CLS4,
            CSS_PNT_SPT_CLS5,
            CSS_PNT_SPT_CLS6,
            CSS_PNT_SPT_CLS7,
            CSS_PNT_SPT_CLS8,
            CSS_PNT_SPT_CLS9,
            CSS_PNT_SPT_CLS10,
            CSS_PNT_AP_ASP,
            CSS_PNT_AP_ATP,

            OTH_ER_DTHAC,
            OTH_ER_PIW,
            OTH_ER_DSTVES,

            OTH_SSUBSR_BTMRTN,
            OTH_SSUBSR_BTMRTN_INS,
            OTH_SSUBSR_BTMRTN_SBRSOO,
            OTH_SSUBSR_SA,

            EmsSidc.NATEVT_GEO_AVL,
            EmsSidc.NATEVT_GEO_LNDSLD,
            EmsSidc.NATEVT_GEO_SBSDNC,
            EmsSidc.NATEVT_GEO_VLCTHT,
            EmsSidc.NATEVT_HYDMET_DRGHT,
            EmsSidc.NATEVT_HYDMET_FLD,
            EmsSidc.NATEVT_HYDMET_INV,
            EmsSidc.NATEVT_HYDMET_TSNMI,
            EmsSidc.NATEVT_INFST_BIRD,
            EmsSidc.NATEVT_INFST_INSCT,
            EmsSidc.NATEVT_INFST_MICROB,
            EmsSidc.NATEVT_INFST_REPT,
            EmsSidc.NATEVT_INFST_RDNT
        );

        // Sonobouy and a few other graphics are anchored a point 25% up from the bottom edge.
        this.putAll(OFFSET_BOTTOM_QUARTER,
            C2GM_GNL_PNT_USW_SNBY,
            C2GM_GNL_PNT_USW_SNBY_PTNCTR,
            C2GM_GNL_PNT_USW_SNBY_DIFAR,
            C2GM_GNL_PNT_USW_SNBY_LOFAR,
            C2GM_GNL_PNT_USW_SNBY_CASS,
            C2GM_GNL_PNT_USW_SNBY_DICASS,
            C2GM_GNL_PNT_USW_SNBY_BT,
            C2GM_GNL_PNT_USW_SNBY_ANM,
            C2GM_GNL_PNT_USW_SNBY_VLAD,
            C2GM_GNL_PNT_USW_SNBY_ATAC,
            C2GM_GNL_PNT_USW_SNBY_RO,
            C2GM_GNL_PNT_USW_SNBY_KGP,
            C2GM_GNL_PNT_USW_SNBY_EXP,
            MOBSU_OBST_BBY,
            MOBSU_OBST_MNE_ATMDIR);

        // A handful of graphics have unique offsets
        this.offsets.put(C2GM_GNL_PNT_WPN_DRPPNT, OFFSET_C2GM_GNL_PNT_WPN_DRPPNT);
        this.offsets.put(MOBSU_OBST_MNE_ATMAHD, OFFSET_MOBSU_OBST_MNE_ATMAHD);
        this.offsets.put(MOBSU_OBST_MNE_APMNE, OFFSET_MOBSU_OBST_MNE_APMNE);
        this.offsets.put(MOBSU_OBST_MNE_WAMNE, OFFSET_MOBSU_OBST_MNE_WAMNE);
        this.offsets.put(OTH_HAZ_SML, OFFSET_OTH_HAZ_SML);
        this.offsets.put(OTH_SSUBSR_MARLFE, Offset.LEFT_CENTER);
    }

    /**
     * Map one value to many keys.
     *
     * @param value Value to add.
     * @param keys  Keys that map to the value.
     */
    protected void putAll(Offset value, String... keys)
    {
        for (String sidc : keys)
        {
            this.offsets.put(sidc, value);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy