scalebarhint.java

来自「world wind java sdk 源码」· Java 代码 · 共 115 行

JAVA
115
字号
/*
Copyright (C) 2001, 2008 United States Government
as represented by the Administrator of the
National Aeronautics and Space Administration.
All Rights Reserved.
*/
package gov.nasa.worldwind.applications.sar;

import gov.nasa.worldwind.WorldWindow;
import gov.nasa.worldwind.event.SelectEvent;
import gov.nasa.worldwind.event.SelectListener;
import gov.nasa.worldwind.geom.Position;
import gov.nasa.worldwind.layers.Layer;
import gov.nasa.worldwind.layers.RenderableLayer;
import gov.nasa.worldwind.layers.ScalebarLayer;
import gov.nasa.worldwind.render.DrawContext;
import gov.nasa.worldwind.render.Material;
import gov.nasa.worldwind.render.Renderable;
import gov.nasa.worldwind.render.markers.*;

import java.awt.*;
import java.util.ArrayList;

/**
 * Handles marker indicator for the scalebar.
 *
 * @author Patrick Murris
 * @version $Id: ScalebarHint.java 8192 2008-12-12 11:40:48Z patrickmurris $
 */
public class ScalebarHint
{
    private WorldWindow wwd;
    private RenderableLayer layer = new RenderableLayer();
    private MarkerRenderer markerRenderer = new MarkerRenderer();
    private RenderableMarker marker;
    MarkerAttributes markerAttributes;
    private boolean enabled = true;

    public ScalebarHint()
    {
        this.layer.setName("Scalebar reference");
        this.layer.setEnabled(false);
        this.markerAttributes = new BasicMarkerAttributes(new Material(Color.YELLOW),
                        BasicMarkerShape.CONE, 1, 10, 5);
        this.marker = new RenderableMarker(Position.ZERO, this.markerAttributes);
        this.layer.addRenderable(this.marker);
    }

    public void setWwd(WorldWindow worldWindow)
    {
        this.wwd = worldWindow;
        // Enable picking on the scalebar layer
        for (Layer l : this.wwd.getModel().getLayers())
            if (l instanceof ScalebarLayer)
                l.setPickEnabled(true);
        // Add our layer
        this.wwd.getModel().getLayers().add(this.layer);
        
        // Add scalebar select listener to handle rollover
        this.wwd.addSelectListener(new SelectListener()
        {
            public void selected(SelectEvent event)
            {
                if (!enabled || event.getTopObject() == null || !(event.getTopObject() instanceof ScalebarLayer))
                {
                    layer.setEnabled(false);
                    return;
                }

                if (!event.getEventAction().equals(SelectEvent.ROLLOVER))
                    return;

                marker.setPosition(event.getTopPickedObject().getPosition());
                layer.setEnabled(true);
                wwd.redraw();
            }
        });
    }

    public MarkerAttributes getMarkerAttributes()
    {
        return this.markerAttributes;
    }

    public boolean isEnabled()
    {
        return this.enabled;
    }

    public void setEnabled(boolean state)
    {
        this.enabled = state;
    }

    private class RenderableMarker extends BasicMarker implements Renderable
    {
        private ArrayList<Marker> markerList;

        public RenderableMarker(Position position, MarkerAttributes attrs)
        {
            super(position, attrs);
        }

        public void render(DrawContext dc)
        {
            if (this.markerList == null)
            {
                this.markerList = new ArrayList<Marker>();
                this.markerList.add(this);
            }
            markerRenderer.render(dc, this.markerList);
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?