Skip to content

Commit 998ec7f

Browse files
committed
WIP Fix broken ManualTransformationEditor behaviour
1 parent 4d2d78b commit 998ec7f

File tree

1 file changed

+26
-13
lines changed

1 file changed

+26
-13
lines changed

src/main/java/bdv/tools/transformation/ManualTransformationEditor.java

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import javax.swing.InputMap;
4141
import javax.swing.KeyStroke;
4242

43+
import bdv.viewer.RequestRepaint;
4344
import net.imglib2.realtransform.AffineTransform3D;
4445

4546
import org.scijava.listeners.Listeners;
@@ -74,11 +75,13 @@ public class ManualTransformationEditor implements TransformListener< AffineTran
7475

7576
private final ViewerState viewerState;
7677

78+
private final Runnable requestRepaint;
79+
7780
private final Consumer< String > viewerMessageDisplay;
7881

7982
public ManualTransformationEditor( final AbstractViewerPanel viewer, final InputActionBindings inputActionBindings )
8083
{
81-
this( viewer.transformListeners(), viewer.state(), viewer::showMessage, inputActionBindings );
84+
this( viewer.transformListeners(), viewer.state(), viewer::requestRepaint, viewer::showMessage, inputActionBindings );
8285
}
8386

8487
/**
@@ -94,11 +97,13 @@ public ManualTransformationEditor( final AbstractViewerPanel viewer, final Input
9497
public ManualTransformationEditor(
9598
final Listeners< TransformListener< AffineTransform3D > > viewerTransformListeners,
9699
final ViewerState viewerState,
100+
final Runnable requestRepaint,
97101
final Consumer< String > viewerMessageDisplay,
98102
final InputActionBindings inputActionBindings )
99103
{
100104
this.viewerTransformListeners = viewerTransformListeners;
101105
this.viewerState = viewerState;
106+
this.requestRepaint = requestRepaint;
102107
this.viewerMessageDisplay = viewerMessageDisplay;
103108

104109
bindings = inputActionBindings;
@@ -164,6 +169,7 @@ public synchronized void transform( Collection< SourceAndConverter< ? > > source
164169
sourcesToTransform = getCurrentSources( state );
165170
}
166171
state.getViewerTransform( frozenTransform );
172+
liveTransform.identity();
167173
sourcesToModify.clear();
168174
sourcesToFix.clear();
169175
for ( final SourceAndConverter< ? > source : state.getSources() )
@@ -194,18 +200,20 @@ public synchronized void reset()
194200
{
195201
if ( active )
196202
{
197-
final AffineTransform3D identity = new AffineTransform3D();
203+
final AffineTransform3D tmp = new AffineTransform3D();
198204
for ( final TransformedSource< ? > source : sourcesToModify )
199205
{
200-
source.setIncrementalTransform( identity );
201-
source.setFixedTransform( identity );
206+
source.getFixedTransform( tmp );
207+
source.setIncrementalTransform( tmp.inverse() );
202208
}
209+
tmp.identity();
203210
for ( final TransformedSource< ? > source : sourcesToFix )
204211
{
205-
source.setIncrementalTransform( identity );
212+
source.setIncrementalTransform( tmp );
206213
}
207214
viewerState.setViewerTransform( frozenTransform );
208215
viewerMessageDisplay.accept( "reset manual transform" );
216+
requestRepaint.run();
209217
}
210218
}
211219

@@ -218,18 +226,21 @@ public synchronized void apply()
218226
if ( active )
219227
{
220228
// Exit manual edit mode.
221-
final AffineTransform3D tmp = new AffineTransform3D();
229+
final AffineTransform3D incremental = new AffineTransform3D();
230+
final AffineTransform3D fixed = new AffineTransform3D();
222231
for ( final TransformedSource< ? > source : sourcesToModify )
223232
{
224-
tmp.identity();
225-
source.setIncrementalTransform( tmp );
226-
source.getFixedTransform( tmp );
227-
tmp.preConcatenate( liveTransform );
228-
source.setFixedTransform( tmp );
233+
source.getIncrementalTransform( incremental );
234+
source.getFixedTransform( fixed );
235+
incremental.preConcatenate( fixed ).preConcatenate( liveTransform );
236+
source.setFixedTransform( incremental );
237+
229238
}
230-
tmp.identity();
239+
final AffineTransform3D identity = new AffineTransform3D();
240+
for ( final TransformedSource< ? > source : sourcesToModify )
241+
source.setIncrementalTransform( identity );
231242
for ( final TransformedSource< ? > source : sourcesToFix )
232-
source.setIncrementalTransform( tmp );
243+
source.setIncrementalTransform( identity );
233244

234245
terminate( "fixed manual transform" );
235246
}
@@ -247,6 +258,7 @@ public synchronized void abort()
247258
for ( final TransformedSource< ? > source : sourcesToModify )
248259
source.setIncrementalTransform( identity );
249260

261+
viewerState.setViewerTransform( frozenTransform );
250262
terminate("aborted manual transform");
251263
}
252264
}
@@ -260,6 +272,7 @@ private void terminate( final String message )
260272
if ( message != null )
261273
viewerMessageDisplay.accept( message );
262274
manualTransformActiveListeners.list.forEach( l -> l.manualTransformActiveChanged( active ) );
275+
requestRepaint.run();
263276
}
264277

265278
public synchronized void setActive( final boolean a )

0 commit comments

Comments
 (0)