13
FieldVisualizer/Entities/ColorMaps/IValueColorArray.cs
Normal file
13
FieldVisualizer/Entities/ColorMaps/IValueColorArray.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
using System.Windows.Media;
|
||||||
|
|
||||||
|
namespace FieldVisualizer.Entities.ColorMaps
|
||||||
|
{
|
||||||
|
public interface IValueColorArray
|
||||||
|
{
|
||||||
|
double AverageValue { get; set; }
|
||||||
|
Color BottomColor { get; set; }
|
||||||
|
double BottomValue { get; set; }
|
||||||
|
Color TopColor { get; set; }
|
||||||
|
double TopValue { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,25 +11,8 @@ namespace FieldVisualizer.Entities.ColorMaps
|
|||||||
/// Flag of activity
|
/// Flag of activity
|
||||||
/// </summary>
|
/// </summary>
|
||||||
bool IsActive { get; set; }
|
bool IsActive { get; set; }
|
||||||
/// <summary>
|
IValueColorArray ExactValues { get; }
|
||||||
/// Minimum value of range
|
IValueColorArray RoundedValues { get; }
|
||||||
/// </summary>
|
|
||||||
double BottomValue { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// Average value of range
|
|
||||||
/// </summary>
|
|
||||||
double AverageValue { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// Maximum value of range
|
|
||||||
/// </summary>
|
|
||||||
double TopValue {get;set;}
|
|
||||||
/// <summary>
|
|
||||||
/// Color correspondent to minimum value
|
|
||||||
/// </summary>
|
|
||||||
Color BottomColor { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// Color correspondent to maximum value
|
|
||||||
/// </summary>
|
|
||||||
Color TopColor { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
33
FieldVisualizer/Entities/ColorMaps/ValueColorArray.cs
Normal file
33
FieldVisualizer/Entities/ColorMaps/ValueColorArray.cs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Media;
|
||||||
|
|
||||||
|
namespace FieldVisualizer.Entities.ColorMaps
|
||||||
|
{
|
||||||
|
public class ValueColorArray : IValueColorArray
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Minimum value of range
|
||||||
|
/// </summary>
|
||||||
|
public double BottomValue { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Average value of range
|
||||||
|
/// </summary>
|
||||||
|
public double AverageValue { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Maximum value of range
|
||||||
|
/// </summary>
|
||||||
|
public double TopValue { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Color correspondent to minimum value
|
||||||
|
/// </summary>
|
||||||
|
public Color BottomColor { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Color correspondent to maximum value
|
||||||
|
/// </summary>
|
||||||
|
public Color TopColor { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,15 +7,10 @@ namespace FieldVisualizer.Entities.ColorMaps
|
|||||||
{
|
{
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public bool IsActive { get; set; }
|
public bool IsActive { get; set; }
|
||||||
/// <inheritdoc/>
|
|
||||||
public double BottomValue { get; set; }
|
public IValueColorArray ExactValues { get; private set; } = new ValueColorArray();
|
||||||
/// <inheritdoc/>
|
|
||||||
public double AverageValue { get; set; }
|
public IValueColorArray RoundedValues { get; private set; } = new ValueColorArray();
|
||||||
/// <inheritdoc/>
|
|
||||||
public double TopValue { get; set; }
|
|
||||||
/// <inheritdoc/>
|
|
||||||
public Color BottomColor { get; set; }
|
|
||||||
/// <inheritdoc/>
|
|
||||||
public Color TopColor { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using FieldVisualizer.Entities.ColorMaps;
|
using FieldVisualizer.Entities.ColorMaps;
|
||||||
using FieldVisualizer.Entities.Values;
|
using FieldVisualizer.Entities.Values;
|
||||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
|
using StructureHelperCommon.Services;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@@ -11,6 +12,7 @@ namespace FieldVisualizer.Services.ColorServices
|
|||||||
public static class ColorOperations
|
public static class ColorOperations
|
||||||
{
|
{
|
||||||
const byte Alpha = 0xff;
|
const byte Alpha = 0xff;
|
||||||
|
static IMathRoundLogic roundLogic = new SmartRoundLogic();
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -23,15 +25,18 @@ namespace FieldVisualizer.Services.ColorServices
|
|||||||
var colorRanges = new List<IValueColorRange>();
|
var colorRanges = new List<IValueColorRange>();
|
||||||
foreach (var valueRange in valueRanges)
|
foreach (var valueRange in valueRanges)
|
||||||
{
|
{
|
||||||
IValueColorRange valueColorRange = new ValueColorRange
|
var valueColorRange = new ValueColorRange
|
||||||
{
|
{
|
||||||
IsActive = true,
|
IsActive = true,
|
||||||
BottomValue = valueRange.BottomValue,
|
|
||||||
AverageValue = (valueRange.BottomValue + valueRange.TopValue) / 2,
|
|
||||||
TopValue = valueRange.TopValue
|
|
||||||
};
|
};
|
||||||
valueColorRange.BottomColor = GetColorByValue(fullRange, colorMap, valueColorRange.BottomValue);
|
valueColorRange.ExactValues.BottomValue = valueRange.BottomValue;
|
||||||
valueColorRange.TopColor = GetColorByValue(fullRange, colorMap, valueColorRange.TopValue);
|
valueColorRange.ExactValues.AverageValue = (valueRange.BottomValue + valueRange.TopValue) / 2;
|
||||||
|
valueColorRange.ExactValues.TopValue = valueRange.TopValue;
|
||||||
|
valueColorRange.ExactValues.BottomColor = GetColorByValue(fullRange, colorMap, valueColorRange.ExactValues.BottomValue);
|
||||||
|
valueColorRange.ExactValues.TopColor = GetColorByValue(fullRange, colorMap, valueColorRange.ExactValues.TopValue);
|
||||||
|
valueColorRange.RoundedValues.BottomValue = roundLogic.RoundValue(valueColorRange.ExactValues.BottomValue);
|
||||||
|
valueColorRange.RoundedValues.AverageValue = roundLogic.RoundValue(valueColorRange.ExactValues.AverageValue);
|
||||||
|
valueColorRange.RoundedValues.TopValue = roundLogic.RoundValue(valueColorRange.ExactValues.TopValue);
|
||||||
colorRanges.Add(valueColorRange);
|
colorRanges.Add(valueColorRange);
|
||||||
}
|
}
|
||||||
return colorRanges;
|
return colorRanges;
|
||||||
@@ -85,11 +90,16 @@ namespace FieldVisualizer.Services.ColorServices
|
|||||||
return map.Colors[^1];
|
return map.Colors[^1];
|
||||||
}
|
}
|
||||||
double colorPerc = 1d / (map.Colors.Count - 1d); // % of each block of color. the last is the "100% Color"
|
double colorPerc = 1d / (map.Colors.Count - 1d); // % of each block of color. the last is the "100% Color"
|
||||||
double blockOfColor = valPerc / colorPerc;// the integer part repersents how many block to skip
|
double blockOfColor = valPerc / colorPerc;// the integer part represents how many block to skip
|
||||||
int blockIdx = (int)Math.Truncate(blockOfColor);// Idx of
|
int blockIdx = (int)Math.Truncate(blockOfColor);// Idx of
|
||||||
double valPercResidual = valPerc - (blockIdx * colorPerc);//remove the part represented of block
|
double valPercResidual = valPerc - (blockIdx * colorPerc);//remove the part represented of block
|
||||||
double percOfColor = valPercResidual / colorPerc;// % of color of this block that will be filled
|
double percOfColor = valPercResidual / colorPerc;// % of color of this block that will be filled
|
||||||
|
|
||||||
|
//in some cases due to accuracy of double type percent of color may be less than zero
|
||||||
|
if (percOfColor <= 0d)
|
||||||
|
{
|
||||||
|
return map.Colors[blockIdx];
|
||||||
|
}
|
||||||
Color c = GetColorByColorMap(map, blockIdx, percOfColor);
|
Color c = GetColorByColorMap(map, blockIdx, percOfColor);
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using FieldVisualizer.Services.ColorServices;
|
|||||||
using FieldVisualizer.Services.PrimitiveServices;
|
using FieldVisualizer.Services.PrimitiveServices;
|
||||||
using FieldVisualizer.Services.ValueRanges;
|
using FieldVisualizer.Services.ValueRanges;
|
||||||
using FieldVisualizer.Windows.UserControls;
|
using FieldVisualizer.Windows.UserControls;
|
||||||
|
using StructureHelperCommon.Services;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
@@ -22,6 +23,7 @@ namespace FieldVisualizer.ViewModels.FieldViewerViewModels
|
|||||||
{
|
{
|
||||||
public class FieldViewerViewModel : ViewModelBase, IDataErrorInfo
|
public class FieldViewerViewModel : ViewModelBase, IDataErrorInfo
|
||||||
{
|
{
|
||||||
|
private IMathRoundLogic roundLogic = new SmartRoundLogic() { DigitQuant = 3 };
|
||||||
public ICommand RebuildCommand { get; }
|
public ICommand RebuildCommand { get; }
|
||||||
public ICommand ZoomInCommand { get; }
|
public ICommand ZoomInCommand { get; }
|
||||||
public ICommand ZoomOutCommand { get; }
|
public ICommand ZoomOutCommand { get; }
|
||||||
@@ -159,8 +161,8 @@ namespace FieldVisualizer.ViewModels.FieldViewerViewModels
|
|||||||
private ColorMapsTypes _ColorMapType;
|
private ColorMapsTypes _ColorMapType;
|
||||||
private IColorMap _ColorMap;
|
private IColorMap _ColorMap;
|
||||||
private IValueRange valueRange;
|
private IValueRange valueRange;
|
||||||
private IEnumerable<IValueRange> _ValueRanges;
|
private IEnumerable<IValueRange> valueRanges;
|
||||||
private IEnumerable<IValueColorRange> _ValueColorRanges;
|
private IEnumerable<IValueColorRange> valueColorRanges;
|
||||||
private bool setMinValue;
|
private bool setMinValue;
|
||||||
private bool setMaxValue;
|
private bool setMaxValue;
|
||||||
private double crossLineX;
|
private double crossLineX;
|
||||||
@@ -190,7 +192,7 @@ namespace FieldVisualizer.ViewModels.FieldViewerViewModels
|
|||||||
if ((PrimitiveSet is null) == false)
|
if ((PrimitiveSet is null) == false)
|
||||||
{
|
{
|
||||||
ProcessPrimitives();
|
ProcessPrimitives();
|
||||||
Legend.ValueColorRanges = _ValueColorRanges;
|
Legend.ValueColorRanges = valueColorRanges;
|
||||||
Legend.Refresh();
|
Legend.Refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -257,14 +259,14 @@ namespace FieldVisualizer.ViewModels.FieldViewerViewModels
|
|||||||
{
|
{
|
||||||
SolidColorBrush brush = new SolidColorBrush();
|
SolidColorBrush brush = new SolidColorBrush();
|
||||||
brush.Color = ColorOperations.GetColorByValue(valueRange, _ColorMap, valuePrimitive.Value);
|
brush.Color = ColorOperations.GetColorByValue(valueRange, _ColorMap, valuePrimitive.Value);
|
||||||
foreach (var valueRange in _ValueColorRanges)
|
foreach (var valueRange in valueColorRanges)
|
||||||
{
|
{
|
||||||
if (valuePrimitive.Value >= valueRange.BottomValue & valuePrimitive.Value <= valueRange.TopValue & (!valueRange.IsActive))
|
if (valuePrimitive.Value >= valueRange.ExactValues.BottomValue & valuePrimitive.Value <= valueRange.ExactValues.TopValue & (!valueRange.IsActive))
|
||||||
{
|
{
|
||||||
brush.Color = Colors.Gray;
|
brush.Color = Colors.Gray;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
shape.ToolTip = valuePrimitive.Value;
|
shape.ToolTip = roundLogic.RoundValue(valuePrimitive.Value);
|
||||||
shape.Tag = valuePrimitive;
|
shape.Tag = valuePrimitive;
|
||||||
shape.Fill = brush;
|
shape.Fill = brush;
|
||||||
Canvas.SetLeft(shape, valuePrimitive.CenterX - addX - dX);
|
Canvas.SetLeft(shape, valuePrimitive.CenterX - addX - dX);
|
||||||
@@ -301,10 +303,24 @@ namespace FieldVisualizer.ViewModels.FieldViewerViewModels
|
|||||||
{
|
{
|
||||||
UserValueRange.TopValue = UserValueRange.BottomValue;
|
UserValueRange.TopValue = UserValueRange.BottomValue;
|
||||||
}
|
}
|
||||||
if (SetMinValue) { valueRange.BottomValue = UserValueRange.BottomValue; } else { UserValueRange.BottomValue = valueRange.BottomValue; }
|
if (SetMinValue == true)
|
||||||
if (SetMaxValue) { valueRange.TopValue = UserValueRange.TopValue; } else { UserValueRange.TopValue = valueRange.TopValue; }
|
{
|
||||||
_ValueRanges = ValueRangeOperations.DivideValueRange(valueRange, RangeNumber);
|
valueRange.BottomValue = UserValueRange.BottomValue;
|
||||||
_ValueColorRanges = ColorOperations.GetValueColorRanges(valueRange, _ValueRanges, _ColorMap);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UserValueRange.BottomValue = valueRange.BottomValue;
|
||||||
|
}
|
||||||
|
if (SetMaxValue == true)
|
||||||
|
{
|
||||||
|
valueRange.TopValue = UserValueRange.TopValue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UserValueRange.TopValue = valueRange.TopValue;
|
||||||
|
}
|
||||||
|
valueRanges = ValueRangeOperations.DivideValueRange(valueRange, RangeNumber);
|
||||||
|
valueColorRanges = ColorOperations.GetValueColorRanges(valueRange, valueRanges, _ColorMap);
|
||||||
}
|
}
|
||||||
private void SetCrossLine(object commandParameter)
|
private void SetCrossLine(object commandParameter)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,23 +20,23 @@
|
|||||||
<ColumnDefinition Width="10"/>
|
<ColumnDefinition Width="10"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<CheckBox Name="ActiveCheckBox" Grid.Column="0" IsChecked="{Binding Path=IsActive}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
<CheckBox Name="ActiveCheckBox" Grid.Column="0" IsChecked="{Binding Path=IsActive}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||||
<Rectangle Grid.Column="1" Margin="0,2,0,2" ToolTip="{Binding Path=BottomValue}">
|
<Rectangle Grid.Column="1" Margin="0,2,0,2" ToolTip="{Binding Path=RoundedValues.BottomValue}">
|
||||||
<Rectangle.Fill>
|
<Rectangle.Fill>
|
||||||
<SolidColorBrush Color="{Binding Path=BottomColor}"/>
|
<SolidColorBrush Color="{Binding Path=ExactValues.BottomColor}"/>
|
||||||
</Rectangle.Fill>
|
</Rectangle.Fill>
|
||||||
</Rectangle>
|
</Rectangle>
|
||||||
<Rectangle Grid.Column="2" Margin="0,2,0,2">
|
<Rectangle Grid.Column="2" Margin="0,2,0,2">
|
||||||
<Rectangle.Fill>
|
<Rectangle.Fill>
|
||||||
<LinearGradientBrush EndPoint="1,1" StartPoint="0,0">
|
<LinearGradientBrush EndPoint="1,1" StartPoint="0,0">
|
||||||
<GradientStop Color="{Binding Path=BottomColor}"/>
|
<GradientStop Color="{Binding Path=ExactValues.BottomColor}"/>
|
||||||
<GradientStop Color="{Binding Path=TopColor}" Offset="1"/>
|
<GradientStop Color="{Binding Path=ExactValues.TopColor}" Offset="1"/>
|
||||||
</LinearGradientBrush>
|
</LinearGradientBrush>
|
||||||
</Rectangle.Fill>
|
</Rectangle.Fill>
|
||||||
</Rectangle>
|
</Rectangle>
|
||||||
<TextBlock Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="#FF868686" Text="{Binding AverageValue}"/>
|
<TextBlock Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="#FF868686" Text="{Binding RoundedValues.AverageValue}"/>
|
||||||
<Rectangle Grid.Column="3" Margin="0,2,0,2" ToolTip="{Binding Path=TopValue}">
|
<Rectangle Grid.Column="3" Margin="0,2,0,2" ToolTip="{Binding Path=RoundedValues.TopValue}">
|
||||||
<Rectangle.Fill>
|
<Rectangle.Fill>
|
||||||
<SolidColorBrush Color="{Binding Path=TopColor}"/>
|
<SolidColorBrush Color="{Binding Path=ExactValues.TopColor}"/>
|
||||||
</Rectangle.Fill>
|
</Rectangle.Fill>
|
||||||
</Rectangle>
|
</Rectangle>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
xmlns:FieldViewerControl="clr-namespace:FieldVisualizer.Windows.UserControls"
|
xmlns:FieldViewerControl="clr-namespace:FieldVisualizer.Windows.UserControls"
|
||||||
xmlns:local="clr-namespace:FieldVisualizer.Windows"
|
xmlns:local="clr-namespace:FieldVisualizer.Windows"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="FieldViewer" Height="800" Width="1200" WindowStartupLocation="CenterOwner">
|
Title="FieldViewer" Height="800" Width="1200" MinHeight="400" MinWidth="800" MaxHeight="1000" MaxWidth="1500" WindowStartupLocation="CenterScreen" ShowInTaskbar="False">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="300"/>
|
<ColumnDefinition Width="300"/>
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
<ResourceDictionary Source="Infrastructure/UI/Resources/IconDictionary.xaml"/>
|
<ResourceDictionary Source="Infrastructure/UI/Resources/IconDictionary.xaml"/>
|
||||||
<ResourceDictionary Source="Infrastructure/UI/Resources/GraphsTemplates.xaml"/>
|
<ResourceDictionary Source="Infrastructure/UI/Resources/GraphsTemplates.xaml"/>
|
||||||
<ResourceDictionary Source="Infrastructure/UI/Resources/LimitCurveTemplates.xaml"/>
|
<ResourceDictionary Source="Infrastructure/UI/Resources/LimitCurveTemplates.xaml"/>
|
||||||
|
<ResourceDictionary Source="Infrastructure/UI/Resources/ServiceColors.xaml"/>
|
||||||
</ResourceDictionary.MergedDictionaries>
|
</ResourceDictionary.MergedDictionaries>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</Application.Resources>
|
</Application.Resources>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ namespace StructureHelper.Infrastructure.Enums
|
|||||||
{
|
{
|
||||||
ForceCalculator,
|
ForceCalculator,
|
||||||
LimitCurveCalculator,
|
LimitCurveCalculator,
|
||||||
|
CrackCalculator,
|
||||||
FireCalculator
|
FireCalculator
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units
|
|||||||
internal class Area : UnitBase
|
internal class Area : UnitBase
|
||||||
{
|
{
|
||||||
public override UnitTypes UnitType { get => UnitTypes.Area; }
|
public override UnitTypes UnitType { get => UnitTypes.Area; }
|
||||||
public override IUnit CurrentUnit { get => CommonOperation.GetUnit(UnitType, "mm2"); }
|
public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "mm2"); }
|
||||||
public override string UnitName { get => "Area"; }
|
public override string UnitName { get => "Area"; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
|
using StructureHelperCommon.Services;
|
||||||
|
using StructureHelperCommon.Services.Units;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelper.Infrastructure.UI.Converters.Units
|
||||||
|
{
|
||||||
|
internal class CrackWidth : UnitBase
|
||||||
|
{
|
||||||
|
public CrackWidth()
|
||||||
|
{
|
||||||
|
OperationLogic = new ConvertUnitLogic()
|
||||||
|
{
|
||||||
|
MathRoundLogic = new FixedRoundLogic()
|
||||||
|
{
|
||||||
|
DigitQuant = 3
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
public override UnitTypes UnitType { get => UnitTypes.Length; }
|
||||||
|
public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "mm"); }
|
||||||
|
public override string UnitName { get => "Length"; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,7 +11,7 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units
|
|||||||
internal class Curvature : UnitBase
|
internal class Curvature : UnitBase
|
||||||
{
|
{
|
||||||
public override UnitTypes UnitType { get => UnitTypes.Curvature; }
|
public override UnitTypes UnitType { get => UnitTypes.Curvature; }
|
||||||
public override IUnit CurrentUnit { get => CommonOperation.GetUnit(UnitType, "1/mm"); }
|
public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "1/mm"); }
|
||||||
public override string UnitName { get => "Curvature"; }
|
public override string UnitName { get => "Curvature"; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units
|
|||||||
internal class Force : UnitBase
|
internal class Force : UnitBase
|
||||||
{
|
{
|
||||||
public override UnitTypes UnitType { get => UnitTypes.Force; }
|
public override UnitTypes UnitType { get => UnitTypes.Force; }
|
||||||
public override IUnit CurrentUnit { get => CommonOperation.GetUnit(UnitType, "kN"); }
|
public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "kN"); }
|
||||||
public override string UnitName { get => "Force"; }
|
public override string UnitName { get => "Force"; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,9 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units
|
|||||||
{
|
{
|
||||||
internal class Length : UnitBase
|
internal class Length : UnitBase
|
||||||
{
|
{
|
||||||
|
|
||||||
public override UnitTypes UnitType { get => UnitTypes.Length; }
|
public override UnitTypes UnitType { get => UnitTypes.Length; }
|
||||||
public override IUnit CurrentUnit { get => CommonOperation.GetUnit(UnitType, "mm"); }
|
public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "mm"); }
|
||||||
public override string UnitName { get => "Length"; }
|
public override string UnitName { get => "Length"; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units
|
|||||||
internal class Moment : UnitBase
|
internal class Moment : UnitBase
|
||||||
{
|
{
|
||||||
public override UnitTypes UnitType { get => UnitTypes.Moment; }
|
public override UnitTypes UnitType { get => UnitTypes.Moment; }
|
||||||
public override IUnit CurrentUnit { get => CommonOperation.GetUnit(UnitType, "kNm"); }
|
public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "kNm"); }
|
||||||
public override string UnitName { get => "Moment"; }
|
public override string UnitName { get => "Moment"; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units
|
|||||||
{
|
{
|
||||||
internal class PlainDouble : IValueConverter
|
internal class PlainDouble : IValueConverter
|
||||||
{
|
{
|
||||||
|
IConvertUnitLogic operationLogic = new ConvertUnitLogic();
|
||||||
|
|
||||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -28,7 +30,7 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return CommonOperation.ConvertToDoubleChangeComma((string)value);
|
return ProcessString.ConvertCommaToCultureSettings((string)value);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using StructureHelperCommon.Infrastructures.Enums;
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
|
using StructureHelperCommon.Services;
|
||||||
using StructureHelperCommon.Services.Units;
|
using StructureHelperCommon.Services.Units;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -12,8 +13,19 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units
|
|||||||
{
|
{
|
||||||
internal class Stress : UnitBase
|
internal class Stress : UnitBase
|
||||||
{
|
{
|
||||||
|
|
||||||
public override UnitTypes UnitType { get => UnitTypes.Stress; }
|
public override UnitTypes UnitType { get => UnitTypes.Stress; }
|
||||||
public override IUnit CurrentUnit { get => CommonOperation.GetUnit(UnitType, "MPa"); }
|
public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "MPa"); }
|
||||||
public override string UnitName { get => "Stress"; }
|
public override string UnitName { get => "Stress"; }
|
||||||
|
public Stress()
|
||||||
|
{
|
||||||
|
OperationLogic = new ConvertUnitLogic()
|
||||||
|
{
|
||||||
|
MathRoundLogic = new SmartRoundLogic()
|
||||||
|
{
|
||||||
|
DigitQuant = 3
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
using StructureHelperCommon.Infrastructures.Enums;
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
|
using StructureHelperCommon.Models.Calculators;
|
||||||
|
using StructureHelperCommon.Models.Parameters;
|
||||||
|
using StructureHelperCommon.Services;
|
||||||
using StructureHelperCommon.Services.Units;
|
using StructureHelperCommon.Services.Units;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -14,19 +17,61 @@ namespace StructureHelper.Infrastructure.UI.Converters.Units
|
|||||||
{
|
{
|
||||||
internal abstract class UnitBase : IValueConverter
|
internal abstract class UnitBase : IValueConverter
|
||||||
{
|
{
|
||||||
|
IMathRoundLogic roundLogic = new DirectRoundLogic();
|
||||||
|
public IConvertUnitLogic OperationLogic { get; set; } = new ConvertUnitLogic();
|
||||||
|
public IGetUnitLogic UnitLogic { get; set; } = new GetUnitLogic();
|
||||||
public abstract UnitTypes UnitType { get; }
|
public abstract UnitTypes UnitType { get; }
|
||||||
public abstract IUnit CurrentUnit { get; }
|
public abstract IUnit CurrentUnit { get; }
|
||||||
public abstract string UnitName { get;}
|
public abstract string UnitName { get;}
|
||||||
|
/// <summary>
|
||||||
|
/// From variable to user
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
/// <param name="targetType"></param>
|
||||||
|
/// <param name="parameter"></param>
|
||||||
|
/// <param name="culture"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
{
|
{
|
||||||
return CommonOperation.Convert(CurrentUnit, UnitName, value);
|
var pair = OperationLogic.Convert(CurrentUnit, UnitName, value);
|
||||||
|
var result = pair.Value;
|
||||||
|
if (parameter is not null)
|
||||||
|
{
|
||||||
|
if (parameter is string paramString)
|
||||||
|
{
|
||||||
|
var logic = new ProcessDoublePairLogic() { DigitPlace = DigitPlace.Any };
|
||||||
|
var paramPair = logic.GetValuePairByString(paramString);
|
||||||
|
string paramTextPart = paramPair.Text.ToLower();
|
||||||
|
int paramValuePart = (int)paramPair.Value;
|
||||||
|
if (paramTextPart == "smart")
|
||||||
|
{
|
||||||
|
roundLogic = new SmartRoundLogic() { DigitQuant = paramValuePart };
|
||||||
}
|
}
|
||||||
|
else if (paramTextPart == "fixed")
|
||||||
|
{
|
||||||
|
roundLogic = new FixedRoundLogic() { DigitQuant = paramValuePart };
|
||||||
|
}
|
||||||
|
result = roundLogic.RoundValue(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
string strValue = $"{result} {pair.Text}";
|
||||||
|
return strValue;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// From user to variable
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
/// <param name="targetType"></param>
|
||||||
|
/// <param name="parameter"></param>
|
||||||
|
/// <param name="culture"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return CommonOperation.ConvertBack(UnitType, CurrentUnit, value);
|
double result = OperationLogic.ConvertBack(UnitType, CurrentUnit, value);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
<Style TargetType="Image">
|
<Style TargetType="Image">
|
||||||
<Setter Property="Width" Value="32"/>
|
<Setter Property="Width" Value="32"/>
|
||||||
<Setter Property="Height" Value="32"/>
|
<Setter Property="Height" Value="32"/>
|
||||||
<Setter Property="Margin" Value="0"/>
|
<Setter Property="Margin" Value="-2"/>
|
||||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||||
<Style.Triggers>
|
<Style.Triggers>
|
||||||
@@ -64,12 +64,25 @@
|
|||||||
</Trigger>
|
</Trigger>
|
||||||
</Style.Triggers>
|
</Style.Triggers>
|
||||||
</Style>
|
</Style>
|
||||||
|
<Style TargetType="Viewbox">
|
||||||
|
<Setter Property="Margin" Value="-2"/>
|
||||||
|
<Setter Property="Width" Value="32"/>
|
||||||
|
<Setter Property="Height" Value="32"/>
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="Stretch" Value="UniformToFill"/>
|
||||||
|
<Style.Triggers>
|
||||||
|
<Trigger Property="IsEnabled" Value="False">
|
||||||
|
<Setter Property="Opacity" Value="0.25"/>
|
||||||
|
</Trigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
</Style.Resources>
|
</Style.Resources>
|
||||||
<Setter Property="Width" Value="32"/>
|
<Setter Property="Width" Value="32"/>
|
||||||
<Setter Property="Height" Value="32"/>
|
<Setter Property="Height" Value="32"/>
|
||||||
<Setter Property="Margin" Value="2,0,2,0"/>
|
<Setter Property="Margin" Value="2,0,2,0"/>
|
||||||
<Setter Property="Background" Value="#FFA19BC3"/>
|
<Setter Property="Background" Value="#FFA19BC3"/>
|
||||||
<Setter Property="BorderBrush" Value="#FF857AB9"/>
|
<Setter Property="BorderBrush" Value="Black"/>
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
<Style x:Key="ButtonImage16" TargetType="Image">
|
<Style x:Key="ButtonImage16" TargetType="Image">
|
||||||
@@ -81,6 +94,41 @@
|
|||||||
<Setter Property="Width" Value="32"/>
|
<Setter Property="Width" Value="32"/>
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
|
<Color x:Key="ButtonLight" A="255" B="255" G="255" R="255"/>
|
||||||
|
<Color x:Key="CalculatorColor" A="255" B="149" G="149" R="211"/>
|
||||||
|
<Color x:Key="CalculatorFrameColor" A="255" B="109" G="109" R="166"/>
|
||||||
|
<Color x:Key="ResultColor" A="255" B="200" G="200" R="200"/>
|
||||||
|
<Color x:Key="ResultFrameColor" A="255" B="100" G="100" R="100"/>
|
||||||
|
<SolidColorBrush x:Key="CalculatorCanvas" Color="{DynamicResource CalculatorColor}"/>
|
||||||
|
<SolidColorBrush x:Key="CalculatorFrame" Color="{DynamicResource CalculatorFrameColor}"/>
|
||||||
|
<SolidColorBrush x:Key="ResultCanvas" Color="{DynamicResource ResultColor}"/>
|
||||||
|
<SolidColorBrush x:Key="ResultFrame" Color="{DynamicResource ResultFrameColor}"/>
|
||||||
|
|
||||||
|
<Style x:Key="ButtonCanvas" TargetType="Canvas">
|
||||||
|
<Setter Property="Width" Value="32"/>
|
||||||
|
<Setter Property="Height" Value="32"/>
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="ButtonCalculatorCanvas" TargetType="Canvas" BasedOn="{StaticResource ButtonCanvas}">
|
||||||
|
<Setter Property="Background" Value="{DynamicResource CalculatorCanvas}"/>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="ButtonResultCanvas" TargetType="Canvas" BasedOn="{StaticResource ButtonCanvas}">
|
||||||
|
<Setter Property="Background" Value="{DynamicResource ResultCanvas}"/>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="ButtonRect" TargetType="Rectangle">
|
||||||
|
<Setter Property="Margin" Value="3"/>
|
||||||
|
<Setter Property="Width" Value="26"/>
|
||||||
|
<Setter Property="Height" Value="26"/>
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="StrokeThickness" Value="1"/>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
|
||||||
<DataTemplate x:Key="OkCancelButtons">
|
<DataTemplate x:Key="OkCancelButtons">
|
||||||
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right">
|
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right">
|
||||||
<Button Style="{StaticResource CancelButton}" Command="{Binding CancelCommand}"/>
|
<Button Style="{StaticResource CancelButton}" Command="{Binding CancelCommand}"/>
|
||||||
@@ -88,5 +136,86 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
|
<DataTemplate x:Key="ButtonCalculatorRectangle">
|
||||||
|
<Rectangle Style="{DynamicResource ButtonRect}" Stroke="{DynamicResource CalculatorFrame}">
|
||||||
|
<Rectangle.Fill>
|
||||||
|
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
|
||||||
|
<GradientStop Color="{DynamicResource ButtonLight}" Offset="0.2"/>
|
||||||
|
<GradientStop Color="{DynamicResource CalculatorColor}" Offset="1"/>
|
||||||
|
</LinearGradientBrush>
|
||||||
|
</Rectangle.Fill>
|
||||||
|
</Rectangle>
|
||||||
|
</DataTemplate>
|
||||||
|
|
||||||
|
<DataTemplate x:Key="ButtonResultRectangle">
|
||||||
|
<Rectangle Style="{DynamicResource ButtonRect}" Stroke="{DynamicResource ResultFrame}">
|
||||||
|
<Rectangle.Fill>
|
||||||
|
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
|
||||||
|
<GradientStop Color="{DynamicResource ButtonLight}" Offset="0.2"/>
|
||||||
|
<GradientStop Color="{DynamicResource ResultColor}" Offset="1"/>
|
||||||
|
</LinearGradientBrush>
|
||||||
|
</Rectangle.Fill>
|
||||||
|
</Rectangle>
|
||||||
|
</DataTemplate>
|
||||||
|
|
||||||
|
<DataTemplate x:Key="DiagramCalculator">
|
||||||
|
<Canvas Style="{DynamicResource ButtonCalculatorCanvas}">
|
||||||
|
<Canvas.Children>
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource ButtonCalculatorRectangle}"/>
|
||||||
|
<Line Margin="4" X1="0" Y1="20" X2="25" Y2="20" StrokeThickness="1.5" Stroke="{DynamicResource CalculatorFrame}"/>
|
||||||
|
<Line Margin="4" X1="4" Y1="0" X2="4" Y2="25" StrokeThickness="1.5" Stroke="{DynamicResource CalculatorFrame}"/>
|
||||||
|
<Path Margin="4" Data="M 0 5 l 4 -4 l 7 4 l 7 6 l 2 4 l -2 7 l -2 2 " Stroke="{DynamicResource CalculatorFrame}"/>
|
||||||
|
<TextBlock Margin="4,2,0,0" Text="M-N" Foreground="Black" FontSize="10" HorizontalAlignment="Stretch" FontWeight="Bold" />
|
||||||
|
</Canvas.Children>
|
||||||
|
</Canvas>
|
||||||
|
</DataTemplate>
|
||||||
|
|
||||||
|
<DataTemplate x:Key="CrackCalculator">
|
||||||
|
<Canvas Style="{DynamicResource ButtonCalculatorCanvas}">
|
||||||
|
<Canvas.Children>
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource ButtonCalculatorRectangle}"/>
|
||||||
|
<Path Margin="4" Data="M 0 0 l 25 0 l 0 20
|
||||||
|
l -4 0
|
||||||
|
l -1 -5 l 1 -5 l -2 5 l -2 5
|
||||||
|
l -3 0
|
||||||
|
l 0 -5 l 0 -10 l -2 10 l -2 5
|
||||||
|
l -3 0
|
||||||
|
l -1 -5 l 1 -5 l -2 5 l -2 5
|
||||||
|
l -4 0" Fill="{DynamicResource CalculatorFrame}"/>
|
||||||
|
<TextBlock Margin="4,2,0,0" Text="Crc" Foreground="White" FontSize="10" HorizontalAlignment="Stretch" FontWeight="Bold" />
|
||||||
|
</Canvas.Children>
|
||||||
|
</Canvas>
|
||||||
|
</DataTemplate>
|
||||||
|
|
||||||
|
<DataTemplate x:Key="CalculatorRun">
|
||||||
|
<Canvas Style="{DynamicResource ButtonCalculatorCanvas}">
|
||||||
|
<Canvas.Children>
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource ButtonCalculatorRectangle}"/>
|
||||||
|
<Path Margin="4" Data="M 4 2 l 12 10 l -12 10 l 0 -20" Fill="{DynamicResource CalculatorFrame}"/>
|
||||||
|
</Canvas.Children>
|
||||||
|
</Canvas>
|
||||||
|
</DataTemplate>
|
||||||
|
|
||||||
|
<DataTemplate x:Key="IsoFieldResult">
|
||||||
|
<Canvas Style="{DynamicResource ButtonResultCanvas}">
|
||||||
|
<Canvas.Children>
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource ButtonResultRectangle}"/>
|
||||||
|
<Path Margin="4" Data="M 0 0 h 20 A 20 20 90 0 1 0 24 z" Fill="Gray"/>
|
||||||
|
<Path Margin="4" Data="M 0 0 h 16 A 16 16 90 0 1 0 18 z" Fill="DarkGray"/>
|
||||||
|
<Path Margin="4" Data="M 0 0 h 10 A 10 10 90 0 1 0 10 z" Fill="LightGray"/>
|
||||||
|
</Canvas.Children>
|
||||||
|
</Canvas>
|
||||||
|
</DataTemplate>
|
||||||
|
|
||||||
|
<DataTemplate x:Key="ShowRebarsResult">
|
||||||
|
<Canvas Style="{DynamicResource ButtonResultCanvas}">
|
||||||
|
<Canvas.Children>
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource ButtonResultRectangle}"/>
|
||||||
|
<Rectangle Canvas.Left="8" Canvas.Top="6" Width="16" Height="21" Fill="LightGray" Stroke ="Black"/>
|
||||||
|
<Ellipse Canvas.Left="10" Canvas.Top="21" Width="4" Height="4" Fill="DarkGray" Stroke ="Black"/>
|
||||||
|
<Ellipse Canvas.Left="18" Canvas.Top="21" Width="4" Height="4" Fill="DarkGray" Stroke ="Black"/>
|
||||||
|
</Canvas.Children>
|
||||||
|
</Canvas>
|
||||||
|
</DataTemplate>
|
||||||
|
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -12,5 +12,6 @@
|
|||||||
<convertersUnits:Moment x:Key="MomentConverter"/>
|
<convertersUnits:Moment x:Key="MomentConverter"/>
|
||||||
<convertersUnits:Stress x:Key="StressConverter"/>
|
<convertersUnits:Stress x:Key="StressConverter"/>
|
||||||
<convertersUnits:Curvature x:Key="Curvature"/>
|
<convertersUnits:Curvature x:Key="Curvature"/>
|
||||||
|
<convertersUnits:CrackWidth x:Key="CrackWidth"/>
|
||||||
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
|
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
27
StructureHelper/Infrastructure/UI/Resources/Cracks.xaml
Normal file
27
StructureHelper/Infrastructure/UI/Resources/Cracks.xaml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||||
|
<DataTemplate x:Key="CrackTextBox">
|
||||||
|
<TextBlock Grid.Row="0" Text="{Binding CrackWidth, Converter={StaticResource LengthConverter}}" HorizontalAlignment="Right">
|
||||||
|
<TextBlock.Style>
|
||||||
|
<Style TargetType="TextBlock">
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding IsCrackLessThanUltimate}" Value="false">
|
||||||
|
<Setter Property="Background" Value="{StaticResource WarningColorBrush}" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
</TextBlock.Style>
|
||||||
|
</TextBlock>
|
||||||
|
</DataTemplate>
|
||||||
|
<DataTemplate x:Key="CrackGrid">
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<ContentControl ContentTemplate="{StaticResource CrackTextBox}" Content="{Binding LongTermResult}"/>
|
||||||
|
<ContentControl Grid.Row="1" ContentTemplate="{StaticResource CrackTextBox}" Content="{Binding ShortTermResult}"/>
|
||||||
|
</Grid>
|
||||||
|
</DataTemplate>
|
||||||
|
|
||||||
|
</ResourceDictionary>
|
||||||
@@ -23,7 +23,8 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
<ListBox Grid.Column="2" ItemsSource="{Binding TargetItems}"
|
<ListBox Grid.Column="2" ItemsSource="{Binding TargetItems}"
|
||||||
SelectedItem="{Binding SelectedTargetItem}"
|
SelectedItem="{Binding SelectedTargetItem}"
|
||||||
ItemTemplate="{Binding ItemDataDemplate}">
|
ItemTemplate="{Binding ItemDataDemplate}"
|
||||||
|
>
|
||||||
<!--<InputBindingCollection>
|
<!--<InputBindingCollection>
|
||||||
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding RemoveSelected}"/>
|
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding RemoveSelected}"/>
|
||||||
</InputBindingCollection>-->
|
</InputBindingCollection>-->
|
||||||
@@ -41,7 +42,15 @@
|
|||||||
<Button Content="Unselect All" Command="{Binding UnSelectAllCommand}"/>
|
<Button Content="Unselect All" Command="{Binding UnSelectAllCommand}"/>
|
||||||
<Button Content="Invert Selection" Command="{Binding InvertSelectionCommand}"/>
|
<Button Content="Invert Selection" Command="{Binding InvertSelectionCommand}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<ListBox Grid.Row="1" ItemsSource="{Binding CollectionItems}" SelectedItem="SelectedItem">
|
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Visible">
|
||||||
|
<ListBox ItemsSource="{Binding CollectionItems}" SelectedItem="SelectedItem" HorizontalAlignment="Stretch">
|
||||||
|
<ListBox.ContextMenu>
|
||||||
|
<ContextMenu>
|
||||||
|
<MenuItem Header="Select All" Command="{Binding SelectAllCommand}"/>
|
||||||
|
<MenuItem Header="UnSelect All" Command="{Binding UnSelectAllCommand}"/>
|
||||||
|
<MenuItem Header="Unvert Selection" Command="{Binding InvertSelectionCommand}"/>
|
||||||
|
</ContextMenu>
|
||||||
|
</ListBox.ContextMenu>
|
||||||
<ListBox.ItemTemplate>
|
<ListBox.ItemTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Grid>
|
<Grid>
|
||||||
@@ -55,6 +64,7 @@
|
|||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListBox.ItemTemplate>
|
</ListBox.ItemTemplate>
|
||||||
</ListBox>
|
</ListBox>
|
||||||
|
</ScrollViewer>
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||||
|
<Color x:Key="ErrorColor" R="255" G="192" B="203" A="100" />
|
||||||
|
<Color x:Key="WarningColor" R="255" G="255" B="0" A="100" />
|
||||||
|
<SolidColorBrush x:Key="ErrorColorBrush" Color="{DynamicResource ErrorColor}"/>
|
||||||
|
<SolidColorBrush x:Key="WarningColorBrush" Color="{DynamicResource WarningColor}"/>
|
||||||
|
</ResourceDictionary>
|
||||||
Binary file not shown.
@@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
|||||||
-->
|
-->
|
||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<History>True|2024-02-02T07:22:50.1454015Z;True|2023-02-25T13:37:39.2738786+05:00;False|2023-02-25T13:37:24.0284261+05:00;True|2023-02-25T13:34:01.6858860+05:00;True|2023-02-25T13:31:18.8295711+05:00;False|2023-02-25T13:25:21.5807199+05:00;False|2023-02-25T13:24:41.7164398+05:00;</History>
|
<History>True|2024-03-11T15:33:14.1457807Z;True|2024-03-10T19:11:27.6834663+05:00;True|2024-02-02T12:22:50.1454015+05:00;True|2023-02-25T13:37:39.2738786+05:00;False|2023-02-25T13:37:24.0284261+05:00;True|2023-02-25T13:34:01.6858860+05:00;True|2023-02-25T13:31:18.8295711+05:00;False|2023-02-25T13:25:21.5807199+05:00;False|2023-02-25T13:24:41.7164398+05:00;</History>
|
||||||
<LastFailureDetails />
|
<LastFailureDetails />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
20
StructureHelper/Services/ResultViewers/CrackResultFunc.cs
Normal file
20
StructureHelper/Services/ResultViewers/CrackResultFunc.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelper.Services.ResultViewers
|
||||||
|
{
|
||||||
|
public class CrackResultFunc : IResultFunc<Func<RebarCrackResult, double>>
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public Func<RebarCrackResult, double> ResultFunction { get; set; }
|
||||||
|
|
||||||
|
public string UnitName { get; set; }
|
||||||
|
|
||||||
|
public double UnitFactor { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
|
using StructureHelperCommon.Services.Units;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelper.Services.ResultViewers
|
||||||
|
{
|
||||||
|
|
||||||
|
public static class CrackResultFuncFactory
|
||||||
|
{
|
||||||
|
private static readonly IConvertUnitLogic operationLogic = new ConvertUnitLogic();
|
||||||
|
private static readonly IGetUnitLogic UnitLogic = new GetUnitLogic();
|
||||||
|
|
||||||
|
static IUnit unitStress = UnitLogic.GetUnit(UnitTypes.Stress);
|
||||||
|
static IUnit unitLength = UnitLogic.GetUnit(UnitTypes.Length, "mm");
|
||||||
|
|
||||||
|
public static List<CrackResultFunc> GetResultFuncs()
|
||||||
|
{
|
||||||
|
List<CrackResultFunc> results = new()
|
||||||
|
{
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Name = "Long crack width",
|
||||||
|
ResultFunction = (RebarCrackResult rebar) => rebar.LongTermResult.CrackWidth,
|
||||||
|
UnitFactor = unitLength.Multiplyer,
|
||||||
|
UnitName = unitLength.Name
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Name = "Short crack width",
|
||||||
|
ResultFunction = (RebarCrackResult rebar) => rebar.ShortTermResult.CrackWidth,
|
||||||
|
UnitFactor = unitLength.Multiplyer,
|
||||||
|
UnitName = unitLength.Name
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Name = "Long softening factor",
|
||||||
|
ResultFunction = (RebarCrackResult rebar) => rebar.LongTermResult.SofteningFactor,
|
||||||
|
UnitFactor = 1,
|
||||||
|
UnitName = "Dimensionless"
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Name = "Short softening factor",
|
||||||
|
ResultFunction = (RebarCrackResult rebar) => rebar.ShortTermResult.SofteningFactor,
|
||||||
|
UnitFactor = 1,
|
||||||
|
UnitName = "Dimensionless"
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Name = "Long rebar stress",
|
||||||
|
ResultFunction = (RebarCrackResult rebar) => rebar.LongTermResult.RebarStressResult.RebarStress,
|
||||||
|
UnitFactor = unitStress.Multiplyer,
|
||||||
|
UnitName = unitStress.Name
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Name = "Short rebar stress",
|
||||||
|
ResultFunction = (RebarCrackResult rebar) => rebar.ShortTermResult.RebarStressResult.RebarStress,
|
||||||
|
UnitFactor = unitStress.Multiplyer,
|
||||||
|
UnitName = unitStress.Name
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Name = "Long rebar strain",
|
||||||
|
ResultFunction = (RebarCrackResult rebar) => rebar.LongTermResult.RebarStressResult.RebarStrain,
|
||||||
|
UnitFactor = 1d,
|
||||||
|
UnitName = string.Empty
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Name = "Short rebar strain",
|
||||||
|
ResultFunction = (RebarCrackResult rebar) => rebar.ShortTermResult.RebarStressResult.RebarStrain,
|
||||||
|
UnitFactor = 1d,
|
||||||
|
UnitName = string.Empty
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Name = "Long concrete strain",
|
||||||
|
ResultFunction = (RebarCrackResult rebar) => rebar.LongTermResult.RebarStressResult.ConcreteStrain,
|
||||||
|
UnitFactor = 1d,
|
||||||
|
UnitName = string.Empty
|
||||||
|
},
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Name = "Short concrete strain",
|
||||||
|
ResultFunction = (RebarCrackResult rebar) => rebar.ShortTermResult.RebarStressResult.ConcreteStrain,
|
||||||
|
UnitFactor = 1d,
|
||||||
|
UnitName = string.Empty
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,13 +8,14 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace StructureHelper.Services.ResultViewers
|
namespace StructureHelper.Services.ResultViewers
|
||||||
{
|
{
|
||||||
public class ResultFunc : IResultFunc
|
public class ForceResultFunc : IResultFunc<Func<IStrainMatrix, INdm, double>>
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public Func<IStrainMatrix, INdm, double> ResultFunction { get; set; }
|
public Func<IStrainMatrix, INdm, double> ResultFunction { get; set; }
|
||||||
|
public string UnitName { get; set; }
|
||||||
public double UnitFactor { get; set; }
|
public double UnitFactor { get; set; }
|
||||||
|
|
||||||
public ResultFunc()
|
public ForceResultFunc()
|
||||||
{
|
{
|
||||||
UnitFactor = 1d;
|
UnitFactor = 1d;
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
using LoaderCalculator.Logics;
|
||||||
|
using StructureHelper.Infrastructure.UI.Converters.Units;
|
||||||
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
|
using StructureHelperCommon.Services.Units;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelper.Services.ResultViewers
|
||||||
|
{
|
||||||
|
public enum FuncsTypes
|
||||||
|
{
|
||||||
|
Strain,
|
||||||
|
Stress,
|
||||||
|
Forces,
|
||||||
|
Full,
|
||||||
|
}
|
||||||
|
public static class ForceResultFuncFactory
|
||||||
|
{
|
||||||
|
static IGetUnitLogic unitLogic = new GetUnitLogic();
|
||||||
|
static IUnit unitForce = unitLogic.GetUnit(UnitTypes.Force);
|
||||||
|
static IUnit unitStress = unitLogic.GetUnit(UnitTypes.Stress);
|
||||||
|
static IUnit unitMoment = unitLogic.GetUnit(UnitTypes.Moment);
|
||||||
|
static IUnit unitCurvature = unitLogic.GetUnit(UnitTypes.Curvature);
|
||||||
|
|
||||||
|
static readonly IStressLogic stressLogic = new StressLogic();
|
||||||
|
public static List<ForceResultFunc> GetResultFuncs(FuncsTypes funcsType = FuncsTypes.Full)
|
||||||
|
{
|
||||||
|
List<ForceResultFunc> results = new();
|
||||||
|
if (funcsType == FuncsTypes.Strain)
|
||||||
|
{
|
||||||
|
results.AddRange(GetStrainResultFuncs());
|
||||||
|
}
|
||||||
|
else if (funcsType == FuncsTypes.Stress)
|
||||||
|
{
|
||||||
|
results.AddRange(GetStressResultFuncs());
|
||||||
|
}
|
||||||
|
else if (funcsType == FuncsTypes.Forces)
|
||||||
|
{
|
||||||
|
results.AddRange(GetForcesResultFuncs());
|
||||||
|
}
|
||||||
|
else if (funcsType == FuncsTypes.Full)
|
||||||
|
{
|
||||||
|
results.AddRange(GetStrainResultFuncs());
|
||||||
|
results.AddRange(GetStressResultFuncs());
|
||||||
|
results.AddRange(GetForcesResultFuncs());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(funcsType));
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
private static List<ForceResultFunc> GetStrainResultFuncs()
|
||||||
|
{
|
||||||
|
List<ForceResultFunc> resultFuncs = new ();
|
||||||
|
resultFuncs.Add(new ForceResultFunc() { Name = "Section Strain", ResultFunction = stressLogic.GetSectionStrain });
|
||||||
|
resultFuncs.Add(new ForceResultFunc() { Name = "Total Strain", ResultFunction = stressLogic.GetTotalStrain });
|
||||||
|
resultFuncs.Add(new ForceResultFunc() { Name = "Prestrain", ResultFunction = stressLogic.GetPrestrain });
|
||||||
|
resultFuncs.Add(new ForceResultFunc() { Name = "Elastic Strain", ResultFunction = stressLogic.GetElasticStrain });
|
||||||
|
resultFuncs.Add(new ForceResultFunc() { Name = "Plastic Strain", ResultFunction = stressLogic.GetPlasticStrain });
|
||||||
|
return resultFuncs;
|
||||||
|
}
|
||||||
|
private static List<ForceResultFunc> GetStressResultFuncs()
|
||||||
|
{
|
||||||
|
List<ForceResultFunc> resultFuncs = new ();
|
||||||
|
resultFuncs.Add(new ForceResultFunc() { Name = "Stress", ResultFunction = stressLogic.GetStress, UnitFactor = unitStress.Multiplyer, UnitName = unitStress.Name });
|
||||||
|
resultFuncs.Add(new ForceResultFunc() { Name = "Secant modulus", ResultFunction = stressLogic.GetSecantModulus, UnitFactor = unitStress.Multiplyer, UnitName = unitStress.Name });
|
||||||
|
resultFuncs.Add(new ForceResultFunc() { Name = "Modulus degradation", ResultFunction = stressLogic.GetModulusDegradation });
|
||||||
|
return resultFuncs;
|
||||||
|
}
|
||||||
|
private static List<ForceResultFunc> GetForcesResultFuncs()
|
||||||
|
{
|
||||||
|
List<ForceResultFunc> resultFuncs = new ();
|
||||||
|
resultFuncs.Add(new ForceResultFunc() { Name = "Force", ResultFunction = stressLogic.GetForce, UnitFactor = unitForce.Multiplyer, UnitName = unitForce.Name });
|
||||||
|
resultFuncs.Add(new ForceResultFunc() { Name = "Moment X", ResultFunction = stressLogic.GetMomentX, UnitFactor = unitMoment.Multiplyer, UnitName = unitMoment.Name });
|
||||||
|
resultFuncs.Add(new ForceResultFunc() { Name = "Moment Y", ResultFunction = stressLogic.GetMomentY, UnitFactor = unitMoment.Multiplyer, UnitName = unitMoment.Name });
|
||||||
|
return resultFuncs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,10 +8,11 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace StructureHelper.Services.ResultViewers
|
namespace StructureHelper.Services.ResultViewers
|
||||||
{
|
{
|
||||||
public interface IResultFunc
|
public interface IResultFunc <T>
|
||||||
{
|
{
|
||||||
string Name { get; }
|
string Name { get; }
|
||||||
Func<IStrainMatrix, INdm, double> ResultFunction { get; }
|
T ResultFunction { get; }
|
||||||
|
string UnitName { get; set; }
|
||||||
double UnitFactor { get; }
|
double UnitFactor { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,75 +0,0 @@
|
|||||||
using LoaderCalculator.Logics;
|
|
||||||
using StructureHelper.Infrastructure.UI.Converters.Units;
|
|
||||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace StructureHelper.Services.ResultViewers
|
|
||||||
{
|
|
||||||
public enum FuncsTypes
|
|
||||||
{
|
|
||||||
Strain,
|
|
||||||
Stress,
|
|
||||||
Forces,
|
|
||||||
Full,
|
|
||||||
}
|
|
||||||
public static class ResultFuncFactory
|
|
||||||
{
|
|
||||||
static readonly IStressLogic stressLogic = new StressLogic();
|
|
||||||
public static List<IResultFunc> GetResultFuncs(FuncsTypes funcsType = FuncsTypes.Full)
|
|
||||||
{
|
|
||||||
List<IResultFunc> results = new();
|
|
||||||
if (funcsType == FuncsTypes.Strain)
|
|
||||||
{
|
|
||||||
results.AddRange(GetStrainResultFuncs());
|
|
||||||
}
|
|
||||||
else if (funcsType == FuncsTypes.Stress)
|
|
||||||
{
|
|
||||||
results.AddRange(GetStressResultFuncs());
|
|
||||||
}
|
|
||||||
else if (funcsType == FuncsTypes.Forces)
|
|
||||||
{
|
|
||||||
results.AddRange(GetForcesResultFuncs());
|
|
||||||
}
|
|
||||||
else if (funcsType == FuncsTypes.Full)
|
|
||||||
{
|
|
||||||
results.AddRange(GetStrainResultFuncs());
|
|
||||||
results.AddRange(GetStressResultFuncs());
|
|
||||||
results.AddRange(GetForcesResultFuncs());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(funcsType));
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
private static List<IResultFunc> GetStrainResultFuncs()
|
|
||||||
{
|
|
||||||
List<IResultFunc> resultFuncs = new List<IResultFunc>();
|
|
||||||
resultFuncs.Add(new ResultFunc() { Name = "Total Strain", ResultFunction = stressLogic.GetTotalStrain });
|
|
||||||
resultFuncs.Add(new ResultFunc() { Name = "Total Strain with prestrain", ResultFunction = stressLogic.GetTotalStrainWithPresrain });
|
|
||||||
resultFuncs.Add(new ResultFunc() { Name = "Elastic Strain", ResultFunction = stressLogic.GetElasticStrain });
|
|
||||||
resultFuncs.Add(new ResultFunc() { Name = "Plastic Strain", ResultFunction = stressLogic.GetPlasticStrain });
|
|
||||||
return resultFuncs;
|
|
||||||
}
|
|
||||||
private static List<IResultFunc> GetStressResultFuncs()
|
|
||||||
{
|
|
||||||
List<IResultFunc> resultFuncs = new List<IResultFunc>();
|
|
||||||
resultFuncs.Add(new ResultFunc() { Name = "Stress", ResultFunction = stressLogic.GetStress, UnitFactor = UnitConstants.Stress });
|
|
||||||
resultFuncs.Add(new ResultFunc() { Name = "Secant modulus", ResultFunction = stressLogic.GetSecantModulus, UnitFactor = UnitConstants.Stress });
|
|
||||||
resultFuncs.Add(new ResultFunc() { Name = "Modulus degradation", ResultFunction = stressLogic.GetModulusDegradation });
|
|
||||||
return resultFuncs;
|
|
||||||
}
|
|
||||||
private static List<IResultFunc> GetForcesResultFuncs()
|
|
||||||
{
|
|
||||||
List<IResultFunc> resultFuncs = new List<IResultFunc>();
|
|
||||||
resultFuncs.Add(new ResultFunc() { Name = "Force", ResultFunction = stressLogic.GetForce, UnitFactor = UnitConstants.Force });
|
|
||||||
resultFuncs.Add(new ResultFunc() { Name = "Moment X", ResultFunction = stressLogic.GetMomentX, UnitFactor = UnitConstants.Force });
|
|
||||||
resultFuncs.Add(new ResultFunc() { Name = "Moment Y", ResultFunction = stressLogic.GetMomentY, UnitFactor = UnitConstants.Force });
|
|
||||||
return resultFuncs;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,6 +4,10 @@ using LoaderCalculator.Data.Matrix;
|
|||||||
using LoaderCalculator.Data.Ndms;
|
using LoaderCalculator.Data.Ndms;
|
||||||
using LoaderCalculator.Data.ResultData;
|
using LoaderCalculator.Data.ResultData;
|
||||||
using LoaderCalculator.Logics;
|
using LoaderCalculator.Logics;
|
||||||
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
|
using StructureHelperCommon.Services;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Triangulations;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -14,13 +18,14 @@ namespace StructureHelper.Services.ResultViewers
|
|||||||
{
|
{
|
||||||
public static class ShowIsoFieldResult
|
public static class ShowIsoFieldResult
|
||||||
{
|
{
|
||||||
public static void ShowResult(IStrainMatrix strainMatrix, IEnumerable<INdm> ndms, IEnumerable<IResultFunc> resultFuncs)
|
static IMathRoundLogic roundLogic = new SmartRoundLogic() { DigitQuant = 3 };
|
||||||
|
public static void ShowResult(IStrainMatrix strainMatrix, IEnumerable<INdm> ndms, IEnumerable<ForceResultFunc> resultFuncs)
|
||||||
{
|
{
|
||||||
var primitiveSets = GetPrimitiveSets(strainMatrix, ndms, resultFuncs);
|
var primitiveSets = GetPrimitiveSets(strainMatrix, ndms, resultFuncs);
|
||||||
FieldViewerOperation.ShowViewer(primitiveSets);
|
FieldViewerOperation.ShowViewer(primitiveSets);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<IPrimitiveSet> GetPrimitiveSets(IStrainMatrix strainMatrix, IEnumerable<INdm> ndms, IEnumerable<IResultFunc> resultFuncs)
|
public static List<IPrimitiveSet> GetPrimitiveSets(IStrainMatrix strainMatrix, IEnumerable<INdm> ndms, IEnumerable<ForceResultFunc> resultFuncs)
|
||||||
{
|
{
|
||||||
List<IPrimitiveSet> primitiveSets = new List<IPrimitiveSet>();
|
List<IPrimitiveSet> primitiveSets = new List<IPrimitiveSet>();
|
||||||
foreach (var valDelegate in resultFuncs)
|
foreach (var valDelegate in resultFuncs)
|
||||||
@@ -29,23 +34,85 @@ namespace StructureHelper.Services.ResultViewers
|
|||||||
List<IValuePrimitive> primitives = new List<IValuePrimitive>();
|
List<IValuePrimitive> primitives = new List<IValuePrimitive>();
|
||||||
foreach (INdm ndm in ndms)
|
foreach (INdm ndm in ndms)
|
||||||
{
|
{
|
||||||
double val = valDelegate.ResultFunction.Invoke(strainMatrix, ndm) * valDelegate.UnitFactor;
|
primitives.Add(ProcessNdm(strainMatrix, valDelegate, ndm));
|
||||||
IValuePrimitive valuePrimitive;
|
|
||||||
if (ndm is IRectangleNdm)
|
|
||||||
{
|
|
||||||
var shapeNdm = ndm as IRectangleNdm;
|
|
||||||
valuePrimitive = new RectanglePrimitive() { CenterX = ndm.CenterX, CenterY = ndm.CenterY, Height = shapeNdm.Height, Width = shapeNdm.Width, Value = val };
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
valuePrimitive = new CirclePrimitive() { CenterX = ndm.CenterX, CenterY = ndm.CenterY, Diameter = Math.Sqrt(ndm.Area / Math.PI) * 2, Value = val };
|
|
||||||
}
|
|
||||||
primitives.Add(valuePrimitive);
|
|
||||||
}
|
}
|
||||||
primitiveSet.ValuePrimitives = primitives;
|
primitiveSet.ValuePrimitives = primitives;
|
||||||
primitiveSets.Add(primitiveSet);
|
primitiveSets.Add(primitiveSet);
|
||||||
}
|
}
|
||||||
return primitiveSets;
|
return primitiveSets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<IPrimitiveSet> GetPrimitiveSets(IEnumerable<RebarCrackResult> rebarResults, IEnumerable<CrackResultFunc> resultFuncs)
|
||||||
|
{
|
||||||
|
List<IPrimitiveSet> primitiveSets = new List<IPrimitiveSet>();
|
||||||
|
foreach (var valDelegate in resultFuncs)
|
||||||
|
{
|
||||||
|
PrimitiveSet primitiveSet = new PrimitiveSet() { Name = valDelegate.Name };
|
||||||
|
List<IValuePrimitive> primitives = new List<IValuePrimitive>();
|
||||||
|
foreach (var rebarResult in rebarResults)
|
||||||
|
{
|
||||||
|
primitives.Add(ProcessNdm(valDelegate, rebarResult));
|
||||||
|
}
|
||||||
|
primitiveSet.ValuePrimitives = primitives;
|
||||||
|
primitiveSets.Add(primitiveSet);
|
||||||
|
}
|
||||||
|
return primitiveSets;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IValuePrimitive ProcessNdm(CrackResultFunc valDelegate, RebarCrackResult rebarResult)
|
||||||
|
{
|
||||||
|
double delegateResult = valDelegate.ResultFunction.Invoke(rebarResult);
|
||||||
|
var val = delegateResult * valDelegate.UnitFactor;
|
||||||
|
//val = roundLogic.RoundValue(val);
|
||||||
|
IValuePrimitive valuePrimitive;
|
||||||
|
var rebarNdm = rebarResult.RebarPrimitive.GetRebarNdm(new TriangulationOptions()
|
||||||
|
{
|
||||||
|
LimiteState = LimitStates.SLS,
|
||||||
|
CalcTerm = CalcTerms.ShortTerm
|
||||||
|
}
|
||||||
|
);
|
||||||
|
valuePrimitive = ProcessCircle(rebarNdm, val);
|
||||||
|
return valuePrimitive;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IValuePrimitive ProcessNdm(IStrainMatrix strainMatrix, ForceResultFunc valDelegate, INdm ndm)
|
||||||
|
{
|
||||||
|
double delegateResult = valDelegate.ResultFunction.Invoke(strainMatrix, ndm);
|
||||||
|
double val = delegateResult * valDelegate.UnitFactor;
|
||||||
|
//val = roundLogic.RoundValue(val);
|
||||||
|
IValuePrimitive valuePrimitive;
|
||||||
|
if (ndm is IRectangleNdm shapeNdm)
|
||||||
|
{
|
||||||
|
valuePrimitive = ProcessRectangle(shapeNdm, val);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
valuePrimitive = ProcessCircle(ndm, val);
|
||||||
|
}
|
||||||
|
return valuePrimitive;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IValuePrimitive ProcessRectangle(IRectangleNdm shapeNdm, double val)
|
||||||
|
{
|
||||||
|
return new RectanglePrimitive()
|
||||||
|
{
|
||||||
|
CenterX = shapeNdm.CenterX,
|
||||||
|
CenterY = shapeNdm.CenterY,
|
||||||
|
Height = shapeNdm.Height,
|
||||||
|
Width = shapeNdm.Width,
|
||||||
|
Value = val
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IValuePrimitive ProcessCircle(INdm ndm, double val)
|
||||||
|
{
|
||||||
|
return new CirclePrimitive()
|
||||||
|
{
|
||||||
|
CenterX = ndm.CenterX,
|
||||||
|
CenterY = ndm.CenterY,
|
||||||
|
Diameter = Math.Sqrt(ndm.Area / Math.PI) * 2,
|
||||||
|
Value = val
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,15 @@
|
|||||||
<Compile Update="Windows\Arrays\ArrayView.xaml.cs">
|
<Compile Update="Windows\Arrays\ArrayView.xaml.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Update="Windows\CalculationWindows\CalculatorsViews\Cracks\CrackCalculatorInputDataView.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Update="Windows\CalculationWindows\CalculatorsViews\Cracks\CrackResultView.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Update="Windows\CalculationWindows\CalculatorsViews\Cracks\TupleCrackResultView.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Update="Windows\CalculationWindows\CalculatorsViews\ForceCalculatorViews\ForceResultLogic\LimitCurveDataView.xaml.cs">
|
<Compile Update="Windows\CalculationWindows\CalculatorsViews\ForceCalculatorViews\ForceResultLogic\LimitCurveDataView.xaml.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -68,6 +77,9 @@
|
|||||||
</Compile>
|
</Compile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Page Update="Infrastructure\UI\Resources\Cracks.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
<Page Update="Infrastructure\UI\Resources\ForceTemplates.xaml">
|
<Page Update="Infrastructure\UI\Resources\ForceTemplates.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
@@ -83,9 +95,24 @@
|
|||||||
<Page Update="Infrastructure\UI\Resources\Materials.xaml">
|
<Page Update="Infrastructure\UI\Resources\Materials.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
|
<Page Update="Infrastructure\UI\Resources\ServiceColors.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
<Page Update="Windows\Arrays\ArrayView.xaml">
|
<Page Update="Windows\Arrays\ArrayView.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
|
<Page Update="Windows\CalculationWindows\CalculatorsViews\Cracks\CrackCalculatorInputDataView.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
<Page Update="Windows\CalculationWindows\CalculatorsViews\Cracks\CrackResultView.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
<Page Update="Windows\CalculationWindows\CalculatorsViews\Cracks\Cracks.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
<Page Update="Windows\CalculationWindows\CalculatorsViews\Cracks\TupleCrackResultView.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
<Page Update="Windows\CalculationWindows\CalculatorsViews\ForceCalculatorViews\ForceResultLogic\LimitCurveDataView.xaml">
|
<Page Update="Windows\CalculationWindows\CalculatorsViews\ForceCalculatorViews\ForceResultLogic\LimitCurveDataView.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
|
|||||||
@@ -21,7 +21,11 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
|||||||
{
|
{
|
||||||
internal class CrackDiagramLogic : ILongProcessLogic
|
internal class CrackDiagramLogic : ILongProcessLogic
|
||||||
{
|
{
|
||||||
|
static IConvertUnitLogic operationLogic = new ConvertUnitLogic();
|
||||||
|
static IGetUnitLogic unitLogic = new GetUnitLogic();
|
||||||
static readonly CrackForceCalculator calculator = new();
|
static readonly CrackForceCalculator calculator = new();
|
||||||
|
private ITriangulatePrimitiveLogic triangulateLogic;
|
||||||
|
|
||||||
private List<IForcesTupleResult> ValidTupleList { get; set; }
|
private List<IForcesTupleResult> ValidTupleList { get; set; }
|
||||||
ArrayParameter<double> arrayParameter;
|
ArrayParameter<double> arrayParameter;
|
||||||
private IEnumerable<IForcesTupleResult> TupleList { get; set; }
|
private IEnumerable<IForcesTupleResult> TupleList { get; set; }
|
||||||
@@ -65,9 +69,9 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
|||||||
arrayParameter = new ArrayParameter<double>(ValidTupleList.Count(), labels);
|
arrayParameter = new ArrayParameter<double>(ValidTupleList.Count(), labels);
|
||||||
CalculateWithCrack(ValidTupleList,
|
CalculateWithCrack(ValidTupleList,
|
||||||
NdmPrimitives,
|
NdmPrimitives,
|
||||||
CommonOperation.GetUnit(UnitTypes.Force),
|
unitLogic.GetUnit(UnitTypes.Force),
|
||||||
CommonOperation.GetUnit(UnitTypes.Moment),
|
unitLogic.GetUnit(UnitTypes.Moment),
|
||||||
CommonOperation.GetUnit(UnitTypes.Curvature));
|
unitLogic.GetUnit(UnitTypes.Curvature));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ShowWindow()
|
public void ShowWindow()
|
||||||
@@ -102,7 +106,14 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
|||||||
calculator.EndTuple = validTupleList[i].DesignForceTuple.ForceTuple;
|
calculator.EndTuple = validTupleList[i].DesignForceTuple.ForceTuple;
|
||||||
var limitState = validTupleList[i].DesignForceTuple.LimitState;
|
var limitState = validTupleList[i].DesignForceTuple.LimitState;
|
||||||
var calcTerm = validTupleList[i].DesignForceTuple.CalcTerm;
|
var calcTerm = validTupleList[i].DesignForceTuple.CalcTerm;
|
||||||
var ndms = NdmPrimitivesService.GetNdms(ndmPrimitives, limitState, calcTerm);
|
triangulateLogic = new TriangulatePrimitiveLogic()
|
||||||
|
{
|
||||||
|
Primitives = ndmPrimitives,
|
||||||
|
LimitState = limitState,
|
||||||
|
CalcTerm = calcTerm,
|
||||||
|
TraceLogger = TraceLogger
|
||||||
|
};
|
||||||
|
var ndms = triangulateLogic.GetNdms();
|
||||||
calculator.NdmCollection = ndms;
|
calculator.NdmCollection = ndms;
|
||||||
calculator.Run();
|
calculator.Run();
|
||||||
var result = (CrackForceResult)calculator.Result;
|
var result = (CrackForceResult)calculator.Result;
|
||||||
@@ -143,7 +154,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
|||||||
const string crc = "Crc";
|
const string crc = "Crc";
|
||||||
const string crcFactor = "CrcSofteningFactor";
|
const string crcFactor = "CrcSofteningFactor";
|
||||||
var labels = LabelsFactory.GetCommonLabels();
|
var labels = LabelsFactory.GetCommonLabels();
|
||||||
IUnit unitCurvature = CommonOperation.GetUnit(UnitTypes.Curvature);
|
IUnit unitCurvature = unitLogic.GetUnit(UnitTypes.Curvature);
|
||||||
var crclabels = new List<string>
|
var crclabels = new List<string>
|
||||||
{
|
{
|
||||||
$"{crc}{GeometryNames.CurvFstName}, {unitCurvature.Name}",
|
$"{crc}{GeometryNames.CurvFstName}, {unitCurvature.Name}",
|
||||||
|
|||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<Window x:Class="StructureHelper.Windows.CalculationWindows.CalculatorsViews.CrackCalculatorInputDataView"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:local="clr-namespace:StructureHelper.Windows.CalculationWindows.CalculatorsViews"
|
||||||
|
d:DataContext="{d:DesignInstance local:CrackCalculatorInputDataViewModel}"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="{Binding WindowTitle}" Height="390" Width="400" MinHeight="300" MinWidth="400"
|
||||||
|
ResizeMode="NoResize" WindowStartupLocation="CenterScreen"
|
||||||
|
Closing="Window_Closing" ShowInTaskbar="False" Icon="{Binding Mode=OneWay, Source={StaticResource CrackCalculator}}"
|
||||||
|
>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition/>
|
||||||
|
<RowDefinition Height="35"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TabControl>
|
||||||
|
<TabItem Header="General">
|
||||||
|
<StackPanel>
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="100"/>
|
||||||
|
<ColumnDefinition Width="300"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<TextBlock Text="Name"/>
|
||||||
|
<TextBox Grid.Column="1" Text="{Binding Name}"/>
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Forces">
|
||||||
|
<ContentControl ContentTemplate="{StaticResource SourceToTarget}" Content="{Binding CombinationViewModel}"/>
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Primitives">
|
||||||
|
<ContentControl ContentTemplate="{StaticResource SourceToTarget}" Content="{Binding PrimitivesViewModel}"/>
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Settings">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="25"/>
|
||||||
|
<RowDefinition Height="25"/>
|
||||||
|
<RowDefinition Height="25"/>
|
||||||
|
<RowDefinition Height="25"/>
|
||||||
|
<RowDefinition Height="25"/>
|
||||||
|
<RowDefinition Height="25"/>
|
||||||
|
<RowDefinition Height="25"/>
|
||||||
|
<RowDefinition/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<CheckBox x:Name="SetSoftFactorFlag" Grid.ColumnSpan="2" Content="Set user value of softening factor (PsiS)" IsChecked="{Binding SetSofteningFactor}"/>
|
||||||
|
<TextBox Grid.Row="1" Text="{Binding SofteningFactor, Converter={StaticResource PlainDouble}, ValidatesOnDataErrors=True}"
|
||||||
|
IsEnabled="{Binding IsChecked, ElementName=SetSoftFactorFlag}" Margin="0,0,0,3"/>
|
||||||
|
<CheckBox x:Name="SetLengthFlag" Grid.ColumnSpan="2" Grid.Row="2" Content="Set user value of length between cracks (Lcrc)" IsChecked="{Binding SetLengthBetweenCracks}"/>
|
||||||
|
<TextBox Grid.Row="3" Text="{Binding LengthBetweenCracks, Converter={StaticResource LengthConverter}, ValidatesOnDataErrors=True}"
|
||||||
|
IsEnabled="{Binding IsChecked, ElementName=SetLengthFlag}" Margin="0,0,0,3"/>
|
||||||
|
<TextBlock Grid.Row="4" Text="Ultimate limit crack width"/>
|
||||||
|
<TextBlock Grid.Row="5" Text="Long-term"/>
|
||||||
|
<TextBox Grid.Row="5" Grid.Column="1" Text="{Binding UltLongTermCrackWidth, Converter={StaticResource LengthConverter}, ValidatesOnDataErrors=True}"
|
||||||
|
Margin="3"/>
|
||||||
|
<TextBlock Grid.Row="6" Text="Short-term"/>
|
||||||
|
<TextBox Grid.Row="6" Grid.Column="1" Text="{Binding UltShortTermCrackWidth, Converter={StaticResource LengthConverter}, ValidatesOnDataErrors=True}"
|
||||||
|
Margin="3"/>
|
||||||
|
</Grid>
|
||||||
|
</TabItem>
|
||||||
|
</TabControl>
|
||||||
|
<ContentControl Grid.Row="1" ContentTemplate="{StaticResource OkCancelButtons}" Content="{Binding}"/>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
using StructureHelper.Windows.ViewModels.Calculations.Calculators;
|
||||||
|
using StructureHelper.Windows.ViewModels.Materials;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
|
||||||
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Логика взаимодействия для CrackCalculatorInputDataView.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class CrackCalculatorInputDataView : Window
|
||||||
|
{
|
||||||
|
private CrackCalculatorInputDataViewModel viewModel;
|
||||||
|
|
||||||
|
public CrackCalculatorInputDataView(CrackCalculatorInputDataViewModel viewModel)
|
||||||
|
{
|
||||||
|
this.viewModel = viewModel;
|
||||||
|
viewModel.ParentWindow = this;
|
||||||
|
DataContext = viewModel;
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||||
|
{
|
||||||
|
viewModel.Refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
using StructureHelper.Infrastructure.UI.DataContexts;
|
||||||
|
using StructureHelper.Windows.ViewModels;
|
||||||
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
|
using StructureHelperCommon.Models.Forces;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Primitives;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
||||||
|
{
|
||||||
|
public class CrackCalculatorInputDataViewModel : OkCancelViewModelBase
|
||||||
|
{
|
||||||
|
private CrackCalculator calculator;
|
||||||
|
CrackInputData crackInputData;
|
||||||
|
private bool setUserValueSofteningFactor;
|
||||||
|
private double softeningFactor;
|
||||||
|
private string name;
|
||||||
|
|
||||||
|
public SourceTargetVM<IForceAction> CombinationViewModel { get; }
|
||||||
|
public SourceTargetVM<PrimitiveBase> PrimitivesViewModel { get; private set; }
|
||||||
|
public string WindowTitle => "Crack calculator: " + Name;
|
||||||
|
public string Name
|
||||||
|
{
|
||||||
|
get => calculator.Name;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
calculator.Name = value;
|
||||||
|
OnPropertyChanged(nameof(Name));
|
||||||
|
OnPropertyChanged(nameof(WindowTitle));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public bool SetSofteningFactor
|
||||||
|
{
|
||||||
|
get => crackInputData.UserCrackInputData.SetSofteningFactor;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
crackInputData.UserCrackInputData.SetSofteningFactor = value;
|
||||||
|
OnPropertyChanged(nameof(SetSofteningFactor));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public double SofteningFactor
|
||||||
|
{
|
||||||
|
get => crackInputData.UserCrackInputData.SofteningFactor; set
|
||||||
|
{
|
||||||
|
if (value > 1d || value < 0d) { return; }
|
||||||
|
crackInputData.UserCrackInputData.SofteningFactor = value;
|
||||||
|
OnPropertyChanged(nameof(SetSofteningFactor));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public bool SetLengthBetweenCracks
|
||||||
|
{
|
||||||
|
get => crackInputData.UserCrackInputData.SetLengthBetweenCracks;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
crackInputData.UserCrackInputData.SetLengthBetweenCracks = value;
|
||||||
|
OnPropertyChanged(nameof(SetLengthBetweenCracks));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public double LengthBetweenCracks
|
||||||
|
{
|
||||||
|
get => crackInputData.UserCrackInputData.LengthBetweenCracks; set
|
||||||
|
{
|
||||||
|
if (value <= 0d) { return; }
|
||||||
|
crackInputData.UserCrackInputData.LengthBetweenCracks = value;
|
||||||
|
OnPropertyChanged(nameof(SetLengthBetweenCracks));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public double UltLongTermCrackWidth
|
||||||
|
{
|
||||||
|
get => crackInputData.UserCrackInputData.UltimateLongCrackWidth; set
|
||||||
|
{
|
||||||
|
if (value <= 0d) { return; }
|
||||||
|
crackInputData.UserCrackInputData.UltimateLongCrackWidth = value;
|
||||||
|
OnPropertyChanged(nameof(UltLongTermCrackWidth));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public double UltShortTermCrackWidth
|
||||||
|
{
|
||||||
|
get => crackInputData.UserCrackInputData.UltimateShortCrackWidth; set
|
||||||
|
{
|
||||||
|
if (value <= 0d) { return; }
|
||||||
|
crackInputData.UserCrackInputData.UltimateShortCrackWidth = value;
|
||||||
|
OnPropertyChanged(nameof(UltShortTermCrackWidth));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CrackCalculatorInputDataViewModel(IEnumerable<INdmPrimitive> allowedPrimitives, IEnumerable<IForceAction> allowedCombinations, CrackCalculator crackCalculator)
|
||||||
|
{
|
||||||
|
calculator = crackCalculator;
|
||||||
|
crackInputData = calculator.InputData;
|
||||||
|
CombinationViewModel = SourceTargetFactory.GetSourceTargetVM(allowedCombinations, crackInputData.ForceActions);
|
||||||
|
PrimitivesViewModel = SourceTargetFactory.GetSourceTargetVM(allowedPrimitives, crackInputData.Primitives);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Refresh()
|
||||||
|
{
|
||||||
|
var combinations = CombinationViewModel.GetTargetItems();
|
||||||
|
crackInputData.ForceActions.Clear();
|
||||||
|
foreach (var item in combinations)
|
||||||
|
{
|
||||||
|
crackInputData.ForceActions.Add(item);
|
||||||
|
}
|
||||||
|
crackInputData.Primitives.Clear();
|
||||||
|
foreach (var item in PrimitivesViewModel.GetTargetItems())
|
||||||
|
{
|
||||||
|
crackInputData.Primitives.Add(item.GetNdmPrimitive());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
<Window x:Class="StructureHelper.Windows.CalculationWindows.CalculatorsViews.CrackResultView"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:local="clr-namespace:StructureHelper.Windows.CalculationWindows.CalculatorsViews"
|
||||||
|
d:DataContext="{d:DesignInstance local:CrackResultViewModel}"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Result of calculations of crack" Height="450" Width="800" MinHeight="300" MinWidth="600" MaxHeight="800" MaxWidth="1000" WindowStartupLocation="CenterScreen" ShowInTaskbar="False">
|
||||||
|
<Window.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ResourceDictionary Source="/Windows/CalculationWindows/CalculatorsViews/Cracks/Cracks.xaml" />
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</Window.Resources>
|
||||||
|
<DockPanel>
|
||||||
|
<ToolBarTray DockPanel.Dock="Top">
|
||||||
|
<ToolBar>
|
||||||
|
<Button Style="{DynamicResource ToolButton}" Command="{Binding ShowRebarsCommand}" ToolTip="Show results by rebars">
|
||||||
|
<Viewbox>
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource ShowRebarsResult}"/>
|
||||||
|
</Viewbox>
|
||||||
|
</Button>
|
||||||
|
<Button Style="{DynamicResource ToolButton}" Command="{Binding ShowIsoFieldCommand}" ToolTip="Show isofield results">
|
||||||
|
<Viewbox>
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource IsoFieldResult}"/>
|
||||||
|
</Viewbox>
|
||||||
|
</Button>
|
||||||
|
</ToolBar>
|
||||||
|
</ToolBarTray>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition/>
|
||||||
|
<RowDefinition Height="40"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<DataGrid IsReadOnly="True" AutoGenerateColumns="False" ItemsSource="{Binding TupleResults}" SelectedItem="{Binding SelectedResult}">
|
||||||
|
<DataGrid.RowStyle>
|
||||||
|
<Style TargetType="DataGridRow">
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding IsValid}" Value="false">
|
||||||
|
<Setter Property="Background" Value="{StaticResource ErrorColorBrush}"/>
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
</DataGrid.RowStyle>
|
||||||
|
<DataGrid.Columns>
|
||||||
|
<DataGridCheckBoxColumn Header="Valid" Binding="{Binding Path=IsValid}"/>
|
||||||
|
<DataGridTextColumn Header="Action name" Binding="{Binding InputData.TupleName}" Width="120"/>
|
||||||
|
<DataGridTemplateColumn Header="Combination term" Width="120">
|
||||||
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Grid.Row="0" Text="Long-term"/>
|
||||||
|
<TextBlock Grid.Row="1" Text="Short-term"/>
|
||||||
|
</Grid>
|
||||||
|
</DataTemplate>
|
||||||
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
|
</DataGridTemplateColumn>
|
||||||
|
<DataGridTemplateColumn Header="Moment Mx" Width="90">
|
||||||
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Grid.Row="0" Text="{Binding InputData.LongTermTuple.Mx, Converter={StaticResource MomentConverter}}" HorizontalAlignment="Right" />
|
||||||
|
<TextBlock Grid.Row="1" Text="{Binding InputData.ShortTermTuple.Mx, Converter={StaticResource MomentConverter}}" HorizontalAlignment="Right" />
|
||||||
|
</Grid>
|
||||||
|
</DataTemplate>
|
||||||
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
|
</DataGridTemplateColumn>
|
||||||
|
<DataGridTemplateColumn Header="Moment My" Width="90">
|
||||||
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Grid.Row="0" Text="{Binding InputData.LongTermTuple.My, Converter={StaticResource MomentConverter}}" HorizontalAlignment="Right"/>
|
||||||
|
<TextBlock Grid.Row="1" Text="{Binding InputData.ShortTermTuple.My, Converter={StaticResource MomentConverter}}" HorizontalAlignment="Right" />
|
||||||
|
</Grid>
|
||||||
|
</DataTemplate>
|
||||||
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
|
</DataGridTemplateColumn>
|
||||||
|
<DataGridTemplateColumn Header="Force Nz" Width="90">
|
||||||
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Grid.Row="0" Text="{Binding InputData.LongTermTuple.Nz, Converter={StaticResource ForceConverter}}" HorizontalAlignment="Right" />
|
||||||
|
<TextBlock Grid.Row="1" Text="{Binding InputData.ShortTermTuple.Nz, Converter={StaticResource ForceConverter}}" HorizontalAlignment="Right" />
|
||||||
|
</Grid>
|
||||||
|
</DataTemplate>
|
||||||
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
|
</DataGridTemplateColumn>
|
||||||
|
<DataGridTemplateColumn Header="Crack width" Width="80">
|
||||||
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<ContentControl ContentTemplate="{StaticResource CrackGrid}" Content="{Binding}"/>
|
||||||
|
</DataTemplate>
|
||||||
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
|
</DataGridTemplateColumn>
|
||||||
|
<DataGridTextColumn Header="Description" Width="300" Binding="{Binding Description}"/>
|
||||||
|
</DataGrid.Columns>
|
||||||
|
</DataGrid>
|
||||||
|
<TextBlock Grid.Row="1" Text="{Binding CrackResult.Description}"/>
|
||||||
|
</Grid>
|
||||||
|
</DockPanel>
|
||||||
|
</Window>
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
|
||||||
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Логика взаимодействия для CrackResultView.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class CrackResultView : Window
|
||||||
|
{
|
||||||
|
private readonly CrackResultViewModel viewModel;
|
||||||
|
|
||||||
|
public CrackResultView(CrackResultViewModel viewModel)
|
||||||
|
{
|
||||||
|
this.viewModel = viewModel;
|
||||||
|
InitializeComponent();
|
||||||
|
this.DataContext = this.viewModel;
|
||||||
|
}
|
||||||
|
public CrackResultView(CrackResult result) : this(new CrackResultViewModel(result))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
using StructureHelper.Infrastructure;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Input;
|
||||||
|
|
||||||
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
||||||
|
{
|
||||||
|
public class CrackResultViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
IShowCrackIsoFieldsLogic showCrackIsoFieldsLogic => new ShowCrackIsoFieldsLogic();
|
||||||
|
private CrackResult crackResult;
|
||||||
|
private RelayCommand? showIsoFieldCommand;
|
||||||
|
private RelayCommand? showRebarsCommand;
|
||||||
|
|
||||||
|
public TupleCrackResult SelectedResult { get; set; }
|
||||||
|
public List<TupleCrackResult> TupleResults => CrackResult.TupleResults;
|
||||||
|
public ICommand ShowRebarsCommand
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return showRebarsCommand ??= new RelayCommand(o =>
|
||||||
|
{
|
||||||
|
var wnd = new TupleCrackResultView(SelectedResult);
|
||||||
|
wnd.ShowDialog();
|
||||||
|
}, o => SelectedResult != null && SelectedResult.IsValid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICommand ShowIsoFieldCommand
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return showIsoFieldCommand ??= new RelayCommand(o =>
|
||||||
|
{
|
||||||
|
showCrackIsoFieldsLogic.ShowIsoField(SelectedResult.RebarResults);
|
||||||
|
}, o => SelectedResult != null && SelectedResult.IsValid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public CrackResult CrackResult => crackResult;
|
||||||
|
|
||||||
|
public CrackResultViewModel(CrackResult crackResult)
|
||||||
|
{
|
||||||
|
this.crackResult = crackResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||||
|
<DataTemplate x:Key="CrackTextBox">
|
||||||
|
<TextBlock Grid.Row="0" Text="{Binding CrackWidth, Converter={StaticResource CrackWidth}, ConverterParameter='Fixed3'}" HorizontalAlignment="Right">
|
||||||
|
<TextBlock.Style>
|
||||||
|
<Style TargetType="TextBlock">
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding IsCrackLessThanUltimate}" Value="false">
|
||||||
|
<Setter Property="Background" Value="{StaticResource WarningColorBrush}" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
</TextBlock.Style>
|
||||||
|
</TextBlock>
|
||||||
|
</DataTemplate>
|
||||||
|
<DataTemplate x:Key="CrackGrid">
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<ContentControl ContentTemplate="{StaticResource CrackTextBox}" Content="{Binding LongTermResult}"/>
|
||||||
|
<ContentControl Grid.Row="1" ContentTemplate="{StaticResource CrackTextBox}" Content="{Binding ShortTermResult}"/>
|
||||||
|
</Grid>
|
||||||
|
</DataTemplate>
|
||||||
|
|
||||||
|
</ResourceDictionary>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
||||||
|
{
|
||||||
|
public interface IShowCrackIsoFieldsLogic
|
||||||
|
{
|
||||||
|
void ShowIsoField(IEnumerable<RebarCrackResult> rebarResults);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
using StructureHelper.Services.Reports.CalculationReports;
|
||||||
|
using StructureHelper.Services.ResultViewers;
|
||||||
|
using StructureHelper.Windows.Errors;
|
||||||
|
using StructureHelper.Windows.ViewModels.Errors;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
||||||
|
{
|
||||||
|
public class ShowCrackIsoFieldsLogic : IShowCrackIsoFieldsLogic
|
||||||
|
{
|
||||||
|
private IsoFieldReport isoFieldReport;
|
||||||
|
|
||||||
|
public void ShowIsoField(IEnumerable<RebarCrackResult> rebarResults)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var primitiveSets = ShowIsoFieldResult.GetPrimitiveSets(rebarResults, CrackResultFuncFactory.GetResultFuncs());
|
||||||
|
isoFieldReport = new IsoFieldReport(primitiveSets);
|
||||||
|
isoFieldReport.Show();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
var vm = new ErrorProcessor()
|
||||||
|
{
|
||||||
|
ShortText = "Errors apearred during showing isofield, see detailed information",
|
||||||
|
DetailText = $"{ex}"
|
||||||
|
};
|
||||||
|
new ErrorMessage(vm).ShowDialog();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
<Window x:Class="StructureHelper.Windows.CalculationWindows.CalculatorsViews.TupleCrackResultView"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:local="clr-namespace:StructureHelper.Windows.CalculationWindows.CalculatorsViews"
|
||||||
|
d:DataContext="{d:DesignInstance local:TupleCrackResultViewModel}"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="{Binding WindowTitle}" Height="450" Width="900" MinHeight="300" MinWidth="500" MaxHeight="1000" MaxWidth="1400" WindowStartupLocation="CenterScreen" ShowInTaskbar="False">
|
||||||
|
<Window.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ResourceDictionary Source="/Windows/CalculationWindows/CalculatorsViews/Cracks/Cracks.xaml" />
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</Window.Resources>
|
||||||
|
<DockPanel>
|
||||||
|
<ToolBarTray DockPanel.Dock="Top">
|
||||||
|
<ToolBar>
|
||||||
|
<Button Style="{DynamicResource ToolButton}" Command="{Binding ShowIsoFieldCommand}" ToolTip="Show isofield results">
|
||||||
|
<Viewbox>
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource IsoFieldResult}"/>
|
||||||
|
</Viewbox>
|
||||||
|
</Button>
|
||||||
|
</ToolBar>
|
||||||
|
</ToolBarTray>
|
||||||
|
<DataGrid IsReadOnly="True" AutoGenerateColumns="False" ItemsSource="{Binding RebarResults}" SelectedItem="{Binding SelectedResult}">
|
||||||
|
<DataGrid.RowStyle>
|
||||||
|
<Style TargetType="DataGridRow">
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding IsValid}" Value="false">
|
||||||
|
<Setter Property="Background" Value="{StaticResource ErrorColorBrush}"/>
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
</DataGrid.RowStyle>
|
||||||
|
<DataGrid.Columns>
|
||||||
|
<DataGridCheckBoxColumn Header="Valid" Binding="{Binding IsValid}"/>
|
||||||
|
<DataGridTextColumn Header="Rebar name" Binding="{Binding RebarPrimitive.Name}" Width="120" CanUserSort="True"/>
|
||||||
|
<DataGridTemplateColumn Header="Combination term" Width="120">
|
||||||
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Grid.Row="0" Text="Long-term" />
|
||||||
|
<TextBlock Grid.Row="1" Text="Short-term" />
|
||||||
|
</Grid>
|
||||||
|
</DataTemplate>
|
||||||
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
|
</DataGridTemplateColumn>
|
||||||
|
<DataGridTemplateColumn Header="Softening factor" Width="100">
|
||||||
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Grid.Row="0" Text="{Binding LongTermResult.SofteningFactor, Converter={StaticResource PlainDouble}, StringFormat=F3}" HorizontalAlignment="Right" />
|
||||||
|
<TextBlock Grid.Row="1" Text="{Binding ShortTermResult.SofteningFactor, Converter={StaticResource PlainDouble}, StringFormat=F3}" HorizontalAlignment="Right" />
|
||||||
|
</Grid>
|
||||||
|
</DataTemplate>
|
||||||
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
|
</DataGridTemplateColumn>
|
||||||
|
<DataGridTemplateColumn Header="Rebar stress" Width="80">
|
||||||
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Grid.Row="0" Text="{Binding LongTermResult.RebarStressResult.RebarStress, Converter={StaticResource StressConverter}, ConverterParameter='Smart3'}" HorizontalAlignment="Right"/>
|
||||||
|
<TextBlock Grid.Row="1" Text="{Binding ShortTermResult.RebarStressResult.RebarStress, Converter={StaticResource StressConverter}, ConverterParameter='Smart3'}" HorizontalAlignment="Right"/>
|
||||||
|
</Grid>
|
||||||
|
</DataTemplate>
|
||||||
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
|
</DataGridTemplateColumn>
|
||||||
|
<DataGridTemplateColumn Header="Rebar strain" Width="80">
|
||||||
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Grid.Row="0" Text="{Binding LongTermResult.RebarStressResult.RebarStrain, StringFormat=F5}" HorizontalAlignment="Right"/>
|
||||||
|
<TextBlock Grid.Row="1" Text="{Binding ShortTermResult.RebarStressResult.RebarStrain, StringFormat=F5}" HorizontalAlignment="Right"/>
|
||||||
|
</Grid>
|
||||||
|
</DataTemplate>
|
||||||
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
|
</DataGridTemplateColumn>
|
||||||
|
<DataGridTemplateColumn Header="Ref. concrete strain" Width="120">
|
||||||
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Grid.Row="0" Text="{Binding LongTermResult.RebarStressResult.ConcreteStrain, StringFormat=F5}" HorizontalAlignment="Right"/>
|
||||||
|
<TextBlock Grid.Row="1" Text="{Binding ShortTermResult.RebarStressResult.ConcreteStrain, StringFormat=F5}" HorizontalAlignment="Right"/>
|
||||||
|
</Grid>
|
||||||
|
</DataTemplate>
|
||||||
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
|
</DataGridTemplateColumn>
|
||||||
|
<DataGridTemplateColumn Header="Crack width" Width="80">
|
||||||
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<ContentControl ContentTemplate="{StaticResource CrackGrid}" Content="{Binding}"/>
|
||||||
|
</DataTemplate>
|
||||||
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
|
</DataGridTemplateColumn>
|
||||||
|
<DataGridTextColumn Header="Description" Width="300" Binding="{Binding Description}"/>
|
||||||
|
</DataGrid.Columns>
|
||||||
|
</DataGrid>
|
||||||
|
</DockPanel>
|
||||||
|
</Window>
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
|
||||||
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Логика взаимодействия для TupleCrackResultView.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class TupleCrackResultView : Window
|
||||||
|
{
|
||||||
|
TupleCrackResultViewModel viewModel;
|
||||||
|
public TupleCrackResultView(TupleCrackResultViewModel viewModel)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
this.viewModel = viewModel;
|
||||||
|
DataContext = this.viewModel;
|
||||||
|
}
|
||||||
|
public TupleCrackResultView(TupleCrackResult crackResult) : this(new TupleCrackResultViewModel(crackResult))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
using LoaderCalculator.Data.Matrix;
|
||||||
|
using LoaderCalculator.Data.Ndms;
|
||||||
|
using StructureHelper.Infrastructure;
|
||||||
|
using StructureHelper.Services.Reports.CalculationReports;
|
||||||
|
using StructureHelper.Services.ResultViewers;
|
||||||
|
using StructureHelper.Windows.Errors;
|
||||||
|
using StructureHelper.Windows.ViewModels.Errors;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Input;
|
||||||
|
|
||||||
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
||||||
|
{
|
||||||
|
public class TupleCrackResultViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
IShowCrackIsoFieldsLogic showCrackIsoFieldsLogic => new ShowCrackIsoFieldsLogic();
|
||||||
|
private TupleCrackResult crackResult;
|
||||||
|
private RelayCommand showIsoFieldCommand;
|
||||||
|
private IsoFieldReport isoFieldReport;
|
||||||
|
|
||||||
|
public TupleCrackResult CrackResult => crackResult;
|
||||||
|
public List<RebarCrackResult> RebarResults => crackResult.RebarResults;
|
||||||
|
public RebarCrackResult SelectedResult { get; set; }
|
||||||
|
public string WindowTitle => "Result of calculation of cracks for action " + crackResult.InputData.TupleName;
|
||||||
|
public ICommand ShowIsoFieldCommand
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return showIsoFieldCommand ??= new RelayCommand(o =>
|
||||||
|
{
|
||||||
|
showCrackIsoFieldsLogic.ShowIsoField(crackResult.RebarResults);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public TupleCrackResultViewModel(TupleCrackResult crackResult)
|
||||||
|
{
|
||||||
|
this.crackResult = crackResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
|
using StructureHelperCommon.Models.Parameters;
|
||||||
|
using StructureHelperCommon.Services.Units;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Create array of common values
|
||||||
|
/// </summary>
|
||||||
|
public class DiagramFactory
|
||||||
|
{
|
||||||
|
IConvertUnitLogic operationLogic = new ConvertUnitLogic();
|
||||||
|
IGetUnitLogic unitLogic = new GetUnitLogic();
|
||||||
|
private ArrayParameter<double> arrayParameter;
|
||||||
|
/// <summary>
|
||||||
|
/// Collection of force results
|
||||||
|
/// </summary>
|
||||||
|
public List<IForcesTupleResult> TupleList { get; set; }
|
||||||
|
|
||||||
|
//public Action<int> SetProgress { get; set; }
|
||||||
|
|
||||||
|
public ArrayParameter<double> GetCommonArray()
|
||||||
|
{
|
||||||
|
var labels = LabelsFactory.GetCommonLabels();
|
||||||
|
arrayParameter = new ArrayParameter<double>(TupleList.Count(), labels);
|
||||||
|
Calculate();
|
||||||
|
return arrayParameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Calculate()
|
||||||
|
{
|
||||||
|
var data = arrayParameter.Data;
|
||||||
|
for (int i = 0; i < TupleList.Count(); i++)
|
||||||
|
{
|
||||||
|
var valueList = ProcessResult(i);
|
||||||
|
for (int j = 0; j < valueList.Count; j++)
|
||||||
|
{
|
||||||
|
data[i, j] = valueList[j];
|
||||||
|
}
|
||||||
|
//SetProgress?.Invoke(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<double> ProcessResult(int i)
|
||||||
|
{
|
||||||
|
var unitForce = unitLogic.GetUnit(UnitTypes.Force);
|
||||||
|
var unitMoment = unitLogic.GetUnit(UnitTypes.Moment);
|
||||||
|
var unitCurvature = unitLogic.GetUnit(UnitTypes.Curvature);
|
||||||
|
|
||||||
|
return new List<double>
|
||||||
|
{
|
||||||
|
TupleList[i].DesignForceTuple.ForceTuple.Mx * unitMoment.Multiplyer,
|
||||||
|
TupleList[i].DesignForceTuple.ForceTuple.My * unitMoment.Multiplyer,
|
||||||
|
TupleList[i].DesignForceTuple.ForceTuple.Nz * unitForce.Multiplyer,
|
||||||
|
TupleList[i].LoaderResults.ForceStrainPair.StrainMatrix.Kx * unitCurvature.Multiplyer,
|
||||||
|
TupleList[i].LoaderResults.ForceStrainPair.StrainMatrix.Ky * unitCurvature.Multiplyer,
|
||||||
|
TupleList[i].LoaderResults.ForceStrainPair.StrainMatrix.EpsZ
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
using StructureHelper.Windows.Forces;
|
||||||
|
using StructureHelperCommon.Models.Calculators;
|
||||||
|
using StructureHelperCommon.Models.Parameters;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews.ForceResultLogic
|
||||||
|
{
|
||||||
|
public interface IValuePointDiagramLogic
|
||||||
|
{
|
||||||
|
ForceCalculator Calculator { get; set; }
|
||||||
|
PointPrimitiveLogic PrimitiveLogic { get; set; }
|
||||||
|
IEnumerable<IForcesTupleResult> TupleList { get; set; }
|
||||||
|
ValueDelegatesLogic ValueDelegatesLogic { get; set; }
|
||||||
|
|
||||||
|
GenericResult<ArrayParameter<double>> GetArrayParameter();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,10 +25,12 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
const string ForceUnitString = "kN";
|
const string ForceUnitString = "kN";
|
||||||
const string MomentUnitString = "kNm";
|
const string MomentUnitString = "kNm";
|
||||||
|
|
||||||
|
IConvertUnitLogic operationLogic;
|
||||||
|
|
||||||
//private List<ArrayParameter<double>> arrayParameters;
|
//private List<ArrayParameter<double>> arrayParameters;
|
||||||
private IResult result;
|
private IResult result;
|
||||||
private IUnit unitForce = CommonOperation.GetUnit(UnitTypes.Force, ForceUnitString);
|
private IUnit unitForce;
|
||||||
private IUnit unitMoment = CommonOperation.GetUnit(UnitTypes.Moment, MomentUnitString);
|
private IUnit unitMoment;
|
||||||
private int stepCount;
|
private int stepCount;
|
||||||
|
|
||||||
private static GeometryNames GeometryNames => ProgramSetting.GeometryNames;
|
private static GeometryNames GeometryNames => ProgramSetting.GeometryNames;
|
||||||
@@ -48,6 +50,10 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
stepCount *= InputData.CalcTerms.Count();
|
stepCount *= InputData.CalcTerms.Count();
|
||||||
stepCount *= InputData.PredicateEntries.Count();
|
stepCount *= InputData.PredicateEntries.Count();
|
||||||
//arrayParameters = new();
|
//arrayParameters = new();
|
||||||
|
operationLogic = new ConvertUnitLogic();
|
||||||
|
IGetUnitLogic unitLogic = new GetUnitLogic();
|
||||||
|
unitForce = unitLogic.GetUnit(UnitTypes.Force, ForceUnitString);
|
||||||
|
unitMoment = unitLogic.GetUnit(UnitTypes.Moment, MomentUnitString);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DoCalculations()
|
private void DoCalculations()
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
using StructureHelper.Windows.Forces;
|
||||||
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
|
using StructureHelperCommon.Models.Forces;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Primitives;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using StructureHelper.Infrastructure.UI.DataContexts;
|
||||||
|
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||||
|
using StructureHelperCommon.Models.Calculators;
|
||||||
|
|
||||||
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews.ForceResultLogic
|
||||||
|
{
|
||||||
|
public class InterpolateValuePointsLogic
|
||||||
|
{
|
||||||
|
private InterpolationProgressLogic interpolationLogic;
|
||||||
|
private ValuePointsInterpolateViewModel viewModel;
|
||||||
|
private IResult result;
|
||||||
|
private ValuePointsInterpolationInputData inputData;
|
||||||
|
public ForcesTupleResult SelectedResult { get; set; }
|
||||||
|
public IEnumerable<INdmPrimitive> NdmPrimitives { get; set; }
|
||||||
|
public ForceCalculator ForceCalculator { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public ILongProcessLogic ProgressLogic { get; set; }
|
||||||
|
public ShowProgressLogic ShowProgressLogic { get; set; }
|
||||||
|
|
||||||
|
public void InterpolateValuePoints()
|
||||||
|
{
|
||||||
|
var tuple = SelectedResult.DesignForceTuple ?? throw new StructureHelperException(ErrorStrings.NullReference + ": Design force combination");
|
||||||
|
PrepareInputData(tuple);
|
||||||
|
viewModel = new ValuePointsInterpolateViewModel(inputData);
|
||||||
|
if (ShowDialog() == false) { return; };
|
||||||
|
ShowDiagram(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PrepareInputData(IDesignForceTuple tuple)
|
||||||
|
{
|
||||||
|
inputData = new ValuePointsInterpolationInputData()
|
||||||
|
{
|
||||||
|
FinishDesignForce = tuple.Clone() as IDesignForceTuple,
|
||||||
|
LimitState = tuple.LimitState,
|
||||||
|
CalcTerm = tuple.CalcTerm,
|
||||||
|
};
|
||||||
|
inputData.PrimitiveBases.AddRange(PrimitiveOperations.ConvertNdmPrimitivesToPrimitiveBase(NdmPrimitives));
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool ShowDialog()
|
||||||
|
{
|
||||||
|
var wnd = new ValuePointsInterpolateView(viewModel);
|
||||||
|
wnd.ShowDialog();
|
||||||
|
if (wnd.DialogResult != true) { return false; }
|
||||||
|
interpolationLogic = new InterpolationProgressLogic(ForceCalculator, viewModel.ForceInterpolationViewModel.Result);
|
||||||
|
ProgressLogic = interpolationLogic;
|
||||||
|
ShowProgressLogic = new(interpolationLogic)
|
||||||
|
{
|
||||||
|
WindowTitle = "Interpolate forces",
|
||||||
|
};
|
||||||
|
ShowProgressLogic.Show();
|
||||||
|
result = interpolationLogic.InterpolateCalculator.Result;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ShowDiagram(IResult result)
|
||||||
|
{
|
||||||
|
if (result.IsValid == false) { return; }
|
||||||
|
if (result is not IForcesResults)
|
||||||
|
{
|
||||||
|
throw new StructureHelperException(ErrorStrings.ExpectedWas(typeof(IForcesResults), result));
|
||||||
|
}
|
||||||
|
var tupleResult = result as IForcesResults;
|
||||||
|
var pointGraphLogic = new ShowValuePointDiagramLogic()
|
||||||
|
{
|
||||||
|
Calculator = interpolationLogic.InterpolateCalculator,
|
||||||
|
PrimitiveLogic = viewModel.PrimitiveLogic,
|
||||||
|
ValueDelegatesLogic = viewModel.ValueDelegatesLogic,
|
||||||
|
TupleList = tupleResult.ForcesResultList
|
||||||
|
};
|
||||||
|
pointGraphLogic.ShowWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,9 +11,11 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
|||||||
{
|
{
|
||||||
public static class LabelsFactory
|
public static class LabelsFactory
|
||||||
{
|
{
|
||||||
private static IUnit unitForce = CommonOperation.GetUnit(UnitTypes.Force);
|
static IConvertUnitLogic operationLogic = new ConvertUnitLogic();
|
||||||
private static IUnit unitMoment = CommonOperation.GetUnit(UnitTypes.Moment);
|
static IGetUnitLogic unitLogic = new GetUnitLogic();
|
||||||
private static IUnit unitCurvature = CommonOperation.GetUnit(UnitTypes.Curvature);
|
private static IUnit unitForce = unitLogic.GetUnit(UnitTypes.Force);
|
||||||
|
private static IUnit unitMoment = unitLogic.GetUnit(UnitTypes.Moment);
|
||||||
|
private static IUnit unitCurvature = unitLogic.GetUnit(UnitTypes.Curvature);
|
||||||
private static GeometryNames GeometryNames => ProgramSetting.GeometryNames;
|
private static GeometryNames GeometryNames => ProgramSetting.GeometryNames;
|
||||||
public static List<string> GetCommonLabels()
|
public static List<string> GetCommonLabels()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
internal class ShowCrackResultLogic
|
internal class ShowCrackResultLogic
|
||||||
{
|
{
|
||||||
private CrackForceCalculator calculator;
|
private CrackForceCalculator calculator;
|
||||||
|
private ITriangulatePrimitiveLogic triangulateLogic;
|
||||||
|
|
||||||
public static GeometryNames GeometryNames => ProgramSetting.GeometryNames;
|
public static GeometryNames GeometryNames => ProgramSetting.GeometryNames;
|
||||||
public LimitStates LimitState { get; set; }
|
public LimitStates LimitState { get; set; }
|
||||||
@@ -42,7 +43,13 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
calculator.TraceLogger = new ShiftTraceLogger();
|
calculator.TraceLogger = new ShiftTraceLogger();
|
||||||
calculator.StartTuple = startDesignTuple;
|
calculator.StartTuple = startDesignTuple;
|
||||||
calculator.EndTuple = finishDesignTuple;
|
calculator.EndTuple = finishDesignTuple;
|
||||||
calculator.NdmCollection = NdmPrimitivesService.GetNdms(ndmPrimitives, LimitState, CalcTerm);
|
triangulateLogic = new TriangulatePrimitiveLogic()
|
||||||
|
{
|
||||||
|
Primitives = ndmPrimitives,
|
||||||
|
LimitState = LimitState,
|
||||||
|
CalcTerm = CalcTerm
|
||||||
|
};
|
||||||
|
calculator.NdmCollection = triangulateLogic.GetNdms();
|
||||||
calculator.Run();
|
calculator.Run();
|
||||||
var result = (CrackForceResult)calculator.Result;
|
var result = (CrackForceResult)calculator.Result;
|
||||||
if (result.IsValid)
|
if (result.IsValid)
|
||||||
|
|||||||
@@ -19,14 +19,14 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
|
|
||||||
internal void Show()
|
internal void Show()
|
||||||
{
|
{
|
||||||
var inputData = new CrackWidthCalculatorInputData()
|
var inputData = new TupleCrackInputData()
|
||||||
{
|
{
|
||||||
LimitState = LimitState,
|
//LimitState = LimitState,
|
||||||
CalcTerm = CalcTerm,
|
//CalcTerm = CalcTerm,
|
||||||
ForceTuple = ForceTuple,
|
LongTermTuple = ForceTuple,
|
||||||
NdmPrimitives = ndmPrimitives
|
Primitives = ndmPrimitives
|
||||||
};
|
};
|
||||||
var calculator = new CrackWidthCalculator() { InputData = inputData };
|
var calculator = new TupleCrackCalculator() { InputData = inputData };
|
||||||
calculator.Run();
|
calculator.Run();
|
||||||
var result = calculator.Result;
|
var result = calculator.Result;
|
||||||
|
|
||||||
|
|||||||
@@ -58,9 +58,12 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
{
|
{
|
||||||
validTupleList = tupleList.Where(x => x.IsValid == true).ToList();
|
validTupleList = tupleList.Where(x => x.IsValid == true).ToList();
|
||||||
|
|
||||||
var labels = LabelsFactory.GetCommonLabels();
|
var factory = new DiagramFactory()
|
||||||
arrayParameter = new ArrayParameter<double>(validTupleList.Count(), labels);
|
{
|
||||||
Calculate();
|
TupleList = validTupleList,
|
||||||
|
//SetProgress = SetProgress,
|
||||||
|
};
|
||||||
|
arrayParameter = factory.GetCommonArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ShowDiagramLogic(IEnumerable<IForcesTupleResult> tupleList, IEnumerable<INdmPrimitive> ndmPrimitives)
|
public ShowDiagramLogic(IEnumerable<IForcesTupleResult> tupleList, IEnumerable<INdmPrimitive> ndmPrimitives)
|
||||||
@@ -69,37 +72,5 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
this.ndmPrimitives = ndmPrimitives;
|
this.ndmPrimitives = ndmPrimitives;
|
||||||
validTupleList = tupleList.Where(x => x.IsValid == true).ToList();
|
validTupleList = tupleList.Where(x => x.IsValid == true).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Calculate()
|
|
||||||
{
|
|
||||||
var data = arrayParameter.Data;
|
|
||||||
for (int i = 0; i < validTupleList.Count(); i++)
|
|
||||||
{
|
|
||||||
var valueList = ProcessResult(i);
|
|
||||||
for (int j = 0; j < valueList.Count; j++)
|
|
||||||
{
|
|
||||||
data[i, j] = valueList[j];
|
|
||||||
}
|
|
||||||
SetProgress?.Invoke(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private List<double> ProcessResult(int i)
|
|
||||||
{
|
|
||||||
var unitForce = CommonOperation.GetUnit(UnitTypes.Force);
|
|
||||||
var unitMoment = CommonOperation.GetUnit(UnitTypes.Moment);
|
|
||||||
var unitCurvature = CommonOperation.GetUnit(UnitTypes.Curvature);
|
|
||||||
|
|
||||||
return new List<double>
|
|
||||||
{
|
|
||||||
validTupleList[i].DesignForceTuple.ForceTuple.Mx * unitMoment.Multiplyer,
|
|
||||||
validTupleList[i].DesignForceTuple.ForceTuple.My * unitMoment.Multiplyer,
|
|
||||||
validTupleList[i].DesignForceTuple.ForceTuple.Nz * unitForce.Multiplyer,
|
|
||||||
validTupleList[i].LoaderResults.ForceStrainPair.StrainMatrix.Kx * unitCurvature.Multiplyer,
|
|
||||||
validTupleList[i].LoaderResults.ForceStrainPair.StrainMatrix.Ky * unitCurvature.Multiplyer,
|
|
||||||
validTupleList[i].LoaderResults.ForceStrainPair.StrainMatrix.EpsZ
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using StructureHelper.Windows.CalculationWindows.ProgressViews;
|
using StructureHelper.Windows.CalculationWindows.ProgressViews;
|
||||||
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
using StructureHelperCommon.Infrastructures.Interfaces;
|
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||||
using StructureHelperCommon.Models.Calculators;
|
using StructureHelperCommon.Models.Calculators;
|
||||||
using StructureHelperCommon.Models.Forces;
|
using StructureHelperCommon.Models.Forces;
|
||||||
@@ -11,7 +12,7 @@ using System.Windows.Forms;
|
|||||||
|
|
||||||
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews
|
||||||
{
|
{
|
||||||
internal class ShowProgressLogic
|
public class ShowProgressLogic
|
||||||
{
|
{
|
||||||
private ShowProgressViewModel progressViewModel;
|
private ShowProgressViewModel progressViewModel;
|
||||||
private ShowProgressView wndProgress;
|
private ShowProgressView wndProgress;
|
||||||
@@ -82,8 +83,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
throw new StructureHelperException(ex);
|
||||||
throw;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,17 @@
|
|||||||
using StructureHelper.Infrastructure.UI.DataContexts;
|
using LoaderCalculator.Data.Materials.MaterialBuilders;
|
||||||
|
using LoaderCalculator.Data.Ndms;
|
||||||
|
using StructureHelper.Infrastructure.UI.DataContexts;
|
||||||
using StructureHelper.Services.ResultViewers;
|
using StructureHelper.Services.ResultViewers;
|
||||||
|
using StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews.ForceResultLogic;
|
||||||
using StructureHelper.Windows.Forces;
|
using StructureHelper.Windows.Forces;
|
||||||
using StructureHelper.Windows.Graphs;
|
using StructureHelper.Windows.Graphs;
|
||||||
using StructureHelper.Windows.ViewModels.Errors;
|
using StructureHelper.Windows.ViewModels.Errors;
|
||||||
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
using StructureHelperCommon.Infrastructures.Interfaces;
|
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||||
using StructureHelperCommon.Models;
|
using StructureHelperCommon.Models;
|
||||||
|
using StructureHelperCommon.Models.Calculators;
|
||||||
|
using StructureHelperCommon.Models.Forces;
|
||||||
using StructureHelperCommon.Models.Parameters;
|
using StructureHelperCommon.Models.Parameters;
|
||||||
using StructureHelperCommon.Models.Shapes;
|
using StructureHelperCommon.Models.Shapes;
|
||||||
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
||||||
@@ -17,45 +23,43 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
//Copyright (c) 2023 Redikultsev Evgeny, Ekaterinburg, Russia
|
||||||
|
//All rights reserved.
|
||||||
|
|
||||||
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
||||||
{
|
{
|
||||||
public class ShowValuePointDiagramLogic : ILongProcessLogic
|
public class ShowValuePointDiagramLogic //: ILongProcessLogic
|
||||||
{
|
{
|
||||||
private ArrayParameter<double> arrayParameter;
|
private ArrayParameter<double> arrayParameter;
|
||||||
private IEnumerable<IForcesTupleResult> tupleList;
|
private IValuePointDiagramLogic pointDiagramLogic;
|
||||||
private IEnumerable<INdmPrimitive> ndmPrimitives;
|
|
||||||
private List<IForcesTupleResult> validTupleList;
|
|
||||||
private List<(PrimitiveBase PrimitiveBase, List<NamedValue<IPoint2D>>)> valuePoints;
|
|
||||||
private List<IResultFunc> resultFuncList;
|
|
||||||
|
|
||||||
|
public IEnumerable<IForcesTupleResult> TupleList { get; set; }
|
||||||
public ForceCalculator Calculator { get; set; }
|
public ForceCalculator Calculator { get; set; }
|
||||||
public PointPrimitiveLogic PrimitiveLogic { get; set; }
|
public PointPrimitiveLogic PrimitiveLogic { get; set; }
|
||||||
public ValueDelegatesLogic ValueDelegatesLogic { get; set; }
|
public ValueDelegatesLogic ValueDelegatesLogic { get; set; }
|
||||||
|
|
||||||
public int StepCount => throw new NotImplementedException();
|
//public int StepCount => throw new NotImplementedException();
|
||||||
|
|
||||||
public Action<int> SetProgress { get; set; }
|
//public Action<int> SetProgress { get; set; }
|
||||||
public bool Result { get; set; }
|
//public bool Result { get; set; }
|
||||||
public IShiftTraceLogger? TraceLogger { get; set; }
|
//public IShiftTraceLogger? TraceLogger { get; set; }
|
||||||
public ShowValuePointDiagramLogic(IEnumerable<IForcesTupleResult> tupleList, IEnumerable<INdmPrimitive> ndmPrimitives)
|
public ShowValuePointDiagramLogic(IValuePointDiagramLogic pointDiagramLogic)
|
||||||
{
|
{
|
||||||
this.tupleList = tupleList;
|
this.pointDiagramLogic = pointDiagramLogic;
|
||||||
this.ndmPrimitives = ndmPrimitives;
|
|
||||||
validTupleList = this.tupleList.Where(x => x.IsValid == true).ToList();
|
|
||||||
valuePoints = new List<(PrimitiveBase PrimitiveBase, List<NamedValue<IPoint2D>>)>();
|
|
||||||
foreach (var item in PrimitiveLogic.Collection.CollectionItems)
|
|
||||||
{
|
|
||||||
var pointsCount = item.Item.ValuePoints.SelectedCount;
|
|
||||||
if (pointsCount > 0)
|
|
||||||
{
|
|
||||||
var points = item.Item.ValuePoints.SelectedItems.ToList();
|
|
||||||
var primitive = item.Item.PrimitiveBase;
|
|
||||||
valuePoints.Add((primitive, points));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
public ShowValuePointDiagramLogic() : this(new ValuePointDiagramLogic())
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
public void ShowWindow()
|
public void ShowWindow()
|
||||||
{
|
{
|
||||||
|
var result = GetResult();
|
||||||
|
if (result.IsValid != true)
|
||||||
|
{
|
||||||
|
SafetyProcessor.ShowMessage(ErrorStrings.DataIsInCorrect, result.Description);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
arrayParameter = result.Value;
|
||||||
SafetyProcessor.RunSafeProcess(() =>
|
SafetyProcessor.RunSafeProcess(() =>
|
||||||
{
|
{
|
||||||
var series = new Series(arrayParameter)
|
var series = new Series(arrayParameter)
|
||||||
@@ -71,32 +75,14 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
|
|||||||
}, ErrorStrings.ErrorDuring("building chart"));
|
}, ErrorStrings.ErrorDuring("building chart"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void WorkerDoWork(object sender, DoWorkEventArgs e)
|
private GenericResult<ArrayParameter<double>> GetResult()
|
||||||
{
|
{
|
||||||
Show();
|
pointDiagramLogic.TupleList = TupleList;
|
||||||
Result = true;
|
pointDiagramLogic.PrimitiveLogic = PrimitiveLogic;
|
||||||
}
|
pointDiagramLogic.Calculator = Calculator;
|
||||||
|
pointDiagramLogic.ValueDelegatesLogic = ValueDelegatesLogic;
|
||||||
public void WorkerProgressChanged(object sender, ProgressChangedEventArgs e)
|
var results = pointDiagramLogic.GetArrayParameter();
|
||||||
{
|
return results;
|
||||||
//Nothing to do
|
|
||||||
}
|
|
||||||
|
|
||||||
public void WorkerRunWorkCompleted(object sender, RunWorkerCompletedEventArgs e)
|
|
||||||
{
|
|
||||||
//Nothing to do
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Show()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<string> GetColumnNames()
|
|
||||||
{
|
|
||||||
var columnNames = LabelsFactory.GetCommonLabels();
|
|
||||||
|
|
||||||
return columnNames;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,173 @@
|
|||||||
|
using LoaderCalculator.Data.Ndms;
|
||||||
|
using StructureHelper.Infrastructure.UI.DataContexts;
|
||||||
|
using StructureHelper.Services.ResultViewers;
|
||||||
|
using StructureHelper.Windows.Forces;
|
||||||
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
|
using StructureHelperCommon.Models.Calculators;
|
||||||
|
using StructureHelperCommon.Models.Parameters;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Primitives;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Media;
|
||||||
|
|
||||||
|
namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews.ForceResultLogic
|
||||||
|
{
|
||||||
|
public class ValuePointDiagramLogic : IValuePointDiagramLogic
|
||||||
|
{
|
||||||
|
private ArrayParameter<double> arrayParameter;
|
||||||
|
private List<(INamedAreaPoint areaPoint, INdmPrimitive ndmPrimitive)> pointCollection;
|
||||||
|
private List<IForcesTupleResult> validTuplesList;
|
||||||
|
private ArrayParameter<double> arrayOfValuesByPoint;
|
||||||
|
private IEnumerable<ForceResultFunc> selectedDelegates;
|
||||||
|
private string exceptionMessage;
|
||||||
|
|
||||||
|
public IEnumerable<IForcesTupleResult> TupleList { get; set; }
|
||||||
|
public ForceCalculator Calculator { get; set; }
|
||||||
|
public PointPrimitiveLogic PrimitiveLogic { get; set; }
|
||||||
|
public ValueDelegatesLogic ValueDelegatesLogic { get; set; }
|
||||||
|
|
||||||
|
public GenericResult<ArrayParameter<double>> GetArrayParameter()
|
||||||
|
{
|
||||||
|
SetParameters();
|
||||||
|
var checkResult = CheckParameters();
|
||||||
|
if (checkResult != true)
|
||||||
|
{
|
||||||
|
return GetFalseResult();
|
||||||
|
}
|
||||||
|
PrepareArray();
|
||||||
|
return GetValidResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
private GenericResult<ArrayParameter<double>> GetValidResult()
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
foreach (var tuple in validTuplesList)
|
||||||
|
{
|
||||||
|
ProcessPointByTuple(tuple, i);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
arrayParameter.AddArray(arrayOfValuesByPoint);
|
||||||
|
return new GenericResult<ArrayParameter<double>>()
|
||||||
|
{
|
||||||
|
IsValid = true,
|
||||||
|
Value = arrayParameter
|
||||||
|
};
|
||||||
|
}
|
||||||
|
private GenericResult<ArrayParameter<double>> GetFalseResult()
|
||||||
|
{
|
||||||
|
return new GenericResult<ArrayParameter<double>>()
|
||||||
|
{
|
||||||
|
IsValid = false,
|
||||||
|
Description = exceptionMessage
|
||||||
|
};
|
||||||
|
}
|
||||||
|
private void SetParameters()
|
||||||
|
{
|
||||||
|
GetPointCollection();
|
||||||
|
selectedDelegates = ValueDelegatesLogic.ResultFuncs.SelectedItems;
|
||||||
|
validTuplesList = TupleList
|
||||||
|
.Where(x => x.IsValid == true)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
private bool CheckParameters()
|
||||||
|
{
|
||||||
|
var result = true;
|
||||||
|
exceptionMessage = ErrorStrings.DataIsInCorrect;
|
||||||
|
if (pointCollection.Any() == false)
|
||||||
|
{
|
||||||
|
exceptionMessage += ", point collection is null";
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
if (selectedDelegates.Any() == false)
|
||||||
|
{
|
||||||
|
exceptionMessage += ", value expression collection is null";
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
if (validTuplesList.Any() == false)
|
||||||
|
{
|
||||||
|
exceptionMessage += ", force list is empty";
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
private void GetPointCollection()
|
||||||
|
{
|
||||||
|
pointCollection = new();
|
||||||
|
foreach (var primitiveValuePoint in PrimitiveLogic.Collection.CollectionItems)
|
||||||
|
{
|
||||||
|
foreach (var selectedPoint in primitiveValuePoint.Item.ValuePoints.SelectedItems)
|
||||||
|
{
|
||||||
|
var newPoint = (selectedPoint, primitiveValuePoint.Item.PrimitiveBase.GetNdmPrimitive());
|
||||||
|
pointCollection.Add(newPoint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void ProcessPointByTuple(IForcesTupleResult tuple, int i)
|
||||||
|
{
|
||||||
|
var values = new List<double>();
|
||||||
|
var strainMatrix = tuple.LoaderResults.ForceStrainPair.StrainMatrix;
|
||||||
|
|
||||||
|
foreach (var valuePoint in pointCollection)
|
||||||
|
{
|
||||||
|
var ndm = GetMockNdm(valuePoint, tuple);
|
||||||
|
|
||||||
|
foreach (var valDelegate in selectedDelegates)
|
||||||
|
{
|
||||||
|
double val = valDelegate.ResultFunction.Invoke(strainMatrix, ndm) * valDelegate.UnitFactor;
|
||||||
|
values.Add(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arrayOfValuesByPoint.AddRow(i, values);
|
||||||
|
}
|
||||||
|
private void PrepareArray()
|
||||||
|
{
|
||||||
|
var factory = new DiagramFactory()
|
||||||
|
{
|
||||||
|
TupleList = validTuplesList,
|
||||||
|
//SetProgress = SetProgress,
|
||||||
|
};
|
||||||
|
arrayParameter = factory.GetCommonArray();
|
||||||
|
|
||||||
|
var labels = GetValueLabels(selectedDelegates);
|
||||||
|
arrayOfValuesByPoint = new ArrayParameter<double>(validTuplesList.Count(), labels);
|
||||||
|
}
|
||||||
|
private INdm GetMockNdm((INamedAreaPoint areaPoint, INdmPrimitive ndmPrimitive) valuePoint, IForcesTupleResult tuple)
|
||||||
|
{
|
||||||
|
var limitState = tuple.DesignForceTuple.LimitState;
|
||||||
|
var calcTerm = tuple.DesignForceTuple.CalcTerm;
|
||||||
|
var material = valuePoint.ndmPrimitive.HeadMaterial.GetLoaderMaterial(limitState, calcTerm);
|
||||||
|
var userPrestrain = valuePoint.ndmPrimitive.UsersPrestrain;
|
||||||
|
var autoPrestrain = valuePoint.ndmPrimitive.AutoPrestrain;
|
||||||
|
var ndm = new Ndm()
|
||||||
|
{
|
||||||
|
Area = valuePoint.areaPoint.Area,
|
||||||
|
CenterX = valuePoint.areaPoint.Point.X,
|
||||||
|
CenterY = valuePoint.areaPoint.Point.Y,
|
||||||
|
Material = material,
|
||||||
|
};
|
||||||
|
ndm.Prestrain = (userPrestrain.Mx + autoPrestrain.Mx) * valuePoint.areaPoint.Point.Y
|
||||||
|
+ (userPrestrain.My + autoPrestrain.My) * valuePoint.areaPoint.Point.X
|
||||||
|
+ userPrestrain.Nz + autoPrestrain.Nz;
|
||||||
|
return ndm;
|
||||||
|
}
|
||||||
|
private List<string> GetValueLabels(IEnumerable<ForceResultFunc> selectedDelegates)
|
||||||
|
{
|
||||||
|
List<string> strings = new();
|
||||||
|
foreach (var valuePoint in pointCollection)
|
||||||
|
{
|
||||||
|
foreach (var deleg in selectedDelegates)
|
||||||
|
{
|
||||||
|
string s = valuePoint.ndmPrimitive.Name;
|
||||||
|
s += "_" + valuePoint.areaPoint.Name;
|
||||||
|
s += "_" + deleg.Name + ", " + deleg.UnitName;
|
||||||
|
strings.Add(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return strings;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
xmlns:local="clr-namespace:StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews"
|
xmlns:local="clr-namespace:StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews"
|
||||||
d:DataContext="{d:DesignInstance local:ForcesResultsViewModel}"
|
d:DataContext="{d:DesignInstance local:ForcesResultsViewModel}"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="Calculation Results" Height="350" Width="850" MinHeight="300" MinWidth="400" WindowStartupLocation="CenterScreen">
|
Title="Calculation Results" Height="350" Width="850" MinHeight="300" MinWidth="400" WindowStartupLocation="CenterScreen" ShowInTaskbar="False">
|
||||||
<DockPanel>
|
<DockPanel>
|
||||||
<ToolBarTray DockPanel.Dock="Top">
|
<ToolBarTray DockPanel.Dock="Top">
|
||||||
<ToolBar>
|
<ToolBar>
|
||||||
@@ -25,7 +25,11 @@
|
|||||||
<Button Style="{StaticResource ToolButton}" Command="{Binding ShowInteractionDiagramCommand}" ToolTip="Show interaction diagram">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding ShowInteractionDiagramCommand}" ToolTip="Show interaction diagram">
|
||||||
<Image Source="/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/32px_graph_1.png"/>
|
<Image Source="/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/32px_graph_1.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button Style="{DynamicResource ToolButton}" Command="{Binding ShowIsoFieldCommand}" ToolTip="Show isofield results">
|
||||||
|
<Viewbox>
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource IsoFieldResult}"/>
|
||||||
|
</Viewbox>
|
||||||
|
</Button>
|
||||||
</ToolBar>
|
</ToolBar>
|
||||||
</ToolBarTray>
|
</ToolBarTray>
|
||||||
<Grid>
|
<Grid>
|
||||||
@@ -59,13 +63,11 @@
|
|||||||
</DataGrid.Columns>
|
</DataGrid.Columns>
|
||||||
</DataGrid>
|
</DataGrid>
|
||||||
<StackPanel Grid.Column="1">
|
<StackPanel Grid.Column="1">
|
||||||
<Button Margin="3" Content="Graphic" ToolTip="Show graphic results" Command="{Binding ShowIsoFieldCommand}"/>
|
|
||||||
<Button Margin="3" Content="CrcDiagrams" ToolTip="Show diagrams for cracked section" Command="{Binding ShowCrackGraphsCommand}"/>
|
<Button Margin="3" Content="CrcDiagrams" ToolTip="Show diagrams for cracked section" Command="{Binding ShowCrackGraphsCommand}"/>
|
||||||
<Button Margin="3" Content="Export" ToolTip="Export results to *.csv" Command="{Binding ExportToCSVCommand}"/>
|
<Button Margin="3" Content="Export" ToolTip="Export results to *.csv" Command="{Binding ExportToCSVCommand}"/>
|
||||||
<Button Margin="3" Content="Set Prestrain" ToolTip="Set strains as auto prestrain" Command="{Binding SetPrestrainCommand}"/>
|
<Button Margin="3" Content="Set Prestrain" ToolTip="Set strains as auto prestrain" Command="{Binding SetPrestrainCommand}"/>
|
||||||
<Button Margin="3" Content="Anchorage" ToolTip="Set strains as auto prestrain" Command="{Binding ShowAnchorageCommand}"/>
|
<Button Margin="3" Content="Anchorage" ToolTip="Set strains as auto prestrain" Command="{Binding ShowAnchorageCommand}"/>
|
||||||
<Button Margin="3" Content="Geometry" ToolTip="Show Geometry Properties" Command="{Binding ShowGeometryResultCommand}"/>
|
<Button Margin="3" Content="Geometry" ToolTip="Show Geometry Properties" Command="{Binding ShowGeometryResultCommand}"/>
|
||||||
<Button Margin="3" Content="Acrc" ToolTip="Show crack width" Command="{Binding ShowCrackWidthResultCommand}"/>
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
private ShowProgressLogic showProgressLogic;
|
private ShowProgressLogic showProgressLogic;
|
||||||
private InteractionDiagramLogic interactionDiagramLogic;
|
private InteractionDiagramLogic interactionDiagramLogic;
|
||||||
private static readonly ShowCrackResultLogic showCrackResultLogic = new();
|
private static readonly ShowCrackResultLogic showCrackResultLogic = new();
|
||||||
private static readonly ShowCrackWidthLogic showCrackWidthLogic = new();
|
//private static readonly ShowCrackWidthLogic showCrackWidthLogic = new();
|
||||||
private IForcesResults forcesResults;
|
private IForcesResults forcesResults;
|
||||||
private IEnumerable<INdmPrimitive> ndmPrimitives;
|
private IEnumerable<INdmPrimitive> ndmPrimitives;
|
||||||
private IEnumerable<INdmPrimitive> selectedNdmPrimitives;
|
private IEnumerable<INdmPrimitive> selectedNdmPrimitives;
|
||||||
@@ -152,12 +152,12 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
{
|
{
|
||||||
get => showGraphsCommand ??= new RelayCommand(o =>
|
get => showGraphsCommand ??= new RelayCommand(o =>
|
||||||
{
|
{
|
||||||
InterpolateTuplesViewModel interploateTuplesViewModel;
|
InterpolateTuplesViewModel interpolateTuplesViewModel;
|
||||||
InterpolateTuplesView wndTuples;
|
InterpolateTuplesView wndTuples;
|
||||||
ShowInterpolationWindow(out interploateTuplesViewModel, out wndTuples);
|
ShowInterpolationWindow(out interpolateTuplesViewModel, out wndTuples);
|
||||||
if (wndTuples.DialogResult != true) return;
|
if (wndTuples.DialogResult != true) return;
|
||||||
|
|
||||||
var interpolationLogic = new InterpolationProgressLogic(forceCalculator, interploateTuplesViewModel.ForceInterpolationViewModel.Result);
|
var interpolationLogic = new InterpolationProgressLogic(forceCalculator, interpolateTuplesViewModel.ForceInterpolationViewModel.Result);
|
||||||
showProgressLogic = new(interpolationLogic)
|
showProgressLogic = new(interpolationLogic)
|
||||||
{
|
{
|
||||||
WindowTitle = "Interpolate forces"
|
WindowTitle = "Interpolate forces"
|
||||||
@@ -225,22 +225,22 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
showCrackResultLogic.Show(SelectedResult.DesignForceTuple.Clone() as IDesignForceTuple);
|
showCrackResultLogic.Show(SelectedResult.DesignForceTuple.Clone() as IDesignForceTuple);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ICommand ShowCrackWidthResultCommand
|
//public ICommand ShowCrackWidthResultCommand
|
||||||
{
|
//{
|
||||||
get => showCrackWidthResult ??= new RelayCommand(o =>
|
// get => showCrackWidthResult ??= new RelayCommand(o =>
|
||||||
{
|
// {
|
||||||
SafetyProcessor.RunSafeProcess(ShowCrackWidthResult);
|
// SafetyProcessor.RunSafeProcess(ShowCrackWidthResult);
|
||||||
}, o => SelectedResult != null && SelectedResult.IsValid);
|
// }, o => SelectedResult != null && SelectedResult.IsValid);
|
||||||
}
|
//}
|
||||||
|
|
||||||
private void ShowCrackWidthResult()
|
//private void ShowCrackWidthResult()
|
||||||
{
|
//{
|
||||||
showCrackWidthLogic.LimitState = SelectedResult.DesignForceTuple.LimitState;
|
// showCrackWidthLogic.LimitState = SelectedResult.DesignForceTuple.LimitState;
|
||||||
showCrackWidthLogic.CalcTerm = SelectedResult.DesignForceTuple.CalcTerm;
|
// showCrackWidthLogic.CalcTerm = SelectedResult.DesignForceTuple.CalcTerm;
|
||||||
showCrackWidthLogic.ForceTuple = SelectedResult.DesignForceTuple.ForceTuple;
|
// showCrackWidthLogic.ForceTuple = SelectedResult.DesignForceTuple.ForceTuple;
|
||||||
showCrackWidthLogic.ndmPrimitives = ndmPrimitives.ToList();
|
// showCrackWidthLogic.ndmPrimitives = ndmPrimitives.ToList();
|
||||||
showCrackWidthLogic.Show();
|
// showCrackWidthLogic.Show();
|
||||||
}
|
//}
|
||||||
public ICommand InterpolateCommand
|
public ICommand InterpolateCommand
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -285,31 +285,15 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
{
|
{
|
||||||
throw new StructureHelperException(ErrorStrings.NullReference + ": Nothing is selected");
|
throw new StructureHelperException(ErrorStrings.NullReference + ": Nothing is selected");
|
||||||
}
|
}
|
||||||
var tuple = SelectedResult.DesignForceTuple ?? throw new StructureHelperException(ErrorStrings.NullReference + ": Design force combination");
|
var logic = new InterpolateValuePointsLogic()
|
||||||
var inputData = new ValuePointsInterpolationInputData()
|
|
||||||
{
|
{
|
||||||
FinishDesignForce = tuple.Clone() as IDesignForceTuple,
|
SelectedResult = SelectedResult,
|
||||||
LimitState = tuple.LimitState,
|
ForceCalculator = forceCalculator,
|
||||||
CalcTerm = tuple.CalcTerm,
|
NdmPrimitives = ndmPrimitives,
|
||||||
|
ProgressLogic = progressLogic,
|
||||||
|
ShowProgressLogic = showProgressLogic
|
||||||
};
|
};
|
||||||
inputData.PrimitiveBases.AddRange(PrimitiveOperations.ConvertNdmPrimitivesToPrimitiveBase(ndmPrimitives));
|
logic.InterpolateValuePoints();
|
||||||
var viewModel = new ValuePointsInterpolateViewModel(inputData);
|
|
||||||
var wnd = new ValuePointsInterpolateView(viewModel);
|
|
||||||
wnd.ShowDialog();
|
|
||||||
if (wnd.DialogResult != true) { return; }
|
|
||||||
var interpolationLogic = new InterpolationProgressLogic(forceCalculator, viewModel.ForceInterpolationViewModel.Result);
|
|
||||||
ShowValuePointDiagramLogic pointGraphLogic = new(ForcesResults.ForcesResultList, ndmPrimitives)
|
|
||||||
{
|
|
||||||
Calculator = interpolationLogic.InterpolateCalculator,
|
|
||||||
PrimitiveLogic = viewModel.PrimitiveLogic,
|
|
||||||
ValueDelegatesLogic = viewModel.ValueDelegatesLogic
|
|
||||||
};
|
|
||||||
progressLogic = interpolationLogic;
|
|
||||||
showProgressLogic = new(interpolationLogic)
|
|
||||||
{
|
|
||||||
ShowResult = pointGraphLogic.ShowWindow
|
|
||||||
};
|
|
||||||
showProgressLogic.Show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ShowInterpolationWindow(out InterpolateTuplesViewModel interploateTuplesViewModel, out InterpolateTuplesView wndTuples)
|
private void ShowInterpolationWindow(out InterpolateTuplesViewModel interploateTuplesViewModel, out InterpolateTuplesView wndTuples)
|
||||||
@@ -432,7 +416,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
IStrainMatrix strainMatrix = SelectedResult.LoaderResults.ForceStrainPair.StrainMatrix;
|
IStrainMatrix strainMatrix = SelectedResult.LoaderResults.ForceStrainPair.StrainMatrix;
|
||||||
var primitiveSets = ShowIsoFieldResult.GetPrimitiveSets(strainMatrix, ndms, ResultFuncFactory.GetResultFuncs());
|
var primitiveSets = ShowIsoFieldResult.GetPrimitiveSets(strainMatrix, ndms, ForceResultFuncFactory.GetResultFuncs());
|
||||||
isoFieldReport = new IsoFieldReport(primitiveSets);
|
isoFieldReport = new IsoFieldReport(primitiveSets);
|
||||||
isoFieldReport.Show();
|
isoFieldReport.Show();
|
||||||
}
|
}
|
||||||
@@ -445,7 +429,6 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
};
|
};
|
||||||
new ErrorMessage(vm).ShowDialog();
|
new ErrorMessage(vm).ShowDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
private void GetNdms()
|
private void GetNdms()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
{
|
{
|
||||||
const string ForceUnitString = "kN";
|
const string ForceUnitString = "kN";
|
||||||
const string MomentUnitString = "kNm";
|
const string MomentUnitString = "kNm";
|
||||||
|
static IConvertUnitLogic operationLogic = new ConvertUnitLogic();
|
||||||
|
static IGetUnitLogic unitLogic = new GetUnitLogic();
|
||||||
public SurroundData SurroundData
|
public SurroundData SurroundData
|
||||||
{
|
{
|
||||||
get => surroundData; set
|
get => surroundData; set
|
||||||
@@ -47,8 +48,8 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
OnPropertyChanged(nameof(ZUnitLabel));
|
OnPropertyChanged(nameof(ZUnitLabel));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly IUnit unitForce = CommonOperation.GetUnit(UnitTypes.Force, ForceUnitString);
|
private static IUnit unitForce = unitLogic.GetUnit(UnitTypes.Force, ForceUnitString);
|
||||||
private static readonly IUnit unitMoment = CommonOperation.GetUnit(UnitTypes.Moment, MomentUnitString);
|
private static IUnit unitMoment = unitLogic.GetUnit(UnitTypes.Moment, MomentUnitString);
|
||||||
private SurroundData surroundData;
|
private SurroundData surroundData;
|
||||||
|
|
||||||
public IValueConverter ForceConverter { get => new Force(); }
|
public IValueConverter ForceConverter { get => new Force(); }
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
xmlns:local="clr-namespace:StructureHelper.Windows.CalculationWindows.ProgressViews"
|
xmlns:local="clr-namespace:StructureHelper.Windows.CalculationWindows.ProgressViews"
|
||||||
d:DataContext="{d:DesignInstance local:TraceDocumentVM}"
|
d:DataContext="{d:DesignInstance local:TraceDocumentVM}"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="Trace Document Viewer" Height="450" Width="800" MinHeight="400" MinWidth="600" WindowStartupLocation="CenterScreen">
|
Title="Trace Document Viewer" Height="450" Width="800" MinHeight="400" MinWidth="600" WindowStartupLocation="CenterScreen" ShowInTaskbar="False">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using StructureHelper.Windows.ViewModels;
|
using StructureHelper.Windows.ViewModels;
|
||||||
using StructureHelperCommon.Models.Parameters;
|
using StructureHelperCommon.Models.Parameters;
|
||||||
using StructureHelperCommon.Models.Shapes;
|
using StructureHelperCommon.Models.Shapes;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Primitives;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -13,13 +14,13 @@ namespace StructureHelper.Windows.Forces
|
|||||||
public class PrimitiveValuePoints
|
public class PrimitiveValuePoints
|
||||||
{
|
{
|
||||||
public PrimitiveBase PrimitiveBase {get;set;}
|
public PrimitiveBase PrimitiveBase {get;set;}
|
||||||
public SelectItemsVM<NamedValue<IPoint2D>> ValuePoints { get; set; }
|
public SelectItemsVM<INamedAreaPoint> ValuePoints { get; set; }
|
||||||
|
|
||||||
public PrimitiveValuePoints(PrimitiveBase primitiveBase)
|
public PrimitiveValuePoints(PrimitiveBase primitiveBase)
|
||||||
{
|
{
|
||||||
var ndmPrimitive = primitiveBase.GetNdmPrimitive();
|
var ndmPrimitive = primitiveBase.GetNdmPrimitive();
|
||||||
var pointCollection = ndmPrimitive.GetValuePoints();
|
var pointCollection = ndmPrimitive.GetValuePoints();
|
||||||
ValuePoints = new SelectItemsVM<NamedValue<IPoint2D>>(pointCollection)
|
ValuePoints = new SelectItemsVM<INamedAreaPoint>(pointCollection)
|
||||||
{
|
{
|
||||||
ShowButtons = false
|
ShowButtons = false
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -11,14 +11,13 @@ namespace StructureHelper.Windows.Forces
|
|||||||
{
|
{
|
||||||
public class ValueDelegatesLogic : ViewModelBase
|
public class ValueDelegatesLogic : ViewModelBase
|
||||||
{
|
{
|
||||||
private readonly List<IResultFunc> resultFuncs;
|
private readonly List<ForceResultFunc> resultFuncs;
|
||||||
public SelectItemsVM<IResultFunc> ResultFuncs { get; }
|
public SelectItemsVM<ForceResultFunc> ResultFuncs { get; }
|
||||||
public ValueDelegatesLogic()
|
public ValueDelegatesLogic()
|
||||||
{
|
{
|
||||||
resultFuncs = new List<IResultFunc>();
|
resultFuncs = new List<ForceResultFunc>();
|
||||||
resultFuncs.AddRange(ResultFuncFactory.GetResultFuncs(FuncsTypes.Strain));
|
resultFuncs.AddRange(ForceResultFuncFactory.GetResultFuncs(FuncsTypes.Full));
|
||||||
resultFuncs.AddRange(ResultFuncFactory.GetResultFuncs(FuncsTypes.Stress));
|
ResultFuncs = new SelectItemsVM<ForceResultFunc>(resultFuncs)
|
||||||
ResultFuncs = new SelectItemsVM<IResultFunc>(resultFuncs)
|
|
||||||
{
|
{
|
||||||
ShowButtons = true
|
ShowButtons = true
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
xmlns:local="clr-namespace:StructureHelper.Windows.Forces"
|
xmlns:local="clr-namespace:StructureHelper.Windows.Forces"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
d:DataContext="{d:DesignInstance local:ValuePointsInterpolateViewModel}"
|
d:DataContext="{d:DesignInstance local:ValuePointsInterpolateViewModel}"
|
||||||
Title="Value Poits Interpolation" Height="250" Width="460" MinHeight="250" MinWidth="460" MaxHeight="450" MaxWidth="460" WindowStartupLocation="CenterScreen">
|
Title="Value Points Interpolation" Height="250" Width="460" MinHeight="250" MinWidth="460" MaxHeight="450" MaxWidth="460" WindowStartupLocation="CenterScreen">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition/>
|
<RowDefinition/>
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
<Expander.Header>
|
<Expander.Header>
|
||||||
<ContentControl ContentTemplate="{StaticResource ResourceKey=ColoredItemTemplate}" Content="{Binding Item.PrimitiveBase}"/>
|
<ContentControl ContentTemplate="{StaticResource ResourceKey=ColoredItemTemplate}" Content="{Binding Item.PrimitiveBase}"/>
|
||||||
</Expander.Header>
|
</Expander.Header>
|
||||||
<ContentControl ContentTemplate="{StaticResource ResourceKey=SelectItems}" Content="{Binding Item.ValuePoints}"/>
|
<ContentControl ContentTemplate="{StaticResource ResourceKey=SelectItems}" Content="{Binding Item.ValuePoints}" Width="400"/>
|
||||||
</Expander>
|
</Expander>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListBox.ItemTemplate>
|
</ListBox.ItemTemplate>
|
||||||
|
|||||||
@@ -1,16 +1,4 @@
|
|||||||
using System;
|
using System.Windows;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Data;
|
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
|
|
||||||
namespace StructureHelper.Windows.Forces
|
namespace StructureHelper.Windows.Forces
|
||||||
{
|
{
|
||||||
@@ -22,10 +10,11 @@ namespace StructureHelper.Windows.Forces
|
|||||||
private ValuePointsInterpolateViewModel viewModel;
|
private ValuePointsInterpolateViewModel viewModel;
|
||||||
public ValuePointsInterpolateView(ValuePointsInterpolateViewModel viewModel)
|
public ValuePointsInterpolateView(ValuePointsInterpolateViewModel viewModel)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
|
||||||
this.viewModel = viewModel;
|
this.viewModel = viewModel;
|
||||||
this.viewModel.ParentWindow = this;
|
this.viewModel.ParentWindow = this;
|
||||||
this.DataContext = this.viewModel;
|
this.DataContext = this.viewModel;
|
||||||
|
InitializeComponent();
|
||||||
|
InterpolationControl.Properties = viewModel.ForceInterpolationViewModel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using StructureHelper.Windows.ViewModels;
|
using StructureHelper.Windows.ViewModels;
|
||||||
|
using StructureHelper.Windows.ViewModels.Materials;
|
||||||
using StructureHelperCommon.Models.Forces;
|
using StructureHelperCommon.Models.Forces;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|||||||
@@ -18,8 +18,9 @@
|
|||||||
</ToolBarTray>-->
|
</ToolBarTray>-->
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="250"/>
|
<ColumnDefinition MinWidth="250"/>
|
||||||
<ColumnDefinition/>
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="5*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
@@ -31,7 +32,7 @@
|
|||||||
<ListBox.ItemTemplate>
|
<ListBox.ItemTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Expander Header="{Binding Name}" IsExpanded="True" Background="{Binding Color}">
|
<Expander Header="{Binding Name}" IsExpanded="True" Background="{Binding Color}">
|
||||||
<Grid >
|
<Grid HorizontalAlignment="Stretch">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="70"/>
|
<RowDefinition Height="70"/>
|
||||||
<RowDefinition/>
|
<RowDefinition/>
|
||||||
@@ -81,7 +82,8 @@
|
|||||||
<Button Margin="3" Content="Draw Lines" ToolTip="Draw Lines" Command="{Binding RedrawLinesCommand}"/>
|
<Button Margin="3" Content="Draw Lines" ToolTip="Draw Lines" Command="{Binding RedrawLinesCommand}"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
<lvc:CartesianChart Name="MainChart" Grid.Column="1" Series="{Binding SeriesCollection}" LegendLocation="Bottom" Zoom="Xy">
|
<GridSplitter Grid.Column="1" Width="3" VerticalAlignment="Stretch" HorizontalAlignment="Center" ShowsPreview="False"/>
|
||||||
|
<lvc:CartesianChart Name="MainChart" Grid.Column="2" Series="{Binding SeriesCollection}" LegendLocation="Bottom" Zoom="Xy">
|
||||||
<lvc:CartesianChart.AxisY>
|
<lvc:CartesianChart.AxisY>
|
||||||
<lvc:Axis Title="y-value"></lvc:Axis>
|
<lvc:Axis Title="y-value"></lvc:Axis>
|
||||||
</lvc:CartesianChart.AxisY>
|
</lvc:CartesianChart.AxisY>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using LoaderCalculator;
|
using LoaderCalculator;
|
||||||
|
using LoaderCalculator.Data.Materials.MaterialBuilders;
|
||||||
using LoaderCalculator.Data.Matrix;
|
using LoaderCalculator.Data.Matrix;
|
||||||
using LoaderCalculator.Data.Ndms;
|
using LoaderCalculator.Data.Ndms;
|
||||||
using LoaderCalculator.Data.ResultData;
|
using LoaderCalculator.Data.ResultData;
|
||||||
@@ -9,6 +10,7 @@ using StructureHelper.Services.Primitives;
|
|||||||
using StructureHelper.UnitSystem;
|
using StructureHelper.UnitSystem;
|
||||||
using StructureHelper.UnitSystem.Systems;
|
using StructureHelper.UnitSystem.Systems;
|
||||||
using StructureHelperCommon.Infrastructures.Enums;
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
|
using StructureHelperCommon.Models;
|
||||||
using StructureHelperCommon.Services.Units;
|
using StructureHelperCommon.Services.Units;
|
||||||
using StructureHelperLogics.Models.Calculations.CalculationProperties;
|
using StructureHelperLogics.Models.Calculations.CalculationProperties;
|
||||||
using StructureHelperLogics.Models.CrossSections;
|
using StructureHelperLogics.Models.CrossSections;
|
||||||
@@ -26,6 +28,8 @@ namespace StructureHelper.Windows.MainWindow
|
|||||||
{
|
{
|
||||||
public class CrossSectionModel
|
public class CrossSectionModel
|
||||||
{
|
{
|
||||||
|
private ITriangulatePrimitiveLogic triangulateLogic;
|
||||||
|
|
||||||
public ICrossSection Section { get; private set; }
|
public ICrossSection Section { get; private set; }
|
||||||
private IPrimitiveRepository primitiveRepository;
|
private IPrimitiveRepository primitiveRepository;
|
||||||
public IHeadMaterialRepository HeadMaterialRepository { get; }
|
public IHeadMaterialRepository HeadMaterialRepository { get; }
|
||||||
@@ -52,7 +56,13 @@ namespace StructureHelper.Windows.MainWindow
|
|||||||
public IEnumerable<INdm> GetNdms(ICalculationProperty calculationProperty)
|
public IEnumerable<INdm> GetNdms(ICalculationProperty calculationProperty)
|
||||||
{
|
{
|
||||||
var ndmPrimitives = Section.SectionRepository.Primitives;
|
var ndmPrimitives = Section.SectionRepository.Primitives;
|
||||||
return NdmPrimitivesService.GetNdms(ndmPrimitives, calculationProperty.LimitState, calculationProperty.CalcTerm);
|
triangulateLogic = new TriangulatePrimitiveLogic()
|
||||||
|
{
|
||||||
|
Primitives = ndmPrimitives,
|
||||||
|
LimitState = calculationProperty.LimitState,
|
||||||
|
CalcTerm = calculationProperty.CalcTerm
|
||||||
|
};
|
||||||
|
return triangulateLogic.GetNdms();
|
||||||
////Настройки триангуляции, пока опции могут быть только такие
|
////Настройки триангуляции, пока опции могут быть только такие
|
||||||
//ITriangulationOptions options = new TriangulationOptions { LimiteState = calculationProperty.LimitState, CalcTerm = calculationProperty.CalcTerm };
|
//ITriangulationOptions options = new TriangulationOptions { LimiteState = calculationProperty.LimitState, CalcTerm = calculationProperty.CalcTerm };
|
||||||
|
|
||||||
|
|||||||
@@ -79,7 +79,9 @@
|
|||||||
<ContextMenu x:Key="AnalisesCRUD">
|
<ContextMenu x:Key="AnalisesCRUD">
|
||||||
<MenuItem Header="Run" Command="{Binding Run}">
|
<MenuItem Header="Run" Command="{Binding Run}">
|
||||||
<MenuItem.Icon>
|
<MenuItem.Icon>
|
||||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Run.png" />
|
<Viewbox Width="16" Height="16">
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource CalculatorRun}"/>
|
||||||
|
</Viewbox>
|
||||||
</MenuItem.Icon>
|
</MenuItem.Icon>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<Separator/>
|
<Separator/>
|
||||||
@@ -143,67 +145,79 @@
|
|||||||
Content="Fact" ToolTip="Add Factored Combination"/>
|
Content="Fact" ToolTip="Add Factored Combination"/>
|
||||||
</ToolBar>
|
</ToolBar>
|
||||||
<ToolBar DataContext="{Binding MaterialsLogic}" ToolTip="Materials">
|
<ToolBar DataContext="{Binding MaterialsLogic}" ToolTip="Materials">
|
||||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Concrete}">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Concrete}">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/ConMaterial32.png"/>
|
<Image Source="/Windows/MainWindow/ConMaterial32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Reinforcement}" ToolTip="Add Reinforcement Material">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Reinforcement}" ToolTip="Add Reinforcement Material">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/RFMaterial32.png"/>
|
<Image Source="/Windows/MainWindow/RFMaterial32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Elastic}" ToolTip="Add Elastic Material">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.Elastic}" ToolTip="Add Elastic Material">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/ElasticMaterial32.png"/>
|
<Image Source="/Windows/MainWindow/ElasticMaterial32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.CarbonFiber}" ToolTip="Add Carbon Fiber Material">
|
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.CarbonFiber}" ToolTip="Add Carbon Fiber Material">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/СarbonMaterial32.png"/>
|
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/СarbonMaterial32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.GlassFiber}" ToolTip="Add Glass Fiber Material">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding Add}" CommandParameter="{x:Static enums:MaterialType.GlassFiber}" ToolTip="Add Glass Fiber Material">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/GlassMaterial32.png"/>
|
<Image Source="/Windows/MainWindow/GlassMaterial32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding EditMaterialsCommand}" ToolTip="Show Materials">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding EditMaterialsCommand}" ToolTip="Show Materials">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Materials32.png"/>
|
<Image Source="/Windows/MainWindow/Materials32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
</ToolBar>
|
</ToolBar>
|
||||||
<ToolBar ToolTip="Base Primitives" DataContext="{Binding PrimitiveLogic}">
|
<ToolBar ToolTip="Base Primitives" DataContext="{Binding PrimitiveLogic}">
|
||||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Rectangle}" ToolTip="Add Rectangle Primitive">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Rectangle}" ToolTip="Add Rectangle Primitive">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Rectangle32.png"/>
|
<Image Source="/Windows/MainWindow/Rectangle32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Circle}" ToolTip="Add Circle Primitive">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Circle}" ToolTip="Add Circle Primitive">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Circle32.png"/>
|
<Image Source="/Windows/MainWindow/Circle32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Reinforcement}" ToolTip="Add Rebar Primitive">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Reinforcement}" ToolTip="Add Rebar Primitive">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Rebar32.png"/>
|
<Image Source="/Windows/MainWindow/Rebar32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Point}" ToolTip="Add Point Primitive">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding Add}" CommandParameter="{x:Static enums:PrimitiveType.Point}" ToolTip="Add Point Primitive">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Point32.png"/>
|
<Image Source="/Windows/MainWindow/Point32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
</ToolBar>
|
</ToolBar>
|
||||||
<ToolBar ToolTip="RC Templates">
|
<ToolBar ToolTip="RC Templates">
|
||||||
<Button Command="{Binding AddColumnCase}" ToolTip="Add Rectangle RC Column">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding AddColumnCase}" ToolTip="Add Rectangle RC Column">
|
||||||
<Image Width="32" Height="32" Source="/Windows/MainWindow/RectangleColumn32.png"/>
|
<Image Source="/Windows/MainWindow/RectangleColumn32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding AddRCCircleCase}" ToolTip="Add Circle RC Column">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding AddRCCircleCase}" ToolTip="Add Circle RC Column">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/CircleColumn32.png"/>
|
<Image Source="/Windows/MainWindow/CircleColumn32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding AddBeamCase}" ToolTip="Add RC Beam">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding AddBeamCase}" ToolTip="Add RC Beam">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Beam32.png"/>
|
<Image Source="/Windows/MainWindow/Beam32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding AddSlabCase}" ToolTip="Add RC Slab">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding AddSlabCase}" ToolTip="Add RC Slab">
|
||||||
<Image Width="32" Height="32" Source="/Windows/MainWindow/Slab32.png"/>
|
<Image Source="/Windows/MainWindow/Slab32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
</ToolBar>
|
</ToolBar>
|
||||||
<ToolBar ToolTip="Analises" DataContext="{Binding CalculatorsLogic}">
|
<ToolBar ToolTip="Analises" DataContext="{Binding CalculatorsLogic}">
|
||||||
<Button Command="{Binding Add}" ToolTip="Add Force Calculator">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding Add}" CommandParameter="{x:Static enums:CalculatorTypes.ForceCalculator}" ToolTip="Add Force Calculator">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Calculator32.png"/>
|
<Image Source="/Windows/MainWindow/Calculator32.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding Run}" ToolTip="Run Calculations">
|
<Button Style="{DynamicResource ToolButton}" Command="{Binding Add}" CommandParameter="{x:Static enums:CalculatorTypes.LimitCurveCalculator}" ToolTip="Add Interaction Diagram Calculator">
|
||||||
<Image Style="{StaticResource ButtonImage32}" Source="/Windows/MainWindow/Analysis32.png"/>
|
<Viewbox>
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource DiagramCalculator}"/>
|
||||||
|
</Viewbox>
|
||||||
|
</Button>
|
||||||
|
<Button Style="{DynamicResource ToolButton}" Command="{Binding Add}" CommandParameter="{x:Static enums:CalculatorTypes.CrackCalculator}" ToolTip="Add Crack Calculator">
|
||||||
|
<Viewbox>
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource CrackCalculator}"/>
|
||||||
|
</Viewbox>
|
||||||
|
</Button>
|
||||||
|
<Button Style="{DynamicResource ToolButton}" Command="{Binding Run}" ToolTip="Run Calculations">
|
||||||
|
<Viewbox>
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource CalculatorRun}"/>
|
||||||
|
</Viewbox>
|
||||||
</Button>
|
</Button>
|
||||||
</ToolBar>
|
</ToolBar>
|
||||||
<ToolBar ToolTip="Tools">
|
<ToolBar ToolTip="Tools">
|
||||||
<Button Command="{Binding MovePrimitiveToGravityCenterCommand}" ToolTip="Move All Primitives to Gravity Center">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding MovePrimitiveToGravityCenterCommand}" ToolTip="Move All Primitives to Gravity Center">
|
||||||
<Image Width="32" Height="32" Source="/Windows/MainWindow/MovePrimitivesToCenter.png"/>
|
<Image Source="/Windows/MainWindow/MovePrimitivesToCenter.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
<Button Command="{Binding ShowVisualProperty}" ToolTip="Visual Settings">
|
<Button Style="{StaticResource ToolButton}" Command="{Binding ShowVisualProperty}" ToolTip="Visual Settings">
|
||||||
<Image Width="32" Height="32" Source="/Windows/MainWindow/Tools_Settings.png"/>
|
<Image Source="/Windows/MainWindow/Tools_Settings.png"/>
|
||||||
</Button>
|
</Button>
|
||||||
</ToolBar>
|
</ToolBar>
|
||||||
</ToolBarTray>
|
</ToolBarTray>
|
||||||
@@ -338,7 +352,16 @@
|
|||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="Add Interaction Diagram Calculator" Command="{Binding Add}" CommandParameter="{x:Static enums:CalculatorTypes.LimitCurveCalculator}">
|
<MenuItem Header="Add Interaction Diagram Calculator" Command="{Binding Add}" CommandParameter="{x:Static enums:CalculatorTypes.LimitCurveCalculator}">
|
||||||
<MenuItem.Icon>
|
<MenuItem.Icon>
|
||||||
<Image Width="16" Height="16" Source="/Windows/MainWindow/Calculator32.png" />
|
<Viewbox Width="16" Height="16">
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource DiagramCalculator}"/>
|
||||||
|
</Viewbox>
|
||||||
|
</MenuItem.Icon>
|
||||||
|
</MenuItem>
|
||||||
|
<MenuItem Header="Add Crack Calculator" Command="{Binding Add}" CommandParameter="{x:Static enums:CalculatorTypes.CrackCalculator}">
|
||||||
|
<MenuItem.Icon>
|
||||||
|
<Viewbox Width="16" Height="16">
|
||||||
|
<ContentControl ContentTemplate="{DynamicResource CrackCalculator}"/>
|
||||||
|
</Viewbox>
|
||||||
</MenuItem.Icon>
|
</MenuItem.Icon>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ namespace StructureHelper.Windows.MainWindow
|
|||||||
{
|
{
|
||||||
private ICrossSection section;
|
private ICrossSection section;
|
||||||
private ICrossSectionRepository repository => section.SectionRepository;
|
private ICrossSectionRepository repository => section.SectionRepository;
|
||||||
|
private ITriangulatePrimitiveLogic triangulateLogic;
|
||||||
|
|
||||||
|
|
||||||
public CrossSectionVisualPropertyVM VisualProperty { get; private set; }
|
public CrossSectionVisualPropertyVM VisualProperty { get; private set; }
|
||||||
|
|
||||||
@@ -172,7 +174,13 @@ namespace StructureHelper.Windows.MainWindow
|
|||||||
MovePrimitiveToGravityCenterCommand = new RelayCommand(o =>
|
MovePrimitiveToGravityCenterCommand = new RelayCommand(o =>
|
||||||
{
|
{
|
||||||
if (CheckMaterials() == false) { return;}
|
if (CheckMaterials() == false) { return;}
|
||||||
var ndms = NdmPrimitivesService.GetNdms(repository.Primitives, LimitStates.SLS, CalcTerms.ShortTerm);
|
triangulateLogic = new TriangulatePrimitiveLogic()
|
||||||
|
{
|
||||||
|
Primitives = repository.Primitives,
|
||||||
|
LimitState = LimitStates.SLS,
|
||||||
|
CalcTerm = CalcTerms.ShortTerm
|
||||||
|
};
|
||||||
|
var ndms = triangulateLogic.GetNdms();
|
||||||
var center = GeometryOperations.GetGravityCenter(ndms);
|
var center = GeometryOperations.GetGravityCenter(ndms);
|
||||||
foreach (var item in PrimitiveLogic.Items)
|
foreach (var item in PrimitiveLogic.Items)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ namespace StructureHelper.Windows.UserControls
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class MultiplyDouble : UserControl
|
public partial class MultiplyDouble : UserControl
|
||||||
{
|
{
|
||||||
|
IConvertUnitLogic operationLogic = new ConvertUnitLogic();
|
||||||
public event EventHandler ValueChanged;
|
public event EventHandler ValueChanged;
|
||||||
|
|
||||||
public MultiplyDouble()
|
public MultiplyDouble()
|
||||||
@@ -40,7 +41,7 @@ namespace StructureHelper.Windows.UserControls
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
string s = (string)o;
|
string s = (string)o;
|
||||||
double factor = CommonOperation.ConvertToDoubleChangeComma(s);
|
double factor = ProcessString.ConvertCommaToCultureSettings(s);
|
||||||
ChangeValue(factor);
|
ChangeValue(factor);
|
||||||
}
|
}
|
||||||
catch(Exception ex)
|
catch(Exception ex)
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ namespace StructureHelper.Windows.ViewModels.Calculations.CalculationResult
|
|||||||
private void ShowIsoField()
|
private void ShowIsoField()
|
||||||
{
|
{
|
||||||
IStrainMatrix strainMatrix = SelectedResult.LoaderResults.ForceStrainPair.StrainMatrix;
|
IStrainMatrix strainMatrix = SelectedResult.LoaderResults.ForceStrainPair.StrainMatrix;
|
||||||
var primitiveSets = ShowIsoFieldResult.GetPrimitiveSets(strainMatrix, ndms, ResultFuncFactory.GetResultFuncs());
|
var primitiveSets = ShowIsoFieldResult.GetPrimitiveSets(strainMatrix, ndms, ForceResultFuncFactory.GetResultFuncs());
|
||||||
isoFieldReport = new IsoFieldReport(primitiveSets);
|
isoFieldReport = new IsoFieldReport(primitiveSets);
|
||||||
isoFieldReport.Show();
|
isoFieldReport.Show();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,13 @@
|
|||||||
using StructureHelper.Infrastructure.Enums;
|
using StructureHelper.Infrastructure.Enums;
|
||||||
using StructureHelper.Models.Materials;
|
|
||||||
using StructureHelper.Services.Settings;
|
using StructureHelper.Services.Settings;
|
||||||
using StructureHelper.Windows.Forces;
|
using StructureHelper.Windows.Forces;
|
||||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
using StructureHelperCommon.Infrastructures.Interfaces;
|
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||||
|
using StructureHelperCommon.Models.Calculators;
|
||||||
using StructureHelperCommon.Models.Forces;
|
using StructureHelperCommon.Models.Forces;
|
||||||
using StructureHelperLogics.Models.CrossSections;
|
using StructureHelperLogics.Models.CrossSections;
|
||||||
using StructureHelperLogics.Models.Materials;
|
|
||||||
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
||||||
using System;
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace StructureHelper.Windows.ViewModels.Forces
|
namespace StructureHelper.Windows.ViewModels.Forces
|
||||||
@@ -98,23 +93,39 @@ namespace StructureHelper.Windows.ViewModels.Forces
|
|||||||
{
|
{
|
||||||
bool result = true;
|
bool result = true;
|
||||||
var calcRepository = repository.CalculatorsList;
|
var calcRepository = repository.CalculatorsList;
|
||||||
foreach (var item in calcRepository)
|
foreach (var calc in calcRepository)
|
||||||
{
|
{
|
||||||
if (item is IForceCalculator)
|
if (calc is IForceCalculator)
|
||||||
{
|
{
|
||||||
var forceCalculator = item as IForceCalculator;
|
var forceCombinations = calc as IHasForceCombinations;
|
||||||
var containSelected = forceCalculator.ForceActions.Contains(SelectedItem);
|
result = DeleteActionFromHost(result, calc, forceCombinations);
|
||||||
|
}
|
||||||
|
else if (calc is CrackCalculator calculator)
|
||||||
|
{
|
||||||
|
var forceCombinations = calculator.InputData as IHasForceCombinations;
|
||||||
|
result = DeleteActionFromHost(result, calc, forceCombinations);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new StructureHelperException(ErrorStrings.ExpectedWas(typeof(ICalculator), calc));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool DeleteActionFromHost(bool result, ICalculator item, IHasForceCombinations? forceCombinations)
|
||||||
|
{
|
||||||
|
var containSelected = forceCombinations.ForceActions.Contains(SelectedItem);
|
||||||
if (containSelected)
|
if (containSelected)
|
||||||
{
|
{
|
||||||
var dialogResultCalc = MessageBox.Show($"Action is contained in calculator {item.Name}", "Please, confirm deleting", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
|
var dialogResultCalc = MessageBox.Show($"Action is contained in calculator {item.Name}", "Please, confirm deleting", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
|
||||||
if (dialogResultCalc == DialogResult.Yes)
|
if (dialogResultCalc == DialogResult.Yes)
|
||||||
{
|
{
|
||||||
forceCalculator.ForceActions.Remove(SelectedItem);
|
forceCombinations.ForceActions.Remove(SelectedItem);
|
||||||
}
|
}
|
||||||
else result = false;
|
else result = false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
using StructureHelper.Infrastructure;
|
using LoaderCalculator;
|
||||||
|
using StructureHelper.Infrastructure;
|
||||||
using StructureHelper.Infrastructure.Enums;
|
using StructureHelper.Infrastructure.Enums;
|
||||||
|
using StructureHelper.Windows.CalculationWindows.CalculatorsViews;
|
||||||
using StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews;
|
using StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews;
|
||||||
using StructureHelper.Windows.CalculationWindows.ProgressViews;
|
using StructureHelper.Windows.CalculationWindows.ProgressViews;
|
||||||
|
using StructureHelper.Windows.Errors;
|
||||||
using StructureHelper.Windows.ViewModels.Calculations.Calculators;
|
using StructureHelper.Windows.ViewModels.Calculations.Calculators;
|
||||||
using StructureHelper.Windows.ViewModels.Errors;
|
using StructureHelper.Windows.ViewModels.Errors;
|
||||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
@@ -10,6 +13,8 @@ using StructureHelperCommon.Models.Calculators;
|
|||||||
using StructureHelperLogics.Models.CrossSections;
|
using StructureHelperLogics.Models.CrossSections;
|
||||||
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
||||||
using StructureHelperLogics.NdmCalculations.Analyses.Logics;
|
using StructureHelperLogics.NdmCalculations.Analyses.Logics;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
|
using System;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using MessageBox = System.Windows.Forms.MessageBox;
|
using MessageBox = System.Windows.Forms.MessageBox;
|
||||||
@@ -25,17 +30,45 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
|
|||||||
private InteractionDiagramLogic interactionDiagramLogic;
|
private InteractionDiagramLogic interactionDiagramLogic;
|
||||||
|
|
||||||
public override void AddMethod(object parameter)
|
public override void AddMethod(object parameter)
|
||||||
|
{
|
||||||
|
if (CheckParameter(parameter) == false) { return; }
|
||||||
|
AddCalculator(parameter);
|
||||||
|
base.AddMethod(parameter);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddCalculator(object parameter)
|
||||||
{
|
{
|
||||||
var parameterType = (CalculatorTypes)parameter;
|
var parameterType = (CalculatorTypes)parameter;
|
||||||
if (parameterType == CalculatorTypes.ForceCalculator)
|
if (parameterType == CalculatorTypes.ForceCalculator)
|
||||||
{
|
{
|
||||||
NewItem = new ForceCalculator()
|
AddForceCalculator();
|
||||||
{
|
|
||||||
Name = "New force calculator",
|
|
||||||
TraceLogger = new ShiftTraceLogger(),
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
else if (parameterType == CalculatorTypes.LimitCurveCalculator)
|
else if (parameterType == CalculatorTypes.LimitCurveCalculator)
|
||||||
|
{
|
||||||
|
AddLimitCurveCalculator();
|
||||||
|
}
|
||||||
|
else if (parameterType == CalculatorTypes.CrackCalculator)
|
||||||
|
{
|
||||||
|
AddCrackCalculator();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(parameterType));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddCrackCalculator()
|
||||||
|
{
|
||||||
|
var inputData = new CrackInputData();
|
||||||
|
var calculator = new CrackCalculator(inputData, new CheckCrackCalculatorInputDataLogic(inputData))
|
||||||
|
{
|
||||||
|
Name = "New crack calculator",
|
||||||
|
TraceLogger = new ShiftTraceLogger(),
|
||||||
|
};
|
||||||
|
NewItem = calculator;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddLimitCurveCalculator()
|
||||||
{
|
{
|
||||||
var inputData = new LimitCurveInputData(repository.Primitives);
|
var inputData = new LimitCurveInputData(repository.Primitives);
|
||||||
NewItem = new LimitCurvesCalculator()
|
NewItem = new LimitCurvesCalculator()
|
||||||
@@ -45,12 +78,31 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
|
|||||||
TraceLogger = new ShiftTraceLogger(),
|
TraceLogger = new ShiftTraceLogger(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
private void AddForceCalculator()
|
||||||
{
|
{
|
||||||
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(parameterType));
|
NewItem = new ForceCalculator()
|
||||||
|
{
|
||||||
|
Name = "New force calculator",
|
||||||
|
TraceLogger = new ShiftTraceLogger(),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
base.AddMethod(parameter);
|
|
||||||
|
private bool CheckParameter(object parameter)
|
||||||
|
{
|
||||||
|
if (parameter is null)
|
||||||
|
{
|
||||||
|
SafetyProcessor.ShowMessage(ErrorStrings.ParameterIsNull, "It is imposible to add object cause parameter is null");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
if (parameter is not CalculatorTypes)
|
||||||
|
{
|
||||||
|
SafetyProcessor.ShowMessage(ErrorStrings.ExpectedWas(typeof(CalculatorTypes), parameter), "Parameter is not correspondent to any type of calculator");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public override void EditMethod(object parameter)
|
public override void EditMethod(object parameter)
|
||||||
{
|
{
|
||||||
SafetyProcessor.RunSafeProcess(EditCalculator, $"Error of editing: {SelectedItem.Name}");
|
SafetyProcessor.RunSafeProcess(EditCalculator, $"Error of editing: {SelectedItem.Name}");
|
||||||
@@ -59,20 +111,18 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
|
|||||||
|
|
||||||
private void EditCalculator()
|
private void EditCalculator()
|
||||||
{
|
{
|
||||||
if (SelectedItem is ForceCalculator)
|
if (SelectedItem is ForceCalculator forceCalculator) { EditForceCalculator(forceCalculator);}
|
||||||
{
|
else if (SelectedItem is LimitCurvesCalculator limitCurvesCalculator) { EditLimitCurveCalculator(limitCurvesCalculator); }
|
||||||
var calculator = SelectedItem as ForceCalculator;
|
else if (SelectedItem is CrackCalculator crackCalculator) { EditCrackCalculator(crackCalculator);}
|
||||||
EditForceCalculator(calculator);
|
else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(SelectedItem));}
|
||||||
}
|
}
|
||||||
else if (SelectedItem is LimitCurvesCalculator)
|
|
||||||
|
private void EditCrackCalculator(CrackCalculator calculator)
|
||||||
{
|
{
|
||||||
var calculator = SelectedItem as LimitCurvesCalculator;
|
var calculatorCopy = calculator.Clone() as CrackCalculator;
|
||||||
EditLimitCurveCalculator(calculator);
|
var vm = new CrackCalculatorInputDataViewModel(repository.Primitives, repository.ForceActions, calculator);
|
||||||
}
|
var wnd = new CrackCalculatorInputDataView(vm);
|
||||||
else
|
ShowWindow(calculator, calculatorCopy, wnd);
|
||||||
{
|
|
||||||
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(SelectedItem));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void EditLimitCurveCalculator(LimitCurvesCalculator calculator)
|
private void EditLimitCurveCalculator(LimitCurvesCalculator calculator)
|
||||||
@@ -134,7 +184,6 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
|
|||||||
}
|
}
|
||||||
if (SelectedItem is LimitCurvesCalculator calculator)
|
if (SelectedItem is LimitCurvesCalculator calculator)
|
||||||
{
|
{
|
||||||
var inputData = calculator.InputData;
|
|
||||||
ShowInteractionDiagramByInputData(calculator);
|
ShowInteractionDiagramByInputData(calculator);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -143,13 +192,20 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
|
|||||||
var result = SelectedItem.Result;
|
var result = SelectedItem.Result;
|
||||||
if (result.IsValid == false)
|
if (result.IsValid == false)
|
||||||
{
|
{
|
||||||
MessageBox.Show(result.Description, "Check data for analisys", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
var vm = new ErrorProcessor()
|
||||||
|
{
|
||||||
|
ShortText = "Errors apearred during calculations, see detailed information",
|
||||||
|
DetailText = SelectedItem.Result.Description
|
||||||
|
};
|
||||||
|
new ErrorMessage(vm).ShowDialog();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ProcessResult();
|
ProcessResult();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SelectedItem.TraceLogger is not null)
|
if (SelectedItem.TraceLogger is not null)
|
||||||
{
|
{
|
||||||
var wnd = new TraceDocumentView(SelectedItem.TraceLogger.TraceLoggerEntries);
|
var wnd = new TraceDocumentView(SelectedItem.TraceLogger.TraceLoggerEntries);
|
||||||
@@ -171,13 +227,17 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
|
|||||||
|
|
||||||
private void ProcessResult()
|
private void ProcessResult()
|
||||||
{
|
{
|
||||||
if (SelectedItem is IForceCalculator)
|
if (SelectedItem is ForceCalculator forceCalculator)
|
||||||
{
|
{
|
||||||
var calculator = SelectedItem as ForceCalculator;
|
var vm = new ForcesResultsViewModel(forceCalculator);
|
||||||
var vm = new ForcesResultsViewModel(calculator);
|
|
||||||
var wnd = new ForceResultsView(vm);
|
var wnd = new ForceResultsView(vm);
|
||||||
wnd.ShowDialog();
|
wnd.ShowDialog();
|
||||||
}
|
}
|
||||||
|
else if (SelectedItem is CrackCalculator crackCalculator)
|
||||||
|
{
|
||||||
|
var wnd = new CrackResultView(crackCalculator.Result as CrackResult);
|
||||||
|
wnd.ShowDialog();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(SelectedItem));
|
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(SelectedItem));
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ using StructureHelper.Windows.PrimitiveTemplates.RCs.Beams;
|
|||||||
using StructureHelper.Windows.PrimitiveTemplates.RCs.RectangleBeam;
|
using StructureHelper.Windows.PrimitiveTemplates.RCs.RectangleBeam;
|
||||||
using StructureHelper.Windows.Services;
|
using StructureHelper.Windows.Services;
|
||||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
|
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||||
|
using StructureHelperCommon.Models.Calculators;
|
||||||
using StructureHelperCommon.Models.Materials;
|
using StructureHelperCommon.Models.Materials;
|
||||||
using StructureHelperCommon.Models.Shapes;
|
using StructureHelperCommon.Models.Shapes;
|
||||||
using StructureHelperLogics.Models.CrossSections;
|
using StructureHelperLogics.Models.CrossSections;
|
||||||
@@ -14,6 +16,7 @@ using StructureHelperLogics.Models.Primitives;
|
|||||||
using StructureHelperLogics.Models.Templates.CrossSections.RCs;
|
using StructureHelperLogics.Models.Templates.CrossSections.RCs;
|
||||||
using StructureHelperLogics.Models.Templates.RCs;
|
using StructureHelperLogics.Models.Templates.RCs;
|
||||||
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
||||||
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
using StructureHelperLogics.NdmCalculations.Primitives;
|
using StructureHelperLogics.NdmCalculations.Primitives;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -135,9 +138,24 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
|
|||||||
{
|
{
|
||||||
if (calc is IForceCalculator)
|
if (calc is IForceCalculator)
|
||||||
{
|
{
|
||||||
var forceCalc = calc as IForceCalculator;
|
var forceCalc = calc as IHasPrimitives;
|
||||||
forceCalc.Primitives.Remove(ndmPrimitive);
|
forceCalc.Primitives.Remove(ndmPrimitive);
|
||||||
}
|
}
|
||||||
|
else if (calc is LimitCurvesCalculator calculator)
|
||||||
|
{
|
||||||
|
//to do
|
||||||
|
//var forceCalc = calculator.InputData as IHasPrimitives;
|
||||||
|
//forceCalc.Primitives.Remove(ndmPrimitive);
|
||||||
|
}
|
||||||
|
else if (calc is CrackCalculator crackCalculator)
|
||||||
|
{
|
||||||
|
var forceCalc = crackCalculator.InputData as IHasPrimitives;
|
||||||
|
forceCalc.Primitives.Remove(ndmPrimitive);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new StructureHelperException(ErrorStrings.ExpectedWas(typeof(ICalculator), calc));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
foreach (var primitive in repository.Primitives)
|
foreach (var primitive in repository.Primitives)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,5 +7,9 @@ namespace StructureHelperCommon.Infrastructures.Exceptions
|
|||||||
public StructureHelperException(string errorString) : base(errorString)
|
public StructureHelperException(string errorString) : base(errorString)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
public StructureHelperException(Exception ex) : this(ex.Message)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
using StructureHelperCommon.Models.Calculators;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Infrastructures.Interfaces
|
||||||
|
{
|
||||||
|
public interface ICheckInputDataLogic : ICheckLogic
|
||||||
|
{
|
||||||
|
IInputData InputData { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Infrastructures.Interfaces
|
||||||
|
{
|
||||||
|
public interface ICheckLogic : ILogic
|
||||||
|
{
|
||||||
|
string CheckResult { get; }
|
||||||
|
bool Check();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,9 @@ namespace StructureHelperCommon.Infrastructures.Interfaces
|
|||||||
{
|
{
|
||||||
public interface IHasForceCombinations
|
public interface IHasForceCombinations
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Collection of force actions
|
||||||
|
/// </summary>
|
||||||
List<IForceAction> ForceActions { get; }
|
List<IForceAction> ForceActions { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
15
StructureHelperCommon/Models/Calculators/GenericResult.cs
Normal file
15
StructureHelperCommon/Models/Calculators/GenericResult.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Models.Calculators
|
||||||
|
{
|
||||||
|
public class GenericResult<T> : IResult
|
||||||
|
{
|
||||||
|
public bool IsValid { get; set; }
|
||||||
|
public string? Description { get; set; }
|
||||||
|
public T? Value { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@ namespace StructureHelperCommon.Models.Loggers
|
|||||||
{
|
{
|
||||||
public static string DimensionLess => "(dimensionless)";
|
public static string DimensionLess => "(dimensionless)";
|
||||||
public static string MethodBasedOn => "Method of calculation based on ";
|
public static string MethodBasedOn => "Method of calculation based on ";
|
||||||
|
public static string CalculationError => "Some errors happened during calculations: ";
|
||||||
public static string CalculationHasDone => "Calculation has done succesfully";
|
public static string CalculationHasDone => "Calculation has done succesfully";
|
||||||
public static string Summary => "Summary";
|
public static string Summary => "Summary";
|
||||||
public static string Maximum => "Maximum";
|
public static string Maximum => "Maximum";
|
||||||
|
|||||||
@@ -33,9 +33,17 @@ namespace StructureHelperCommon.Models.Materials
|
|||||||
{
|
{
|
||||||
GetLoaderOptions();
|
GetLoaderOptions();
|
||||||
IBuilderDirector director = GetMaterialDirector();
|
IBuilderDirector director = GetMaterialDirector();
|
||||||
|
try
|
||||||
|
{
|
||||||
var material = director.BuildMaterial();
|
var material = director.BuildMaterial();
|
||||||
return material;
|
return material;
|
||||||
}
|
}
|
||||||
|
catch (System.Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private IBuilderDirector GetMaterialDirector()
|
private IBuilderDirector GetMaterialDirector()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace StructureHelperCommon.Models.Materials
|
|||||||
{
|
{
|
||||||
private ConcreteLogicOptions options;
|
private ConcreteLogicOptions options;
|
||||||
private MaterialCommonOptionLogic optionLogic;
|
private MaterialCommonOptionLogic optionLogic;
|
||||||
private FactorLogic factorLogic;
|
|
||||||
|
|
||||||
public ConcreteMaterialOptionLogic(ConcreteLogicOptions options)
|
public ConcreteMaterialOptionLogic(ConcreteLogicOptions options)
|
||||||
{
|
{
|
||||||
@@ -32,10 +32,6 @@ namespace StructureHelperCommon.Models.Materials
|
|||||||
var concreteOptions = materialOptions as ConcreteOptions;
|
var concreteOptions = materialOptions as ConcreteOptions;
|
||||||
optionLogic = new MaterialCommonOptionLogic(options);
|
optionLogic = new MaterialCommonOptionLogic(options);
|
||||||
optionLogic.SetMaterialOptions(concreteOptions);
|
optionLogic.SetMaterialOptions(concreteOptions);
|
||||||
factorLogic = new FactorLogic(options.SafetyFactors);
|
|
||||||
var strength = factorLogic.GetTotalFactor(options.LimitState, options.CalcTerm);
|
|
||||||
concreteOptions.ExternalFactor.Compressive = strength.Compressive;
|
|
||||||
concreteOptions.ExternalFactor.Tensile = strength.Tensile;
|
|
||||||
concreteOptions.WorkInTension = options.WorkInTension;
|
concreteOptions.WorkInTension = options.WorkInTension;
|
||||||
concreteOptions.RelativeHumidity = options.RelativeHumidity;
|
concreteOptions.RelativeHumidity = options.RelativeHumidity;
|
||||||
concreteOptions.Age = options.Age;
|
concreteOptions.Age = options.Age;
|
||||||
|
|||||||
14
StructureHelperCommon/Models/Materials/ICrackedMaterial.cs
Normal file
14
StructureHelperCommon/Models/Materials/ICrackedMaterial.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Models.Materials
|
||||||
|
{
|
||||||
|
public interface ICrackedMaterial
|
||||||
|
{
|
||||||
|
bool TensionForULS { get; set; }
|
||||||
|
bool TensionForSLS { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -240,7 +240,7 @@ namespace StructureHelperCommon.Models.Materials.Libraries
|
|||||||
Code = code,
|
Code = code,
|
||||||
Name = "A400",
|
Name = "A400",
|
||||||
InitModulus = 2e11d,
|
InitModulus = 2e11d,
|
||||||
MainStrength = 400e6d
|
MainStrength = 390e6d
|
||||||
},
|
},
|
||||||
new ReinforcementMaterialEntity(new Guid("045b54b1-0bbf-41fd-a27d-aeb20f600bb4"))
|
new ReinforcementMaterialEntity(new Guid("045b54b1-0bbf-41fd-a27d-aeb20f600bb4"))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
using StructureHelperCommon.Infrastructures.Enums;
|
using LoaderCalculator.Data.Materials.MaterialBuilders;
|
||||||
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
|
using StructureHelperCommon.Models.Materials.Libraries;
|
||||||
using LCMB = LoaderCalculator.Data.Materials.MaterialBuilders;
|
using LCMB = LoaderCalculator.Data.Materials.MaterialBuilders;
|
||||||
|
using SHEnums = StructureHelperCommon.Infrastructures.Enums;
|
||||||
|
|
||||||
namespace StructureHelperCommon.Models.Materials
|
namespace StructureHelperCommon.Models.Materials
|
||||||
{
|
{
|
||||||
public class MaterialCommonOptionLogic : IMaterialOptionLogic
|
public class MaterialCommonOptionLogic : IMaterialOptionLogic
|
||||||
{
|
{
|
||||||
private IMaterialLogicOptions options;
|
private IMaterialLogicOptions options;
|
||||||
|
private FactorLogic factorLogic;
|
||||||
|
|
||||||
public MaterialCommonOptionLogic(IMaterialLogicOptions options)
|
public MaterialCommonOptionLogic(IMaterialLogicOptions options)
|
||||||
{
|
{
|
||||||
@@ -17,6 +21,58 @@ namespace StructureHelperCommon.Models.Materials
|
|||||||
{
|
{
|
||||||
materialOptions.InitModulus = options.MaterialEntity.InitModulus;
|
materialOptions.InitModulus = options.MaterialEntity.InitModulus;
|
||||||
materialOptions.Strength = options.MaterialEntity.MainStrength;
|
materialOptions.Strength = options.MaterialEntity.MainStrength;
|
||||||
|
ProcessCodeType(materialOptions);
|
||||||
|
ProcessLimitState(materialOptions);
|
||||||
|
ProcessCalcTerm(materialOptions);
|
||||||
|
ProcessExternalFactors(materialOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ProcessExternalFactors(IMaterialOptions materialOptions)
|
||||||
|
{
|
||||||
|
factorLogic = new FactorLogic(options.SafetyFactors);
|
||||||
|
var strength = factorLogic.GetTotalFactor(options.LimitState, options.CalcTerm);
|
||||||
|
materialOptions.ExternalFactor.Compressive = strength.Compressive;
|
||||||
|
materialOptions.ExternalFactor.Tensile = strength.Tensile;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ProcessCalcTerm(IMaterialOptions materialOptions)
|
||||||
|
{
|
||||||
|
if (options.CalcTerm == CalcTerms.ShortTerm)
|
||||||
|
{
|
||||||
|
materialOptions.IsShortTerm = true;
|
||||||
|
}
|
||||||
|
else if (options.CalcTerm == CalcTerms.LongTerm)
|
||||||
|
{
|
||||||
|
materialOptions.IsShortTerm = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new StructureHelperException(ErrorStrings.LoadTermIsNotValid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ProcessLimitState(IMaterialOptions materialOptions)
|
||||||
|
{
|
||||||
|
if (options.LimitState == SHEnums.LimitStates.ULS)
|
||||||
|
{
|
||||||
|
materialOptions.LimitState = LCMB.LimitStates.Collapse;
|
||||||
|
}
|
||||||
|
else if (options.LimitState == SHEnums.LimitStates.SLS)
|
||||||
|
{
|
||||||
|
materialOptions.LimitState = LCMB.LimitStates.ServiceAbility;
|
||||||
|
}
|
||||||
|
else if (options.LimitState == SHEnums.LimitStates.Special)
|
||||||
|
{
|
||||||
|
materialOptions.LimitState = LCMB.LimitStates.Special;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new StructureHelperException(ErrorStrings.LimitStatesIsNotValid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ProcessCodeType(IMaterialOptions materialOptions)
|
||||||
|
{
|
||||||
if (options.MaterialEntity.CodeType == CodeTypes.EuroCode_2_1990)
|
if (options.MaterialEntity.CodeType == CodeTypes.EuroCode_2_1990)
|
||||||
{
|
{
|
||||||
materialOptions.CodesType = LCMB.CodesType.EC2_1990;
|
materialOptions.CodesType = LCMB.CodesType.EC2_1990;
|
||||||
@@ -25,23 +81,10 @@ namespace StructureHelperCommon.Models.Materials
|
|||||||
{
|
{
|
||||||
materialOptions.CodesType = LCMB.CodesType.SP63_2018;
|
materialOptions.CodesType = LCMB.CodesType.SP63_2018;
|
||||||
}
|
}
|
||||||
else { throw new StructureHelperException($"{ErrorStrings.ObjectTypeIsUnknown} : {materialOptions.CodesType}"); }
|
else
|
||||||
if (options.LimitState == LimitStates.ULS)
|
|
||||||
{
|
{
|
||||||
materialOptions.LimitState = LCMB.LimitStates.Collapse;
|
throw new StructureHelperException($"{ErrorStrings.ObjectTypeIsUnknown} : {materialOptions.CodesType}");
|
||||||
}
|
}
|
||||||
else if (options.LimitState == LimitStates.SLS)
|
|
||||||
{
|
|
||||||
materialOptions.LimitState = LCMB.LimitStates.ServiceAbility;
|
|
||||||
}
|
|
||||||
else if (options.LimitState == LimitStates.Special)
|
|
||||||
{
|
|
||||||
materialOptions.LimitState = LCMB.LimitStates.Special;
|
|
||||||
}
|
|
||||||
else { throw new StructureHelperException(ErrorStrings.LimitStatesIsNotValid); }
|
|
||||||
if (options.CalcTerm == CalcTerms.ShortTerm) { materialOptions.IsShortTerm = true; }
|
|
||||||
else if (options.CalcTerm == CalcTerms.LongTerm) { materialOptions.IsShortTerm = false; }
|
|
||||||
else { throw new StructureHelperException(ErrorStrings.LoadTermIsNotValid); }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,9 +30,18 @@ namespace StructureHelperCommon.Models.Materials
|
|||||||
{
|
{
|
||||||
GetLoaderOptions();
|
GetLoaderOptions();
|
||||||
IBuilderDirector director = GetMaterialDirector();
|
IBuilderDirector director = GetMaterialDirector();
|
||||||
|
try
|
||||||
|
{
|
||||||
var material = director.BuildMaterial();
|
var material = director.BuildMaterial();
|
||||||
return material;
|
return material;
|
||||||
}
|
}
|
||||||
|
catch (System.Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private IBuilderDirector GetMaterialDirector()
|
private IBuilderDirector GetMaterialDirector()
|
||||||
{
|
{
|
||||||
@@ -43,7 +52,10 @@ namespace StructureHelperCommon.Models.Materials
|
|||||||
|
|
||||||
private void GetLoaderOptions()
|
private void GetLoaderOptions()
|
||||||
{
|
{
|
||||||
materialOptions = new ReinforcementOptions() { DiagramType = DiagramType};
|
materialOptions = new ReinforcementOptions()
|
||||||
|
{
|
||||||
|
DiagramType = DiagramType,
|
||||||
|
};
|
||||||
optionLogic = new MaterialCommonOptionLogic(options);
|
optionLogic = new MaterialCommonOptionLogic(options);
|
||||||
optionLogic.SetMaterialOptions(materialOptions);
|
optionLogic.SetMaterialOptions(materialOptions);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,5 +43,62 @@ namespace StructureHelperCommon.Models.Parameters
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public ArrayParameter(int rowCount, List<string> columnLabels) : this(rowCount, columnLabels.Count, columnLabels) { }
|
public ArrayParameter(int rowCount, List<string> columnLabels) : this(rowCount, columnLabels.Count, columnLabels) { }
|
||||||
|
public void AddArray(IArrayParameter<T> array)
|
||||||
|
{
|
||||||
|
var rowCount = array.Data.GetLength(0);
|
||||||
|
int existingRowCount = this.Data.GetLength(0);
|
||||||
|
if (rowCount != existingRowCount)
|
||||||
|
{
|
||||||
|
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $": number of rows in new array {rowCount} is not equal existing row count {existingRowCount}");
|
||||||
|
}
|
||||||
|
var existingColumnCount = this.Data.GetLength(1);
|
||||||
|
var newColumnCount = array.Data.GetLength(1);
|
||||||
|
var totalCount = existingColumnCount + newColumnCount;
|
||||||
|
var newData = new T[rowCount, totalCount];
|
||||||
|
var lackColumns = existingColumnCount - ColumnLabels.Count;
|
||||||
|
if (lackColumns > 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < lackColumns; i++)
|
||||||
|
{
|
||||||
|
ColumnLabels.Add(string.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ColumnLabels.AddRange(array.ColumnLabels);
|
||||||
|
for (int i = 0; i < rowCount; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < existingColumnCount; j++)
|
||||||
|
{
|
||||||
|
newData[i, j] = Data[i, j];
|
||||||
|
}
|
||||||
|
for (int j = 0; j < newColumnCount; j++)
|
||||||
|
{
|
||||||
|
newData[i, existingColumnCount + j] = array.Data[i,j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Data = newData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddRow(int rowNumber, IEnumerable<T> values)
|
||||||
|
{
|
||||||
|
CheckParams(rowNumber, values);
|
||||||
|
var valueList = values.ToList();
|
||||||
|
for (int i = 0; i < values.Count(); i++)
|
||||||
|
{
|
||||||
|
Data[rowNumber, i] = valueList[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CheckParams(int rowNumber, IEnumerable<T> values)
|
||||||
|
{
|
||||||
|
int rowCount = Data.GetLength(0) - 1;
|
||||||
|
if (rowNumber > rowCount)
|
||||||
|
{
|
||||||
|
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $": number of rows {rowNumber} is greater than length of array {rowCount}");
|
||||||
|
}
|
||||||
|
if (values.Count() != Data.GetLength(1))
|
||||||
|
{
|
||||||
|
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $": number of colums in values {values.Count()} is not equal existing column count {Data.GetLength(1)}");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
namespace StructureHelperCommon.Models.Parameters
|
||||||
|
{
|
||||||
|
public interface IProcessValuePairLogic<T>
|
||||||
|
{
|
||||||
|
ValuePair<T> GetValuePairByString(string s);
|
||||||
|
}
|
||||||
|
}
|
||||||
12
StructureHelperCommon/Models/Parameters/IValuePair.cs
Normal file
12
StructureHelperCommon/Models/Parameters/IValuePair.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
namespace StructureHelperCommon.Models.Parameters
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represent pair of value with text
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
public interface IValuePair<T>
|
||||||
|
{
|
||||||
|
string Text { get; set; }
|
||||||
|
T Value { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,14 +7,12 @@ using System.Windows.Media;
|
|||||||
|
|
||||||
namespace StructureHelperCommon.Models.Parameters
|
namespace StructureHelperCommon.Models.Parameters
|
||||||
{
|
{
|
||||||
public interface IValueParameter<T>
|
public interface IValueParameter<T> : IValuePair<T>
|
||||||
{
|
{
|
||||||
bool IsValid { get; set; }
|
bool IsValid { get; set; }
|
||||||
string Name { get; set; }
|
string Name { get; set; }
|
||||||
string ShortName { get; set; }
|
string ShortName { get; set; }
|
||||||
Color Color { get; set; }
|
Color Color { get; set; }
|
||||||
string MeasurementUnit { get; set; }
|
|
||||||
T Value { get; set; }
|
|
||||||
string Description { get; set; }
|
string Description { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
|
using StructureHelperCommon.Services.Units;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Media.Media3D;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Models.Parameters
|
||||||
|
{
|
||||||
|
public enum DigitPlace
|
||||||
|
{
|
||||||
|
Start,
|
||||||
|
Any
|
||||||
|
}
|
||||||
|
public class ProcessDoublePairLogic : IProcessValuePairLogic<double>
|
||||||
|
{
|
||||||
|
const string digitalPattern = @"^[-]?[+]?\d*\.?\,?\d*";
|
||||||
|
const string allowedPattern = @"[0-9]|\.|\,";
|
||||||
|
const string characterPattern = "[a-z]+$";
|
||||||
|
const string target = "";
|
||||||
|
|
||||||
|
public DigitPlace DigitPlace { get; set; } = DigitPlace.Start;
|
||||||
|
|
||||||
|
public ValuePair<double> GetValuePairByString(string s)
|
||||||
|
{
|
||||||
|
s = s.Replace(" ", string.Empty);
|
||||||
|
|
||||||
|
Regex regexText = new (allowedPattern);
|
||||||
|
string textString = regexText.Replace(s, target);
|
||||||
|
var textMatch = Regex.Match(textString, characterPattern, RegexOptions.IgnoreCase);
|
||||||
|
if (textMatch.Success == true)
|
||||||
|
{
|
||||||
|
textString = textMatch.Value.ToLower();
|
||||||
|
}
|
||||||
|
var digitalOnlyString = DigitPlace == DigitPlace.Start ? s : s.ToLower().Replace(textString, string.Empty);
|
||||||
|
var match = Regex.Match(digitalOnlyString, digitalPattern);
|
||||||
|
if (match.Success == true)
|
||||||
|
{
|
||||||
|
return GetDoubleValue(textString, match);
|
||||||
|
}
|
||||||
|
throw new StructureHelperException(ErrorStrings.DataIsInCorrect);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ValuePair<double> GetDoubleValue(string textString, Match match)
|
||||||
|
{
|
||||||
|
string digitalString = match.Value;
|
||||||
|
if (digitalString != string.Empty || digitalString != "")
|
||||||
|
{
|
||||||
|
double digit = ProcessString.ConvertCommaToCultureSettings(digitalString);
|
||||||
|
return new ValuePair<double>()
|
||||||
|
{
|
||||||
|
Value = digit,
|
||||||
|
Text = textString
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + ": value does not contain digital simbols");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,11 +4,12 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace StructureHelperCommon.Services.Units
|
namespace StructureHelperCommon.Models.Parameters
|
||||||
{
|
{
|
||||||
internal class StringDoublePair : IStringDoublePair
|
/// <inheritdoc/>
|
||||||
|
public class ValuePair<T> : IValuePair<T>
|
||||||
{
|
{
|
||||||
public double Digit { get; set; }
|
|
||||||
public string Text { get; set; }
|
public string Text { get; set; }
|
||||||
|
public T Value { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,7 @@ namespace StructureHelperCommon.Models.Parameters
|
|||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string ShortName { get; set; }
|
public string ShortName { get; set; }
|
||||||
public Color Color { get; set; }
|
public Color Color { get; set; }
|
||||||
public string MeasurementUnit { get; set; }
|
public string Text { get; set; }
|
||||||
public T Value { get; set; }
|
public T Value { get; set; }
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,90 +0,0 @@
|
|||||||
using StructureHelperCommon.Models.Forces;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
//Copyright (c) 2023 Redikultsev Evgeny, Ekaterinburg, Russia
|
|
||||||
//All rights reserved.
|
|
||||||
|
|
||||||
namespace StructureHelperCommon.Models.Sections
|
|
||||||
{
|
|
||||||
public class AccidentalEccentricityLogic : IAccidentalEccentricityLogic
|
|
||||||
{
|
|
||||||
private double lengthFactor;
|
|
||||||
private double sizeFactor;
|
|
||||||
private double minEccentricity;
|
|
||||||
|
|
||||||
public double Length { get; set; }
|
|
||||||
public double SizeX { get; set; }
|
|
||||||
public double SizeY { get; set; }
|
|
||||||
public IForceTuple InitialForceTuple { get; set; }
|
|
||||||
public IShiftTraceLogger? TraceLogger { get; set; }
|
|
||||||
public AccidentalEccentricityLogic()
|
|
||||||
{
|
|
||||||
lengthFactor = 600d;
|
|
||||||
sizeFactor = 30d;
|
|
||||||
minEccentricity = 0.01d;
|
|
||||||
}
|
|
||||||
public ForceTuple GetForceTuple()
|
|
||||||
{
|
|
||||||
var lengthEccetricity = Length / lengthFactor;
|
|
||||||
TraceLogger?.AddMessage(string.Format("Accidental eccentricity by length ea = {0} / {1} = {2}", Length, lengthFactor, lengthEccetricity));
|
|
||||||
var sizeXEccetricity = SizeX / sizeFactor;
|
|
||||||
TraceLogger?.AddMessage(string.Format("Accidental eccentricity by SizeX ea ={0} / {1} = {2}", SizeX, sizeFactor, sizeXEccetricity));
|
|
||||||
var sizeYEccetricity = SizeY / sizeFactor;
|
|
||||||
TraceLogger?.AddMessage(string.Format("Accidental eccentricity by SizeY ea ={0} / {1} = {2}", SizeY, sizeFactor, sizeYEccetricity));
|
|
||||||
TraceLogger?.AddMessage(string.Format("Minimum accidental eccentricity ea = {0}", minEccentricity));
|
|
||||||
var xEccentricity = Math.Abs(InitialForceTuple.My / InitialForceTuple.Nz);
|
|
||||||
TraceLogger?.AddMessage(string.Format("Actual eccentricity e0,x = {0}", xEccentricity));
|
|
||||||
var yEccentricity = Math.Abs(InitialForceTuple.Mx / InitialForceTuple.Nz);
|
|
||||||
TraceLogger?.AddMessage(string.Format("Actual eccentricity e0,y = {0}", yEccentricity));
|
|
||||||
|
|
||||||
var xFullEccentricity = new List<double>()
|
|
||||||
{
|
|
||||||
lengthEccetricity,
|
|
||||||
sizeXEccetricity,
|
|
||||||
minEccentricity,
|
|
||||||
xEccentricity
|
|
||||||
}
|
|
||||||
.Max();
|
|
||||||
string mesEx = string.Format("Eccentricity e,x = max({0}; {1}; {2}; {3}) = {4}",
|
|
||||||
lengthEccetricity, sizeXEccetricity,
|
|
||||||
minEccentricity, xEccentricity,
|
|
||||||
xFullEccentricity);
|
|
||||||
TraceLogger?.AddMessage(mesEx);
|
|
||||||
var yFullEccentricity = new List<double>()
|
|
||||||
{
|
|
||||||
lengthEccetricity,
|
|
||||||
sizeYEccetricity,
|
|
||||||
minEccentricity,
|
|
||||||
yEccentricity
|
|
||||||
}
|
|
||||||
.Max();
|
|
||||||
string mesEy = string.Format("Eccentricity e,y = max({0}; {1}; {2}; {3}) = {4}",
|
|
||||||
lengthEccetricity, sizeYEccetricity,
|
|
||||||
minEccentricity, yEccentricity,
|
|
||||||
yFullEccentricity);
|
|
||||||
TraceLogger?.AddMessage(mesEy);
|
|
||||||
var xSign = InitialForceTuple.Mx == 0d ? -1d : Math.Sign(InitialForceTuple.Mx);
|
|
||||||
var ySign = InitialForceTuple.My == 0d ? -1d : Math.Sign(InitialForceTuple.My);
|
|
||||||
var mx = (-1d) * InitialForceTuple.Nz * yFullEccentricity * xSign;
|
|
||||||
var my = (-1d) * InitialForceTuple.Nz * xFullEccentricity * ySign;
|
|
||||||
TraceLogger?.AddMessage(string.Format("Bending moment arbitrary X-axis Mx = {0} * {1} = {2}", InitialForceTuple.Nz, yFullEccentricity, mx), TraceLogStatuses.Debug);
|
|
||||||
TraceLogger?.AddMessage(string.Format("Bending moment arbitrary Y-axis My = {0} * {1} = {2}", InitialForceTuple.Nz, xFullEccentricity, my), TraceLogStatuses.Debug);
|
|
||||||
|
|
||||||
var newTuple = new ForceTuple()
|
|
||||||
{
|
|
||||||
Mx = mx,
|
|
||||||
My = my,
|
|
||||||
Nz = InitialForceTuple.Nz,
|
|
||||||
Qx = InitialForceTuple.Qx,
|
|
||||||
Qy = InitialForceTuple.Qy,
|
|
||||||
Mz = InitialForceTuple.Mz,
|
|
||||||
};
|
|
||||||
TraceLogger?.AddEntry(new TraceTablesFactory().GetByForceTuple(newTuple));
|
|
||||||
return newTuple;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
using StructureHelperCommon.Models.Forces;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Models.Sections.Logics
|
||||||
|
{
|
||||||
|
public class ForceTupleCopier : IProcessorLogic<IForceTuple>
|
||||||
|
{
|
||||||
|
public IForceTuple InputForceTuple { get; set; }
|
||||||
|
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||||
|
public ForceTupleCopier(IForceTuple forceTuple)
|
||||||
|
{
|
||||||
|
InputForceTuple = forceTuple;
|
||||||
|
}
|
||||||
|
public IForceTuple GetValue()
|
||||||
|
{
|
||||||
|
return InputForceTuple.Clone() as IForceTuple;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
using StructureHelperCommon.Models.Forces;
|
||||||
|
using StructureHelperCommon.Models.Shapes;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Models.Sections.Logics
|
||||||
|
{
|
||||||
|
public class ForceTupleMoveToPointDecorator : IProcessorDecorator<IForceTuple>
|
||||||
|
{
|
||||||
|
public IPoint2D Point2D { get; set; }
|
||||||
|
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Internal source of ForceTuple
|
||||||
|
/// </summary>
|
||||||
|
public IProcessorLogic<IForceTuple> ForceTupleLogics { get; }
|
||||||
|
public ForceTupleMoveToPointDecorator(IProcessorLogic<IForceTuple> procLogic)
|
||||||
|
{
|
||||||
|
ForceTupleLogics = procLogic;
|
||||||
|
}
|
||||||
|
public IForceTuple GetValue()
|
||||||
|
{
|
||||||
|
ForceTupleLogics.TraceLogger = TraceLogger;
|
||||||
|
var newTuple = ForceTupleLogics.GetValue();
|
||||||
|
newTuple.Mx += newTuple.Nz * Point2D.Y;
|
||||||
|
newTuple.My -= newTuple.Nz * Point2D.X;
|
||||||
|
return newTuple;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
using StructureHelperCommon.Infrastructures.Interfaces;
|
|
||||||
using StructureHelperCommon.Models.Forces;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace StructureHelperCommon.Models.Sections
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Logic for calculating of value of accidental eccentricity
|
|
||||||
/// </summary>
|
|
||||||
public interface IAccidentalEccentricityLogic : ILogic
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Properties of compressed member
|
|
||||||
/// </summary>
|
|
||||||
double Length { get;set;}
|
|
||||||
/// <summary>
|
|
||||||
/// Size of cross-section along X-axis, m
|
|
||||||
/// </summary>
|
|
||||||
double SizeX { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// Size of cross-section along Y-axis, m
|
|
||||||
/// </summary>
|
|
||||||
double SizeY { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// Initial tuple of force
|
|
||||||
/// </summary>
|
|
||||||
IForceTuple InitialForceTuple { get; set; }
|
|
||||||
/// <summary>
|
|
||||||
/// Returns new force tuple with accidental eccentricity
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
ForceTuple GetForceTuple();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using StructureHelperCommon.Models.Forces;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Models.Sections.Logics
|
||||||
|
{
|
||||||
|
public interface IHasInputForce
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initial tuple of force
|
||||||
|
/// </summary>
|
||||||
|
IForceTuple InputForceTuple { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user