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