Exemple #1
0
        public Result <List <TagRectangle> > GetRectangles(Graphics graphics, ImageSettings imageSettings,
                                                           string path = null)
        {
            layouter.Clear();
            var tagCollection = tagCollectionFactory.Create(imageSettings, path);

            if (!tagCollection.IsSuccess)
            {
                return(Result.Fail <List <TagRectangle> >(tagCollection.Error));
            }
            var center     = new Point(imageSettings.Width / 2, imageSettings.Height / 2);
            var rectangles = Result.Of(() => tagCollection.Value
                                       .Select(t => new TagRectangle(
                                                   t,
                                                   layouter.PutNextRectangle(GetWordSize(t, graphics), center)))
                                       .ToList())
                             .Then(list =>
            {
                if (!list.Any(r => IsRectangleInPolygon(r.Area, imageSettings.Width, imageSettings.Height)))
                {
                    throw new ArgumentException("Облако не помещается в изображение");
                }
                return(list);
            });

            return(rectangles);
        }
Exemple #2
0
        public void CloudPainter_ShouldCallLayouterExactTimesThatSpecifiedInSettings()
        {
            var words = new Dictionary <string, int> {
                ["hello"] = 1
            };
            var painter = new CloudWithWordsPainter(imageHolder, settings, palette, layouter, words);

            painter.Paint();

            A.CallTo(() => layouter.PutNextRectangle(new Size(10, 10))).WithAnyArguments().MustHaveHappened(words.Count, Times.Exactly);
        }
Exemple #3
0
        public void CloudPainter_ShouldCallLayouterExactTimesThatSpecifiedInSettings()
        {
            var iterations = 10;

            A.CallTo(() => settings.IterationsCount).Returns(iterations);
            var painter = new CloudPainter(imageHolder, settings, palette, layouter);

            painter.Paint();

            A.CallTo(() => layouter.PutNextRectangle(new Size(10, 10))).WithAnyArguments().MustHaveHappened(iterations, Times.Exactly);
        }
Exemple #4
0
        public Dictionary <string, Rectangle> GetTagsRectangleData()
        {
            foreach (var word in tagsData.GetData())
            {
                var size      = tagSizeNormalizer.GetTagSize(word);
                var rectangle = circularCloudLayouter.PutNextRectangle(size);

                tagRectanglesData.Add(word, rectangle);
            }

            return(tagRectanglesData);
        }
Exemple #5
0
        public void CallsOfGetRectanglesEquelsCountOfTagsData()
        {
            var strings = new string[] { "1", "2", "3", "4", "5" };
            var counter = 0;

            tagsData.GetData().Returns(strings);
            circularCloudLoyauter
            .PutNextRectangle(Arg.Any <Size>())
            .ReturnsForAnyArgs(x => new Rectangle())
            .AndDoes(x => counter++);

            tagsCloudConteiner.GetTagsRectangleData();

            counter.Should().Be(5);
        }
Exemple #6
0
        public Dictionary <string, Rectangle> MakeCloud(Dictionary <string, int> tagsList, Size imageSize)
        {
            return(tagsList
                   .ToDictionary(tag => tag.Key,
                                 tag =>
            {
                var tagSize = (int)((double)tag.Value / tagsList.Values.Max()
                                    * (maxSize - minSize) + minSize);
                var rectangleSize = TextRenderer.MeasureText(tag.Key,
                                                             new Font(new FontFamily(this.font), tagSize,
                                                                      FontStyle.Regular, GraphicsUnit.Pixel));

                return cloudMaker.PutNextRectangle(rectangleSize);
            }));
        }
        private void DrawRectangle(IGraphicDrawer graphics, string word, int wordFrequency, Brush backgroundBrush, Pen rectPen, Brush textBrush)
        {
            var font = new Font("Arial", Math.Min(72, wordFrequency * settings.Scale));
            var size = new Size(TextRenderer.MeasureText(word, font).Width, TextRenderer.MeasureText(word, font).Height);
            var rect = layouter.PutNextRectangle(size);

            if (settings.Fill)
            {
                graphics.FillRectangle(backgroundBrush, rect);
            }
            if (settings.Frame)
            {
                graphics.DrawRectangle(rectPen, rect);
            }
            graphics.DrawString(word, font, textBrush, new PointF(rect.X, rect.Y));
        }