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); }
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); }
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); }
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); }
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); }
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)); }