40
40
import javax .swing .InputMap ;
41
41
import javax .swing .KeyStroke ;
42
42
43
+ import bdv .viewer .RequestRepaint ;
43
44
import net .imglib2 .realtransform .AffineTransform3D ;
44
45
45
46
import org .scijava .listeners .Listeners ;
@@ -74,11 +75,13 @@ public class ManualTransformationEditor implements TransformListener< AffineTran
74
75
75
76
private final ViewerState viewerState ;
76
77
78
+ private final Runnable requestRepaint ;
79
+
77
80
private final Consumer < String > viewerMessageDisplay ;
78
81
79
82
public ManualTransformationEditor ( final AbstractViewerPanel viewer , final InputActionBindings inputActionBindings )
80
83
{
81
- this ( viewer .transformListeners (), viewer .state (), viewer ::showMessage , inputActionBindings );
84
+ this ( viewer .transformListeners (), viewer .state (), viewer ::requestRepaint , viewer :: showMessage , inputActionBindings );
82
85
}
83
86
84
87
/**
@@ -94,11 +97,13 @@ public ManualTransformationEditor( final AbstractViewerPanel viewer, final Input
94
97
public ManualTransformationEditor (
95
98
final Listeners < TransformListener < AffineTransform3D > > viewerTransformListeners ,
96
99
final ViewerState viewerState ,
100
+ final Runnable requestRepaint ,
97
101
final Consumer < String > viewerMessageDisplay ,
98
102
final InputActionBindings inputActionBindings )
99
103
{
100
104
this .viewerTransformListeners = viewerTransformListeners ;
101
105
this .viewerState = viewerState ;
106
+ this .requestRepaint = requestRepaint ;
102
107
this .viewerMessageDisplay = viewerMessageDisplay ;
103
108
104
109
bindings = inputActionBindings ;
@@ -164,6 +169,7 @@ public synchronized void transform( Collection< SourceAndConverter< ? > > source
164
169
sourcesToTransform = getCurrentSources ( state );
165
170
}
166
171
state .getViewerTransform ( frozenTransform );
172
+ liveTransform .identity ();
167
173
sourcesToModify .clear ();
168
174
sourcesToFix .clear ();
169
175
for ( final SourceAndConverter < ? > source : state .getSources () )
@@ -194,18 +200,20 @@ public synchronized void reset()
194
200
{
195
201
if ( active )
196
202
{
197
- final AffineTransform3D identity = new AffineTransform3D ();
203
+ final AffineTransform3D tmp = new AffineTransform3D ();
198
204
for ( final TransformedSource < ? > source : sourcesToModify )
199
205
{
200
- source .setIncrementalTransform ( identity );
201
- source .setFixedTransform ( identity );
206
+ source .getFixedTransform ( tmp );
207
+ source .setIncrementalTransform ( tmp . inverse () );
202
208
}
209
+ tmp .identity ();
203
210
for ( final TransformedSource < ? > source : sourcesToFix )
204
211
{
205
- source .setIncrementalTransform ( identity );
212
+ source .setIncrementalTransform ( tmp );
206
213
}
207
214
viewerState .setViewerTransform ( frozenTransform );
208
215
viewerMessageDisplay .accept ( "reset manual transform" );
216
+ requestRepaint .run ();
209
217
}
210
218
}
211
219
@@ -218,18 +226,21 @@ public synchronized void apply()
218
226
if ( active )
219
227
{
220
228
// Exit manual edit mode.
221
- final AffineTransform3D tmp = new AffineTransform3D ();
229
+ final AffineTransform3D incremental = new AffineTransform3D ();
230
+ final AffineTransform3D fixed = new AffineTransform3D ();
222
231
for ( final TransformedSource < ? > source : sourcesToModify )
223
232
{
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
+
229
238
}
230
- tmp .identity ();
239
+ final AffineTransform3D identity = new AffineTransform3D ();
240
+ for ( final TransformedSource < ? > source : sourcesToModify )
241
+ source .setIncrementalTransform ( identity );
231
242
for ( final TransformedSource < ? > source : sourcesToFix )
232
- source .setIncrementalTransform ( tmp );
243
+ source .setIncrementalTransform ( identity );
233
244
234
245
terminate ( "fixed manual transform" );
235
246
}
@@ -247,6 +258,7 @@ public synchronized void abort()
247
258
for ( final TransformedSource < ? > source : sourcesToModify )
248
259
source .setIncrementalTransform ( identity );
249
260
261
+ viewerState .setViewerTransform ( frozenTransform );
250
262
terminate ("aborted manual transform" );
251
263
}
252
264
}
@@ -260,6 +272,7 @@ private void terminate( final String message )
260
272
if ( message != null )
261
273
viewerMessageDisplay .accept ( message );
262
274
manualTransformActiveListeners .list .forEach ( l -> l .manualTransformActiveChanged ( active ) );
275
+ requestRepaint .run ();
263
276
}
264
277
265
278
public synchronized void setActive ( final boolean a )
0 commit comments