public void verify_track(string _first, int _x, int _y, int _dir) { draw_list = new List <string>(); draw_list.Clear(); List <string> _point_link = new List <string>(tracks[_first].next_start_end); foreach (string _link_name in tracks[_first].next_start_end) { foreach (string _return_track in tracks[_link_name].next_end_start) { if (!_point_link.Contains(_return_track)) { _point_link.Add(_return_track); } } } visual_point _visual_p = new visual_point(_x, _y, 0, _point_link); visual_points.Add(_visual_p); compile_track(_first, _x, _y, _dir); draw_graphic_track(); draw_graphic_signal(); }
private void compile_track(string _n, int _x, int _y, int _r) { physical_track _t = tracks[_n]; Pen blackPen = new Pen(Color.LightGray, 3); if (!draw_list.Contains(tracks[_n].name)) { draw_list.Add(tracks[_n].name); if (_r == 0) { // normal draw _t.location_end_start.X = _x; _t.location_end_start.Y = _y; _t.location_start_end.X = _x + _t.start_end_width; _t.location_start_end.Y = _y + _t.start_end_high; tracks[_n] = _t; // add point List <string> _point_link = new List <string>(_t.next_start_end); foreach (string _link_name in _t.next_start_end) { foreach (string _return_track in tracks[_link_name].next_end_start) { if (!_point_link.Contains(_return_track)) { _point_link.Add(_return_track); } } } visual_point _visual_p = new visual_point(_t.location_start_end.X, _t.location_start_end.Y, _t.distance_end, _point_link); visual_points.Add(_visual_p); foreach (string next_t in _t.next_start_end) { compile_track(tracks[next_t].name, _x + _t.start_end_width, _y + _t.start_end_high, 0); } foreach (string next_t in _t.next_end_start) { compile_track(tracks[next_t].name, _x, _y, 1); } } else { // revers //e.Graphics.DrawLine(blackPen, _x, _y, _x - _t.start_end_width, _y - _t.start_end_high); _t.location_start_end.X = _x; _t.location_start_end.Y = _y; _t.location_end_start.X = _x - _t.start_end_width; _t.location_end_start.Y = _y - _t.start_end_high; tracks[_n] = _t; List <string> _point_link = new List <string>(_t.next_end_start); foreach (string _link_name in _t.next_end_start) { foreach (string _return_track in tracks[_link_name].next_start_end) { if (!_point_link.Contains(_return_track)) { _point_link.Add(_return_track); } } } visual_point _visual_p = new visual_point(_t.location_end_start.X, _t.location_end_start.Y, _t.distance_start, _point_link); visual_points.Add(_visual_p); foreach (string next_t in _t.next_start_end) { compile_track(tracks[next_t].name, _x, _y, 0); } foreach (string next_t in _t.next_end_start) { compile_track(tracks[next_t].name, _x - _t.start_end_width, _y - _t.start_end_high, 1); } } } }