/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.jlab.groot.graphics;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.util.ArrayList;
import java.util.List;
import org.jlab.groot.base.GStyle;
import org.jlab.groot.base.PadMargins;
import org.jlab.groot.math.Dimension2D;

/**
 *
 * @author gavalian
 */
public class GraphicsAxisFrame {
    
    private Dimension2D          axisFrameDimension     = new Dimension2D();
    private PadMargins           axisFrameMargins       = new PadMargins();
    private List      axisFrameAxis       = new ArrayList();
    private boolean                 drawAxisZ           = false;
    private boolean                 drawFrame           = true;

    private int                     colorAxisOffset     = 4;
    private int                     colorAxisSize       = 8;
    
    public GraphicsAxisFrame(){
        axisFrameAxis.add(new GraphicsAxis(GraphicsAxis.AXISTYPE_HORIZONTAL));
        axisFrameAxis.add(new GraphicsAxis(GraphicsAxis.AXISTYPE_VERTICAL));
        axisFrameAxis.add(new GraphicsAxis(GraphicsAxis.AXISTYPE_COLOR));
        //axisFrameAxis.get(1).setVertical(true);
        //axisFrameAxis.get(2).setAxisType(GraphicsAxis.AXISTYPE_COLOR);
        //axisFrameAxis.get(2).setAxisFontSize(10);
    }
    
    public Dimension2D getFrameDimensions(){
        return this.axisFrameDimension;
    }
    
    public void setFrameDimensions(double xmin, double xmax, double ymin, double ymax){
        this.axisFrameDimension.getDimension(0).setMinMax(xmin, xmax);
        this.axisFrameDimension.getDimension(1).setMinMax(ymin, ymax);
        this.axisFrameAxis.get(0).setDimension((int) xmin, (int) xmax);
        this.axisFrameAxis.get(1).setDimension((int) ymax, (int) ymin);
    }
    
    public void updateMargins(Graphics2D g2d){
        double  xoffset = axisFrameAxis.get(1).getAxisBounds(g2d);
        double  yoffset = axisFrameAxis.get(0).getAxisBounds(g2d);
        axisFrameMargins.setLeftMargin( (int) xoffset);
        axisFrameMargins.setBottomMargin((int) yoffset);
        axisFrameMargins.setTopMargin(10);
        axisFrameMargins.setRightMargin(15);
        if(this.drawAxisZ==true){
            double zoffset = axisFrameAxis.get(2).getAxisBounds(g2d);
            double length  = 15 + zoffset + this.colorAxisOffset + this.colorAxisSize;
            axisFrameMargins.setRightMargin((int) length);
        }
    }
    
    public PadMargins  getFrameMargins(){
        return this.axisFrameMargins;
    }
    
    public void setAxisMargins(PadMargins margins){
        double xcorner = axisFrameDimension.getDimension(0).getMin() + margins.getLeftMargin();
        double ycorner = axisFrameDimension.getDimension(1).getMax() - margins.getBottomMargin();
        
        axisFrameAxis.get(0).setDimension((int) xcorner, 
                (int) (axisFrameDimension.getDimension(0).getMax() 
                        - margins.getRightMargin()));
        axisFrameAxis.get(1).setDimension((int) ycorner,
                (int) (axisFrameDimension.getDimension(1).getMin()
                        + margins.getTopMargin())
                );
        axisFrameAxis.get(2).setDimension((int) ycorner,
                (int) (axisFrameDimension.getDimension(1).getMin()
                        + margins.getTopMargin()));
    }
    
    public void drawAxis(Graphics2D g2d, PadMargins margins){
        double xcorner = axisFrameDimension.getDimension(0).getMin() + margins.getLeftMargin();
        double ycorner = axisFrameDimension.getDimension(1).getMax() - margins.getBottomMargin();
        /*
        axisFrameAxis.get(0).setDimension((int) xcorner, 
                (int) (axisFrameDimension.getDimension(0).getMax() 
                        - margins.getRightMargin()));
        axisFrameAxis.get(1).setDimension((int) ycorner,
                (int) (axisFrameDimension.getDimension(1).getMin()
                        + margins.getTopMargin())
                );
        */
        /*
        System.out.println(" GRAPHICS AXIS CORNERS = " + (int) xcorner
                + " - " + (int) ycorner);
        System.out.println("----> X axis " + axisFrameAxis.get(0).getDimension());
        System.out.println("----> Y axis " + axisFrameAxis.get(1).getDimension());
        */
        g2d.setColor(Color.BLACK);
        g2d.setStroke(new BasicStroke(1));
        if(drawFrame){
            g2d.drawRect(
                    (int) getAxisX().getDimension().getMin(),
                    (int) getAxisY().getDimension().getMax(),
                    (int) getAxisX().getDimension().getLength(),
                    (int) Math.abs(getAxisY().getDimension().getLength())
            );
        }
        
        if(axisFrameAxis.get(0).getAttributes().showAxis()){            
            axisFrameAxis.get(0).drawAxis(g2d, (int) xcorner, (int) ycorner, (int) Math.abs(getAxisY().getDimension().getLength()) );
        }
        
        if(axisFrameAxis.get(1).getAttributes().showAxis()){
            axisFrameAxis.get(1).drawAxis(g2d, (int) xcorner, (int) ycorner, (int) getAxisX().getDimension().getLength());
        }
        if(axisFrameAxis.get(2).getAttributes().showAxis()){
            int xc = (int) this.axisFrameDimension.getDimension(0).getMax() 
                    - this.axisFrameMargins.getRightMargin();
            axisFrameAxis.get(2).drawAxis(g2d, (int) xc, (int) ycorner);
        }
        
        g2d.setColor(Color.BLACK);
        int lineWidth = GStyle.getGraphicsFrameLineWidth();
        g2d.setStroke(new BasicStroke(lineWidth));
        if(drawFrame){
            g2d.drawRect(
                    (int) getAxisX().getDimension().getMin(),
                    (int) getAxisY().getDimension().getMax(),
                    (int) getAxisX().getDimension().getLength(),
                    (int) Math.abs(getAxisY().getDimension().getLength())
            );
        }
    }
    
    public void setDrawAxisZ(boolean flag){
        this.drawAxisZ = flag;
    }
    
    
    public boolean isDrawFrame() {
		return drawFrame;
	}

	public void setDrawFrame(boolean drawFrame) {
		this.drawFrame = drawFrame;
	}

	public GraphicsAxis  getAxisX(){
        return this.axisFrameAxis.get(0);
    }
    
    public GraphicsAxis  getAxisY(){
        return this.axisFrameAxis.get(1);
    }
    
    public GraphicsAxis  getAxisZ(){
        return this.axisFrameAxis.get(2);
    }
    
    public int getAxisPointX(double value){
        return (int) axisFrameAxis.get(0).getAxisPosition(value);
    }
    
    public int getAxisPointY(double value){
        return (int) axisFrameAxis.get(1).getAxisPosition(value);
    }
    
    public int getAxisPointZ(double value){
        return (int) axisFrameAxis.get(2).getAxisPosition(value);
    }
    
}

 

Ads help maintain this website.