Add beam shear action view

This commit is contained in:
Evgeny Redikultsev
2025-03-16 17:08:36 +05:00
parent a496f5a80f
commit b2027f92dd
25 changed files with 507 additions and 93 deletions

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelper.Infrastructure.Enums
{
public enum LoadTypes
{
ConcentratedForce,
DistributetLoad,
ConcentratedMoment
}
}

View File

@@ -0,0 +1,17 @@
using StructureHelperCommon.Infrastructures.Enums;
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 DistributedLoad : UnitBase
{
public override UnitTypes UnitType { get => UnitTypes.DistributedLoad; }
public override IUnit CurrentUnit { get => UnitLogic.GetUnit(UnitType, "kN/m"); }
public override string UnitName { get => "DistributedLoad"; }
}
}

View File

@@ -197,6 +197,17 @@
</Canvas.Children> </Canvas.Children>
</Canvas> </Canvas>
</DataTemplate> </DataTemplate>
<DataTemplate x:Key="ConcentratedForce">
<Canvas Style="{DynamicResource ButtonResultCanvas}">
<Canvas.Children>
<Line X1="16" Y1="4" X2="16" Y2="20" Stroke="Black" StrokeThickness="1"/>
<Line X1="10" Y1="12" X2="16" Y2="20" Stroke="Black" StrokeThickness="1"/>
<Line X1="22" Y1="12" X2="16" Y2="20" Stroke="Black" StrokeThickness="1"/>
<Line X1="2" Y1="20" X2="30" Y2="20" Stroke="Black" StrokeThickness="2"/>
<Ellipse Canvas.Left="13" Canvas.Top="17" Height="6" Width="6" Stroke="Black" StrokeThickness="1" Fill="White"/>
</Canvas.Children>
</Canvas>
</DataTemplate>
<DataTemplate x:Key="CrackCalculator"> <DataTemplate x:Key="CrackCalculator">
<Canvas Style="{DynamicResource ButtonCalculatorCanvas}"> <Canvas Style="{DynamicResource ButtonCalculatorCanvas}">
<Canvas.Children> <Canvas.Children>

View File

@@ -13,5 +13,6 @@
<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"/> <convertersUnits:CrackWidth x:Key="CrackWidth"/>
<convertersUnits:DistributedLoad x:Key="DistributedLoadConverter"/>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/> <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</ResourceDictionary> </ResourceDictionary>

View File

@@ -21,7 +21,7 @@
<Compile Update="Windows\BeamShears\ConcentratedForceView.xaml.cs"> <Compile Update="Windows\BeamShears\ConcentratedForceView.xaml.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Update="Windows\BeamShears\UniformDistributedLoadView.xaml.cs"> <Compile Update="Windows\BeamShears\DistributedLoadView.xaml.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Update="Windows\CalculationWindows\CalculatorsViews\Cracks\CrackCalculatorInputDataView.xaml.cs"> <Compile Update="Windows\CalculationWindows\CalculatorsViews\Cracks\CrackCalculatorInputDataView.xaml.cs">
@@ -158,7 +158,7 @@
<Page Update="Windows\BeamShears\ConcentratedForceView.xaml"> <Page Update="Windows\BeamShears\ConcentratedForceView.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
<Page Update="Windows\BeamShears\UniformDistributedLoadView.xaml"> <Page Update="Windows\BeamShears\DistributedLoadView.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
<Page Update="Windows\CalculationWindows\CalculatorsViews\Cracks\CrackCalculatorInputDataView.xaml"> <Page Update="Windows\CalculationWindows\CalculatorsViews\Cracks\CrackCalculatorInputDataView.xaml">

View File

