/// <summary> /// 更新线及箭头 /// </summary> /// <param name="canvas"></param> /// <param name="networkNode"></param> /// <param name="pointEnd"></param> /// <param name="isNoRef"></param> /// <returns></returns> private void DrawLineAndArrow(Canvas canvas, NetworkNodeShape networkNode, Point pointEnd, bool isNoRef = false) { Dictionary <string, Tuple <Point, Point> > LinePointsTmp = new Dictionary <string, Tuple <Point, Point> >(); Dictionary <string, List <UIElement> > LinesTmp = new Dictionary <string, List <UIElement> >(); var currLinePoints = isNoRef ? this.LinePoints.Where(a => networkNode.LinePoints.ContainsKey(a.Key)) : this.LinePoints.Where(a => networkNode.LinePointsRef.ContainsKey(a.Key)); var currShowMsgArrows = isNoRef ? this.ShowMsgArrows.Where(a => networkNode.ShowMsgArrows.ContainsKey(a.Key)) : this.ShowMsgArrows.Where(a => networkNode.ShowMsgArrowsRef.ContainsKey(a.Key)); var currlines = isNoRef ? this.Lines.Where(a => networkNode.Lines.ContainsKey(a.Key)) : this.Lines.Where(a => networkNode.LinesRef.ContainsKey(a.Key)); //清理线及点 foreach (var item in currlines) { canvas.Clear(item.Value); } //重新画线-收到的 foreach (var item in currLinePoints) { var point1 = pointEnd; var point2 = item.Value.Item2; if (!isNoRef) { point1 = item.Value.Item1; point2 = pointEnd; } string showmsg = currShowMsgArrows.Where(a => a.Key == item.Key).First().Value; //线 var currLine = canvas.DrawLine(point1, point2, Brushes.Black, false, 1, showmsg); Canvas.SetZIndex(currLine, -1); //画箭头 var currArrow = canvas.DrawTextArrow(point1, point2, showmsg); LinePointsTmp[item.Key] = new Tuple <Point, Point>(point1, point2); LinesTmp[item.Key] = new List <UIElement>() { currLine, currArrow }; } foreach (var item in LinesTmp) { this.Lines[item.Key] = item.Value; } foreach (var item in LinePointsTmp) { this.LinePoints[item.Key] = item.Value; } }
private void DrawNodeShape(Canvas canvas, Point pointPlace, KeyValuePair <int, List <NodeTopological> > levelNode, NodeTopological currNode) { NetworkNodeShape networkNodeShape = new NetworkNodeShape() { Key = currNode.Key }; Point pointText = new Point(pointPlace.X - networkNodeShape.Width / 2, pointPlace.Y - networkNodeShape.Height / 2); string toShowDesc = currNode.NodeInfo.Key; string toShowName = currNode.NodeInfo.typeDesc; networkNodeShape.rShowNode.Fill = new SolidColorBrush(Colors.Red); networkNodeShape.txtDesc.Text = toShowDesc; networkNodeShape.txtName.Text = toShowName; networkNodeShape.PointNow = pointText; canvas.Children.Add(networkNodeShape); canvas.SetLeftTop(networkNodeShape, pointText); networkNodeShapesList.Add(networkNodeShape); }
/// <summary> /// 刷新线及点 /// </summary> /// <param name="networkNode"></param> public void NetworkNodeShapePlaceChangeEnd(NetworkNodeShape networkNode, bool isRefPlace = false) { try { Canvas canvas = (Canvas)this.Content; Point pointEnd = new Point(networkNode.PointNow.X + networkNode.Width / 2, networkNode.PointNow.Y + networkNode.Height / 2); if (isRefPlace) { Point pointText = new Point(networkNode.PointNow.X - networkNode.Width / 2, networkNode.PointNow.Y - networkNode.Height / 2); pointEnd = networkNode.PointNow; canvas.SetLeftTop(networkNode, pointText); } DrawLineAndArrow(canvas, networkNode, pointEnd, false); DrawLineAndArrow(canvas, networkNode, pointEnd, true); } catch (Exception ex) { MessageBox.Show(ex.Message); } }