ImageJ base code to get access to all the classes and their methods to test new Plugins. https://imagejdocu.tudor.lu/howto/plugins/the_imagej_eclipse_howto
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

281 lines
9.8 KiB

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