@@ -4,10 +4,118 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:StructureHelper.Windows.BeamShears" xmlns:local="clr-namespace:StructureHelper.Windows.BeamShears"
xmlns:uc="clr-namespace:StructureHelper.Windows.UserControls"
xmlns:enums="clr-namespace:StructureHelper.Infrastructure.Enums"
d:DataContext="{d:DesignInstance local:BeamShearActionViewModel}" d:DataContext="{d:DesignInstance local:BeamShearActionViewModel}"
mc:Ignorable="d" mc:Ignorable="d"
Title="BeamShearActionView" Height="450" Width="800" ResizeMode="NoResize" WindowStartupLocation="CenterScreen"> Title="Shear Action" Height="300" Width="400" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
<Grid> <Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="Name"/>
<TextBox Grid.Column="1" Text="{Binding Name}"/>
</Grid>
<TabControl Grid.Row="1" DataContext="{Binding YAxisAction}">
<TabItem Header="Support">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="Shear force at support"/>
<TextBox Grid.Column="1" Text="{Binding SupportShearForce, Converter={StaticResource ForceConverter}}"/>
</Grid>
<uc:FactoredCombination Grid.Row="1" DataContext="{Binding CombinationProperty}"/>
</Grid>
</TabItem>
<TabItem DataContext="{Binding ShearLoads}" Header="Span loads">
<DockPanel>
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<Button Style="{StaticResource ToolButton24}"
Command="{Binding Add}" CommandParameter="{x:Static enums:LoadTypes.DistributetLoad}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Add distributed load"
IconContent="{StaticResource DistributedLoad}"
DescriptionText="Add new uniformly distributed load as span load"/>
</Button.ToolTip>
<Viewbox Height="24" Width="24">
<ContentControl ContentTemplate="{DynamicResource DistributedLoad}"/>
</Viewbox>
</Button>
<Button Style="{StaticResource ToolButton24}"
Command="{Binding Add}" CommandParameter="{x:Static enums:LoadTypes.ConcentratedForce}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Add concentrated force"
IconContent="{StaticResource ConcentratedForce}"
DescriptionText="Add concentrated force as span load"/>
</Button.ToolTip>
<Viewbox Height="24" Width="24">
<ContentControl ContentTemplate="{DynamicResource ConcentratedForce}"/>
</Viewbox>
</Button>
<Button Style="{StaticResource ToolButton24}" Command="{Binding Delete}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Delete span load"
IconContent="{StaticResource DeleteEntity }"
DescriptionText="Deletes selected span load"/>
</Button.ToolTip>
<Viewbox Height="24" Width="24">
<ContentControl ContentTemplate="{DynamicResource DeleteEntity}"/>
</Viewbox>
</Button>
<Button Style="{StaticResource ToolButton24}"
Command="{Binding Edit}">
<Button.ToolTip>
<uc:ButtonToolTipEh HeaderText="Edit"
IconContent="{StaticResource Settings}"
DescriptionText="Edit selected span load"/>
</Button.ToolTip>
<Viewbox Height="24" Width="24">
<ContentControl ContentTemplate="{DynamicResource Settings}"/>
</Viewbox>
</Button>
</ToolBar>
</ToolBarTray>
<ListBox
ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}"
ContextMenu="{StaticResource EditCopyDelete}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DockPanel>
</TabItem>
</TabControl>
</Grid>
<ContentControl Grid.Row="1" ContentTemplate="{StaticResource OkCancelButtons}" Content="{Binding}"/>
</Grid> </Grid>
</Window> </Window>

View File

@@ -1,16 +1,5 @@
using System; using StructureHelperCommon.Models.Forces;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows; 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.BeamShears namespace StructureHelper.Windows.BeamShears
{ {
@@ -19,9 +8,17 @@ namespace StructureHelper.Windows.BeamShears
/// </summary> /// </summary>
public partial class BeamShearActionView : Window public partial class BeamShearActionView : Window
{ {
public BeamShearActionView() private readonly BeamShearActionViewModel viewModel;
public BeamShearActionView(BeamShearActionViewModel viewModel)
{ {
InitializeComponent(); InitializeComponent();
this.viewModel = viewModel;
this.DataContext = this.viewModel;
this.viewModel.ParentWindow = this;
}
public BeamShearActionView(IBeamShearAction beamShearAction) : this(new BeamShearActionViewModel(beamShearAction))
{
} }
} }
} }

View File

