/// <summary>
 /// redoes the editing
 /// </summary>
 public override void Redo()
 {
     base.Redo();
     foreach (GeometryObject geomObj in movedObjects)
     {
         GeomNode node = geomObj as GeomNode;
         if (node != null)
         {
             GeometryGraphEditor.DragNode(node, Delta, GetRestoreData(node) as NodeRestoreData);
             foreach (GeomEdge edge in node.OutEdges)
             {
                 GeometryGraphEditor.DragEdgeWithSource(Delta, edge, GetRestoreData(edge) as EdgeRestoreData);
             }
             foreach (GeomEdge edge in node.InEdges)
             {
                 GeometryGraphEditor.DragEdgeWithTarget(Delta, edge, GetRestoreData(edge) as EdgeRestoreData);
             }
             foreach (GeomEdge edge in node.SelfEdges)
             {
                 GeometryGraphEditor.DragEdge(Delta, edge, GetRestoreData(edge) as EdgeRestoreData, movedObjects);
             }
         }
         else
         {
             GeomEdge edge = geomObj as GeomEdge;
             if (edge != null)
             {
                 GeometryGraphEditor.DragEdge(Delta, edge, GetRestoreData(edge) as EdgeRestoreData, movedObjects);
             }
             else
             {
                 GeomLabel label = geomObj as GeomLabel;
                 if (label != null)
                 {
                     GeometryGraphEditor.DragLabel(label, Delta, (GetRestoreData(label) as LabelRestoreData).Center);
                 }
                 else
                 {
                     throw new System.NotImplementedException();
                 }
             }
         }
     }
 }
        /// <summary>
        /// Undoes the editing
        /// </summary>
        public override void Undo()
        {
            base.Undo();
            Point point = new Point();

            foreach (GeometryObject geomObj in movedObjects)
            {
                GeomNode node = geomObj as GeomNode;
                if (node != null)
                {
                    GeometryGraphEditor.DragNode(node, point, GetRestoreData(node) as NodeRestoreData);
                    foreach (GeomEdge edge in node.Edges)
                    {
                        RestoreEdge(edge);
                    }
                }
                else
                {
                    GeomEdge edge = geomObj as GeomEdge;
                    if (edge != null)
                    {
                        GeometryGraphEditor.DragEdge(point, edge, GetRestoreData(edge) as EdgeRestoreData, movedObjects);
                    }
                    else
                    {
                        GeomLabel label = geomObj as GeomLabel;
                        if (label != null)
                        {
                            GeometryGraphEditor.DragLabel(label, point, (GetRestoreData(label) as LabelRestoreData).Center);
                        }
                        else
                        {
                            throw new System.NotImplementedException();
                        }
                    }
                }
            }
        }