Package gov.nasa.arc.mct.plot.bridge

Source Code of gov.nasa.arc.mct.plot.bridge.PlotterPlot

package gov.nasa.arc.mct.plot.bridge;

import gov.nasa.arc.mct.plot.adapter.Plot;
import gov.nasa.arc.mct.plot.adapter.PlotAppearance;
import gov.nasa.arc.mct.plot.adapter.PlotAxis;
import gov.nasa.arc.mct.plot.adapter.PlotContents;
import gov.nasa.arc.mct.plot.adapter.PlotLine;
import gov.nasa.arc.mct.plot.settings.PlotConfiguration;
import gov.nasa.arc.mct.plot.settings.PlotConstants.AxisOrientationSetting;
import gov.nasa.arc.mct.plot.settings.PlotConstants.XAxisMaximumLocationSetting;
import gov.nasa.arc.mct.plot.settings.PlotConstants.YAxisMaximumLocationSetting;

import java.awt.Color;
import java.awt.Font;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JComponent;
import javax.swing.SpringLayout;

import plotter.xy.LinearXYAxis;
import plotter.xy.XYDimension;
import plotter.xy.XYGrid;
import plotter.xy.XYPlot;

public class PlotterPlot extends XYPlot implements Plot, PlotAppearance {
  private static final long serialVersionUID = -879851368944464375L;

  private static final int PLOT_MARGIN = 16;
 
  private List<PlotLine>  plotLines = new ArrayList<PlotLine>();
  private PlotAxis        plotAxes[] = new PlotAxis[PlotAxisType.values().length];
  private PlotLineFactory plotLineFactory = new TemporalPlotLineFactory(this, false)
 
  private PlotterPlotContents contents = new PlotterPlotContents();
  private XYGrid              grid;

  public PlotterPlot() {
    setXAxis(new LinearXYAxis(XYDimension.X));
    setYAxis(new LinearXYAxis(XYDimension.Y));
    grid = new XYGrid(getXAxis(), getYAxis());
   
    contents.add(grid);
   
    add(getXAxis());
    add(getYAxis());
    add(contents  );
   
    setupLayout();
  }
 
 
  @Override
  public JComponent getRepresentation() {
    return this;
  }

  @Override
  public void configure(PlotConfiguration configuration) {
    boolean rotated = configuration.getAxisOrientationSetting() == AxisOrientationSetting.Y_AXIS_AS_TIME;
   
    // Create some wrappers
    plotLineFactory = (configuration.getAxisOrientationSetting() == AxisOrientationSetting.Z_AXIS_AS_TIME) ?
        new ScatterPlotLineFactory(this, rotated) : new TemporalPlotLineFactory(this, rotated);
       
    /* Configure plot axis wrappers */
    PlotAxis xAxisWrapper = new PlotterPlotAxis(getXAxis(),
        configuration.getXAxisMaximumLocation() == XAxisMaximumLocationSetting.MAXIMUM_AT_RIGHT);
    PlotAxis yAxisWrapper = new PlotterPlotAxis(getXAxis(),
        configuration.getYAxisMaximumLocation() == YAxisMaximumLocationSetting.MAXIMUM_AT_TOP);
   
    plotAxes[PlotAxisType.X.ordinal()] = xAxisWrapper;
    plotAxes[PlotAxisType.Y.ordinal()] = yAxisWrapper;
    plotAxes[PlotAxisType.INDEPENDENT.ordinal()] =
      (configuration.getAxisOrientationSetting() != AxisOrientationSetting.Y_AXIS_AS_TIME) ?
          xAxisWrapper : yAxisWrapper;
    plotAxes[PlotAxisType.DEPENDENT.ordinal()] =
      (configuration.getAxisOrientationSetting() == AxisOrientationSetting.Y_AXIS_AS_TIME) ?
          xAxisWrapper : yAxisWrapper;
    plotAxes[PlotAxisType.TEMPORAL.ordinal()] =
      (configuration.getAxisOrientationSetting() == AxisOrientationSetting.Z_AXIS_AS_TIME) ?
      null : // TODO: Create an invisible time axis
      plotAxes[PlotAxisType.INDEPENDENT.ordinal()];
        
   
  }

  @Override
  public PlotLine createPlotLine() {
    PlotLine line = plotLineFactory.createLine();
    plotLines.add(line);
    return line;
  }

  @Override
  public List<PlotLine> getPlotLines() {
    return plotLines;
  }

  @Override
  public PlotAppearance getAppearance() {
    return this;
  }

  @Override
  public PlotAxis getAxis(PlotAxisType axisType) {
    return plotAxes[axisType.ordinal()];
  }
 
  @Override
  public PlotContents getPlotContents() {
    return contents;
  }

  @Override
  public void setAppearance(PlotAppearance appearance) {
    setBackground(appearance.getBackground());
    getXAxis().setBackground(appearance.getFrameBackground());
    getYAxis().setBackground(appearance.getFrameBackground());
    grid.setForeground(appearance.getGridColor());
    for (PlotAxisType axisType : PlotAxisType.values()) {
      Font     f = appearance.getFont(axisType);
      PlotAxis a = this.getAxis(axisType);
      if (a != null && f != null) {
        a.getRepresentation().setFont(f);
      }
    }
  }

  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);   
  }
 
  /* Plot Appearance */
  @Override
  public Font getFont(PlotAxisType axis) {
    return getAxis(axis).getRepresentation().getFont();
  }

  @Override
  public Color getFrameBackground() {
    return this.getXAxis().getBackground();
  }

  @Override
  public Color getGridColor() {
    return grid.getForeground();
  }

  @Override
  public Color getAxisColor() {
    return this.getXAxis().getForeground();
  }



}
TOP

Related Classes of gov.nasa.arc.mct.plot.bridge.PlotterPlot

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.