Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Черных Илья #17

Open
wants to merge 43 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
0a6e494
Создание проекта
Ilya4rh Dec 18, 2024
0638e5f
Добавил интерфейс и класс для чтения txt файла
Ilya4rh Dec 18, 2024
551a45a
Добавил интерфейс и класс алгоритма раскладки
Ilya4rh Dec 18, 2024
734981b
Добавил интерфейс и класс обработчика текста
Ilya4rh Dec 18, 2024
10b0ed0
Добавил интерфейс и класс тега
Ilya4rh Dec 18, 2024
318ea03
Перенес интерфейс и класс из первого дз
Ilya4rh Dec 18, 2024
35a611a
Добавил интерфейс и класс раскладки тегов
Ilya4rh Dec 18, 2024
b550659
Добавил класс сохраняющий изображение
Ilya4rh Dec 18, 2024
02c81bd
Добавил класс настроек изображения
Ilya4rh Dec 18, 2024
040f8ad
Добавил интерфейс отрисовки изображения
Ilya4rh Dec 18, 2024
6c4c791
Добавил класс создания облака
Ilya4rh Dec 18, 2024
dfc0b82
Добавил класс опций командной строки
Ilya4rh Dec 18, 2024
f532610
Добавил класс для регистрации зависимостей
Ilya4rh Dec 18, 2024
ffee430
Небольшое изменение в TagCloudCreator
Ilya4rh Dec 18, 2024
b9e717c
Наметки в Program
Ilya4rh Dec 18, 2024
6f74ab0
Добавил проект для тестов
Ilya4rh Dec 18, 2024
d61fc93
Добавил наследование от интерфейса
Ilya4rh Dec 18, 2024
fd9b4ec
Перенес тесты с дз 1
Ilya4rh Dec 18, 2024
b538562
Файл для скучных слов
Ilya4rh Dec 18, 2024
74730db
Удалил интерфейс ITag
Ilya4rh Dec 22, 2024
80cf168
Переименовал метод
Ilya4rh Dec 23, 2024
6f47276
Реализация чтения файла
Ilya4rh Dec 23, 2024
320960a
Добавил новые классы настроек
Ilya4rh Dec 25, 2024
1d93229
Добавил найстроки алгоритма
Ilya4rh Dec 25, 2024
f3e92f8
Реализовал обработчик текста
Ilya4rh Dec 25, 2024
e90d4b5
Добавил класс настройки цветов
Ilya4rh Dec 25, 2024
08dc670
Добавил интерфейс и класс для генерации цвета
Ilya4rh Dec 25, 2024
c09d029
Добавил интерфейс для сохранения изображения
Ilya4rh Dec 25, 2024
2af1197
Реализовал TagLayouter
Ilya4rh Dec 25, 2024
2f7958e
Реализовал ImageDrawer
Ilya4rh Dec 25, 2024
687f1bf
Реализовал TagCloudCreator
Ilya4rh Dec 25, 2024
77d21b4
Реализовал CommandLineOptions
Ilya4rh Dec 25, 2024
ea7d0df
Регистрация зависимостей
Ilya4rh Dec 25, 2024
f9958fe
Изменил Program
Ilya4rh Dec 25, 2024
0297174
Разные изменения
Ilya4rh Dec 25, 2024
b4fc174
Изображение раскладки
Ilya4rh Dec 25, 2024
ff41811
Добавил класс чтения файлов docx
Ilya4rh Dec 25, 2024
f5136ac
Переделал тест
Ilya4rh Dec 25, 2024
24be459
Изменил реадеры
Ilya4rh Dec 25, 2024
45c7767
Добавил тесты на reader
Ilya4rh Dec 25, 2024
2b8d684
Изменение в DocxFileReader
Ilya4rh Dec 25, 2024
5e0eab5
Правки ревью
Ilya4rh Dec 25, 2024
4644e0a
Правки ревью
Ilya4rh Dec 25, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions TagsCloudVisualization/BoringWords.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Здесь будут скучные слова
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using System.Drawing;
using TagsCloudVisualization.LayoutAlgorithms;

namespace TagsCloudVisualization.CircularCloudLayouters;

