コード例 #1
0
        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();
                }
            }
        }
コード例 #2
0
ファイル: GraphEditor.cs プロジェクト: j-prox/blueprint41
 void SetEdgeDragDecorator(IViewerEdge viewerEdge)
 {
     if (viewerEdge is DEdge dEdge)
     {
         EdgeSelected?.Invoke(this, new EdgeEventArgs(dEdge.DrawingEdge));
     }
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
 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);
 }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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;
        }
コード例 #9
0
        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);

        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
 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);
 }
コード例 #13
0
 internal AddEdgeUndoAction(IViewer viewer, IViewerEdge edge) :base(viewer.ViewerGraph.DrawingGraph.GeometryGraph){
     this.viewer = viewer;
     this.addedEdge = edge;
 }
コード例 #14
0
 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);
 }
コード例 #15
0
 static void TheDefaultEdgeDecoratorStub(IViewerEdge edge) {}
コード例 #16
0
 /// <summary>
 /// registers the edge addition for undo
 /// </summary>
 /// <param name="edge"></param>
 public void RegisterEdgeAdditionForUndo(IViewerEdge edge) {
     geomGraphEditor.InsertToListAndSetTheBoxBefore(new AddEdgeUndoAction(viewer, edge));
 }
コード例 #17
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="edge"></param>
 public void RegisterEdgeRemovalForUndo(IViewerEdge edge) {
     geomGraphEditor.InsertToListAndSetTheBoxBefore(new RemoveEdgeUndoAction(graph, viewer, edge));
 }
コード例 #18
0
 internal AddEdgeUndoAction(IViewer viewer, IViewerEdge edge) : base(viewer.ViewerGraph.DrawingGraph.GeometryGraph)
 {
     this.viewer    = viewer;
     this.addedEdge = edge;
 }
コード例 #19
0
ファイル: GViewer.cs プロジェクト: mrkcass/SuffixTreeExplorer
        /// <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);
        }
コード例 #20
0
        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);
            }
        }
コード例 #21
0
ファイル: GViewer.cs プロジェクト: mrkcass/SuffixTreeExplorer
        /// <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());
        }
コード例 #22
0
 public void RemoveEdge(IViewerEdge edge, bool registerForUndo)
 {
     throw new NotImplementedException();
 }
コード例 #23
0
 /// <summary>
 /// registers the edge addition for undo
 /// </summary>
 /// <param name="edge"></param>
 public void RegisterEdgeAdditionForUndo(IViewerEdge edge)
 {
     geomGraphEditor.InsertToListAndFixTheBox(new AddEdgeUndoAction(this.viewer, edge));
 }
コード例 #24
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="edge"></param>
 public void RegisterEdgeRemovalForUndo(IViewerEdge edge)
 {
     geomGraphEditor.InsertToListAndFixTheBox(new RemoveEdgeUndoAction(this.graph, this.viewer, edge));
 }
コード例 #25
0
 public void RemoveEdge(IViewerEdge edge, bool registerForUndo)
 {
     throw new NotImplementedException();
 }
コード例 #26
0
 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
 }
コード例 #27
0
ファイル: RemoveEdgeUndoAction.cs プロジェクト: sta1216/MsAGL
 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
 }
コード例 #28
0
        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();
        }