@@ -11,12 +11,22 @@ namespace StructureHelper.Windows.BeamShears
public class BeamShearActionViewModel : OkCancelViewModelBase public class BeamShearActionViewModel : OkCancelViewModelBase
{ {
private readonly IBeamShearAction shearAction; private readonly IBeamShearAction shearAction;
public BeamShearLoadsViewModel ShearLoads { get; private set; } private string name;
public string Name
{
get => shearAction.Name;
set
{
shearAction.Name = value;
}
}
public BeamShearAxisActionViewModel YAxisAction { get; private set; }
public BeamShearActionViewModel(IBeamShearAction shearAction) public BeamShearActionViewModel(IBeamShearAction shearAction)
{ {
this.shearAction = shearAction; this.shearAction = shearAction;
ShearLoads = new(this.shearAction.YAxisShearAction.ShearLoads); YAxisAction = new(this.shearAction.YAxisShearAction);
} }
} }
} }

View File

@@ -1,5 +1,7 @@
using StructureHelper.Windows.ViewModels; using StructureHelper.Windows.ViewModels;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models.Forces; using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models.Forces.BeamShearActions;
using StructureHelperLogics.Models.BeamShears; using StructureHelperLogics.Models.BeamShears;
using System.Collections.Generic; using System.Collections.Generic;
@@ -8,11 +10,30 @@ namespace StructureHelper.Windows.BeamShears
public class BeamShearActionsViewModel : SelectItemVM<IBeamShearAction> public class BeamShearActionsViewModel : SelectItemVM<IBeamShearAction>
{ {
private readonly IBeamShearRepository shearRepository; private readonly IBeamShearRepository shearRepository;
private IUpdateStrategy<IBeamShearAction> updateStrategy;
public BeamShearActionsViewModel(IBeamShearRepository shearRepository) : base(shearRepository.BeamShearActions) public BeamShearActionsViewModel(IBeamShearRepository shearRepository) : base(shearRepository.BeamShearActions)
{ {
this.shearRepository = shearRepository; this.shearRepository = shearRepository;
} }
public override void AddMethod(object parameter)
{
NewItem = BeamShearActionFactory.GetBeamShearAction(ShearActionTypes.DistributedLoad);
base.AddMethod(parameter);
}
public override void EditMethod(object parameter)
{
if (SelectedItem is null) { return; }
IBeamShearAction temporaryShearAction = SelectedItem.Clone() as IBeamShearAction;
var window = new BeamShearActionView(SelectedItem);
window.ShowDialog();
if (window.DialogResult != true)
{
updateStrategy ??= new BeamShearActionUpdateStrategy();
updateStrategy.Update(SelectedItem, temporaryShearAction);
}
base.EditMethod(parameter);
}
public override void DeleteMethod(object parameter) public override void DeleteMethod(object parameter)
{ {
shearRepository.DeleteAction(SelectedItem); shearRepository.DeleteAction(SelectedItem);

View File

@@ -0,0 +1,34 @@
using StructureHelper.Infrastructure;
using StructureHelper.Windows.Forces;
using StructureHelperCommon.Models.Forces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelper.Windows.BeamShears
{
public class BeamShearAxisActionViewModel : ViewModelBase
{
private readonly IBeamShearAxisAction beamShearAxisAction;
public double SupportShearForce
{
get => beamShearAxisAction.SupportShearForce;
set
{
beamShearAxisAction.SupportShearForce = value;
}
}
public FactoredCombinationPropertyVM CombinationProperty { get; }
public BeamShearLoadsViewModel ShearLoads { get; }
public BeamShearAxisActionViewModel(IBeamShearAxisAction beamShearAxisAction)
{
this.beamShearAxisAction = beamShearAxisAction;
CombinationProperty = new(this.beamShearAxisAction.FactoredCombinationProperty);
ShearLoads = new(this.beamShearAxisAction.ShearLoads);
}
}
}

View File

@@ -1,30 +1,65 @@
using StructureHelper.Windows.ViewModels; using StructureHelper.Infrastructure.Enums;
using StructureHelper.Windows.ViewModels;
using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models.Forces; using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models.Forces.BeamShearActions;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows;
using System.Windows.Forms;
namespace StructureHelper.Windows.BeamShears namespace StructureHelper.Windows.BeamShears
{ {
public class BeamShearLoadsViewModel : SelectItemVM<IBeamShearLoad> public class BeamShearLoadsViewModel : SelectItemVM<IBeamShearLoad>
{ {
private IUpdateStrategy<IBeamShearLoad> updateStrategy;
public BeamShearLoadsViewModel(List<IBeamShearLoad> collection) : base(collection) public BeamShearLoadsViewModel(List<IBeamShearLoad> collection) : base(collection)
{ {
} }
public override void AddMethod(object parameter)
{
LoadTypes typedParameter = (LoadTypes)parameter;
if (typedParameter == LoadTypes.DistributetLoad)
{
NewItem = BeamShearLoadFactory.GetBeamShearLoad(ShearLoadTypes.DistributedLoad);
}
else if (typedParameter == LoadTypes.ConcentratedForce)
{
NewItem = BeamShearLoadFactory.GetBeamShearLoad(ShearLoadTypes.ConcentratedForce);
}
else
{
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(parameter));
}
base.AddMethod(parameter);
}
public override void EditMethod(object parameter) public override void EditMethod(object parameter)
{ {
if (SelectedItem is null) { return; }
Window window;
IBeamShearLoad temporaryShearLoad = SelectedItem.Clone() as IBeamShearLoad;
if (SelectedItem is IDistributedLoad distributedLoad) if (SelectedItem is IDistributedLoad distributedLoad)
{ {
window = new DistributedLoadView(distributedLoad);
}
else if (SelectedItem is IConcentratedForce concentrated)
{
window = new ConcentratedForceView(concentrated);
} }
else else
{ {
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(SelectedItem)); throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(SelectedItem));
} }
window.ShowDialog();
if (window.DialogResult != true)
{
updateStrategy ??= new BeamShearLoadUpdateStrategy();
updateStrategy.Update(SelectedItem, temporaryShearLoad);
}
base.EditMethod(parameter); base.EditMethod(parameter);
} }
} }

View File

@@ -103,10 +103,31 @@
<ScrollViewer> <ScrollViewer>
<StackPanel> <StackPanel>
<Expander Header="Actions" DataContext="{Binding Actions}"> <Expander Header="Actions" DataContext="{Binding Actions}">
<Expander.ContextMenu>
<ContextMenu>
<MenuItem Header="Add" Command="{Binding Add}"/>
</ContextMenu>
</Expander.ContextMenu>
<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" ContextMenu="{StaticResource EditCopyDelete}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Name}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Expander> </Expander>
<Expander Header="Cross-Sections" DataContext="{Binding Sections}"> <Expander Header="Cross-Sections" DataContext="{Binding Sections}">
<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" ContextMenu="{StaticResource EditCopyDelete}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Name}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Expander> </Expander>
<Expander Header="Stirrups" DataContext="{Binding Stirrups}"> <Expander Header="Stirrups" DataContext="{Binding Stirrups}">
<Expander.ContextMenu> <Expander.ContextMenu>

View File

@@ -6,7 +6,7 @@
xmlns:local="clr-namespace:StructureHelper.Windows.BeamShears" xmlns:local="clr-namespace:StructureHelper.Windows.BeamShears"
d:DataContext="{d:DesignInstance local:ConcentratedForceViewModel}" d:DataContext="{d:DesignInstance local:ConcentratedForceViewModel}"
mc:Ignorable="d" mc:Ignorable="d"
Title="ConcentratedForceView" Height="200" Width="300" ResizeMode="NoResize" WindowStartupLocation="CenterOwner"> Title="ConcentratedForceView" Height="200" Width="300" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition/> <RowDefinition/>
@@ -22,16 +22,19 @@
<RowDefinition Height="25"/> <RowDefinition Height="25"/>
<RowDefinition Height="25"/> <RowDefinition Height="25"/>
<RowDefinition Height="25"/> <RowDefinition Height="25"/>
<RowDefinition Height="25"/>
<RowDefinition/> <RowDefinition/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Text="Load value"/> <TextBlock Text="Name"/>
<TextBox Grid.Column="1" Text="{Binding ForceValue}"/> <TextBox Grid.Column="1" Text="{Binding Name}"/>
<TextBlock Grid.Row="1" Text="Substract ratio"/> <TextBlock Grid.Row="1" Text="Load value"/>
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding LoadRatio, Converter={StaticResource PlainDouble}}"/> <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding ForceValue, Converter={StaticResource ForceConverter}}"/>
<TextBlock Grid.Row="2" Text="Relative applying level"/> <TextBlock Grid.Row="2" Text="Substract ratio"/>
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding RelativeLevel, Converter={StaticResource LengthConverter}}"/> <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding LoadRatio, Converter={StaticResource PlainDouble}}"/>
<TextBlock Grid.Row="3" Text="Force point"/> <TextBlock Grid.Row="3" Text="Relative applying level"/>
<TextBox Grid.Row="3" Grid.Column="1" Text="{Binding ForceCoordinate, Converter={StaticResource LengthConverter}}"/> <TextBox Grid.Row="3" Grid.Column="1" Text="{Binding RelativeLevel, Converter={StaticResource PlainDouble}}"/>
<TextBlock Grid.Row="4" Text="Force point"/>
<TextBox Grid.Row="4" Grid.Column="1" Text="{Binding ForceCoordinate, Converter={StaticResource LengthConverter}}"/>
</Grid> </Grid>
<ContentControl Grid.Row="1" ContentTemplate="{StaticResource OkCancelButtons}" Content="{Binding}"/> <ContentControl Grid.Row="1" ContentTemplate="{StaticResource OkCancelButtons}" Content="{Binding}"/>
</Grid> </Grid>

