コード例 #1
0
ファイル: MyCanvas.cs プロジェクト: ohzxc/DesignerCanvasTest
        /// <summary>
        /// 布局算法 确定节点位置
        /// </summary>
        public void LayOut()
        {
            m_LayOutCount = 0;
            m_LstNodes    = new List <Tx_Node>();
            m_Nodes       = new List <Tx_Node>();
            m_LstEntrys   = new List <Tx_Entry>();
            foreach (TradeFlow item in flowList)
            {
                var      tradeFlowJoin = new StringBuilder();//串连交易流程
                string[] str           = { "#", "=" };
                var      _tradeFlow    = item.Trade_Flow.Trim();
                var      x3            = _tradeFlow.Remove(_tradeFlow.Length - 2, 2);
                var      _s            = x3.Split(str, StringSplitOptions.RemoveEmptyEntries);
                if (_s.Count() > 0)
                {
                    var i = 0;
                    _s.ToList().ForEach(k =>
                    {
                        i++;
                        var m         = k.Remove(k.Length - 1, 1);
                        var condition = m.Split('@')[0].ToString();
                        var subtxCode = m.Split('@')[1].ToString();

                        tradeFlowJoin.Append(subtxCode);
                        if (_s.Count() > 1 && i < _s.Count())
                        {
                            tradeFlowJoin.Append('@');
                        }

                        var entry = new Tx_Entry(item.FlowCode, subtxCode, condition, m_Connection[item.CompCode]);
                        m_LstEntrys.Add(entry);
                    });
                }
                if (tradeFlowJoin == null)
                {
                    tradeFlowJoin.Append("");
                }
                var node = new Tx_Node(item.FlowCode.Trim(), tradeFlowJoin.ToString(), item.CompCode.Trim())
                {
                    X = 0.0f,
                    Y = 0.0f
                };
                m_Nodes.Add(node);
            }
            if (m_Nodes.Count < 1)
            {
                return;
            }
            var firstNode = FindFirstNode();

            firstNode.X = mc_START_X;
            firstNode.Y = mc_START_Y;
            m_LstNodes.Add(firstNode);
            pointList = new List <Point>();
            pointList.Add(new Point(firstNode.X, firstNode.Y));
            m_LayOutCount++;
            LayOut_NextNodes(firstNode);
            //m_LstHeadNode = GetHeadNodes();
            //foreach (Tx_Node nextLayNode in m_Nodes)
            //{
            //    if (m_LstHeadNode != null)
            //    {
            //        //非起始子交易的头结点树的分布控制
            //        foreach (Tx_Node txNodeHaad in m_LstHeadNode)
            //        {
            //            if (txNodeHaad.Flow_code == nextLayNode.Flow_code)
            //            {
            //                txNodeHaad.X = mc_START_X + 250;
            //                txNodeHaad.Y = mc_START_Y;
            //                this.m_LayOutCount++;
            //                m_LstNodes.Add(txNodeHaad);
            //                this.LayOut_NextNodes(txNodeHaad);
            //            }
            //        }
            //    }
            //    this.LayOut_NextNodes(nextLayNode);
            //}
        }
コード例 #2
0
ファイル: MyCanvas.cs プロジェクト: ohzxc/DesignerCanvasTest
        /// <summary>
        /// 布局算法 确定节点位置
        /// </summary>
        public void LayOut()
        {
            m_LayOutCount = 0;
            m_LstNodes = new List<Tx_Node>();
            m_Nodes = new List<Tx_Node>();
            m_LstEntrys = new List<Tx_Entry>();
            foreach (TradeFlow item in flowList)
            {
                var tradeFlowJoin = new StringBuilder();//串连交易流程
                string[] str = { "#", "=" };
                var _tradeFlow = item.Trade_Flow.Trim();
                var x3 = _tradeFlow.Remove(_tradeFlow.Length - 2, 2);
                var _s = x3.Split(str, StringSplitOptions.RemoveEmptyEntries);
                if (_s.Count() > 0)
                {
                    var i=0;
                    _s.ToList().ForEach(k =>
                    {
                        i++;
                        var m = k.Remove(k.Length - 1, 1);
                        var condition = m.Split('@')[0].ToString();
                        var subtxCode = m.Split('@')[1].ToString();

                        tradeFlowJoin.Append(subtxCode);
                        if (_s.Count() > 1 && i < _s.Count())
                        {
                            tradeFlowJoin.Append('@');
                        }

                        var entry = new Tx_Entry(item.FlowCode, subtxCode,condition, m_Connection[item.CompCode]);
                        m_LstEntrys.Add(entry);
                    });
                }
                if (tradeFlowJoin == null)
                    tradeFlowJoin.Append("");
                var node = new Tx_Node(item.FlowCode.Trim(), tradeFlowJoin.ToString(), item.CompCode.Trim())
                {
                    X=0.0f,
                    Y=0.0f
                };
                m_Nodes.Add(node);
            }
            if (m_Nodes.Count < 1)
            {
                return;
            }
            var firstNode = FindFirstNode();
            firstNode.X = mc_START_X;
            firstNode.Y = mc_START_Y;
            m_LstNodes.Add(firstNode);
            pointList = new List<Point>();
            pointList.Add(new Point(firstNode.X, firstNode.Y));
            m_LayOutCount++;
            LayOut_NextNodes(firstNode);
            //m_LstHeadNode = GetHeadNodes();
            //foreach (Tx_Node nextLayNode in m_Nodes)
            //{
            //    if (m_LstHeadNode != null)
            //    {
            //        //非起始子交易的头结点树的分布控制
            //        foreach (Tx_Node txNodeHaad in m_LstHeadNode)
            //        {
            //            if (txNodeHaad.Flow_code == nextLayNode.Flow_code)
            //            {
            //                txNodeHaad.X = mc_START_X + 250;
            //                txNodeHaad.Y = mc_START_Y;
            //                this.m_LayOutCount++;
            //                m_LstNodes.Add(txNodeHaad);
            //                this.LayOut_NextNodes(txNodeHaad);
            //            }
            //        }
            //    }
            //    this.LayOut_NextNodes(nextLayNode);
            //}
        }