Exemplo n.º 1
0
        /// <summary>
        /// 查找指定节点的后续节点
        /// </summary>
        /// <param name="nodeIndex"></param>
        /// <returns></returns>
        private List <Tx_Node> FindNextNodes(Tx_Node node)
        {
            List <Tx_Node> lstNextNodes = new List <Tx_Node>();

            //根据线条查找后续节点串
            foreach (Tx_Entry entry in this._allEntrys)
            {
                if (entry.StartNode == node.Code)
                {
                    foreach (var nodes in _nodes)
                    {
                        if (nodes.Code == entry.EndNode)
                        {
                            lstNextNodes.Add(nodes);
                        }
                    }
                }
            }
            return(lstNextNodes);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 查找指定节点的前导节点
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        private List <Tx_Node> FindPreNodes(Tx_Node node)
        {
            string         subtxCode   = "";
            List <Tx_Node> lstPreNodes = new List <Tx_Node>();

            //根据线条查找后续节点串
            foreach (Tx_Node entry in this._nodes)
            {
                if (entry.Code == node.Code)
                {
                    subtxCode = node.Code;
                    foreach (Tx_Node lstentry in this._countedNodes)
                    {
                        if (lstentry.Sub_Code == subtxCode)
                        {
                            lstPreNodes.Add(lstentry);
                        }
                    }
                }
            }
            return(lstPreNodes);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 计算一个节点后续节点的位置算法
        /// </summary>
        /// <param name="nodeIndex"></param>
        private void LayOut_NextNodes(Tx_Node node)
        {
            //获取后续节点串
            List <Tx_Node> lstNextNodes = this.FindNextNodes(node);

            //若后续节点串为空或者已布局节点数等于全部节点数,则退出布局
            if (lstNextNodes == null || lstNextNodes.Count == 0)
            {
                return;
            }
            float half = 0f;

            //偶数个节点
            if (lstNextNodes.Count % 2 == 0)
            {
                half = lstNextNodes.Count / 2 - 1f;
            }
            else
            {
                half = lstNextNodes.Count / 2;
            }
            for (int i = 0; i < lstNextNodes.Count; i++)
            {
                //只对还没有定位的,进行定位;并对其后续节点定位
                if (lstNextNodes[i].X == 0 && lstNextNodes[i].Y == 0)
                {
                    lstNextNodes[i].Y = node.Y + _offsetY;

                    if (lstNextNodes[i].Code != endNode)
                    {
                        lstNextNodes[i].X = node.X + (i - half) * _offsetX;
                        //if (!string.IsNullOrEmpty(node.Sub_Code))
                        //{
                        //    string[] sub_node = node.Sub_Code.Split(',');
                        //    for (int y = 0; y < sub_node.Count(); y++)
                        //    {
                        //        if (sub_node.Count() <= 1)
                        //        {
                        //            break;
                        //        }
                        //        //else
                        //        //{
                        //        //    float offset = i - half == 0 ? 1 : i - half;
                        //        //    lstNextNodes[i].X = node.X + offset * mc_OFFSET_X;
                        //        //}
                        //    }
                        //}
                    }
                    else
                    {
                        lstNextNodes[i].X = _startX;
                        float MaxY = 0.0f;
                        foreach (var maxNodeY in _countedNodes)
                        {
                            if (maxNodeY.Y >= MaxY)
                            {
                                MaxY = maxNodeY.Y;
                            }
                        }
                        lstNextNodes[i].Y = MaxY + _offsetY;
                    }
                    _countedNodes.Add(lstNextNodes[i]);
                    //保存界面最左的图形节点的X坐标值
                    if (lstNextNodes[i].X < _LeftestX)
                    {
                        _LeftestX = lstNextNodes[i].X;
                    }

                    var s = lstNextNodes[i].Sub_Code.Split(',').ToList();
                    s.RemoveAll(x => x.Length == 0);
                    if (s.Count > 0)
                    {
                        _layOutCount++;
                        //递归对后续节点进行布局
                        this.LayOut_NextNodes(lstNextNodes[i]);
                    }
                }
            }
            ////递归对后续节点进行布局
            //if (lstNextNodes.Count() > 1)
            //{
            //    this._layOutCount++;
            //    //递归对后续节点进行布局
            //}
        }
Exemplo n.º 4
0
        /// <summary>
        /// 计算一个节点后续节点的位置算法
        /// </summary>
        /// <param name="nodeIndex"></param>
        private void LayOut_NextNodes(Tx_Node node)
        {
            //获取后续节点串
            List<Tx_Node> lstNextNodes = this.FindNextNodes(node);
            //若后续节点串为空或者已布局节点数等于全部节点数,则退出布局
            if (lstNextNodes == null || lstNextNodes.Count == 0)
                return;
            float half = 0f;
            //偶数个节点
            if (lstNextNodes.Count % 2 == 0)
            {
                half = lstNextNodes.Count / 2 - 1f;
            }
            else
            {
                half = lstNextNodes.Count / 2;
            }
            for (int i = 0; i < lstNextNodes.Count; i++)
            {
                //只对还没有定位的,进行定位;并对其后续节点定位
                if (lstNextNodes[i].X == 0 && lstNextNodes[i].Y == 0)
                {
                    lstNextNodes[i].Y = node.Y + _offsetY;

                    if (lstNextNodes[i].Code != endNode)
                    {
                        lstNextNodes[i].X = node.X + (i - half) * _offsetX;
                        //if (!string.IsNullOrEmpty(node.Sub_Code))
                        //{
                        //    string[] sub_node = node.Sub_Code.Split(',');
                        //    for (int y = 0; y < sub_node.Count(); y++)
                        //    {
                        //        if (sub_node.Count() <= 1)
                        //        {
                        //            break;
                        //        }
                        //        //else
                        //        //{
                        //        //    float offset = i - half == 0 ? 1 : i - half;
                        //        //    lstNextNodes[i].X = node.X + offset * mc_OFFSET_X;
                        //        //}
                        //    }
                        //}
                    }
                    else
                    {
                        lstNextNodes[i].X = _startX;
                        float MaxY = 0.0f;
                        foreach (var maxNodeY in _countedNodes)
                        {
                            if (maxNodeY.Y >= MaxY)
                            {
                                MaxY = maxNodeY.Y;
                            }
                        }
                        lstNextNodes[i].Y = MaxY + _offsetY;
                    }
                    _countedNodes.Add(lstNextNodes[i]);
                    //保存界面最左的图形节点的X坐标值
                    if (lstNextNodes[i].X < _LeftestX)
                    {
                        _LeftestX = lstNextNodes[i].X;
                    }

                    var s = lstNextNodes[i].Sub_Code.Split(',').ToList();
                    s.RemoveAll(x => x.Length == 0);
                    if (s.Count > 0)
                    {
                        _layOutCount++;
                        //递归对后续节点进行布局
                        this.LayOut_NextNodes(lstNextNodes[i]);
                    }
                }
            }
            ////递归对后续节点进行布局
            //if (lstNextNodes.Count() > 1)
            //{
            //    this._layOutCount++;
            //    //递归对后续节点进行布局
            //}
        }
Exemplo n.º 5
0
 /// <summary>
 /// 查找指定节点的前导节点
 /// </summary>
 /// <param name="node"></param>
 /// <returns></returns>
 private List<Tx_Node> FindPreNodes(Tx_Node node)
 {
     string subtxCode = "";
     List<Tx_Node> lstPreNodes = new List<Tx_Node>();
     //根据线条查找后续节点串
     foreach (Tx_Node entry in this._nodes)
     {
         if (entry.Code == node.Code)
         {
             subtxCode = node.Code;
             foreach (Tx_Node lstentry in this._countedNodes)
             {
                 if (lstentry.Sub_Code == subtxCode)
                 {
                     lstPreNodes.Add(lstentry);
                 }
             }
         }
     }
     return lstPreNodes;
 }
Exemplo n.º 6
0
 /// <summary>
 /// 查找指定节点的后续节点
 /// </summary>
 /// <param name="nodeIndex"></param>
 /// <returns></returns>
 private List<Tx_Node> FindNextNodes(Tx_Node node)
 {
     List<Tx_Node> lstNextNodes = new List<Tx_Node>();
     //根据线条查找后续节点串
     foreach (Tx_Entry entry in this._allEntrys)
     {
         if (entry.StartNode == node.Code)
         {
             foreach (var nodes in _nodes)
             {
                 if (nodes.Code == entry.EndNode)
                 {
                     lstNextNodes.Add(nodes);
                 }
             }
         }
     }
     return lstNextNodes;
 }