view src/samer/tools/ScatterPlot.java @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
line wrap: on
line source
/*
 *	Copyright (c) 2001, Samer Abdallah, King's College London.
 *	All rights reserved.
 *
 *	This software is provided AS iS and WITHOUT ANY WARRANTY;
 *	without even the implied warranty of MERCHANTABILITY or
 *	FITNESS FOR A PARTICULAR PURPOSE.
 */

package samer.tools;

import samer.core.*;
import samer.core.types.*;
import samer.core.util.*;
//import samer.maths.*;
import java.util.*;
import java.awt.*;

/**
	Builds up a 2D joint histogram of 2 elements of a vector.
*/

public class ScatterPlot extends Plotter implements Observer {
	public VDouble alpha, fade,marksz;
	Pen		pen;
	Color		fader;
	
	public ScatterPlot()
	{
		exposeMaps();
		
		alpha=new VDouble("alpha",0.1);
		fade=new VDouble("fade",0.02);
		marksz=new VDouble("blob",2);
		marksz.addObserver(this);
		fade.addObserver(this);
		alpha.addObserver(this);
		fader=VColor.withAlpha(getBackground(),fade.value);
		setForeground(VColor.withAlpha(getForeground(),alpha.value));
	}

	public void update(Graphics g) { Shell.print("update"); }
	public void paint(Graphics g) {
		Shell.print("paint");
		g.setColor(VColor.withAlpha(getForeground(),255));
		g.fillRect(0,0,width,height);
	}
	
	public void dispose() {
		alpha.dispose();
		fade.dispose();
		marksz.dispose();
//		super.dispose();
	}

	public void plot(double x, double y) {
		pen.abs(x,y).marker();
	}

	public void fade() {
		graphics.setColor(fader);
		graphics.fillRect(0,0,width,height);
		graphics.setColor(getForeground());
	}
	
	protected void sized()
	{
		super.sized();

		Graphics2D	g2=(Graphics2D)graphics;
		g2.setComposite(AlphaComposite.SrcOver);
		g2.setPaint(getForeground());
		pen=getPen(g2);
		pen.setMarkerSize((int)marksz.value);
	}

	public void update(Observable o, Object a)
	{
		if (o==marksz) pen.setMarkerSize((int)marksz.value);
		else if (o==fade) fader=VColor.withAlpha(getBackground(),fade.value);
		else if (o==alpha) {
			setForeground(VColor.withAlpha(getForeground(),alpha.value));
		}
	}
/*
	public Task vecTask(final Vec v, final int _i, final int _j) {
		return new AnonymousTask() {
			int		i=_i, j=_j;
			double  [] x=v.array();
			public void run() { plot(x[i],x[j]); }
		};
	}
 */
}