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

Reply via email to