View File

@@ -6,7 +6,14 @@ namespace StructureHelper.Windows.BeamShears
public class ConcentratedForceViewModel : OkCancelViewModelBase public class ConcentratedForceViewModel : OkCancelViewModelBase
{ {
private readonly IConcentratedForce concenratedForce; private readonly IConcentratedForce concenratedForce;
public string Name
{
get => concenratedForce.Name;
set
{
concenratedForce.Name = value;
}
}
public double ForceCoordinate public double ForceCoordinate
{ {
get => concenratedForce.ForceCoordinate; get => concenratedForce.ForceCoordinate;

View File

@@ -1,12 +1,12 @@
<Window x:Class="StructureHelper.Windows.BeamShears.UniformDistributedLoadView" <Window x:Class="StructureHelper.Windows.BeamShears.DistributedLoadView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:StructureHelper.Windows.BeamShears" xmlns:local="clr-namespace:StructureHelper.Windows.BeamShears"
d:DataContext="{d:DesignInstance local:UniformDistributedLoadViewModel}" d:DataContext="{d:DesignInstance local:DistributedLoadViewModel}"
mc:Ignorable="d" mc:Ignorable="d"
Title="Uniformly Distributed Load" Height="200" Width="300" ResizeMode="NoResize" WindowStartupLocation="CenterOwner"> Title="Uniformly Distributed Load" Height="250" Width="300" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition/> <RowDefinition/>
@@ -23,18 +23,21 @@
<RowDefinition Height="25"/> <RowDefinition Height="25"/>
<RowDefinition Height="25"/> <RowDefinition Height="25"/>
<RowDefinition Height="25"/> <RowDefinition Height="25"/>
<RowDefinition Height="25"/>
<RowDefinition/> <RowDefinition/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Text="Load value"/> <TextBlock Text="Name"/>
<TextBox Grid.Column="1" Text="{Binding LoadValue}"/> <TextBox Grid.Column="1" Text="{Binding Name}"/>
<TextBlock Grid.Row="1" Text="Substract ratio"/> <TextBlock Grid.Row="1" Text="Load value"/>
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding LoadRatio, Converter={StaticResource PlainDouble}}"/> <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding LoadValue, Converter={StaticResource DistributedLoadConverter}}"/>
<TextBlock Grid.Row="2" Text="Relative applying level"/> <TextBlock Grid.Row="2" Text="Substract ratio"/>
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding RelativeLevel, Converter={StaticResource LengthConverter}}"/> <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding LoadRatio, Converter={StaticResource PlainDouble}}"/>
<TextBlock Grid.Row="3" Text="Start point"/> <TextBlock Grid.Row="3" Text="Relative applying level"/>
<TextBox Grid.Row="3" Grid.Column="1" Text="{Binding StartCoordinate, Converter={StaticResource LengthConverter}}"/> <TextBox Grid.Row="3" Grid.Column="1" Text="{Binding RelativeLevel, Converter={StaticResource PlainDouble}}"/>
<TextBlock Grid.Row="4" Text="End point"/> <TextBlock Grid.Row="4" Text="Start point"/>
<TextBox Grid.Row="4" Grid.Column="1" Text="{Binding EndCoordinate, Converter={StaticResource LengthConverter}}"/> <TextBox Grid.Row="4" Grid.Column="1" Text="{Binding StartCoordinate, Converter={StaticResource LengthConverter}}"/>
<TextBlock Grid.Row="5" Text="End point"/>
<TextBox Grid.Row="5" Grid.Column="1" Text="{Binding EndCoordinate, Converter={StaticResource LengthConverter}}"/>
</Grid> </Grid>
<ContentControl Grid.Row="1" ContentTemplate="{StaticResource OkCancelButtons}" Content="{Binding}"/> <ContentControl Grid.Row="1" ContentTemplate="{StaticResource OkCancelButtons}" Content="{Binding}"/>
</Grid> </Grid>

View File

@@ -0,0 +1,25 @@
using StructureHelperCommon.Models.Forces;
using System.Windows;
namespace StructureHelper.Windows.BeamShears
{
/// <summary>
/// Interaction logic for UniformDistributedLoadView.xaml
/// </summary>
public partial class DistributedLoadView : Window
{
private readonly DistributedLoadViewModel viewModel;
public DistributedLoadView(DistributedLoadViewModel viewModel)
{
InitializeComponent();
this.viewModel = viewModel;
this.DataContext = this.viewModel;
this.viewModel.ParentWindow = this;
}
public DistributedLoadView(IDistributedLoad distributedLoad) : this(new DistributedLoadViewModel(distributedLoad))
{
}
}
}

View File

@@ -8,10 +8,18 @@ using System.Threading.Tasks;
namespace StructureHelper.Windows.BeamShears namespace StructureHelper.Windows.BeamShears
{ {
public class UniformDistributedLoadViewModel : OkCancelViewModelBase public class DistributedLoadViewModel : OkCancelViewModelBase
{ {
private readonly IDistributedLoad distributedLoad; private readonly IDistributedLoad distributedLoad;
public string Name
{
get => distributedLoad.Name;
set
{
distributedLoad.Name = value;
}
}
public double LoadRatio public double LoadRatio
{ {
get => distributedLoad.LoadRatio; get => distributedLoad.LoadRatio;
@@ -22,10 +30,10 @@ namespace StructureHelper.Windows.BeamShears
} }
public double LoadValue public double LoadValue
{ {
get => distributedLoad.LoadValue * -1; get => distributedLoad.LoadValue;
set set
{ {
distributedLoad.LoadValue = value * -1; distributedLoad.LoadValue = value;
} }
} }
public double RelativeLevel public double RelativeLevel
@@ -63,7 +71,7 @@ namespace StructureHelper.Windows.BeamShears
} }
} }
public UniformDistributedLoadViewModel(IDistributedLoad distributedLoad) public DistributedLoadViewModel(IDistributedLoad distributedLoad)
{ {
this.distributedLoad = distributedLoad; this.distributedLoad = distributedLoad;
} }

View File

@@ -1,37 +0,0 @@
using StructureHelperCommon.Models.Forces;
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.BeamShears
{
/// <summary>
/// Interaction logic for UniformDistributedLoadView.xaml
/// </summary>
public partial class UniformDistributedLoadView : Window
{
private readonly UniformDistributedLoadViewModel viewModel;
public UniformDistributedLoadView(UniformDistributedLoadViewModel viewModel)
{
InitializeComponent();
this.viewModel = viewModel;
this.DataContext = this.viewModel;
this.viewModel.ParentWindow = this;
}
public UniformDistributedLoadView(IDistributedLoad distributedLoad) : this(new UniformDistributedLoadViewModel(distributedLoad))
{
}
}
}

View File

@@ -7,6 +7,7 @@
Stress, Stress,
Force, Force,
Moment, Moment,
Curvature Curvature,
DistributedLoad
} }
} }

