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