Skip to content

Commit 19bd11a

Browse files
Shallow clone BarVaryingDistributedLoad so the returned objects are not modified (#385)
2 parents ebe9abd + 8202213 commit 19bd11a

File tree

4 files changed

+69
-61
lines changed

4 files changed

+69
-61
lines changed

MidasCivil_Adapter/CRUD/Create/Loads/AreaUniformlyDistributedLoads.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
using BH.oM.Adapters.MidasCivil;
2424
using BH.Engine.Adapter;
25+
using BH.Engine.Base;
2526
using BH.oM.Structure.Loads;
2627
using BH.oM.Structure.Elements;
2728
using BH.oM.Geometry;
@@ -38,11 +39,12 @@ public bool CreateCollection(IEnumerable<AreaUniformlyDistributedLoad> areaUnifo
3839

3940
foreach (AreaUniformlyDistributedLoad areaUniformlyDistributedLoad in areaUniformlyDistributedLoads)
4041
{
42+
AreaUniformlyDistributedLoad load = areaUniformlyDistributedLoad.ShallowClone();
4143
List<string> midasPressureLoads = new List<string>();
42-
string FEMeshLoadPath = CreateSectionFile(areaUniformlyDistributedLoad.Loadcase.Name + "\\PRESSURE");
44+
string FEMeshLoadPath = CreateSectionFile(load.Loadcase.Name + "\\PRESSURE");
4345
string midasLoadGroup = Adapters.MidasCivil.Convert.FromLoadGroup(areaUniformlyDistributedLoad);
4446

45-
List<IAreaElement> assignedElements = areaUniformlyDistributedLoad.Objects.Elements;
47+
List<IAreaElement> assignedElements = load.Objects.Elements;
4648

4749
List<string> assignedFEMeshes = new List<string>();
4850

@@ -55,23 +57,23 @@ public bool CreateCollection(IEnumerable<AreaUniformlyDistributedLoad> areaUnifo
5557
}
5658
}
5759

58-
List<double> loadVectors = new List<double> { areaUniformlyDistributedLoad.Pressure.X,
59-
areaUniformlyDistributedLoad.Pressure.Y,
60-
areaUniformlyDistributedLoad.Pressure.Z};
60+
List<double> loadVectors = new List<double> { load.Pressure.X,
61+
load.Pressure.Y,
62+
load.Pressure.Z};
6163

6264
Vector zeroVector = new Vector { X = 0, Y = 0, Z = 0 };
6365

6466
for (int i = 0; i < 3; i++)
6567
{
66-
areaUniformlyDistributedLoad.Pressure = zeroVector;
68+
load.Pressure = zeroVector;
6769

6870
if (loadVectors[i] != 0)
6971
{
70-
areaUniformlyDistributedLoad.Pressure = CreateSingleComponentVector(i, loadVectors[i]);
72+
load.Pressure = CreateSingleComponentVector(i, loadVectors[i]);
7173

7274
foreach (string assignedFEMesh in assignedFEMeshes)
7375
{
74-
midasPressureLoads.Add(Adapters.MidasCivil.Convert.FromAreaUniformlyDistributedLoad(areaUniformlyDistributedLoad, assignedFEMesh, m_midasCivilVersion, m_forceUnit, m_lengthUnit));
76+
midasPressureLoads.Add(Adapters.MidasCivil.Convert.FromAreaUniformlyDistributedLoad(load, assignedFEMesh, m_midasCivilVersion, m_forceUnit, m_lengthUnit));
7577
}
7678
}
7779
}

MidasCivil_Adapter/CRUD/Create/Loads/BarPointLoads.cs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
using BH.oM.Structure.Loads;
2525
using BH.oM.Geometry;
2626
using BH.Engine.Adapter;
27+
using BH.Engine.Base;
2728
using System.IO;
2829
using System.Collections.Generic;
2930
using System.Linq;
@@ -42,35 +43,36 @@ private bool CreateCollection(IEnumerable<BarPointLoad> barPointLoads)
4243

4344
foreach (BarPointLoad barPointLoad in barPointLoads)
4445
{
46+
BarPointLoad load = barPointLoad.ShallowClone();
4547
List<string> midasBarLoads = new List<string>();
46-
string barLoadPath = CreateSectionFile(barPointLoad.Loadcase.Name + "\\BEAMLOAD");
48+
string barLoadPath = CreateSectionFile(load.Loadcase.Name + "\\BEAMLOAD");
4749
string midasLoadGroup = Adapters.MidasCivil.Convert.FromLoadGroup(barPointLoad);
4850

4951
List<string> assignedBars = barPointLoad.Objects.Elements.Select(x => x.AdapterId<string>(typeof(MidasCivilId))).ToList();
5052

51-
List<double> loadVectors = new List<double> { barPointLoad.Force.X,
52-
barPointLoad.Force.Y,
53-
barPointLoad.Force.Z,
54-
barPointLoad.Moment.X,
55-
barPointLoad.Moment.Y,
56-
barPointLoad.Moment.Z};
53+
List<double> loadVectors = new List<double> { load.Force.X,
54+
load.Force.Y,
55+
load.Force.Z,
56+
load.Moment.X,
57+
load.Moment.Y,
58+
load.Moment.Z};
5759

5860
Vector zeroVector = new Vector { X = 0, Y = 0, Z = 0 };
5961

6062
for (int i = 0; i < 6; i++)
6163
{
62-
barPointLoad.Force = zeroVector;
63-
barPointLoad.Moment = zeroVector;
64+
load.Force = zeroVector;
65+
load.Moment = zeroVector;
6466

6567
if (loadVectors[i] != 0)
6668
{
6769
if (i < 3)
6870
{
69-
barPointLoad.Force = CreateSingleComponentVector(i, loadVectors[i]);
71+
load.Force = CreateSingleComponentVector(i, loadVectors[i]);
7072

7173
foreach (string assignedBar in assignedBars)
7274
{
73-
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarPointLoad(barPointLoad, assignedBar, "Force", m_forceUnit, m_lengthUnit));
75+
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarPointLoad(load, assignedBar, "Force", m_forceUnit, m_lengthUnit));
7476
}
7577
}
7678
else
@@ -79,7 +81,7 @@ private bool CreateCollection(IEnumerable<BarPointLoad> barPointLoads)
7981

8082
foreach (string assignedBar in assignedBars)
8183
{
82-
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarPointLoad(barPointLoad, assignedBar, "Moment", m_forceUnit, m_lengthUnit));
84+
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarPointLoad(load, assignedBar, "Moment", m_forceUnit, m_lengthUnit));
8385
}
8486
}
8587