View File

@@ -1,9 +1,9 @@
using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Infrastructures.Interfaces;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; //Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia
using System.Threading.Tasks; //All rights reserved.
namespace StructureHelperCommon.Models.Forces.BeamShearActions namespace StructureHelperCommon.Models.Forces.BeamShearActions
{ {
@@ -20,7 +20,7 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions
///<inheritdoc/> ///<inheritdoc/>
public IFactoredCombinationProperty FactoredCombinationProperty { get; } = new FactoredCombinationProperty(Guid.NewGuid()); public IFactoredCombinationProperty FactoredCombinationProperty { get; } = new FactoredCombinationProperty(Guid.NewGuid());
///<inheritdoc/> ///<inheritdoc/>
public List<IBeamShearLoad> ShearLoads { get; } public List<IBeamShearLoad> ShearLoads { get; } = new();
public BeamShearAxisAction(Guid id) public BeamShearAxisAction(Guid id)
@@ -31,6 +31,8 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions
public object Clone() public object Clone()
{ {
BeamShearAxisAction beamShearAxisAction = new(Guid.NewGuid()); BeamShearAxisAction beamShearAxisAction = new(Guid.NewGuid());
updateStrategy ??= new BeamShearAxisActionUpdateStrategy();
updateStrategy.Update(beamShearAxisAction, this);
return beamShearAxisAction; return beamShearAxisAction;
} }
} }

