public void actionPerformed (ActionEvent event)
{ if (event.getSource() == zoomButton_)
window_.startInteraction (new ZoomInteraction (window_.getScene())); else
window_.startInteraction (this);
}
// Move interaction public void event (GScene scene, int event, int x, int y)
{ switch (event) { case GWindow.BUTTON1_DOWN :
interactionSegment_ = scene.findSegment (x, y);
x0_ = x;
y0_ = y; break;
case GWindow.BUTTON1_DRAG : int dx = x - x0_; int dy = y - y0_; if (interactionSegment_ != null) {
TestObject testObject = (TestObject) interactionSegment_.getOwner();
testObject.translate (interactionSegment_, dx, dy);
scene.refresh();
}
x0_ = x;
y0_ = y; break;
case GWindow.BUTTON1_UP :
interactionSegment_ = null; break;
}
}
/**
* Defines the geometry and presentation for a sample graphic object.
*/ private class TestObject extends GObject
{ private GSegment[] stars_; private double[][] geometry_;
TestObject()
{ int nStars = 20;
stars_ = new GSegment[nStars];
geometry_ = new double[nStars][];
for (int i = 0; i < nStars; i++) {
stars_[i] = new GSegment();
stars_[i].setUserData (new Integer(i));
addSegment (stars_[i]);
GStyle style = new GStyle();
style.setForegroundColor (new Color ((float) Math.random(),
(float) Math.random(),
(float) Math.random()));
style.setBackgroundColor (new Color ((float) Math.random(),
(float) Math.random(),
(float) Math.random()));
style.setLineWidth (2);
stars_[i].setStyle (style);
}
}
// Convert the world extent geometry of the specified
// segment according to specified device translation public void translate (GSegment segment, int dx, int dy)
{
GTransformer transformer = getTransformer(); double[] dw0 = transformer.deviceToWorld (0, 0); double[] dw1 = transformer.deviceToWorld (dx, dy);
int index = ((Integer) segment.getUserData()).intValue(); double[] geometry = geometry_[index]; for (int i = 0; i < geometry.length; i += 2) {
geometry[i + 0] += dw1[0] - dw0[0];
geometry[i + 1] += dw1[1] - dw0[1];
}
segment.setGeometryXy (geometry);
}
public void draw()
{ for (int i = 0; i < stars_.length; i++)
stars_[i].setGeometryXy (geometry_[i]);
}
}
public static void main (String[] args)
{ new Demo11();
}
}