Dear all,
I have a plugin where I want to associate a RoiListener to two given ImagePlus within a plugin (having at least 4 ImagePlus). In the case I write .addRoiListener(this); to the 2 ImagePlus I want to listen, I get then always 2 "detections" within the public void roiModified method. As if I associate the .addRoiListener(this); to only one picture, I get then 1 "detection" within the public void roiModified method and this on both pictures (i.e. even the one on which I didn't add a RoiListener). So is this behavior expected and thus am I doing something wrong or is it a bug? Besides this let's say a user defines a rectangular ROI within one of these 2 ImagePlus and then clicks next to the already created ROI which then deletes the previously defined Roi. I would then expect that if you use the method .getRoi() on this ImagePlus, the result will be null, but in fact the method returns a Roi which (when using the method .getBounds()) has the same origin than the previous one but a width and height equal to 0. Is this as well expected or a bug? I thank you very much for your lighting on this. My best regards, Philippe Philippe CARL Laboratoire de Bioimagerie et Pathologies UMR 7021 CNRS - Université de Strasbourg Faculté de Pharmacie 74 route du Rhin 67401 ILLKIRCH Tel : +33(0)3 68 85 41 84 -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Hi Philippe,
both the ImagePlus.addImageListener as well as the Roi.addRoiListener methods are static, which means that they are not related to a specific image or ROI, but you will get the events for *all* images (and *all* rois). If you call one of these add... methods multiple times, you will also get the events multiple times. I did not try, but I guess that if a ROI gets deleted, you should get a roiModified call with id=DELETED and a non-null ROI (the one that got deleted). In any case, I think that the easiest way of writing a roiModified method would be to retrieve the corresponding ImagePlus with roi.getImage() and then, if that image is relevant for the current code, use imp.getRoi() to retrieve the current Roi of that image. Beware that the return value of roi.getImage() may be null. Michael ________________________________________________________________ On 21.10.19 16:39, CARL Philippe (LBP) wrote: > Dear all, > > I have a plugin where I want to associate a RoiListener to two given ImagePlus within a plugin (having at least 4 ImagePlus). > In the case I write .addRoiListener(this); to the 2 ImagePlus I want to listen, I get then always 2 "detections" within the public void roiModified method. > As if I associate the .addRoiListener(this); to only one picture, I get then 1 "detection" within the public void roiModified method and this on both pictures (i.e. even the one on which I didn't add a RoiListener). > So is this behavior expected and thus am I doing something wrong or is it a bug? > > Besides this let's say a user defines a rectangular ROI within one of these 2 ImagePlus and then clicks next to the already created ROI which then deletes the previously defined Roi. > I would then expect that if you use the method .getRoi() on this ImagePlus, the result will be null, but in fact the method returns a Roi which (when using the method .getBounds()) has the same origin than the previous one but a width and height equal to 0. > Is this as well expected or a bug? > > I thank you very much for your lighting on this. > > My best regards, > > Philippe > > > > Philippe CARL > Laboratoire de Bioimagerie et Pathologies > UMR 7021 CNRS - Université de Strasbourg > Faculté de Pharmacie > 74 route du Rhin > 67401 ILLKIRCH > Tel : +33(0)3 68 85 41 84 > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Hi Michael,
How are you doing? I thank you very much for your very detailled explanations. Actually with the roiListenner method I'm using is the following method: public void roiModified(ImagePlus imp, int id) which already gives me a handle to the given ImagePlus. But I completely missed the fact that the Roi.addRoiListenner was a static method and thus I wrongly thought that I needed to activate it for each ImagePlus I want to listen. Thus for each detected Roi event I got 2 outputs within the method which is obvious now that I got your explanations. The answer of Wayne already linked me to my mistake but your answer gave me even further explanations on this. Very obviously my knowledge of the listenner classes is still perfectible!!! Also, if you don't mind I would have another listenner issue where you could help me. I added a MouseListener to a picture canvas and look what is hapenning within the following method: public void mouseClicked(MouseEvent evt) But I would like to push things even further, i.e. know whether a given detected click has been done inside a ROI of a given picture in which case I do something and if not I just do nothing. Thus, how can I get a handle to know whether this click has been detected within a given picture (and then use a getRoi() method) and if this is the case which picture? I thank you very much in advance for your lighting on this. Kindest regards, Philippe Philippe CARL Laboratoire de Bioimagerie et Pathologies UMR 7021 CNRS - Université de Strasbourg Faculté de Pharmacie 74 route du Rhin 67401 ILLKIRCH Tel : +33(0)3 68 85 41 84 ----- Mail original ----- De: "Michael Schmid" <[hidden email]> À: "imagej" <[hidden email]> Envoyé: Mardi 22 Octobre 2019 11:02:00 Objet: Re: Possible bugs within RoiListener and Roi Hi Philippe, both the ImagePlus.addImageListener as well as the Roi.addRoiListener methods are static, which means that they are not related to a specific image or ROI, but you will get the events for *all* images (and *all* rois). If you call one of these add... methods multiple times, you will also get the events multiple times. I did not try, but I guess that if a ROI gets deleted, you should get a roiModified call with id=DELETED and a non-null ROI (the one that got deleted). In any case, I think that the easiest way of writing a roiModified method would be to retrieve the corresponding ImagePlus with roi.getImage() and then, if that image is relevant for the current code, use imp.getRoi() to retrieve the current Roi of that image. Beware that the return value of roi.getImage() may be null. Michael ________________________________________________________________ On 21.10.19 16:39, CARL Philippe (LBP) wrote: > Dear all, > > I have a plugin where I want to associate a RoiListener to two given ImagePlus within a plugin (having at least 4 ImagePlus). > In the case I write .addRoiListener(this); to the 2 ImagePlus I want to listen, I get then always 2 "detections" within the public void roiModified method. > As if I associate the .addRoiListener(this); to only one picture, I get then 1 "detection" within the public void roiModified method and this on both pictures (i.e. even the one on which I didn't add a RoiListener). > So is this behavior expected and thus am I doing something wrong or is it a bug? > > Besides this let's say a user defines a rectangular ROI within one of these 2 ImagePlus and then clicks next to the already created ROI which then deletes the previously defined Roi. > I would then expect that if you use the method .getRoi() on this ImagePlus, the result will be null, but in fact the method returns a Roi which (when using the method .getBounds()) has the same origin than the previous one but a width and height equal to 0. > Is this as well expected or a bug? > > I thank you very much for your lighting on this. > > My best regards, > > Philippe > > > > Philippe CARL > Laboratoire de Bioimagerie et Pathologies > UMR 7021 CNRS - Université de Strasbourg > Faculté de Pharmacie > 74 route du Rhin > 67401 ILLKIRCH > Tel : +33(0)3 68 85 41 84 > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
On 22.10.19 14:01, CARL Philippe (LBP) wrote:
> public void mouseClicked(MouseEvent evt) > But I would like to push things even further, i.e. know whether a given detected click has been done inside a ROI of a given picture in which case I do something and if not I just do nothing. Hi Philippe, with the MouseEvent you get a handle to the ImageCanvas via evt.getSource(). You can then convert the coordinates of the event with imageCanvas.offScreenX(screenX), and same for y. You can look at ImageCanvas.mouseMoved for an example. Finally, roi.contains(x,y) tells you whether the mouse was pressed inside the Roi. If the current tool is e.g. the Rectangle or Oval tool, note that clicking outside the roi will delete the roi. Of course, this is not an issue if you write a PlugInTool. By the way, mousePressed is called when the mouse button goes down; mouseClicked after it is pressed *and* released. In many cases, it is nicer to use mousePressed, but it depends on the application. Michael ________________________________________________________________ On 22.10.19 14:01, CARL Philippe (LBP) wrote: > Hi Michael, > How are you doing? > I thank you very much for your very detailled explanations. > Actually with the roiListenner method I'm using is the following method: > public void roiModified(ImagePlus imp, int id) > which already gives me a handle to the given ImagePlus. > But I completely missed the fact that the Roi.addRoiListenner was a static method and thus I wrongly thought that I needed to activate it for each ImagePlus I want to listen. > Thus for each detected Roi event I got 2 outputs within the method which is obvious now that I got your explanations. > The answer of Wayne already linked me to my mistake but your answer gave me even further explanations on this. > Very obviously my knowledge of the listenner classes is still perfectible!!! > Also, if you don't mind I would have another listenner issue where you could help me. > I added a MouseListener to a picture canvas and look what is hapenning within the following method: > public void mouseClicked(MouseEvent evt) > But I would like to push things even further, i.e. know whether a given detected click has been done inside a ROI of a given picture in which case I do something and if not I just do nothing. > Thus, how can I get a handle to know whether this click has been detected within a given picture (and then use a getRoi() method) and if this is the case which picture? > I thank you very much in advance for your lighting on this. > Kindest regards, > Philippe > > Philippe CARL > Laboratoire de Bioimagerie et Pathologies > UMR 7021 CNRS - Université de Strasbourg > Faculté de Pharmacie > 74 route du Rhin > 67401 ILLKIRCH > Tel : +33(0)3 68 85 41 84 > > ----- Mail original ----- > De: "Michael Schmid" <[hidden email]> > À: "imagej" <[hidden email]> > Envoyé: Mardi 22 Octobre 2019 11:02:00 > Objet: Re: Possible bugs within RoiListener and Roi > > Hi Philippe, > > both the ImagePlus.addImageListener as well as the Roi.addRoiListener > methods are static, which means that they are not related to a specific > image or ROI, but you will get the events for *all* images (and *all* rois). > > If you call one of these add... methods multiple times, you will also > get the events multiple times. > > I did not try, but I guess that if a ROI gets deleted, you should get a > roiModified call with id=DELETED and a non-null ROI (the one that got > deleted). > In any case, I think that the easiest way of writing a roiModified > method would be to retrieve the corresponding ImagePlus with > roi.getImage() and then, if that image is relevant for the current code, > use imp.getRoi() to retrieve the current Roi of that image. > Beware that the return value of roi.getImage() may be null. > > Michael > ________________________________________________________________ > On 21.10.19 16:39, CARL Philippe (LBP) wrote: >> Dear all, >> >> I have a plugin where I want to associate a RoiListener to two given ImagePlus within a plugin (having at least 4 ImagePlus). >> In the case I write .addRoiListener(this); to the 2 ImagePlus I want to listen, I get then always 2 "detections" within the public void roiModified method. >> As if I associate the .addRoiListener(this); to only one picture, I get then 1 "detection" within the public void roiModified method and this on both pictures (i.e. even the one on which I didn't add a RoiListener). >> So is this behavior expected and thus am I doing something wrong or is it a bug? >> >> Besides this let's say a user defines a rectangular ROI within one of these 2 ImagePlus and then clicks next to the already created ROI which then deletes the previously defined Roi. >> I would then expect that if you use the method .getRoi() on this ImagePlus, the result will be null, but in fact the method returns a Roi which (when using the method .getBounds()) has the same origin than the previous one but a width and height equal to 0. >> Is this as well expected or a bug? >> >> I thank you very much for your lighting on this. >> >> My best regards, >> >> Philippe >> >> >> >> Philippe CARL >> Laboratoire de Bioimagerie et Pathologies >> UMR 7021 CNRS - Université de Strasbourg >> Faculté de Pharmacie >> 74 route du Rhin >> 67401 ILLKIRCH >> Tel : +33(0)3 68 85 41 84 >> >> -- >> ImageJ mailing list: http://imagej.nih.gov/ij/list.html >> > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Free forum by Nabble | Edit this page |