Ignore:
Timestamp:
Aug 4, 2010, 3:44:13 AM (11 years ago)
Author:
matkovic
Message:

-Intersected lines now drawn correctly

File:
1 edited

Legend:

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

    r1717 r1756  
    1212using System.Windows.Documents;
    1313using System.Collections.Generic;
     14using System.Threading;
    1415
    1516namespace WorkspaceManager.View.VisualComponents
     
    1920        #region Variables
    2021
    21         private Point iPoint = new Point();
     22        private IntersectPoint intersectPoint;
    2223        private List<FromTo> pointList = new List<FromTo>();
     24        public HashSet<CryptoLineView> UpdateList = new HashSet<CryptoLineView>();
    2325
    2426        private ConnectionModel model;
     
    2830            private set { model = value; }
    2931        }
    30         private static double offset = 10;
     32        private static double offset = 7.5;
    3133
    3234        #endregion
     
    4446        {
    4547            get { return (Point)GetValue(StartPointProperty); }
    46             set { SetValue(StartPointProperty, value); }
     48            set
     49            {
     50                SetValue(StartPointProperty, value);
     51            }
    4752        }
    4853
     
    5055        {
    5156            get { return (Point)GetValue(EndPointProperty); }
    52             set { SetValue(EndPointProperty, value); }
    53         }
    54 
    55                 #endregion
    56 
    57 
     57            set
     58            {
     59                SetValue(EndPointProperty, value);
     60            }
     61        }
     62
     63                #endregion
    5864
    5965        public CryptoLineView()
     
    6167            Stroke = Brushes.Black;
    6268            StrokeThickness = 2;
     69        }
     70
     71        protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
     72        {
     73            base.OnPropertyChanged(e);
     74            foreach (CryptoLineView line in UpdateList)
     75            {
     76                line.InvalidateVisual();
     77            }
    6378        }
    6479
     
    150165                }
    151166                   
    152                 if(isBetween(down.Y, up.Y, left.Y) &&
    153                     isBetween(left.X, right.X, up.X))
    154                 {
    155                     iPoint = new Point(up.X, left.Y);
     167                if(isBetween(down.Y, up.Y, left.Y) && isBetween(left.X, right.X, up.X))
     168                {
     169                    if (StartPoint.Y == StartPointSec.Y && StartPoint.X > StartPointSec.X)
     170                    {
     171                        intersectPoint = new IntersectPoint(new Point(up.X, left.Y));
     172                        //intersectPoint.Mode = IntersectPointMode.InnerIntersect;
     173                    }
     174                    else
     175                    {
     176                        intersectPoint = new IntersectPoint(new Point(up.X, left.Y));
     177                    }
    156178                    return true;
    157179                }
     
    162184                private void internalGeometryDraw(StreamGeometryContext context)
    163185                {
    164             double theta = Math.Atan2(StartPoint.Y - EndPoint.Y, StartPoint.X - EndPoint.X);
    165                         double sint = Math.Sin(theta);
    166                         double cost = Math.Cos(theta);
    167 
    168186            makeOrthogonalPoints();
    169187            foreach (var element in (Parent as Panel).Children)
     
    178196                            if (findIntersection(fromTo.From, fromTo.To, resultFromTo.From, resultFromTo.To))
    179197                            {
    180                                 fromTo.Intersection.Add(iPoint);
     198                                fromTo.Intersection.Add(intersectPoint);
     199
     200                                if (fromTo.DirSort == DirSort.Y_ASC || fromTo.DirSort == DirSort.Y_DESC)
     201                                    this.UpdateList.Add(result);
    181202                            }
    182203                        }
    183204                    }
    184                     //result.InvalidateMeasure();
    185                 }
    186             }
    187 
    188 
     205                }
     206            }
    189207
    190208            context.BeginFigure(StartPoint, true, false);
     
    194212                if (fromTo.Intersection.Count > 0)
    195213                {
    196                     foreach (Point interPoint in fromTo.Intersection)
    197                     {
    198                         switch (fromTo.DirSort)
     214                    foreach (IntersectPoint interPoint in fromTo.Intersection)
     215                    {
     216                        if (intersectPoint.Mode == IntersectPointMode.NormalIntersect)
    199217                        {
    200                             case DirSort.X_ASC:
    201                                 context.LineTo(new Point(interPoint.X - offset, interPoint.Y), true, true);
    202                                 context.QuadraticBezierTo(new Point(interPoint.X, interPoint.Y + offset), new Point(interPoint.X + offset, interPoint.Y), true, true);
    203                                 break;
    204                             case DirSort.X_DESC:
    205                                 context.LineTo(new Point(interPoint.X + offset, interPoint.Y), true, true);
    206                                 context.QuadraticBezierTo(new Point(interPoint.X, interPoint.Y + offset), new Point(interPoint.X - offset, interPoint.Y), true, true);
    207                                 break;
    208                             case DirSort.Y_ASC:
    209                                 context.LineTo(new Point(interPoint.X, interPoint.Y - offset), true, true);
    210                                 context.QuadraticBezierTo(new Point(interPoint.X + offset, interPoint.Y), new Point(interPoint.X, interPoint.Y + offset), true, true);
    211                                 break;
    212                             case DirSort.Y_DESC:
    213                                 context.LineTo(new Point(interPoint.X, interPoint.Y + offset), true, true);
    214                                 context.QuadraticBezierTo(new Point(interPoint.X + offset, interPoint.Y), new Point(interPoint.X, interPoint.Y - offset), true, true);
    215                                 break;
     218                            switch (fromTo.DirSort)
     219                            {
     220                                case DirSort.X_ASC:
     221                                    context.LineTo(new Point(interPoint.Point.X - offset, interPoint.Point.Y), true, true);
     222                                    context.QuadraticBezierTo(new Point(interPoint.Point.X, interPoint.Point.Y - offset), new Point(interPoint.Point.X + offset, interPoint.Point.Y), true, true);
     223                                    break;
     224                                case DirSort.X_DESC:
     225                                    context.LineTo(new Point(interPoint.Point.X + offset, interPoint.Point.Y), true, true);
     226                                    context.QuadraticBezierTo(new Point(interPoint.Point.X, interPoint.Point.Y - offset), new Point(interPoint.Point.X - offset, interPoint.Point.Y), true, true);
     227                                    break;
     228                                //case DirSort.Y_ASC:
     229                                //    context.LineTo(new Point(interPoint.X, interPoint.Y - offset), true, true);
     230                                //    context.QuadraticBezierTo(new Point(interPoint.X + offset, interPoint.Y), new Point(interPoint.X, interPoint.Y + offset), true, true);
     231                                //    break;
     232                                //case DirSort.Y_DESC:
     233                                //    context.LineTo(new Point(interPoint.X, interPoint.Y + offset), true, true);
     234                                //    context.QuadraticBezierTo(new Point(interPoint.X + offset, interPoint.Y), new Point(interPoint.X, interPoint.Y - offset), true, true);
     235                                //    break;
     236                            }
    216237                        }
     238                        else if (intersectPoint.Mode == IntersectPointMode.InnerIntersect)
     239                        {
     240                            context.LineTo(new Point(interPoint.Point.X - offset, interPoint.Point.Y), true, true);
     241                            context.QuadraticBezierTo(new Point(interPoint.Point.X, interPoint.Point.Y - offset), new Point(interPoint.Point.X + offset, interPoint.Point.Y), true, true);
     242                            context.QuadraticBezierTo(new Point(interPoint.Point.X, interPoint.Point.Y - offset), new Point(interPoint.Point.X - offset, interPoint.Point.Y), true, true);
     243                        }
    217244                    }
    218245                    context.LineTo(fromTo.To, true, true);
     
    223250                }
    224251            }
    225                 }
     252        }
    226253
    227254        private void makeOrthogonalPoints()
Note: See TracChangeset for help on using the changeset viewer.