From a680e67ab38290b6d41855df77b608ca076fd640 Mon Sep 17 00:00:00 2001 From: Evgeny Redikultsev Date: Sat, 27 Jan 2024 21:19:06 +0500 Subject: [PATCH] TableCell class was added --- .../ProgressViews/TraceDocumentVM.cs | 14 ++++++- ...PointsFactory.cs => TraceTablesFactory.cs} | 39 ++++++++++++++----- .../Models/Loggers/TableLoggerEntry.cs | 4 +- .../Models/Tables/IShTableCell.cs | 35 +++++++++++++++++ .../Models/Tables/IShTableRow.cs | 2 +- .../Tables/{ListTable.cs => ShTable.cs} | 8 ++-- .../Models/Tables/ShTableCell.cs | 24 ++++++++++++ .../Models/Tables/ShTableRow.cs | 9 +++-- .../LimitCurve/LimitCurveCalculator.cs | 23 ++++------- .../ByForces/LimitCurve/LimitCurveLogic.cs | 23 +++++++++-- .../LimitCurve/LimitCurveParameterLogic.cs | 2 +- .../LimitCurve/LimitCurvesCalculator.cs | 2 + .../NdmPrimitives/NdmPrimitivesService.cs | 10 ----- 13 files changed, 144 insertions(+), 51 deletions(-) rename StructureHelperCommon/Models/Loggers/Factories/{TraceLoggerTableByPointsFactory.cs => TraceTablesFactory.cs} (53%) create mode 100644 StructureHelperCommon/Models/Tables/IShTableCell.cs rename StructureHelperCommon/Models/Tables/{ListTable.cs => ShTable.cs} (90%) create mode 100644 StructureHelperCommon/Models/Tables/ShTableCell.cs diff --git a/StructureHelper/Windows/CalculationWindows/ProgressViews/TraceDocumentVM.cs b/StructureHelper/Windows/CalculationWindows/ProgressViews/TraceDocumentVM.cs index 1415c6f..e4ea30a 100644 --- a/StructureHelper/Windows/CalculationWindows/ProgressViews/TraceDocumentVM.cs +++ b/StructureHelper/Windows/CalculationWindows/ProgressViews/TraceDocumentVM.cs @@ -4,6 +4,7 @@ using StructureHelper.Windows.ViewModels.Errors; using StructureHelper.Windows.ViewModels.Materials; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Models.Loggers; +using StructureHelperCommon.Models.Tables; using System; using System.Collections.Generic; using System.Linq; @@ -136,9 +137,20 @@ namespace StructureHelper.Windows.CalculationWindows.ProgressViews } else { - if (cell is StringLoggerEntry stringEntry) + if (cell.Value is StringLoggerEntry stringEntry) { tableCell = new TableCell(GetParagraphByStringEntry(stringEntry)); + tableCell.ColumnSpan = cell.ColumnSpan; + if (cell.Role == CellRole.Regular) + { + tableCell.TextAlignment = TextAlignment.Left; + tableCell.Background = Brushes.LightYellow; + } + else if (cell.Role == CellRole.Header) + { + tableCell.TextAlignment = TextAlignment.Center; + tableCell.Background = Brushes.AliceBlue; + } } else { diff --git a/StructureHelperCommon/Models/Loggers/Factories/TraceLoggerTableByPointsFactory.cs b/StructureHelperCommon/Models/Loggers/Factories/TraceTablesFactory.cs similarity index 53% rename from StructureHelperCommon/Models/Loggers/Factories/TraceLoggerTableByPointsFactory.cs rename to StructureHelperCommon/Models/Loggers/Factories/TraceTablesFactory.cs index 92e04a2..60aec50 100644 --- a/StructureHelperCommon/Models/Loggers/Factories/TraceLoggerTableByPointsFactory.cs +++ b/StructureHelperCommon/Models/Loggers/Factories/TraceTablesFactory.cs @@ -8,18 +8,25 @@ using System.Threading.Tasks; namespace StructureHelperCommon.Models.Loggers { - public static class TraceLoggerTableByPointsFactory + public class TraceTablesFactory { - public static TableLoggerEntry GetTableByPoint2D(IPoint2D point2D) + public int Priority { get; set; } + public TraceTablesFactory(TraceLoggerStatuses status = TraceLoggerStatuses.Info, int priorityShift = 0) + { + Priority = LoggerService.GetPriorityByStatus(status) + priorityShift; + } + public TableLoggerEntry GetTableByPoint2D(IPoint2D point2D) { var table = new TableLoggerEntry(2); + table.Priority = Priority; table.Table.AddRow(GetHeaderRow()); table.Table.AddRow(GetPointRow(point2D)); return table; } - public static TableLoggerEntry GetTableByPoint2D(IEnumerable points) + public TableLoggerEntry GetTableByPoint2D(IEnumerable points) { var table = new TableLoggerEntry(2); + table.Priority = Priority; table.Table.AddRow(GetHeaderRow()); foreach (var item in points) { @@ -28,30 +35,44 @@ namespace StructureHelperCommon.Models.Loggers return table; } - private static ShTableRow GetHeaderRow() + private ShTableRow GetHeaderRow() { var headerRow = new ShTableRow(2); - headerRow.Elements[0] = new StringLoggerEntry() + IShTableCell tableCell; + ITraceLoggerEntry loggerEntry; + loggerEntry = new StringLoggerEntry() { Message = "X", Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info) }; - headerRow.Elements[1] = new StringLoggerEntry() + tableCell = new ShTableCell() + { + Value = loggerEntry, + Role = CellRole.Header, + }; + headerRow.Elements[0] = tableCell; + loggerEntry = new StringLoggerEntry() { Message = "Y", Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info) }; + tableCell = new ShTableCell() + { + Value = loggerEntry, + Role = CellRole.Header, + }; + headerRow.Elements[1] = tableCell; return headerRow; } - private static ShTableRow GetPointRow(IPoint2D point2D) + private ShTableRow GetPointRow(IPoint2D point2D) { var pointRow = new ShTableRow(2); - pointRow.Elements[0] = new StringLoggerEntry() + pointRow.Elements[0].Value = new StringLoggerEntry() { Message = Convert.ToString(point2D.X), Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info) }; - pointRow.Elements[1] = new StringLoggerEntry() + pointRow.Elements[1].Value = new StringLoggerEntry() { Message = Convert.ToString(point2D.Y), Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info) diff --git a/StructureHelperCommon/Models/Loggers/TableLoggerEntry.cs b/StructureHelperCommon/Models/Loggers/TableLoggerEntry.cs index d98b55b..d9f8077 100644 --- a/StructureHelperCommon/Models/Loggers/TableLoggerEntry.cs +++ b/StructureHelperCommon/Models/Loggers/TableLoggerEntry.cs @@ -9,8 +9,8 @@ namespace StructureHelperCommon.Models.Loggers { public class TableLoggerEntry : ITraceLoggerEntry { - private ListTable table; - public ListTable Table {get => table;} + private ShTable table; + public ShTable Table {get => table;} public DateTime TimeStamp { get; } public int Priority { get; set; } diff --git a/StructureHelperCommon/Models/Tables/IShTableCell.cs b/StructureHelperCommon/Models/Tables/IShTableCell.cs new file mode 100644 index 0000000..2304d51 --- /dev/null +++ b/StructureHelperCommon/Models/Tables/IShTableCell.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperCommon.Models.Tables +{ + public enum CellRole + { + Title, + Header, + Regular + } + + /// + /// Generic interface for cell of table + /// + /// + public interface IShTableCell + { + /// + /// Value of cell + /// + T Value { get; set; } + /// + /// Number of cell, joined with this one + /// + int ColumnSpan { get; set; } + /// + /// Role of the cell in table + /// + CellRole Role { get; set; } + } +} diff --git a/StructureHelperCommon/Models/Tables/IShTableRow.cs b/StructureHelperCommon/Models/Tables/IShTableRow.cs index 7a4469d..3012d92 100644 --- a/StructureHelperCommon/Models/Tables/IShTableRow.cs +++ b/StructureHelperCommon/Models/Tables/IShTableRow.cs @@ -4,7 +4,7 @@ namespace StructureHelperCommon.Models.Tables { public interface IShTableRow { - List Elements { get; } + List> Elements { get; } int RowSize { get; } } } \ No newline at end of file diff --git a/StructureHelperCommon/Models/Tables/ListTable.cs b/StructureHelperCommon/Models/Tables/ShTable.cs similarity index 90% rename from StructureHelperCommon/Models/Tables/ListTable.cs rename to StructureHelperCommon/Models/Tables/ShTable.cs index d83ece2..22bf908 100644 --- a/StructureHelperCommon/Models/Tables/ListTable.cs +++ b/StructureHelperCommon/Models/Tables/ShTable.cs @@ -6,13 +6,13 @@ using System.Threading.Tasks; namespace StructureHelperCommon.Models.Tables { - public class ListTable + public class ShTable { private List> table; public int RowSize { get; } - public ListTable(int rowSize) + public ShTable(int rowSize) { if (rowSize <= 0) { @@ -42,7 +42,7 @@ namespace StructureHelperCommon.Models.Tables return table; } - public List GetElementsFromRow(int rowIndex) + public List> GetElementsFromRow(int rowIndex) { if (rowIndex >= 0 && rowIndex < table.Count) { @@ -66,7 +66,7 @@ namespace StructureHelperCommon.Models.Tables if (columnIndex >= 0 && columnIndex < RowSize && rowIndex >= 0 && rowIndex < table.Count) { - table[rowIndex].Elements[columnIndex] = value; + table[rowIndex].Elements[columnIndex].Value = value; } else { diff --git a/StructureHelperCommon/Models/Tables/ShTableCell.cs b/StructureHelperCommon/Models/Tables/ShTableCell.cs new file mode 100644 index 0000000..bebae48 --- /dev/null +++ b/StructureHelperCommon/Models/Tables/ShTableCell.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperCommon.Models.Tables +{ + /// + public class ShTableCell : IShTableCell + { + /// + public T Value { get; set; } + /// + public int ColumnSpan { get; set; } + /// + public CellRole Role { get; set; } + public ShTableCell() + { + Role = CellRole.Regular; + ColumnSpan = 1; + } + } +} diff --git a/StructureHelperCommon/Models/Tables/ShTableRow.cs b/StructureHelperCommon/Models/Tables/ShTableRow.cs index fdacb4c..b150005 100644 --- a/StructureHelperCommon/Models/Tables/ShTableRow.cs +++ b/StructureHelperCommon/Models/Tables/ShTableRow.cs @@ -8,7 +8,7 @@ namespace StructureHelperCommon.Models.Tables { public class ShTableRow : IShTableRow { - private List elements; + private List> elements; public int RowSize { get; } @@ -20,15 +20,16 @@ namespace StructureHelperCommon.Models.Tables } RowSize = rowSize; - elements = new List(rowSize); + elements = new List>(rowSize); for (int i = 0; i < rowSize; i++) { - elements.Add(default); + var newCell = new ShTableCell(); + elements.Add(newCell); } } // Property to access elements in the row - public List Elements => elements; + public List> Elements => elements; internal void Add(object value) { diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurveCalculator.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurveCalculator.cs index aaa2a63..ab2dae6 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurveCalculator.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurveCalculator.cs @@ -58,19 +58,19 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces TraceLogger?.AddMessage($"Point count {PointCount}"); surroundList = SurroundProcLogic.GetPoints(); TraceLogger?.AddMessage($"There are {surroundList.Count()} point prepared for calculation"); - if (TraceLogger is not null) - { - AddTAbleToTraceLoggerByPoints(surroundList); - } + TraceLogger?.AddEntry( + new TraceTablesFactory( + TraceLoggerStatuses.Info, TraceLogger.ShiftPriority) + .GetTableByPoint2D(surroundList)); try { limitCurveLogic.ActionToOutputResults = GetCurrentStepNumber; factoredList = limitCurveLogic.GetPoints(surroundList); TraceLogger?.AddMessage($"Solution was successfully obtained for {factoredList.Count()} point"); - if (TraceLogger is not null) - { - AddTAbleToTraceLoggerByPoints(factoredList); - } + TraceLogger?.AddEntry( + new TraceTablesFactory( + TraceLoggerStatuses.Info, TraceLogger.ShiftPriority) + .GetTableByPoint2D(factoredList)); result.Points = factoredList; } catch (Exception ex) @@ -81,13 +81,6 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces } } - private void AddTAbleToTraceLoggerByPoints(IEnumerable pointList) - { - var table = TraceLoggerTableByPointsFactory.GetTableByPoint2D(pointList); - table.Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info) + TraceLogger.ShiftPriority; - TraceLogger.AddEntry(table); - } - private void GetCurrentStepNumber(IResult calcResult) { if (calcResult is not FindParameterResult) diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurveLogic.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurveLogic.cs index 4f88302..4a4e603 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurveLogic.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurveLogic.cs @@ -2,6 +2,7 @@ using StructureHelperCommon.Models.Loggers; using StructureHelperCommon.Models.Shapes; using StructureHelperLogics.NdmCalculations.Analyses.ByForces.LimitCurve.Factories; +using System.Windows.Media.Media3D; //Copyright (c) 2023 Redikultsev Evgeny, Ekaterinburg, Russia //All rights reserved. @@ -38,9 +39,15 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces TraceLogger?.AddMessage($"Predicate name is {GetPredicateLogic.Name}"); Predicate limitPredicate = GetPredicateLogic.GetPredicate(); //if predicate is true for point (0,0), then check other point is pointless - if (limitPredicate(new Point2D()) == true) + var zeroPoint = new Point2D(); + if (limitPredicate(zeroPoint) == true) { - TraceLogger?.AddMessage($"Predicate is true for point (0d, 0d). All point will be skiped", TraceLoggerStatuses.Warning); + TraceLogger?.AddMessage($"Predicate is true for point. All point will be skiped", TraceLoggerStatuses.Warning); + TraceLogger?.AddEntry( + new TraceTablesFactory( + TraceLoggerStatuses.Warning, 0) + .GetTableByPoint2D(zeroPoint)); + TraceLogger?.AddMessage($"All point will be skiped", TraceLoggerStatuses.Warning); var range = points.Select(point => new Point2D { X = 0d, Y = 0d }).ToList(); resultList.AddRange(range); return resultList; @@ -113,10 +120,18 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces }; lock (lockObject) { - TraceLogger?.AddMessage($"Source point (X = {localCurrentPoint.X}, Y = {localCurrentPoint.Y})"); + TraceLogger?.AddMessage($"Source point"); + TraceLogger?.AddEntry( + new TraceTablesFactory( + TraceLoggerStatuses.Info, TraceLogger.ShiftPriority) + .GetTableByPoint2D(localCurrentPoint)); TraceLogger?.TraceLoggerEntries.AddRange(logic.TraceLogger.TraceLoggerEntries); TraceLogger?.AddMessage($"Parameter value {parameter} was obtained"); - TraceLogger?.AddMessage($"Calculated point (X={localCurrentPoint.X} * {parameter} = {resultPoint.X}, Y={localCurrentPoint.Y} * {parameter} = {resultPoint.Y})"); + TraceLogger?.AddMessage($"Calculated point\n(X={localCurrentPoint.X} * {parameter} = {resultPoint.X},\nY={localCurrentPoint.Y} * {parameter} = {resultPoint.Y})"); + TraceLogger?.AddEntry( + new TraceTablesFactory( + TraceLoggerStatuses.Info, TraceLogger.ShiftPriority) + .GetTableByPoint2D(resultPoint)); } return resultPoint; } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurveParameterLogic.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurveParameterLogic.cs index 67f7202..840d2ac 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurveParameterLogic.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurveParameterLogic.cs @@ -45,7 +45,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces if (parameter < limitparamValue) { var newAccuracy = limitparamValue / 10d; - TraceLogger?.AddMessage($"Since current parameter value {parameter} has a low accuracy (less than {limitparamValue}) new parameter calculatin is started", TraceLoggerStatuses.Warning); + TraceLogger?.AddMessage($"Since current parameter value {parameter} has a low accuracy (value less than {limitparamValue}) new parameter calculating is started", TraceLoggerStatuses.Warning); parameterCalculator.Accuracy.IterationAccuracy = 0.0001d; parameterCalculator.Run(); result = parameterCalculator.Result as FindParameterResult; diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurvesCalculator.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurvesCalculator.cs index c3e4229..4b260f5 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurvesCalculator.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurvesCalculator.cs @@ -86,6 +86,8 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces foreach (var calcTerm in InputData.CalcTerms) { var ndms = NdmPrimitivesService.GetNdms(primitiveSeries.Collection, limitState, calcTerm); + TraceLogger?.AddMessage($"Number of elementary parts N={ndms.Count()} were obtainded succesfully"); + TraceLogger?.AddMessage($"Summary area of elementary parts Asum={ndms.Sum(x=>x.Area)}", TraceLoggerStatuses.Debug); foreach (var predicateEntry in InputData.PredicateEntries) { string calcName = $"{primitiveSeries.Name}_{predicateEntry.Name}_{limitState}_{calcTerm}"; diff --git a/StructureHelperLogics/Services/NdmPrimitives/NdmPrimitivesService.cs b/StructureHelperLogics/Services/NdmPrimitives/NdmPrimitivesService.cs index 977d4b0..f1eaf60 100644 --- a/StructureHelperLogics/Services/NdmPrimitives/NdmPrimitivesService.cs +++ b/StructureHelperLogics/Services/NdmPrimitives/NdmPrimitivesService.cs @@ -2,18 +2,8 @@ using StructureHelperCommon.Infrastructures.Enums; using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Models.Shapes; -using StructureHelperCommon.Services.Forces; -using StructureHelperLogics.Models.Calculations.CalculationProperties; -using StructureHelperLogics.Models.Primitives; using StructureHelperLogics.NdmCalculations.Primitives; using StructureHelperLogics.NdmCalculations.Triangulations; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; -using static System.Collections.Specialized.BitVector32; namespace StructureHelperLogics.Services.NdmPrimitives {