Package ch.akuhn.org.ggobi.plugins.ggvis

Source Code of ch.akuhn.org.ggobi.plugins.ggvis.PointsDatavis

package ch.akuhn.org.ggobi.plugins.ggvis;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class PointsDatavis implements PaintListener {

    private int zoom = 10;
    private Points points;
    private boolean[][] edges;

    public PointsDatavis(Points points) {
        this.points = points;
    }

    public PointsDatavis open() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                final int ms = 1000 / 50;
                final Display display = new Display();
                final Shell shell = new Shell(display, SWT.SHELL_TRIM & ~SWT.RESIZE);
                final Canvas canvas = new Canvas(shell, SWT.DOUBLE_BUFFERED);
                canvas.addPaintListener(PointsDatavis.this);
                canvas.setSize(512, 512);
                shell.setText("MDS");
                shell.pack();
                shell.open();
                display.timerExec(ms , new Runnable() {
                    @Override
                    public void run() {
                        if (shell.isDisposed()) return;
                        canvas.redraw();
                        display.timerExec(ms, this);
                    }
                });
                while (!shell.isDisposed()) {
                    if (!display.readAndDispatch())
                        display.sleep();
                }
                display.dispose();
                System.exit(-1);
            }
        }).start();
        return this;
    }

    @Override
    public void paintControl(PaintEvent e) {
        if (points == null) return;
        Device device = e.gc.getDevice();
        e.gc.setForeground(device.getSystemColor(SWT.COLOR_BLACK));
        e.gc.setAntialias(SWT.ON);
        e.gc.setAlpha(128);
        e.gc.drawOval(256-zoom, 256-zoom, zoom*2, zoom*2);
        for (int i = 0; i < points.x.length; i++) {
            int x = (int) (points.x[i] * zoom + 256);
            int y = (int) (points.y[i] * zoom + 256);
            e.gc.drawLine(x - 2, y - 2, x + 2, y + 2);
            e.gc.drawLine(x - 2, y + 2, x + 2, y - 2);
        }
        e.gc.setForeground(device.getSystemColor(SWT.COLOR_RED));
        drawEdges(e.gc);
    }

    private void drawEdges(GC gc) {
        if (edges == null) return;
        for (int i = 0; i < edges.length; i++) {
            for (int j = 0; j < i; j++) {
                if (!edges[i][j]) continue;
                int x0 = (int) (points.x[i] * zoom + 256);
                int y0 = (int) (points.y[i] * zoom + 256);
                int x = (int) (points.x[j] * zoom + 256);
                int y = (int) (points.y[j] * zoom + 256);
                gc.drawLine(x0, y0, x, y);
            }
        }
    }

    public PointsDatavis withEdges(boolean[][] edges0) {
        this.edges = edges0;
        return this;
    }

}
TOP

Related Classes of ch.akuhn.org.ggobi.plugins.ggvis.PointsDatavis

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.