<div dir="ltr">Hi Adrian,<div><br></div><div><div>> Thanks for the suggestion, which almost does the job, except that the</div><div>> initialization also depends on a parameter</div><div>> </div><div>> @Parameter(persist = false) private RectangleOverlay roi;</div><div>> </div><div>> which appears to be populated only after the initializer is called</div><div><div>> (its value is null in the initializer and valid in the run() method).</div></div></div><div><br></div><div>Hmm, that should not be the case. Commands that include a single overlay parameter should automatically draw from the active image's active overlay, when possible [1]. This happens _before_ the initializers are called [2] (because Priority.VERY_HIGH_PRIORITY > Priority.HIGH_PRIORITY).</div><div><br></div><div>The issue might be typing-related: try using Overlay instead of RectangleOverlay and see if that makes a difference. If so, it is probably a limitation of the ActiveOverlayPreprocessor [1]; patches welcome.</div><div><br></div><div>Alternately: can you post an MVCE [3, 4] illustrating the issue?</div><div><br></div><div>> <span style="font-size:12.8000001907349px">do I have to write a Preprocessor of some sorts</span></div><div><span style="font-size:12.8000001907349px"><br></span></div><div><span style="font-size:12.8000001907349px">This is certainly possible to do, but I would hope not necessary.</span></div><div><span style="font-size:12.8000001907349px"><br></span></div><div><div><span style="font-size:12.8000001907349px">> can the initializer 'manually' call the code which normally harvest</span></div><div><span style="font-size:12.8000001907349px">> the RectangleOverlay parameter later on ?</span></div><div style="font-size:12.8000001907349px"><br></div></div><div style="font-size:12.8000001907349px">Sure, you can always code in whatever logic you want to the plugin initializer method. But again, hopefully not necessary in this case.</div><div><br></div><div><div>> even after some reading of the tutorials and the scijava source code</div><div>> around org.scijava.command.CommandInfo my understanding of how the</div><div>> plugin initialisation works is still poor.</div></div><div><br></div><div>I am sorry—the tutorials need to be improved. What sort of tutorial do you think would aid your understanding here? The "execute-commands" and "custom-preprocessor-plugin" tutorials are probably touch on these topics most closely, although neither provides a real overview of the pre-/post-processing chain in conjunction with module execution.</div><div><br></div><div><div>> Would it make sense to distinguish (by an annotation ?) parameters</div><div>> that are to be initialized from the context (i.e. services, active</div><div>> image, roi etc), and whose lack should be immediately fatal to the</div><div>> plugin (no UI harvesting, and in exchange can be assumed final for the</div><div>> rest of the command execution), from parameters that, if they cannot</div><div>> be populated from already available data, should be harvested through</div><div>> a dialog (and may change several times) ?</div></div><div><br></div><div>Potentially, yes. Feel free to comment on the issue on GitHub!</div><div><br></div><div>Regards,</div><div>Curtis</div><div><br></div><div>[1] <a href="https://github.com/imagej/imagej-common/blob/imagej-common-0.15.1/src/main/java/net/imagej/display/process/ActiveOverlayPreprocessor.java#L57">https://github.com/imagej/imagej-common/blob/imagej-common-0.15.1/src/main/java/net/imagej/display/process/ActiveOverlayPreprocessor.java#L57</a></div><div><br></div><div>[2] <a href="https://github.com/scijava/scijava-common/blob/scijava-common-2.44.2/src/main/java/org/scijava/module/process/InitPreprocessor.java#L49">https://github.com/scijava/scijava-common/blob/scijava-common-2.44.2/src/main/java/org/scijava/module/process/InitPreprocessor.java#L49</a></div><div><br></div><div>[3] <a href="http://imagej.net/Bug_reporting_best_practices">http://imagej.net/Bug_reporting_best_practices</a><br></div><div><div><br></div><div>[4] <a href="http://stackoverflow.com/help/mcve">http://stackoverflow.com/help/mcve</a></div></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 24, 2015 at 9:07 AM, Adrian Daerr <span dir="ltr"><<a href="mailto:adrian.daerr@univ-paris-diderot.fr" target="_blank">adrian.daerr@univ-paris-diderot.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Curtis,<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I have parameters a, b, c whose initialisation depend on a common<br>
calculation (depending on the image gotten through a previous<br>
@Parameter ImagePlus imp): can I do this calculation in the<br>
initialiser for the first parameter a, and then in the initialisers of b and c rely on the fact that the calculation was already done ?<br>
</blockquote>
<br>
Perhaps simplest at the moment would be to give your command a global initializer -- i.e., set the initializer method in the<br>
@Plugin annotation itself, rather than on specific parameters.<br>
The ImagePlus will be populated by a preprocessor _before_ the<br>
initialize method is called, so when your global initializer gets<br>
called you will already have access to the ImagePlus.<br>
</blockquote>
<br></span>
Thanks for the suggestion, which almost does the job, except that the initialization also depends on a parameter<br>
<br>
@Parameter(persist = false) private RectangleOverlay roi;<br>
<br>
which appears to be populated only after the initializer is called (its value is null in the initializer and valid in the run() method).<br>
<br>
I am not sure how to solve this: do I have to write a Preprocessor of some sorts, or can the initializer 'manually' call the code which normally harvest the RectangleOverlay parameter later on ? Somehow the fact that ImagePlus is populated by a Preprocessor but RectangleOverlay isn't, seems linked to issues that I mentionned in another post[1], but even after some reading of the tutorials and the scijava source code around org.scijava.command.CommandInfo my understanding of how the plugin initialisation works is still poor.<br>
<br>
[1]<br>
(e.g. that the Overlay appears in the harvesting dialog, or that an Exception is thrown because of the overlay after command execution)<br>
<a href="http://imagej-devel.54429.x6.nabble.com/Masking-Parameter-from-GUI-harvesting-td1098.html" rel="noreferrer" target="_blank">http://imagej-devel.54429.x6.nabble.com/Masking-Parameter-from-GUI-harvesting-td1098.html</a><span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
But again, scijava/scijava-common#181 is very relevant here.<br>
</blockquote>
<br></span>
Would it make sense to distinguish (by an annotation ?) parameters that are to be initialized from the context (i.e. services, active image, roi etc), and whose lack should be immediately fatal to the plugin (no UI harvesting, and in exchange can be assumed final for the rest of the command execution), from parameters that, if they cannot be populated from already available data, should be harvested through a dialog (and may change several times) ?<br>
<br>
cheers,<br>
Adrian<br>
</blockquote></div><br></div>