[vtkusers] How to remove points/handle from one vtkDistanceWidget or vtkAngleWidget?

Karthik Krishnan karthik.krishnan at kitware.com
Tue Jul 20 13:47:04 EDT 2010


Arnaud:

The attached example works.

Please make sure you "git pull" now. I just fixed a bug (thanks to your use
case) when the widget is defined prior to enabling it.

I rearranged a few lines in your example code, (removed the
interactor->Start() being called twice etc, added a prop so the camera
doesn't go out of whack), nothing significant.

--------
  commit d832206da3502f395281e447e28305d11ff301c6
  Author: Karthik Krishnan <karthik.krishnan at kitware.com>
  Date:   Tue Jul 20 23:10:00 2010 +0530

      ENH: The interactor must be set before enabling the widget.

      When the method WidgetIsDefined() is called (ie the widget is defined
      programmatically) and then the method SetEnabled is invoked, we run
      into a bug, in that the internal HandleWidgets are enabled without
      having their interactors set. Hence propagate the interactor from self
      into the child widgets always.
---------

Thanks for the feedback.
--
karthik


On Tue, Jul 20, 2010 at 9:52 PM, Arnaud GELAS
<arnaud_gelas at hms.harvard.edu>wrote:

>  Hi Karthik,
>
> Thanks for looking at it!
>
> I have been trying it (by modifying the example from the wiki), but it's
> still not clear to me what has changed in the behaviour of the window? and
> how to "reinitialize the widget"?
> I guess I may have made mistakes in the code. Can you have a look and tell
> me what I am doing wrong, please?
>
> Thanks,
> Arnaud
>
>
>
> On 07/19/2010 02:44 PM, Karthik Krishnan wrote:
>
> Arnaud:
>
> I just pushed a bunch of changes. The class vtkDistanceWidget,
> vtkAngleWidget and vtkBiDimensionalWidget all now have the following two
> methods :
>
>   // Description:
>   // Set the state of the widget to "defined" (in case its widget and its
>   // representation were initialized programmatically). This must generally
>   // be followed by a Render() for things to visually take effect.
>   virtual void WidgetIsDefined();
>
>   // Description:
>   // Has the widget been defined completely yet ? ie. Have the end points
> been
>   // laid and is it in Manipulate mode ?
>   virtual int IsWidgetDefined();
>
>
> So what you can do is :
>
>  representation->SetPoint1WorldPosition(...)
>  representation->SetPoint2WorldPosition(...)
>  distanceWidget->SetRepresentation(representation);
>  distanceWidget->EnabledOn();
>  distanceWidget->WidgetIsDefined();
>  distanceWidget->Render();
>
> Internally, the WidgetIsDefined() call, sets the widget state to
> "manipulate", releases any focus that it may have grabbed during the define
> phase, builds the representation and shows/hides the handles properly.
>
> The same is the case for the other 2 widgets....
>
> If I can slowly add it to a good number of widgets (several widgets have a
> "define" phase during which their query is invalid), then I'd like to make
> this a default no-op method in the base class, vtkAbstractWidget, so that
> subclasses can implement it in whatever way they choose to.
>
> Please let me know if you have any issues.
>
> Thanks
> --
> karthik
>
>
> On Fri, Jul 16, 2010 at 12:38 AM, Karthik Krishnan <
> karthik.krishnan at kitware.com> wrote:
>
>> Yes. That's missing and its an often needed feature. I'll add this
>> functionality in tomorrow Arnaud.
>>
>> Thanks
>> --
>> karthik
>>
>>
>> On Thu, Jul 15, 2010 at 7:37 PM, Arnaud GELAS <
>> arnaud_gelas at hms.harvard.edu> wrote:
>>
>>>  Actually I am more interested in being able to reinitialize these
>>> widgets.
>>> For instance, when you want to measure different objects that are far
>>> apart, and I guess it would be faster to reinitialize the widget than to
>>> drag these points to another part of my image (quite far from here).
>>>
>>> How should I proceed?
>>>
>>> Thanks,
>>> Arnaud
>>>
>>>
>>> On 07/15/2010 09:56 AM, Karthik Krishnan wrote:
>>>
>>> How can the widget exist in a valid state without its end points ? Do you
>>> mean you want to re-define the widget from start in response to a key press
>>> ?
>>>
>>> Please let us know.
>>>
>>> Thanks
>>> --
>>> karthik
>>>
>>> On Thu, Jul 15, 2010 at 7:21 PM, Arnaud GELAS <
>>> arnaud_gelas at hms.harvard.edu> wrote:
>>>
>>>> Hi all,
>>>>
>>>> I would like to be able to
>>>>  * delete points/handles from these widgets with a key
>>>>  * reinitialize these widgets without any points/handle on the screen.
>>>>
>>>> I could not figure out how to proceed?
>>>> Is it possible with the existing code?
>>>>
>>>> Thanks,
>>>>
>>>> Best Regards,
>>>> Arnaud
>>>> _______________________________________________
>>>> Powered by www.kitware.com
>>>>
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Please keep messages on-topic and check the VTK FAQ at:
>>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>>>
>>>
>>>
>>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100720/40340b32/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: DistanceWidget.cxx
Type: text/x-c++src
Size: 2005 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100720/40340b32/attachment.cxx>


More information about the vtkusers mailing list