source: trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/CryptoLineView/FromTo.cs @ 2388

Last change on this file since 2388 was 1756, checked in by matkovic, 11 years ago

-Intersected lines now drawn correctly

File size: 2.4 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows;
6
7namespace WorkspaceManager.View.VisualComponents
8{
9    enum DirSort
10    {
11        X_DESC,
12        Y_DESC,
13        X_ASC,
14        Y_ASC
15    };
16
17    class FromTo
18    {
19        public DirSort DirSort { get; private set; }
20        public Point From { get; private set; }
21        public Point To { get; private set; }
22        public SortedSet<IntersectPoint> Intersection { get; private set; }
23
24        public FromTo(Point from, Point to)
25        {
26            this.From = from;
27            this.To = to;
28            if (From.X == To.X)
29            {
30                if (From.Y > To.Y)
31                    DirSort = DirSort.Y_DESC;
32                else
33                    DirSort = DirSort.Y_ASC;
34            }
35            else if (From.Y == To.Y)
36            {
37                if (From.X > To.X)
38                    DirSort = DirSort.X_DESC;
39                else
40                    DirSort = DirSort.X_ASC;
41            }
42            else
43                throw new Exception("90° only");
44            this.Intersection = new SortedSet<IntersectPoint>(new InLineSorter(DirSort));
45        }
46
47        public override string ToString()
48        {
49            return "From"+From.ToString() + " " +"To"+ To.ToString();
50        }
51
52    }
53
54    class InLineSorter : IComparer<IntersectPoint>
55    {
56        private DirSort dirSort;
57
58        public InLineSorter(DirSort dirsort)
59        {
60            this.dirSort = dirsort;
61        }
62
63        // Returns:
64        //     Value               Meaning
65        //  Less than zero      a is less than b
66        //  Zero                a equals b
67        //  Greater than zero   a is greater than b
68        public int Compare(IntersectPoint a, IntersectPoint b)
69        {
70            switch (dirSort)
71            {
72                case DirSort.Y_ASC:
73                    return a.Point.Y.CompareTo(b.Point.Y);
74                case DirSort.Y_DESC:
75                    return b.Point.Y.CompareTo(a.Point.Y);
76                case DirSort.X_ASC:
77                    return a.Point.X.CompareTo(b.Point.X);
78                case DirSort.X_DESC:
79                    return b.Point.X.CompareTo(a.Point.X);
80                default:
81                    throw new Exception("error");
82            }
83        }
84    }
85}
Note: See TracBrowser for help on using the repository browser.