Example #1
0
        /// <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;
            }
        }
Example #2
0
        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);
        }
Example #3
0
        /// <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);
            }
        }