View File

@@ -0,0 +1,64 @@
using StructureHelperCommon.Infrastructures.Exceptions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia
//All rights reserved.
namespace StructureHelperCommon.Models.Forces.BeamShearActions
{
public enum ShearActionTypes
{
DistributedLoad
}
/// <summary>
/// Generates beam shear action with default settings
/// </summary>
public static class BeamShearActionFactory
{
public static IBeamShearAction GetBeamShearAction(ShearActionTypes actionType)
{
if (actionType == ShearActionTypes.DistributedLoad)
{
return GetDistributedLoad();
}
else
{
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(actionType));
}
}
private static IBeamShearAction GetDistributedLoad()
{
BeamShearAction beamShearAction = new(Guid.NewGuid())
{
Name = "Beam shear action"
};
SetAction(beamShearAction.XAxisShearAction, 0);
SetFactors(beamShearAction.XAxisShearAction);
beamShearAction.XAxisShearAction.ShearLoads.Clear();
SetAction(beamShearAction.YAxisShearAction, 1e5);
SetFactors(beamShearAction.YAxisShearAction);
return beamShearAction;
}
private static void SetAction(IBeamShearAxisAction beamShearAxisAction, double supportForce)
{
beamShearAxisAction.SupportShearForce = 1e5;
IBeamShearLoad distributedLoad = BeamShearLoadFactory.GetBeamShearLoad(ShearLoadTypes.DistributedLoad);
beamShearAxisAction.ShearLoads.Add(distributedLoad);
}
private static void SetFactors(IBeamShearAxisAction beamShearAxisAction)
{
beamShearAxisAction.FactoredCombinationProperty.LimitState = Infrastructures.Enums.LimitStates.ULS;
beamShearAxisAction.FactoredCombinationProperty.CalcTerm = Infrastructures.Enums.CalcTerms.ShortTerm;
beamShearAxisAction.FactoredCombinationProperty.LongTermFactor = 0.95;
beamShearAxisAction.FactoredCombinationProperty.ULSFactor = 1.2;
}
}
}

