RectangularEvent
This type of event is generated when a user performs a rectangular selection on a 2D layer such as a seismic, cross-plot or map layer.
The following example illustrates how to handle such an event for a seismic layer.
Event registration can be done as follows, where this is the class that implements IEventSubscriber<RectangularEvent>
EventBroadcaster.getInstance().subscribe(RectangularEvent.class, this);
An example implementation of IEventSubscriber<RectangularEvent> method onEvent for dealing with rectangular selection on seismic data:
public void onEvent(RectangularEvent event) {
if (event.getSource() instanceof ISeismicLayer) {
ISeismicLayer seismicLayer = (ISeismicLayer) event.getSource();
ISeismicData data = (ISeismicData) seismicLayer.getData();
// convert selection rectangle to model units
Point2D modelP1 = seismicLayer.deviceToModel(new Point((int) event.getMinX(), (int) event.getMinY()));
Point2D modelP2 = seismicLayer.deviceToModel(new Point((int) event.getMaxX(), (int) event.getMaxY()));
double startTime = Math.min(modelP1.getY(), modelP2.getY());
double endTime = Math.max(modelP1.getY(), modelP2.getY());
// convert to trace index
int startTraceIndex = seismicLayer.modelToTraceIndex(Math.min(modelP1.getX(), modelP2.getX()));
int endTraceIndex = seismicLayer.modelToTraceIndex(Math.max(modelP1.getX(), modelP2.getX()));
// check if selection fell in a gap
if (startTraceIndex != -1 && endTraceIndex != -1) {
ISeismicReader reader = seismicLayer.getReader();
ITrace startTrace = reader.getTrace(startTraceIndex);
ITrace endTrace = reader.getTrace(endTraceIndex);
// from here you can read the traces, extract header information, etc.
...
} else {
// error handling
DialogManager.getDefault().showMessageDialog("Cannot start or end selection in a gap",
"Selection Warning", DialogManager.WARNING);
}
}
}