Пример #1
0
        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();
        }
Пример #2
0
        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);
                    }
                }
            }
        }