View File

@@ -0,0 +1,59 @@
using StructureHelperCommon.Infrastructures.Exceptions;
using System;
//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia
//All rights reserved.
namespace StructureHelperCommon.Models.Forces.BeamShearActions
{
public enum ShearLoadTypes
{
DistributedLoad,
ConcentratedForce
}
public static class BeamShearLoadFactory
{
public static IBeamShearLoad GetBeamShearLoad(ShearLoadTypes loadType)
{
if (loadType == ShearLoadTypes.DistributedLoad)
{
return GetDistributedLoad();
}
else if (loadType == ShearLoadTypes.ConcentratedForce)
{
return GetConcentratedForce();
}
else
{
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(loadType));
}
}
private static ConcentratedForce GetConcentratedForce()
{
ConcentratedForce concentratedForce = new(Guid.NewGuid())
{
Name = "Concentrated force",
ForceValue = -5e4,
LoadRatio = 1,
RelativeLoadLevel = 0.5,
ForceCoordinate = 1
};
return concentratedForce;
}
private static DistributedLoad GetDistributedLoad()
{
DistributedLoad distributedLoad = new(Guid.NewGuid())
{
Name = "Distributed load",
LoadValue = -5e3,
LoadRatio = 1,
RelativeLoadLevel = 0.5,
StartCoordinate = 0,
EndCoordinate = 100
};
return distributedLoad;
}
}
}

