[vtk-developers] undo / redo for widgets
Will Schroeder
will.schroeder at kitware.com
Wed Nov 25 14:36:30 EST 2009
Dean-
Well I can imagine any widget benefiting, for example slider widget,
you may want to undo a value change; affine or box widget; reset a
transformation, etc.
Am I answering your question? Doe this make sense?
Will
On Wed, Nov 25, 2009 at 2:32 PM, Dean Inglis <dean.inglis at camris.ca> wrote:
> Hi Will,
>
> I'm breaking this off into a separate thread. What other (VTK) widgets
> and/or instances would it be desirable to have undo redo?
>
> Dean
>
>
>>I'm rethinking my answer on this one, I retract my previous statement
>>:-) I know there is some support for this in the paintbrush widgets; I
>>guess my premature reaction is more of a question: can we step back
>>and think about redo/undo at a higher level across all widgets?
>
>>Will
>
> On Wed, Nov 25, 2009 at 1:46 PM, Will Schroeder
> <will.schroeder at kitware.com> wrote:
>> IMHO Undo/redo is an application level feature. I do not think it
>> belongs in individual classes.
>>
>> If you want to raise a discussion about general approaches for
>> undo/redo that is a different matter.
>>
>> Will
>>
>> On Wed, Nov 25, 2009 at 1:33 PM, Dean Inglis <dean.inglis at sympatico.ca>
> wrote:
>>> Hi all,
>>>
>>> I would like to add undo redo capability for vtkContourWidget. The
>>> implementation would be to have vtkContourRepresentation's internals
>>> modified as follows:
>>> 1) add Copy methods to the vtkContourRepresentationNode:
>>>
>>> void Copy( vtkContourRepresentationNode* node )
>>> {
>>> vtkstd::vector< vtkContourRepresentationPoint* > points =
> node->Points;
>>> vtkstd::vector< vtkContourRepresentationPoint* >::iterator it1, it2;
>>>
>>> memcpy( this->WorldPosition, node->WorldPosition, 3 * sizeof( double )
>>> );
>>> memcpy( this->WorldOrientation, node->WorldOrientation, 9 * sizeof(
>>> double ) );
>>> memcpy( this->NormalizedDisplayPosition,
>>> node->NormalizedDisplayPosition, 2 * sizeof( double ) );
>>> this->Selected = node->Seleced;
>>>
>>> this->Points.resize( points.size() );
>>> for( it1 = points.begin(), it2 = this->Points.begin();
>>> it1 != points.end() && it2 != this->Points.end();
>>> it1++, it2++ )
>>> {
>>> ( *it2 ) = new vtkContourRepresentationPoint;
>>> memcpy( ( *it2 )->WorldPosition, ( *it1 )->WorldPosition,
>>> 3 * sizeof( double ) );
>>> memcpy( ( *it2 )->NormalizedDisplayPosition, ( *it1
>>> )->NormalizedDisplayPosition,
>>> 2 * sizeof( double ) );
>>> }
>>> }
>>>
>>> and the vtkContourRepresentationInternals:
>>>
>>> void Copy( vtkContourRepresentationInternals* internal )
>>> {
>>> vtkstd::vector< vtkContourRepresentationNode* > nodes =
> internal->Nodes;
>>> vtkstd::vector< vtkContourRepresentationNode* >::iterator it1, it2;
>>>
>>> this->Nodes.resize( nodes.size() );
>>> for( it1 = nodes.begin(), it2 = this->Nodes.begin();
>>> it1 != nodes.end() && it2 != this->Nodes.end();
>>> it1++, it2++ )
>>> {
>>> ( *it2 ) = new vtkContourRepresentationNode;
>>> ( *it2 )->Copy( *it1 );
>>> }
>>> }
>>>
>>> and implement the following:
>>>
>>> // Description:
>>> // Records the current layout of nodes adding them to the node history
>>> list
>>> // so that they can be undone/redone.
>>> virtual void TakeSnapshot();
>>>
>>> // Description:
>>> // A history of changes to the layout of nodes is kept internally and
>>> // externally by calling TakeSnapshot().
>>> // These two methods are used to go back to earlier changes to the
> contour
>>> // or return to more recent ones.
>>> virtual void Undo();
>>> virtual void Redo();
>>>
>>> // Description:
>>> // Methods to determine whether there is any history left to undo or
> redo.
>>> virtual int CanUndo();
>>> virtual int CanRedo();
>>>
>>> by maintaining protected members:
>>>
>>> //BTX
>>> vtkstd::vector< vtkContourRepresentationInternals* >
>>> InternalHistory;
>>> vtkstd::vector< vtkContourRepresentationInternals* >::iterator
>>> InternalHistoryIterator;
>>> //ETX
>>>
>>> Also, can the SelectedNodesCursorShape be exposed through the public API
>>> of vtkOrientedGlyphContourRepresentation as is done for SetCursorShape
> and
>>> SetActiveCursorShape ?
>>>
>>> Dean
>>>
>>> _______________________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.vtk.org/mailman/listinfo/vtk-developers
>>>
>>>
>>
>>
>>
>> --
>> William J. Schroeder, PhD
>> Kitware, Inc.
>> 28 Corporate Drive
>> Clifton Park, NY 12065
>> will.schroeder at kitware.com
>> http://www.kitware.com
>> (518) 881-4902
>>
>
>
>
> --
> William J. Schroeder, PhD
> Kitware, Inc.
> 28 Corporate Drive
> Clifton Park, NY 12065
> will.schroeder at kitware.com
> http://www.kitware.com
> (518) 881-4902
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtk-developers
>
>
--
William J. Schroeder, PhD
Kitware, Inc.
28 Corporate Drive
Clifton Park, NY 12065
will.schroeder at kitware.com
http://www.kitware.com
(518) 881-4902
More information about the vtk-developers
mailing list