MidasCivil_Adapter/CRUD/Create/Loads/BarUniformlyDistributedLoads.cs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
using System.IO;
2828
using System.Collections.Generic;
2929
using System.Linq;
30+
using BH.Engine.Base;
3031

3132
namespace BH.Adapter.MidasCivil
3233
{
@@ -42,44 +43,45 @@ private bool CreateCollection(IEnumerable<BarUniformlyDistributedLoad> barUnifor
4243

4344
foreach (BarUniformlyDistributedLoad barUniformlyDistributedLoad in barUniformlyDistributedLoads)
4445
{
46+
BarUniformlyDistributedLoad load = barUniformlyDistributedLoad.ShallowClone();
4547
List<string> midasBarLoads = new List<string>();
46-
string barLoadPath = CreateSectionFile(barUniformlyDistributedLoad.Loadcase.Name + "\\BEAMLOAD");
48+
string barLoadPath = CreateSectionFile(load.Loadcase.Name + "\\BEAMLOAD");
4749
string midasLoadGroup = Adapters.MidasCivil.Convert.FromLoadGroup(barUniformlyDistributedLoad);
4850

49-
List<string> assignedBars = barUniformlyDistributedLoad.Objects.Elements.Select(x => x.AdapterId<string>(typeof(MidasCivilId))).ToList();
51+
List<string> assignedBars = load.Objects.Elements.Select(x => x.AdapterId<string>(typeof(MidasCivilId))).ToList();
5052

51-
List<double> loadVectors = new List<double> { barUniformlyDistributedLoad.Force.X,
52-
barUniformlyDistributedLoad.Force.Y,
53-
barUniformlyDistributedLoad.Force.Z,
54-
barUniformlyDistributedLoad.Moment.X,
55-
barUniformlyDistributedLoad.Moment.Y,
56-
barUniformlyDistributedLoad.Moment.Z};
53+
List<double> loadVectors = new List<double> { load.Force.X,
54+
load.Force.Y,
55+
load.Force.Z,
56+
load.Moment.X,
57+
load.Moment.Y,
58+
load.Moment.Z};
5759

5860
Vector zeroVector = new Vector { X = 0, Y = 0, Z = 0 };
5961

6062
for (int i = 0; i < 6; i++)
6163
{
62-
barUniformlyDistributedLoad.Force = zeroVector;
63-
barUniformlyDistributedLoad.Moment = zeroVector;
64+
load.Force = zeroVector;
65+
load.Moment = zeroVector;
6466

6567
if (loadVectors[i] != 0)
6668
{
6769
if (i < 3)
6870
{
69-
barUniformlyDistributedLoad.Force = CreateSingleComponentVector(i, loadVectors[i]);
71+
load.Force = CreateSingleComponentVector(i, loadVectors[i]);
7072

7173
foreach (string assignedBar in assignedBars)
7274
{
73-
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarUniformlyDistributedLoad(barUniformlyDistributedLoad, assignedBar, "Force", m_forceUnit, m_lengthUnit));
75+
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarUniformlyDistributedLoad(load, assignedBar, "Force", m_forceUnit, m_lengthUnit));
7476
}
7577
}
7678
else
7779
{
78-
barUniformlyDistributedLoad.Moment = CreateSingleComponentVector(i - 3, loadVectors[i]);
80+
load.Moment = CreateSingleComponentVector(i - 3, loadVectors[i]);
7981

8082
foreach (string assignedBar in assignedBars)
8183
{
82-
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarUniformlyDistributedLoad(barUniformlyDistributedLoad, assignedBar, "Moment", m_forceUnit, m_lengthUnit));
84+
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarUniformlyDistributedLoad(load, assignedBar, "Moment", m_forceUnit, m_lengthUnit));
8385
}
8486
}
8587

MidasCivil_Adapter/CRUD/Create/Loads/BarVaryingDistributedLoads.cs

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
using System.IO;
2828
using System.Collections.Generic;
2929
using System.Linq;
30+
using BH.Engine.Base;
3031

3132
namespace BH.Adapter.MidasCivil
3233
{
@@ -42,67 +43,68 @@ private bool CreateCollection(IEnumerable<BarVaryingDistributedLoad> barVaryingD
4243

4344
foreach (BarVaryingDistributedLoad barVaryingDistributedLoad in barVaryingDistributedLoads)
4445
{
45-
if (!barVaryingDistributedLoad.RelativePositions)
46+
BarVaryingDistributedLoad load = barVaryingDistributedLoad.ShallowClone();
47+
if (!load.RelativePositions)
4648
{
4749
Engine.Base.Compute.RecordError("The midas adapter can only handle BarVaryingDistributedLoads with relative positions. Please update the loads to be set with this format.");
4850
continue;
4951
}
5052

51-
if (barVaryingDistributedLoad.StartPosition >= barVaryingDistributedLoad.EndPosition)
53+
if (load.StartPosition >= load.EndPosition)
5254
{
5355
Engine.Base.Compute.RecordError("Midas civil only supports start positions less than end positions for BarVaryingDistributedLoads.");
5456
continue;
5557
}
5658

5759
List<string> midasBarLoads = new List<string>();
58-
string barLoadPath = CreateSectionFile(barVaryingDistributedLoad.Loadcase.Name + "\\BEAMLOAD");
59-
string midasLoadGroup = Adapters.MidasCivil.Convert.FromLoadGroup(barVaryingDistributedLoad);
60+
string barLoadPath = CreateSectionFile(load.Loadcase.Name + "\\BEAMLOAD");
61+
string midasLoadGroup = Adapters.MidasCivil.Convert.FromLoadGroup(load);
6062

61-
List<string> assignedBars = barVaryingDistributedLoad.Objects.Elements.Select(x => x.AdapterId<string>(typeof(MidasCivilId))).ToList();
63+
List<string> assignedBars = load.Objects.Elements.Select(x => x.AdapterId<string>(typeof(MidasCivilId))).ToList();
6264

63-
List<double> startLoadVectors = new List<double> { barVaryingDistributedLoad.ForceAtStart.X,
64-
barVaryingDistributedLoad.ForceAtStart.Y,
65-
barVaryingDistributedLoad.ForceAtStart.Z,
66-
barVaryingDistributedLoad.MomentAtStart.X,
67-
barVaryingDistributedLoad.MomentAtStart.Y,
68-
barVaryingDistributedLoad.MomentAtStart.Z};
65+
List<double> startLoadVectors = new List<double> { load.ForceAtStart.X,
66+
load.ForceAtStart.Y,
67+
load.ForceAtStart.Z,
68+
load.MomentAtStart.X,
69+
load.MomentAtStart.Y,
70+
load.MomentAtStart.Z};
6971

70-
List<double> endLoadVectors = new List<double> { barVaryingDistributedLoad.ForceAtEnd.X,
71-
barVaryingDistributedLoad.ForceAtEnd.Y,
72-
barVaryingDistributedLoad.ForceAtEnd.Z,
73-
barVaryingDistributedLoad.MomentAtEnd.X,
74-
barVaryingDistributedLoad.MomentAtEnd.Y,
75-
barVaryingDistributedLoad.MomentAtEnd.Z};
72+
List<double> endLoadVectors = new List<double> { load.ForceAtEnd.X,
73+
load.ForceAtEnd.Y,
74+
load.ForceAtEnd.Z,
75+
load.MomentAtEnd.X,
76+
load.MomentAtEnd.Y,
77+
load.MomentAtEnd.Z};
7678

7779
Vector zeroVector = new Vector { X = 0, Y = 0, Z = 0 };
7880

7981
for (int i = 0; i < 6; i++)
8082
{
81-
barVaryingDistributedLoad.ForceAtStart = zeroVector;
82-
barVaryingDistributedLoad.MomentAtStart = zeroVector;
83-
barVaryingDistributedLoad.ForceAtEnd = zeroVector;
84-
barVaryingDistributedLoad.MomentAtEnd = zeroVector;
83+
load.ForceAtStart = zeroVector;
84+
load.MomentAtStart = zeroVector;
85+
load.ForceAtEnd = zeroVector;
86+
load.MomentAtEnd = zeroVector;
8587

8688
if (!(startLoadVectors[i] == 0 && endLoadVectors[i] == 0))
8789
{
8890
if (i < 3)
8991
{
90-
barVaryingDistributedLoad.ForceAtStart = CreateSingleComponentVector(i, startLoadVectors[i]);
91-
barVaryingDistributedLoad.ForceAtEnd = CreateSingleComponentVector(i, endLoadVectors[i]);
92+
load.ForceAtStart = CreateSingleComponentVector(i, startLoadVectors[i]);
93+
load.ForceAtEnd = CreateSingleComponentVector(i, endLoadVectors[i]);
9294

9395
foreach (string assignedBar in assignedBars)
9496
{
95-
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarVaryingDistributedLoad(barVaryingDistributedLoad, assignedBar, "Force", m_forceUnit, m_lengthUnit));
97+
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarVaryingDistributedLoad(load, assignedBar, "Force", m_forceUnit, m_lengthUnit));
9698
}
9799
}
98100
else
99101
{
100-
barVaryingDistributedLoad.MomentAtStart = CreateSingleComponentVector(i - 3, startLoadVectors[i]);
101-
barVaryingDistributedLoad.MomentAtEnd = CreateSingleComponentVector(i - 3, endLoadVectors[i]);
102+
load.MomentAtStart = CreateSingleComponentVector(i - 3, startLoadVectors[i]);
103+
load.MomentAtEnd = CreateSingleComponentVector(i - 3, endLoadVectors[i]);
102104

103105
foreach (string assignedBar in assignedBars)
104106
{
105-
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarVaryingDistributedLoad(barVaryingDistributedLoad, assignedBar, "Moment", m_forceUnit, m_lengthUnit));
107+
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarVaryingDistributedLoad(load, assignedBar, "Moment", m_forceUnit, m_lengthUnit));
106108
}
107109
}
108110

0 commit comments

Comments
 (0)