diff --git a/cs/BowlingGame/Game.cs b/cs/BowlingGame/Game.cs index dc5704a72..30fe471a5 100644 --- a/cs/BowlingGame/Game.cs +++ b/cs/BowlingGame/Game.cs @@ -13,7 +13,7 @@ public void Roll(int pins) public int GetScore() { - throw new NotImplementedException(); + return 0; } } diff --git a/cs/README.md b/cs/README.md new file mode 100644 index 000000000..b49ec6db0 --- /dev/null +++ b/cs/README.md @@ -0,0 +1,5 @@ +![Getting Started](./images/50rectanglesR.jpg) + +![Getting Started](./images/150rectangles.jpg) + +![Getting Started](./images/500.jpg) \ No newline at end of file diff --git a/cs/TagsCloudVisualization/App.config b/cs/TagsCloudVisualization/App.config new file mode 100644 index 000000000..b0ffe2815 --- /dev/null +++ b/cs/TagsCloudVisualization/App.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cs/TagsCloudVisualization/CircularCloudLayouter.cs b/cs/TagsCloudVisualization/CircularCloudLayouter.cs new file mode 100644 index 000000000..468c4024b --- /dev/null +++ b/cs/TagsCloudVisualization/CircularCloudLayouter.cs @@ -0,0 +1,51 @@ +using System; +using System.Drawing; +using System.Linq; + +namespace TagsCloudVisualization +{ + public class CircularCloudLayouter : ICircularCloudLayouter + { + private readonly Cloud cloud; + private readonly IPointDistributor distributor; + + public CircularCloudLayouter(Point center, IPointDistributor type) + { + cloud = new Cloud(center); + distributor = type; + } + + public Rectangle PutNextRectangle(Size rectangleSize) + { + if (rectangleSize.Width <= 0 || rectangleSize.Height <= 0) + throw new ArgumentException(); + + if (cloud.Rectangles.Count == 0) + return AddToCenterPosition(rectangleSize); + + var rectangle = new Rectangle(distributor.GetPosition(), rectangleSize); + + while (HaveIntersection(rectangle)) + { + rectangle.Location = distributor.GetPosition(); + } + + cloud.Rectangles.Add(rectangle); + + return rectangle; + } + + private Rectangle AddToCenterPosition(Size rectangleSize) + { + var newRectangle = new Rectangle(new Point(cloud.Center.X - rectangleSize.Width / 2, + cloud.Center.Y - rectangleSize.Height / 2), rectangleSize); + + cloud.Rectangles.Add(newRectangle); + + return newRectangle; + } + + private bool HaveIntersection(Rectangle newRectangle) => + cloud.Rectangles.Any(rectangle => rectangle.IntersectsWith(newRectangle)); + } +} \ No newline at end of file diff --git a/cs/TagsCloudVisualization/Cloud.cs b/cs/TagsCloudVisualization/Cloud.cs new file mode 100644 index 000000000..97d8fc37b --- /dev/null +++ b/cs/TagsCloudVisualization/Cloud.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using System.Drawing; + +namespace TagsCloudVisualization +{ + public class Cloud + { + public Cloud(Point center) + { + Center = center; + } + + public readonly Point Center; + public readonly List Rectangles = new(); + } +} \ No newline at end of file diff --git a/cs/TagsCloudVisualization/ICircularCloudLayouter.cs b/cs/TagsCloudVisualization/ICircularCloudLayouter.cs new file mode 100644 index 000000000..8e659a7fe --- /dev/null +++ b/cs/TagsCloudVisualization/ICircularCloudLayouter.cs @@ -0,0 +1,9 @@ +using System.Drawing; + +namespace TagsCloudVisualization +{ + public interface ICircularCloudLayouter + { + Rectangle PutNextRectangle(Size rectangleSize); + } +} \ No newline at end of file diff --git a/cs/TagsCloudVisualization/IPointDistributor.cs b/cs/TagsCloudVisualization/IPointDistributor.cs new file mode 100644 index 000000000..5bef63577 --- /dev/null +++ b/cs/TagsCloudVisualization/IPointDistributor.cs @@ -0,0 +1,9 @@ +using System.Drawing; + +namespace TagsCloudVisualization +{ + public interface IPointDistributor + { + Point GetPosition(); + } +} \ No newline at end of file diff --git a/cs/TagsCloudVisualization/Program.cs b/cs/TagsCloudVisualization/Program.cs new file mode 100644 index 000000000..36eb775a7 --- /dev/null +++ b/cs/TagsCloudVisualization/Program.cs @@ -0,0 +1,15 @@ +using System.Drawing; + +namespace TagsCloudVisualization +{ + internal class Program + { + public const int ImageWidth = 1000; + public const int ImageHeight = 1000; + + public static void Main(string[] args) + { + new CircularCloudLayouter(new Point(ImageWidth / 2, ImageHeight / 2), new Spiral()); + } + } +} diff --git a/cs/TagsCloudVisualization/Properties/AssemblyInfo.cs b/cs/TagsCloudVisualization/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..389c37b82 --- /dev/null +++ b/cs/TagsCloudVisualization/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Общие сведения об этой сборке предоставляются следующим набором +// набора атрибутов. Измените значения этих атрибутов для изменения сведений, +// связанные с этой сборкой. +[assembly: AssemblyTitle("TagsCloudVisualization")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TagsCloudVisualization")] +[assembly: AssemblyCopyright("Copyright © 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми +// для компонентов COM. Если необходимо обратиться к типу в этой сборке через +// из модели COM задайте для атрибута ComVisible этого типа значение true. +[assembly: ComVisible(false)] + +// Следующий GUID представляет идентификатор typelib, если этот проект доступен из модели COM +[assembly: Guid("4f909c58-0835-4f9f-ba74-9530c220d676")] + +// Сведения о версии сборки состоят из указанных ниже четырех значений: +// +// Основной номер версии +// Дополнительный номер версии +// Номер сборки +// Номер редакции +// +// Можно задать все значения или принять номера сборки и редакции по умолчанию +// используя "*", как показано ниже: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/cs/TagsCloudVisualization/Spiral.cs b/cs/TagsCloudVisualization/Spiral.cs new file mode 100644 index 000000000..0a01050a7 --- /dev/null +++ b/cs/TagsCloudVisualization/Spiral.cs @@ -0,0 +1,48 @@ +using System; +using System.Drawing; + +namespace TagsCloudVisualization +{ + public class Spiral : IPointDistributor + { + public Spiral() + { + step = 1; + deltaAngle = 0.1; + center = new Point(0, 0); + } + + public Spiral(int step, Point center, double deltaAngle) + { + this.step = step; + this.center = center; + this.deltaAngle = deltaAngle; + } + + private readonly int step; + private double angle; + private readonly double deltaAngle; + private Point center; + private bool centerOnPoint; + + public Point GetPosition() + { + if (!centerOnPoint) + { + centerOnPoint = true; + return center; + } + + angle += deltaAngle; + + var k = step / (2 * Math.PI); + var radius = k * angle; + + var position = new Point( + center.X + (int)(Math.Cos(angle) * radius), + center.Y + (int)(Math.Sin(angle) * radius)); + + return position; + } + } +} diff --git a/cs/TagsCloudVisualization/TagCloudRenderer.cs b/cs/TagsCloudVisualization/TagCloudRenderer.cs new file mode 100644 index 000000000..5fa8ad726 --- /dev/null +++ b/cs/TagsCloudVisualization/TagCloudRenderer.cs @@ -0,0 +1,106 @@ +using System; +using System.Drawing.Imaging; +using System.Drawing; +using System.Linq; + +namespace TagsCloudVisualization +{ + public class TagCloudRenderer + { + private Bitmap bitmap; + private Graphics graphics; + private Pen pen; + + public void DrawCloud(RectangleF[] rectangles, VisualizingSettings settings) + { + var smallestSizeOfRectangles = GetMinPoints(rectangles); + var unscaledImageSize = GetImageSizeWithRealSizeRectangles(rectangles, smallestSizeOfRectangles); + + if (unscaledImageSize.Height <= settings.ImageSize.Height && + unscaledImageSize.Width <= settings.ImageSize.Width) + { + bitmap = new Bitmap(settings.ImageSize.Width, settings.ImageSize.Height); + CustomizeGraphics(settings); + DrawRealSizeCloud(settings, rectangles); + return; + } + + bitmap = new Bitmap(unscaledImageSize.Width, unscaledImageSize.Height); + CustomizeGraphics(settings); + DrawScaleCloud(settings, rectangles, unscaledImageSize, smallestSizeOfRectangles); + } + + private void CustomizeGraphics(VisualizingSettings settings) + { + pen = new Pen(settings.PenColor); + graphics = Graphics.FromImage(bitmap); + graphics.Clear(settings.BackgroundColor); + } + + private void DrawScaleCloud( + VisualizingSettings settings, + RectangleF[] rectangles, + Size unscaledImageSize, + Size smallestSizeOfRectangles) + { + graphics.TranslateTransform(Math.Abs(smallestSizeOfRectangles.Width), Math.Abs(smallestSizeOfRectangles.Height)); + graphics.DrawRectangles(pen, rectangles); + + var coefficient = GetScaleCoefficients(unscaledImageSize, settings.ImageSize); + graphics.ScaleTransform(coefficient.sx, coefficient.sy); + + bitmap.Save(settings.ImageName + ".png", ImageFormat.Png); + } + + private void DrawRealSizeCloud(VisualizingSettings settings, RectangleF[] rectangles) + { + graphics.Clear(settings.BackgroundColor); + graphics.DrawRectangles(pen, rectangles); + + bitmap.Save(settings.ImageName + ".png", ImageFormat.Png); + } + + private (float sx, float sy) GetScaleCoefficients(Size unscaledImageSize, Size imageSize) + { + var sx = unscaledImageSize.Width / imageSize.Width; + var sy = unscaledImageSize.Height / imageSize.Height; + + return (sx, sy); + } + + private Size GetImageSizeWithRealSizeRectangles(RectangleF[] rectangles, Size smallestSizeOfRectangles) + { + var maxSizesOfAllRectangles = GetMaxPoints(rectangles); + + var height = maxSizesOfAllRectangles.Height - smallestSizeOfRectangles.Height + 1; + var width = maxSizesOfAllRectangles.Width - smallestSizeOfRectangles.Width + 1; + + return new Size(width, height); + } + + private Size GetMinPoints(RectangleF[] rectangles) + { + var minHeight = (int)rectangles.Select(x => x.Y).Min(); + var minWidth = (int)rectangles.Select(x => x.X).Min(); + + return new Size(minWidth, minHeight); + } + + private Size GetMaxPoints(RectangleF[] rectangles) + { + var maxHeight = float.MinValue; + var maxWidth = float.MinValue; + + foreach (var rectangle in rectangles) + { + if (rectangle.Y + rectangle.Height > maxHeight) + maxHeight = rectangle.Y + rectangle.Height; + + if (rectangle.X + rectangle.Width > maxWidth) + maxWidth = rectangle.X + rectangle.Width; + } + + return new Size((int)maxWidth, (int)maxHeight); + } + } +} \ No newline at end of file diff --git a/cs/TagsCloudVisualization/TagsCloudVisualization.csproj b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj new file mode 100644 index 000000000..964d4020d --- /dev/null +++ b/cs/TagsCloudVisualization/TagsCloudVisualization.csproj @@ -0,0 +1,92 @@ + + + + + + + Debug + AnyCPU + {4F909C58-0835-4F9F-BA74-9530C220D676} + Exe + TagsCloudVisualization + TagsCloudVisualization + v4.8 + 512 + true + true + + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + latest + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + latest + + + + ..\packages\FluentAssertions.6.12.0\lib\net47\FluentAssertions.dll + + + ..\packages\NUnit.4.0.0\lib\net462\nunit.framework.dll + + + ..\packages\NUnit.4.0.0\lib\net462\nunit.framework.legacy.dll + + + + + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.0\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + Данный проект ссылается на пакеты NuGet, отсутствующие на этом компьютере. Используйте восстановление пакетов NuGet, чтобы скачать их. Дополнительную информацию см. по адресу: http://go.microsoft.com/fwlink/?LinkID=322105. Отсутствует следующий файл: {0}. + + + + + \ No newline at end of file diff --git a/cs/TagsCloudVisualization/VisualizingSettings.cs b/cs/TagsCloudVisualization/VisualizingSettings.cs new file mode 100644 index 000000000..e05a06404 --- /dev/null +++ b/cs/TagsCloudVisualization/VisualizingSettings.cs @@ -0,0 +1,28 @@ +using System.Drawing; + +namespace TagsCloudVisualization +{ + public class VisualizingSettings + { + public VisualizingSettings(string imageName, Size imageSize) + { + ImageName = imageName; + ImageSize = imageSize; + BackgroundColor = Color.Black; + PenColor = Color.DarkOrange; + } + + public VisualizingSettings(string imageName, Size imageSize, Color backgroundColor, Color penColor) + { + ImageName = imageName; + ImageSize = imageSize; + BackgroundColor = backgroundColor; + PenColor = penColor; + } + + public readonly string ImageName; + public readonly Size ImageSize; + public readonly Color BackgroundColor; + public readonly Color PenColor; + } +} diff --git a/cs/TagsCloudVisualization/packages.config b/cs/TagsCloudVisualization/packages.config new file mode 100644 index 000000000..a29a2ff71 --- /dev/null +++ b/cs/TagsCloudVisualization/packages.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/cs/TagsCloudVisualizationTest/CircularCloudLayouterTests.cs b/cs/TagsCloudVisualizationTest/CircularCloudLayouterTests.cs new file mode 100644 index 000000000..8b3089dbc --- /dev/null +++ b/cs/TagsCloudVisualizationTest/CircularCloudLayouterTests.cs @@ -0,0 +1,98 @@ +using System; +using System.Drawing; +using System.Linq; +using NUnit.Framework; +using TagsCloudVisualization; +using FluentAssertions; +using NUnit.Framework.Interfaces; +using TestContext = NUnit.Framework.TestContext; +using System.IO; +using System.Reflection; + +namespace TagsCloudVisualizationTest +{ + [TestFixture] + public class CircularCloudLayouterTests + { + private readonly CircularCloudLayouter layouter = new CircularCloudLayouter(Center, new Spiral()); + private static readonly Point Center = new Point(50, 50); + private RectangleF[] currentRectangles; + + [TearDown] + public void TearDown() + { + if (currentRectangles == null || + TestContext.CurrentContext.Result.Outcome.Status != TestStatus.Failed) + return; + + var cloudCreator = new TagCloudRenderer(); + var settings = new VisualizingSettings(TestContext.CurrentContext.Test.Name, new Size(100, 100)); + cloudCreator.DrawCloud(currentRectangles, settings); + + var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); + Console.WriteLine($"Tag cloud visualization saved to {path}\\{settings.ImageName}"); + } + + [Test] + public static void CircularCloudLayouterCtor_WhenPassValidArguments_DoesNotThrowException() => + Assert.DoesNotThrow(() => new CircularCloudLayouter(Center, new Spiral())); + + public static TestCaseData[] InvalidArguments = + { + new TestCaseData(-200, 200).SetName("PassNegativeWidth"), + new TestCaseData(200, -200).SetName("PassNegativeHeight"), + new TestCaseData(-200, -200).SetName("PassNegativeArguments"), + new TestCaseData(0, 0).SetName("PassOnlyZero") + }; + + [TestOf(nameof(CircularCloudLayouter.PutNextRectangle))] + [TestCaseSource(nameof(InvalidArguments))] + public void WhenPassInvalidArguments_ShouldThrowArgumentException(int width, int height) => + Assert.Throws(() => layouter.PutNextRectangle(new Size(width, height))); + + [Test] + public void WhenPutNewRectangle_ShouldBeAddedToList() + { + currentRectangles = new RectangleF[] + { + layouter.PutNextRectangle(new Size(40, 20)) + }; + + currentRectangles.Length.Should().Be(1); + } + + public static TestCaseData[] RectanglesPosition = + { + new TestCaseData(new Size(40, 20), new Size(40, 20)) + .Returns(false).SetName("WhenPassIdenticalRectangles"), + new TestCaseData(new Size(60, 20), new Size(40, 20)) + .Returns(false).SetName("WhenPassRectanglesOfDifferentSizes") + }; + + [TestOf(nameof(CircularCloudLayouter.PutNextRectangle))] + [TestCaseSource(nameof(RectanglesPosition))] + public bool WhenPassSeveralRectangles_ShouldReturnCorrectIntersectionResult(Size rectangleSize, Size newRectangleSize) + { + currentRectangles = new RectangleF[] + { + layouter.PutNextRectangle(rectangleSize), + layouter.PutNextRectangle(newRectangleSize) + }; + + return currentRectangles.First().IntersectsWith(currentRectangles.Last()); + } + + [Test] + [TestOf(nameof(CircularCloudLayouter.PutNextRectangle))] + public void WhenPassFirstPoint_ShouldBeInCenter() + { + currentRectangles = new RectangleF[] + { + layouter.PutNextRectangle(new Size(40, 20)) + }; + + currentRectangles.First().Location.X.Should().Be(30); + currentRectangles.First().Location.Y.Should().Be(40); + } + } +} \ No newline at end of file diff --git a/cs/TagsCloudVisualizationTest/Properties/AssemblyInfo.cs b/cs/TagsCloudVisualizationTest/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..6ce97d2e9 --- /dev/null +++ b/cs/TagsCloudVisualizationTest/Properties/AssemblyInfo.cs @@ -0,0 +1,20 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("TagsCloudVisualizationTest")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TagsCloudVisualizationTest")] +[assembly: AssemblyCopyright("Copyright © 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: ComVisible(false)] + +[assembly: Guid("09f90167-009f-4e35-94dd-dbd7a4b6a814")] + +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/cs/TagsCloudVisualizationTest/SpiralTests.cs b/cs/TagsCloudVisualizationTest/SpiralTests.cs new file mode 100644 index 000000000..d3aec2f94 --- /dev/null +++ b/cs/TagsCloudVisualizationTest/SpiralTests.cs @@ -0,0 +1,64 @@ +using NUnit.Framework; +using System.Drawing; +using FluentAssertions; +using TagsCloudVisualization; +using System.Collections.Generic; + +namespace TagsCloudVisualizationTest +{ + [TestFixture] + public class SpiralTests + { + [Test] + [TestOf(nameof(Spiral.GetPosition))] + public void WhenPassFirstPoint_ShouldBeInCenter() + { + var spiral = new Spiral(5, new Point(0, 0), 1.5); + + var newPosition = spiral.GetPosition(); + + newPosition.Should().Be(new Point(0, 0)); + } + + public static TestCaseData[] ArgumentsForSpiralTests = + { + new TestCaseData(new Point(0, 0), new List + { + new Point(0, 0), + new Point(0, 1), + new Point(-2, 0), + new Point(0, -3), + new Point(4, -1), + new Point(2, 5), + new Point(-6, 2), + new Point(-3, -7) + }).SetName("WhenGetFewPointsFromCenter_ShouldReturnExpectedPoint"), + + new TestCaseData(new Point(-3, 2), new List() //Arrange + { + new Point(-3, 2), + new Point(-3, 3), + new Point(-5, 2), + new Point(-3, -1), + new Point(1, 1), + new Point(-1, 7), + new Point(-9, 4), + new Point(-6, -5) + }).SetName("WhenGetFewPointsFromOffsetCenter_ShouldReturnExpectedPoint") + }; + + [TestOf(nameof(Spiral.GetPosition))] + [TestCaseSource(nameof(ArgumentsForSpiralTests))] + public void WhenGetFewPoints_ShouldDrawSpiral(Point center, List expectedPoints) + { + var spiral = new Spiral(5, center, 1.5); + var actualPositions = new Point[8]; + + for (var i = 0; i < expectedPoints.Count; i++) + actualPositions[i] = spiral.GetPosition(); + + for (var i = 0; i < expectedPoints.Count; i++) + actualPositions[i].Should().Be(expectedPoints[i]); + } + } +} diff --git a/cs/TagsCloudVisualizationTest/TagsCloudVisualizationTest.csproj b/cs/TagsCloudVisualizationTest/TagsCloudVisualizationTest.csproj new file mode 100644 index 000000000..16251b743 --- /dev/null +++ b/cs/TagsCloudVisualizationTest/TagsCloudVisualizationTest.csproj @@ -0,0 +1,101 @@ + + + + + + + + Debug + AnyCPU + {09F90167-009F-4E35-94DD-DBD7A4B6A814} + Library + Properties + TagsCloudVisualizationTest + TagsCloudVisualizationTest + v4.8 + 512 + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 15.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages + False + UnitTest + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\FluentAssertions.6.12.0\lib\net47\FluentAssertions.dll + + + ..\packages\MSTest.TestFramework.2.2.7\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll + + + ..\packages\MSTest.TestFramework.2.2.7\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll + + + ..\packages\NUnit.4.0.1\lib\net462\nunit.framework.dll + + + ..\packages\NUnit.4.0.1\lib\net462\nunit.framework.legacy.dll + + + + + + + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.0\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll + + + + + + + + + + + + + + + + {4f909c58-0835-4f9f-ba74-9530c220d676} + TagsCloudVisualization + + + + + + + Данный проект ссылается на пакеты NuGet, отсутствующие на этом компьютере. Используйте восстановление пакетов NuGet, чтобы скачать их. Дополнительную информацию см. по адресу: http://go.microsoft.com/fwlink/?LinkID=322105. Отсутствует следующий файл: {0}. + + + + + + + + \ No newline at end of file diff --git a/cs/TagsCloudVisualizationTest/app.config b/cs/TagsCloudVisualizationTest/app.config new file mode 100644 index 000000000..218808e68 --- /dev/null +++ b/cs/TagsCloudVisualizationTest/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/cs/TagsCloudVisualizationTest/packages.config b/cs/TagsCloudVisualizationTest/packages.config new file mode 100644 index 000000000..94e9f78fc --- /dev/null +++ b/cs/TagsCloudVisualizationTest/packages.config @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/cs/images/150rectangles.jpg b/cs/images/150rectangles.jpg new file mode 100644 index 000000000..7f1663e85 Binary files /dev/null and b/cs/images/150rectangles.jpg differ diff --git a/cs/images/500.jpg b/cs/images/500.jpg new file mode 100644 index 000000000..609fb69f4 Binary files /dev/null and b/cs/images/500.jpg differ diff --git a/cs/images/50rectanglesR.jpg b/cs/images/50rectanglesR.jpg new file mode 100644 index 000000000..6565c4ad3 Binary files /dev/null and b/cs/images/50rectanglesR.jpg differ diff --git a/cs/tdd.sln b/cs/tdd.sln index c8f523d63..6ac7711ce 100644 --- a/cs/tdd.sln +++ b/cs/tdd.sln @@ -1,11 +1,18 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25123.0 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32929.385 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BowlingGame", "BowlingGame\BowlingGame.csproj", "{AD0F018A-732E-4074-8527-AB2EEC8D0BF3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BowlingGame", "BowlingGame\BowlingGame.csproj", "{AD0F018A-732E-4074-8527-AB2EEC8D0BF3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples", "Samples\Samples.csproj", "{B5108E20-2ACF-4ED9-84FE-2A718050FC94}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples", "Samples\Samples.csproj", "{B5108E20-2ACF-4ED9-84FE-2A718050FC94}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TagsCloudVisualization", "TagsCloudVisualization\TagsCloudVisualization.csproj", "{4F909C58-0835-4F9F-BA74-9530C220D676}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TagsCloudVisualizationTest", "TagsCloudVisualizationTest\TagsCloudVisualizationTest.csproj", "{09F90167-009F-4E35-94DD-DBD7A4B6A814}" + ProjectSection(ProjectDependencies) = postProject + {4F909C58-0835-4F9F-BA74-9530C220D676} = {4F909C58-0835-4F9F-BA74-9530C220D676} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -21,8 +28,19 @@ Global {B5108E20-2ACF-4ED9-84FE-2A718050FC94}.Debug|Any CPU.Build.0 = Debug|Any CPU {B5108E20-2ACF-4ED9-84FE-2A718050FC94}.Release|Any CPU.ActiveCfg = Release|Any CPU {B5108E20-2ACF-4ED9-84FE-2A718050FC94}.Release|Any CPU.Build.0 = Release|Any CPU + {4F909C58-0835-4F9F-BA74-9530C220D676}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F909C58-0835-4F9F-BA74-9530C220D676}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F909C58-0835-4F9F-BA74-9530C220D676}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F909C58-0835-4F9F-BA74-9530C220D676}.Release|Any CPU.Build.0 = Release|Any CPU + {09F90167-009F-4E35-94DD-DBD7A4B6A814}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {09F90167-009F-4E35-94DD-DBD7A4B6A814}.Debug|Any CPU.Build.0 = Debug|Any CPU + {09F90167-009F-4E35-94DD-DBD7A4B6A814}.Release|Any CPU.ActiveCfg = Release|Any CPU + {09F90167-009F-4E35-94DD-DBD7A4B6A814}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {472B09DC-E429-4129-809C-0B19022F5F3C} + EndGlobalSection EndGlobal