diff --git a/DataAccess/DTOs/DTOEntities/BeamShears/StirrupByDensityDTO.cs b/DataAccess/DTOs/DTOEntities/BeamShears/StirrupByDensityDTO.cs index 22ad14a..cc995f6 100644 --- a/DataAccess/DTOs/DTOEntities/BeamShears/StirrupByDensityDTO.cs +++ b/DataAccess/DTOs/DTOEntities/BeamShears/StirrupByDensityDTO.cs @@ -27,7 +27,8 @@ namespace DataAccess.DTOs Id = id; VisualProperty = new PrimitiveVisualPropertyDTO(Guid.NewGuid()) { - Color = (Color)ColorConverter.ConvertFromString("Black") + Color = (Color)ColorConverter.ConvertFromString("Gray"), + Opacity = 0.5 }; } diff --git a/DataAccess/DTOs/DTOEntities/BeamShears/StirrupByRebarDTO.cs b/DataAccess/DTOs/DTOEntities/BeamShears/StirrupByRebarDTO.cs index 9d3dcf3..252b8d3 100644 --- a/DataAccess/DTOs/DTOEntities/BeamShears/StirrupByRebarDTO.cs +++ b/DataAccess/DTOs/DTOEntities/BeamShears/StirrupByRebarDTO.cs @@ -36,7 +36,8 @@ namespace DataAccess.DTOs Id = id; VisualProperty = new PrimitiveVisualPropertyDTO(Guid.NewGuid()) { - Color = (Color)ColorConverter.ConvertFromString("Brown") + Color = (Color)ColorConverter.ConvertFromString("Brown"), + Opacity = 0.5 }; } diff --git a/StructureHelper/Infrastructure/UI/GraphicalPrimitives/BeamShearSectionPrimitive.cs b/StructureHelper/Infrastructure/UI/GraphicalPrimitives/BeamShearSectionPrimitive.cs index 3200c44..4f75ada 100644 --- a/StructureHelper/Infrastructure/UI/GraphicalPrimitives/BeamShearSectionPrimitive.cs +++ b/StructureHelper/Infrastructure/UI/GraphicalPrimitives/BeamShearSectionPrimitive.cs @@ -17,9 +17,11 @@ namespace StructureHelper.Infrastructure.UI.GraphicalPrimitives public double CenterX { get; set; } = 0; public double CenterY { get; set; } = 0; public double FullDepth => inclinedSection.FullDepth; - public double EffectiveDepth => inclinedSection.EffectiveDepth; - public double BottomCover => FullDepth - EffectiveDepth; - public double PositiveLength => inclinedSection.EffectiveDepth * 3.5; + public double WebWidth => inclinedSection.WebWidth; + public double ReinforcementArea => inclinedSection.BeamShearSection.ReinforcementArea; + public double EffectiveDepth => Math.Round(inclinedSection.EffectiveDepth, 3); + public double BottomCover => Math.Round(FullDepth - EffectiveDepth, 3); + public double PositiveLength => 100; public double NegativeLength { get; set; } = -0.1; public double SupportHeight { get; set; } = 0.1; public double SupportWidth { get; set; } = 0.2; @@ -29,6 +31,8 @@ namespace StructureHelper.Infrastructure.UI.GraphicalPrimitives public IPrimitiveVisualProperty VisualProperty => beamShearSection.VisualProperty; + public IBeamShearSection BeamShearSection => beamShearSection; + public BeamShearSectionPrimitive(IBeamShearSection beamShearSection, IInclinedSection inclinedSection) { this.beamShearSection = beamShearSection; diff --git a/StructureHelper/Infrastructure/UI/GraphicalPrimitives/IGraphicalPrimitive.cs b/StructureHelper/Infrastructure/UI/GraphicalPrimitives/IGraphicPrimitive.cs similarity index 100% rename from StructureHelper/Infrastructure/UI/GraphicalPrimitives/IGraphicalPrimitive.cs rename to StructureHelper/Infrastructure/UI/GraphicalPrimitives/IGraphicPrimitive.cs diff --git a/StructureHelper/Infrastructure/UI/GraphicalPrimitives/InclinedSectionPrimitive.cs b/StructureHelper/Infrastructure/UI/GraphicalPrimitives/InclinedSectionPrimitive.cs index 1cc4884..b03fbf7 100644 --- a/StructureHelper/Infrastructure/UI/GraphicalPrimitives/InclinedSectionPrimitive.cs +++ b/StructureHelper/Infrastructure/UI/GraphicalPrimitives/InclinedSectionPrimitive.cs @@ -14,9 +14,11 @@ namespace StructureHelper.Infrastructure.UI.GraphicalPrimitives public double SectionEndX => inclinedSection.EndCoord; public double SectionStartY => inclinedSection.FullDepth - inclinedSection.EffectiveDepth; public double SectionEndY => inclinedSection.FullDepth; - public double FactorOfUsing => source.FactorOfUsing; - public double EffectiveDepth => inclinedSection.EffectiveDepth; + public double FactorOfUsing => Math.Round(source.FactorOfUsing, 4); + public double EffectiveDepth => Math.Round(inclinedSection.EffectiveDepth, 3); public double SpanRatio => (inclinedSection.EndCoord - inclinedSection.StartCoord) / inclinedSection.EffectiveDepth; + public double ActualShearForce => Math.Round(source.InputData.ForceTuple.Qy); + public double UltimateShearForce => Math.Round(source.TotalStrength); public double CenterX => 0; public double CenterY => 0; diff --git a/StructureHelper/Infrastructure/UI/GraphicalPrimitives/StirrupByDensityPrimitive.cs b/StructureHelper/Infrastructure/UI/GraphicalPrimitives/StirrupByDensityPrimitive.cs new file mode 100644 index 0000000..6df83a6 --- /dev/null +++ b/StructureHelper/Infrastructure/UI/GraphicalPrimitives/StirrupByDensityPrimitive.cs @@ -0,0 +1,27 @@ +using StructureHelperCommon.Models.VisualProperties; +using StructureHelperLogics.Models.BeamShears; + +namespace StructureHelper.Infrastructure.UI.GraphicalPrimitives +{ + internal class StirrupByDensityPrimitive : IGraphicalPrimitive + { + public IStirrupByDensity StirrupByDensity { get; } + + public double CenterX => 0; + public double CenterY => 0; + public double StartPoinX => StirrupByDensity.StartCoordinate; + public double BottomPointY => InclinedSection.FullDepth - InclinedSection.EffectiveDepth; + public double TopPointY => InclinedSection.FullDepth; + public double Length => StirrupByDensity.EndCoordinate - StirrupByDensity.StartCoordinate; + public double Depth => InclinedSection.EffectiveDepth; + public IPrimitiveVisualProperty VisualProperty => StirrupByDensity.VisualProperty; + + public IInclinedSection InclinedSection { get; set; } + + public StirrupByDensityPrimitive(IStirrupByDensity stirrupByDensity, IInclinedSection inclinedSection) + { + StirrupByDensity = stirrupByDensity; + this.InclinedSection = inclinedSection; + } + } +} diff --git a/StructureHelper/Infrastructure/UI/GraphicalPrimitives/StirrupByInclinedRebarPrimitive.cs b/StructureHelper/Infrastructure/UI/GraphicalPrimitives/StirrupByInclinedRebarPrimitive.cs new file mode 100644 index 0000000..c8edf7e --- /dev/null +++ b/StructureHelper/Infrastructure/UI/GraphicalPrimitives/StirrupByInclinedRebarPrimitive.cs @@ -0,0 +1,36 @@ +using StructureHelperCommon.Models.VisualProperties; +using StructureHelperLogics.Models.BeamShears; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelper.Infrastructure.UI.GraphicalPrimitives +{ + public class StirrupByInclinedRebarPrimitive : IGraphicalPrimitive + { + private IInclinedSection inclinedSection; + public IStirrupByInclinedRebar StirrupByInclinedRebar { get; } + public double StartPointX => StirrupByInclinedRebar.StartCoordinate; + public double StartPointY => inclinedSection.FullDepth - StirrupByInclinedRebar.CompressedGap; + public double EndPointX => StirrupByInclinedRebar.StartCoordinate + GetRebarLengthX(); + public double EndPointY => inclinedSection.FullDepth - inclinedSection.EffectiveDepth; + + public double CenterX => 0; + public double CenterY => 0; + public IPrimitiveVisualProperty VisualProperty => StirrupByInclinedRebar.VisualProperty; + public StirrupByInclinedRebarPrimitive(IStirrupByInclinedRebar stirrupByInclinedRebar, IInclinedSection inclinedSection) + { + StirrupByInclinedRebar = stirrupByInclinedRebar; + this.inclinedSection = inclinedSection; + } + private double GetRebarLengthX() + { + double angleInRadian = Math.PI * StirrupByInclinedRebar.AngleOfInclination / 180; + double rebarLengthY = inclinedSection.EffectiveDepth - StirrupByInclinedRebar.CompressedGap; + double rebarLengthX = rebarLengthY / Math.Tan(angleInRadian); + return rebarLengthX; + } + } +} diff --git a/StructureHelper/Infrastructure/UI/GraphicalPrimitives/StirrupByRebarPrimitive.cs b/StructureHelper/Infrastructure/UI/GraphicalPrimitives/StirrupByRebarPrimitive.cs new file mode 100644 index 0000000..a943e16 --- /dev/null +++ b/StructureHelper/Infrastructure/UI/GraphicalPrimitives/StirrupByRebarPrimitive.cs @@ -0,0 +1,34 @@ +using StructureHelperCommon.Models.VisualProperties; +using StructureHelperLogics.Models.BeamShears; +using System; + +namespace StructureHelper.Infrastructure.UI.GraphicalPrimitives +{ + public class StirrupByRebarPrimitive : IGraphicalPrimitive + { + private readonly IInclinedSection inclinedSection; + private readonly IStirrupByDensity stirrupByDensity; + + public IStirrupByRebar StirrupByRebar { get; } + public double CenterX => 0; + public double CenterY => 0; + public double StartPoinX => StirrupByRebar.StartCoordinate; + public double BottomPointY => InclinedSection.FullDepth - InclinedSection.EffectiveDepth; + public double TopPointY => InclinedSection.FullDepth; + public double Length => StirrupByRebar.EndCoordinate - StirrupByRebar.StartCoordinate; + public double Depth => InclinedSection.EffectiveDepth; + public double Density => Math.Round(stirrupByDensity.StirrupDensity); + public IPrimitiveVisualProperty VisualProperty => StirrupByRebar.VisualProperty; + + + public IInclinedSection InclinedSection => inclinedSection; + + public StirrupByRebarPrimitive(IStirrupByRebar stirrupByRebar, IInclinedSection inclinedSection) + { + this.StirrupByRebar = stirrupByRebar; + this.inclinedSection = inclinedSection; + var logic = new StirrupByRebarToDensityConvertStrategy(null, inclinedSection); + stirrupByDensity = logic.Convert(stirrupByRebar); + } + } +} diff --git a/StructureHelper/Infrastructure/UI/Resources/BeamShearTemplate.xaml b/StructureHelper/Infrastructure/UI/Resources/BeamShearTemplate.xaml index a317762..524141f 100644 --- a/StructureHelper/Infrastructure/UI/Resources/BeamShearTemplate.xaml +++ b/StructureHelper/Infrastructure/UI/Resources/BeamShearTemplate.xaml @@ -9,9 +9,11 @@ + + + @@ -27,11 +29,14 @@ - - + + + - - + + + + @@ -40,9 +45,25 @@ X2="{Binding PositiveLength}" Y1="{Binding BottomCover}" Y2="{Binding BottomCover}" - Stroke="DarkGray" - StrokeThickness="0.02" - /> + Stroke="Black" + StrokeThickness="0.012" + > + + + + + + + + + + + + + + + + + @@ -68,7 +90,7 @@ X2="{Binding SectionEndX}" Y1="{Binding SectionStartY}" Y2="{Binding SectionEndY}" - StrokeThickness="0.02" + StrokeThickness="0.01" > @@ -86,18 +108,25 @@ + + - + - + - - - - - - + + + + + + + + + + + @@ -106,7 +135,155 @@ X2="{Binding SectionStartX}" Y1="0" Y2="{Binding SectionStartY}" - StrokeThickness="0.02" + StrokeThickness="0.01" + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/StructureHelper/Windows/BeamShears/SectionResultToGraphicalPrimitivesConvertLogic.cs b/StructureHelper/Windows/BeamShears/SectionResultToGraphicalPrimitivesConvertLogic.cs index 2b2bedd..bf9cd60 100644 --- a/StructureHelper/Windows/BeamShears/SectionResultToGraphicalPrimitivesConvertLogic.cs +++ b/StructureHelper/Windows/BeamShears/SectionResultToGraphicalPrimitivesConvertLogic.cs @@ -1,20 +1,33 @@ using StructureHelper.Infrastructure.UI.GraphicalPrimitives; +using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperLogics.Models.BeamShears; +using System; using System.Collections.Generic; namespace StructureHelper.Windows.BeamShears { public class SectionResultToGraphicalPrimitivesConvertLogic : IObjectConvertStrategy, IBeamShearSectionLogicResult> { + private IObjectConvertStrategy, IStirrup> stirrupLogic; + private IInclinedSection inclinedSection; + public List Convert(IBeamShearSectionLogicResult source) { + inclinedSection = source.InputData.InclinedSection; + InitializeStrategies(); List graphicalPrimitives = new List(); - BeamShearSectionPrimitive beamShearSectionPrimitive = new(source.InputData.InclinedSection.BeamShearSection, source.InputData.InclinedSection); + BeamShearSectionPrimitive beamShearSectionPrimitive = new(source.InputData.InclinedSection.BeamShearSection, inclinedSection); graphicalPrimitives.Add(beamShearSectionPrimitive); + graphicalPrimitives.AddRange(stirrupLogic.Convert(source.InputData.Stirrup)); InclinedSectionPrimitive inclinedSectionPrimitive = new(source); graphicalPrimitives.Add((inclinedSectionPrimitive)); return graphicalPrimitives; } + + private void InitializeStrategies() + { + stirrupLogic ??= new StirrupToGraphicPrimitiveConvertLogic(inclinedSection); + } } } diff --git a/StructureHelper/Windows/BeamShears/StirrupToGraphicPrimitiveConvertLogic.cs b/StructureHelper/Windows/BeamShears/StirrupToGraphicPrimitiveConvertLogic.cs new file mode 100644 index 0000000..6ebd281 --- /dev/null +++ b/StructureHelper/Windows/BeamShears/StirrupToGraphicPrimitiveConvertLogic.cs @@ -0,0 +1,68 @@ +using StructureHelper.Infrastructure.UI.GraphicalPrimitives; +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperLogics.Models.BeamShears; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelper.Windows.BeamShears +{ + internal class StirrupToGraphicPrimitiveConvertLogic : IObjectConvertStrategy, IStirrup> + { + private IInclinedSection inclinedSection; + private List primitives; + + public StirrupToGraphicPrimitiveConvertLogic(IInclinedSection inclinedSection) + { + this.inclinedSection = inclinedSection; + } + + public List Convert(IStirrup source) + { + primitives = new List(); + GetStirrupPrimitives(source); + return primitives; + } + + private void GetStirrupPrimitives(IStirrup source) + { + if (source is IHasStirrups hasStirrup) //if stirrup group + { + foreach (var item in hasStirrup.Stirrups) + { + GetStirrupPrimitives(item); //recursion for stirrup group + } + } + else + { + GetStirrupPrimitive(source); + } + } + + private void GetStirrupPrimitive(IStirrup stirrup) + { + if (stirrup is IStirrupByRebar stirrupByRebar) + { + StirrupByRebarPrimitive stirrupByRebarPrimitive = new(stirrupByRebar, inclinedSection); + primitives.Add(stirrupByRebarPrimitive); + } + else if (stirrup is IStirrupByDensity stirrupByDensity) + { + StirrupByDensityPrimitive stirrupByDensityPrimitive = new(stirrupByDensity, inclinedSection); + primitives.Add(stirrupByDensityPrimitive); + } + else if (stirrup is IStirrupByInclinedRebar stirrupByInclinedRebar) + { + StirrupByInclinedRebarPrimitive stirrupByInclinedRebarPrimitive = new(stirrupByInclinedRebar, inclinedSection); + primitives.Add(stirrupByInclinedRebarPrimitive); + } + else + { + throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(stirrup)); + } + } + } +} diff --git a/StructureHelper/Windows/UserControls/WorkPlanes/PrimitiveCollectionViewModel.cs b/StructureHelper/Windows/UserControls/WorkPlanes/PrimitiveCollectionViewModel.cs index 8b4cf30..444686c 100644 --- a/StructureHelper/Windows/UserControls/WorkPlanes/PrimitiveCollectionViewModel.cs +++ b/StructureHelper/Windows/UserControls/WorkPlanes/PrimitiveCollectionViewModel.cs @@ -1,12 +1,6 @@ using StructureHelper.Infrastructure; using StructureHelper.Infrastructure.UI.GraphicalPrimitives; -using StructureHelperLogics.Models.Primitives; -using System; -using System.Collections.Generic; using System.Collections.ObjectModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace StructureHelper.Windows.UserControls.WorkPlanes { diff --git a/StructureHelper/Windows/UserControls/WorkPlanes/PrimitiveTemplateSelector.cs b/StructureHelper/Windows/UserControls/WorkPlanes/PrimitiveTemplateSelector.cs index 327eb6a..411281c 100644 --- a/StructureHelper/Windows/UserControls/WorkPlanes/PrimitiveTemplateSelector.cs +++ b/StructureHelper/Windows/UserControls/WorkPlanes/PrimitiveTemplateSelector.cs @@ -1,10 +1,4 @@ -using FieldVisualizer.Entities.Values.Primitives; -using StructureHelper.Infrastructure.UI.GraphicalPrimitives; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using StructureHelper.Infrastructure.UI.GraphicalPrimitives; using System.Windows; using System.Windows.Controls; @@ -14,7 +8,9 @@ namespace StructureHelper.Windows.UserControls.WorkPlanes { public DataTemplate BeamShearSectionTemplate { get; set; } public DataTemplate InclinedSectionTemplate { get; set; } - public DataTemplate BeamShearStirrupByRebarTemplate { get; set; } + public DataTemplate StirrupByRebarTemplate { get; set; } + public DataTemplate StirrupByDensityTemplate { get; set; } + public DataTemplate StirrupByInclinedRebarTemplate { get; set; } public override DataTemplate SelectTemplate(object item, DependencyObject container) { @@ -22,6 +18,9 @@ namespace StructureHelper.Windows.UserControls.WorkPlanes { BeamShearSectionPrimitive => BeamShearSectionTemplate, InclinedSectionPrimitive => InclinedSectionTemplate, + StirrupByRebarPrimitive => StirrupByRebarTemplate, + StirrupByDensityPrimitive => StirrupByDensityTemplate, + StirrupByInclinedRebarPrimitive => StirrupByInclinedRebarTemplate, _ => base.SelectTemplate(item, container) }; } diff --git a/StructureHelper/Windows/UserControls/WorkPlanes/WorkPlaneConfigViewModel.cs b/StructureHelper/Windows/UserControls/WorkPlanes/WorkPlaneConfigViewModel.cs index f2e185f..26add45 100644 --- a/StructureHelper/Windows/UserControls/WorkPlanes/WorkPlaneConfigViewModel.cs +++ b/StructureHelper/Windows/UserControls/WorkPlanes/WorkPlaneConfigViewModel.cs @@ -110,7 +110,7 @@ namespace StructureHelper.Windows.UserControls.WorkPlanes ZoomCenterY *= zoomFactor;// position.Y / NegativeScaleValue;// - CenterOffsetY; // Update scale - ScaleValue *= zoomFactor; + ScaleValue = Math.Round(ScaleValue * zoomFactor); } public double AxisFontSize diff --git a/StructureHelper/Windows/UserControls/WorkPlanes/WorkPlaneRoot.xaml b/StructureHelper/Windows/UserControls/WorkPlanes/WorkPlaneRoot.xaml index 0bd7e2e..793e938 100644 --- a/StructureHelper/Windows/UserControls/WorkPlanes/WorkPlaneRoot.xaml +++ b/StructureHelper/Windows/UserControls/WorkPlanes/WorkPlaneRoot.xaml @@ -63,6 +63,9 @@ diff --git a/StructureHelperLogics/Models/BeamShears/StirrupByDensity.cs b/StructureHelperLogics/Models/BeamShears/StirrupByDensity.cs index ae87dfa..2593e0c 100644 --- a/StructureHelperLogics/Models/BeamShears/StirrupByDensity.cs +++ b/StructureHelperLogics/Models/BeamShears/StirrupByDensity.cs @@ -21,7 +21,8 @@ namespace StructureHelperLogics.Models.BeamShears Id = id; VisualProperty = new PrimitiveVisualProperty(Guid.NewGuid()) { - Color = (Color)ColorConverter.ConvertFromString("Gray") + Color = (Color)ColorConverter.ConvertFromString("Gray"), + Opacity = 0.5 }; } diff --git a/StructureHelperLogics/Models/BeamShears/StirrupByRebar.cs b/StructureHelperLogics/Models/BeamShears/StirrupByRebar.cs index 6701d37..9ce2f17 100644 --- a/StructureHelperLogics/Models/BeamShears/StirrupByRebar.cs +++ b/StructureHelperLogics/Models/BeamShears/StirrupByRebar.cs @@ -74,7 +74,8 @@ namespace StructureHelperLogics.Models.BeamShears Material = HeadMaterialFactory.GetHeadMaterial(HeadmaterialType.Reinforcement400).HelperMaterial as IReinforcementLibMaterial; VisualProperty = new PrimitiveVisualProperty(Guid.NewGuid()) { - Color = (Color)ColorConverter.ConvertFromString("Brown") + Color = (Color)ColorConverter.ConvertFromString("Brown"), + Opacity = 0.5 }; }