From 215f631bb01f262a7f09ecf1c96549b13e55d8bc Mon Sep 17 00:00:00 2001 From: Evgeny Redikultsev Date: Sun, 16 Nov 2025 21:03:57 +0500 Subject: [PATCH] Change value diagram calculator --- .../BeamShearActionFromDTOConvertStrategy.cs | 6 +- ...amShearAxisActionFromDTOConvertStrategy.cs | 6 +- ...amShearCalculatorFromDTOConvertStrategy.cs | 4 +- .../BeamShearFromDTOConvertStrategy.cs | 4 +- .../BeamSpanLoadFromDTOConvertStrategy.cs | 2 +- ...asBeamShearActionsFromDTOUpdateStrategy.cs | 8 +- .../HasBeamShearActionsToDTOUpdateStrategy.cs | 8 +- ...amShearCalculatorsFromDTOUpdateStrategy.cs | 8 +- ...BeamShearCalculatorsToDTOUpdateStrategy.cs | 8 +- ...sBeamShearSectionsFromDTOUpdateStrategy.cs | 8 +- ...HasBeamShearSectionsToDTORenameStrategy.cs | 8 +- .../HasStirrupsFromDTOUpdateStrategy.cs | 8 +- .../HasStirrupsToDTOUpdateStrategy.cs | 8 +- ...actoredForceTupleFromDTOConvertStrategy.cs | 6 +- ...ForceFactoredListFromDTOConvertStrategy.cs | 2 +- .../HasForceActionsFromDTOUpdateStrategy.cs | 2 +- .../HasVisualPropertyFromDTOUpdateStrategy.cs | 4 +- .../HasVisualPropertyToDTOUpdateStrategy.cs | 4 +- ...erMaterialDTOSafetyFactorUpdateStrategy.cs | 4 +- .../Materials/LibMaterialDTOUpdateStrategy.cs | 4 +- .../HasPrimitivesFromDTOUpdateStrategy.cs | 2 +- .../Point2DRangeFromDTOConvertStrategy.cs | 6 +- ...lculatorInputDataFromDTOConvertStrategy.cs | 6 +- ...CalculatorInputDataToDTOConvertStrategy.cs | 6 +- ...alueDiagramEntityFromDTOConvertStrategy.cs | 6 +- .../ValueDiagramEntityToDTOConvertStrategy.cs | 2 +- .../ValueDiagramCalculatorInputDataDTO.cs | 2 +- .../ValueDiagrams/ValueDiagramEntityDTO.cs | 2 +- .../Documentation/Examples/ValueDiagrams.shpj | 1084 +++++++++++++++++ .../Manuals/Руководство пользователя.docx | Bin 4704460 -> 4741786 bytes .../UI/Resources/ItemEditPanels.xaml | 20 +- StructureHelper/Properties/AssemblyInfo.cs | 4 +- ...alueDiagramCalculatorInputDataViewModel.cs | 2 +- .../ValueDiagramEntityViewModel.cs | 2 +- .../ValueDiagrams/ValueDiagramsViewModel.cs | 6 +- StructureHelper/Windows/Graphs/GraphView.xaml | 4 +- .../CrossSections/ValueDiagramLogic.cs | 5 +- .../SelectPrimitivesView.xaml | 1 + .../Interfaces/BaseUpdateStrategy.cs | 2 +- .../Interfaces/CheckEntityLogic.cs | 21 + .../HasForceActionUpdateCloningStrategy.cs | 6 +- .../Models/Analyses/AnalysisUpdateStrategy.cs | 2 +- .../Analyses/DateVersionUpdateStrategy.cs | 4 +- .../BeamShearActionUpdateStrategy.cs | 8 +- .../BeamShearAxisActionUpdateStrategy.cs | 8 +- .../BeamShearLoadBaseUpdateStrategy.cs | 8 +- .../BeamShearLoadUpdateStrategy.cs | 4 +- .../ConcentratedForceUpdateStrategy.cs | 4 +- .../DistributedLoadUpdateStrategy.cs | 4 +- .../Forces/Logics/ActionUpdateStrategy.cs | 4 +- .../Forces/Logics/CheckForceActionsLogic.cs | 17 +- .../ColumnFilePropertyCloningStrategy.cs | 2 +- .../ColumnFilePropertyUpdateStrategy.cs | 4 +- .../ColumnedFilePropertyUpdateStrategy.cs | 8 +- .../Logics/DesignForceTupleUpdateStrategy.cs | 4 +- ...ctoredCombinationPropertyUpdateStrategy.cs | 4 +- .../FactoredForceTupleUpdateStrategy.cs | 8 +- .../Logics/ForceActionBaseUpdateStrategy.cs | 4 +- .../Logics/ForceActionUpdateStrategy.cs | 4 +- .../ForceCombinationFromFileUpdateStrategy.cs | 8 +- .../ForceCombinationListUpdateStrategy.cs | 2 +- .../Logics/ForceFactoredListUpdateStrategy.cs | 12 +- .../Forces/Logics/ForceTupleUpdateStrategy.cs | 2 +- .../HasForceCombinationUpdateStrategy.cs | 2 +- .../UniformlyDisributedLoadUpdateStrategy.cs | 4 +- .../MaterialPartialFactorUpdateStrategy.cs | 4 +- .../MaterialSafetyFactorBaseUpdateStrategy.cs | 4 +- .../MaterialSafetyFactorUpdateStrategy.cs | 4 +- .../Projects/FileVersionUpdateStrategy.cs | 4 +- .../Models/Projects/ProjectUpdateStrategy.cs | 4 +- .../Logics/CircleShapeUpdateStrategy.cs | 4 +- .../Logics/LinePolygonShapeUpdateStrategy.cs | 2 +- .../Logics/Point2DRangeUpdateStrategy.cs | 6 +- .../Shapes/Logics/Point2DUpdateStrategy.cs | 4 +- .../Logics/RectangleShapeUpdateStrategy.cs | 4 +- .../Shapes/Logics/ShapeUpdateStrategy.cs | 4 +- .../Shapes/Logics/VertexUpdateStrategy.cs | 2 +- .../States/StateCalcTermPairUpdateStrategy.cs | 4 +- .../PrimitiveVisualPropertyUpdateStrategy.cs | 4 +- .../WorkPlanePropertyUpdateStrategy.cs | 4 +- StructureHelperCommon/Services/CheckObject.cs | 10 +- .../Exports/EntitiesToDxfExportLogic.cs | 1 - .../Services/Exports/GetDxfLayerLogic.cs | 3 + .../Exports/ShapesExportToDxfLogic.cs | 3 +- .../BeamShearAnalysisUpdateStrategy.cs | 4 +- .../CrossSectionNdmAnalysisUpdateStrategy.cs | 4 +- .../BeamShears/BeamShearUpdateStrategy.cs | 8 +- .../BeamShearReporitoryClearStrategy.cs | 8 +- .../BeamShearRepositoryAddUpdateStrategy.cs | 4 +- .../Logics/BeamShearSectionUpdateStrategy.cs | 16 +- .../BeamShearCalculatorCloneStrategy.cs | 4 +- ...amShearCalculatorInputDataCloneStrategy.cs | 4 +- .../HasActionsUpdateCloneStrategy.cs | 6 +- .../HasCalculatorsUpdateCloneStrategy.cs | 6 +- .../HasSectionsUpdateCloneStrategy.cs | 6 +- .../HasStirrupsUpdateCloneStrategy.cs | 6 +- .../Logics/GetInclinedSectionListLogic.cs | 4 +- .../HasBeamShearActionUpdateStrategy.cs | 8 +- .../HasBeamShearSectionUpdateStrategy.cs | 8 +- .../Logics/HasStirrupsUpdateStrategy.cs | 8 +- .../Logics/InclinedSectionUpdateStrategy.cs | 4 +- .../Logics/StirrupBaseUpdateStrategy.cs | 8 +- .../Logics/StirrupByDensityUpdateStrategy.cs | 4 +- .../Logics/StirrupByRebarUpdateStrategy.cs | 6 +- .../Logics/StirrupUpdateStrategy.cs | 4 +- .../StirrupByDensityStrengthLogic.cs | 4 +- ...mShearCalculatorInputDataUpdateStrategy.cs | 8 +- .../BeamShearCalculatorUpdateStrategy.cs | 4 +- ...mShearDesignRangePropertyUpdateStrategy.cs | 4 +- ...hearSectionLogicInputDataUpdateStrategy.cs | 4 +- .../StirrupByInclinedRebarUpdateStrategy.cs | 6 +- .../StirrupGroupUpdateStrategy.cs | 8 +- .../CrossSectionCloneStrategy.cs | 4 +- .../CrossSectionRepositoryUpdateStrategy.cs | 4 +- .../CrossSectionUpdateStrategy.cs | 8 +- .../Logics/ConcreteLibUpdateStrategy.cs | 4 +- .../Materials/Logics/ElasticUpdateStrategy.cs | 4 +- .../Materials/Logics/FRUpdateStrategy.cs | 4 +- .../HasMaterialsUpdateCloningStrategy.cs | 6 +- .../Logics/HeadMaterialBaseUpdateStrategy.cs | 4 +- .../Logics/HeadMaterialUpdateStrategy.cs | 4 +- ...lperMaterialSafetyFactorsUpdateStrategy.cs | 4 +- .../Logics/HelperMaterialUpdateStrategy.cs | 4 +- .../Logics/LibMaterialUpdateStrategy.cs | 4 +- .../Logics/RebarSectionUpdateStrategy.cs | 6 +- .../Logics/ReinforcementLibUpdateStrategy.cs | 4 +- .../CrossSections/CalculatorLogic.cs | 6 +- .../ByForces/CheckForceCalculatorInputData.cs | 5 +- .../ForceCalculatorInputDataUpdateStrategy.cs | 2 +- ...CurvesCalculatorInputDataUpdateStrategy.cs | 2 +- ...itCurvesCalculatorUpdateCloningStrategy.cs | 6 +- .../CrackCalculatorUpdateCloningStrategy.cs | 6 +- .../ForceCalculatorUpdateCloningStrategy.cs | 6 +- .../Logics/ForceCalculatorUpdateStrategy.cs | 4 +- .../HasCalculatorsUpdateCloningStrategy.cs | 6 +- .../IValueDiagramCalculatorInputData.cs | 2 +- .../ValueDiagrams/IValueDiagramEntity.cs | 2 +- ...iagramCalculatorInputDataUpdateStrategy.cs | 8 +- .../Logics/ValueDiagramCalculatorLogic.cs | 2 +- ...eDiagramCalculatorUpdateCloningStrategy.cs | 6 +- .../ValueDiagramCalculatorUpdateStrategy.cs | 6 +- .../Logics/ValueDiagramCheckLogic.cs | 30 + .../Logics/ValueDiagramEntityCheckLogic.cs | 46 + .../Logics/ValueDiagramEntityLogic.cs | 10 +- .../ValueDiagramEntityUpdateStrategy.cs | 4 +- .../Logics/ValueDiagramInputDataCheckLogic.cs | 100 ++ .../Logics/ValueDiagramUpdateStrategy.cs | 32 +- .../Analyses/ValueDiagrams/ValueDiagram.cs | 11 +- .../ValueDiagrams/ValueDiagramCalculator.cs | 22 +- .../ValueDiagramCalculatorInputData.cs | 2 +- .../ValueDiagrams/ValueDiagramEntity.cs | 2 +- .../CheckCrackCalculatorInputDataLogic.cs | 5 +- .../Cracking/CrackCalculatorUpdateStrategy.cs | 4 +- .../Cracking/CrackInputDataUpdateStrategy.cs | 4 +- .../UserCrackInputDataUpdateStrategy.cs | 4 +- ...fEntitiesToNdmPrimitivesConvertStrategy.cs | 30 + .../Logics/EllipsePrimitiveUpdateStrategy.cs | 4 +- .../HasPrimitivesUpdateCloningStrategy.cs | 6 +- .../Logics/HasPrimitivesUpdateStrategy.cs | 2 +- .../Logics/NdmElementUpdateStrategy.cs | 2 +- .../Logics/NdmPrimitiveBaseUpdateStrategy.cs | 2 +- .../RectanglePrimitiveUpdateStrategy.cs | 4 +- .../Logics/ShapeNDMPrimitiveUpdateStrategy.cs | 2 +- .../ForceCalculatorTests/RCSectionsTest.cs | 2 +- .../MaterialTests/MaterialStrengthTest.cs | 8 +- .../CheckPrimitiveCollectionLogicTests.cs | 16 + ...asCalculatorsUpdateCloningStrategyTests.cs | 14 +- ...ramCalculatorUpdateCloningStrategyTests.cs | 89 ++ .../ValueDiagramEntityCheckLogicTests.cs | 120 ++ .../ValueDiagramUpdateStrategyTests.cs | 110 ++ 170 files changed, 2108 insertions(+), 387 deletions(-) create mode 100644 StructureHelper/Documentation/Examples/ValueDiagrams.shpj create mode 100644 StructureHelperCommon/Infrastructures/Interfaces/CheckEntityLogic.cs create mode 100644 StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCheckLogic.cs create mode 100644 StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramEntityCheckLogic.cs create mode 100644 StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramInputDataCheckLogic.cs create mode 100644 StructureHelperTests/UnitTests/ValueDiagramsTests/ValueDiagramCalculatorUpdateCloningStrategyTests.cs create mode 100644 StructureHelperTests/UnitTests/ValueDiagramsTests/ValueDiagramEntityCheckLogicTests.cs create mode 100644 StructureHelperTests/UnitTests/ValueDiagramsTests/ValueDiagramUpdateStrategyTests.cs diff --git a/DataAccess/DTOs/Converters/BeamShears/BeamShearActionFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/BeamShearActionFromDTOConvertStrategy.cs index e228194..4c088e6 100644 --- a/DataAccess/DTOs/Converters/BeamShears/BeamShearActionFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/BeamShearActionFromDTOConvertStrategy.cs @@ -29,9 +29,9 @@ namespace DataAccess.DTOs private void CheckObjects(BeamShearActionDTO source) { - CheckObject.IsNull(source); - CheckObject.IsNull(source.ExternalForce); - CheckObject.IsNull(source.SupportAction); + CheckObject.ThrowIfNull(source); + CheckObject.ThrowIfNull(source.ExternalForce); + CheckObject.ThrowIfNull(source.SupportAction); } private void GetNewAction(BeamShearActionDTO source) diff --git a/DataAccess/DTOs/Converters/BeamShears/BeamShearAxisActionFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/BeamShearAxisActionFromDTOConvertStrategy.cs index c9a20fb..bf4b0d1 100644 --- a/DataAccess/DTOs/Converters/BeamShears/BeamShearAxisActionFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/BeamShearAxisActionFromDTOConvertStrategy.cs @@ -18,9 +18,9 @@ namespace DataAccess.DTOs public override BeamShearAxisAction GetNewItem(BeamShearAxisActionDTO source) { - CheckObject.IsNull(source); - CheckObject.IsNull(source.SupportForce); - CheckObject.IsNull(source.ShearLoads); + CheckObject.ThrowIfNull(source); + CheckObject.ThrowIfNull(source.SupportForce); + CheckObject.ThrowIfNull(source.ShearLoads); InitializeStrategies(); GetNewAction(source); return NewItem; diff --git a/DataAccess/DTOs/Converters/BeamShears/BeamShearCalculatorFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/BeamShearCalculatorFromDTOConvertStrategy.cs index 1f7a7e1..3dacd93 100644 --- a/DataAccess/DTOs/Converters/BeamShears/BeamShearCalculatorFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/BeamShearCalculatorFromDTOConvertStrategy.cs @@ -18,8 +18,8 @@ namespace DataAccess.DTOs public override BeamShearCalculator GetNewItem(BeamShearCalculatorDTO source) { - CheckObject.IsNull(source); - CheckObject.IsNull(source.InputData); + CheckObject.ThrowIfNull(source); + CheckObject.ThrowIfNull(source.InputData); GetNewCalculator(source); return NewItem; } diff --git a/DataAccess/DTOs/Converters/BeamShears/BeamShearFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/BeamShearFromDTOConvertStrategy.cs index 9f24310..aee27e1 100644 --- a/DataAccess/DTOs/Converters/BeamShears/BeamShearFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/BeamShearFromDTOConvertStrategy.cs @@ -16,8 +16,8 @@ namespace DataAccess.DTOs public override BeamShear GetNewItem(BeamShearDTO source) { ChildClass = this; - CheckObject.IsNull(source); - CheckObject.IsNull(source.Repository); + CheckObject.ThrowIfNull(source); + CheckObject.ThrowIfNull(source.Repository); GetNewBeamShear(source); return NewItem; } diff --git a/DataAccess/DTOs/Converters/BeamShears/BeamSpanLoadFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/BeamSpanLoadFromDTOConvertStrategy.cs index c92c84f..6a82c2c 100644 --- a/DataAccess/DTOs/Converters/BeamShears/BeamSpanLoadFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/BeamSpanLoadFromDTOConvertStrategy.cs @@ -13,7 +13,7 @@ namespace DataAccess.DTOs public override IBeamSpanLoad GetNewItem(IBeamSpanLoad source) { - CheckObject.IsNull(source); + CheckObject.ThrowIfNull(source); if (source is DistributedLoadDTO distributed) { ProcessDistributed(distributed); diff --git a/DataAccess/DTOs/Converters/BeamShears/HasBeamShearActionsFromDTOUpdateStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/HasBeamShearActionsFromDTOUpdateStrategy.cs index e7b7d9a..9fd70ab 100644 --- a/DataAccess/DTOs/Converters/BeamShears/HasBeamShearActionsFromDTOUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/HasBeamShearActionsFromDTOUpdateStrategy.cs @@ -21,11 +21,11 @@ namespace DataAccess.DTOs public void Update(IHasBeamShearActions targetObject, IHasBeamShearActions sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } - CheckObject.IsNull(sourceObject.Actions); - CheckObject.IsNull(targetObject.Actions); + CheckObject.ThrowIfNull(sourceObject.Actions); + CheckObject.ThrowIfNull(targetObject.Actions); targetObject.Actions.Clear(); foreach (var action in sourceObject.Actions) { diff --git a/DataAccess/DTOs/Converters/BeamShears/HasBeamShearActionsToDTOUpdateStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/HasBeamShearActionsToDTOUpdateStrategy.cs index 7157445..e4b49e0 100644 --- a/DataAccess/DTOs/Converters/BeamShears/HasBeamShearActionsToDTOUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/HasBeamShearActionsToDTOUpdateStrategy.cs @@ -18,11 +18,11 @@ namespace DataAccess.DTOs public void Update(IHasBeamShearActions targetObject, IHasBeamShearActions sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } - CheckObject.IsNull(sourceObject.Actions); - CheckObject.IsNull(targetObject.Actions); + CheckObject.ThrowIfNull(sourceObject.Actions); + CheckObject.ThrowIfNull(targetObject.Actions); targetObject.Actions.Clear(); foreach (var action in sourceObject.Actions) { diff --git a/DataAccess/DTOs/Converters/BeamShears/HasBeamShearCalculatorsFromDTOUpdateStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/HasBeamShearCalculatorsFromDTOUpdateStrategy.cs index c40bedb..0f4842d 100644 --- a/DataAccess/DTOs/Converters/BeamShears/HasBeamShearCalculatorsFromDTOUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/HasBeamShearCalculatorsFromDTOUpdateStrategy.cs @@ -20,11 +20,11 @@ namespace DataAccess.DTOs public void Update(IHasCalculators targetObject, IHasCalculators sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } - CheckObject.IsNull(sourceObject.Calculators); - CheckObject.IsNull(targetObject.Calculators); + CheckObject.ThrowIfNull(sourceObject.Calculators); + CheckObject.ThrowIfNull(targetObject.Calculators); targetObject.Calculators.Clear(); List calculators = GetCalculators(sourceObject.Calculators); targetObject.Calculators.AddRange(calculators); diff --git a/DataAccess/DTOs/Converters/BeamShears/HasBeamShearCalculatorsToDTOUpdateStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/HasBeamShearCalculatorsToDTOUpdateStrategy.cs index d4872c7..51c92c7 100644 --- a/DataAccess/DTOs/Converters/BeamShears/HasBeamShearCalculatorsToDTOUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/HasBeamShearCalculatorsToDTOUpdateStrategy.cs @@ -20,11 +20,11 @@ namespace DataAccess.DTOs public void Update(IHasCalculators targetObject, IHasCalculators sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } - CheckObject.IsNull(sourceObject.Calculators); - CheckObject.IsNull(targetObject.Calculators); + CheckObject.ThrowIfNull(sourceObject.Calculators); + CheckObject.ThrowIfNull(targetObject.Calculators); targetObject.Calculators.Clear(); List calculators = GetCalculators(sourceObject.Calculators); targetObject.Calculators.AddRange(calculators); diff --git a/DataAccess/DTOs/Converters/BeamShears/HasBeamShearSectionsFromDTOUpdateStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/HasBeamShearSectionsFromDTOUpdateStrategy.cs index 55e5a3b..fe0d9d0 100644 --- a/DataAccess/DTOs/Converters/BeamShears/HasBeamShearSectionsFromDTOUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/HasBeamShearSectionsFromDTOUpdateStrategy.cs @@ -20,11 +20,11 @@ namespace DataAccess.DTOs public void Update(IHasBeamShearSections targetObject, IHasBeamShearSections sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } - CheckObject.IsNull(sourceObject.Sections); - CheckObject.IsNull(targetObject.Sections); + CheckObject.ThrowIfNull(sourceObject.Sections); + CheckObject.ThrowIfNull(targetObject.Sections); targetObject.Sections.Clear(); foreach (var section in sourceObject.Sections) { diff --git a/DataAccess/DTOs/Converters/BeamShears/HasBeamShearSectionsToDTORenameStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/HasBeamShearSectionsToDTORenameStrategy.cs index 2fdb240..b159a8a 100644 --- a/DataAccess/DTOs/Converters/BeamShears/HasBeamShearSectionsToDTORenameStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/HasBeamShearSectionsToDTORenameStrategy.cs @@ -19,11 +19,11 @@ namespace DataAccess.DTOs public void Update(IHasBeamShearSections targetObject, IHasBeamShearSections sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } - CheckObject.IsNull(sourceObject.Sections); - CheckObject.IsNull(targetObject.Sections); + CheckObject.ThrowIfNull(sourceObject.Sections); + CheckObject.ThrowIfNull(targetObject.Sections); InitializeStrategies(); targetObject.Sections.Clear(); foreach (var section in sourceObject.Sections) diff --git a/DataAccess/DTOs/Converters/BeamShears/HasStirrupsFromDTOUpdateStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/HasStirrupsFromDTOUpdateStrategy.cs index 32f2fe6..67b5651 100644 --- a/DataAccess/DTOs/Converters/BeamShears/HasStirrupsFromDTOUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/HasStirrupsFromDTOUpdateStrategy.cs @@ -21,11 +21,11 @@ namespace DataAccess.DTOs public void Update(IHasStirrups targetObject, IHasStirrups sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } - CheckObject.IsNull(sourceObject.Stirrups); - CheckObject.IsNull(targetObject.Stirrups); + CheckObject.ThrowIfNull(sourceObject.Stirrups); + CheckObject.ThrowIfNull(targetObject.Stirrups); targetObject.Stirrups.Clear(); List stirrups = GetStirrups(sourceObject.Stirrups); targetObject.Stirrups.AddRange(stirrups); diff --git a/DataAccess/DTOs/Converters/BeamShears/HasStirrupsToDTOUpdateStrategy.cs b/DataAccess/DTOs/Converters/BeamShears/HasStirrupsToDTOUpdateStrategy.cs index a6f10c5..8db9df0 100644 --- a/DataAccess/DTOs/Converters/BeamShears/HasStirrupsToDTOUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/BeamShears/HasStirrupsToDTOUpdateStrategy.cs @@ -21,11 +21,11 @@ namespace DataAccess.DTOs public void Update(IHasStirrups targetObject, IHasStirrups sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } - CheckObject.IsNull(sourceObject.Stirrups); - CheckObject.IsNull(targetObject.Stirrups); + CheckObject.ThrowIfNull(sourceObject.Stirrups); + CheckObject.ThrowIfNull(targetObject.Stirrups); targetObject.Stirrups.Clear(); List stirrups = GetStirrups(sourceObject.Stirrups); targetObject.Stirrups.AddRange(stirrups); diff --git a/DataAccess/DTOs/Converters/Forces/FactoredForceTupleFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/Forces/FactoredForceTupleFromDTOConvertStrategy.cs index d08e26f..1d33b61 100644 --- a/DataAccess/DTOs/Converters/Forces/FactoredForceTupleFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/Forces/FactoredForceTupleFromDTOConvertStrategy.cs @@ -43,9 +43,9 @@ namespace DataAccess.DTOs private static void CheckObjects(FactoredForceTupleDTO source) { - CheckObject.IsNull(source); - CheckObject.IsNull(source.ForceTuple); - CheckObject.IsNull(source.CombinationProperty); + CheckObject.ThrowIfNull(source); + CheckObject.ThrowIfNull(source.ForceTuple); + CheckObject.ThrowIfNull(source.CombinationProperty); } private void InitializeStrategies() diff --git a/DataAccess/DTOs/Converters/Forces/ForceFactoredListFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/Forces/ForceFactoredListFromDTOConvertStrategy.cs index e2792fd..1dac974 100644 --- a/DataAccess/DTOs/Converters/Forces/ForceFactoredListFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/Forces/ForceFactoredListFromDTOConvertStrategy.cs @@ -47,7 +47,7 @@ namespace DataAccess.DTOs private void SetForceTuples(ForceFactoredListDTO source, ForceFactoredList newItem) { - CheckObject.IsNull(newItem.ForceTuples, nameof(newItem.ForceTuples)); + CheckObject.ThrowIfNull(newItem.ForceTuples, nameof(newItem.ForceTuples)); newItem.ForceTuples.Clear(); foreach (var item in source.ForceTuples) { diff --git a/DataAccess/DTOs/Converters/HasForceActionsFromDTOUpdateStrategy.cs b/DataAccess/DTOs/Converters/HasForceActionsFromDTOUpdateStrategy.cs index dfadc88..3a540aa 100644 --- a/DataAccess/DTOs/Converters/HasForceActionsFromDTOUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/HasForceActionsFromDTOUpdateStrategy.cs @@ -21,7 +21,7 @@ namespace DataAccess.DTOs public void Update(IHasForceActions targetObject, IHasForceActions sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.ForceActions.Clear(); foreach (var item in sourceObject.ForceActions) diff --git a/DataAccess/DTOs/Converters/HasVisualPropertyFromDTOUpdateStrategy.cs b/DataAccess/DTOs/Converters/HasVisualPropertyFromDTOUpdateStrategy.cs index 37c180f..e496bd4 100644 --- a/DataAccess/DTOs/Converters/HasVisualPropertyFromDTOUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/HasVisualPropertyFromDTOUpdateStrategy.cs @@ -20,8 +20,8 @@ namespace DataAccess.DTOs public void Update(IHasVisualProperty targetObject, IHasVisualProperty sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } convertStrategy = new DictionaryConvertStrategy( referenceDictionary, diff --git a/DataAccess/DTOs/Converters/HasVisualPropertyToDTOUpdateStrategy.cs b/DataAccess/DTOs/Converters/HasVisualPropertyToDTOUpdateStrategy.cs index 263ff86..e388580 100644 --- a/DataAccess/DTOs/Converters/HasVisualPropertyToDTOUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/HasVisualPropertyToDTOUpdateStrategy.cs @@ -20,8 +20,8 @@ namespace DataAccess.DTOs public void Update(IHasVisualProperty targetObject, IHasVisualProperty sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } convertStrategy = new DictionaryConvertStrategy( referenceDictionary, diff --git a/DataAccess/DTOs/Converters/Materials/HelperMaterialDTOSafetyFactorUpdateStrategy.cs b/DataAccess/DTOs/Converters/Materials/HelperMaterialDTOSafetyFactorUpdateStrategy.cs index 6c99494..abf266f 100644 --- a/DataAccess/DTOs/Converters/Materials/HelperMaterialDTOSafetyFactorUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/Materials/HelperMaterialDTOSafetyFactorUpdateStrategy.cs @@ -28,8 +28,8 @@ namespace DataAccess.DTOs public void Update(IHelperMaterial targetObject, IHelperMaterial sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } if (sourceObject.SafetyFactors is not null) { diff --git a/DataAccess/DTOs/Converters/Materials/LibMaterialDTOUpdateStrategy.cs b/DataAccess/DTOs/Converters/Materials/LibMaterialDTOUpdateStrategy.cs index fb3fca4..0ca08b4 100644 --- a/DataAccess/DTOs/Converters/Materials/LibMaterialDTOUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/Materials/LibMaterialDTOUpdateStrategy.cs @@ -16,8 +16,8 @@ namespace DataAccess.DTOs /// public void Update(ILibMaterial targetObject, ILibMaterial sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } } } diff --git a/DataAccess/DTOs/Converters/NdmCrossSections/HasPrimitivesFromDTOUpdateStrategy.cs b/DataAccess/DTOs/Converters/NdmCrossSections/HasPrimitivesFromDTOUpdateStrategy.cs index 2126812..6db968d 100644 --- a/DataAccess/DTOs/Converters/NdmCrossSections/HasPrimitivesFromDTOUpdateStrategy.cs +++ b/DataAccess/DTOs/Converters/NdmCrossSections/HasPrimitivesFromDTOUpdateStrategy.cs @@ -15,7 +15,7 @@ namespace DataAccess.DTOs.Converters public void Update(IHasPrimitives targetObject, IHasPrimitives sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Primitives.Clear(); foreach (var item in sourceObject.Primitives) diff --git a/DataAccess/DTOs/Converters/Shapes/Point2DRangeFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/Shapes/Point2DRangeFromDTOConvertStrategy.cs index 774ca7e..865d1cc 100644 --- a/DataAccess/DTOs/Converters/Shapes/Point2DRangeFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/Shapes/Point2DRangeFromDTOConvertStrategy.cs @@ -34,9 +34,9 @@ namespace DataAccess.DTOs private static void CheckSourceObject(Point2DRangeDTO source) { - CheckObject.IsNull(source, ": point range source object"); - CheckObject.IsNull(source.StartPoint + ": point range start point"); - CheckObject.IsNull(source.EndPoint + ": point range end point"); + CheckObject.ThrowIfNull(source, ": point range source object"); + CheckObject.ThrowIfNull(source.StartPoint + ": point range start point"); + CheckObject.ThrowIfNull(source.EndPoint + ": point range end point"); } private void InitializeStrategies() diff --git a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataFromDTOConvertStrategy.cs index b0380f7..f4b2b11 100644 --- a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataFromDTOConvertStrategy.cs @@ -27,14 +27,14 @@ namespace DataAccess.DTOs updateStrategy.Update(NewItem, source); ProcessPrimitives(source); ProcessActions(source); - NewItem.Digrams.Clear(); - foreach (var diagram in source.Digrams) + NewItem.Diagrams.Clear(); + foreach (var diagram in source.Diagrams) { if (diagram is not ValueDiagramEntityDTO diagramDTO) { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(diagram)); } - NewItem.Digrams.Add(diagramConvertStrategy.Convert(diagramDTO)); + NewItem.Diagrams.Add(diagramConvertStrategy.Convert(diagramDTO)); } return NewItem; } diff --git a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataToDTOConvertStrategy.cs index 7a64b83..861600a 100644 --- a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataToDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramCalculatorInputDataToDTOConvertStrategy.cs @@ -28,10 +28,10 @@ namespace DataAccess.DTOs updateStrategy.Update(NewItem, source); ProcessPrimitives(source); ProcessActions(source); - NewItem.Digrams.Clear(); - foreach (var diagram in source.Digrams) + NewItem.Diagrams.Clear(); + foreach (var diagram in source.Diagrams) { - NewItem.Digrams.Add(diagramConvertStrategy.Convert(diagram)); + NewItem.Diagrams.Add(diagramConvertStrategy.Convert(diagram)); } return NewItem; } diff --git a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityFromDTOConvertStrategy.cs index 9474ac3..b06ff13 100644 --- a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityFromDTOConvertStrategy.cs @@ -19,11 +19,11 @@ namespace DataAccess.DTOs NewItem = new(source.Id); InitializeStrategies(); updateStrategy.Update(NewItem, source); - if (source.ValueDigram is not ValueDiagramDTO diagramDTO) + if (source.ValueDiagram is not ValueDiagramDTO diagramDTO) { - throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(source.ValueDigram)); + throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(source.ValueDiagram)); } - NewItem.ValueDigram = diagramConvertStrategy.Convert(diagramDTO); + NewItem.ValueDiagram = diagramConvertStrategy.Convert(diagramDTO); return NewItem; } diff --git a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityToDTOConvertStrategy.cs index 193aee0..2bad464 100644 --- a/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityToDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/ValueDiagrams/ValueDiagramEntityToDTOConvertStrategy.cs @@ -18,7 +18,7 @@ namespace DataAccess.DTOs NewItem = new(source.Id); InitializeStrategies(); updateStrategy.Update(NewItem, source); - NewItem.ValueDigram = diagramConvertStrategy.Convert(source.ValueDigram); + NewItem.ValueDiagram = diagramConvertStrategy.Convert(source.ValueDiagram); return NewItem; } diff --git a/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramCalculatorInputDataDTO.cs b/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramCalculatorInputDataDTO.cs index 98dbd75..dc226ff 100644 --- a/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramCalculatorInputDataDTO.cs +++ b/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramCalculatorInputDataDTO.cs @@ -13,7 +13,7 @@ namespace DataAccess.DTOs [JsonProperty("StateTermPair")] public IStateCalcTermPair StateTermPair { get; set; } = new StateCalcTermPairDTO(); [JsonProperty("Diagrams")] - public List Digrams { get; } = []; + public List Diagrams { get; } = []; [JsonProperty("CheckStrainLimits")] public bool CheckStrainLimit { get; set; } = true; [JsonProperty("ForceActions")] diff --git a/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramEntityDTO.cs b/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramEntityDTO.cs index 9cf627b..75f8c50 100644 --- a/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramEntityDTO.cs +++ b/DataAccess/DTOs/DTOEntities/ValueDiagrams/ValueDiagramEntityDTO.cs @@ -12,7 +12,7 @@ namespace DataAccess.DTOs [JsonProperty("IsTaken")] public bool IsTaken { get; set; } [JsonProperty("ValueDiagram")] - public IValueDiagram ValueDigram { get; set; } + public IValueDiagram ValueDiagram { get; set; } public ValueDiagramEntityDTO(Guid id) diff --git a/StructureHelper/Documentation/Examples/ValueDiagrams.shpj b/StructureHelper/Documentation/Examples/ValueDiagrams.shpj new file mode 100644 index 0000000..f989630 --- /dev/null +++ b/StructureHelper/Documentation/Examples/ValueDiagrams.shpj @@ -0,0 +1,1084 @@ +{ + "$id": "1", + "$type": "RootObject", + "FileVersion": { + "Id": "e18f050f-e85a-4ceb-90b6-b5cee389e4a6", + "VersionNumber": 1, + "SubVersionNumber": 4 + }, + "Project": { + "Id": "3261d1f4-a976-45f1-a17a-46174730d6f1", + "VisualAnalyses": { + "$id": "2", + "$type": "ListOfIVisualAnalysis", + "$values": [ + { + "$id": "3", + "$type": "VisualAnalysis", + "Id": "7911a244-8ce2-42d1-8e6a-3a8bd147db0d", + "Analysis": { + "$id": "4", + "$type": "CrossSectionNdmAnalysis", + "Id": "0f3a7ada-3b11-4cbe-96b1-0285805a11b6", + "Name": "New NDM Analysis", + "Tags": "#New group", + "VersionProcessor": { + "$id": "5", + "$type": "VersionProcessor", + "Id": "faaec0bc-2da0-4af8-8e02-b0ec78c44b0d", + "Versions": { + "$type": "ListOfIDateVersion", + "$values": [ + { + "$id": "6", + "$type": "DateVersion", + "Id": "d6459e23-174c-4aa1-84fc-e9e7623d391b", + "DateTime": "2025-11-16T14:25:06.9693914+05:00", + "Comment": "", + "AnalysisVersion": { + "$id": "7", + "$type": "CrossSection", + "Id": "31a2ade6-d9ff-4cb0-888c-889b0304ae6e", + "SectionRepository": { + "$id": "8", + "$type": "CrossSectionRepository", + "Id": "7d24cdf5-ee5a-4507-a11b-86ffecf9828b", + "HeadMaterials": { + "$type": "ListOfIHeadMaterial", + "$values": [ + { + "$id": "9", + "$type": "HeadMaterial", + "Id": "d581c9a3-3731-4a58-bdc5-a40a39a0c908", + "Name": "Concrete", + "Color": "#FFF0F8FF", + "HelperMaterial": { + "$id": "10", + "$type": "ConcreteLibMaterial", + "Id": "493e1d56-34c6-4ed1-99de-1a14ce35aadc", + "RelativeHumidity": 0.55, + "MinAge": 0.0, + "MaxAge": 2207520000.0, + "MaterialEntityId": "32614a91-fc85-4690-aa82-af45e00f7638", + "SafetyFactors": { + "$id": "11", + "$type": "ListOfMaterialSafetyFactor", + "$values": [ + { + "$id": "12", + "$type": "MaterialSafetyFactor", + "Id": "9952731e-393c-494e-98ee-7a7c2994024b", + "Name": "Gamma_b1", + "Take": true, + "Description": "Coefficient for considering long term calculations", + "PartialFactors": { + "$type": "ListOfMaterialPartialFactor", + "$values": [ + { + "$id": "13", + "$type": "MaterialPartialFactor", + "Id": "6af09ad6-02c5-4574-9273-1f1e4bc11729", + "FactorValue": 0.9, + "StressState": 0, + "CalcTerm": 2, + "LimitState": 1 + }, + { + "$id": "14", + "$type": "MaterialPartialFactor", + "Id": "a6aaff05-6f22-40c4-af35-8bbaf27dc7f8", + "FactorValue": 0.9, + "StressState": 1, + "CalcTerm": 2, + "LimitState": 1 + } + ] + } + }, + { + "$id": "15", + "$type": "MaterialSafetyFactor", + "Id": "122a1824-5801-4f2f-be0e-2d23c37d57d7", + "Name": "Gamma_b2", + "Take": false, + "Description": "Coefficient for plain concrete structures", + "PartialFactors": { + "$type": "ListOfMaterialPartialFactor", + "$values": [ + { + "$id": "16", + "$type": "MaterialPartialFactor", + "Id": "fd3ddbae-d793-40fa-85b7-b919f8f0a572", + "FactorValue": 0.9, + "StressState": 1, + "CalcTerm": 1, + "LimitState": 1 + }, + { + "$id": "17", + "$type": "MaterialPartialFactor", + "Id": "a76aa5bc-13d5-42a0-b790-97a61ecff73c", + "FactorValue": 0.9, + "StressState": 1, + "CalcTerm": 2, + "LimitState": 1 + } + ] + } + }, + { + "$id": "18", + "$type": "MaterialSafetyFactor", + "Id": "dcfa829c-a9ca-41c9-855f-219c9a34e9fe", + "Name": "Gamma_b3", + "Take": false, + "Description": "Coefficient for considering bleeding in vertical placement conditionals", + "PartialFactors": { + "$type": "ListOfMaterialPartialFactor", + "$values": [ + { + "$id": "19", + "$type": "MaterialPartialFactor", + "Id": "8b68b30c-3739-42ec-a0e1-dc6d4b4f5e49", + "FactorValue": 0.85, + "StressState": 1, + "CalcTerm": 1, + "LimitState": 1 + }, + { + "$id": "20", + "$type": "MaterialPartialFactor", + "Id": "1961ceb0-d2f5-4346-8a98-b3c5a3675e5b", + "FactorValue": 0.85, + "StressState": 1, + "CalcTerm": 2, + "LimitState": 1 + } + ] + } + } + ] + }, + "TensionForULS": false, + "TensionForSLS": true, + "MaterialLogicId": "b97e8168-76a1-4e24-ae98-9aa38edd1e9a" + } + }, + { + "$id": "21", + "$type": "HeadMaterial", + "Id": "d49275e5-42bc-4bb3-a2d7-cf787671e85c", + "Name": "Reinforcement", + "Color": "#FFFF0000", + "HelperMaterial": { + "$id": "22", + "$type": "ReinforcementLibMaterial", + "Id": "7a0f25a9-b402-45cf-9d85-3dfdf639ffec", + "MaterialEntityId": "ea422282-3465-433c-9b93-c5bbfba5a904", + "SafetyFactors": { + "$id": "23", + "$type": "ListOfMaterialSafetyFactor", + "$values": [] + }, + "MaterialLogicId": "54c4fe40-8f82-4995-8930-81e65e97edb9" + } + } + ] + }, + "ForceActions": { + "$type": "ListOfIForceAction", + "$values": [ + { + "$id": "24", + "$type": "ForceCombinationByFactor_v1_1", + "Id": "585a6086-7487-4a48-9d9e-39af1eb5008c", + "Name": "New Factored Load", + "ForceTuples": { + "$type": "ListOfIForceTuple", + "$values": [ + { + "$id": "25", + "$type": "ForceTuple", + "Id": "3a6481fc-db56-4ff4-ade5-58aba17ee577", + "Mx": -60000.0, + "My": -60000.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + ] + }, + "SetInGravityCenter": true, + "ForcePoint": { + "$id": "26", + "$type": "Point2D", + "Id": "478fc083-40a2-433a-884f-12a94e61fa50", + "X": 0.0, + "Y": 0.0 + }, + "CombinationProperty": { + "$id": "27", + "$type": "ForceFactoredCombinationProperty", + "Id": "7de9dca0-4680-4b92-b9f2-d02942efcd47", + "CalctTerm": 1, + "LimitState": 2, + "LongTermFactor": 1.0, + "ULSFactor": 1.2 + } + }, + { + "$id": "28", + "$type": "ForceCombinationByFactor_v1_1", + "Id": "27baa168-6c84-4fca-8c8e-898e9be9a009", + "Name": "New Factored Load copy", + "ForceTuples": { + "$type": "ListOfIForceTuple", + "$values": [ + { + "$id": "29", + "$type": "ForceTuple", + "Id": "96e80328-98b6-4a7e-bd40-0ab3cb7e8203", + "Mx": -120000.0, + "My": -120000.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + ] + }, + "SetInGravityCenter": true, + "ForcePoint": { + "$id": "30", + "$type": "Point2D", + "Id": "d8912037-f3cb-46e5-b685-88af069b20b1", + "X": 0.0, + "Y": 0.0 + }, + "CombinationProperty": { + "$id": "31", + "$type": "ForceFactoredCombinationProperty", + "Id": "5389d3bf-86ef-4c73-9c51-9209d6587556", + "CalctTerm": 1, + "LimitState": 2, + "LongTermFactor": 1.0, + "ULSFactor": 1.2 + } + }, + { + "$id": "32", + "$type": "ForceCombinationByFactor_v1_1", + "Id": "9f182923-6863-4b3a-887d-a2cb94a79fd2", + "Name": "New Factored Load copy copy", + "ForceTuples": { + "$type": "ListOfIForceTuple", + "$values": [ + { + "$id": "33", + "$type": "ForceTuple", + "Id": "23635866-6046-4c81-86fd-d5a45e85f05d", + "Mx": -180000.0, + "My": -180000.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + ] + }, + "SetInGravityCenter": true, + "ForcePoint": { + "$id": "34", + "$type": "Point2D", + "Id": "23366456-6815-4bb0-ae9c-d5f9b7e96462", + "X": 0.0, + "Y": 0.0 + }, + "CombinationProperty": { + "$id": "35", + "$type": "ForceFactoredCombinationProperty", + "Id": "ce5af934-2498-4e8a-8caf-0ca8ab6c4b8c", + "CalctTerm": 1, + "LimitState": 2, + "LongTermFactor": 1.0, + "ULSFactor": 1.2 + } + }, + { + "$id": "36", + "$type": "ForceCombinationByFactor_v1_1", + "Id": "fc4e1009-28af-45ee-9976-c03a3d4dcc02", + "Name": "New Factored Load copy copy copy", + "ForceTuples": { + "$type": "ListOfIForceTuple", + "$values": [ + { + "$id": "37", + "$type": "ForceTuple", + "Id": "500de536-8865-487c-b41e-7b3e20099fc7", + "Mx": -240000.0, + "My": -240000.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + ] + }, + "SetInGravityCenter": true, + "ForcePoint": { + "$id": "38", + "$type": "Point2D", + "Id": "9af4aa60-dd39-4cc0-9dff-5b285694acdc", + "X": 0.0, + "Y": 0.0 + }, + "CombinationProperty": { + "$id": "39", + "$type": "ForceFactoredCombinationProperty", + "Id": "1625f23b-19ea-45ce-99ab-687e5011814d", + "CalctTerm": 1, + "LimitState": 2, + "LongTermFactor": 1.0, + "ULSFactor": 1.2 + } + } + ] + }, + "Primitives": { + "$type": "ListOfINdmPrimitive", + "$values": [ + { + "$id": "40", + "$type": "RectangleNdmPrimitive", + "Id": "e8798eea-b95c-493b-a46a-c3c5174a054c", + "Name": "Concrete block", + "RectangleShape": { + "$id": "41", + "$type": "RectangleShape", + "Id": "03b4eb9a-b531-4238-93b2-537358ce7710", + "Width": 0.5, + "Height": 0.5 + }, + "NdmElement": { + "$id": "42", + "$type": "NdmElement", + "Id": "e7fde32d-db22-41fb-b7c7-c9297f68d7d6", + "HeadMaterial": { + "$ref": "9" + }, + "Triangulate": true, + "UsersPrestrain": { + "$id": "43", + "$type": "ForceTuple", + "Id": "40a79af8-8bc1-4e15-b66d-8832206ce061", + "Mx": 0.0, + "My": 0.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + }, + "VisualProperty": { + "$id": "44", + "$type": "VisualProperty", + "Id": "c9ee4dfa-6419-492d-8cf1-ec955a40d28f", + "IsVisible": true, + "Color": "#FFFDC99F", + "SetMaterialColor": true, + "ZIndex": 0, + "Opacity": 0.8 + }, + "Center": { + "$id": "45", + "$type": "Point2D", + "Id": "553768e6-5b6c-4d67-bc6f-f9daf9f3aa55", + "X": 0.0, + "Y": 0.0 + }, + "DivisionSize": { + "$id": "46", + "$type": "DivisionSize", + "Id": "67482c21-928a-4eb2-bcba-064120c53715", + "NdmMaxSize": 0.01, + "NdmMinDivision": 10, + "ClearUnderlying": false + }, + "RotationAngle": 0.0 + }, + { + "$id": "47", + "$type": "RebarNdmPrimitive", + "Id": "b48ac75d-2002-43ab-8ece-df8b9a255b64", + "Name": "Left bottom rebar", + "NdmElement": { + "$id": "48", + "$type": "NdmElement", + "Id": "29d0b735-4335-4f3e-b1ad-83a3ea5c7710", + "HeadMaterial": { + "$ref": "21" + }, + "Triangulate": true, + "UsersPrestrain": { + "$id": "49", + "$type": "ForceTuple", + "Id": "83cff6f8-7c9f-4aed-a8a2-ae20fb5b7678", + "Mx": 0.0, + "My": 0.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + }, + "VisualProperty": { + "$id": "50", + "$type": "VisualProperty", + "Id": "8f91b5fd-18f2-4546-9c26-56f9a4054178", + "IsVisible": true, + "Color": "#FF9F1B45", + "SetMaterialColor": true, + "ZIndex": 0, + "Opacity": 1.0 + }, + "Center": { + "$id": "51", + "$type": "Point2D", + "Id": "ffba0d5e-81a8-4d45-afd9-5ed7b6d78e84", + "X": -0.2, + "Y": -0.2 + }, + "RotationAngle": 0.0, + "Area": 0.0004908738521234052, + "HostPrimitive": { + "$ref": "40" + } + }, + { + "$id": "52", + "$type": "RebarNdmPrimitive", + "Id": "6fc9fc17-339b-4c9c-a991-df005fbce3d1", + "Name": "Right bottom rebar", + "NdmElement": { + "$id": "53", + "$type": "NdmElement", + "Id": "aa466813-c42f-4bae-9ead-f00adbd5efa1", + "HeadMaterial": { + "$ref": "21" + }, + "Triangulate": true, + "UsersPrestrain": { + "$id": "54", + "$type": "ForceTuple", + "Id": "a81364d6-4608-4205-ad5a-3f09779be02e", + "Mx": 0.0, + "My": 0.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + }, + "VisualProperty": { + "$id": "55", + "$type": "VisualProperty", + "Id": "a9da6cfa-a7b8-4436-841a-b01eeb3f5294", + "IsVisible": true, + "Color": "#FF9F3806", + "SetMaterialColor": true, + "ZIndex": 0, + "Opacity": 1.0 + }, + "Center": { + "$id": "56", + "$type": "Point2D", + "Id": "8ce34fba-5e0e-481f-ab22-2f3c9613ad2c", + "X": 0.2, + "Y": -0.2 + }, + "RotationAngle": 0.0, + "Area": 0.0004908738521234052, + "HostPrimitive": { + "$ref": "40" + } + }, + { + "$id": "57", + "$type": "RebarNdmPrimitive", + "Id": "0bb528c5-aa6c-4a2f-9660-71604392a9c8", + "Name": "Left top rebar", + "NdmElement": { + "$id": "58", + "$type": "NdmElement", + "Id": "99967c90-dbc5-4755-a0fe-055a9c7084ac", + "HeadMaterial": { + "$ref": "21" + }, + "Triangulate": true, + "UsersPrestrain": { + "$id": "59", + "$type": "ForceTuple", + "Id": "67970826-53bd-4e8a-9889-67d3066bd3d7", + "Mx": 0.0, + "My": 0.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + }, + "VisualProperty": { + "$id": "60", + "$type": "VisualProperty", + "Id": "970ee415-cd4d-43d9-8e9a-02ea7bb2e040", + "IsVisible": true, + "Color": "#FF0DF6D2", + "SetMaterialColor": true, + "ZIndex": 0, + "Opacity": 1.0 + }, + "Center": { + "$id": "61", + "$type": "Point2D", + "Id": "b61e6b44-e191-477d-8610-0b11be0dacc5", + "X": -0.2, + "Y": 0.2 + }, + "RotationAngle": 0.0, + "Area": 0.0004908738521234052, + "HostPrimitive": { + "$ref": "40" + } + }, + { + "$id": "62", + "$type": "RebarNdmPrimitive", + "Id": "5d4bb1e0-c539-4367-ad5e-39b212aefe83", + "Name": "Right top rebar", + "NdmElement": { + "$id": "63", + "$type": "NdmElement", + "Id": "b19844a9-756f-4ea1-984f-ea7d23d8dbfe", + "HeadMaterial": { + "$ref": "21" + }, + "Triangulate": true, + "UsersPrestrain": { + "$id": "64", + "$type": "ForceTuple", + "Id": "5f3668e2-b300-432e-a98e-4677752a91bc", + "Mx": 0.0, + "My": 0.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + }, + "VisualProperty": { + "$id": "65", + "$type": "VisualProperty", + "Id": "8ee9a2f7-0df6-4c7f-ac69-302edfc02ffb", + "IsVisible": true, + "Color": "#FF4CF72D", + "SetMaterialColor": true, + "ZIndex": 0, + "Opacity": 1.0 + }, + "Center": { + "$id": "66", + "$type": "Point2D", + "Id": "dccb0b3b-e6b4-43a7-8321-1072fa203ba7", + "X": 0.2, + "Y": 0.2 + }, + "RotationAngle": 0.0, + "Area": 0.0004908738521234052, + "HostPrimitive": { + "$ref": "40" + } + }, + { + "$id": "67", + "$type": "RebarNdmPrimitive", + "Id": "15eb442a-33d4-4d37-a82c-0232c81a191a", + "Name": "Bottom rebar 1", + "NdmElement": { + "$id": "68", + "$type": "NdmElement", + "Id": "8e8a6d13-0c88-4dd9-8cd7-20e18463dff2", + "HeadMaterial": { + "$ref": "21" + }, + "Triangulate": true, + "UsersPrestrain": { + "$id": "69", + "$type": "ForceTuple", + "Id": "671e3605-1673-4add-b24d-de7f96610e0a", + "Mx": 0.0, + "My": 0.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + }, + "VisualProperty": { + "$id": "70", + "$type": "VisualProperty", + "Id": "844decf0-f532-492e-bbe1-e04d286eb2d1", + "IsVisible": true, + "Color": "#FF027D55", + "SetMaterialColor": true, + "ZIndex": 0, + "Opacity": 1.0 + }, + "Center": { + "$id": "71", + "$type": "Point2D", + "Id": "52aca2f2-88e3-41af-a2a0-431eaee8371c", + "X": 0.0, + "Y": -0.2 + }, + "RotationAngle": 0.0, + "Area": 0.0004908738521234052, + "HostPrimitive": { + "$ref": "40" + } + }, + { + "$id": "72", + "$type": "RebarNdmPrimitive", + "Id": "74a6baed-3694-43da-8f08-5426bb2dce97", + "Name": "Top rebar 1", + "NdmElement": { + "$id": "73", + "$type": "NdmElement", + "Id": "13a308e2-20ce-4621-a378-e807dda90987", + "HeadMaterial": { + "$ref": "21" + }, + "Triangulate": true, + "UsersPrestrain": { + "$id": "74", + "$type": "ForceTuple", + "Id": "10d3ede1-e7c4-42cb-a4f4-ae2e2d24dfa7", + "Mx": 0.0, + "My": 0.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + }, + "VisualProperty": { + "$id": "75", + "$type": "VisualProperty", + "Id": "22f0b643-8c3f-41d9-a891-de511a281a24", + "IsVisible": true, + "Color": "#FF194495", + "SetMaterialColor": true, + "ZIndex": 0, + "Opacity": 1.0 + }, + "Center": { + "$id": "76", + "$type": "Point2D", + "Id": "369ef26b-96d3-4f30-b7c8-daba600deaec", + "X": 0.0, + "Y": 0.2 + }, + "RotationAngle": 0.0, + "Area": 0.0004908738521234052, + "HostPrimitive": { + "$ref": "40" + } + }, + { + "$id": "77", + "$type": "RebarNdmPrimitive", + "Id": "7917ab37-7f16-474a-9984-7ce7179c2e7b", + "Name": "Left point 1", + "NdmElement": { + "$id": "78", + "$type": "NdmElement", + "Id": "d0cd32b5-ec1f-44a1-b83c-c05be9cb3b2c", + "HeadMaterial": { + "$ref": "21" + }, + "Triangulate": true, + "UsersPrestrain": { + "$id": "79", + "$type": "ForceTuple", + "Id": "e0bc38ef-1651-411a-bd96-7db1e0f4ae69", + "Mx": 0.0, + "My": 0.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + }, + "VisualProperty": { + "$id": "80", + "$type": "VisualProperty", + "Id": "39631369-2a29-4531-9fc7-2e01a9db23c0", + "IsVisible": true, + "Color": "#FFEDB24D", + "SetMaterialColor": true, + "ZIndex": 0, + "Opacity": 1.0 + }, + "Center": { + "$id": "81", + "$type": "Point2D", + "Id": "62eb5e35-52ef-4bd1-bc61-5985b3cac7a5", + "X": -0.2, + "Y": 0.0 + }, + "RotationAngle": 0.0, + "Area": 0.0004908738521234052, + "HostPrimitive": { + "$ref": "40" + } + }, + { + "$id": "82", + "$type": "RebarNdmPrimitive", + "Id": "365e0a21-58fe-4cdb-b77b-6f3072bfd047", + "Name": "Right point 1", + "NdmElement": { + "$id": "83", + "$type": "NdmElement", + "Id": "9cb98b36-e216-4613-9bdc-77358cbab2b7", + "HeadMaterial": { + "$ref": "21" + }, + "Triangulate": true, + "UsersPrestrain": { + "$id": "84", + "$type": "ForceTuple", + "Id": "589044d7-4e14-4335-b04b-9b3143e4aff6", + "Mx": 0.0, + "My": 0.0, + "Nz": 0.0, + "Qx": 0.0, + "Qy": 0.0, + "Mz": 0.0 + } + }, + "VisualProperty": { + "$id": "85", + "$type": "VisualProperty", + "Id": "b27d6a93-1776-48ab-8e5a-c8d8e24a5bc7", + "IsVisible": true, + "Color": "#FFEE2390", + "SetMaterialColor": true, + "ZIndex": 0, + "Opacity": 1.0 + }, + "Center": { + "$id": "86", + "$type": "Point2D", + "Id": "f41b8dce-4586-4f07-8086-64d8ecb8a6e3", + "X": 0.2, + "Y": 0.0 + }, + "RotationAngle": 0.0, + "Area": 0.0004908738521234052, + "HostPrimitive": { + "$ref": "40" + } + } + ] + }, + "Calculators": { + "$type": "ListOfICalculator", + "$values": [ + { + "$id": "87", + "$type": "ForceCalculator", + "Id": "f384af28-aad0-4742-85b4-1daada96fbde", + "Name": "New Force Calculator", + "ShowTraceData": false, + "InputData": { + "$id": "88", + "$type": "ForceCalculatorInputData", + "Id": "8bea9b17-6ad8-40ae-9644-911809f01cd3", + "ForceActions": { + "$id": "89", + "$type": "ListOfIForceAction", + "$values": [ + { + "$ref": "24" + } + ] + }, + "Primitives": { + "$id": "90", + "$type": "ListOfINdmPrimitive", + "$values": [ + { + "$ref": "40" + }, + { + "$ref": "47" + }, + { + "$ref": "52" + }, + { + "$ref": "57" + }, + { + "$ref": "62" + }, + { + "$ref": "67" + }, + { + "$ref": "72" + }, + { + "$ref": "77" + }, + { + "$ref": "82" + } + ] + }, + "LimitStatesList": { + "$id": "91", + "$type": "ListOfLimitState", + "$values": [ + 1, + 2 + ] + }, + "CalcTermList": { + "$id": "92", + "$type": "ListOfCalcTerms", + "$values": [ + 1, + 2 + ] + }, + "Accuracy": { + "$id": "93", + "$type": "Accuracy", + "Id": "3a3fd952-6728-4837-b419-fbbc673af383", + "IterationAccuracy": 0.001, + "MaxIterationCount": 1000 + }, + "CompressedMember": { + "$id": "94", + "$type": "CompressedMember", + "Id": "f78e3391-48b6-4bff-91f7-21bc2f79530a", + "Bucling": false, + "GeometryLength": 3.0, + "LengthFactorX": 1.0, + "DiagramFactorX": 1.0, + "LengthFactorY": 1.0, + "DiagramFactorY": 1.0 + }, + "CheckStrainLimit": true + } + }, + { + "$id": "95", + "$type": "CrackCalculator", + "Id": "7f5fa610-dcee-4add-bef4-3d2c311b25d7", + "Name": "New Crack Calculator", + "ShowTraceData": false, + "InputData": { + "$id": "96", + "$type": "CrackCalculatorInputData", + "Id": "85e1acf8-3790-40ba-b1a2-6ed9ae0a95d9", + "ForceActions": { + "$id": "97", + "$type": "ListOfIForceAction", + "$values": [ + { + "$ref": "24" + } + ] + }, + "ForcePrimitives": { + "$id": "98", + "$type": "ListOfINdmPrimitive", + "$values": [ + { + "$ref": "40" + }, + { + "$ref": "47" + }, + { + "$ref": "52" + }, + { + "$ref": "57" + }, + { + "$ref": "62" + }, + { + "$ref": "67" + }, + { + "$ref": "72" + }, + { + "$ref": "77" + }, + { + "$ref": "82" + } + ] + }, + "UserCrackInputData": { + "$id": "99", + "$type": "UserCrackInputData", + "Id": "1b395d98-31be-45b7-bff1-3af8267dc8a3", + "LengthBetweenCracks": 0.4, + "SetLengthBetweenCracks": true, + "SetSofteningFactors": true, + "SofteningFactors": 1.0, + "UltimateLongCrackWidths": 0.0003, + "UltimateShortCrackWidths": 0.0004 + } + } + }, + { + "$id": "100", + "$type": "ValueDiagramCalculator", + "Id": "1eae2bf9-a96d-4bea-bdbd-5239ed5b7abd", + "Name": "New value diagram calcualtor", + "InputData": { + "$id": "101", + "$type": "ValueDiagramCalculatorInputData", + "Id": "a24e18f2-5900-484d-91a7-e65ea2b537ba", + "StateTermPair": { + "$id": "102", + "$type": "StateCalcTermPair", + "LimitState": 2, + "CalcTerm": 1 + }, + "Diagrams": { + "$type": "ListOfValueDiagramEntity", + "$values": [ + { + "$id": "103", + "$type": "ValueDiagramEntity", + "Id": "cd2a05b0-83e9-4640-8da8-0582ba343a77", + "Name": "New diagram", + "IsTaken": true, + "ValueDiagram": { + "$id": "104", + "$type": "ValueDiagram", + "Id": "ea04a8a1-afb1-4645-b7ff-71c5917d3fa2", + "Point2DRange": { + "$id": "105", + "$type": "Point2DRange", + "Id": "2a8e4945-1258-49fe-8276-ea18908101dd", + "StartPoint": { + "$id": "106", + "$type": "Point2D", + "Id": "2e65736b-b564-410f-8514-56ee64fa4898", + "X": -0.25, + "Y": 0.25 + }, + "EndPoint": { + "$id": "107", + "$type": "Point2D", + "Id": "41338bec-72d2-471c-a08b-9f4effa2c9b0", + "X": 0.25, + "Y": -0.25 + } + }, + "StepNumber": 50 + } + } + ] + }, + "CheckStrainLimits": true, + "ForceActions": { + "$type": "ListOfIForceAction", + "$values": [ + { + "$ref": "24" + }, + { + "$ref": "28" + }, + { + "$ref": "32" + }, + { + "$ref": "36" + } + ] + }, + "Primitives": { + "$type": "ListOfINdmPrimitive", + "$values": [ + { + "$ref": "40" + }, + { + "$ref": "47" + }, + { + "$ref": "52" + }, + { + "$ref": "57" + }, + { + "$ref": "62" + }, + { + "$ref": "67" + }, + { + "$ref": "72" + }, + { + "$ref": "77" + }, + { + "$ref": "82" + } + ] + } + }, + "ShowTraceData": false + } + ] + } + }, + "WorkPlaneProperty": { + "$id": "108", + "$type": "WorkPlanePropertyDTO", + "Id": "58e44c10-26e0-413b-a3d6-2b828f6ddc74", + "GridSize": 0.05, + "Width": 1.2, + "Height": 1.2, + "AxisLineThickness": 2.0, + "GridLineThickness": 0.25 + } + } + } + ] + } + }, + "Comment": "", + "Color": "#FF800000" + } + } + ] + } + } +} \ No newline at end of file diff --git a/StructureHelper/Documentation/Manuals/Руководство пользователя.docx b/StructureHelper/Documentation/Manuals/Руководство пользователя.docx index 4097debd22cea89b4847339f6d86a169a50bd5be..80bbffc74dc2d5b0400e3a2b1db7c0841ecb5f7f 100644 GIT binary patch delta 142261 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

Go%j5gef#ag6XLCoLeoE<{yt&XgAsI=WV=N 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àL(m8(;0wB@f>CK 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 delta 104771 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 z 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 diff --git a/StructureHelper/Infrastructure/UI/Resources/ItemEditPanels.xaml b/StructureHelper/Infrastructure/UI/Resources/ItemEditPanels.xaml index 5dd9a5a..697477b 100644 --- a/StructureHelper/Infrastructure/UI/Resources/ItemEditPanels.xaml +++ b/StructureHelper/Infrastructure/UI/Resources/ItemEditPanels.xaml @@ -37,10 +37,22 @@ - - + + diff --git a/StructureHelper/Properties/AssemblyInfo.cs b/StructureHelper/Properties/AssemblyInfo.cs index 8f94f98..f4cce35 100644 --- a/StructureHelper/Properties/AssemblyInfo.cs +++ b/StructureHelper/Properties/AssemblyInfo.cs @@ -49,5 +49,5 @@ using System.Windows; // Можно задать все значения или принять номера сборки и редакции по умолчанию // используя "*", как показано ниже: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2025.07.23.01")] -[assembly: AssemblyFileVersion("2025.07.23.01")] +[assembly: AssemblyVersion("2025.11.17.01")] +[assembly: AssemblyFileVersion("2025.11.17.01")] diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorInputDataViewModel.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorInputDataViewModel.cs index 7e8dddc..ded27c7 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorInputDataViewModel.cs +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramCalculatorInputDataViewModel.cs @@ -32,7 +32,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ValueDiagr this.inputData = inputData; this.repository = repository; StateCalcTermPairViewModel = new(inputData.StateTermPair); - ValueDiagramsViewModel = new(inputData.Digrams); + ValueDiagramsViewModel = new(inputData.Diagrams); CombinationViewModel = SourceTargetFactory.GetSourceTargetVM(repository.ForceActions, inputData.ForceActions); PrimitivesViewModel = SourceTargetFactory.GetSourceTargetVM(repository.Primitives, inputData.Primitives); } diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramEntityViewModel.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramEntityViewModel.cs index 35791e3..c591160 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramEntityViewModel.cs +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramEntityViewModel.cs @@ -31,7 +31,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ValueDiagr public ValueDiagramEntityViewModel(IValueDiagramEntity valueDiagramEntity) { this.valueDiagramEntity = valueDiagramEntity; - ValueDiagram = new(valueDiagramEntity.ValueDigram); + ValueDiagram = new(valueDiagramEntity.ValueDiagram); } } } diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramsViewModel.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramsViewModel.cs index 78b1888..b1ba1dd 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramsViewModel.cs +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ValueDiagrams/ValueDiagramsViewModel.cs @@ -19,9 +19,9 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ValueDiagr IsTaken = true, Name = "New Value Diagram" }; - NewItem.ValueDigram.StepNumber = 50; - NewItem.ValueDigram.Point2DRange.StartPoint.Y = 0.25; - NewItem.ValueDigram.Point2DRange.EndPoint.Y = - 0.25; + NewItem.ValueDiagram.StepNumber = 50; + NewItem.ValueDiagram.Point2DRange.StartPoint.Y = 0.25; + NewItem.ValueDiagram.Point2DRange.EndPoint.Y = - 0.25; base.AddMethod(parameter); } public override void EditMethod(object parameter) diff --git a/StructureHelper/Windows/Graphs/GraphView.xaml b/StructureHelper/Windows/Graphs/GraphView.xaml index 66475e5..d6fe878 100644 --- a/StructureHelper/Windows/Graphs/GraphView.xaml +++ b/StructureHelper/Windows/Graphs/GraphView.xaml @@ -8,7 +8,7 @@ xmlns:uc="clr-namespace:StructureHelper.Windows.UserControls" d:DataContext="{d:DesignInstance local:GraphViewModel}" mc:Ignorable="d" - Title="Graph" Height="650" Width="1000" MinHeight="500" MinWidth="600" MaxHeight="1100" MaxWidth="1800" WindowStartupLocation="CenterScreen"> + Title="Graph" Height="750" Width="1200" MinHeight="500" MinWidth="600" MaxHeight="1100" MaxWidth="1800" WindowStartupLocation="CenterScreen"> @@ -57,7 +57,7 @@ - + diff --git a/StructureHelper/Windows/MainWindow/CrossSections/ValueDiagramLogic.cs b/StructureHelper/Windows/MainWindow/CrossSections/ValueDiagramLogic.cs index 88a3f66..d425cbe 100644 --- a/StructureHelper/Windows/MainWindow/CrossSections/ValueDiagramLogic.cs +++ b/StructureHelper/Windows/MainWindow/CrossSections/ValueDiagramLogic.cs @@ -83,7 +83,8 @@ namespace StructureHelper.Windows.MainWindow.CrossSections } } - data[pointPrimitives.Count, 0] = GetDistance(startPoint, endPoint); + double fullLength = GetDistance(startPoint, endPoint); + data[pointPrimitives.Count, 0] = fullLength; data[pointPrimitives.Count, 1] = endPoint.X; data[pointPrimitives.Count, 2] = endPoint.Y; @@ -91,7 +92,7 @@ namespace StructureHelper.Windows.MainWindow.CrossSections data[pointPrimitives.Count + 1, 1] = startPoint.X; data[pointPrimitives.Count + 1, 2] = startPoint.Y; - data[pointPrimitives.Count, 0] = 0.0; + data[pointPrimitives.Count + 2, 0] = 0.0; data[pointPrimitives.Count + 2, 1] = startPoint.X; data[pointPrimitives.Count + 2, 2] = startPoint.Y; for (int j = 0; j < resultFuncs.Count; j++) diff --git a/StructureHelper/Windows/PrimitivePropertiesWindow/SelectPrimitivesView.xaml b/StructureHelper/Windows/PrimitivePropertiesWindow/SelectPrimitivesView.xaml index 2de2acb..52e42ba 100644 --- a/StructureHelper/Windows/PrimitivePropertiesWindow/SelectPrimitivesView.xaml +++ b/StructureHelper/Windows/PrimitivePropertiesWindow/SelectPrimitivesView.xaml @@ -13,6 +13,7 @@ + diff --git a/StructureHelperCommon/Infrastructures/Interfaces/BaseUpdateStrategy.cs b/StructureHelperCommon/Infrastructures/Interfaces/BaseUpdateStrategy.cs index fdeaa0d..77095a5 100644 --- a/StructureHelperCommon/Infrastructures/Interfaces/BaseUpdateStrategy.cs +++ b/StructureHelperCommon/Infrastructures/Interfaces/BaseUpdateStrategy.cs @@ -12,7 +12,7 @@ namespace StructureHelperCommon.Infrastructures.Interfaces public abstract void Update(T targetObject, T sourceObject); public void Check(T targetObject, T sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; } } diff --git a/StructureHelperCommon/Infrastructures/Interfaces/CheckEntityLogic.cs b/StructureHelperCommon/Infrastructures/Interfaces/CheckEntityLogic.cs new file mode 100644 index 0000000..ea0984e --- /dev/null +++ b/StructureHelperCommon/Infrastructures/Interfaces/CheckEntityLogic.cs @@ -0,0 +1,21 @@ +using StructureHelperCommon.Models; + +namespace StructureHelperCommon.Infrastructures.Interfaces +{ + public abstract class CheckEntityLogic : ICheckEntityLogic where TEntity : class + { + public TEntity Entity { get; set; } + + public virtual string CheckResult { get; set; } = string.Empty; + + public IShiftTraceLogger? TraceLogger { get; set; } + + public abstract bool Check(); + + public virtual void TraceMessage(string errorString) + { + CheckResult += errorString + "\n"; + TraceLogger?.AddMessage(errorString); + } + } +} diff --git a/StructureHelperCommon/Infrastructures/Interfaces/HasForceActionUpdateCloningStrategy.cs b/StructureHelperCommon/Infrastructures/Interfaces/HasForceActionUpdateCloningStrategy.cs index 4f66ed3..64c69a8 100644 --- a/StructureHelperCommon/Infrastructures/Interfaces/HasForceActionUpdateCloningStrategy.cs +++ b/StructureHelperCommon/Infrastructures/Interfaces/HasForceActionUpdateCloningStrategy.cs @@ -21,9 +21,9 @@ namespace StructureHelperCommon.Infrastructures.Interfaces public void Update(IHasForceActions targetObject, IHasForceActions sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.ForceActions.Clear(); foreach (var force in sourceObject.ForceActions) diff --git a/StructureHelperCommon/Models/Analyses/AnalysisUpdateStrategy.cs b/StructureHelperCommon/Models/Analyses/AnalysisUpdateStrategy.cs index bfca454..d560660 100644 --- a/StructureHelperCommon/Models/Analyses/AnalysisUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Analyses/AnalysisUpdateStrategy.cs @@ -12,7 +12,7 @@ namespace StructureHelperCommon.Models.Analyses { public void Update(IAnalysis targetObject, IAnalysis sourceObject) { - CheckObject.IsNull(targetObject, sourceObject, "Analysis Properties"); + CheckObject.ThrowIfNull(targetObject, sourceObject, "Analysis Properties"); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; targetObject.Tags = sourceObject.Tags; diff --git a/StructureHelperCommon/Models/Analyses/DateVersionUpdateStrategy.cs b/StructureHelperCommon/Models/Analyses/DateVersionUpdateStrategy.cs index 9a29d46..11d1403 100644 --- a/StructureHelperCommon/Models/Analyses/DateVersionUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Analyses/DateVersionUpdateStrategy.cs @@ -13,8 +13,8 @@ namespace StructureHelperCommon.Models.Analyses { public void Update(IDateVersion targetObject, IDateVersion sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; targetObject.DateTime = sourceObject.DateTime; } diff --git a/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearActionUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearActionUpdateStrategy.cs index b49a546..62ddfba 100644 --- a/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearActionUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearActionUpdateStrategy.cs @@ -8,14 +8,14 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions private IUpdateStrategy axisActionUpdateStrategy; public void Update(IBeamShearAction targetObject, IBeamShearAction sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; targetObject.ExternalForce = sourceObject.ExternalForce.Clone() as IFactoredForceTuple; InitializeStrategies(); - CheckObject.IsNull(sourceObject.SupportAction); - CheckObject.IsNull(targetObject.SupportAction); + CheckObject.ThrowIfNull(sourceObject.SupportAction); + CheckObject.ThrowIfNull(targetObject.SupportAction); axisActionUpdateStrategy.Update(targetObject.SupportAction, sourceObject.SupportAction); } diff --git a/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearAxisActionUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearAxisActionUpdateStrategy.cs index 98d0073..8078967 100644 --- a/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearAxisActionUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearAxisActionUpdateStrategy.cs @@ -12,15 +12,15 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions private IUpdateStrategy combinationUpdateStrategy; public void Update(IBeamShearAxisAction targetObject, IBeamShearAxisAction sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } InitializeStrategies(); targetObject.Name = sourceObject.Name; targetObject.SupportForce = sourceObject.SupportForce.Clone() as IFactoredForceTuple; - CheckObject.IsNull(targetObject.ShearLoads); + CheckObject.ThrowIfNull(targetObject.ShearLoads); targetObject.ShearLoads.Clear(); - CheckObject.IsNull(sourceObject.ShearLoads); + CheckObject.ThrowIfNull(sourceObject.ShearLoads); foreach (var item in sourceObject.ShearLoads) { IBeamSpanLoad beamShearLoad = item.Clone() as IBeamSpanLoad; diff --git a/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearLoadBaseUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearLoadBaseUpdateStrategy.cs index d0101d2..048f0a6 100644 --- a/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearLoadBaseUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearLoadBaseUpdateStrategy.cs @@ -9,14 +9,14 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions private IUpdateStrategy combinationUpdateStrategy; public void Update(IBeamSpanLoad targetObject, IBeamSpanLoad sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; targetObject.LoadRatio = sourceObject.LoadRatio; targetObject.RelativeLoadLevel = sourceObject.RelativeLoadLevel; - CheckObject.IsNull(sourceObject.CombinationProperty); - CheckObject.IsNull(targetObject.CombinationProperty); + CheckObject.ThrowIfNull(sourceObject.CombinationProperty); + CheckObject.ThrowIfNull(targetObject.CombinationProperty); combinationUpdateStrategy ??= new FactoredCombinationPropertyUpdateStrategy(); combinationUpdateStrategy.Update(targetObject.CombinationProperty, sourceObject.CombinationProperty); } diff --git a/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearLoadUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearLoadUpdateStrategy.cs index 4f250b8..fb96f1c 100644 --- a/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearLoadUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearLoadUpdateStrategy.cs @@ -15,8 +15,8 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions private IUpdateStrategy distributedLoadUpdateStrategy; public void Update(IBeamSpanLoad targetObject, IBeamSpanLoad sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } InitializeStrategies(); UpdateObjects(targetObject, sourceObject); diff --git a/StructureHelperCommon/Models/Forces/BeamShearActions/ConcentratedForceUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/BeamShearActions/ConcentratedForceUpdateStrategy.cs index 9fcc365..147ffff 100644 --- a/StructureHelperCommon/Models/Forces/BeamShearActions/ConcentratedForceUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/BeamShearActions/ConcentratedForceUpdateStrategy.cs @@ -8,8 +8,8 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions private IUpdateStrategy baseUpdateStrategy; public void Update(IConcentratedForce targetObject, IConcentratedForce sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } InitializeStrategies(); baseUpdateStrategy.Update(targetObject, sourceObject); diff --git a/StructureHelperCommon/Models/Forces/BeamShearActions/DistributedLoadUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/BeamShearActions/DistributedLoadUpdateStrategy.cs index ea50b8d..9709446 100644 --- a/StructureHelperCommon/Models/Forces/BeamShearActions/DistributedLoadUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/BeamShearActions/DistributedLoadUpdateStrategy.cs @@ -8,8 +8,8 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions private IUpdateStrategy baseUpdateStrategy; public void Update(IDistributedLoad targetObject, IDistributedLoad sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } InitializeStrategies(); baseUpdateStrategy.Update(targetObject, sourceObject); diff --git a/StructureHelperCommon/Models/Forces/Logics/ActionUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/ActionUpdateStrategy.cs index b0ecd82..b9bb16d 100644 --- a/StructureHelperCommon/Models/Forces/Logics/ActionUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/ActionUpdateStrategy.cs @@ -10,8 +10,8 @@ namespace StructureHelperCommon.Models.Forces public void Update(IAction targetObject, IAction sourceObject) { forceUpdateStrategy ??= new ForceActionUpdateStrategy(); - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; if (targetObject is IForceAction forceAction) diff --git a/StructureHelperCommon/Models/Forces/Logics/CheckForceActionsLogic.cs b/StructureHelperCommon/Models/Forces/Logics/CheckForceActionsLogic.cs index 0972afb..947fcd8 100644 --- a/StructureHelperCommon/Models/Forces/Logics/CheckForceActionsLogic.cs +++ b/StructureHelperCommon/Models/Forces/Logics/CheckForceActionsLogic.cs @@ -1,10 +1,6 @@ -using StructureHelperCommon.Infrastructures.Exceptions; -using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Infrastructures.Interfaces; using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace StructureHelperCommon.Models.Forces.Logics { @@ -15,6 +11,17 @@ namespace StructureHelperCommon.Models.Forces.Logics public string CheckResult => checkResult; public IShiftTraceLogger? TraceLogger { get; set; } + + public CheckForceActionsLogic(IShiftTraceLogger? traceLogger) + { + TraceLogger = traceLogger; + } + + public CheckForceActionsLogic() + { + + } + public IEnumerable Entity { get; set; } public bool Check() diff --git a/StructureHelperCommon/Models/Forces/Logics/ColumnFilePropertyCloningStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/ColumnFilePropertyCloningStrategy.cs index 7e4bcbb..e5d88cf 100644 --- a/StructureHelperCommon/Models/Forces/Logics/ColumnFilePropertyCloningStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/ColumnFilePropertyCloningStrategy.cs @@ -24,7 +24,7 @@ namespace StructureHelperCommon.Models.Forces public IColumnFileProperty GetClone(IColumnFileProperty sourceObject) { - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(sourceObject); if (updateStrategy is null) { updateStrategy = new ColumnFilePropertyUpdateStrategy(); diff --git a/StructureHelperCommon/Models/Forces/Logics/ColumnFilePropertyUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/ColumnFilePropertyUpdateStrategy.cs index 1508e2f..1a302c9 100644 --- a/StructureHelperCommon/Models/Forces/Logics/ColumnFilePropertyUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/ColumnFilePropertyUpdateStrategy.cs @@ -12,8 +12,8 @@ namespace StructureHelperCommon.Models.Forces { public void Update(IColumnFileProperty targetObject, IColumnFileProperty sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; targetObject.SearchingName = sourceObject.SearchingName; diff --git a/StructureHelperCommon/Models/Forces/Logics/ColumnedFilePropertyUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/ColumnedFilePropertyUpdateStrategy.cs index 184f9e8..a711848 100644 --- a/StructureHelperCommon/Models/Forces/Logics/ColumnedFilePropertyUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/ColumnedFilePropertyUpdateStrategy.cs @@ -14,8 +14,8 @@ namespace StructureHelperCommon.Models.Forces /// public void Update(IColumnedFileProperty targetObject, IColumnedFileProperty sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } UpdateObjects(targetObject, sourceObject); } @@ -26,8 +26,8 @@ namespace StructureHelperCommon.Models.Forces targetObject.GlobalFactor = sourceObject.GlobalFactor; targetObject.SkipRowBeforeHeaderCount = sourceObject.SkipRowBeforeHeaderCount; targetObject.SkipRowHeaderCount = sourceObject.SkipRowHeaderCount; - CheckObject.IsNull(targetObject.ColumnProperties); - CheckObject.IsNull(sourceObject.ColumnProperties); + CheckObject.ThrowIfNull(targetObject.ColumnProperties); + CheckObject.ThrowIfNull(sourceObject.ColumnProperties); targetObject.ColumnProperties.Clear(); foreach (var item in sourceObject.ColumnProperties) { diff --git a/StructureHelperCommon/Models/Forces/Logics/DesignForceTupleUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/DesignForceTupleUpdateStrategy.cs index 4914500..02e02b4 100644 --- a/StructureHelperCommon/Models/Forces/Logics/DesignForceTupleUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/DesignForceTupleUpdateStrategy.cs @@ -24,8 +24,8 @@ namespace StructureHelperCommon.Models.Forces.Logics public void Update(IDesignForceTuple targetObject, IDesignForceTuple sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.LimitState = sourceObject.LimitState; targetObject.CalcTerm = sourceObject.CalcTerm; diff --git a/StructureHelperCommon/Models/Forces/Logics/FactoredCombinationPropertyUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/FactoredCombinationPropertyUpdateStrategy.cs index aa69f6f..5d0c0e4 100644 --- a/StructureHelperCommon/Models/Forces/Logics/FactoredCombinationPropertyUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/FactoredCombinationPropertyUpdateStrategy.cs @@ -7,8 +7,8 @@ namespace StructureHelperCommon.Models.Forces.Logics { public void Update(IFactoredCombinationProperty targetObject, IFactoredCombinationProperty sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.LimitState = sourceObject.LimitState; targetObject.ULSFactor = sourceObject.ULSFactor; diff --git a/StructureHelperCommon/Models/Forces/Logics/FactoredForceTupleUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/FactoredForceTupleUpdateStrategy.cs index 61a2015..8aae13f 100644 --- a/StructureHelperCommon/Models/Forces/Logics/FactoredForceTupleUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/FactoredForceTupleUpdateStrategy.cs @@ -12,12 +12,12 @@ namespace StructureHelperCommon.Models.Forces { public void Update(IFactoredForceTuple targetObject, IFactoredForceTuple sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } - CheckObject.IsNull(sourceObject.ForceTuple); + CheckObject.ThrowIfNull(sourceObject.ForceTuple); targetObject.ForceTuple = sourceObject.ForceTuple.Clone() as IForceTuple; - CheckObject.IsNull(sourceObject.CombinationProperty); + CheckObject.ThrowIfNull(sourceObject.CombinationProperty); targetObject.CombinationProperty = sourceObject.CombinationProperty.Clone() as IFactoredCombinationProperty; } } diff --git a/StructureHelperCommon/Models/Forces/Logics/ForceActionBaseUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/ForceActionBaseUpdateStrategy.cs index 1c5cf3f..f2c19e1 100644 --- a/StructureHelperCommon/Models/Forces/Logics/ForceActionBaseUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/ForceActionBaseUpdateStrategy.cs @@ -25,8 +25,8 @@ namespace StructureHelperCommon.Models.Forces public void Update(IForceAction targetObject, IForceAction sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; targetObject.SetInGravityCenter = sourceObject.SetInGravityCenter; diff --git a/StructureHelperCommon/Models/Forces/Logics/ForceActionUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/ForceActionUpdateStrategy.cs index b640b13..9c3cf28 100644 --- a/StructureHelperCommon/Models/Forces/Logics/ForceActionUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/ForceActionUpdateStrategy.cs @@ -42,8 +42,8 @@ namespace StructureHelperCommon.Models.Forces public void Update(IForceAction targetObject, IForceAction sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } forceActionUpdateStrategy.Update(targetObject, sourceObject); UpdateChildProperties(targetObject, sourceObject); diff --git a/StructureHelperCommon/Models/Forces/Logics/ForceCombinationFromFileUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/ForceCombinationFromFileUpdateStrategy.cs index 5707d83..1fc86a8 100644 --- a/StructureHelperCommon/Models/Forces/Logics/ForceCombinationFromFileUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/ForceCombinationFromFileUpdateStrategy.cs @@ -30,14 +30,14 @@ namespace StructureHelperCommon.Models.Forces public void Update(IForceCombinationFromFile targetObject, IForceCombinationFromFile sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } InitializeLogics(); baseUpdateStrategy.Update(targetObject, sourceObject); targetObject.SkipWrongRows = sourceObject.SkipWrongRows; - CheckObject.IsNull(targetObject.CombinationProperty, "Target object combination property"); - CheckObject.IsNull(sourceObject.CombinationProperty, "Source object combination property"); + CheckObject.ThrowIfNull(targetObject.CombinationProperty, "Target object combination property"); + CheckObject.ThrowIfNull(sourceObject.CombinationProperty, "Source object combination property"); combinationPropertyUpdateStrategy.Update(targetObject.CombinationProperty, sourceObject.CombinationProperty); targetObject.ForceFiles.Clear(); foreach (var file in sourceObject.ForceFiles) diff --git a/StructureHelperCommon/Models/Forces/Logics/ForceCombinationListUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/ForceCombinationListUpdateStrategy.cs index 67021ce..9607505 100644 --- a/StructureHelperCommon/Models/Forces/Logics/ForceCombinationListUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/ForceCombinationListUpdateStrategy.cs @@ -25,7 +25,7 @@ namespace StructureHelperCommon.Models.Forces public void Update(IForceCombinationList targetObject, IForceCombinationList sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.DesignForces.Clear(); foreach (var item in sourceObject.DesignForces) diff --git a/StructureHelperCommon/Models/Forces/Logics/ForceFactoredListUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/ForceFactoredListUpdateStrategy.cs index 2582177..4cd8811 100644 --- a/StructureHelperCommon/Models/Forces/Logics/ForceFactoredListUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/ForceFactoredListUpdateStrategy.cs @@ -34,15 +34,15 @@ namespace StructureHelperCommon.Models.Forces } public void Update(IForceFactoredList targetObject, IForceFactoredList sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } forceActionUpdateStrategy.Update(targetObject, sourceObject); - CheckObject.IsNull(sourceObject.CombinationProperty); - CheckObject.IsNull(targetObject.CombinationProperty); + CheckObject.ThrowIfNull(sourceObject.CombinationProperty); + CheckObject.ThrowIfNull(targetObject.CombinationProperty); propertyUpdateStrategy.Update(targetObject.CombinationProperty, sourceObject.CombinationProperty); - CheckObject.IsNull(sourceObject.ForceTuples); - CheckObject.IsNull(targetObject.ForceTuples); + CheckObject.ThrowIfNull(sourceObject.ForceTuples); + CheckObject.ThrowIfNull(targetObject.ForceTuples); targetObject.ForceTuples.Clear(); foreach (var item in sourceObject.ForceTuples) { diff --git a/StructureHelperCommon/Models/Forces/Logics/ForceTupleUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/ForceTupleUpdateStrategy.cs index 25e6381..7227ae7 100644 --- a/StructureHelperCommon/Models/Forces/Logics/ForceTupleUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/ForceTupleUpdateStrategy.cs @@ -13,7 +13,7 @@ namespace StructureHelperCommon.Models.Forces { public void Update(IForceTuple targetObject, IForceTuple sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Mx = sourceObject.Mx; targetObject.My = sourceObject.My; diff --git a/StructureHelperCommon/Models/Forces/Logics/HasForceCombinationUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/HasForceCombinationUpdateStrategy.cs index fb933c3..b510e38 100644 --- a/StructureHelperCommon/Models/Forces/Logics/HasForceCombinationUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/HasForceCombinationUpdateStrategy.cs @@ -7,7 +7,7 @@ namespace StructureHelperCommon.Models.Forces.Logics { public void Update(IHasForceActions targetObject, IHasForceActions sourceObject) { - CheckObject.IsNull(targetObject, sourceObject, "Interface IHasForceCombination"); + CheckObject.ThrowIfNull(targetObject, sourceObject, "Interface IHasForceCombination"); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.ForceActions.Clear(); targetObject.ForceActions.AddRange(sourceObject.ForceActions); diff --git a/StructureHelperCommon/Models/Forces/Logics/UniformlyDisributedLoadUpdateStrategy.cs b/StructureHelperCommon/Models/Forces/Logics/UniformlyDisributedLoadUpdateStrategy.cs index 4ee7f45..475e002 100644 --- a/StructureHelperCommon/Models/Forces/Logics/UniformlyDisributedLoadUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Forces/Logics/UniformlyDisributedLoadUpdateStrategy.cs @@ -12,8 +12,8 @@ namespace StructureHelperCommon.Models.Forces { public void Update(IDistributedLoad targetObject, IDistributedLoad sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; targetObject.LoadValue = sourceObject.LoadValue; diff --git a/StructureHelperCommon/Models/Materials/Libraries/Logics/MaterialPartialFactorUpdateStrategy.cs b/StructureHelperCommon/Models/Materials/Libraries/Logics/MaterialPartialFactorUpdateStrategy.cs index 6abab67..62b8bca 100644 --- a/StructureHelperCommon/Models/Materials/Libraries/Logics/MaterialPartialFactorUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Materials/Libraries/Logics/MaterialPartialFactorUpdateStrategy.cs @@ -12,8 +12,8 @@ namespace StructureHelperCommon.Models.Materials.Libraries { public void Update(IMaterialPartialFactor targetObject, IMaterialPartialFactor sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.LimitState = sourceObject.LimitState; targetObject.StressState = sourceObject.StressState; diff --git a/StructureHelperCommon/Models/Materials/Libraries/Logics/MaterialSafetyFactorBaseUpdateStrategy.cs b/StructureHelperCommon/Models/Materials/Libraries/Logics/MaterialSafetyFactorBaseUpdateStrategy.cs index e7328c6..a4823a4 100644 --- a/StructureHelperCommon/Models/Materials/Libraries/Logics/MaterialSafetyFactorBaseUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Materials/Libraries/Logics/MaterialSafetyFactorBaseUpdateStrategy.cs @@ -12,8 +12,8 @@ namespace StructureHelperCommon.Models.Materials.Libraries { public void Update(IMaterialSafetyFactor targetObject, IMaterialSafetyFactor sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; targetObject.Take = sourceObject.Take; diff --git a/StructureHelperCommon/Models/Materials/Libraries/Logics/MaterialSafetyFactorUpdateStrategy.cs b/StructureHelperCommon/Models/Materials/Libraries/Logics/MaterialSafetyFactorUpdateStrategy.cs index 69b27e8..7c7f75d 100644 --- a/StructureHelperCommon/Models/Materials/Libraries/Logics/MaterialSafetyFactorUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Materials/Libraries/Logics/MaterialSafetyFactorUpdateStrategy.cs @@ -13,8 +13,8 @@ namespace StructureHelperCommon.Models.Materials.Libraries private IUpdateStrategy baseUpdateStrategy = new MaterialSafetyFactorBaseUpdateStrategy(); public void Update(IMaterialSafetyFactor targetObject, IMaterialSafetyFactor sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } baseUpdateStrategy.Update(targetObject, sourceObject); targetObject.PartialFactors.Clear(); diff --git a/StructureHelperCommon/Models/Projects/FileVersionUpdateStrategy.cs b/StructureHelperCommon/Models/Projects/FileVersionUpdateStrategy.cs index 160666a..4b5ae8d 100644 --- a/StructureHelperCommon/Models/Projects/FileVersionUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Projects/FileVersionUpdateStrategy.cs @@ -12,8 +12,8 @@ namespace StructureHelperCommon.Models.Projects { public void Update(IFileVersion targetObject, IFileVersion sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; targetObject.VersionNumber = sourceObject.VersionNumber; targetObject.SubVersionNumber = sourceObject.SubVersionNumber; diff --git a/StructureHelperCommon/Models/Projects/ProjectUpdateStrategy.cs b/StructureHelperCommon/Models/Projects/ProjectUpdateStrategy.cs index f623a74..179df18 100644 --- a/StructureHelperCommon/Models/Projects/ProjectUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Projects/ProjectUpdateStrategy.cs @@ -26,8 +26,8 @@ namespace StructureHelperCommon.Models.Projects public void Update(IProject targetObject, IProject sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.VisualAnalyses.Clear(); foreach (var item in sourceObject.VisualAnalyses) diff --git a/StructureHelperCommon/Models/Shapes/Logics/CircleShapeUpdateStrategy.cs b/StructureHelperCommon/Models/Shapes/Logics/CircleShapeUpdateStrategy.cs index d2c480e..2925f6a 100644 --- a/StructureHelperCommon/Models/Shapes/Logics/CircleShapeUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Shapes/Logics/CircleShapeUpdateStrategy.cs @@ -12,8 +12,8 @@ namespace StructureHelperCommon.Models.Shapes { public void Update(ICircleShape targetObject, ICircleShape sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Diameter = sourceObject.Diameter; } diff --git a/StructureHelperCommon/Models/Shapes/Logics/LinePolygonShapeUpdateStrategy.cs b/StructureHelperCommon/Models/Shapes/Logics/LinePolygonShapeUpdateStrategy.cs index e703fc6..d49718a 100644 --- a/StructureHelperCommon/Models/Shapes/Logics/LinePolygonShapeUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Shapes/Logics/LinePolygonShapeUpdateStrategy.cs @@ -10,7 +10,7 @@ namespace StructureHelperCommon.Models.Shapes public void Update(ILinePolygonShape targetObject, ILinePolygonShape sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } // Update simple properties diff --git a/StructureHelperCommon/Models/Shapes/Logics/Point2DRangeUpdateStrategy.cs b/StructureHelperCommon/Models/Shapes/Logics/Point2DRangeUpdateStrategy.cs index 8cd865b..4bd2f42 100644 --- a/StructureHelperCommon/Models/Shapes/Logics/Point2DRangeUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Shapes/Logics/Point2DRangeUpdateStrategy.cs @@ -8,12 +8,12 @@ namespace StructureHelperCommon.Models.Shapes private IUpdateStrategy pointUpdateStrategy; public void Update(IPoint2DRange targetObject, IPoint2DRange sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } - CheckObject.IsNull(targetObject.StartPoint, ": range start point"); + CheckObject.ThrowIfNull(targetObject.StartPoint, ": range start point"); pointUpdateStrategy ??= new Point2DUpdateStrategy(); pointUpdateStrategy.Update(targetObject.StartPoint, sourceObject.StartPoint); - CheckObject.IsNull(targetObject.EndPoint, ": range end point"); + CheckObject.ThrowIfNull(targetObject.EndPoint, ": range end point"); pointUpdateStrategy.Update(targetObject.EndPoint, sourceObject.EndPoint); } } diff --git a/StructureHelperCommon/Models/Shapes/Logics/Point2DUpdateStrategy.cs b/StructureHelperCommon/Models/Shapes/Logics/Point2DUpdateStrategy.cs index 156c34f..1f156a5 100644 --- a/StructureHelperCommon/Models/Shapes/Logics/Point2DUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Shapes/Logics/Point2DUpdateStrategy.cs @@ -19,8 +19,8 @@ namespace StructureHelperCommon.Models.Shapes /// public void Update(IPoint2D targetObject, IPoint2D sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.X = sourceObject.X; targetObject.Y = sourceObject.Y; diff --git a/StructureHelperCommon/Models/Shapes/Logics/RectangleShapeUpdateStrategy.cs b/StructureHelperCommon/Models/Shapes/Logics/RectangleShapeUpdateStrategy.cs index 73a2726..b00d47b 100644 --- a/StructureHelperCommon/Models/Shapes/Logics/RectangleShapeUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Shapes/Logics/RectangleShapeUpdateStrategy.cs @@ -12,8 +12,8 @@ namespace StructureHelperCommon.Models.Shapes { public void Update(IRectangleShape targetObject, IRectangleShape sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Width = sourceObject.Width; targetObject.Height = sourceObject.Height; diff --git a/StructureHelperCommon/Models/Shapes/Logics/ShapeUpdateStrategy.cs b/StructureHelperCommon/Models/Shapes/Logics/ShapeUpdateStrategy.cs index 4d98677..dda5fd2 100644 --- a/StructureHelperCommon/Models/Shapes/Logics/ShapeUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Shapes/Logics/ShapeUpdateStrategy.cs @@ -13,8 +13,8 @@ namespace StructureHelperCommon.Models.Shapes { public void Update(IShape targetObject, IShape sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } if (sourceObject is IRectangleShape sourceRectangle) { diff --git a/StructureHelperCommon/Models/Shapes/Logics/VertexUpdateStrategy.cs b/StructureHelperCommon/Models/Shapes/Logics/VertexUpdateStrategy.cs index 8dbbf21..fc78134 100644 --- a/StructureHelperCommon/Models/Shapes/Logics/VertexUpdateStrategy.cs +++ b/StructureHelperCommon/Models/Shapes/Logics/VertexUpdateStrategy.cs @@ -14,7 +14,7 @@ namespace StructureHelperCommon.Models.Shapes public void Update(IVertex targetObject, IVertex sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } if (UpdateChildren == true) { diff --git a/StructureHelperCommon/Models/States/StateCalcTermPairUpdateStrategy.cs b/StructureHelperCommon/Models/States/StateCalcTermPairUpdateStrategy.cs index e3cca49..eebad70 100644 --- a/StructureHelperCommon/Models/States/StateCalcTermPairUpdateStrategy.cs +++ b/StructureHelperCommon/Models/States/StateCalcTermPairUpdateStrategy.cs @@ -12,8 +12,8 @@ namespace StructureHelperCommon.Models.States { public void Update(IStateCalcTermPair targetObject, IStateCalcTermPair sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.LimitState = sourceObject.LimitState; targetObject.CalcTerm = sourceObject.CalcTerm; diff --git a/StructureHelperCommon/Models/VisualProperties/PrimitiveVisualPropertyUpdateStrategy.cs b/StructureHelperCommon/Models/VisualProperties/PrimitiveVisualPropertyUpdateStrategy.cs index a9a074a..393bfe5 100644 --- a/StructureHelperCommon/Models/VisualProperties/PrimitiveVisualPropertyUpdateStrategy.cs +++ b/StructureHelperCommon/Models/VisualProperties/PrimitiveVisualPropertyUpdateStrategy.cs @@ -8,8 +8,8 @@ namespace StructureHelperCommon.Models.VisualProperties { public void Update(IPrimitiveVisualProperty targetObject, IPrimitiveVisualProperty sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.IsVisible = sourceObject.IsVisible; targetObject.Color = sourceObject.Color; diff --git a/StructureHelperCommon/Models/WorkPlanes/WorkPlanePropertyUpdateStrategy.cs b/StructureHelperCommon/Models/WorkPlanes/WorkPlanePropertyUpdateStrategy.cs index 81aa3b1..db3d9d5 100644 --- a/StructureHelperCommon/Models/WorkPlanes/WorkPlanePropertyUpdateStrategy.cs +++ b/StructureHelperCommon/Models/WorkPlanes/WorkPlanePropertyUpdateStrategy.cs @@ -12,8 +12,8 @@ namespace StructureHelperCommon.Models.WorkPlanes { public void Update(IWorkPlaneProperty targetObject, IWorkPlaneProperty sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.AxisLineThickness = sourceObject.AxisLineThickness; targetObject.GridSize = sourceObject.GridSize; diff --git a/StructureHelperCommon/Services/CheckObject.cs b/StructureHelperCommon/Services/CheckObject.cs index 23c9f82..5d031ef 100644 --- a/StructureHelperCommon/Services/CheckObject.cs +++ b/StructureHelperCommon/Services/CheckObject.cs @@ -24,7 +24,7 @@ namespace StructureHelperCommon.Services /// public static void CompareTypes(object targetObject, object sourceObject) { - IsNull(targetObject, sourceObject); + ThrowIfNull(targetObject, sourceObject); if (targetObject.GetType() != sourceObject.GetType()) { throw new StructureHelperException @@ -32,10 +32,10 @@ namespace StructureHelperCommon.Services } } - public static void IsNull(object targetObject, object sourceObject, string senderName = "") + public static void ThrowIfNull(object targetObject, object sourceObject, string senderName = "") { - IsNull(targetObject,$"{senderName} target object"); - IsNull(sourceObject, $"{senderName} source object"); + ThrowIfNull(targetObject,$"{senderName} target object"); + ThrowIfNull(sourceObject, $"{senderName} source object"); } ///

@@ -44,7 +44,7 @@ namespace StructureHelperCommon.Services /// Checked object /// Message while error occur /// - public static void IsNull(object item, string message = "") + public static void ThrowIfNull(object item, string message = "") { if (item is null) { diff --git a/StructureHelperCommon/Services/Exports/EntitiesToDxfExportLogic.cs b/StructureHelperCommon/Services/Exports/EntitiesToDxfExportLogic.cs index 83897d8..1341e0d 100644 --- a/StructureHelperCommon/Services/Exports/EntitiesToDxfExportLogic.cs +++ b/StructureHelperCommon/Services/Exports/EntitiesToDxfExportLogic.cs @@ -12,7 +12,6 @@ namespace StructureHelperCommon.Services.Exports { public class EntitiesToDxfExportLogic : IExportToFileLogic { - private const double metresToMillimeters = 1000.0; private IGetDxfLayerLogic layerLogic = new GetDxfLayerLogic(); public List<(EntityObject entity, LayerNames layerName)> Entities { get; set; } = []; diff --git a/StructureHelperCommon/Services/Exports/GetDxfLayerLogic.cs b/StructureHelperCommon/Services/Exports/GetDxfLayerLogic.cs index b50db94..e1c9f6e 100644 --- a/StructureHelperCommon/Services/Exports/GetDxfLayerLogic.cs +++ b/StructureHelperCommon/Services/Exports/GetDxfLayerLogic.cs @@ -9,6 +9,7 @@ namespace StructureHelperCommon.Services.Exports private const string PrimitivesLayer = "STR-PRM"; private const string OpeningsLayer = "STR-OPN"; private const string RebarLayer = "STR-REB"; + private const string PointLayer = "STR-PNT"; private const string LayerNameIsUnKnown = ": Layer name is unknown"; public Layer GetOrCreateLayer(DxfDocument dxf, LayerNames layerName) { @@ -29,6 +30,7 @@ namespace StructureHelperCommon.Services.Exports if (layerName == LayerNames.StructiralPrimitives) { return PrimitivesLayer; } else if (layerName == LayerNames.StructuralOpenings) { return OpeningsLayer; } else if (layerName == LayerNames.StructuralRebars) { return RebarLayer; } + else if (layerName == LayerNames.StructuralPoints) { return PointLayer; } else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(layerName) + LayerNameIsUnKnown); @@ -40,6 +42,7 @@ namespace StructureHelperCommon.Services.Exports if (layerName == LayerNames.StructiralPrimitives) { return AciColor.Blue; } else if (layerName == LayerNames.StructuralOpenings) { return AciColor.DarkGray; } else if (layerName == LayerNames.StructuralRebars) { return AciColor.Magenta; } + else if (layerName == LayerNames.StructuralPoints) { return AciColor.Green; } else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(layerName) + LayerNameIsUnKnown); diff --git a/StructureHelperCommon/Services/Exports/ShapesExportToDxfLogic.cs b/StructureHelperCommon/Services/Exports/ShapesExportToDxfLogic.cs index 83127d4..e01939b 100644 --- a/StructureHelperCommon/Services/Exports/ShapesExportToDxfLogic.cs +++ b/StructureHelperCommon/Services/Exports/ShapesExportToDxfLogic.cs @@ -10,7 +10,8 @@ namespace StructureHelperCommon.Services.Exports { StructiralPrimitives, StructuralOpenings, - StructuralRebars + StructuralRebars, + StructuralPoints } public class ShapesExportToDxfLogic : IExportToFileLogic { diff --git a/StructureHelperLogics/Models/Analyses/BeamShearAnalysisUpdateStrategy.cs b/StructureHelperLogics/Models/Analyses/BeamShearAnalysisUpdateStrategy.cs index ca7c537..9e043a0 100644 --- a/StructureHelperLogics/Models/Analyses/BeamShearAnalysisUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Analyses/BeamShearAnalysisUpdateStrategy.cs @@ -14,8 +14,8 @@ namespace StructureHelperLogics.Models.Analyses public void Update(IBeamShearAnalysis targetObject, IBeamShearAnalysis sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; InitialzeStrategies(); analysisUpdateStrategy.Update(targetObject, sourceObject); diff --git a/StructureHelperLogics/Models/Analyses/CrossSectionNdmAnalysisUpdateStrategy.cs b/StructureHelperLogics/Models/Analyses/CrossSectionNdmAnalysisUpdateStrategy.cs index 52cfb66..29cf4f2 100644 --- a/StructureHelperLogics/Models/Analyses/CrossSectionNdmAnalysisUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Analyses/CrossSectionNdmAnalysisUpdateStrategy.cs @@ -32,8 +32,8 @@ namespace StructureHelperLogics.Models.Analyses public void Update(ICrossSectionNdmAnalysis targetObject, ICrossSectionNdmAnalysis sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; analysisUpdateStrategy.Update(targetObject, sourceObject); targetObject.VersionProcessor.Versions.Clear(); diff --git a/StructureHelperLogics/Models/BeamShears/BeamShearUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/BeamShearUpdateStrategy.cs index a21cf88..f8b8123 100644 --- a/StructureHelperLogics/Models/BeamShears/BeamShearUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/BeamShearUpdateStrategy.cs @@ -14,11 +14,11 @@ namespace StructureHelperLogics.Models.BeamShears IUpdateStrategy repositoryUpdateStrategy; public void Update(IBeamShear targetObject, IBeamShear sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; - CheckObject.IsNull(sourceObject.Repository); - CheckObject.IsNull(targetObject.Repository); + CheckObject.ThrowIfNull(sourceObject.Repository); + CheckObject.ThrowIfNull(targetObject.Repository); InitializeStrategies(); clearStrategy.Process(targetObject.Repository); repositoryUpdateStrategy.Update(targetObject.Repository, sourceObject.Repository); diff --git a/StructureHelperLogics/Models/BeamShears/Logics/BeamShearReporitoryClearStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/BeamShearReporitoryClearStrategy.cs index 3cc81b6..64a6238 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/BeamShearReporitoryClearStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/BeamShearReporitoryClearStrategy.cs @@ -10,13 +10,13 @@ namespace StructureHelperLogics.Models.BeamShears { public void Process(IBeamShearRepository entity) { - CheckObject.IsNull(entity.Calculators); + CheckObject.ThrowIfNull(entity.Calculators); entity.Calculators.Clear(); - CheckObject.IsNull(entity.Actions); + CheckObject.ThrowIfNull(entity.Actions); entity.Actions.Clear(); - CheckObject.IsNull(entity.Sections); + CheckObject.ThrowIfNull(entity.Sections); entity.Sections.Clear(); - CheckObject.IsNull(entity.Stirrups); + CheckObject.ThrowIfNull(entity.Stirrups); entity.Stirrups.Clear(); } } diff --git a/StructureHelperLogics/Models/BeamShears/Logics/BeamShearRepositoryAddUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/BeamShearRepositoryAddUpdateStrategy.cs index b2e1a3c..c5a43e6 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/BeamShearRepositoryAddUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/BeamShearRepositoryAddUpdateStrategy.cs @@ -11,8 +11,8 @@ namespace StructureHelperLogics.Models.BeamShears { public void Update(IBeamShearRepository targetObject, IBeamShearRepository sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; targetObject.Actions.AddRange(sourceObject.Actions); targetObject.Sections.AddRange(sourceObject.Sections); diff --git a/StructureHelperLogics/Models/BeamShears/Logics/BeamShearSectionUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/BeamShearSectionUpdateStrategy.cs index fc0406d..1b28eed 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/BeamShearSectionUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/BeamShearSectionUpdateStrategy.cs @@ -16,8 +16,8 @@ namespace StructureHelperLogics.Models.BeamShears public void Update(IBeamShearSection targetObject, IBeamShearSection sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } Check(targetObject, sourceObject); InitializeStrategies(); @@ -36,12 +36,12 @@ namespace StructureHelperLogics.Models.BeamShears private static void Check(IBeamShearSection targetObject, IBeamShearSection sourceObject) { - CheckObject.IsNull(sourceObject.Shape, "Source object shape"); - CheckObject.IsNull(targetObject.Shape, "Target object shape"); - CheckObject.IsNull(sourceObject.ConcreteMaterial, "Source concrete material"); - CheckObject.IsNull(targetObject.ConcreteMaterial, "Target concrete material"); - CheckObject.IsNull(sourceObject.ReinforcementMaterial, "Source reinforcement material"); - CheckObject.IsNull(targetObject.ReinforcementMaterial, "Target reinforcement material"); + CheckObject.ThrowIfNull(sourceObject.Shape, "Source object shape"); + CheckObject.ThrowIfNull(targetObject.Shape, "Target object shape"); + CheckObject.ThrowIfNull(sourceObject.ConcreteMaterial, "Source concrete material"); + CheckObject.ThrowIfNull(targetObject.ConcreteMaterial, "Target concrete material"); + CheckObject.ThrowIfNull(sourceObject.ReinforcementMaterial, "Source reinforcement material"); + CheckObject.ThrowIfNull(targetObject.ReinforcementMaterial, "Target reinforcement material"); } private void InitializeStrategies() diff --git a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearCalculatorCloneStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearCalculatorCloneStrategy.cs index 4f67b49..ce22760 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearCalculatorCloneStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearCalculatorCloneStrategy.cs @@ -15,8 +15,8 @@ namespace StructureHelperLogics.Models.BeamShears public IBeamShearCalculator GetClone(IBeamShearCalculator sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); InitializeStrategies(); BeamShearCalculator calculator = new(Guid.NewGuid()); updateStrategy.Update(calculator, sourceObject); diff --git a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearCalculatorInputDataCloneStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearCalculatorInputDataCloneStrategy.cs index 9b54264..630768f 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearCalculatorInputDataCloneStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearCalculatorInputDataCloneStrategy.cs @@ -21,8 +21,8 @@ namespace StructureHelperLogics.Models.BeamShears public IBeamShearCalculatorInputData GetClone(IBeamShearCalculatorInputData sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); InitializeStrategies(); BeamShearCalculatorInputData inputData = new(Guid.NewGuid()); actionUpdateStrategy.Update(inputData, sourceObject); diff --git a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasActionsUpdateCloneStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasActionsUpdateCloneStrategy.cs index 7e27796..39210d1 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasActionsUpdateCloneStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasActionsUpdateCloneStrategy.cs @@ -14,9 +14,9 @@ namespace StructureHelperLogics.Models.BeamShears public void Update(IHasBeamShearActions targetObject, IHasBeamShearActions sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Actions.Clear(); foreach (var item in sourceObject.Actions) diff --git a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasCalculatorsUpdateCloneStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasCalculatorsUpdateCloneStrategy.cs index befb886..06c0706 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasCalculatorsUpdateCloneStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasCalculatorsUpdateCloneStrategy.cs @@ -17,9 +17,9 @@ namespace StructureHelperLogics.Models.BeamShears public void Update(IHasCalculators targetObject, IHasCalculators sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Calculators.Clear(); foreach (var calculator in sourceObject.Calculators) diff --git a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasSectionsUpdateCloneStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasSectionsUpdateCloneStrategy.cs index 3e22199..91d5269 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasSectionsUpdateCloneStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasSectionsUpdateCloneStrategy.cs @@ -14,9 +14,9 @@ namespace StructureHelperLogics.Models.BeamShears public void Update(IHasBeamShearSections targetObject, IHasBeamShearSections sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Sections.Clear(); foreach (var item in sourceObject.Sections) diff --git a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasStirrupsUpdateCloneStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasStirrupsUpdateCloneStrategy.cs index 7d2fe1f..be13b9a 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasStirrupsUpdateCloneStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasStirrupsUpdateCloneStrategy.cs @@ -15,9 +15,9 @@ namespace StructureHelperLogics.Models.BeamShears public void Update(IHasStirrups targetObject, IHasStirrups sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Stirrups.Clear(); foreach (var item in sourceObject.Stirrups) diff --git a/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionListLogic.cs b/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionListLogic.cs index 6699bdb..11e345e 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionListLogic.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionListLogic.cs @@ -74,8 +74,8 @@ namespace StructureHelperLogics.Models.BeamShears private void Check() { - CheckObject.IsNull(BeamShearSection); - CheckObject.IsNull(DesignRangeProperty); + CheckObject.ThrowIfNull(BeamShearSection); + CheckObject.ThrowIfNull(DesignRangeProperty); } private void GetShapeParameters() diff --git a/StructureHelperLogics/Models/BeamShears/Logics/HasBeamShearActionUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/HasBeamShearActionUpdateStrategy.cs index ab86fe7..36e661d 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/HasBeamShearActionUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/HasBeamShearActionUpdateStrategy.cs @@ -8,11 +8,11 @@ namespace StructureHelperLogics.Models.BeamShears { public void Update(IHasBeamShearActions targetObject, IHasBeamShearActions sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; - CheckObject.IsNull(sourceObject.Actions); - CheckObject.IsNull(targetObject.Actions); + CheckObject.ThrowIfNull(sourceObject.Actions); + CheckObject.ThrowIfNull(targetObject.Actions); targetObject.Actions.Clear(); targetObject.Actions.AddRange(sourceObject.Actions); } diff --git a/StructureHelperLogics/Models/BeamShears/Logics/HasBeamShearSectionUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/HasBeamShearSectionUpdateStrategy.cs index d43b605..6bc72aa 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/HasBeamShearSectionUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/HasBeamShearSectionUpdateStrategy.cs @@ -13,11 +13,11 @@ namespace StructureHelperLogics.Models.BeamShears { public void Update(IHasBeamShearSections targetObject, IHasBeamShearSections sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; - CheckObject.IsNull(sourceObject.Sections); - CheckObject.IsNull(targetObject.Sections); + CheckObject.ThrowIfNull(sourceObject.Sections); + CheckObject.ThrowIfNull(targetObject.Sections); targetObject.Sections.Clear(); targetObject.Sections.AddRange(sourceObject.Sections); } diff --git a/StructureHelperLogics/Models/BeamShears/Logics/HasStirrupsUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/HasStirrupsUpdateStrategy.cs index 1bae188..2eb1d48 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/HasStirrupsUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/HasStirrupsUpdateStrategy.cs @@ -8,11 +8,11 @@ namespace StructureHelperLogics.Models.BeamShears { public void Update(IHasStirrups targetObject, IHasStirrups sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; - CheckObject.IsNull(sourceObject.Stirrups); - CheckObject.IsNull(targetObject.Stirrups); + CheckObject.ThrowIfNull(sourceObject.Stirrups); + CheckObject.ThrowIfNull(targetObject.Stirrups); targetObject.Stirrups.Clear(); targetObject.Stirrups.AddRange(sourceObject.Stirrups); } diff --git a/StructureHelperLogics/Models/BeamShears/Logics/InclinedSectionUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/InclinedSectionUpdateStrategy.cs index 5b17fb8..a34be8f 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/InclinedSectionUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/InclinedSectionUpdateStrategy.cs @@ -8,8 +8,8 @@ namespace StructureHelperLogics.Models.BeamShears { public void Update(IInclinedSection targetObject, IInclinedSection sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; targetObject.StartCoord = sourceObject.StartCoord; targetObject.EndCoord = sourceObject.EndCoord; diff --git a/StructureHelperLogics/Models/BeamShears/Logics/StirrupBaseUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/StirrupBaseUpdateStrategy.cs index b8e153e..15844b4 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/StirrupBaseUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/StirrupBaseUpdateStrategy.cs @@ -11,8 +11,8 @@ namespace StructureHelperLogics.Models.BeamShears public void Update(IStirrup targetObject, IStirrup sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; targetObject.CompressedGap = sourceObject.CompressedGap; @@ -24,8 +24,8 @@ namespace StructureHelperLogics.Models.BeamShears private void UpdateTargetChildren(IStirrup targetObject, IStirrup sourceObject) { - CheckObject.IsNull(sourceObject.VisualProperty); - CheckObject.IsNull(targetObject.VisualProperty); + CheckObject.ThrowIfNull(sourceObject.VisualProperty); + CheckObject.ThrowIfNull(targetObject.VisualProperty); visualUpdateStrategy ??= new PrimitiveVisualPropertyUpdateStrategy(); visualUpdateStrategy.Update(targetObject.VisualProperty, sourceObject.VisualProperty); } diff --git a/StructureHelperLogics/Models/BeamShears/Logics/StirrupByDensityUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/StirrupByDensityUpdateStrategy.cs index dd421e1..276eefc 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/StirrupByDensityUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/StirrupByDensityUpdateStrategy.cs @@ -11,8 +11,8 @@ namespace StructureHelperLogics.Models.BeamShears private IUpdateStrategy? baseUpdateStrategy; public void Update(IStirrupByDensity targetObject, IStirrupByDensity sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } baseUpdateStrategy ??= new StirrupBaseUpdateStrategy(); baseUpdateStrategy.Update(targetObject, sourceObject); diff --git a/StructureHelperLogics/Models/BeamShears/Logics/StirrupByRebarUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/StirrupByRebarUpdateStrategy.cs index e9cc596..01bc5bb 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/StirrupByRebarUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/StirrupByRebarUpdateStrategy.cs @@ -14,12 +14,12 @@ namespace StructureHelperLogics.Models.BeamShears private IUpdateStrategy? baseUpdateStrategy; public void Update(IStirrupByRebar targetObject, IStirrupByRebar sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } baseUpdateStrategy ??= new StirrupBaseUpdateStrategy(); baseUpdateStrategy.Update(targetObject, sourceObject); - CheckObject.IsNull(sourceObject.Material); + CheckObject.ThrowIfNull(sourceObject.Material); targetObject.Material = sourceObject.Material.Clone() as IReinforcementLibMaterial; targetObject.Diameter = sourceObject.Diameter; targetObject.LegCount = sourceObject.LegCount; diff --git a/StructureHelperLogics/Models/BeamShears/Logics/StirrupUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/StirrupUpdateStrategy.cs index 6e7fba7..3390228 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/StirrupUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/StirrupUpdateStrategy.cs @@ -18,8 +18,8 @@ namespace StructureHelperLogics.Models.BeamShears.Logics public void Update(IStirrup targetObject, IStirrup sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } if (sourceObject is IStirrupGroup group) { diff --git a/StructureHelperLogics/Models/BeamShears/Logics/StrengthLogics/StirrupByDensityStrengthLogic.cs b/StructureHelperLogics/Models/BeamShears/Logics/StrengthLogics/StirrupByDensityStrengthLogic.cs index dd5cc31..ab0e792 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/StrengthLogics/StirrupByDensityStrengthLogic.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/StrengthLogics/StirrupByDensityStrengthLogic.cs @@ -72,8 +72,8 @@ namespace StructureHelperLogics.Models.BeamShears private void Check() { - CheckObject.IsNull(stirrupByDensity); - CheckObject.IsNull(inclinedSection); + CheckObject.ThrowIfNull(stirrupByDensity); + CheckObject.ThrowIfNull(inclinedSection); } } } diff --git a/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearCalculatorInputDataUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearCalculatorInputDataUpdateStrategy.cs index e3ae1e5..c070070 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearCalculatorInputDataUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearCalculatorInputDataUpdateStrategy.cs @@ -15,8 +15,8 @@ namespace StructureHelperLogics.Models.BeamShears public void Update(IBeamShearCalculatorInputData targetObject, IBeamShearCalculatorInputData sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; if (UpdateChildren) { @@ -24,8 +24,8 @@ namespace StructureHelperLogics.Models.BeamShears hasActionUpdateStrategy?.Update(targetObject, sourceObject); hasSectionsUpdateStrategy?.Update(targetObject, sourceObject); hasStirrupsUpdateStrategy?.Update(targetObject, sourceObject); - CheckObject.IsNull(sourceObject.DesignRangeProperty); - CheckObject.IsNull(targetObject.DesignRangeProperty); + CheckObject.ThrowIfNull(sourceObject.DesignRangeProperty); + CheckObject.ThrowIfNull(targetObject.DesignRangeProperty); designRangeUpdateStrategy.Update(targetObject.DesignRangeProperty, sourceObject.DesignRangeProperty); } targetObject.CodeType = sourceObject.CodeType; diff --git a/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearCalculatorUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearCalculatorUpdateStrategy.cs index 6adcf70..01def1c 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearCalculatorUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearCalculatorUpdateStrategy.cs @@ -9,8 +9,8 @@ namespace StructureHelperLogics.Models.BeamShears private IUpdateStrategy? inputDataUpdateStrategy; public void Update(IBeamShearCalculator targetObject, IBeamShearCalculator sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; }; targetObject.Name = sourceObject.Name; targetObject.ShowTraceData = sourceObject.ShowTraceData; diff --git a/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearDesignRangePropertyUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearDesignRangePropertyUpdateStrategy.cs index 1f7c31b..24f9d68 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearDesignRangePropertyUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearDesignRangePropertyUpdateStrategy.cs @@ -8,8 +8,8 @@ namespace StructureHelperLogics.Models.BeamShears { public void Update(IBeamShearDesignRangeProperty targetObject, IBeamShearDesignRangeProperty sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.AbsoluteRangeValue = sourceObject.AbsoluteRangeValue; targetObject.RelativeEffectiveDepthRangeValue = sourceObject.RelativeEffectiveDepthRangeValue; diff --git a/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearSectionLogicInputDataUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearSectionLogicInputDataUpdateStrategy.cs index b9e29f7..4ea0470 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearSectionLogicInputDataUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/BeamShearSectionLogicInputDataUpdateStrategy.cs @@ -8,8 +8,8 @@ namespace StructureHelperLogics.Models.BeamShears { public void Update(IBeamShearSectionLogicInputData targetObject, IBeamShearSectionLogicInputData sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.BeamShearAction = sourceObject.BeamShearAction; targetObject.InclinedSection = sourceObject.InclinedSection; diff --git a/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/StirrupByInclinedRebarUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/StirrupByInclinedRebarUpdateStrategy.cs index 886de87..ab24de5 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/StirrupByInclinedRebarUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/StirrupByInclinedRebarUpdateStrategy.cs @@ -14,8 +14,8 @@ namespace StructureHelperLogics.Models.BeamShears public void Update(IStirrupByInclinedRebar targetObject, IStirrupByInclinedRebar sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } baseUpdateStrategy ??= new StirrupBaseUpdateStrategy(); baseUpdateStrategy.Update(targetObject, sourceObject); @@ -25,7 +25,7 @@ namespace StructureHelperLogics.Models.BeamShears targetObject.LegCount = sourceObject.LegCount; if (UpdateChildren) { - CheckObject.IsNull(sourceObject.RebarSection, "Rebar section"); + CheckObject.ThrowIfNull(sourceObject.RebarSection, "Rebar section"); targetObject.RebarSection = sourceObject.RebarSection.Clone() as IRebarSection; } } diff --git a/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/StirrupGroupUpdateStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/StirrupGroupUpdateStrategy.cs index 0fed14a..0223fd5 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/StirrupGroupUpdateStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/UpdateLogics/StirrupGroupUpdateStrategy.cs @@ -13,8 +13,8 @@ namespace StructureHelperLogics.Models.BeamShears public void Update(IStirrupGroup targetObject, IStirrupGroup sourceObject) { - CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject); - CheckObject.IsNull(targetObject, ErrorStrings.TargetObject); + CheckObject.ThrowIfNull(sourceObject, ErrorStrings.SourceObject); + CheckObject.ThrowIfNull(targetObject, ErrorStrings.TargetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } baseUpdateStrategy ??= new StirrupBaseUpdateStrategy() { @@ -29,8 +29,8 @@ namespace StructureHelperLogics.Models.BeamShears private static void UpdateTargetChildren(IStirrupGroup targetObject, IStirrupGroup sourceObject) { - CheckObject.IsNull(sourceObject.Stirrups); - CheckObject.IsNull(targetObject.Stirrups); + CheckObject.ThrowIfNull(sourceObject.Stirrups); + CheckObject.ThrowIfNull(targetObject.Stirrups); targetObject.Stirrups.Clear(); foreach (var item in sourceObject.Stirrups) { diff --git a/StructureHelperLogics/Models/CrossSections/CrossSectionCloneStrategy.cs b/StructureHelperLogics/Models/CrossSections/CrossSectionCloneStrategy.cs index 888413c..1d799aa 100644 --- a/StructureHelperLogics/Models/CrossSections/CrossSectionCloneStrategy.cs +++ b/StructureHelperLogics/Models/CrossSections/CrossSectionCloneStrategy.cs @@ -27,8 +27,8 @@ namespace StructureHelperLogics.Models.CrossSections { SectionRepository = newRepository }; - CheckObject.IsNull(targetObject.WorkPlaneProperty); - CheckObject.IsNull(sourceObject.WorkPlaneProperty); + CheckObject.ThrowIfNull(targetObject.WorkPlaneProperty); + CheckObject.ThrowIfNull(sourceObject.WorkPlaneProperty); workPlaneUpdateStrategy ??= new WorkPlanePropertyUpdateStrategy(); workPlaneUpdateStrategy.Update(targetObject.WorkPlaneProperty, sourceObject.WorkPlaneProperty); return targetObject; diff --git a/StructureHelperLogics/Models/CrossSections/CrossSectionRepositoryUpdateStrategy.cs b/StructureHelperLogics/Models/CrossSections/CrossSectionRepositoryUpdateStrategy.cs index 8384645..84026f1 100644 --- a/StructureHelperLogics/Models/CrossSections/CrossSectionRepositoryUpdateStrategy.cs +++ b/StructureHelperLogics/Models/CrossSections/CrossSectionRepositoryUpdateStrategy.cs @@ -16,8 +16,8 @@ namespace StructureHelperLogics.Models.CrossSections public void Update(ICrossSectionRepository targetObject, ICrossSectionRepository sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } } } diff --git a/StructureHelperLogics/Models/CrossSections/CrossSectionUpdateStrategy.cs b/StructureHelperLogics/Models/CrossSections/CrossSectionUpdateStrategy.cs index 39498d0..4911ad7 100644 --- a/StructureHelperLogics/Models/CrossSections/CrossSectionUpdateStrategy.cs +++ b/StructureHelperLogics/Models/CrossSections/CrossSectionUpdateStrategy.cs @@ -27,8 +27,8 @@ namespace StructureHelperLogics.Models.CrossSections public void Update(ICrossSection targetObject, ICrossSection sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } UpdateRepository(targetObject, sourceObject); UpdateWorkPlane(targetObject, sourceObject); @@ -48,8 +48,8 @@ namespace StructureHelperLogics.Models.CrossSections private void UpdateRepository(ICrossSection targetObject, ICrossSection sourceObject) { - CheckObject.IsNull(targetObject.SectionRepository); - CheckObject.IsNull(sourceObject.SectionRepository); + CheckObject.ThrowIfNull(targetObject.SectionRepository); + CheckObject.ThrowIfNull(sourceObject.SectionRepository); targetObject.SectionRepository.Calculators.Clear(); targetObject.SectionRepository.Primitives.Clear(); targetObject.SectionRepository.ForceActions.Clear(); diff --git a/StructureHelperLogics/Models/Materials/Logics/ConcreteLibUpdateStrategy.cs b/StructureHelperLogics/Models/Materials/Logics/ConcreteLibUpdateStrategy.cs index 932c61a..f22b458 100644 --- a/StructureHelperLogics/Models/Materials/Logics/ConcreteLibUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Materials/Logics/ConcreteLibUpdateStrategy.cs @@ -17,8 +17,8 @@ namespace StructureHelperLogics.Models.Materials } public void Update(IConcreteLibMaterial targetObject, IConcreteLibMaterial sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } libUpdateStrategy.Update(targetObject, sourceObject); targetObject.TensionForULS = sourceObject.TensionForULS; diff --git a/StructureHelperLogics/Models/Materials/Logics/ElasticUpdateStrategy.cs b/StructureHelperLogics/Models/Materials/Logics/ElasticUpdateStrategy.cs index b5f2741..0cebb88 100644 --- a/StructureHelperLogics/Models/Materials/Logics/ElasticUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Materials/Logics/ElasticUpdateStrategy.cs @@ -13,8 +13,8 @@ namespace StructureHelperLogics.Models.Materials { public void Update(IElasticMaterial targetObject, IElasticMaterial sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Modulus = sourceObject.Modulus; targetObject.CompressiveStrength = sourceObject.CompressiveStrength; diff --git a/StructureHelperLogics/Models/Materials/Logics/FRUpdateStrategy.cs b/StructureHelperLogics/Models/Materials/Logics/FRUpdateStrategy.cs index 220d58d..a43bdd1 100644 --- a/StructureHelperLogics/Models/Materials/Logics/FRUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Materials/Logics/FRUpdateStrategy.cs @@ -15,8 +15,8 @@ namespace StructureHelperLogics.Models.Materials /// public void Update(IFRMaterial targetObject, IFRMaterial sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Modulus = sourceObject.Modulus; targetObject.CompressiveStrength = sourceObject.CompressiveStrength; diff --git a/StructureHelperLogics/Models/Materials/Logics/HasMaterialsUpdateCloningStrategy.cs b/StructureHelperLogics/Models/Materials/Logics/HasMaterialsUpdateCloningStrategy.cs index 3a3521f..0baf2a3 100644 --- a/StructureHelperLogics/Models/Materials/Logics/HasMaterialsUpdateCloningStrategy.cs +++ b/StructureHelperLogics/Models/Materials/Logics/HasMaterialsUpdateCloningStrategy.cs @@ -23,9 +23,9 @@ namespace StructureHelperLogics.Models.Materials.Logics /// public void Update(IHasHeadMaterials targetObject, IHasHeadMaterials sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.HeadMaterials.Clear(); foreach (var material in sourceObject.HeadMaterials) diff --git a/StructureHelperLogics/Models/Materials/Logics/HeadMaterialBaseUpdateStrategy.cs b/StructureHelperLogics/Models/Materials/Logics/HeadMaterialBaseUpdateStrategy.cs index 777f396..6be1039 100644 --- a/StructureHelperLogics/Models/Materials/Logics/HeadMaterialBaseUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Materials/Logics/HeadMaterialBaseUpdateStrategy.cs @@ -8,8 +8,8 @@ namespace StructureHelperLogics.Models.Materials { public void Update(IHeadMaterial targetObject, IHeadMaterial sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; targetObject.Color = sourceObject.Color; diff --git a/StructureHelperLogics/Models/Materials/Logics/HeadMaterialUpdateStrategy.cs b/StructureHelperLogics/Models/Materials/Logics/HeadMaterialUpdateStrategy.cs index 5409c6b..789257f 100644 --- a/StructureHelperLogics/Models/Materials/Logics/HeadMaterialUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Materials/Logics/HeadMaterialUpdateStrategy.cs @@ -26,8 +26,8 @@ namespace StructureHelperLogics.Models.Materials public void Update(IHeadMaterial targetObject, IHeadMaterial sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } baseUpdateStrategy.Update(targetObject, sourceObject); targetObject.HelperMaterial = sourceObject.HelperMaterial.Clone() as IHelperMaterial; diff --git a/StructureHelperLogics/Models/Materials/Logics/HelperMaterialSafetyFactorsUpdateStrategy.cs b/StructureHelperLogics/Models/Materials/Logics/HelperMaterialSafetyFactorsUpdateStrategy.cs index 1d2b7e5..8c04ebd 100644 --- a/StructureHelperLogics/Models/Materials/Logics/HelperMaterialSafetyFactorsUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Materials/Logics/HelperMaterialSafetyFactorsUpdateStrategy.cs @@ -14,8 +14,8 @@ namespace StructureHelperLogics.Models.Materials.Logics { public void Update(IHelperMaterial targetObject, IHelperMaterial sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } if (sourceObject.SafetyFactors is not null) { diff --git a/StructureHelperLogics/Models/Materials/Logics/HelperMaterialUpdateStrategy.cs b/StructureHelperLogics/Models/Materials/Logics/HelperMaterialUpdateStrategy.cs index e0f9fe3..695671f 100644 --- a/StructureHelperLogics/Models/Materials/Logics/HelperMaterialUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Materials/Logics/HelperMaterialUpdateStrategy.cs @@ -40,8 +40,8 @@ namespace StructureHelperLogics.Models.Materials public void Update(IHelperMaterial targetObject, IHelperMaterial sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } safetyFactorUpdateStrategy.Update(targetObject, sourceObject); if (sourceObject is ILibMaterial) diff --git a/StructureHelperLogics/Models/Materials/Logics/LibMaterialUpdateStrategy.cs b/StructureHelperLogics/Models/Materials/Logics/LibMaterialUpdateStrategy.cs index 1eb3873..dcfcb6f 100644 --- a/StructureHelperLogics/Models/Materials/Logics/LibMaterialUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Materials/Logics/LibMaterialUpdateStrategy.cs @@ -11,8 +11,8 @@ namespace StructureHelperLogics.Models.Materials { public void Update(ILibMaterial targetObject, ILibMaterial sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.MaterialEntity = sourceObject.MaterialEntity; targetObject.MaterialLogic = sourceObject.MaterialLogic; diff --git a/StructureHelperLogics/Models/Materials/Logics/RebarSectionUpdateStrategy.cs b/StructureHelperLogics/Models/Materials/Logics/RebarSectionUpdateStrategy.cs index e158195..9fcdf62 100644 --- a/StructureHelperLogics/Models/Materials/Logics/RebarSectionUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Materials/Logics/RebarSectionUpdateStrategy.cs @@ -9,10 +9,10 @@ namespace StructureHelperLogics.Models.Materials public void Update(IRebarSection targetObject, IRebarSection sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } - CheckObject.IsNull(sourceObject.Material); + CheckObject.ThrowIfNull(sourceObject.Material); targetObject.Diameter = sourceObject.Diameter; if (UpdateChildren) { diff --git a/StructureHelperLogics/Models/Materials/Logics/ReinforcementLibUpdateStrategy.cs b/StructureHelperLogics/Models/Materials/Logics/ReinforcementLibUpdateStrategy.cs index 8888bb1..71ad5a8 100644 --- a/StructureHelperLogics/Models/Materials/Logics/ReinforcementLibUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Materials/Logics/ReinforcementLibUpdateStrategy.cs @@ -20,8 +20,8 @@ namespace StructureHelperLogics.Models.Materials } public void Update(IReinforcementLibMaterial targetObject, IReinforcementLibMaterial sourceObject) { - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } libUpdateStrategy.Update(targetObject, sourceObject); } diff --git a/StructureHelperLogics/Models/Templates/CrossSections/CalculatorLogic.cs b/StructureHelperLogics/Models/Templates/CrossSections/CalculatorLogic.cs index 69c9191..caec7f2 100644 --- a/StructureHelperLogics/Models/Templates/CrossSections/CalculatorLogic.cs +++ b/StructureHelperLogics/Models/Templates/CrossSections/CalculatorLogic.cs @@ -24,9 +24,9 @@ namespace StructureHelperLogics.Models.Templates.CrossSections { ValueDiagramCalculator diagramCalculator = new(Guid.NewGuid()) { Name = "New value diagram calcualtor"}; ValueDiagramEntity diagramEntity = new(Guid.NewGuid()) { Name = "New diagram" }; - diagramEntity.ValueDigram.Point2DRange.StartPoint.Y = 0.25; - diagramEntity.ValueDigram.Point2DRange.EndPoint.Y = - 0.25; - diagramCalculator.InputData.Digrams.Add(diagramEntity); + diagramEntity.ValueDiagram.Point2DRange.StartPoint.Y = 0.25; + diagramEntity.ValueDiagram.Point2DRange.EndPoint.Y = - 0.25; + diagramCalculator.InputData.Diagrams.Add(diagramEntity); return diagramCalculator; } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/CheckForceCalculatorInputData.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/CheckForceCalculatorInputData.cs index 68a8671..81f4110 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/CheckForceCalculatorInputData.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/CheckForceCalculatorInputData.cs @@ -89,10 +89,9 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces private void CheckActions() { - var checkLogic = new CheckForceActionsLogic() + var checkLogic = new CheckForceActionsLogic(TraceLogger) { - Entity = InputData.ForceActions, - TraceLogger = TraceLogger + Entity = InputData.ForceActions }; if (checkLogic.Check() == false) { diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceCalculatorInputDataUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceCalculatorInputDataUpdateStrategy.cs index 6048620..e1b180e 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceCalculatorInputDataUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/ForceCalculatorInputDataUpdateStrategy.cs @@ -41,7 +41,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces } public void Update(IForceCalculatorInputData targetObject, IForceCalculatorInputData sourceObject) { - CheckObject.IsNull(targetObject, sourceObject, "Force calculator input data"); + CheckObject.ThrowIfNull(targetObject, sourceObject, "Force calculator input data"); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Accuracy ??= new Accuracy(); targetObject.CheckStrainLimit = sourceObject.CheckStrainLimit; diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurvesCalculatorInputDataUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurvesCalculatorInputDataUpdateStrategy.cs index 9b9dab3..eda64a4 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurvesCalculatorInputDataUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurvesCalculatorInputDataUpdateStrategy.cs @@ -15,7 +15,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces.LimitCurve { public void Update(ILimitCurvesCalculatorInputData targetObject, ILimitCurvesCalculatorInputData sourceObject) { - CheckObject.IsNull(targetObject, sourceObject, "Limit curve calculator input data"); + CheckObject.ThrowIfNull(targetObject, sourceObject, "Limit curve calculator input data"); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.LimitStates.Clear(); targetObject.CalcTerms.Clear(); diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurvesCalculatorUpdateCloningStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurvesCalculatorUpdateCloningStrategy.cs index 43e7d16..938966d 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurvesCalculatorUpdateCloningStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/LimitCurve/LimitCurvesCalculatorUpdateCloningStrategy.cs @@ -30,9 +30,9 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces.LimitCurve public void Update(ILimitCurvesCalculator targetObject, ILimitCurvesCalculator sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } var targetData = targetObject.InputData; limitCurvesInputDataUpdateStrategy.Update(targetData, sourceObject.InputData); diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/CrackCalculatorUpdateCloningStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/CrackCalculatorUpdateCloningStrategy.cs index 5f2bf03..8fb8563 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/CrackCalculatorUpdateCloningStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/CrackCalculatorUpdateCloningStrategy.cs @@ -33,9 +33,9 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics public void Update(ICrackCalculator targetObject, ICrackCalculator sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } var sourceData = sourceObject.InputData; var targetData = targetObject.InputData; diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateCloningStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateCloningStrategy.cs index 442e1c2..12d69d5 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateCloningStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateCloningStrategy.cs @@ -31,9 +31,9 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics public void Update(IForceCalculator targetObject, IForceCalculator sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } var sourceData = sourceObject.InputData; var targetData = targetObject.InputData; diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateStrategy.cs index e7b6b24..295a796 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/ForceCalculatorUpdateStrategy.cs @@ -13,8 +13,8 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics public ForceCalculatorUpdateStrategy() : this(new ForceCalculatorInputDataUpdateStrategy()) { } public void Update(IForceCalculator targetObject, IForceCalculator sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; targetObject.ShowTraceData = sourceObject.ShowTraceData; diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/HasCalculatorsUpdateCloningStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/HasCalculatorsUpdateCloningStrategy.cs index e6ec42c..04e50b1 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/HasCalculatorsUpdateCloningStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ByForces/Logics/HasCalculatorsUpdateCloningStrategy.cs @@ -39,9 +39,9 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces public void Update(IHasCalculators targetObject, IHasCalculators sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Calculators.Clear(); foreach (var calculator in sourceObject.Calculators) diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculatorInputData.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculatorInputData.cs index 1155d8f..1654a80 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculatorInputData.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramCalculatorInputData.cs @@ -14,7 +14,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams /// /// Collection of diagram for calculation /// - List Digrams { get; } + List Diagrams { get; } bool CheckStrainLimit { get; set; } } } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramEntity.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramEntity.cs index 3c5aa89..74cec02 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramEntity.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/IValueDiagramEntity.cs @@ -6,6 +6,6 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams { string Name { get; set; } bool IsTaken { get; set; } - IValueDiagram ValueDigram { get; set; } + IValueDiagram ValueDiagram { get; set; } } } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorInputDataUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorInputDataUpdateStrategy.cs index 8bfeb61..99f6006 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorInputDataUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorInputDataUpdateStrategy.cs @@ -21,7 +21,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams public void Update(IValueDiagramCalculatorInputData targetObject, IValueDiagramCalculatorInputData sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.CheckStrainLimit = sourceObject.CheckStrainLimit; targetObject.StateTermPair.LimitState = sourceObject.StateTermPair.LimitState; @@ -32,12 +32,12 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams targetObject.Primitives.AddRange(sourceObject.Primitives); targetObject.ForceActions.Clear(); targetObject.ForceActions.AddRange(sourceObject.ForceActions); - targetObject.Digrams.Clear(); + targetObject.Diagrams.Clear(); entityUpdateStrategy ??= new ValueDiagramEntityUpdateStrategy(); - foreach (var entity in sourceObject.Digrams) + foreach (var entity in sourceObject.Diagrams) { var newItem = entity.Clone() as IValueDiagramEntity; - targetObject.Digrams.Add(newItem); + targetObject.Diagrams.Add(newItem); } } } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorLogic.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorLogic.cs index 1362ee4..d3c5f26 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorLogic.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorLogic.cs @@ -90,7 +90,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams private void GetEntitiesResults() { - var entities = InputData.Digrams + var entities = InputData.Diagrams .Where(x => x.IsTaken == true); foreach (var entity in entities) { diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorUpdateCloningStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorUpdateCloningStrategy.cs index b456928..d1fd839 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorUpdateCloningStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorUpdateCloningStrategy.cs @@ -31,9 +31,9 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams public void Update(IValueDiagramCalculator targetObject, IValueDiagramCalculator sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } var sourceData = sourceObject.InputData; var targetData = targetObject.InputData; diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorUpdateStrategy.cs index 1c853ed..c1495aa 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCalculatorUpdateStrategy.cs @@ -10,14 +10,14 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams public void Update(IValueDiagramCalculator targetObject, IValueDiagramCalculator sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; targetObject.ShowTraceData = sourceObject.ShowTraceData; if (UpdateChildren == true) { - CheckObject.IsNull(targetObject.InputData, ": target value diagram calculator input data"); - CheckObject.IsNull(sourceObject.InputData, ": source value diagram calculator input data"); + CheckObject.ThrowIfNull(targetObject.InputData, ": target value diagram calculator input data"); + CheckObject.ThrowIfNull(sourceObject.InputData, ": source value diagram calculator input data"); inputDataUpdateStrategy ??= new ValueDiagramCalculatorInputDataUpdateStrategy(); inputDataUpdateStrategy.Update(targetObject.InputData, sourceObject.InputData); } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCheckLogic.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCheckLogic.cs new file mode 100644 index 0000000..486b5ff --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramCheckLogic.cs @@ -0,0 +1,30 @@ +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Interfaces; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams.Logics +{ + public class ValueDiagramCheckLogic : CheckEntityLogic + { + private const double minDistance = 1e-3; + private bool result; + + public override bool Check() + { + result = true; + if (Entity is null) + { + string errorString = ErrorStrings.ParameterIsNull + ": value diagram"; + TraceMessage(errorString); + throw new StructureHelperException(errorString); + } + double dx = Entity.Point2DRange.StartPoint.X - Entity.Point2DRange.EndPoint.X; + double dy = Entity.Point2DRange.StartPoint.Y - Entity.Point2DRange.EndPoint.Y; + if (Math.Abs(dx) < minDistance && Math.Abs(dy) < minDistance) + { + result = false; + TraceMessage($"Distance between point of diagram is too small"); + } + return result; + } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramEntityCheckLogic.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramEntityCheckLogic.cs new file mode 100644 index 0000000..0c66cd9 --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramEntityCheckLogic.cs @@ -0,0 +1,46 @@ +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams.Logics; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams +{ + public class ValueDiagramEntityCheckLogic : CheckEntityLogic + { + private ICheckEntityLogic valueDiagramCheckLogic; + + public ValueDiagramEntityCheckLogic(IShiftTraceLogger? traceLogger) + { + valueDiagramCheckLogic = new ValueDiagramCheckLogic(); + TraceLogger = traceLogger; + } + + public ValueDiagramEntityCheckLogic(ICheckEntityLogic valueDiagramCheckLogic, IShiftTraceLogger? traceLogger) + { + TraceLogger = traceLogger; + this.valueDiagramCheckLogic = valueDiagramCheckLogic; + } + + public override bool Check() + { + bool result = true; + if (Entity is null) + { + string errorString = ErrorStrings.ParameterIsNull + ": value diagram entity"; + TraceMessage(errorString); + throw new StructureHelperException(errorString); + } + valueDiagramCheckLogic.Entity = Entity.ValueDiagram; + bool IsValid = valueDiagramCheckLogic.Check(); + if (IsValid == false) + { + result = false; + string name = string.IsNullOrWhiteSpace(Entity.Name) + ? "" + : Entity.Name; + TraceMessage($"Diagram: {name} has error: {valueDiagramCheckLogic.CheckResult}"); + } + return result; + } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramEntityLogic.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramEntityLogic.cs index 4780ab6..b3fba39 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramEntityLogic.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramEntityLogic.cs @@ -25,12 +25,12 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams private List GetPoints() { TraceLogger?.AddMessage($"Getting point for diagram {ValueDiagramEntity.Name} has been started"); - var startPoint = ValueDiagramEntity.ValueDigram.Point2DRange.StartPoint; - var endPoint = ValueDiagramEntity.ValueDigram.Point2DRange.EndPoint; - double dx = (endPoint.X - startPoint.X) / ValueDiagramEntity.ValueDigram.StepNumber; - double dy = (endPoint.Y - startPoint.Y) / ValueDiagramEntity.ValueDigram.StepNumber; + var startPoint = ValueDiagramEntity.ValueDiagram.Point2DRange.StartPoint; + var endPoint = ValueDiagramEntity.ValueDiagram.Point2DRange.EndPoint; + double dx = (endPoint.X - startPoint.X) / ValueDiagramEntity.ValueDiagram.StepNumber; + double dy = (endPoint.Y - startPoint.Y) / ValueDiagramEntity.ValueDiagram.StepNumber; List point2Ds = []; - for (int i = 0; i < ValueDiagramEntity.ValueDigram.StepNumber + 1; i++) + for (int i = 0; i < ValueDiagramEntity.ValueDiagram.StepNumber + 1; i++) { double x = startPoint.X + dx * i; double y = startPoint.Y + dy * i; diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramEntityUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramEntityUpdateStrategy.cs index c46ea1a..9a09bc2 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramEntityUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramEntityUpdateStrategy.cs @@ -21,14 +21,14 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams public void Update(IValueDiagramEntity targetObject, IValueDiagramEntity sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.IsTaken = sourceObject.IsTaken; targetObject.Name = sourceObject.Name; if (UpdateChildren == true) { valueDiagramUpdateStrategy ??= new ValueDiagramUpdateStrategy(); - valueDiagramUpdateStrategy.Update(targetObject.ValueDigram, sourceObject.ValueDigram); + valueDiagramUpdateStrategy.Update(targetObject.ValueDiagram, sourceObject.ValueDiagram); } } } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramInputDataCheckLogic.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramInputDataCheckLogic.cs new file mode 100644 index 0000000..14c9cee --- /dev/null +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramInputDataCheckLogic.cs @@ -0,0 +1,100 @@ +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Forces; +using StructureHelperCommon.Models.Forces.Logics; +using StructureHelperLogics.NdmCalculations.Primitives; +using StructureHelperLogics.NdmCalculations.Primitives.Logics; + +namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams +{ + public class ValueDiagramInputDataCheckLogic : CheckEntityLogic + { + private ICheckEntityLogic checkEntityLogic; + private ICheckEntityLogic primitivesCheckLogic; + private ICheckEntityLogic> actionsCheckLogic; + + private bool result; + + public ValueDiagramInputDataCheckLogic( + ICheckEntityLogic checkEntityLogic, + ICheckEntityLogic primitivesCheckLogic, + ICheckEntityLogic> actionsCheckLogic) + { + this.checkEntityLogic = checkEntityLogic; + this.primitivesCheckLogic = primitivesCheckLogic; + this.actionsCheckLogic = actionsCheckLogic; + } + + public ValueDiagramInputDataCheckLogic() + { + checkEntityLogic = new ValueDiagramEntityCheckLogic(TraceLogger); + CheckRebarPrimitiveLogic checkRebarPrimitiveLogic = new() + { + CheckRebarHostMaterial = false, + CheckRebarPlacement = false + }; + primitivesCheckLogic = new CheckPrimitiveCollectionLogic(TraceLogger, checkRebarPrimitiveLogic); + actionsCheckLogic = new CheckForceActionsLogic(TraceLogger); + } + + public override bool Check() + { + result = true; + if (Entity is null) + { + string errorString = ErrorStrings.ParameterIsNull + ": input data"; + TraceMessage(errorString); + throw new StructureHelperException(errorString); + } + if (Entity.Primitives is null || !Entity.Primitives.Any()) + { + TraceMessage("Calculator does not contain any primitives"); + result = false; + } + if (Entity.ForceActions is null || !Entity.ForceActions.Any()) + { + TraceMessage("Calculator does not contain any forces"); + result = false; + } + if (Entity.Diagrams is null || !Entity.Diagrams.Any() || !Entity.Diagrams.Where(x=> x.IsTaken == true).Any()) + { + TraceMessage("Calculator does not contain any diagrams for calculation"); + result = false; + } + foreach (var entity in Entity.Diagrams) + { + checkEntityLogic.Entity = entity; + bool isValid = checkEntityLogic.Check(); + if (isValid == false) + { + result = false; + TraceMessage(checkEntityLogic.CheckResult); + } + } + CheckPrimitives(); + CheckActions(); + return result; + } + + private void CheckPrimitives() + { + primitivesCheckLogic.Entity = Entity; + if (primitivesCheckLogic.Check() == false) + { + result = false; + } + TraceMessage(primitivesCheckLogic.CheckResult); + + } + + private void CheckActions() + { + actionsCheckLogic.Entity = Entity.ForceActions; + if (actionsCheckLogic.Check() == false) + { + result = false; + } + TraceMessage(actionsCheckLogic.CheckResult); + } + } +} diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramUpdateStrategy.cs index f90a890..bebaa66 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/Logics/ValueDiagramUpdateStrategy.cs @@ -1,4 +1,5 @@ -using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Shapes; using StructureHelperCommon.Services; @@ -6,19 +7,36 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams { public class ValueDiagramUpdateStrategy : IParentUpdateStrategy { - private IUpdateStrategy rangeUpdateStrategy; + private IUpdateStrategy? _rangeUpdateStrategy; + + public ValueDiagramUpdateStrategy(IUpdateStrategy rangeUpdateStrategy) + { + _rangeUpdateStrategy = rangeUpdateStrategy ?? throw new StructureHelperException("rangeUpdateStrategy cannot be null"); + } + + public ValueDiagramUpdateStrategy() { } + public bool UpdateChildren { get; set; } = true; + private IUpdateStrategy RangeUpdateStrategy + => _rangeUpdateStrategy ??= new Point2DRangeUpdateStrategy(); + public void Update(IValueDiagram targetObject, IValueDiagram sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); - if (ReferenceEquals(targetObject, sourceObject)) { return; } + CheckObject.ThrowIfNull(targetObject, nameof(targetObject)); + CheckObject.ThrowIfNull(sourceObject, nameof(sourceObject)); + + if (ReferenceEquals(targetObject, sourceObject)) + return; + targetObject.StepNumber = sourceObject.StepNumber; - if (UpdateChildren == true) + + if (UpdateChildren) { - rangeUpdateStrategy ??= new Point2DRangeUpdateStrategy(); - rangeUpdateStrategy.Update(targetObject.Point2DRange, sourceObject.Point2DRange); + // Use property for lazy initialization + RangeUpdateStrategy.Update(targetObject.Point2DRange, sourceObject.Point2DRange); } } } + } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagram.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagram.cs index 674182d..0540b60 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagram.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagram.cs @@ -4,8 +4,17 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams { public class ValueDiagram : IValueDiagram { + private int stepNumber = 50; + public Guid Id { get; } - public int StepNumber { get; set; } = 50; + public int StepNumber + { + get => stepNumber; + set + { + stepNumber = Math.Max(value, 10); + } + } public IPoint2DRange Point2DRange { get; set; } = new Point2DRange(Guid.NewGuid()); diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculator.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculator.cs index 4421ba4..22efb71 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculator.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculator.cs @@ -1,13 +1,17 @@ using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models; using StructureHelperCommon.Models.Calculators; +using StructureHelperLogics.NdmCalculations.Analyses.ByForces; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams.Logics; namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams { public class ValueDiagramCalculator : IValueDiagramCalculator { private readonly IValueDiagramCalculatorLogic valueDiagramCalculatorLogic = new ValueDiagramCalculatorLogic(); - private readonly ICheckInputDataLogic checkInputDataLogic; + private readonly ICheckEntityLogic checkInputDataLogic; + + private IValueDiagramCalculatorResult result; public Guid Id { get; } @@ -20,9 +24,15 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams public IValueDiagramCalculatorInputData InputData { get; set; } = new ValueDiagramCalculatorInputData(Guid.NewGuid()); + public ValueDiagramCalculator(ICheckEntityLogic checkInputDataLogic) + { + this.checkInputDataLogic = checkInputDataLogic; + } + public ValueDiagramCalculator(Guid id) { Id = id; + checkInputDataLogic = new ValueDiagramInputDataCheckLogic(); } public object Clone() @@ -35,6 +45,16 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams public void Run() { + checkInputDataLogic.Entity = InputData; + if (checkInputDataLogic.Check() != true) + { + result = new ValueDiagramCalculatorResult() + { + IsValid = false, + Description = checkInputDataLogic.CheckResult + }; + return; + } valueDiagramCalculatorLogic.InputData = InputData; result = valueDiagramCalculatorLogic.GetResult(); } diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculatorInputData.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculatorInputData.cs index 3282409..01272d7 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculatorInputData.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramCalculatorInputData.cs @@ -17,7 +17,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams public Guid Id { get; } /// - public List Digrams { get; } = []; + public List Diagrams { get; } = []; /// public List ForceActions { get; } = []; /// diff --git a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramEntity.cs b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramEntity.cs index b71c676..91b4db6 100644 --- a/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramEntity.cs +++ b/StructureHelperLogics/NdmCalculations/Analyses/ValueDiagrams/ValueDiagramEntity.cs @@ -6,7 +6,7 @@ public string Name { get; set; } = string.Empty; public bool IsTaken { get; set; } = true; - public IValueDiagram ValueDigram { get; set; } = new ValueDiagram(Guid.NewGuid()); + public IValueDiagram ValueDiagram { get; set; } = new ValueDiagram(Guid.NewGuid()); public ValueDiagramEntity(Guid id) { diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CheckLogics/CheckCrackCalculatorInputDataLogic.cs b/StructureHelperLogics/NdmCalculations/Cracking/CheckLogics/CheckCrackCalculatorInputDataLogic.cs index df89277..5e00981 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/CheckLogics/CheckCrackCalculatorInputDataLogic.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/CheckLogics/CheckCrackCalculatorInputDataLogic.cs @@ -69,10 +69,9 @@ namespace StructureHelperLogics.NdmCalculations.Cracking TraceLogger?.AddMessage(message, TraceLogStatuses.Error); return; }; - var checkLogic = new CheckForceActionsLogic() + var checkLogic = new CheckForceActionsLogic(TraceLogger) { - Entity = InputData.ForceActions, - TraceLogger = TraceLogger + Entity = InputData.ForceActions }; if (checkLogic.Check() == false) { diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CrackCalculatorUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Cracking/CrackCalculatorUpdateStrategy.cs index 035b6c9..274edec 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/CrackCalculatorUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/CrackCalculatorUpdateStrategy.cs @@ -14,8 +14,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking public CrackCalculatorUpdateStrategy() : this(new CrackInputDataUpdateStrategy()) { } public void Update(ICrackCalculator targetObject, ICrackCalculator sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Name = sourceObject.Name; targetObject.ShowTraceData = sourceObject.ShowTraceData; diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CrackInputDataUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Cracking/CrackInputDataUpdateStrategy.cs index ad48d51..17c5884 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/CrackInputDataUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/CrackInputDataUpdateStrategy.cs @@ -22,8 +22,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking } public void Update(ICrackCalculatorInputData targetObject, ICrackCalculatorInputData sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.ForceActions.Clear(); targetObject.ForceActions.AddRange(sourceObject.ForceActions); diff --git a/StructureHelperLogics/NdmCalculations/Cracking/UserCrackInputDataUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Cracking/UserCrackInputDataUpdateStrategy.cs index 99b25a7..07ea58c 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/UserCrackInputDataUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/UserCrackInputDataUpdateStrategy.cs @@ -12,8 +12,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking { public void Update(IUserCrackInputData targetObject, IUserCrackInputData sourceObject) { - CheckObject.IsNull(targetObject); - CheckObject.IsNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); + CheckObject.ThrowIfNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.SetSofteningFactor = sourceObject.SetSofteningFactor; targetObject.SofteningFactor = sourceObject.SofteningFactor; diff --git a/StructureHelperLogics/NdmCalculations/Primitives/Logics/DxfEntitiesToNdmPrimitivesConvertStrategy.cs b/StructureHelperLogics/NdmCalculations/Primitives/Logics/DxfEntitiesToNdmPrimitivesConvertStrategy.cs index 6277a25..7498e9e 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/Logics/DxfEntitiesToNdmPrimitivesConvertStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/Logics/DxfEntitiesToNdmPrimitivesConvertStrategy.cs @@ -2,6 +2,7 @@ using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Shapes; using StructureHelperCommon.Services.Exports; +using StructureHelperLogics.Models.Primitives; namespace StructureHelperLogics.NdmCalculations.Primitives { @@ -31,6 +32,10 @@ namespace StructureHelperLogics.NdmCalculations.Primitives { primitives.Add(GetCirclePrimitive(circle)); } + else if (dxfEntity is Point point) + { + primitives.Add(GetPointPrimitive(point)); + } else { // just skip all types of primitives @@ -39,6 +44,31 @@ namespace StructureHelperLogics.NdmCalculations.Primitives } } + private INdmPrimitive GetPointPrimitive(Point point) + { + INdmPrimitive primitive = null; + double area = 0.000314; + if (point.Layer.Name == layerLogic.GetLayerName(LayerNames.StructuralRebars)) + { + RebarNdmPrimitive rebar = new(Guid.NewGuid()) + { + Name = "Imported rebar", + Area = area + }; + primitive = rebar; + } + else + { + PointNdmPrimitive pointPrimitive = new(Guid.NewGuid()) + { + Name = "Imported point", + Area = area + }; + primitive = pointPrimitive; + } + return primitive; + } + private INdmPrimitive GetCirclePrimitive(Circle circle) { INdmPrimitive primitive = null; diff --git a/StructureHelperLogics/NdmCalculations/Primitives/Logics/EllipsePrimitiveUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Primitives/Logics/EllipsePrimitiveUpdateStrategy.cs index e9ae41c..2d023c1 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/Logics/EllipsePrimitiveUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/Logics/EllipsePrimitiveUpdateStrategy.cs @@ -27,8 +27,8 @@ namespace StructureHelperLogics.NdmCalculations.Primitives } public void Update(IEllipseNdmPrimitive targetObject, IEllipseNdmPrimitive sourceObject) { - CheckObject.IsNull(sourceObject, "source object"); - CheckObject.IsNull(targetObject, "target object"); + CheckObject.ThrowIfNull(sourceObject, "source object"); + CheckObject.ThrowIfNull(targetObject, "target object"); if (ReferenceEquals(targetObject, sourceObject)) { return; } basePrimitiveUpdateStrategy.Update(targetObject, sourceObject); divisionPropsUpdateStrategy.Update(targetObject.DivisionSize, sourceObject.DivisionSize); diff --git a/StructureHelperLogics/NdmCalculations/Primitives/Logics/HasPrimitivesUpdateCloningStrategy.cs b/StructureHelperLogics/NdmCalculations/Primitives/Logics/HasPrimitivesUpdateCloningStrategy.cs index a421dee..285e0de 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/Logics/HasPrimitivesUpdateCloningStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/Logics/HasPrimitivesUpdateCloningStrategy.cs @@ -18,9 +18,9 @@ namespace StructureHelperLogics.NdmCalculations.Primitives.Logics public void Update(IHasPrimitives targetObject, IHasPrimitives sourceObject) { - CheckObject.IsNull(cloningStrategy); - CheckObject.IsNull(sourceObject); - CheckObject.IsNull(targetObject); + CheckObject.ThrowIfNull(cloningStrategy); + CheckObject.ThrowIfNull(sourceObject); + CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Primitives.Clear(); foreach (var primitive in sourceObject.Primitives) diff --git a/StructureHelperLogics/NdmCalculations/Primitives/Logics/HasPrimitivesUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Primitives/Logics/HasPrimitivesUpdateStrategy.cs index 6904802..b224f43 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/Logics/HasPrimitivesUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/Logics/HasPrimitivesUpdateStrategy.cs @@ -12,7 +12,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives.Logics { public void Update(IHasPrimitives targetObject, IHasPrimitives sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Primitives.Clear(); targetObject.Primitives.AddRange(sourceObject.Primitives); diff --git a/StructureHelperLogics/NdmCalculations/Primitives/Logics/NdmElementUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Primitives/Logics/NdmElementUpdateStrategy.cs index c14e6a8..7b0a991 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/Logics/NdmElementUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/Logics/NdmElementUpdateStrategy.cs @@ -24,7 +24,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives.Logics /// public void Update(INdmElement targetObject, INdmElement sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } targetObject.Triangulate = sourceObject.Triangulate; tupleUpdateStrategy.Update(targetObject.UsersPrestrain, sourceObject.UsersPrestrain); diff --git a/StructureHelperLogics/NdmCalculations/Primitives/Logics/NdmPrimitiveBaseUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Primitives/Logics/NdmPrimitiveBaseUpdateStrategy.cs index a6b3962..f65985c 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/Logics/NdmPrimitiveBaseUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/Logics/NdmPrimitiveBaseUpdateStrategy.cs @@ -16,7 +16,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives public void Update(INdmPrimitive targetObject, INdmPrimitive sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } InitializeStrategies(); targetObject.Name = sourceObject.Name; diff --git a/StructureHelperLogics/NdmCalculations/Primitives/Logics/RectanglePrimitiveUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Primitives/Logics/RectanglePrimitiveUpdateStrategy.cs index 310a8d2..946db08 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/Logics/RectanglePrimitiveUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/Logics/RectanglePrimitiveUpdateStrategy.cs @@ -28,8 +28,8 @@ namespace StructureHelperLogics.NdmCalculations.Primitives public void Update(IRectangleNdmPrimitive targetObject, IRectangleNdmPrimitive sourceObject) { - CheckObject.IsNull(sourceObject, "source object"); - CheckObject.IsNull(targetObject, "target object"); + CheckObject.ThrowIfNull(sourceObject, "source object"); + CheckObject.ThrowIfNull(targetObject, "target object"); if (ReferenceEquals(targetObject, sourceObject)) { return; } basePrimitiveUpdateStrategy.Update(targetObject, sourceObject); divisionPropsUpdateStrategy.Update(targetObject.DivisionSize, sourceObject.DivisionSize); diff --git a/StructureHelperLogics/NdmCalculations/Primitives/Logics/ShapeNDMPrimitiveUpdateStrategy.cs b/StructureHelperLogics/NdmCalculations/Primitives/Logics/ShapeNDMPrimitiveUpdateStrategy.cs index 4435b0c..f0c03dc 100644 --- a/StructureHelperLogics/NdmCalculations/Primitives/Logics/ShapeNDMPrimitiveUpdateStrategy.cs +++ b/StructureHelperLogics/NdmCalculations/Primitives/Logics/ShapeNDMPrimitiveUpdateStrategy.cs @@ -32,7 +32,7 @@ namespace StructureHelperLogics.NdmCalculations.Primitives public void Update(IShapeNdmPrimitive targetObject, IShapeNdmPrimitive sourceObject) { - CheckObject.IsNull(targetObject, sourceObject); + CheckObject.ThrowIfNull(targetObject, sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } InitializeStrategies(); basePrimitiveUpdateStrategy.Update(targetObject, sourceObject); diff --git a/StructureHelperTests/FunctionalTests/Ndms/Calculators/ForceCalculatorTests/RCSectionsTest.cs b/StructureHelperTests/FunctionalTests/Ndms/Calculators/ForceCalculatorTests/RCSectionsTest.cs index 314503d..25d9435 100644 --- a/StructureHelperTests/FunctionalTests/Ndms/Calculators/ForceCalculatorTests/RCSectionsTest.cs +++ b/StructureHelperTests/FunctionalTests/Ndms/Calculators/ForceCalculatorTests/RCSectionsTest.cs @@ -11,7 +11,7 @@ namespace StructureHelperTests.FunctionalTests.Ndms.Calculators.ForceCalculatorT { public class RCSectionsTest { - [TestCase(0.4d, 0.6d, 0.012d, 0.025d, 2, 2, false, -0.00068471024318306586d, -0.0030411189808055242d, 0.00034289928716916179d)] + [TestCase(0.4d, 0.6d, 0.012d, 0.025d, 2, 2, false, -0.00068593466107645337d, -0.0030411189808055242d, 0.00034289928716916179d)] public void Run_ShouldPass(double width, double height, double topDiametr, double bottomDiametr, int widthCount, int heightCount, bool isBuckling, double expectedKx, double expectedKy, double expectedEpsZ) { //Arrange diff --git a/StructureHelperTests/UnitTests/MaterialTests/MaterialStrengthTest.cs b/StructureHelperTests/UnitTests/MaterialTests/MaterialStrengthTest.cs index 44c3211..63bae84 100644 --- a/StructureHelperTests/UnitTests/MaterialTests/MaterialStrengthTest.cs +++ b/StructureHelperTests/UnitTests/MaterialTests/MaterialStrengthTest.cs @@ -14,10 +14,10 @@ namespace StructureHelperTests.UnitTests.MaterialTests [TestCase(HeadmaterialType.Reinforcement500, CodeTypes.SP63_2018, LimitStates.ULS, CalcTerms.LongTerm, 434782608.69565225d, 434782608.69565225d)] [TestCase(HeadmaterialType.Reinforcement500, CodeTypes.SP63_2018, LimitStates.SLS, CalcTerms.ShortTerm, 5e8d, 5e8d)] [TestCase(HeadmaterialType.Reinforcement500, CodeTypes.SP63_2018, LimitStates.SLS, CalcTerms.ShortTerm, 5e8d, 5e8d)] - [TestCase(HeadmaterialType.Concrete40, CodeTypes.SP63_2018, LimitStates.ULS, CalcTerms.ShortTerm, 22461538.46153846d, 1395297.0017909051d)] - [TestCase(HeadmaterialType.Concrete40, CodeTypes.SP63_2018, LimitStates.ULS, CalcTerms.LongTerm, 20215384.615384616d, 1255767.3016118146d)] - [TestCase(HeadmaterialType.Concrete40, CodeTypes.SP63_2018, LimitStates.SLS, CalcTerms.ShortTerm, 29200000.0d, 2092945.5026863578d)] - [TestCase(HeadmaterialType.Concrete40, CodeTypes.SP63_2018, LimitStates.SLS, CalcTerms.LongTerm, 29200000.0d, 2092945.5026863578d)] + [TestCase(HeadmaterialType.Concrete40, CodeTypes.SP63_2018, LimitStates.ULS, CalcTerms.ShortTerm, 22199999.999999996d, 1395297.0017909051d)] + [TestCase(HeadmaterialType.Concrete40, CodeTypes.SP63_2018, LimitStates.ULS, CalcTerms.LongTerm, 19980000.0d, 1255767.3016118146d)] + [TestCase(HeadmaterialType.Concrete40, CodeTypes.SP63_2018, LimitStates.SLS, CalcTerms.ShortTerm, 28860000.0d, 2092945.5026863578d)] + [TestCase(HeadmaterialType.Concrete40, CodeTypes.SP63_2018, LimitStates.SLS, CalcTerms.LongTerm, 28860000.0d, 2092945.5026863578d)] public void Run_ShouldPass(HeadmaterialType headmaterialType, CodeTypes code, LimitStates limitState, CalcTerms calcTerm, double expectedCompressive, double expectedTensile) { //Arrange diff --git a/StructureHelperTests/UnitTests/Ndms/CheckPrimitiveCollectionLogicTests.cs b/StructureHelperTests/UnitTests/Ndms/CheckPrimitiveCollectionLogicTests.cs index b43ca6d..ad51f06 100644 --- a/StructureHelperTests/UnitTests/Ndms/CheckPrimitiveCollectionLogicTests.cs +++ b/StructureHelperTests/UnitTests/Ndms/CheckPrimitiveCollectionLogicTests.cs @@ -6,6 +6,7 @@ using StructureHelperLogics.Models.Primitives; using StructureHelperLogics.NdmCalculations.Primitives.Logics; using StructureHelperLogics.NdmCalculations.Primitives; using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelper.Models.Materials; namespace StructureHelperTests.UnitTests.Ndms @@ -53,9 +54,14 @@ namespace StructureHelperTests.UnitTests.Ndms { // Arrange var rebarMock = new Mock(); + var ndmElementMoq = new Mock(); + var headMaterialMoq = new Mock(); + _mockHasPrimitives.Setup(x => x.Primitives).Returns(new List { rebarMock.Object }); _mockCheckRebarPrimitiveLogic.Setup(x => x.Check()).Returns(false); _mockCheckRebarPrimitiveLogic.Setup(x => x.CheckResult).Returns("Rebar check failed\n"); + rebarMock.Setup(x => x.NdmElement).Returns(ndmElementMoq.Object); + ndmElementMoq.Setup(x => x.HeadMaterial).Returns(headMaterialMoq.Object); // Act var result = _mockCheckPrimitiveCollectionLogic.Object.Check(); @@ -71,10 +77,14 @@ namespace StructureHelperTests.UnitTests.Ndms // Arrange var rebarMock = new Mock(); var hostPrimitiveMock = new Mock(); + var ndmElementMoq = new Mock(); + var headMaterialMoq = new Mock(); rebarMock.Setup(x => x.HostPrimitive).Returns(hostPrimitiveMock.Object); rebarMock.Setup(x => x.Name).Returns("RebarName"); hostPrimitiveMock.Setup(x => x.Name).Returns("HostPrimitiveName"); + rebarMock.Setup(x => x.NdmElement).Returns(ndmElementMoq.Object); + ndmElementMoq.Setup(x => x.HeadMaterial).Returns(headMaterialMoq.Object); _mockHasPrimitives.Setup(x => x.Primitives).Returns(new List { rebarMock.Object }); _mockCheckRebarPrimitiveLogic.Setup(x => x.Check()).Returns(true); // Assume rebar check passes @@ -93,10 +103,16 @@ namespace StructureHelperTests.UnitTests.Ndms { // Arrange var rebarMock = new Mock(); + var ndmElementMoq = new Mock(); + var headMaterialMoq = new Mock(); var hostPrimitiveMock = new Mock(); rebarMock.Setup(x => x.HostPrimitive).Returns(hostPrimitiveMock.Object); rebarMock.Setup(x => x.Name).Returns("RebarName"); + rebarMock.Setup(x => x.NdmElement).Returns(ndmElementMoq.Object); + ndmElementMoq.Setup(x => x.HeadMaterial).Returns(headMaterialMoq.Object); + hostPrimitiveMock.Setup(x => x.NdmElement).Returns(ndmElementMoq.Object); + _mockHasPrimitives.Setup(x => x.Primitives).Returns(new List { rebarMock.Object, hostPrimitiveMock.Object }); _mockCheckRebarPrimitiveLogic.Setup(x => x.Check()).Returns(true); diff --git a/StructureHelperTests/UnitTests/UpdateStrategiesTests/HasCalculatorsUpdateCloningStrategyTests.cs b/StructureHelperTests/UnitTests/UpdateStrategiesTests/HasCalculatorsUpdateCloningStrategyTests.cs index 1157a0e..819c8f7 100644 --- a/StructureHelperTests/UnitTests/UpdateStrategiesTests/HasCalculatorsUpdateCloningStrategyTests.cs +++ b/StructureHelperTests/UnitTests/UpdateStrategiesTests/HasCalculatorsUpdateCloningStrategyTests.cs @@ -4,6 +4,7 @@ using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Calculators; using StructureHelperLogics.NdmCalculations.Analyses.ByForces; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; using StructureHelperLogics.NdmCalculations.Cracking; using System; using System.Collections.Generic; @@ -15,26 +16,31 @@ namespace StructureHelperTests.UnitTests.UpdateStrategiesTests [TestFixture] public class HasCalculatorsUpdateCloningStrategyTests { + private Mock _cloningStrategyContainerMoq; private Mock _cloningStrategyMock; private Mock> _forceCalculatorUpdateStrategyMock; private Mock> _crackCalculatorUpdateStrategyMock; private Mock> _limitCurvesCalculatorUpdateStrategyMock; + private Mock> _valueDiagramCalculatorUpdateStrategyMock; private HasCalculatorsUpdateCloningStrategy _strategy; [SetUp] public void SetUp() { + _cloningStrategyContainerMoq = new Mock(); _cloningStrategyMock = new Mock(); _forceCalculatorUpdateStrategyMock = new Mock>(); _crackCalculatorUpdateStrategyMock = new Mock>(); _limitCurvesCalculatorUpdateStrategyMock = new Mock>(); + _valueDiagramCalculatorUpdateStrategyMock = new Mock>(); + _cloningStrategyContainerMoq.Setup(m => m.ForceCalculatorStrategy).Returns(_forceCalculatorUpdateStrategyMock.Object); + _cloningStrategyContainerMoq.Setup(m => m.CrackCalculatorStrategy).Returns(_crackCalculatorUpdateStrategyMock.Object); + _cloningStrategyContainerMoq.Setup(m => m.LimitCurvesCalculatorStrategy).Returns(_limitCurvesCalculatorUpdateStrategyMock.Object); + _cloningStrategyContainerMoq.Setup(m => m.ValueDiagramCalculatorStrategy).Returns(_valueDiagramCalculatorUpdateStrategyMock.Object); _strategy = new HasCalculatorsUpdateCloningStrategy( _cloningStrategyMock.Object, - _forceCalculatorUpdateStrategyMock.Object, - _crackCalculatorUpdateStrategyMock.Object, - _limitCurvesCalculatorUpdateStrategyMock.Object - ); + _cloningStrategyContainerMoq.Object); } [Test] diff --git a/StructureHelperTests/UnitTests/ValueDiagramsTests/ValueDiagramCalculatorUpdateCloningStrategyTests.cs b/StructureHelperTests/UnitTests/ValueDiagramsTests/ValueDiagramCalculatorUpdateCloningStrategyTests.cs new file mode 100644 index 0000000..e30dfbd --- /dev/null +++ b/StructureHelperTests/UnitTests/ValueDiagramsTests/ValueDiagramCalculatorUpdateCloningStrategyTests.cs @@ -0,0 +1,89 @@ +using Moq; +using NUnit.Framework; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; +using StructureHelperLogics.NdmCalculations.Primitives; +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelperTests.UnitTests.ValueDiagramsTests +{ + using Moq; + using NUnit.Framework; + using StructureHelperCommon.Infrastructures.Exceptions; + + [TestFixture] + public class ValueDiagramCalculatorUpdateCloningStrategyTests + { + private Mock _cloningStrategyMock; + private Mock> _forcesUpdateMock; + private Mock> _primitivesUpdateMock; + private ValueDiagramCalculatorUpdateCloningStrategy _strategy; + + private Mock _sourceMock; + private Mock _targetMock; + private Mock _inputDataMock; + + [SetUp] + public void Setup() + { + _cloningStrategyMock = new Mock(); + _forcesUpdateMock = new Mock>(); + _primitivesUpdateMock = new Mock>(); + + _strategy = new ValueDiagramCalculatorUpdateCloningStrategy( + _cloningStrategyMock.Object, + _forcesUpdateMock.Object, + _primitivesUpdateMock.Object + ); + + _sourceMock = new Mock(); + _targetMock = new Mock(); + _inputDataMock = new Mock(); + + // Both source and target share the same interface object type + _sourceMock.Setup(s => s.InputData).Returns(_inputDataMock.Object); + _targetMock.Setup(t => t.InputData).Returns(_inputDataMock.Object); + } + + [Test] + public void Update_SourceObjectIsNull_Throws() + { + Assert.That( + () => _strategy.Update(_targetMock.Object, null), + Throws.Exception.TypeOf() + ); + } + + [Test] + public void Update_TargetObjectIsNull_Throws() + { + Assert.That( + () => _strategy.Update(null, _sourceMock.Object), + Throws.Exception.TypeOf() + ); + } + + [Test] + public void Update_TargetAndSourceAreSame_DoesNothing() + { + _strategy.Update(_targetMock.Object, _targetMock.Object); + + _primitivesUpdateMock.Verify(p => p.Update(It.IsAny(), It.IsAny()), Times.Never); + _forcesUpdateMock.Verify(f => f.Update(It.IsAny(), It.IsAny()), Times.Never); + } + + [Test] + public void Update_CallsPrimitivesAndForcesStrategies() + { + // Act + _strategy.Update(_targetMock.Object, _sourceMock.Object); + + // Assert: Both strategies are called with the same InputData object + _primitivesUpdateMock.Verify(p => p.Update(_inputDataMock.Object, _inputDataMock.Object), Times.Once); + _forcesUpdateMock.Verify(f => f.Update(_inputDataMock.Object, _inputDataMock.Object), Times.Once); + } + + } +} diff --git a/StructureHelperTests/UnitTests/ValueDiagramsTests/ValueDiagramEntityCheckLogicTests.cs b/StructureHelperTests/UnitTests/ValueDiagramsTests/ValueDiagramEntityCheckLogicTests.cs new file mode 100644 index 0000000..2a3a23b --- /dev/null +++ b/StructureHelperTests/UnitTests/ValueDiagramsTests/ValueDiagramEntityCheckLogicTests.cs @@ -0,0 +1,120 @@ +using Moq; +using NUnit.Framework; +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; + +namespace StructureHelperTests.UnitTests.ValueDiagramsTests +{ + [TestFixture] + public class ValueDiagramEntityCheckLogicTests + { + private Mock> _diagramCheckMock; + private Mock _loggerMock; + private ValueDiagramEntityCheckLogic _logic; + + [SetUp] + public void Setup() + { + _diagramCheckMock = new Mock>(); + _loggerMock = new Mock(); + _logic = new ValueDiagramEntityCheckLogic(_diagramCheckMock.Object, _loggerMock.Object); + } + + [Test] + public void Check_EntityIsNull_ThrowsStructureHelperException() + { + // Arrange + _logic.Entity = null; + + // Act + Assert + Assert.That( + () => _logic.Check(), + Throws.Exception.TypeOf() + ); + } + + [Test] + public void Check_DiagramCheckPasses_ReturnsTrue() + { + // Arrange + var entity = new Mock(); + var diagram = new Mock().Object; + + entity.Setup(e => e.ValueDiagram).Returns(diagram); + entity.Setup(e => e.Name).Returns("TestDiagram"); + + _logic.Entity = entity.Object; + + _diagramCheckMock.Setup(c => c.Check()).Returns(true); + + // Act + var result = _logic.Check(); + + // Assert + Assert.That(result, Is.True); + + _diagramCheckMock.VerifySet(c => c.Entity = diagram, Times.Once); + _diagramCheckMock.Verify(c => c.Check(), Times.Once); + + _loggerMock.Verify(l => l.AddMessage(It.IsAny()), Times.Never); + } + + [Test] + public void Check_DiagramCheckFails_ReturnsFalse_AndLogsError() + { + // Arrange + var entity = new Mock(); + var diagram = new Mock().Object; + + entity.Setup(e => e.ValueDiagram).Returns(diagram); + entity.Setup(e => e.Name).Returns("MyDiagram"); + + _logic.Entity = entity.Object; + + _diagramCheckMock.Setup(c => c.Check()).Returns(false); + _diagramCheckMock.Setup(c => c.CheckResult).Returns("child error message"); + + // Act + var result = _logic.Check(); + + // Assert + Assert.That(result, Is.False); + + _diagramCheckMock.Verify(c => c.Check(), Times.Once); + + _loggerMock.Verify( + l => l.AddMessage(It.Is(s => s.Contains("Diagram: MyDiagram has error: child error message"))), + Times.Once + ); + } + + [Test] + public void Check_EntityNameIsNull_UsesUnnamedInMessage() + { + // Arrange + var entity = new Mock(); + var diagram = new Mock().Object; + + entity.Setup(e => e.ValueDiagram).Returns(diagram); + entity.Setup(e => e.Name).Returns((string)null); + + _logic.Entity = entity.Object; + + _diagramCheckMock.Setup(c => c.Check()).Returns(false); + _diagramCheckMock.Setup(c => c.CheckResult).Returns("xyz"); + + // Act + var result = _logic.Check(); + + // Assert + Assert.That(result, Is.False); + + _loggerMock.Verify( + l => l.AddMessage(It.Is(s => s.Contains(""))), + Times.Once + ); + } + } +} diff --git a/StructureHelperTests/UnitTests/ValueDiagramsTests/ValueDiagramUpdateStrategyTests.cs b/StructureHelperTests/UnitTests/ValueDiagramsTests/ValueDiagramUpdateStrategyTests.cs new file mode 100644 index 0000000..87268ac --- /dev/null +++ b/StructureHelperTests/UnitTests/ValueDiagramsTests/ValueDiagramUpdateStrategyTests.cs @@ -0,0 +1,110 @@ +using Moq; +using NUnit.Framework; +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Shapes; +using StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams; + +namespace StructureHelperTests.UnitTests.ValueDiagramsTests +{ + + + [TestFixture] + public class ValueDiagramUpdateStrategyTests + { + private Mock> _rangeUpdateMock; + private ValueDiagramUpdateStrategy _strategy; + private Mock _targetMock; + private Mock _sourceMock; + private Mock _targetRangeMock; + private Mock _sourceRangeMock; + + [SetUp] + public void Setup() + { + _rangeUpdateMock = new Mock>(); + _strategy = new ValueDiagramUpdateStrategy(_rangeUpdateMock.Object); + + _targetMock = new Mock(); + _sourceMock = new Mock(); + _targetRangeMock = new Mock(); + _sourceRangeMock = new Mock(); + + _targetMock.Setup(t => t.Point2DRange).Returns(_targetRangeMock.Object); + _sourceMock.Setup(s => s.Point2DRange).Returns(_sourceRangeMock.Object); + } + + [Test] + public void Update_TargetIsNull_Throws() + { + Assert.That( + () => _strategy.Update(null, _sourceMock.Object), + Throws.Exception.TypeOf() + ); + } + + [Test] + public void Update_SourceIsNull_Throws() + { + Assert.That( + () => _strategy.Update(_targetMock.Object, null), + Throws.Exception.TypeOf() + ); + } + + [Test] + public void Update_TargetEqualsSource_DoesNothing() + { + _strategy.Update(_targetMock.Object, _targetMock.Object); + + _rangeUpdateMock.Verify(r => r.Update(It.IsAny(), It.IsAny()), Times.Never); + } + + [Test] + public void Update_CopiesStepNumber_AndCallsRangeUpdate() + { + _sourceMock.Setup(s => s.StepNumber).Returns(5); + + _strategy.Update(_targetMock.Object, _sourceMock.Object); + + _targetMock.VerifySet(t => t.StepNumber = 5, Times.Once); + _rangeUpdateMock.Verify(r => r.Update(_targetRangeMock.Object, _sourceRangeMock.Object), Times.Once); + } + + [Test] + public void Update_LazyInitializesRangeUpdateStrategy_WhenNotProvided() + { + // Use parameterless constructor + var strategy = new ValueDiagramUpdateStrategy(); + var targetMock = new Mock(); + var sourceMock = new Mock(); + var targetRangeMock = new Mock(); + var sourceRangeMock = new Mock(); + var pointMoq = new Mock(); + + targetMock.Setup(t => t.Point2DRange).Returns(targetRangeMock.Object); + sourceMock.Setup(s => s.Point2DRange).Returns(sourceRangeMock.Object); + sourceRangeMock.Setup(s => s.StartPoint).Returns(pointMoq.Object); + sourceRangeMock.Setup(s => s.EndPoint).Returns(pointMoq.Object); + targetRangeMock.Setup(s => s.StartPoint).Returns(pointMoq.Object); + targetRangeMock.Setup(s => s.EndPoint).Returns(pointMoq.Object); + + // This should create Point2DRangeUpdateStrategy lazily + Assert.DoesNotThrow(() => strategy.Update(targetMock.Object, sourceMock.Object)); + + // No exception means lazy initialization worked + // Cannot directly mock the default Point2DRangeUpdateStrategy, but at least this ensures no null reference + } + + [Test] + public void Update_DoesNotCallRangeUpdate_WhenUpdateChildrenIsFalse() + { + _strategy.UpdateChildren = false; + + _strategy.Update(_targetMock.Object, _sourceMock.Object); + + _rangeUpdateMock.Verify(r => r.Update(It.IsAny(), It.IsAny()), Times.Never); + } + } + +}