View File

@@ -24,6 +24,7 @@ namespace StructureHelperCommon.Services.Units
{ UnitTypes.Moment, "kNm"}, { UnitTypes.Moment, "kNm"},
{ UnitTypes.Stress, "MPa"}, { UnitTypes.Stress, "MPa"},
{ UnitTypes.Curvature, "1/m"}, { UnitTypes.Curvature, "1/m"},
{ UnitTypes.DistributedLoad, "kN/m" },
}; };
} }

View File

@@ -38,6 +38,10 @@ namespace StructureHelperCommon.Services.Units
units.Add(new Unit() { UnitType = type, Name = "1/m", Multiplyer = 1d }); units.Add(new Unit() { UnitType = type, Name = "1/m", Multiplyer = 1d });
units.Add(new Unit() { UnitType = type, Name = "1/mm", Multiplyer = 1e-3d }); units.Add(new Unit() { UnitType = type, Name = "1/mm", Multiplyer = 1e-3d });
units.Add(new Unit() { UnitType = type, Name = "1/cm", Multiplyer = 1e-2d }); units.Add(new Unit() { UnitType = type, Name = "1/cm", Multiplyer = 1e-2d });
type = UnitTypes.DistributedLoad;
units.Add(new Unit() { UnitType = type, Name = "N/m", Multiplyer = 1d });
units.Add(new Unit() { UnitType = type, Name = "kN/m", Multiplyer = 1e-3d });
units.Add(new Unit() { UnitType = type, Name = "MN/m", Multiplyer = 1e-6d });
return units; return units;
} }
} }

View File

@@ -1,5 +1,6 @@
using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Models.Forces; using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models.Forces.BeamShearActions;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -29,6 +30,9 @@ namespace StructureHelperLogics.Models.BeamShears
private static IBeamShearRepository GetRectangleSection() private static IBeamShearRepository GetRectangleSection()
{ {
BeamShearRepository shearRepository = new(Guid.Empty); BeamShearRepository shearRepository = new(Guid.Empty);
IBeamShearAction shearAction = BeamShearActionFactory.GetBeamShearAction(ShearActionTypes.DistributedLoad);
shearAction.Name = "New shear action";
shearRepository.BeamShearActions.Add(shearAction);
BeamShearSection section = new(Guid.Empty) { Name = "New shear section"}; BeamShearSection section = new(Guid.Empty) { Name = "New shear section"};
shearRepository.ShearSections.Add(section); shearRepository.ShearSections.Add(section);
StirrupByUniformRebar stirrupByUniformRebar = new(Guid.Empty) { Name = "New uniform stirrup"}; StirrupByUniformRebar stirrupByUniformRebar = new(Guid.Empty) { Name = "New uniform stirrup"};