float[][] frames = null;
float[] x, y;
GeneralPath path = null;
DecimationInfo info;
// AudioTrail at;
DecimatedWaveTrail dwt;
float lx, ly;
List collTrns;
try {
doc.bird.waitShared( Session.DOOR_TIMETRNSMTE | Session.DOOR_GRP );
span = doc.timeline.getSelectionSpan();
collTransmitterPath.clear();
if( span.getLength() < 2 ) return;
collTrns = doc.getActiveTransmitters().getAll();
collTrns.retainAll( doc.getSelectedTransmitters().getAll() );
for( int i = 0; i < collTrns.size(); i++ ) {
trns = (Transmitter) collTrns.get( i );
// at = trns.getTrackEditor();
dwt = trns.getDecimatedWaveTrail();
// performance measures show that this routine is
// vey fast, like one or two millisecs, while the draw method
// of the Graphics2D called in redrawImage() becomes hell
// slow if the GeneralPath contains more than say 250 lines.
// therefore we start with a fairly big subsample to get a
// good resolution; however in the path creation loop, points
// are skipped if they lie very close to each other. therefore,
// right after the creation of the path we know how many lines
// it actually contains, and if these exceed 256 we'll restart
// with a smaller subsample.
for( reqLen = 1024, pathLen = 257, len = -1; pathLen > 256; reqLen >>= 1 ) {
info = dwt.getBestSubsample( span, reqLen );
lastLen = len;
len = (int) info.sublength;
if( lastLen == len ) continue;
if( frames == null || frames[0].length < len ) {