/// <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); }
/// <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); }
/// <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++; // //递归对后续节点进行布局 //} }
/// <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++; // //递归对后续节点进行布局 //} }
/// <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; }
/// <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; }