Example #1
0
        private void Border_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            var border = sender as UCNode;

            if (border == null)
            {
                return;
            }
            if (border != SelectedNodeBorder || border.IsSelected != true)
            {
                //变更选择的节点
                border.IsSelected = true;
                if (SelectedNodeBorder != null)
                {
                    SelectedNodeBorder.IsSelected = false;
                }
                SelectedNodeBorder = border;
            }
            if (_operateStatus == OperateStatus.None ||
                _operateStatus == OperateStatus.MoveNode ||
                _operateStatus == OperateStatus.SelectedLine)
            {
                _operateStatus = OperateStatus.SelectedNode;
            }
        }
Example #2
0
        /// <summary>
        /// 移除指定节点
        /// </summary>
        private bool RemoveNode(UCNode node)
        {
            if (node != null)
            {
                var lineList = GetNodeRelativeLine(node);
                if (lineList == null || lineList.Count == 0)
                {
                    if (MessageBox.Show("确认删除节点?", "确认", MessageBoxButton.OKCancel) != MessageBoxResult.OK)
                    {
                        return(false);
                    }
                }
                else
                {
                    if (MessageBox.Show("该节点下还有行驶路线,是否需要一起删除?", "确认", MessageBoxButton.OKCancel) != MessageBoxResult.OK)
                    {
                        return(false);
                    }

                    //移除相关联的路线
                    foreach (var item in lineList)
                    {
                        if (RemoveLine(item) == false)
                        {
                            return(false);
                        }
                    }
                }
                canvasPanel.Children.Remove(node);
                nodeDic.Remove(node);
                return(false);
            }
            return(true);
        }
Example #3
0
        /// <summary>
        /// 获取该节点所有相关联的线
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        private List <UCLine> GetNodeRelativeLine(UCNode node)
        {
            if (node == null || (!nodeDic.ContainsKey(node)))
            {
                return(new List <UCLine>());
            }
            var model = nodeDic[node];
            var list  = runLineDic.Where(a => model.Name.Equals(a.Value.StartNode.Name) || model.Name.Equals(a.Value.EndNode.Name)).Select(a => a.Key);

            return(list.ToList());
        }
Example #4
0
        private UCNode MakeNode(NodeModel model)
        {
            var border = new UCNode();

            border.Cursor = Cursors.Hand;
            border.X      = model.Position.X * canvasPanel.ActualWidth;  // - border.Width / 2;
            border.Y      = model.Position.Y * canvasPanel.ActualHeight; // - border.Height / 2;
            border.MouseLeftButtonDown += Border_MouseLeftButtonDown;
            border.MouseLeftButtonUp   += Border_MouseLeftButtonUp;
            border.DeleteCommand        = new EventHandler((s, e) => { RemoveNode(SelectedNodeBorder); SelectedNodeBorder = null; });
            border.DisplayText          = model.Name;
            return(border);
        }
Example #5
0
        /// <summary>
        /// 添加节点与节点间的连线
        /// </summary>
        /// <param name="sourceNode"></param>
        /// <param name="objNode"></param>
        private UCLine AddLine(UCNode sourceNode)
        {
            var lineMode = new RunLineModel();

            lineMode.StartNode = nodeDic[sourceNode];

            var line = MakeLine(lineMode);
            var x    = sourceNode.X - sourceNode.Width / 2;
            var y    = sourceNode.Y - sourceNode.Height / 2;

            line.StartPoint = new Point(x, y);
            line.EndPoint   = new Point(x, y);
            canvasPanel.Children.Add(line);
            runLineDic.Add(line, lineMode);
            return(line);
        }
Example #6
0
        /// <summary>
        /// 添加节点与节点间的连线
        /// </summary>
        /// <param name="sourceNode"></param>
        /// <param name="objNode"></param>
        private void AddLine(UCNode sourceNode, UCNode objNode)
        {
            var lineMode = new RunLineModel();

            var line = new UCLine();
            var x    = sourceNode.X * canvasPanel.ActualWidth - sourceNode.Width / 2;
            var y    = sourceNode.Y * canvasPanel.ActualHeight - sourceNode.Height / 2;

            line.StartPoint = new Point(x, y);
            if (objNode != null)
            {
                x             = objNode.X * canvasPanel.ActualWidth - objNode.Width / 2;
                y             = objNode.Y * canvasPanel.ActualHeight - objNode.Height / 2;
                line.EndPoint = new Point(x, y);
            }
            canvasPanel.Children.Add(line);
            runLineDic.Add(line, lineMode);
        }
Example #7
0
        /// <summary>
        /// 获取节点的最佳连接点
        /// </summary>
        /// <param name="border"></param>
        /// <param name="relativePoint"></param>
        /// <returns></returns>
        private Point GetConnectPoint(UCNode border, Point relativePoint)
        {
            Point point = new Point();

            if (border != null)
            {
                double x, y;
                var    centerPoint = border.CircleCenterPoint;

                //使用圆的角度解决,由圆弧公式可求出xy值
                double rad = Math.Atan2((relativePoint.Y - centerPoint.Y), (relativePoint.X - centerPoint.X));// 圆弧
                x = centerPoint.X + border.CircleR * Math.Cos(rad);
                y = centerPoint.Y + border.CircleR * Math.Sin(rad);

                point.X = x;
                point.Y = y;
            }
            return(point);
        }