Dear ImageJ developers,
I have included code from the AddROIs tutorial into the main()
method of my plugin (for the moment essentially one of Curtis'
commands-with-preview example), to select a Rectangle before
calling the plugin. The source is available here:
https://gitlab.com/pendant-drop/pendant-drop
(in Goutte_pendante.java)
If I launch the default UI, then the ROI will not show, but the
plugin can launch. If on the other hand I launch the "swing" UI
as in the tutorial, I do see the ROI (not until I call
Image>Adjust>Brightness/Contrast..., but that's a minor detail),
but now the invocation of the plugin at the end of main() will
throw a MethodCallException with the stackTrace pasted below. How
can the choice of a UI make the plugin execution fail ?
Is there any other way that main can set a ROI on a loaded image
that the plugin, which still uses an ImagePlus as input
parameter, will see when calling imp.getProcessor().getRoi() ?
TIA
Adrian
$> mvn package
$> fiji --class-path target/pendant_drop-2.0.0-SNAPSHOT.jar
Goutte_pendante.class
[INFO] Overriding About Pendant Drop; identifier:
command:About_Pendant_Drop; jar:
file:/home/adrian/Programmes/plugins_ImageJ_src/Traitement_Gouttes/target/pendant_drop-2.0.0-SNAPSHOT.jar
[INFO] Overriding Pendant Drop; identifier: command:Goutte_pendante;
jar:
file:/home/adrian/Programmes/plugins_ImageJ_src/Traitement_Gouttes/target/pendant_drop-2.0.0-SNAPSHOT.jar
[INFO] Populating metadata
[INFO] Populating metadata
[INFO] Found 10 JHotDraw adapters.
org.scijava.module.MethodCallException: Error executing method:
Goutte_pendante#initTitle
at org.scijava.module.MethodRef.execute(MethodRef.java:73)
at
org.scijava.module.AbstractModuleItem.initialize(AbstractModuleItem.java:199)
at
org.scijava.module.AbstractModule.initialize(AbstractModule.java:86)
at
org.scijava.command.CommandModule.initialize(CommandModule.java:147)
at
org.scijava.module.process.InitPreprocessor.process(InitPreprocessor.java:60)
at
org.scijava.module.ModuleRunner.preProcess(ModuleRunner.java:104)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:156)
at
org.scijava.module.ModuleRunner.call(ModuleRunner.java:126)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:65)
at
org.scijava.thread.DefaultThreadService$2.call(DefaultThreadService.java:191)
at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.scijava.module.MethodRef.execute(MethodRef.java:69)
... 14 more
Caused by: java.lang.NullPointerException
at Goutte_pendante.initTitle(Goutte_pendante.java:94)
... 19 more
[ERROR] Module threw exception
java.lang.NullPointerException
at Goutte_pendante.cancel(Goutte_pendante.java:87)
at
org.scijava.command.CommandModule.cancel(CommandModule.java:140)
at
org.scijava.module.ModuleRunner.cleanupAndBroadcastCancelation(ModuleRunner.java:189)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:161)
at
org.scijava.module.ModuleRunner.call(ModuleRunner.java:126)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:65)
at
org.scijava.thread.DefaultThreadService$2.call(DefaultThreadService.java:191)
at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
On Sat, 15 Aug 2015 13:14:13 +0200
Adrian Daerr <adrian.da...@univ-paris-diderot.fr> wrote:
Hello,
I am seizing a major rewrite of a plugin as an opportunity to switch
from ImageJ1 to ImageJ2, also to avoid concurrency issues[*], and
now
lots of questions come up. Some concern the way ROIs are handled.
What
has happened in this regard since
http://imagej.net/ROIs
was last updated ?
[*] cf discussion on the ImageJ list archived at
http://imagej.1557.x6.nabble.com/ExtendedPlugInFilter-GenericDialog-and-synchronization-td5013333.html
Here are two concrete questions:
1) My plugin relies on a rectangular ROI being drawn on the image to
know which area to include in the computation. How do I draw this
ROI
once I have loaded the image as a dataset in the main() method that
is
used for testing purposes ?
public static void main(final String... args) throws Exception {
final String testImagePath = "testImage.jpg";
// Launch ImageJ as usual.
final ImageJ ij = net.imagej.Main.launch(args);
// Open test image.
final Dataset dataset = ij.dataset().open(testImagePath);
// display the dataset
ij.ui().show(dataset);
// create rectangular ROI
//imp.setRoi(120,60,340,420);// How to do this on a dataset ?
// Launch the "Foo_Bar" command.
ij.command().run(Foo_Bar.class, true);
}
(alternatively, how would I generate a new dataset, or I guess
something like a "View" in ImageJ2 terminology, of the ROI sub-image
of the original dataset ? I could then substitute the original
dataset with this sub-image and have the plugin operate on the whole
image by default)
2) The plugin preview generates overlays using java.awt.geom.Path2D,
java.awt.geom.Area and java.awt.Shape, which are then converted via
ij.gui.ShapeRoi() and ij.gui.Overlay(), assembled with
overlay.add(),
and drawn using imp.setOverlay(). Is there a new IJ2-way to do this
(especially since the cited web page (rightly) insists on separation
of selection and visualisation shapes) ?
TIA,
Adrian
_______________________________________________
ImageJ-devel mailing list
ImageJ-devel@imagej.net
http://imagej.net/mailman/listinfo/imagej-devel
--
http://www.msc.univ-paris-diderot.fr/~daerr/
_______________________________________________
ImageJ-devel mailing list
ImageJ-devel@imagej.net
http://imagej.net/mailman/listinfo/imagej-devel