Exemple #1
0
        /*
         * void AdjustNodeBoundariesAccordingToRanks(Node[] nodeArray, double[] ranks) {
         *  Array.Sort(ranks, nodeArray);
         *  Array.Reverse(nodeArray);
         *  Array.Reverse(ranks);
         *  double sum=0.0;
         *  double middle = 0.5;
         *  int i = 0;
         *  for (; i < ranks.Length; i++)
         *      sum += ranks[i];
         *
         *  var halfSum = 0.5*sum;
         *  sum = 0;
         *  for(i=0;i<ranks.Length;i++){
         *     sum += ranks[i];
         *      if(sum>=halfSum){
         *          middle = ranks[i];
         *          break;
         *      }
         *  }
         *
         *
         *  //linear mapping from ranks; all before index i are enlarlged
         *  //all after i are shrinked
         * //enlarging from 1 to 2
         *  //middle->1
         *  //ranks[0]->2
         *
         *  double k = 1/(ranks[0] - middle);
         *  double b = 1 - k*middle;
         *  int j;
         *  for (j = 0; j <= i; j++) {
         *      var scale = k*ranks[j] + b;
         *      var node = nodeArray[j];
         *      node.BoundaryCurve =
         *          node.BoundaryCurve.Transform(PlaneTransformation.ScaleAroundCenterTransformation(scale,
         *                                                                                           node.Center));
         *  }
         *
         *  //ranks[j+1]->1
         *  //ranks[last]->0.3
         *  const double lowScale = 0.3;
         *  k = (1-lowScale) / (ranks[j] - ranks[ranks.Length-1]);
         *  b = 1 - k * ranks[j];
         *  for (; j < ranks.Length; j++)
         *  {
         *      var scale = k * ranks[j] + b;
         *      var node = nodeArray[j];
         *      node.BoundaryCurve =
         *          node.BoundaryCurve.Transform(PlaneTransformation.ScaleAroundCenterTransformation(scale,
         *                                                                                           node.Center));
         *  }
         *
         * }
         */


        /// <summary>
        ///
        /// </summary>
        public void RunOnViewChange()
        {
            visibleRectangle = Rectangle.Intersect(lgLayoutSettings.ClientViewportMappedToGraph,
                                                   mainGeometryGraph.BoundingBox);

            //            if (MainGeometryGraph.Edges.Count == 33) {
            //                LayoutAlgorithmSettings.ShowDebugCurves(
            //                    new DebugCurve("red", MainGeometryGraph.BoundingBox.Perimeter()),
            //                    new DebugCurve("blue", visibleRectangle.Perimeter()));
            //                LayoutAlgorithmSettings.ShowGraph(clusterOGraph);
            //            }
            if (visibleRectangle.IsEmpty)
            {
                return;                           //probably we should avoid this situation
            }
            CurrentZoomLevel = GetZoomFactorToTheGraph();
            FillRailGraph();

            //            if (MainGeometryGraph.Edges.Count == 33)
            //                LayoutAlgorithmSettings.ShowGraph(clusterOGraph);

            lgLayoutSettings.OnViewerChangeTransformAndInvalidateGraph(null);
        }