Ignore:
Timestamp:
Sep 18, 2010, 10:25:50 PM (11 years ago)
Author:
matkovic
Message:

-Completed pathfinding

File:
1 edited

Legend:

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

    r1923 r1924  
    275275        }
    276276
    277        
    278 
     277
     278        private bool isConnectionPossibleDebugWrapper(Point p1, Point p2)
     279        {
     280            bool a = isConnectionPossible(p1, p2);
     281            bool b = isConnectionPossible(p2, p1);
     282            if (a != b)
     283            {
     284                throw new Exception("State pew!");
     285            }
     286            return a;
     287        }
    279288        private bool isConnectionPossible(Point p1, Point p2)
    280289        {
     
    284293            if (p1.Y != p2.Y)
    285294            {
    286                 Point up = p2.Y < p1.Y ? p1 : p2;
    287                 Point down = p2.Y < p1.Y?p2 : p1;
     295                Point up = p2.Y < p1.Y ? p2 : p1;
     296                Point down = p2.Y < p1.Y?p1 : p2;
    288297
    289298                Panel parent = (Parent as Panel);
     
    298307                        continue;
    299308
    300                     // case 1: one point is inside the plugion
     309                    // case 1: one point is inside the plugin
    301310                    if (isBetween(pos.Y, pos.Y + plug1.ActualHeight, up.Y) ||
    302311                        isBetween(pos.Y, pos.Y + plug1.ActualHeight, down.Y))
     
    328337                        continue;
    329338
    330                     // case 1: one point is inside the plugion
     339                    // case 1: one point is inside the plugin
    331340                    if(isBetween(pos.X, pos.X + plug1.ActualWidth, left.X) ||
    332341                        isBetween(pos.X, pos.X + plug1.ActualWidth, right.X))
     
    355364            }
    356365
    357             public double pathCostEstimate(Node goal)
    358             {
    359                 return 0;
    360             }
    361 
    362366            public double traverseCost(Node dest)
    363367            {
     
    378382        private bool performOrthogonalPointConnection(Node n1, Point p2, Node n3, List<Node> nodeList)
    379383        {
    380             if (isConnectionPossible(n1.Point, p2) && isConnectionPossible(p2, n3.Point))
     384            if (isConnectionPossibleDebugWrapper(n1.Point, p2) && isConnectionPossibleDebugWrapper(p2, n3.Point))
    381385            {
    382386                Node n2 = new Node() { Point = p2 };
     
    396400        private void performOrthogonalPointConnection(Node p1, Node p2)
    397401        {
    398             if (isConnectionPossible(p1.Point, p2.Point))
     402            if (isConnectionPossibleDebugWrapper(p1.Point, p2.Point))
    399403            {
    400404                p1.Vertices.Add(p2);
     
    433437                // TODO: inner loop restriction! n²-n!
    434438                // is k=i instead of k=0 correct?
    435                 for(int k=0; k<loopCount; ++k)
     439                for(int k=i; k<loopCount; ++k)
    436440                {
    437441                    var p2 = nodeList[k];
     
    449453                    else
    450454                    {
    451                         Point help1 = new Point(p1.Point.X, p2.Point.Y);
    452 
    453                         if (!performOrthogonalPointConnection(p1, help1, p2, nodeList))
     455                        Point help = new Point(p1.Point.X, p2.Point.Y);
     456
     457                        if (!performOrthogonalPointConnection(p1, help, p2, nodeList))
    454458                        {
    455                             Point help2 = new Point(p2.Point.X, p1.Point.Y);
    456                             performOrthogonalPointConnection(p1, help2, p2, nodeList);
    457                             // optinal TODO: other possible helping points
     459                            help = new Point(p2.Point.X, p1.Point.Y);
     460                            if (!performOrthogonalPointConnection(p1, help, p2, nodeList))
     461                            {
     462                                // optional todo: double edge helping routes
     463                            }
    458464                        }
    459465                       
Note: See TracChangeset for help on using the changeset viewer.