Skip to content

Commit 9ada7b7

Browse files
Add absolute distances BarVaryingDistributedLoad (#386)
2 parents 19bd11a + 16870d5 commit 9ada7b7

File tree

2 files changed

+60
-26
lines changed

2 files changed

+60
-26
lines changed

MidasCivil_Adapter/CRUD/Create/Loads/BarVaryingDistributedLoads.cs

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,17 @@
2222

2323
using BH.oM.Adapters.MidasCivil;
2424
using BH.Engine.Adapter;
25+
using BH.oM.Structure.Elements;
2526
using BH.oM.Structure.Loads;
2627
using BH.oM.Geometry;
2728
using System.IO;
2829
using System.Collections.Generic;
2930
using System.Linq;
3031
using BH.Engine.Base;
32+
using BH.Engine.Spatial;
33+
using BH.Engine.Geometry;
34+
using BH.Adapter.Adapters.MidasCivil;
35+
using System.Data;
3136

3237
namespace BH.Adapter.MidasCivil
3338
{
@@ -44,24 +49,44 @@ private bool CreateCollection(IEnumerable<BarVaryingDistributedLoad> barVaryingD
4449
foreach (BarVaryingDistributedLoad barVaryingDistributedLoad in barVaryingDistributedLoads)
4550
{
4651
BarVaryingDistributedLoad load = barVaryingDistributedLoad.ShallowClone();
47-
if (!load.RelativePositions)
52+
53+
if (load.StartPosition >= load.EndPosition)
4854
{
49-
Engine.Base.Compute.RecordError("The midas adapter can only handle BarVaryingDistributedLoads with relative positions. Please update the loads to be set with this format.");
55+
Engine.Base.Compute.RecordError("MidasCivil only supports start positions less than end positions for BarVaryingDistributedLoads.");
5056
continue;
5157
}
5258

53-
if (load.StartPosition >= load.EndPosition)
59+
List<double> startPosition = new List<double>();
60+
List<double> endPosition = new List<double>();
61+
62+
63+
foreach (Bar bar in load.Objects.Elements)
5464
{
55-
Engine.Base.Compute.RecordError("Midas civil only supports start positions less than end positions for BarVaryingDistributedLoads.");
56-
continue;
65+
if (load.RelativePositions == false)
66+
{
67+
double length = bar.Length();
68+
69+
startPosition.Add(barVaryingDistributedLoad.StartPosition / length);
70+
endPosition.Add(barVaryingDistributedLoad.EndPosition / length);
71+
72+
if (load.StartPosition / length > 1 || load.EndPosition / length > 1)
73+
Engine.Base.Compute.RecordError("The load start or end position is outside one or more bars");
74+
}
75+
else
76+
{
77+
startPosition.Add(barVaryingDistributedLoad.StartPosition);
78+
endPosition.Add(barVaryingDistributedLoad.EndPosition);
79+
}
5780
}
5881

82+
5983
List<string> midasBarLoads = new List<string>();
6084
string barLoadPath = CreateSectionFile(load.Loadcase.Name + "\\BEAMLOAD");
6185
string midasLoadGroup = Adapters.MidasCivil.Convert.FromLoadGroup(load);
6286

6387
List<string> assignedBars = load.Objects.Elements.Select(x => x.AdapterId<string>(typeof(MidasCivilId))).ToList();
6488

89+
6590
List<double> startLoadVectors = new List<double> { load.ForceAtStart.X,
6691
load.ForceAtStart.Y,
6792
load.ForceAtStart.Z,
@@ -92,19 +117,21 @@ private bool CreateCollection(IEnumerable<BarVaryingDistributedLoad> barVaryingD
92117
load.ForceAtStart = CreateSingleComponentVector(i, startLoadVectors[i]);
93118
load.ForceAtEnd = CreateSingleComponentVector(i, endLoadVectors[i]);
94119

95-
foreach (string assignedBar in assignedBars)
120+
for (int j = 0; j < assignedBars.Count; j++)
96121
{
97-
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarVaryingDistributedLoad(load, assignedBar, "Force", m_forceUnit, m_lengthUnit));
122+
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarVaryingDistributedLoad(load,
123+
assignedBars[j], "Force", m_forceUnit, m_lengthUnit, startPosition[j], endPosition[j]));
98124
}
99125
}
100126
else
101127
{
102128
load.MomentAtStart = CreateSingleComponentVector(i - 3, startLoadVectors[i]);
103129
load.MomentAtEnd = CreateSingleComponentVector(i - 3, endLoadVectors[i]);
104130

105-
foreach (string assignedBar in assignedBars)
131+
for (int j = 0; j < assignedBars.Count; j++)
106132
{
107-
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarVaryingDistributedLoad(load, assignedBar, "Moment", m_forceUnit, m_lengthUnit));
133+
midasBarLoads.Add(Adapters.MidasCivil.Convert.FromBarVaryingDistributedLoad(load,
134+
assignedBars[j], "Moment", m_forceUnit, m_lengthUnit, startPosition[j], endPosition[j]));
108135
}
109136
}
110137

MidasCivil_Adapter/Convert/ToMidasCivil/Loads/FromBarVaryingDistributedLoad.cs

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
using BH.oM.Structure.Loads;
2424
using BH.oM.Geometry;
2525
using System.Collections.Generic;
26+
using BH.oM.Structure.Elements;
27+
using BH.Engine.Spatial;
28+
2629

2730
namespace BH.Adapter.Adapters.MidasCivil
2831
{
@@ -32,32 +35,36 @@ public static partial class Convert
3235
/**** Public Methods ****/
3336
/***************************************************/
3437

35-
public static string FromBarVaryingDistributedLoad(this BarVaryingDistributedLoad barLoad, string assignedBar, string loadType, string forceUnit, string lengthUnit)
38+
public static string FromBarVaryingDistributedLoad(this BarVaryingDistributedLoad barLoad, string assignedBar, string loadType, string forceUnit, string lengthUnit, double startPosition, double endPosition)
3639
{
3740
string midasBarLoad = null;
41+
string direction = "";
42+
string startLoad = "";
43+
string endLoad = "";
44+
string designation = "";
45+
3846
if (loadType == "Force")
3947
{
40-
string direction = FromVector(barLoad.ForceAtStart);
41-
midasBarLoad = assignedBar + ",BEAM,UNILOAD," + FromLoadAxis(barLoad.Axis) + direction +
42-
"," + FromLoadProjection(barLoad.Projected) +
43-
",NO,aDir[1], , , ," + barLoad.StartPosition + "," +
44-
FromVectorDirection(barLoad.ForceAtStart, direction).ForcePerLengthFromSI(forceUnit, lengthUnit).ToString() + "," +
45-
barLoad.EndPosition + ","
46-
+ FromVectorDirection(barLoad.ForceAtEnd, direction).ForcePerLengthFromSI(forceUnit, lengthUnit).ToString() +
47-
",0,0,0,0," + barLoad.Name + ",NO,0,0,NO";
48+
direction = FromVector(barLoad.ForceAtStart);
49+
startLoad = FromVectorDirection(barLoad.ForceAtStart, direction).ForcePerLengthFromSI(forceUnit, lengthUnit).ToString();
50+
endLoad = FromVectorDirection(barLoad.ForceAtEnd, direction).ForcePerLengthFromSI(forceUnit, lengthUnit).ToString();
51+
designation = "UNILOAD";
4852
}
4953
else
5054
{
51-
string direction = FromVector(barLoad.MomentAtStart);
52-
midasBarLoad = assignedBar + ",BEAM,UNIMOMENT," + FromLoadAxis(barLoad.Axis) + direction +
53-
"," + FromLoadProjection(barLoad.Projected) +
54-
",NO,aDir[1], , , ," + barLoad.StartPosition + "," +
55-
FromVectorDirection(barLoad.MomentAtStart, direction).MomentPerLengthFromSI(forceUnit, lengthUnit).ToString() + "," +
56-
barLoad.EndPosition + ","
57-
+ FromVectorDirection(barLoad.MomentAtEnd, direction).MomentPerLengthFromSI(forceUnit, lengthUnit).ToString() +
58-
",0,0,0,0," + barLoad.Name + ",NO,0,0,NO";
55+
direction = FromVector(barLoad.MomentAtStart);
56+
startLoad = FromVectorDirection(barLoad.MomentAtStart, direction).MomentPerLengthFromSI(forceUnit, lengthUnit).ToString();
57+
endLoad = FromVectorDirection(barLoad.MomentAtEnd, direction).MomentPerLengthFromSI(forceUnit, lengthUnit).ToString();
58+
designation = "UNIMOMENT";
59+
5960
}
6061

62+
midasBarLoad = assignedBar + ",BEAM," + designation + "," + FromLoadAxis(barLoad.Axis) + direction +
63+
"," + FromLoadProjection(barLoad.Projected) +
64+
",NO,aDir[1], , , ," + startPosition + "," +
65+
startLoad + "," + endPosition + "," + endLoad +
66+
",0,0,0,0," + barLoad.Name + ",NO,0,0,NO";
67+
6168
return midasBarLoad;
6269
}
6370

0 commit comments

Comments
 (0)