private static double GetExpectedMaximumLayoutRadius(IRectangleLayouter layouter)
        {
            var occupiedArea = layouter.Rectangles
                               .Sum(rectangle => rectangle.Width * rectangle.Height);

            return(GetCircleRadiusFromArea(occupiedArea / MinOccupiedAreaRatio));
        }
 public void SetUp()
 {
     // Закомментируйте одну из строк ниже
     layouter = new CircularCloudLayouter(layoutCenter);
     // layouter = new BadLayouter(new Point(1000, 1000));
     minSize = new Size(5, 5);
     maxSize = new Size(20, 20);
 }
Example #3
0
 public TagsCloudVisualizator(IRectangleLayouter layouter, ICloudDesign cloudDesign, ITagsReader tagReader, IEnumerable <ITagsHandler> tagHandlerers)
 {
     this.tagReader     = tagReader;
     this.tagHandlerers = tagHandlerers;
     this.layouter      = layouter;
     this.cloudDesign   = cloudDesign;
     tagCloud           = new Bitmap(cloudDesign.CloudWidth, cloudDesign.CloudHeight);
 }
 private static void FillLayoutWithSomeRectangles(IRectangleLayouter layouter,
                                                  IEnumerable <Size> rectangleSizes)
 {
     foreach (var size in rectangleSizes)
     {
         layouter.PutNextRectangle(size);
     }
 }
Example #5
0
 public void SetUp()
 {
     settings     = new DrawerSettings();
     fakeLayouter = A.Fake <IRectangleLayouter>();
     A.CallTo(fakeLayouter)
     .Where(call => call.Method.Name == "PutNextRectangle")
     .WithReturnType <Result <Rectangle> >()
     .Returns(new Rectangle(0, 0, 50, 50));
     tags = new[] { new TagInfo("string", 0.5), new TagInfo("otherString", 0.2) };
 }
        public void Return_Rectangles()
        {
            IRectangleLayouter layouter = CreateTrackedLayouter(10, 8, 0.1);

            Rectangle rectA = layouter.Place(new Vector(10, 10));
            Rectangle rectB = layouter.Place(new Vector(10, 10));

            rectA.ShouldBeEquivalentTo(new Rectangle(Vector.Empty, new Vector(10, 10)));
            rectB.Center.Should().NotBe(Vector.Empty);
        }
Example #7
0
        private static List <Rectangle> FillLayoutWithSomeRectangles(IRectangleLayouter layouter,
                                                                     IEnumerable <Size> rectangleSizes)
        {
            var result = new List <Rectangle>();

            foreach (var size in rectangleSizes)
            {
                result.Add(layouter.PutNextRectangle(size).GetValueOrThrow());
            }
            return(result);
        }
Example #8
0
 public void DrawWords(Graphics graphics, IEnumerable <CloudTag> words, IRectangleLayouter layouter)
 {
     graphics.Clear(config.BackgroundColor);
     foreach (var word in words)
     {
         var wordFontSize = Math.Max(10, (int)(config.Font.Size * word.Weight));
         var font         = new Font(config.Font.FontFamily, wordFontSize);
         var size         = TextRenderer.MeasureText(word.Text, font);
         var area         = layouter.PutNextRectangle(size);
         graphics.DrawString(word.Text, font, config.Brush, area);
     }
 }
        public void GenerateRectangles_WhichPlacedInCircle()
        {
            IRectangleLayouter layouter      = CreateTrackedLayouter(10, 32, 0.1);
            Vector             rectangleSize = new Vector(40, 40);

            List <Rectangle> rectangles = Enumerable.Repeat(rectangleSize, 97).Select(size => layouter.Place(size)).ToList();

            foreach (double distanceToCenter in rectangles.Select(rect => rect.Center.Length))
            {
                distanceToCenter.Should().BeLessThan(220);
            }
        }
 private static Color GetRectangleColor(Rectangle rectangle, IRectangleLayouter layouter, double layoutRadius)
 {
     if (IsRectangleIntersectOther(layouter, rectangle))
     {
         return(Color.Red);
     }
     if (IsDistanceToRectangleOverLimit(rectangle, layouter.Center, layoutRadius))
     {
         return(Color.Yellow);
     }
     return(Color.LawnGreen);
 }
        private static bool IsRectangleIntersectOther(IRectangleLayouter layouter, Rectangle rectangle)
        {
            foreach (var otherRectangle in layouter.Rectangles)
            {
                if (rectangle != otherRectangle &&
                    rectangle.IntersectsWith(otherRectangle))
                {
                    return(true);
                }
            }

            return(false);
        }
Example #12
0
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            _cloudLayouter = new PositionedLayouter(new CircularCloudLayouter(200, 32, 0.1), new Vector(860, 540));
            _rectangles.Clear();

            for (int i = 0; i < 97; i++)
            {
                Rectangle rect = _cloudLayouter.Place(new Vector(40, 40));
                _rectangles.Add(rect);
            }

            Invalidate();
        }
        public void GenerateRectangles_WhichPlacedWithMaxDensity()
        {
            IRectangleLayouter layouter      = CreateTrackedLayouter(10, 32, 0.1);
            Vector             rectangleSize = new Vector(40, 40);

            List <Rectangle> rectangles = Enumerable.Repeat(rectangleSize, 97).Select(size => layouter.Place(size)).ToList();

            Rectangle bounds = rectangles.Aggregate(new Rectangle(), (current, rect) => current.Encapsulate(rect));

            double circleArea = System.Math.PI * 220 * 220;
            double shapeArea  = bounds.Area;

            System.Math.Abs(circleArea / shapeArea).Should().BeGreaterThan(0.75);
        }
Example #14
0
 public TagsCloudGenerator(
     IWordsFileReader wordReader,
     IEnumerable <IWordProcessor> processors,
     IWordMeasurer wordMeasurer,
     IRectangleLayouter layouter,
     IPainter painter,
     TagsCloudVisualizer visualizer)
 {
     this.layouter     = layouter;
     this.wordReader   = wordReader;
     this.processors   = processors;
     this.wordMeasurer = wordMeasurer;
     this.painter      = painter;
     this.visualizer   = visualizer;
 }
 public PositionedLayouter(IRectangleLayouter rectangleLayouter, Vector center)
 {
     _rectangleLayouter = rectangleLayouter;
     _center            = center;
 }
Example #16
0
 public WordsLayouter(IRectangleLayouter layouter, FontSettings fontSettings)
 {
     this.layouter     = layouter;
     this.fontSettings = fontSettings;
 }
Example #17
0
 public void SetUp()
 {
     layouter = new CircularCloudLayouter(new CircularLayouterSettings(layoutCenter, 4, 0.005));
     minSize  = new Size(5, 5);
     maxSize  = new Size(20, 20);
 }
Example #18
0
 public TagDrawer(DrawerSettings settings, IRectangleLayouter layouter)
 {
     this.layouter = layouter;
     this.settings = settings;
 }
Example #19
0
 public void SetUp()
 {
     rectLayouter = A.Fake<IRectangleLayouter>();
     layouter = new WordsLayouter(rectLayouter, new FontSettings());
 }
 public TrackedLayouter(IRectangleLayouter baseLayouter)
 {
     this._baseLayouter = baseLayouter;
 }
Example #21
0
 public CloudWordsLayouter(IRectangleLayouter rectangleLayouter)
 {
     this.rectangleLayouter = rectangleLayouter;
 }
Example #22
0
 public TagLayouter(IRectangleLayouter rectangleLayouter, FontSettings fontSettings)
 {
     this.rectangleLayouter = rectangleLayouter;
     this.fontSettings      = fontSettings;
 }