private void AnalyzeLeftMouseButtonClick() { bool modifierKeyIsPressed = ModifierKeyIsPressed(); IViewerObject obj = viewer.ObjectUnderMouseCursor; if (obj != null) { IViewerEdge editableEdge = obj as IViewerEdge; if (editableEdge != null) { SwitchToEdgeEditing(editableEdge); } else { if (obj.MarkedForDragging) { UnselectObjectForDragging(obj); } else { if (!modifierKeyIsPressed) { UnselectEverything(); } SelectObjectForDragging(obj); } UnselectEdge(); } } }
void SetEdgeDragDecorator(IViewerEdge viewerEdge) { if (viewerEdge is DEdge dEdge) { EdgeSelected?.Invoke(this, new EdgeEventArgs(dEdge.DrawingEdge)); } }
void TheDefaultObjectDecorator(Microsoft.Msagl.Drawing.IViewerObject obj) { this.viewer.InvalidateBeforeTheChange(obj); IViewerNode node = obj as IViewerNode; if (node != null) { Node drawingNode = node.Node; double w = drawingNode.Attr.LineWidth; decoratorRemovalsDict[node] = (delegate() { drawingNode.Attr.LineWidth = (int)w; }); drawingNode.Attr.LineWidth = (int)Math.Max(viewer.LineThicknessForEditing, w * 2); } else { IViewerEdge edge = obj as IViewerEdge; if (edge != null) { Edge drawingEdge = edge.Edge; double w = drawingEdge.Attr.LineWidth; decoratorRemovalsDict[edge] = (delegate() { drawingEdge.Attr.LineWidth = (int)w; }); drawingEdge.Attr.LineWidth = (int)Math.Max(viewer.LineThicknessForEditing, w * 2); } } this.viewer.Invalidate(obj); }
private Set <object> GetSetOfAffectedObjs(IViewerObject draggableObj) { Set <object> ret = new Set <object>(); ret.Insert(draggableObj); IViewerNode node = draggableObj as IViewerNode; if (node != null) { foreach (IViewerEdge edge in Edges(node)) { ret.Insert(edge); } } else { IViewerEdge edge = draggableObj as IViewerEdge; if (edge != null) { ret += GetSetOfAffectedObjs(edge.Source); ret += GetSetOfAffectedObjs(edge.Target); } else { IViewerObject label = draggableObj as IViewerObject; if (label != null) { ret.Insert(draggableObj); } } } return(ret); }
public void AddEdge(IViewerEdge edge, bool registerForUndo) { //if (registerForUndo) drawingLayoutEditor.RegisterEdgeAdditionForUndo(edge); var drawingEdge = edge.Edge; Edge geomEdge = drawingEdge.GeometryEdge; drawingGraph.AddPrecalculatedEdge(drawingEdge); drawingGraph.GeometryGraph.Edges.Add(geomEdge); }
private void SwitchToEdgeEditing(IViewerEdge edge) { UnselectEverything(); this.viewer.InvalidateBeforeTheChange(edge); this.SelectedEdge = edge; (edge as IEditableObject).SelectedForEditing = true; edge.RadiusOfPolylineCorner = this.viewer.UnderlyingPolylineCircleRadius; this.DecorateEdgeForDragging(edge); this.viewer.Invalidate(edge); }
public void RemoveEdge(IViewerEdge edge, bool registerForUndo) { lock (this.syncRoot) { var vedge = (KosmographViewerEdge)edge; var dedge = vedge.Edge; drawingGraph.RemoveEdge(dedge); drawingGraph.GeometryGraph.Edges.Remove(dedge.GeometryEdge); drawingObjectsToFrameworkElements.Remove(dedge); drawingObjectsToIViewerObjects.Remove(dedge); vedge.RemoveItselfFromCanvas(GraphCanvas); } }
void viewer_MouseUp(object sender, MsaglMouseEventArgs args) { if (viewer.LayoutIsEditable) { bool click = !MouseDownPointAndMouseUpPointsAreFarEnough(args); if (click && LeftMouseButtonWasPressed) { if (viewer.ObjectUnderMouseCursor is IViewerObject) { AnalyzeLeftMouseButtonClick(); args.Handled = true; } else { UnselectEverything(); } } else if (Dragging) { viewer.OnDragEnd(AffectedObjsEnum()); args.Handled = true; this.geomGraphEditor.OnDragEnd(viewer.ScreenToSource(args) - this.mouseDownSourcePoint); } else if (LeftMouseButtonWasPressed) { if (ToggleEntityPredicate(viewer.ModifierKeys, PressedMouseButtons, true) && (viewer.ModifierKeys & ModifierKeys.Shift) != ModifierKeys.Shift) { SelectEntitiesForDraggingWithRectangle(args); } // else SpreadGroupForMDS(args); } else if (MiddleMouseButtonWasPressed) { viewer.StopDrawingRubberLine(); IViewerNode targetNode = viewer.ObjectUnderMouseCursor as IViewerNode; if (targetNode != null) { IViewerEdge edge = viewer.CreateEdge(SourceOfInsertedEdge.DrawingObject as Node, targetNode.DrawingObject as Node); this.viewer.AddEdge(edge, true); } } } Dragging = false; PolylineVertex = null; ActiveDraggedObject = null; affectedObjects = null; LeftMouseButtonWasPressed = MiddleMouseButtonWasPressed = false; }
public void AddEdge(IViewerEdge edge, bool registerForUndo) { //if (registerForUndo) drawingLayoutEditor.RegisterEdgeAdditionForUndo(edge); var drawingEdge = edge.Edge; Edge geomEdge = drawingEdge.GeometryEdge; _drawingGraph.AddPrecalculatedEdge(drawingEdge); _drawingGraph.GeometryGraph.Edges.Add(geomEdge); }
public void AddEdge(IViewerEdge edge, bool registerForUndo) { if (registerForUndo) DrawingLayoutEditor.RegisterEdgeAdditionForUndo(edge); DEdge dEdge = edge as DEdge; DrawingEdge drawingEdge = dEdge.DrawingEdge; GeometryEdge geomEdge = drawingEdge.GeometryEdge; // Set an edge label if not already present if (geomEdge.Label == null) dEdge.Label = new DTextLabel(dEdge, new Drawing.Label("")); // Add the edge to my edge list, to the drawing graph, and to the geometry graph. Edges.Add(dEdge); Graph.AddPrecalculatedEdge(drawingEdge); Graph.GeometryGraph.Edges.Add(geomEdge); // Add the edge to each node. Note that you don't need to do this for the geometry objects. The calls to the drawing objects already do it. DNode source = edge.Source as DNode; DNode target = edge.Target as DNode; if (source != target) { source.AddOutEdge(dEdge); target.AddInEdge(dEdge); source.DrawingNode.AddOutEdge(drawingEdge); target.DrawingNode.AddInEdge(drawingEdge); } else { source.AddSelfEdge(dEdge); source.DrawingNode.AddSelfEdge(drawingEdge); } if (registerForUndo && EdgeInsertedByUser != null) EdgeInsertedByUser(dEdge, EventArgs.Empty); if (!Edges.Contains(dEdge)) return; DrawingLayoutEditor.AttachLayoutChangeEvent(dEdge); if (dEdge.Label != null) DrawingLayoutEditor.AttachLayoutChangeEvent(dEdge); // Display the edge. if (drawingEdge.GeometryEdge.Curve != null) { dEdge.MakeVisual(); MainCanvas.Children.Add(dEdge); if (dEdge.Label != null) { dEdge.Label.MakeVisual(); MainCanvas.Children.Add(dEdge.Label); } UpdateGraphBoundingBoxPreservingCenter(); } if (registerForUndo) DrawingLayoutEditor.CurrentUndoAction.GraphBoundingBoxAfter = Graph.BoundingBox; if (registerForUndo) BeginContentEdit(dEdge); }
public void RemoveEdge(IViewerEdge edge, bool registerForUndo) { var de = edge as DEdge; if (registerForUndo) DrawingLayoutEditor.RegisterEdgeRemovalForUndo(edge); Graph.RemoveEdge(de.DrawingEdge); Edges.Remove(de); if (de.Source != de.Target) { de.Source.RemoveOutEdge(de); de.Target.RemoveInEdge(de); } else de.Source.RemoveSelfEdge(de); MainCanvas.Children.Remove(de); if (de.Label != null) MainCanvas.Children.Remove(de.Label); if (registerForUndo && EdgeDeletedByUser != null) EdgeDeletedByUser(de, EventArgs.Empty); }
void SwitchToEdgeEditing(IViewerEdge edge) { UnselectEverything(); var editableEdge = edge as IEditableObject; if (editableEdge == null) return; SelectedEdge = edge; editableEdge.SelectedForEditing = true; edge.RadiusOfPolylineCorner = viewer.UnderlyingPolylineCircleRadius; DecorateEdgeForDragging(edge); viewer.Invalidate(edge); }
internal AddEdgeUndoAction(IViewer viewer, IViewerEdge edge) :base(viewer.ViewerGraph.DrawingGraph.GeometryGraph){ this.viewer = viewer; this.addedEdge = edge; }
void RecoverEdge(IViewerEdge edge) { var curve = edge.Edge.GeometryEdge.UnderlyingPolyline.CreateCurve(); Arrowheads.TrimSplineAndCalculateArrowheads(edge.Edge.GeometryEdge, curve, true,this.Graph.LayoutAlgorithmSettings.EdgeRoutingSettings.KeepOriginalSpline); viewer.Invalidate(edge); }
static void TheDefaultEdgeDecoratorStub(IViewerEdge edge) {}
/// <summary> /// registers the edge addition for undo /// </summary> /// <param name="edge"></param> public void RegisterEdgeAdditionForUndo(IViewerEdge edge) { geomGraphEditor.InsertToListAndSetTheBoxBefore(new AddEdgeUndoAction(viewer, edge)); }
/// <summary> /// /// </summary> /// <param name="edge"></param> public void RegisterEdgeRemovalForUndo(IViewerEdge edge) { geomGraphEditor.InsertToListAndSetTheBoxBefore(new RemoveEdgeUndoAction(graph, viewer, edge)); }
internal AddEdgeUndoAction(IViewer viewer, IViewerEdge edge) : base(viewer.ViewerGraph.DrawingGraph.GeometryGraph) { this.viewer = viewer; this.addedEdge = edge; }
/// <summary> /// removes an edge from the graph with the undo support /// </summary> /// <param name="edge"></param> /// <param name="registerForUndo"></param> public void RemoveEdge(IViewerEdge edge, bool registerForUndo) { var de = edge as DEdge; if (registerForUndo) layoutEditor.RegisterEdgeRemovalForUndo(edge); Graph.RemoveEdge(de.DrawingEdge); DGraph.Edges.Remove(de); if (de.Source != de.Target) { de.Source.RemoveOutEdge(de); de.Target.RemoveInEdge(de); } else de.Source.RemoveSelfEdge(de); BbNode = null; DGraph.BbNode = null; DGraph.BuildBBHierarchy(); Invalidate(); if (EdgeRemoved != null) EdgeRemoved(de.DrawingEdge, EventArgs.Empty); }
public void RemoveEdge(IViewerEdge edge, bool registerForUndo) { lock (this) { var vedge = (GraphmapsEdge) edge; var dedge = vedge.Edge; _drawingGraph.RemoveEdge(dedge); _drawingGraph.GeometryGraph.Edges.Remove(dedge.GeometryEdge); _drawingObjectsToIViewerObjects.Remove(dedge); vedge.RemoveItselfFromCanvas(_graphCanvas); } }
/// <summary> /// /// </summary> /// <param name="edge"></param> /// <param name="registerForUndo"></param> public void AddEdge(IViewerEdge edge, bool registerForUndo) { if (registerForUndo) layoutEditor.RegisterEdgeAdditionForUndo(edge); var dEdge = edge as DEdge; var drawingEdge = edge.DrawingObject as DrawingEdge; Edge geomEdge = drawingEdge.GeometryEdge; //the edge has to be disconnected from the graph Debug.Assert(DGraph.Edges.Contains(dEdge) == false); //Debug.Assert(Graph.Edges.Contains(drawingEdge) == false); Debug.Assert(Graph.GeometryGraph.Edges.Contains(geomEdge) == false); DGraph.Edges.Add(dEdge); Graph.AddPrecalculatedEdge(drawingEdge); Graph.GeometryGraph.Edges.Add(geomEdge); Core.Geometry.Rectangle bounds = Graph.GeometryGraph.BoundingBox; bounds.Add(drawingEdge.GeometryEdge.Curve.BoundingBox.LeftTop); bounds.Add(drawingEdge.GeometryEdge.Curve.BoundingBox.RightBottom); Graph.GeometryGraph.BoundingBox = bounds; if (registerForUndo) layoutEditor.CurrentUndoAction.GraphBoundingBoxAfter = Graph.BoundingBox; BbNode = null; var source = edge.Source as DNode; var target = edge.Target as DNode; //the edge has to be disconnected from the graph Debug.Assert(source.outEdges.Contains(dEdge) == false); Debug.Assert(target.inEdges.Contains(dEdge) == false); Debug.Assert(source.selfEdges.Contains(dEdge) == false); if (source != target) { source.AddOutEdge(dEdge); target.AddInEdge(dEdge); source.DrawingNode.AddOutEdge(drawingEdge); target.DrawingNode.AddInEdge(drawingEdge); source.DrawingNode.GeometryNode.AddOutEdge(geomEdge); target.DrawingNode.GeometryNode.AddInEdge(geomEdge); } else { source.AddSelfEdge(dEdge); source.DrawingNode.AddSelfEdge(drawingEdge); source.DrawingNode.GeometryNode.AddSelfEdge(geomEdge); } DGraph.BbNode = null; DGraph.BuildBBHierarchy(); Invalidate(); if (EdgeAdded != null) EdgeAdded(dEdge.DrawingEdge, new EventArgs()); }
public void RemoveEdge(IViewerEdge edge, bool registerForUndo) { throw new NotImplementedException(); }
/// <summary> /// registers the edge addition for undo /// </summary> /// <param name="edge"></param> public void RegisterEdgeAdditionForUndo(IViewerEdge edge) { geomGraphEditor.InsertToListAndFixTheBox(new AddEdgeUndoAction(this.viewer, edge)); }
/// <summary> /// /// </summary> /// <param name="edge"></param> public void RegisterEdgeRemovalForUndo(IViewerEdge edge) { geomGraphEditor.InsertToListAndFixTheBox(new RemoveEdgeUndoAction(this.graph, this.viewer, edge)); }
internal RemoveEdgeUndoAction(Graph graph, IViewer viewer, IViewerEdge edge) :base(graph.GeometryGraph){ this.viewer = viewer; this.removedEdge = edge; this.GraphBoundingBoxAfter = graph.BoundingBox; //do not change the bounding box }
internal RemoveEdgeUndoAction(Graph graph, IViewer viewer, IViewerEdge edge) : base(graph.GeometryGraph) { this.viewer = viewer; this.removedEdge = edge; this.GraphBoundingBoxAfter = graph.BoundingBox; //do not change the bounding box }
public void RemoveEdge(IViewerEdge edge, bool registerForUndo) { var de = edge as DEdge; if (registerForUndo) LayoutEditor.RegisterEdgeRemovalForUndo(edge); Graph.RemoveEdge(de.DrawingEdge); Edges.Remove(de); if (de.Source != de.Target) { de.Source.RemoveOutEdge(de); de.Target.RemoveInEdge(de); } else de.Source.RemoveSelfEdge(de); MainCanvas.Children.Remove(de); if (de.Label != null) MainCanvas.Children.Remove(de.Label); BuildBBHierarchy(); }