annotate src/samer/maths/VectorEditor.java @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
rev   line source
samer@0 1 /*
samer@0 2 * VectorEditor.java
samer@0 3 *
samer@0 4 * Copyright (c) 2001, Samer Abdallah, King's College London.
samer@0 5 * All rights reserved.
samer@0 6 *
samer@0 7 * This software is provided AS iS and WITHOUT ANY WARRANTY;
samer@0 8 * without even the implied warranty of MERCHANTABILITY or
samer@0 9 * FITNESS FOR A PARTICULAR PURPOSE.
samer@0 10 */
samer@0 11
samer@0 12 package samer.maths;
samer@0 13
samer@0 14 import samer.core.*;
samer@0 15 import java.awt.*;
samer@0 16 import java.awt.event.*;
samer@0 17 import java.util.*;
samer@0 18
samer@0 19 public class VectorEditor extends VectorPlotter
samer@0 20 implements MouseListener, MouseMotionListener
samer@0 21 {
samer@0 22 Mat mat;
samer@0 23 double lasty;
samer@0 24 int lasti;
samer@0 25
samer@0 26 public VectorEditor(Observable o, Vec s) {
samer@0 27 super(o,s);
samer@0 28 addMouseListener(this);
samer@0 29 addMouseMotionListener(this);
samer@0 30 mat=s.mat();
samer@0 31 }
samer@0 32
samer@0 33 private void handle(MouseEvent e,boolean dragging)
samer@0 34 {
samer@0 35 // get inverse mapping of position
samer@0 36 double x = xmap.inverseFromInt(e.getX());
samer@0 37 double y = ymap.inverseFromInt(height-e.getY());
samer@0 38 int i = (int)x;
samer@0 39
samer@0 40 if (i>=0 && i<mat.width()) {
samer@0 41 if (dragging) {
samer@0 42 if (i>lasti) {
samer@0 43 for (int j=lasti+1; j<=i; j++) {
samer@0 44 double t=(j-lasti)/(float)(i-lasti);
samer@0 45 double yy = t*y + (1-t)*lasty;
samer@0 46 mat.set(1,j,yy);
samer@0 47 }
samer@0 48 } else if (i<lasti) {
samer@0 49 for (int j=lasti-1; j>=i; j--) {
samer@0 50 double t=(j-lasti)/(float)(i-lasti);
samer@0 51 double yy = t*y + (1-t)*lasty;
samer@0 52 mat.set(1,j,yy);
samer@0 53 }
samer@0 54 } else {
samer@0 55 mat.set(1,i,y);
samer@0 56 }
samer@0 57 } else {
samer@0 58 mat.set(1,i,y);
samer@0 59 }
samer@0 60 obs.notifyObservers(null);
samer@0 61 lasty=y;
samer@0 62 lasti=i;
samer@0 63 }
samer@0 64 }
samer@0 65
samer@0 66 public void mouseMoved(MouseEvent e) {}
samer@0 67 public void mouseDragged(MouseEvent e) {
samer@0 68 int f = e.getModifiers();
samer@0 69 if ((f & InputEvent.BUTTON1_MASK)!=0) {
samer@0 70 handle(e,true); e.consume();
samer@0 71 }
samer@0 72 }
samer@0 73 public void mousePressed(MouseEvent e) {
samer@0 74 int f = e.getModifiers();
samer@0 75 if ((f & InputEvent.BUTTON1_MASK)!=0) {
samer@0 76 handle(e,false); e.consume();
samer@0 77 }
samer@0 78 }
samer@0 79 public void mouseReleased(MouseEvent e) {}
samer@0 80 public void mouseClicked(MouseEvent e) {}
samer@0 81 public void mouseEntered(MouseEvent e) {}
samer@0 82 public void mouseExited(MouseEvent e) {}
samer@0 83 }