//This file is part of SECONDO. //Copyright (C) 2004, University in Hagen, Department of Computer Science, //Database Systems for New Applications. //SECONDO is free software; you can redistribute it and/or modify //it under the terms of the GNU General Public License as published by //the Free Software Foundation; either version 2 of the License, or //(at your option) any later version. //SECONDO is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //GNU General Public License for more details. //You should have received a copy of the GNU General Public License //along with SECONDO; if not, write to the Free Software //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA package viewer.hoese.algebras; import java.awt.geom.*; import java.awt.*; import viewer.*; import viewer.hoese.*; import sj.lang.ListExpr; import gui.Environment; import javax.swing.JPanel; import tools.Reporter; /** * A displayclass for a single unit of the moving point type */ public class Dsplupoint extends DisplayTimeGraph { private double x1,x2,y1,y2; private Point2D.Double point; private Rectangle2D.Double bounds=null; private Interval theInterval; private static JPanel EmptyPanel = new JPanel(); private RectangularShape shp; private static Point2D.Double aPoint = new Point2D.Double(); public boolean isPointType(int num){ return true; } public int numberOfShapes(){ return 1; } /** Computes the Renderobject at the given point in time */ public Shape getRenderObject (int num,AffineTransform at) { if(num!=0) { return null; } double t = RefLayer.getActualTime(); // get the current time if(!theInterval.isDefinedAt(t)){ // t is outside from the deftime point = null; return null; } double t1 = theInterval.getStart(); double t2 = theInterval.getEnd(); double Delta = (t-t1)/(t2-t1); double x = x1+Delta*(x2-x1); double y = y1+Delta*(y2-y1); if(!ProjectionManager.project(x,y,aPoint)){ aPoint.setLocation(x,y); } double ps = Cat.getPointSize(renderAttribute,CurrentState.ActualTime); double pixy = Math.abs(ps/at.getScaleY()); //double pix = Cat.getPointSize(); double pix = Math.abs(ps/at.getScaleX()); //Point2D p=at.transform(point,p); if (Cat.getPointasRect()) shp = new Rectangle2D.Double(aPoint.getX()- pix/2, aPoint.getY() - pixy/2, pix, pixy); else { shp = new Ellipse2D.Double(aPoint.getX()- pix/2, aPoint.getY() - pixy/2, pix, pixy); } return shp; } /** * Scans the representation of a upoint datatype * @param v interval with x1,x2,y1,y2 values * @see sj.lang.ListExpr */ private void ScanValue (ListExpr v) { err = true; if (v.isEmpty()) return; if(v.listLength()!=2) // list must have the form ((interval)(x1 y1 x2 y2)) return; theInterval = LEUtils.readInterval(v.first()); if(theInterval==null) // error in reading interval return; ListExpr StartEnd = v.second(); if(StartEnd.listLength()!=4) // error in reading start and end point return; Double X1 = LEUtils.readNumeric(StartEnd.first()); Double Y1 = LEUtils.readNumeric(StartEnd.second()); Double X2 = LEUtils.readNumeric(StartEnd.third()); Double Y2 = LEUtils.readNumeric(StartEnd.fourth()); if(X1==null || X2==null | Y1==null || Y2==null) // error in reading x,y values return; x1 = X1.doubleValue(); x2 = X2.doubleValue(); y1 = Y1.doubleValue(); y2 = Y2.doubleValue(); err = false; if(bounds==null) bounds = new Rectangle2D.Double(0,0,0,0); Point2D.Double p1 = new Point2D.Double(); Point2D.Double p2 = new Point2D.Double(); if(ProjectionManager.project(x1,y1,p1) && ProjectionManager.project(x2,y2,p2)){ x1 = p1.getX(); x2 = p2.getX(); y1 = p1.getY(); y2 = p2.getY(); } bounds.setRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2)); if(!theInterval.isInfinite()){ TimeBounds = theInterval; } else{ TimeBounds = null; } } public void init (String name, int nameWidth, int indent, ListExpr type, ListExpr value, QueryResult qr) { AttrName = extendString(name, nameWidth, indent); ScanValue(value); if (err) { Reporter.writeError("Dsplmovingpoint Error in ListExpr :parsing aborted"); qr.addEntry(new String("(" + AttrName + ": GTA(mpoint))")); return; } else qr.addEntry(this); //ListIterator li=iv.listIterator(); } /* Returns an empty JPanel at this time */ public JPanel getTimeRenderer(double d){ return EmptyPanel; } /** returns true if the last computet position is in the near of xpos,ypos */ public boolean contains (double xpos, double ypos, double scalex, double scaley) { if(point==null) return false; // no last position double x = point.getX(); double y = point.getY(); return (Math.abs(x-xpos)Source */ public Rectangle2D.Double getBounds () { return bounds; } }