Changeset 1670


Ignore:
Timestamp:
Jun 18, 2010, 12:31:10 AM (12 years ago)
Author:
matkovic
Message:

-fixed orthogonal lines (almost perfect)

Location:
trunk/CrypPlugins/WorkspaceManager/View/VisualComponents
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/CryptoLineView.cs

    r1640 r1670  
    186186
    187187            context.BeginFigure(StartPoint, true, false);
     188            //Console.WriteLine("----------------------------------------------------------------------");
     189            //foreach (FromTo fromto in pointList)
     190            //{
     191            //    Console.WriteLine(fromto.ToString());
     192            //    foreach (var intersectPoint in fromto.Intersection)
     193            //    {
     194            //        Console.WriteLine("  " + intersectPoint);
     195            //    }
     196            //}
    188197
    189198            foreach (FromTo fromTo in pointList)
     
    193202                    foreach (Point interPoint in fromTo.Intersection)
    194203                    {
    195                         if (fromTo.From.X == fromTo.To.X)
     204                        switch (fromTo.DirSort)
    196205                        {
    197                             context.LineTo(new Point(iPoint.X, iPoint.Y - offset), true, true);
    198                             context.QuadraticBezierTo(new Point(iPoint.X + offset, iPoint.Y), new Point(iPoint.X, iPoint.Y + offset), true, true);
     206                            case DirSort.X_ASC:
     207                                context.LineTo(new Point(interPoint.X - offset, interPoint.Y), true, true);
     208                                context.QuadraticBezierTo(new Point(interPoint.X, interPoint.Y + offset), new Point(interPoint.X + offset, interPoint.Y), true, true);
     209                                break;
     210                            case DirSort.X_DESC:
     211                                context.LineTo(new Point(interPoint.X + offset, interPoint.Y), true, true);
     212                                context.QuadraticBezierTo(new Point(interPoint.X, interPoint.Y + offset), new Point(interPoint.X - offset, interPoint.Y), true, true);
     213                                break;
     214                            case DirSort.Y_ASC:
     215                                context.LineTo(new Point(interPoint.X, interPoint.Y - offset), true, true);
     216                                context.QuadraticBezierTo(new Point(interPoint.X + offset, interPoint.Y), new Point(interPoint.X, interPoint.Y + offset), true, true);
     217                                break;
     218                            case DirSort.Y_DESC:
     219                                context.LineTo(new Point(interPoint.X, interPoint.Y + offset), true, true);
     220                                context.QuadraticBezierTo(new Point(interPoint.X + offset, interPoint.Y), new Point(interPoint.X, interPoint.Y - offset), true, true);
     221                                break;
    199222                        }
    200                         else if (fromTo.From.Y == fromTo.To.Y)
    201                         {
    202                             context.LineTo(new Point(iPoint.X - offset, iPoint.Y), true, true);
    203                             context.QuadraticBezierTo(new Point(iPoint.X, iPoint.Y + offset), new Point(iPoint.X + offset, iPoint.Y), true, true);
    204                         }
    205                         context.LineTo(fromTo.To, true, true);
    206223                    }
    207 
     224                    context.LineTo(fromTo.To, true, true);
    208225                }
    209226                else
  • trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/FromTo.cs

    r1641 r1670  
    77namespace WorkspaceManager.View.VisualComponents
    88{
     9    enum DirSort
     10    {
     11        X_DESC,
     12        Y_DESC,
     13        X_ASC,
     14        Y_ASC
     15    };
     16
    917    class FromTo
    1018    {
     19        public DirSort DirSort { get; private set; }
    1120        public Point From { get; private set; }
    1221        public Point To { get; private set; }
     
    1726            this.From = from;
    1827            this.To = to;
    19             this.Intersection = new SortedSet<Point>(new InLineSorter(From, 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<Point>(new InLineSorter(DirSort));
     45        }
     46
     47        public override string ToString()
     48        {
     49            return "From"+From.ToString() + " " +"To"+ To.ToString();
    2050        }
    2151
     
    2454    class InLineSorter : IComparer<Point>
    2555    {
    26         private enum DirSort
    27         {
    28             X_DESC,
    29             Y_DESC,
    30             X_ASC,
    31             Y_ASC
    32         };
    33 
    3456        private DirSort dirSort;
    3557
    36         public InLineSorter(Point From, Point To)
     58        public InLineSorter(DirSort dirsort)
    3759        {
    38             if (From.X == To.X)
    39             {
    40                 if (From.Y > To.Y)
    41                     dirSort = DirSort.Y_ASC;
    42                 else
    43                     dirSort = DirSort.Y_DESC;
    44             }
    45             else if (From.Y == To.Y)
    46             {
    47                 if (From.X > To.X)
    48                     dirSort = DirSort.X_ASC;
    49                 else
    50                     dirSort = DirSort.X_DESC;
    51             }
    52             else
    53                 throw new Exception("90° only");
     60            this.dirSort = dirsort;
    5461        }
    5562
     
    6370            switch (dirSort)
    6471            {
     72                case DirSort.Y_ASC:
     73                    return a.Y.CompareTo(b.Y);
    6574                case DirSort.Y_DESC:
    66                     return a.Y.CompareTo(b.Y);
    67                 case DirSort.Y_ASC:
    6875                    return b.Y.CompareTo(a.Y);
     76                case DirSort.X_ASC:
     77                    return a.X.CompareTo(b.X);
    6978                case DirSort.X_DESC:
    70                     return a.X.CompareTo(b.X);
    71                 case DirSort.X_ASC:
    7279                    return b.X.CompareTo(a.X);
    7380                default:
Note: See TracChangeset for help on using the changeset viewer.