Fix cloninng BeamShearAction

This commit is contained in:
Evgeny Redikultsev
2025-05-25 16:07:55 +05:00
parent f127594b5c
commit add2ed8777
31 changed files with 290 additions and 80 deletions

View File

@@ -15,9 +15,9 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions
/// <inheritdoc/>
public string Name { get; set; }
/// <inheritdoc/>
public IFactoredForceTuple ExternalForce { get; } = new FactoredForceTuple(Guid.NewGuid());
public IFactoredForceTuple ExternalForce { get; set; } = new FactoredForceTuple(Guid.NewGuid());
/// <inheritdoc/>
public IBeamShearAxisAction SupportAction { get; } = new BeamShearAxisAction(Guid.NewGuid());
public IBeamShearAxisAction SupportAction { get; set; } = new BeamShearAxisAction(Guid.NewGuid());
public BeamShearAction(Guid id)
{
@@ -26,10 +26,10 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions
public object Clone()
{
BeamShearAction beamShearAction = new(Guid.NewGuid());
BeamShearAction newItem = new(Guid.NewGuid());
updateStrategy ??= new BeamShearActionUpdateStrategy();
updateStrategy.Update(beamShearAction, this);
return beamShearAction;
updateStrategy.Update(newItem, this);
return newItem;
}
}
}

View File

@@ -0,0 +1,19 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using System;
//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia
//All rights reserved.
namespace StructureHelperCommon.Models.Forces.BeamShearActions
{
internal class BeamShearActionCloneStrategy : ICloneStrategy<IBeamShearAction>
{
private BeamShearAction targetObject;
public IBeamShearAction GetClone(IBeamShearAction sourceObject)
{
targetObject = new(Guid.NewGuid());
return targetObject;
}
}
}

View File

@@ -12,6 +12,7 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions
CheckObject.IsNull(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);

View File

@@ -0,0 +1,40 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Forces.BeamShearActions
{
internal class BeamShearAxisActionCloneStrategy : ICloneStrategy<IBeamShearAxisAction>
{
private ICloningStrategy cloningStrategy;
private IUpdateStrategy<IBeamShearAxisAction> updateStrategy;
public BeamShearAxisActionCloneStrategy(ICloningStrategy cloningStrategy)
{
this.cloningStrategy = cloningStrategy;
}
private BeamShearAxisAction targetObject;
public IBeamShearAxisAction GetClone(IBeamShearAxisAction sourceObject)
{
InitializeStrategies();
targetObject = new(Guid.NewGuid());
updateStrategy.Update(targetObject, sourceObject);
targetObject.ShearLoads.Clear();
foreach (var shearLoad in sourceObject.ShearLoads)
{
targetObject.ShearLoads.Add(cloningStrategy.Clone(shearLoad));
}
return targetObject;
}
private void InitializeStrategies()
{
updateStrategy ??= new BeamShearAxisActionUpdateStrategy();
}
}
}

View File

@@ -1,11 +1,9 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models.Forces.Logics;
using StructureHelperCommon.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia
//All rights reserved.
namespace StructureHelperCommon.Models.Forces.BeamShearActions
{
@@ -19,10 +17,7 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions
if (ReferenceEquals(targetObject, sourceObject)) { return; }
InitializeStrategies();
targetObject.Name = sourceObject.Name;
targetObject.SupportForce = sourceObject.SupportForce;
CheckObject.IsNull(targetObject.SupportForce.CombinationProperty);
CheckObject.IsNull(sourceObject.SupportForce.CombinationProperty);
combinationUpdateStrategy.Update(targetObject.SupportForce.CombinationProperty, sourceObject.SupportForce.CombinationProperty);
targetObject.SupportForce = sourceObject.SupportForce.Clone() as IFactoredForceTuple;
CheckObject.IsNull(targetObject.ShearLoads);
targetObject.ShearLoads.Clear();
CheckObject.IsNull(sourceObject.ShearLoads);

View File

@@ -13,7 +13,7 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions
if (ReferenceEquals(targetObject, sourceObject)) { return; }
InitializeStrategies();
baseUpdateStrategy.Update(targetObject, sourceObject);
targetObject.ForceValue = sourceObject.ForceValue;
targetObject.ForceValue = sourceObject.ForceValue.Clone() as IForceTuple;
targetObject.ForceCoordinate = sourceObject.ForceCoordinate;
}

View File

@@ -13,7 +13,7 @@ namespace StructureHelperCommon.Models.Forces.BeamShearActions
if (ReferenceEquals(targetObject, sourceObject)) { return; }
InitializeStrategies();
baseUpdateStrategy.Update(targetObject, sourceObject);
targetObject.LoadValue = sourceObject.LoadValue;
targetObject.LoadValue = sourceObject.LoadValue.Clone() as IForceTuple;
targetObject.StartCoordinate = sourceObject.StartCoordinate;
targetObject.EndCoordinate = sourceObject.EndCoordinate;
}

View File

@@ -17,10 +17,10 @@ namespace StructureHelperCommon.Models.Forces
/// <summary>
/// External force at the end of bar
/// </summary>
IFactoredForceTuple ExternalForce { get; }
IFactoredForceTuple ExternalForce { get; set; }
/// <summary>
/// Internal loads on bar
/// </summary>
IBeamShearAxisAction SupportAction { get; }
IBeamShearAxisAction SupportAction { get; set; }
}
}