Changeset 1928


Ignore:
Timestamp:
Sep 19, 2010, 8:48:16 PM (11 years ago)
Author:
matkovic
Message:

-Fixed some Collections issues

Location:
trunk/CrypPlugins/WorkspaceManager/View
Files:
1 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/View/Container/PluginContainerView.xaml.cs

    r1927 r1928  
    5151        #region Properties
    5252
     53        internal Point GetRoutingPoint(int routPoint)
     54        {
     55            switch (routPoint)
     56            {
     57                case 0:
     58                    return new Point((this.RenderTransform as TranslateTransform).X - 1, (this.RenderTransform as TranslateTransform).Y - 1);
     59                case 1:
     60                    return new Point((this.RenderTransform as TranslateTransform).X - 1, (this.RenderTransform as TranslateTransform).Y + this.ActualHeight + 1);
     61                case 2:
     62                    return new Point((this.RenderTransform as TranslateTransform).X + 1 + this.ActualWidth, (this.RenderTransform as TranslateTransform).Y + 1);
     63                case 3:
     64                    return new Point((this.RenderTransform as TranslateTransform).X + this.ActualWidth + 1, (this.RenderTransform as TranslateTransform).Y + this.ActualHeight + 1);
     65            }
     66            return default(Point);
     67        }
     68
    5369        public Point[] RoutingPoints
    5470        {
     
    770786            OptionCaption.Text = btn.ToolTip as String;
    771787        }
     788
    772789    }
    773790
  • trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/CryptoLineView/CryptoLineView.cs

    r1927 r1928  
    285285
    286286
    287      
     287
     288        //private bool isConnectionPossible(Point p1, Point p2, QuadTreeLib.QuadTree<FakeNode> quad)
     289        //{
     290        //    if (p1.X != p2.X && p1.Y != p2.Y)
     291        //        throw new ArgumentException("only 90° allowed");
     292
     293        //    if (p1.Y != p2.Y)
     294        //    {
     295        //        Point up = p2.Y < p1.Y ? p2 : p1;
     296        //        Point down = p2.Y < p1.Y ? p1 : p2;
     297
     298        //        Panel parent = (Parent as Panel);
     299        //        foreach (var element in parent.Children)
     300        //        {
     301        //            PluginContainerView plug1 = element as PluginContainerView;
     302        //            if (plug1 == null)
     303        //                continue;
     304        //            Point pos = new Point((plug1.RenderTransform as TranslateTransform).X, (plug1.RenderTransform as TranslateTransform).Y);
     305
     306        //            if (!isBetween(pos.X, pos.X + plug1.ActualWidth, up.X))
     307        //                continue;
     308
     309        //            // case 1: one point is inside the plugin
     310        //            if (isBetween(pos.Y, pos.Y + plug1.ActualHeight, up.Y) ||
     311        //                isBetween(pos.Y, pos.Y + plug1.ActualHeight, down.Y))
     312        //            {
     313        //                return false;
     314        //            }
     315
     316        //            // case 2: goes through
     317        //            if (pos.Y > up.Y && pos.Y + plug1.ActualHeight < down.Y)
     318        //            {
     319        //                return false;
     320        //            }
     321        //        }
     322        //    }
     323        //    else
     324        //    {
     325        //        Point left = p2.X < p1.X ? p2 : p1;
     326        //        Point right = p2.X < p1.X ? p1 : p2;
     327
     328        //        Panel parent = (Parent as Panel);
     329        //        foreach (var element in parent.Children)
     330        //        {
     331        //            PluginContainerView plug1 = element as PluginContainerView;
     332        //            if (plug1 == null)
     333        //                continue;
     334        //            Point pos = new Point((plug1.RenderTransform as TranslateTransform).X, (plug1.RenderTransform as TranslateTransform).Y);
     335
     336        //            if (!isBetween(pos.Y, pos.Y + plug1.ActualHeight, left.Y))
     337        //                continue;
     338
     339        //            // case 1: one point is inside the plugin
     340        //            if (isBetween(pos.X, pos.X + plug1.ActualWidth, left.X) ||
     341        //                isBetween(pos.X, pos.X + plug1.ActualWidth, right.X))
     342        //            {
     343        //                return false;
     344        //            }
     345
     346        //            // case 2: goes through
     347        //            if (pos.X > left.X && pos.X + plug1.ActualWidth < right.X)
     348        //            {
     349        //                return false;
     350        //            }
     351        //        }
     352        //    }
     353
     354        //    return true;
     355        //}
     356
    288357        private bool isConnectionPossible(Point p1, Point p2, QuadTreeLib.QuadTree<FakeNode> quadTree)
    289358        {
     
    295364            {
    296365                Point up = p2.Y < p1.Y ? p2 : p1;
    297                 Point down = p2.Y < p1.Y?p1 : p2;
     366                Point down = p2.Y < p1.Y ? p1 : p2;
    298367
    299368                queryRect = new System.Drawing.RectangleF((float)up.X, (float)up.Y, 1, (float)(down.Y - up.Y));
     
    304373                Point right = p2.X < p1.X ? p1 : p2;
    305374
    306                 queryRect = new System.Drawing.RectangleF((float)left.X, (float)left.Y, (float)(right.X-left.X), 1);
     375                queryRect = new System.Drawing.RectangleF((float)left.X, (float)left.Y, (float)(right.X - left.X), 1);
    307376            }
    308377
     
    333402                return Vertices;
    334403            }
     404
     405 
    335406        }
    336407
     
    378449            QuadTreeLib.QuadTree<FakeNode> quadTree = new QuadTreeLib.QuadTree<FakeNode>(new System.Drawing.RectangleF(0,0,(float)parent.ActualWidth,(float) parent.ActualHeight));
    379450
    380             foreach (var element in parent.Children)
    381             {
    382                 if (element is PluginContainerView)
    383                 {
    384                     PluginContainerView p1 = element as PluginContainerView;
    385                     foreach (var routPoint in p1.RoutingPoints)
    386                     {
    387                         nodeList.Add(new Node() { Point = routPoint });
    388                     }
    389                     quadTree.Insert(new FakeNode() { Rectangle = new System.Drawing.RectangleF((float)(p1.RenderTransform as TranslateTransform).X,
    390                                                                                                 (float)(p1.RenderTransform as TranslateTransform).Y,
    391                                                                                                 (float)p1.ActualWidth,
    392                                                                                                 (float)p1.ActualHeight)});
    393                 }
    394             }
    395            
     451            //foreach (var element in parent.Children)
     452            //{
     453            //    if (element is PluginContainerView)
     454            //    {
     455            //        PluginContainerView p1 = element as PluginContainerView;
     456            //        foreach (var routPoint in p1.RoutingPoints)
     457            //        {
     458            //            nodeList.Add(new Node() { Point = routPoint });
     459            //        }
     460            //        quadTree.Insert(new FakeNode() { Rectangle = new System.Drawing.RectangleF((float)(p1.RenderTransform as TranslateTransform).X,
     461            //                                                                                    (float)(p1.RenderTransform as TranslateTransform).Y,
     462            //                                                                                    (float)p1.ActualWidth,
     463            //                                                                                    (float)p1.ActualHeight)});
     464            //    }
     465            //}
     466            for (int routPoint = 0; routPoint < 4; ++routPoint)
     467            {
     468                foreach (var element in parent.Children)
     469                {
     470                    if (element is PluginContainerView)
     471                    {
     472                        PluginContainerView p1 = element as PluginContainerView;
     473                        nodeList.Add(new Node() { Point = p1.GetRoutingPoint(routPoint) });
     474                        if (routPoint == 0)
     475                        {
     476                            quadTree.Insert(new FakeNode()
     477                            {
     478                                Rectangle = new System.Drawing.RectangleF((float)(p1.RenderTransform as TranslateTransform).X,
     479                                                                           (float)(p1.RenderTransform as TranslateTransform).Y,
     480                                                                           (float)p1.ActualWidth,
     481                                                                           (float)p1.ActualHeight)
     482                            });
     483                        }
     484                    }
     485                }
     486            }
     487
    396488            // connect points
    397489            int loopCount = nodeList.Count;
  • trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/CryptoLineView/StackFrameDijkstra/Dijkstra.cs

    r1927 r1928  
    1313        public double Dist {get;set;}
    1414
     15        private static int uniqueCounter;
     16        protected readonly int uniqueIndex;
     17
    1518        public State(T node, State parent, double dist) : base(node, parent) {
    1619            this.Dist = dist;
     20            uniqueIndex = ++uniqueCounter;
     21        }
     22       
     23        public int CompareTo(State other) {
     24            int res =  Dist.CompareTo(other.Dist);
     25            //if res and other is equal then apply different CompareTo() value (OrderedSet deletes any State if
     26
     27            if (res == 0)
     28                return uniqueIndex.CompareTo(other.uniqueIndex);
     29             return res;
    1730        }
    1831
    19         public int CompareTo(State other) {
    20             return Dist.CompareTo(other.Dist);
    21         }
    2232
    2333    }
     
    2636   
    2737        Dictionary<T, State> states = new Dictionary<T, State>();
    28         OrderedSet<State> unvisitedNodes = new OrderedSet<State>((a, b) => a.CompareTo(b));
    29         //BinaryQueue<State, double> unvisitedNodes = new BinaryQueue<State, double>(m => m.Dist, (a,b) => a.CompareTo(b));
     38        OrderedSet<State> unvisitedNodes = new OrderedSet<State>();
    3039
    3140        foreach(T n in graph) {
     
    4251            var visitingNode = unvisitedNodes.RemoveFirst();
    4352
    44             if (visitingNode.Dist == Double.PositiveInfinity) {
     53           if (visitingNode.Dist == Double.PositiveInfinity) {
    4554                break;
    4655            }
     
    5261
    5362            foreach (T v in visitingNode.Node.neighbors()) {
     63                State vState = states[v];
    5464                double altPathCost = visitingNode.Dist + visitingNode.Node.traverseCost(v);
    55                 State vState = states[v];
     65               
    5666                if (altPathCost < vState.Dist) {
    5767                    unvisitedNodes.Remove(vState);
  • trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/CryptoLineView/StackFrameDijkstra/Node.cs

    r1924 r1928  
    66namespace WorkspaceManager.View.VisualComponents.StackFrameDijkstra
    77{
    8 public interface Node<T> where T:Node<T> {
    9     /**
    10      * Returns the cost to get from this node to the dest node.
    11      *
    12      * @return the cost
    13      */
    14     double traverseCost(T dest);
     8    public interface Node<T> where T : Node<T>
     9    {
     10        /**
     11         * Returns the cost to get from this node to the dest node.
     12         *
     13         * @return the cost
     14         */
     15        double traverseCost(T dest);
    1516
    16     /**
    17      * Returns the neighbors of this node.
    18      *
    19      * @return the neighbors
    20      */
    21     IEnumerable<T> neighbors();
     17        /**
     18         * Returns the neighbors of this node.
     19         *
     20         * @return the neighbors
     21         */
     22        IEnumerable<T> neighbors();
     23
     24    }
    2225
    2326}
    24 
    25 }
Note: See TracChangeset for help on using the changeset viewer.