/* Copyright 2006 by Sean Luke and George Mason University Licensed under the Academic Free License version 3.0 See the file "LICENSE" for more information */ package sim.portrayal.inspector; import sim.util.*; import sim.field.*; import sim.field.grid.*; import sim.field.continuous.*; import sim.portrayal.*; import sim.display.*; /** StableDouble2D is a StableLocation for Double2D. See StableLocation for more information. */ public class StableDouble2D implements StableLocation { public double x = 0; public double y = 0; public boolean exists = false; public FieldPortrayal fieldPortrayal; public GUIState gui; public Object object; public String toString() { update(); if (!exists) return "Gone"; else return "(" + x + ", " + y + ")"; } public StableDouble2D(FieldPortrayal fieldPortrayal, Object object, GUIState gui) { this.gui = gui; this.fieldPortrayal = fieldPortrayal; this.object = object; } void update() { Double2D pos = null; if (fieldPortrayal == null) return; Object p = fieldPortrayal.getObjectLocation(object, gui); if (p == null) { exists = false; } // purposely don't update x and y and z so they stay the same else { if (p instanceof Double3D) { pos = new Double2D(((Double3D)p).x, ((Double3D)p).y); } else if (p instanceof Double2D) { pos = (Double2D)p; } else { throw new RuntimeException("StableDouble3D expected an Double2D or Double3D position from underlying field portrayal " + fieldPortrayal); } x = pos.x; y = pos.y; exists = true; } } public double getX() { update(); return x; } public double getY() { update(); return y; } public boolean getExists() { update(); return exists; } // what an ugly name public void setX(double val) { if (fieldPortrayal == null) return; fieldPortrayal.setObjectLocation(object, new Double2D(val, getY()), gui); } public void setY(double val) { if (fieldPortrayal == null) return; fieldPortrayal.setObjectLocation(object, new Double2D(getX(), val), gui); } }