public class CircularCloudLayouter : ICircularCloudLayouter
{
private readonly ILayoutAlgorithm layoutAlgorithm;
private readonly List<Rectangle> addedRectangles = [];

public CircularCloudLayouter(ILayoutAlgorithm layoutAlgorithm)
{
this.layoutAlgorithm = layoutAlgorithm;
}

public Rectangle PutNextRectangle(Size rectangleSize)
{
Rectangle rectangle;

do
{
var nextPoint = layoutAlgorithm.CalculateNextPoint();

var rectangleLocation = nextPoint - rectangleSize / 2;

rectangle = new Rectangle(rectangleLocation, rectangleSize);

} while (IntersectWithAddedRectangles(rectangle));

addedRectangles.Add(rectangle);

return rectangle;
}

private bool IntersectWithAddedRectangles(Rectangle rectangle)
{
return addedRectangles.Any(addedRectangle => addedRectangle.IntersectsWith(rectangle));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using System.Drawing;

namespace TagsCloudVisualization.CircularCloudLayouters;

public interface ICircularCloudLayouter
{
Rectangle PutNextRectangle(Size rectangleSize);
}
6 changes: 6 additions & 0 deletions TagsCloudVisualization/CommandLineOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace TagsCloudVisualization;

public class CommandLineOptions
{
// Здесь будут описаны возможности командной строки
}
15 changes: 15 additions & 0 deletions TagsCloudVisualization/Di/DiContainer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Autofac;

namespace TagsCloudVisualization.Di;

public class DiContainer
{
public static IContainer Configure()
{
var builder = new ContainerBuilder();

// Здесь будут зарегистрированы все зависимости

return builder.Build();
}
}
8 changes: 8 additions & 0 deletions TagsCloudVisualization/FileReaders/IFileReader.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace TagsCloudVisualization.FileReaders;

public interface IFileReader
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше сразу сделать IWordsReader, пускай возвращает коллекицю строк, по слову в строке

{
bool CanRead(string pathToFile);

string Read(string pathToFile);
}
14 changes: 14 additions & 0 deletions TagsCloudVisualization/FileReaders/TxtFileReader.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace TagsCloudVisualization.FileReaders;

public class TxtFileReader : IFileReader
{
public bool CanRead(string pathToFile)
{
throw new NotImplementedException();
}

public string Read(string pathToFile)
{
throw new NotImplementedException();
}
}
43 changes: 43 additions & 0 deletions TagsCloudVisualization/LayoutAlgorithms/CircularLayoutAlgorithm.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using System.Drawing;

namespace TagsCloudVisualization.LayoutAlgorithms;

public class CircularLayoutAlgorithm : ILayoutAlgorithm
{
private readonly Point center;
private readonly double stepIncreasingAngle;
private readonly int stepIncreasingRadius;
private double currentAngleOfCircle;
private double currentRadiusOfCircle;
private const double OneDegree = Math.PI / 180;
private const double FullCircleRotation = 2 * Math.PI;

public CircularLayoutAlgorithm(Point center, double stepIncreasingAngle = OneDegree, int stepIncreasingRadius = 1)
{
if (stepIncreasingRadius <= 0)
throw new ArgumentException("The parameter 'stepIncreasingRadius' is less than or equal to zero");
if (stepIncreasingAngle == 0)
throw new ArgumentException("The parameter 'stepIncreasingAngle' is zero");

this.center = center;
this.stepIncreasingAngle = stepIncreasingAngle;
this.stepIncreasingRadius = stepIncreasingRadius;
}

public Point CalculateNextPoint()
{
var x = center.X + (int)(currentRadiusOfCircle * Math.Cos(currentAngleOfCircle));
var y = center.Y + (int)(currentRadiusOfCircle * Math.Sin(currentAngleOfCircle));

currentAngleOfCircle += stepIncreasingAngle;

// проверяем не прошли ли целый круг или равен ли текущий радиус нулю
if (currentAngleOfCircle > FullCircleRotation || currentRadiusOfCircle == 0)
{
currentAngleOfCircle = 0;
currentRadiusOfCircle += stepIncreasingRadius;
}

return new Point(x, y);
}
}
8 changes: 8 additions & 0 deletions TagsCloudVisualization/LayoutAlgorithms/ILayoutAlgorithm.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using System.Drawing;

namespace TagsCloudVisualization.LayoutAlgorithms;

public interface ILayoutAlgorithm
{
Point CalculateNextPoint();
}
14 changes: 14 additions & 0 deletions TagsCloudVisualization/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Drawing.Imaging;
using Autofac;
using TagsCloudVisualization;
using TagsCloudVisualization.Di;
using TagsCloudVisualization.Visualization;

var container = DiContainer.Configure();
var cloudCreator = container.Resolve<TagCloudCreator>();

var image = cloudCreator.CreateImage();

ImageSaver.Save(image, "", "", ImageFormat.Png);

Console.WriteLine("Hello, World!");
19 changes: 19 additions & 0 deletions TagsCloudVisualization/Settings/ImageSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using System.Drawing;

namespace TagsCloudVisualization.Settings;

public class ImageSettings
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Настройки цветов стоит либо расширить, либо сократить

{
public ImageSettings(int width, int height, Color backgroundColor)
{
Width = width;
Height = height;
BackgroundColor = backgroundColor;
}

public int Width { get; }

public int Height { get; }

public Color BackgroundColor { get; }
}
22 changes: 22 additions & 0 deletions TagsCloudVisualization/TagCloudCreator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System.Drawing;
using TagsCloudVisualization.TagLayouters;
using TagsCloudVisualization.Visualization;

namespace TagsCloudVisualization;

public class TagCloudCreator
{
private readonly ITagLayouter tagLayouter;
private readonly IImageDrawer imageDrawer;

public TagCloudCreator(ITagLayouter tagLayouter, IImageDrawer imageDrawer)
{
this.tagLayouter = tagLayouter;
this.imageDrawer = imageDrawer;
}

public Bitmap CreateImage()
{
throw new NotImplementedException();
}
}
8 changes: 8 additions & 0 deletions TagsCloudVisualization/TagLayouters/ITagLayouter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using TagsCloudVisualization.Tags;

namespace TagsCloudVisualization.TagLayouters;

public interface ITagLayouter
{
IEnumerable<Tag> GetTags();
}
22 changes: 22 additions & 0 deletions TagsCloudVisualization/TagLayouters/TagLayouter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using TagsCloudVisualization.CircularCloudLayouters;
using TagsCloudVisualization.Tags;
using TagsCloudVisualization.TextHandlers;

namespace TagsCloudVisualization.TagLayouters;

public class TagLayouter : ITagLayouter
{
private readonly ICircularCloudLayouter circularCloudLayouter;
private readonly ITextHandler textHandler;

public TagLayouter(ICircularCloudLayouter circularCloudLayouter, ITextHandler textHandler)
{
this.textHandler = textHandler;
this.circularCloudLayouter = circularCloudLayouter;
}

public IEnumerable<Tag> GetTags()
{
throw new NotImplementedException();
}
}
14 changes: 14 additions & 0 deletions TagsCloudVisualization/Tags/ITag.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Drawing;

namespace TagsCloudVisualization.Tags;

public interface ITag
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не стоит делать лишние интерфейсы. Для класса просто содержащего данные нет смысла создавать интерфейс

{
string Content { get; }

int Size { get; }

Rectangle Rectangle { get; }

FontFamily Font { get; }
}
22 changes: 22 additions & 0 deletions TagsCloudVisualization/Tags/Tag.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System.Drawing;

namespace TagsCloudVisualization.Tags;

public class Tag : ITag
{
public Tag(string content, int size, Rectangle rectangle, FontFamily font)
{
Content = content;
Size = size;
Rectangle = rectangle;
Font = font;
}

public string Content { get; }

public int Size { get; }

public Rectangle Rectangle { get; }

public FontFamily Font { get; }
}
15 changes: 15 additions & 0 deletions TagsCloudVisualization/TagsCloudVisualization.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Autofac" Version="8.2.0" />
<PackageReference Include="System.Drawing.Common" Version="9.0.0" />
</ItemGroup>

</Project>
10 changes: 10 additions & 0 deletions TagsCloudVisualization/TextHandlers/ITextHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace TagsCloudVisualization.TextHandlers;

public interface ITextHandler
{
/// <summary>
/// Метод-обработчик исходного текста
/// </summary>
/// <returns> Словарь: слово - количество </returns>
Dictionary<string, int> HandleText();
}
18 changes: 18 additions & 0 deletions TagsCloudVisualization/TextHandlers/TextHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using TagsCloudVisualization.FileReaders;

namespace TagsCloudVisualization.TextHandlers;

public class TextHandler : ITextHandler
{
private readonly IFileReader fileReader;

public TextHandler(IFileReader fileReader)
{
this.fileReader = fileReader;
}

public Dictionary<string, int> HandleText()
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Название GetWordsCount будет более точно отображать суть метода, даже если он будет содержать в себе дополнительную предобработку текста

{
throw new NotImplementedException();
}
}
9 changes: 9 additions & 0 deletions TagsCloudVisualization/Visualization/IImageDrawer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System.Drawing;
using TagsCloudVisualization.Tags;

namespace TagsCloudVisualization.Visualization;

public interface IImageDrawer
{
Bitmap Draw(IEnumerable<Tag> tags);
}
20 changes: 20 additions & 0 deletions TagsCloudVisualization/Visualization/ImageDrawer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System.Drawing;
using TagsCloudVisualization.Settings;
using TagsCloudVisualization.Tags;

namespace TagsCloudVisualization.Visualization;

public class ImageDrawer : IImageDrawer
{
private readonly ImageSettings imageSettings;

public ImageDrawer(ImageSettings imageSettings)
{
this.imageSettings = imageSettings;
}

public Bitmap Draw(IEnumerable<Tag> tags)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не всегда стоит упарываться с абстракциями над типами, в большинстве случаев будет лучше указывать в аргументах конкретный тип с которым будешь работать, например список или массив. Если хочется обеспечить неизменность коллекции, то есть readonly типы колекций

{
throw new NotImplementedException();
}
}
12 changes: 12 additions & 0 deletions TagsCloudVisualization/Visualization/ImageSaver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System.Drawing;
using System.Drawing.Imaging;

namespace TagsCloudVisualization.Visualization;

public class ImageSaver
{
public static void Save(Bitmap bitmap, string filePath, string fileName, ImageFormat imageFormat)
{
bitmap.Save(Path.Combine(filePath, fileName), imageFormat);
}
}
Loading