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); } } }