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 } |