diff --git a/ComponentProgramming/ComponentProgramming/Components/DiagramComponent.Designer.cs b/ComponentProgramming/ComponentProgramming/Components/DiagramComponent.Designer.cs
new file mode 100644
index 0000000..616983a
--- /dev/null
+++ b/ComponentProgramming/ComponentProgramming/Components/DiagramComponent.Designer.cs
@@ -0,0 +1,36 @@
+namespace ComponentProgramming
+{
+ partial class DiagramComponent
+ {
+ ///
+ /// Обязательная переменная конструктора.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Освободить все используемые ресурсы.
+ ///
+ /// истинно, если управляемый ресурс должен быть удален; иначе ложно.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Код, автоматически созданный конструктором компонентов
+
+ ///
+ /// Требуемый метод для поддержки конструктора — не изменяйте
+ /// содержимое этого метода с помощью редактора кода.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ }
+
+ #endregion
+ }
+}
diff --git a/ComponentProgramming/ComponentProgramming/Components/DiagramComponent.cs b/ComponentProgramming/ComponentProgramming/Components/DiagramComponent.cs
new file mode 100644
index 0000000..9ab17dc
--- /dev/null
+++ b/ComponentProgramming/ComponentProgramming/Components/DiagramComponent.cs
@@ -0,0 +1,98 @@
+using ComponentProgramming.Components.Models;
+using PdfSharp.Pdf;
+using PdfSharp;
+using System.ComponentModel;
+using PdfSharp.Drawing;
+using PdfSharp.Charting;
+using PdfSharp.UniversalAccessibility.Drawing;
+
+namespace ComponentProgramming
+{
+ public partial class DiagramComponent : Component
+ {
+
+ public DiagramComponent()
+ {
+ InitializeComponent();
+ }
+
+ public DiagramComponent(IContainer container)
+ {
+ container.Add(this);
+
+ InitializeComponent();
+ }
+
+ public void CreateLineDiagram(string docPath, string title, string header, Dictionary> data, LegendAlign legendAlign = LegendAlign.top)
+ {
+ if (string.IsNullOrEmpty(docPath))
+ {
+ throw new ArgumentNullException("Введите путь до файла!");
+ }
+ if (string.IsNullOrEmpty(title))
+ {
+ throw new ArgumentNullException("Введите заголовок");
+ }
+ if (string.IsNullOrEmpty(header))
+ {
+ throw new ArgumentNullException("Введите заголовок для диаграммы");
+ }
+ if (data.Count == 0)
+ {
+ throw new ArgumentException("Нету данных");
+ }
+
+ Chart chart = new Chart(ChartType.Line);
+
+ //Задание легенды
+ chart.Legend.Docking = (DockingType)legendAlign;
+ chart.Legend.LineFormat.Visible = true;
+
+
+ //Добавление серий
+ foreach (var item in data)
+ {
+ Series series = chart.SeriesCollection.AddSeries();
+ series.Name = item.Key;
+ double[] vals = new double[item.Value.Count];
+ for (int i = 0; i < item.Value.Count; i++)
+ {
+ vals.SetValue(Convert.ToDouble(item.Value[i]), i);
+ }
+
+ series.Add(vals);
+ }
+
+ //Объявление осей
+ chart.XAxis.MajorTickMark = TickMarkType.Outside;
+ chart.YAxis.MajorTickMark = TickMarkType.Outside;
+ chart.YAxis.HasMajorGridlines = true;
+
+ chart.PlotArea.LineFormat.Color = XColors.DarkGray;
+ chart.PlotArea.LineFormat.Width = 1;
+ chart.PlotArea.LineFormat.Visible = true;
+
+ chart.Legend.LineFormat.Visible = true;
+
+ ChartFrame chartFrame = new ChartFrame();
+ chartFrame.Location = new XPoint(50, 70);
+ chartFrame.Size = new XSize(500, 400);
+ chartFrame.Add(chart);
+
+ PdfDocument document = new PdfDocument(docPath);
+
+ PdfPage page = document.AddPage();
+ page.Size = PageSize.A4;
+
+ XGraphics gfx = XGraphics.FromPdfPage(page);
+
+ XFont font = new XFont("Times New Roman", 14);
+
+ gfx.DrawString(title, font, XBrushes.Black, new XRect(20, 20, page.Width, page.Height), XStringFormats.TopLeft);
+ gfx.DrawString(header, font, XBrushes.Black, new XRect(20, 40, page.Width, page.Height), XStringFormats.TopCenter);
+
+ chartFrame.Draw(gfx);
+ document.Close();
+ }
+ }
+}
diff --git a/ComponentProgramming/ComponentProgramming/Components/Models/LegendAlign.cs b/ComponentProgramming/ComponentProgramming/Components/Models/LegendAlign.cs
new file mode 100644
index 0000000..c38ef9a
--- /dev/null
+++ b/ComponentProgramming/ComponentProgramming/Components/Models/LegendAlign.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ComponentProgramming.Components.Models
+{
+ public enum LegendAlign
+ {
+ top,
+ bottom,
+ left,
+ right
+ }
+}
diff --git a/ComponentProgramming/Forms/Form.Designer.cs b/ComponentProgramming/Forms/Form.Designer.cs
index 6a773cf..6b1b2e0 100644
--- a/ComponentProgramming/Forms/Form.Designer.cs
+++ b/ComponentProgramming/Forms/Form.Designer.cs
@@ -35,6 +35,7 @@
buttonEnter = new Button();
controlListBox = new ComponentProgramming.ControlListBox();
tableComponent = new ComponentProgramming.Components.TableComponent(components);
+ diagramComponent = new ComponentProgramming.DiagramComponent(components);
SuspendLayout();
//
// controlComboBox
@@ -109,5 +110,6 @@
private Button buttonEnter;
private ComponentProgramming.ControlListBox controlListBox;
private ComponentProgramming.Components.TableComponent tableComponent;
+ private ComponentProgramming.DiagramComponent diagramComponent;
}
}
diff --git a/ComponentProgramming/Forms/Form.cs b/ComponentProgramming/Forms/Form.cs
index d79094a..8be1fa6 100644
--- a/ComponentProgramming/Forms/Form.cs
+++ b/ComponentProgramming/Forms/Form.cs
@@ -33,6 +33,12 @@ namespace Forms
};
tableComponent.CreateTable("C:\\Users\\shotb\\source\\repos\\KOP\\ComponentProgramming\\Forms\\table.pdf", "", mergeCells, colInfos, workers);
+ Dictionary> data = new Dictionary>();
+ data.Add("1", new List { 0.5, 1, 2, 5, 2 });
+ data.Add("2", new List { 3, 2, 1, 3, 6 });
+ data.Add("3", new List { 7, 3, 1, 2, 5 });
+
+ diagramComponent.CreateLineDiagram("C:\\Users\\shotb\\source\\repos\\KOP\\ComponentProgramming\\Forms\\diagram.pdf", "", " ", data, LegendAlign.bottom);
}
private void FillBox()
diff --git a/ComponentProgramming/Forms/Form.resx b/ComponentProgramming/Forms/Form.resx
index 3062234..d3d135a 100644
--- a/ComponentProgramming/Forms/Form.resx
+++ b/ComponentProgramming/Forms/Form.resx
@@ -120,4 +120,7 @@
17, 17
+
+ 161, 17
+
\ No newline at end of file
diff --git a/ComponentProgramming/Forms/diagram.pdf b/ComponentProgramming/Forms/diagram.pdf
new file mode 100644
index 0000000..f294598
Binary files /dev/null and b/ComponentProgramming/Forms/diagram.pdf differ
diff --git a/ComponentProgramming/Forms/table.pdf b/ComponentProgramming/Forms/table.pdf
index 4bc42c1..03305b5 100644
Binary files a/ComponentProgramming/Forms/table.pdf and b/ComponentProgramming/Forms/table.pdf differ