|
|
- // hit = 0x01<<i (left, middle, right, top, center, bottom)
- // r remarkable points, 6 for image + 6 per ROIs, same order as hit
- // dragged roi snaps to guides.
-
- macro "Move Overlay Tool - C037O33aaL03f3L303f" {
- getCursorLoc( x, y, z, flags );
- selectNone( );
- r = newArray( 0, getWidth / 2, getWidth, 0, getHeight / 2, getHeight );
- n = Overlay.size;
- if( n < 1 ) exit( "Overlay required" );
- id = Overlay.indexAt( x, y );
- for( i = 0; i < n; i ++ ) {
- if( i != id ) {
- Overlay.getBounds( i, bx, by, bw, bh );
- er = newArray( bx, bx + bw / 2, bx + bw, by, by + bh / 2, by + bh );
- r = Array.concat( r, er );
- }
- }
- while( flags & 16 > 0 ) {
- getCursorLoc( x, y, z, flags );
- Overlay.getBounds( id, bx, by, bw, bh );
- if( id < 0 ) break;
- Overlay.moveSelection( id, x - bw / 2, y - bh / 2 );
- Overlay.getBounds( id, bx, by, bw, bh );
- d = newArray( bx, bx + bw / 2, bx + bw, by, by + bw / 2, by + bh );
- while( Overlay.size > n ) Overlay.removeSelection( Overlay.size - 1 );
- hit = 0x00;
- for( i = 0; i < r.length; i = i + 6 ) { // each element
- for( p = 0; p < 6; p ++ ) // each remarkable point
- if( abs( d [ p ]- r [ i + p ] )< 5 ) {
- hit = hit |( 0x01 << p ); // allows for multiple hits
- }
- if( hit > 0 ) {
- ihit = i;
- break;
- }
- }
- for( i = 0; i < 6; i ++ ) {
- if( hit &( 1 << i )> 0 ) {
- if( i < 3 ) {
- Overlay.getBounds( id, bx, by, bw, bh );
- Overlay.drawLine( r [ ihit + i ], 0, r [ ihit + i ], getHeight );
- if( i == 0 ) Overlay.moveSelection( id, r [ ihit + i ], by );
- if( i == 1 ) Overlay.moveSelection( id, r [ ihit + i ]- bw / 2, by );
- if( i == 2 ) Overlay.moveSelection( id, r [ ihit + i ]- bw, by );
- }
- if( i >= 3 ) {
- Overlay.getBounds( id, bx, by, bw, bh );
- Overlay.drawLine( 0, r [ ihit + i ], getWidth, r [ ihit + i ] );
- if( i == 3 ) Overlay.moveSelection( id, bx, r [ ihit + i ] );
- if( i == 4 ) Overlay.moveSelection( id, bx, r [ ihit + i ]- bh / 2 );
- if( i == 5 ) Overlay.moveSelection( id, bx, r [ ihit + i ]- bh );
- }
- }
- }
- Overlay.show;
- wait( 20 );
- }
- while( Overlay.size > n ) Overlay.removeSelection( Overlay.size - 1 );
- }
- // a tool to select one or more overlay elements
- // selection is stored in preferences
- // click outside a roi to deselect all
- // a menu tool to align selected overlay elements
-
- macro "Select Overlay Tool - Ce00R22fbC0e0o0044C037L77ffL777aL77a7" {
- getCursorLoc( x, y, z, flags );
- Overlay.removeRois( 'ToolSelectedOverlayElement' );
- Overlay.show;
- n = Overlay.size;
- if( n < 1 ) exit( "Overlay required" );
- id = Overlay.indexAt( x, y );
- if( id < 0 ) {
- selectNone( );
- call( 'ij.Prefs.set', 'overlaytoolset.selected', '' );
- exit( );
- }
- if( flags & 1 > 0 ) {
- Overlay.activateSelection( id );
- if( Roi.getName != 'ToolSelectedOverlayElement' )
- selectElement( id, true );
- } else {
- Overlay.activateSelection( id );
- if( Roi.getName != 'ToolSelectedOverlayElement' )
- selectElement( id, false );
- }
- run( "Select None" );
- highlightSelectedROIs( );
- }
- function highlightSelectedROIs( ) {
- Overlay.removeRois( 'ToolSelectedOverlayElement' );
- selected = getSelectedElements( );
- s = split( selected, ',' );
- //print( selected );
- for( i = 0; i < s.length; i ++ ) {
- id = s [ i ];
- Overlay.getBounds( id, bx, by, bw, bh );
- makeRectangle( bx, by, bw, bh );
- Roi.setName( 'ToolSelectedOverlayElement' );
- Overlay.addSelection( '#90ff0000', 3 );
- }
- run( "Select None" );
- Overlay.show;
- }
- function selectNone( ) {
- Overlay.removeRois( 'ToolSelectedOverlayElement' );
- Overlay.show;
- //call( 'ij.Prefs.set', 'overlaytoolset.selected', '' );
- }
- function selectElement( id, add ) {
- if( add == true ) {
- selected = getSelectedElements( );
- s = split( selected, ',' );
- isSelected = false;
- for( i = 0; i < s.length; i ++ ) {
- if( 1 * s [ i ]== id ) isSelected = true;
- }
- if( ! isSelected ) {
- call( 'ij.Prefs.set', 'overlaytoolset.selected', selected + ',' + id );
- selected = getSelectedElements( );
- } else {
- unselectElement( id );
- }
- } else {
- call( 'ij.Prefs.set', 'overlaytoolset.selected', id );
- }
- highlightSelectedROIs( );
- }
- function unselectElement( id ) {
- selected = getSelectedElements( );
- s = split( selected, ',' );
- selected = '';
- for( i = 0; i < s.length; i ++ ) {
- if( s [ i ]!= id ) selected = selected + s [ i ]+ ',';
- }
- call( 'ij.Prefs.set', 'overlaytoolset.selected', selected );
- selected = getSelectedElements( );
- highlightSelectedROIs( );
- run( "Select None" );
- }
- function getSelectedElements( ) {
- selected = call( 'ij.Prefs.get', 'overlaytoolset.selected', '' );
- while( selected.endsWith( "," ) ) selected = substring( selected, 0, lengthOf( selected )- 1 );
- while( selected.startsWith( "," ) ) selected = substring( selected, 1, lengthOf( selected ) );
- return selected;
- }
- var dCmds = newMenu( "Align Overlay Menu Tool",
- newArray( "Top", "Middle", "Bottom", "-", "Left", "Center", "Right" ) );
- // a menu tool to align selected ROIs
- macro "Align Overlay Menu Tool - C037L00f0R2244R8248" {
- cmd = getArgument( );
- if( cmd == "Top" ) {
- s = getSelectedElements( );
- s = split( s, ',' );
- if( s.length < 1 ) exit( );
- tops = newArray( s.length );
- for( i = 0; i < tops.length; i ++ ) {
- Overlay.getBounds( s [ i ], x, y, w, h );
- tops [ i ]= y;
- }
- //Array.print( tops );
- Array.getStatistics( tops, min, max, mean, stdDev );
- for( i = 0; i < tops.length; i ++ ) {
- Overlay.getBounds( s [ i ], x, y, w, h );
- Overlay.moveSelection( s [ i ], x, min );
- }
- Overlay.show( );
- } else if( cmd == "Bottom" ) {
- s = getSelectedElements( );
- s = split( s, ',' );
- if( s.length < 1 ) exit( );
- tops = newArray( s.length );
- for( i = 0; i < tops.length; i ++ ) {
- Overlay.getBounds( s [ i ], x, y, w, h );
- tops [ i ]= y + h;
- }
- Array.getStatistics( tops, min, max, mean, stdDev );
- for( i = 0; i < tops.length; i ++ ) {
- Overlay.getBounds( s [ i ], x, y, w, h );
- Overlay.moveSelection( s [ i ], x, max - h );
- }
- selectNone( );
- } else if( cmd == "Left" ) {
- s = getSelectedElements( );
- s = split( s, ',' );
- if( s.length < 1 ) exit( );
- tops = newArray( s.length );
- for( i = 0; i < tops.length; i ++ ) {
- Overlay.getBounds( s [ i ], x, y, w, h );
- tops [ i ]= x;
- }
- Array.getStatistics( tops, min, max, mean, stdDev );
- for( i = 0; i < tops.length; i ++ ) {
- Overlay.getBounds( s [ i ], x, y, w, h );
- Overlay.moveSelection( s [ i ], min, y );
- }
- selectNone( );
- } else if( cmd == "Right" ) {
- s = getSelectedElements( );
- s = split( s, ',' );
- if( s.length < 1 ) exit( );
- tops = newArray( s.length );
- for( i = 0; i < tops.length; i ++ ) {
- Overlay.getBounds( s [ i ], x, y, w, h );
- tops [ i ]= x + w;
- }
- Array.getStatistics( tops, min, max, mean, stdDev );
- for( i = 0; i < tops.length; i ++ ) {
- Overlay.getBounds( s [ i ], x, y, w, h );
- Overlay.moveSelection( s [ i ], max - w, y );
- }
- selectNone( );
- } else if( cmd == "Middle" ) {
- s = getSelectedElements( );
- s = split( s, ',' );
- if( s.length < 1 ) exit( );
- Overlay.getBounds( s [ 0 ], x, y, w, h );
- middle = y + h / 2;
- for( i = 0; i < s.length; i ++ ) {
- Overlay.getBounds( s [ i ], x, y, w, h );
- Overlay.moveSelection( s [ i ], x, middle - h / 2 );
- }
- selectNone( );
- } else if( cmd == "Center" ) {
- s = getSelectedElements( );
- s = split( s, ',' );
- if( s.length < 1 ) exit( );
- Overlay.getBounds( s [ 0 ], x, y, w, h );
- center = x + w / 2;
- for( i = 0; i < s.length; i ++ ) {
- Overlay.getBounds( s [ i ], x, y, w, h );
- Overlay.moveSelection( s [ i ], center - w / 2, y );
- }
- selectNone( );
- }
- highlightSelectedROIs( );
- }
- // Click to delete Overlay element
- // A confirm dialog is shown
- // you can choose not to show it.
- macro "Delete Overlay Tool - C037R00ddB58Cd00L0088L0880" {
- getCursorLoc( x, y, z, flags );
- selectNone( );
- call( 'ij.Prefs.set', 'overlaytoolset.selected', '' );
- id = Overlay.indexAt( x, y );
- if( id != - 1 ) {
- showWarning = call( "ij.Prefs.get", "overlaytoolset.deletewarning", true );
- mustDelete = true;
- if( showWarning == true ) {
- Dialog.create( "Delete ROI tool options" );
- Dialog.addCheckbox( "Delete this ROI", true );
- Dialog.addCheckbox( "Show this dialog", showWarning );
- Dialog.show( );
- mustDelete = Dialog.getCheckbox( );
- showWarning = Dialog.getCheckbox( );
- call( "ij.Prefs.set", "overlaytoolset.deletewarning", showWarning );
- }
- if( mustDelete ) Overlay.removeSelection( id );
- }
- }
- macro "Overlay Toolset Help Action Tool - C037T3f18?" {
- html = "<html>" +
- "Toolset Description<br>" +
- "<br><p>* Move overlay tool" +
- "<br>Click and drag an overlay element;" +
- "<br>It snaps to alignment guides to other elements.</p>" +
- "<br><p>* Overlay select tool" +
- "<br>Click an overlay element to select it." +
- "<br>Shift-click to add elements to the selection." +
- "<br>Shift-click a selected element to deselect it.</p>" +
- "<br><p>* Overlay align tool menu" +
- "<br>Use this menu to align selected elements</p>" +
- "<br><p>* Overlay delete tool" +
- "<br>Click to remove an overlay element</p>" +
- "<br><p>* Overlay toolset help action tool" +
- "<br>This dialog. You can leave it open to try toolset functions.</p>" +
- "</html>";
- Dialog.createNonBlocking( "Overlay Toolset Help" );
- Dialog.addMessage( html );
- Dialog.show( );
- }
|