public Connection AttachConnection(NetronGraphvizLayouter layout, IEdge e) { if (e == null) { throw new ArgumentNullException("e"); } if (!this.VisitedGraph.ContainsEdge(e)) { throw new ArgumentException("edge already in graph"); } if (this.EdgeConnections.Contains(e)) { throw new ArgumentException("connection already associtated with this edge"); } // create edge Connection conn = this.ConnectionProvider.ProvideConnection(e); // set points layout.PositionConnection(e, conn); Connect(e, conn); // connect to target Modify m = new Modify(); m.AddInsertConnection(conn, conn.From, conn.To, this.Panel.AbstractShape); this.Panel.AbstractShape.History.Do(m); return(conn); }
public void PopulatePanel(Graphics g) { // add shapes foreach (IVertex v in VisitedGraph.Vertices) { // do not add vertex if already in panel if (VertexShapes.Contains(v)) { continue; } AttachShape(v); } // udpate shape sizes if possible and build size dictionary NetronGraphvizLayouter layout = new NetronGraphvizLayouter(this); layout.Layouter.DpiX = g.DpiX; layout.Layouter.DpiY = g.DpiY; layout.Layouter.RankDirection = this.RankDirection; foreach (DictionaryEntry de in this.ShapeVertices) { if (de.Key is Netron.Shape) { Netron.Shape shape = (Netron.Shape)de.Key; layout.VertexSizes[(IVertex)de.Value] = shape.Size; } else { throw new Exception("Shapes must derive from Netron.Shape"); } } layout.Compute(); layout.PositionVertices(); foreach (IEdge e in VisitedGraph.Edges) { // check if edge alreay in graph if (EdgeConnections.Contains(e)) { continue; } AttachConnection(layout, e); } // reposition connections // layout.PositionConnections(); // redraw panel this.Panel.Invalidate(); this.graphDirty = false; }
public void PopulatePanel(Graphics g) { // add shapes foreach(IVertex v in VisitedGraph.Vertices) { // do not add vertex if already in panel if (VertexShapes.Contains(v)) continue; AttachShape(v); } // udpate shape sizes if possible and build size dictionary NetronGraphvizLayouter layout = new NetronGraphvizLayouter(this); layout.Layouter.DpiX = g.DpiX; layout.Layouter.DpiY = g.DpiY; layout.Layouter.RankDirection = this.RankDirection; foreach(DictionaryEntry de in this.ShapeVertices) { if (de.Key is Netron.Shape) { Netron.Shape shape = (Netron.Shape)de.Key; layout.VertexSizes[(IVertex)de.Value] = shape.Size; } else throw new Exception("Shapes must derive from Netron.Shape"); } layout.Compute(); layout.PositionVertices(); foreach(IEdge e in VisitedGraph.Edges) { // check if edge alreay in graph if (EdgeConnections.Contains(e)) continue; AttachConnection(layout,e); } // reposition connections // layout.PositionConnections(); // redraw panel this.Panel.Invalidate(); this.graphDirty = false; }
public Connection AttachConnection(NetronGraphvizLayouter layout,IEdge e) { if (e==null) throw new ArgumentNullException("e"); if (!this.VisitedGraph.ContainsEdge(e)) throw new ArgumentException("edge already in graph"); if (this.EdgeConnections.Contains(e)) throw new ArgumentException("connection already associtated with this edge"); // create edge Connection conn = this.ConnectionProvider.ProvideConnection(e); // set points layout.PositionConnection(e,conn); Connect(e,conn); // connect to target Modify m = new Modify(); m.AddInsertConnection(conn, conn.From, conn.To,this.Panel.AbstractShape); this.Panel.AbstractShape.History.Do(m); return conn; }