// AdjustablePlot2D.java // import java.awt.*; public class AdjustablePlot2D extends Plot2D { private Button add_point_button; private boolean adding_a_point=false; private int dragging_a_point=-1; // number of point you are dragging private int near_a_point=-1; // number of point your near private Point new_point=null; public boolean mouseDown(Event event,int x,int y) { if(near_a_point!=-1) { dragging_a_point=near_a_point; } return(true); } public boolean mouseDrag(Event event,int x,int y) { Point2D p2d; Point p; DataSet2D ds; if(dragging_a_point>-1) { ds=(DataSet2D) data_sets.elementAt(0); p=new Point(x,y); p2d=ConvertPoint(p); try { if(ds.GetSortOrder()==DataSet2D.SORT_X) { ds.GetElement(dragging_a_point).y=p2d.y; } else if(ds.GetSortOrder()==DataSet2D.SORT_Y) { ds.GetElement(dragging_a_point).x=p2d.x; } else { ds.GetElement(dragging_a_point).x=p2d.x; ds.GetElement(dragging_a_point).y=p2d.y; } } catch (DataSet.DataException e) { System.out.println(e.toString()); } repaint(); } return(true); } public boolean mouseMove(Event event,int x,int y) { int i; DataSet2D ds; Point p; double dist_sqr,min_dist_sqr=0; int old_point; // Check to see if we are near a point to adjust. old_point=near_a_point; ds=(DataSet2D) data_sets.elementAt(0); for(i=0; i100) { near_a_point=-1; } if(near_a_point!=old_point) { repaint(); } return(true); } public boolean mouseUp(Event event,int x,int y) { dragging_a_point=-1; return(true); } public boolean action(Event event,Object arg) { if(event.target==add_point_button) { } else super.action(event,arg); return(true); } public void paint(Graphics g) { super.paint(g); // Draw other stuff to indicate what point is being adjusted if(near_a_point>-1) { DataSet2D ds; Point p; ds=(DataSet2D) data_sets.elementAt(0); try { p=ConvertPoint(ds.GetElement(near_a_point)); g.setColor(Color.magenta); g.fillOval(p.x-2,p.y-2,5,5); } catch (DataSet.DataException e) { System.out.println(e.toString()); return; } } } }