Package gov.nasa.arc.mct.nontimeplot.view

Source Code of gov.nasa.arc.mct.nontimeplot.view.NonTimePlot

/*******************************************************************************
* Mission Control Technologies, Copyright (c) 2009-2012, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* The MCT platform is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
* MCT includes source code licensed under additional open source licenses. See
* the MCT Open Source Licenses file included with this distribution or the About
* MCT Licenses dialog available at runtime from the MCT Help menu for additional
* information.
*******************************************************************************/
package gov.nasa.arc.mct.nontimeplot.view;

import java.awt.Color;
import java.awt.Font;
import java.util.HashMap;
import java.util.Map;

import javax.swing.SpringLayout;

import plotter.xy.LinearXYAxis;
import plotter.xy.ScatterXYPlotLine;
import plotter.xy.SimpleXYDataset;
import plotter.xy.XYDimension;
import plotter.xy.XYGrid;
import plotter.xy.XYPlot;
import plotter.xy.XYPlotContents;
import plotter.xy.XYAxis;

public class NonTimePlot extends XYPlot {
  private static final long serialVersionUID = 7711105789250549245L;
 
  private static final int PLOT_MARGIN = 32;
 
  private NonTimeSyncPoints sync;
  private XYPlotContents contents = new XYPlotContents();
  private Map<String, SimpleXYDataset> dataSet = new HashMap<String, SimpleXYDataset>();
  private Map<String, ScatterXYPlotLine> plotLines = new HashMap<String, ScatterXYPlotLine>();
  private int maxPoints = 6000;
 
   
  public NonTimePlot() {
    setXBounds(-1.5, 1.5);
    setYBounds(-1.5, 1.5);
   
    setBackground(Color.DARK_GRAY.darker());
    contents.setBackground(Color.BLACK);
   
    add (getXAxis());
    add (getYAxis());

    sync = new NonTimeSyncPoints(getXAxis(), getYAxis());
    XYGrid grid = new XYGrid(getXAxis(), getYAxis());
    grid.setForeground(Color.WHITE);
    contents.add(grid);
    contents.add(sync);
   
    add (contents);   
   
    setupLayout();
  }
 
  public void setXBounds(double minimum, double maximum) {   
    XYAxis axis = getXAxis();
    if (axis == null) {
      axis = new LinearXYAxis(XYDimension.X);
      setXAxis(axis);
      colorize(axis);
    }
    axis.setStart(minimum);
    axis.setEnd(maximum);
  }

  public void setYBounds(double minimum, double maximum) {
    XYAxis axis = getYAxis();
    if (axis == null) {
      axis = new LinearXYAxis(XYDimension.Y);
      setYAxis(axis);
      colorize(axis);
    }
    axis.setStart(minimum);
    axis.setEnd(maximum);
  }
 
  public void addPoint (String key, double x, double y) {
    if (dataSet.containsKey(key)) {
      dataSet.get(key).add(x, y);
      int pointCount = dataSet.get(key).getPointCount();
      if (pointCount > maxPoints) dataSet.get(key).removeFirst(pointCount - maxPoints);
    }
  }
 
  /**
   * @param maxPoints the maxPoints to set
   */
  public void setMaxPoints(int maxPoints) {
    this.maxPoints = maxPoints;
  }

  public ScatterXYPlotLine addDataset (String key, Color c) {
    ScatterXYPlotLine plotLine = new ScatterXYPlotLine(getXAxis(), getYAxis());
    SimpleXYDataset data = new SimpleXYDataset(plotLine);
    plotLines.put(key, plotLine);
    dataSet.put(key, data);
    contents.add(plotLine);
    plotLine.setForeground(c);
    return plotLine;
 
 
  private Color getColor(String key) {
    return plotLines.get(key).getForeground();
  }
 
  private void colorize(XYAxis axis) {
    axis.setBackground(Color.DARK_GRAY.darker());
    axis.setForeground(Color.WHITE);
    axis.setTextMargin(12);   
    axis.setFont(Font.decode(Font.SANS_SERIF).deriveFont(10f));
  }

  private void setupLayout() {
    SpringLayout layout = new SpringLayout();
    setLayout(layout);
   
    layout.putConstraint(SpringLayout.WEST, getXAxis(), PLOT_MARGIN*2, SpringLayout.WEST, this);
    layout.putConstraint(SpringLayout.EAST, getXAxis(), 0, SpringLayout.EAST, this);
   
    layout.putConstraint(SpringLayout.SOUTH, getYAxis(), -PLOT_MARGIN, SpringLayout.SOUTH, this);
    layout.putConstraint(SpringLayout.NORTH, getYAxis(), 0, SpringLayout.NORTH, this);
   
    layout.putConstraint(SpringLayout.SOUTH, getXAxis(), 0, SpringLayout.SOUTH, this);
    layout.putConstraint(SpringLayout.NORTH, getXAxis(), 0, SpringLayout.SOUTH, getYAxis());
   
    layout.putConstraint(SpringLayout.WEST, getYAxis(), 0, SpringLayout.WEST, this);
    layout.putConstraint(SpringLayout.EAST, getYAxis(), 0, SpringLayout.WEST, getXAxis());
   
    layout.putConstraint(SpringLayout.SOUTH, contents, 0, SpringLayout.NORTH, getXAxis());
    layout.putConstraint(SpringLayout.NORTH, contents, 0, SpringLayout.NORTH, this);
   
    layout.putConstraint(SpringLayout.WEST, contents, 0, SpringLayout.EAST, getYAxis());
    layout.putConstraint(SpringLayout.EAST, contents, 0, SpringLayout.EAST, this);   
  }

  public void addSyncPoint(String key, Double x, Double y) {
    sync.addPoint(x, y, getColor(key));
  }

  public void clearSyncPoints() {
    sync.clear();
  }
}
TOP

Related Classes of gov.nasa.arc.mct.nontimeplot.view.NonTimePlot

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.