TableCell class was added

This commit is contained in:
Evgeny Redikultsev
2024-01-27 21:19:06 +05:00
parent a9ffd8b903
commit a680e67ab3
13 changed files with 144 additions and 51 deletions

View File

@@ -4,6 +4,7 @@ using StructureHelper.Windows.ViewModels.Errors;
using StructureHelper.Windows.ViewModels.Materials; using StructureHelper.Windows.ViewModels.Materials;
using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Models.Loggers; using StructureHelperCommon.Models.Loggers;
using StructureHelperCommon.Models.Tables;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -136,9 +137,20 @@ namespace StructureHelper.Windows.CalculationWindows.ProgressViews
} }
else else
{ {
if (cell is StringLoggerEntry stringEntry) if (cell.Value is StringLoggerEntry stringEntry)
{ {
tableCell = new TableCell(GetParagraphByStringEntry(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 else
{ {

View File

@@ -8,18 +8,25 @@ using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Loggers 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); var table = new TableLoggerEntry(2);
table.Priority = Priority;
table.Table.AddRow(GetHeaderRow()); table.Table.AddRow(GetHeaderRow());
table.Table.AddRow(GetPointRow(point2D)); table.Table.AddRow(GetPointRow(point2D));
return table; return table;
} }
public static TableLoggerEntry GetTableByPoint2D(IEnumerable<IPoint2D> points) public TableLoggerEntry GetTableByPoint2D(IEnumerable<IPoint2D> points)
{ {
var table = new TableLoggerEntry(2); var table = new TableLoggerEntry(2);
table.Priority = Priority;
table.Table.AddRow(GetHeaderRow()); table.Table.AddRow(GetHeaderRow());
foreach (var item in points) foreach (var item in points)
{ {
@@ -28,30 +35,44 @@ namespace StructureHelperCommon.Models.Loggers
return table; return table;
} }
private static ShTableRow<ITraceLoggerEntry> GetHeaderRow() private ShTableRow<ITraceLoggerEntry> GetHeaderRow()
{ {
var headerRow = new ShTableRow<ITraceLoggerEntry>(2); var headerRow = new ShTableRow<ITraceLoggerEntry>(2);
headerRow.Elements[0] = new StringLoggerEntry() IShTableCell<ITraceLoggerEntry> tableCell;
ITraceLoggerEntry loggerEntry;
loggerEntry = new StringLoggerEntry()
{ {
Message = "X", Message = "X",
Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info) Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info)
}; };
headerRow.Elements[1] = new StringLoggerEntry() tableCell = new ShTableCell<ITraceLoggerEntry>()
{
Value = loggerEntry,
Role = CellRole.Header,
};
headerRow.Elements[0] = tableCell;
loggerEntry = new StringLoggerEntry()
{ {
Message = "Y", Message = "Y",
Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info) Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info)
}; };
tableCell = new ShTableCell<ITraceLoggerEntry>()
{
Value = loggerEntry,
Role = CellRole.Header,
};
headerRow.Elements[1] = tableCell;
return headerRow; return headerRow;
} }
private static ShTableRow<ITraceLoggerEntry> GetPointRow(IPoint2D point2D) private ShTableRow<ITraceLoggerEntry> GetPointRow(IPoint2D point2D)
{ {
var pointRow = new ShTableRow<ITraceLoggerEntry>(2); var pointRow = new ShTableRow<ITraceLoggerEntry>(2);
pointRow.Elements[0] = new StringLoggerEntry() pointRow.Elements[0].Value = new StringLoggerEntry()
{ {
Message = Convert.ToString(point2D.X), Message = Convert.ToString(point2D.X),
Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info) Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info)
}; };
pointRow.Elements[1] = new StringLoggerEntry() pointRow.Elements[1].Value = new StringLoggerEntry()
{ {
Message = Convert.ToString(point2D.Y), Message = Convert.ToString(point2D.Y),
Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info) Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info)

View File

@@ -9,8 +9,8 @@ namespace StructureHelperCommon.Models.Loggers
{ {
public class TableLoggerEntry : ITraceLoggerEntry public class TableLoggerEntry : ITraceLoggerEntry
{ {
private ListTable<ITraceLoggerEntry> table; private ShTable<ITraceLoggerEntry> table;
public ListTable<ITraceLoggerEntry> Table {get => table;} public ShTable<ITraceLoggerEntry> Table {get => table;}
public DateTime TimeStamp { get; } public DateTime TimeStamp { get; }
public int Priority { get; set; } public int Priority { get; set; }

View File

@@ -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
}
/// <summary>
/// Generic interface for cell of table
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IShTableCell<T>
{
/// <summary>
/// Value of cell
/// </summary>
T Value { get; set; }
/// <summary>
/// Number of cell, joined with this one
/// </summary>
int ColumnSpan { get; set; }
/// <summary>
/// Role of the cell in table
/// </summary>
CellRole Role { get; set; }
}
}

View File

@@ -4,7 +4,7 @@ namespace StructureHelperCommon.Models.Tables
{ {
public interface IShTableRow<T> public interface IShTableRow<T>
{ {
List<T> Elements { get; } List<IShTableCell<T>> Elements { get; }
int RowSize { get; } int RowSize { get; }
} }
} }

View File

@@ -6,13 +6,13 @@ using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Tables namespace StructureHelperCommon.Models.Tables
{ {
public class ListTable<T> public class ShTable<T>
{ {
private List<IShTableRow<T>> table; private List<IShTableRow<T>> table;
public int RowSize { get; } public int RowSize { get; }
public ListTable(int rowSize) public ShTable(int rowSize)
{ {
if (rowSize <= 0) if (rowSize <= 0)
{ {
@@ -42,7 +42,7 @@ namespace StructureHelperCommon.Models.Tables
return table; return table;
} }
public List<T> GetElementsFromRow(int rowIndex) public List<IShTableCell<T>> GetElementsFromRow(int rowIndex)
{ {
if (rowIndex >= 0 && rowIndex < table.Count) if (rowIndex >= 0 && rowIndex < table.Count)
{ {
@@ -66,7 +66,7 @@ namespace StructureHelperCommon.Models.Tables
if (columnIndex >= 0 && columnIndex < RowSize && if (columnIndex >= 0 && columnIndex < RowSize &&
rowIndex >= 0 && rowIndex < table.Count) rowIndex >= 0 && rowIndex < table.Count)
{ {
table[rowIndex].Elements[columnIndex] = value; table[rowIndex].Elements[columnIndex].Value = value;
} }
else else
{ {

View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Tables
{
/// <inheritdoc/>
public class ShTableCell<T> : IShTableCell<T>
{
/// <inheritdoc/>
public T Value { get; set; }
/// <inheritdoc/>
public int ColumnSpan { get; set; }
/// <inheritdoc/>
public CellRole Role { get; set; }
public ShTableCell()
{
Role = CellRole.Regular;
ColumnSpan = 1;
}
}
}

View File

@@ -8,7 +8,7 @@ namespace StructureHelperCommon.Models.Tables
{ {
public class ShTableRow<T> : IShTableRow<T> public class ShTableRow<T> : IShTableRow<T>
{ {
private List<T> elements; private List<IShTableCell<T>> elements;
public int RowSize { get; } public int RowSize { get; }
@@ -20,15 +20,16 @@ namespace StructureHelperCommon.Models.Tables
} }
RowSize = rowSize; RowSize = rowSize;
elements = new List<T>(rowSize); elements = new List<IShTableCell<T>>(rowSize);
for (int i = 0; i < rowSize; i++) for (int i = 0; i < rowSize; i++)
{ {
elements.Add(default); var newCell = new ShTableCell<T>();
elements.Add(newCell);
} }
} }
// Property to access elements in the row // Property to access elements in the row
public List<T> Elements => elements; public List<IShTableCell<T>> Elements => elements;
internal void Add(object value) internal void Add(object value)
{ {

View File

@@ -58,19 +58,19 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
TraceLogger?.AddMessage($"Point count {PointCount}"); TraceLogger?.AddMessage($"Point count {PointCount}");
surroundList = SurroundProcLogic.GetPoints(); surroundList = SurroundProcLogic.GetPoints();
TraceLogger?.AddMessage($"There are {surroundList.Count()} point prepared for calculation"); TraceLogger?.AddMessage($"There are {surroundList.Count()} point prepared for calculation");
if (TraceLogger is not null) TraceLogger?.AddEntry(
{ new TraceTablesFactory(
AddTAbleToTraceLoggerByPoints(surroundList); TraceLoggerStatuses.Info, TraceLogger.ShiftPriority)
} .GetTableByPoint2D(surroundList));
try try
{ {
limitCurveLogic.ActionToOutputResults = GetCurrentStepNumber; limitCurveLogic.ActionToOutputResults = GetCurrentStepNumber;
factoredList = limitCurveLogic.GetPoints(surroundList); factoredList = limitCurveLogic.GetPoints(surroundList);
TraceLogger?.AddMessage($"Solution was successfully obtained for {factoredList.Count()} point"); TraceLogger?.AddMessage($"Solution was successfully obtained for {factoredList.Count()} point");
if (TraceLogger is not null) TraceLogger?.AddEntry(
{ new TraceTablesFactory(
AddTAbleToTraceLoggerByPoints(factoredList); TraceLoggerStatuses.Info, TraceLogger.ShiftPriority)
} .GetTableByPoint2D(factoredList));
result.Points = factoredList; result.Points = factoredList;
} }
catch (Exception ex) catch (Exception ex)
@@ -81,13 +81,6 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
} }
} }
private void AddTAbleToTraceLoggerByPoints(IEnumerable<IPoint2D> pointList)
{
var table = TraceLoggerTableByPointsFactory.GetTableByPoint2D(pointList);
table.Priority = LoggerService.GetPriorityByStatus(TraceLoggerStatuses.Info) + TraceLogger.ShiftPriority;
TraceLogger.AddEntry(table);
}
private void GetCurrentStepNumber(IResult calcResult) private void GetCurrentStepNumber(IResult calcResult)
{ {
if (calcResult is not FindParameterResult) if (calcResult is not FindParameterResult)

View File

@@ -2,6 +2,7 @@
using StructureHelperCommon.Models.Loggers; using StructureHelperCommon.Models.Loggers;
using StructureHelperCommon.Models.Shapes; using StructureHelperCommon.Models.Shapes;
using StructureHelperLogics.NdmCalculations.Analyses.ByForces.LimitCurve.Factories; using StructureHelperLogics.NdmCalculations.Analyses.ByForces.LimitCurve.Factories;
using System.Windows.Media.Media3D;
//Copyright (c) 2023 Redikultsev Evgeny, Ekaterinburg, Russia //Copyright (c) 2023 Redikultsev Evgeny, Ekaterinburg, Russia
//All rights reserved. //All rights reserved.
@@ -38,9 +39,15 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
TraceLogger?.AddMessage($"Predicate name is {GetPredicateLogic.Name}"); TraceLogger?.AddMessage($"Predicate name is {GetPredicateLogic.Name}");
Predicate<IPoint2D> limitPredicate = GetPredicateLogic.GetPredicate(); Predicate<IPoint2D> limitPredicate = GetPredicateLogic.GetPredicate();
//if predicate is true for point (0,0), then check other point is pointless //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(); var range = points.Select(point => new Point2D { X = 0d, Y = 0d }).ToList();
resultList.AddRange(range); resultList.AddRange(range);
return resultList; return resultList;
@@ -113,10 +120,18 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
}; };
lock (lockObject) 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?.TraceLoggerEntries.AddRange(logic.TraceLogger.TraceLoggerEntries);
TraceLogger?.AddMessage($"Parameter value {parameter} was obtained"); 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; return resultPoint;
} }

View File

@@ -45,7 +45,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
if (parameter < limitparamValue) if (parameter < limitparamValue)
{ {
var newAccuracy = limitparamValue / 10d; 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.Accuracy.IterationAccuracy = 0.0001d;
parameterCalculator.Run(); parameterCalculator.Run();
result = parameterCalculator.Result as FindParameterResult; result = parameterCalculator.Result as FindParameterResult;

View File

@@ -86,6 +86,8 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
foreach (var calcTerm in InputData.CalcTerms) foreach (var calcTerm in InputData.CalcTerms)
{ {
var ndms = NdmPrimitivesService.GetNdms(primitiveSeries.Collection, limitState, calcTerm); 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) foreach (var predicateEntry in InputData.PredicateEntries)
{ {
string calcName = $"{primitiveSeries.Name}_{predicateEntry.Name}_{limitState}_{calcTerm}"; string calcName = $"{primitiveSeries.Name}_{predicateEntry.Name}_{limitState}_{calcTerm}";

View File

@@ -2,18 +2,8 @@
using StructureHelperCommon.Infrastructures.Enums; using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Models.Shapes; using StructureHelperCommon.Models.Shapes;
using StructureHelperCommon.Services.Forces;
using StructureHelperLogics.Models.Calculations.CalculationProperties;
using StructureHelperLogics.Models.Primitives;
using StructureHelperLogics.NdmCalculations.Primitives; using StructureHelperLogics.NdmCalculations.Primitives;
using StructureHelperLogics.NdmCalculations.Triangulations; 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 namespace StructureHelperLogics.Services.NdmPrimitives
{ {