/// <summary> /// creates a "tight" bounding box /// </summary> /// <param name="affectedEntity">the object corresponding to the graph</param> /// <param name="geometryGraph"></param> public void FitGraphBoundingBox(object affectedEntity, GeometryGraph geometryGraph) { if (geometryGraph != null) { UndoRedoAction uAction = new UndoRedoAction(geometryGraph); uAction.Graph = geometryGraph; undoRedoActionsList.AddAction(uAction); Rectangle r = new Rectangle(); foreach (GeomNode n in geometryGraph.NodeMap.Values) { r = n.BoundingBox; break; } foreach (GeomNode n in geometryGraph.NodeMap.Values) { r.Add(n.BoundingBox); } foreach (GeomEdge e in geometryGraph.Edges) { r.Add(e.BoundingBox); if (e.Label != null) { r.Add(e.Label.BoundingBox); } } r.Left -= geometryGraph.Margins; r.Top += geometryGraph.Margins; r.Bottom -= geometryGraph.Margins; r.Right += geometryGraph.Margins; uAction.AffectedObjects = new Set <object>(); uAction.AffectedObjects.Insert(affectedEntity); uAction.GraphBoundingBoxAfter = geometryGraph.BoundingBox = r; } }
internal UndoRedoAction InsertToListAndSetTheBoxBefore(UndoRedoAction action) { UndoRedoActionsList.AddAction(action); action.GraphBoundingBoxBefore = action.Graph.BoundingBox; RaiseChangeInUndoList(); return(action); }
/// <summary> /// preparing for an edge corner dragging /// </summary> /// <param name="geometryEdge"></param> /// <param name="site"></param> /// <returns></returns> public UndoRedoAction PrepareForEdgeCornerDragging(GeomEdge geometryEdge, Site site) { EditedEdge = geometryEdge; UndoRedoAction edgeDragUndoRedoAction = CreateEdgeEditUndoRedoAction(); // var edgeRestoreDate = (EdgeRestoreData) edgeDragUndoRedoAction.GetRestoreData(geometryEdge); // edgeRestoreDate.Site = site; return(InsertToListAndSetTheBoxBefore(edgeDragUndoRedoAction)); }
///// <summary> ///// preparation ///// </summary> //public void PrepareForEditing(object userData) { // UndoRedoAction action=this.undoRedoActionsList.AddAction(CreateUndoRedoAction(userData)); // action.GraphBoundingBoxBefore = action.Graph.BoundingBox; //} /// <summary> /// prepares for node dragging /// </summary> /// <param name="affectedObjects">LayoutEditor just keeps these object for the client convenience</param> /// <param name="markedObjects">markedObjects will be dragged</param> /// <returns></returns> public UndoRedoAction PrepareForObjectDragging(Set <object> affectedObjects, IEnumerable <GeometryObject> markedObjects) { this.EditedEdge = null; ClearDraggedSets(); CalculateDragSetsAndSubscribeToLayoutChangedEvent(markedObjects); UndoRedoAction action = CreateEditUndoRedoAction(affectedObjects); return(InsertToListAndFixTheBox(action)); }
internal UndoRedoAction AddAction(UndoRedoAction action) { if (CurrentUndo != null) CurrentUndo.Next = action; action.Previous = CurrentUndo; CurrentUndo = action; CurrentRedo = null; return action; }
/// <summary> /// preparing for an edge corner dragging /// </summary> /// <param name="affectedObjects"></param> /// <param name="geometryEdge"></param> /// <param name="site"></param> /// <returns></returns> public UndoRedoAction PrepareForEdgeCornerDragging(Set <object> affectedObjects, GeomEdge geometryEdge, Site site) { this.EditedEdge = geometryEdge; UndoRedoAction edgeDragUndoRedoAction = (EdgeDragUndoRedoAction)CreateEdgeEditUndoRedoAction(affectedObjects); EdgeRestoreData edgeRestoreDate = (EdgeRestoreData)edgeDragUndoRedoAction.GetRestoreData(geometryEdge); edgeRestoreDate.Site = site; return(InsertToListAndFixTheBox(edgeDragUndoRedoAction)); }
static void InvalidateActionEditedElems(UndoRedoAction action, InvalidateDelegate invalidateDelegate) { if (action.AffectedObjects != null) { foreach (IViewerObject obj in action.AffectedObjects) { invalidateDelegate(obj); } } }
internal UndoRedoAction AddAction(UndoRedoAction action) { if (CurrentUndo != null) { CurrentUndo.Next = action; } action.Previous = CurrentUndo; CurrentUndo = action; CurrentRedo = null; return(action); }
public void Undo() { if (geomGraphEditor.CanUndo) { UndoRedoAction action = geomGraphEditor.CurrentUndoAction; InvalidateActionEditedElems(action, new InvalidateDelegate(viewer.InvalidateBeforeTheChange)); geomGraphEditor.Undo(); InvalidateActionEditedElems(action, new InvalidateDelegate(viewer.Invalidate)); viewer.OnDragEnd(ActionAffectedObjs(action.AffectedObjects)); if (action.GraphBoundingBoxHasChanged) { viewer.Invalidate(); } } }
/// <summary> /// creates a "tight" bounding box /// </summary> /// <param name="affectedEntity">the object corresponding to the graph</param> /// <param name="geometryGraph"></param> public void FitGraphBoundingBox(IViewerObject affectedEntity, GeometryGraph geometryGraph) { if (geometryGraph != null) { var uAction = new UndoRedoAction(geometryGraph) { Graph = geometryGraph }; UndoRedoActionsList.AddAction(uAction); var r = new Rectangle(); foreach (GeomNode n in geometryGraph.Nodes) { r = n.BoundingBox; break; } foreach (GeomNode n in geometryGraph.Nodes) { r.Add(n.BoundingBox); } foreach (GeomEdge e in geometryGraph.Edges) { r.Add(e.BoundingBox); if (e.Label != null) { r.Add(e.Label.BoundingBox); } } r.Left -= geometryGraph.Margins; r.Top += geometryGraph.Margins; r.Bottom -= geometryGraph.Margins; r.Right += geometryGraph.Margins; uAction.ClearAffectedObjects(); uAction.AddAffectedObject(affectedEntity); uAction.GraphBoundingBoxAfter = geometryGraph.BoundingBox = r; } }
/// <summary> /// creates a "tight" bounding box /// </summary> /// <param name="affectedEntity">the object corresponding to the graph</param> /// <param name="geometryGraph"></param> public void FitGraphBoundingBox(IViewerObject affectedEntity, GeometryGraph geometryGraph) { if (geometryGraph != null) { var uAction = new UndoRedoAction(geometryGraph) {Graph = geometryGraph}; UndoRedoActionsList.AddAction(uAction); var r = new Rectangle(); foreach (GeomNode n in geometryGraph.Nodes) { r = n.BoundingBox; break; } foreach (GeomNode n in geometryGraph.Nodes) { r.Add(n.BoundingBox); } foreach (GeomEdge e in geometryGraph.Edges) { r.Add(e.BoundingBox); if (e.Label != null) r.Add(e.Label.BoundingBox); } r.Left -= geometryGraph.Margins; r.Top += geometryGraph.Margins; r.Bottom -= geometryGraph.Margins; r.Right += geometryGraph.Margins; uAction.ClearAffectedObjects(); uAction.AddAffectedObject(affectedEntity); uAction.GraphBoundingBoxAfter = geometryGraph.BoundingBox = r; } }
internal UndoRedoAction InsertToListAndSetTheBoxBefore(UndoRedoAction action) { UndoRedoActionsList.AddAction(action); action.GraphBoundingBoxBefore = action.Graph.BoundingBox; RaiseChangeInUndoList(); return action; }