private void addToShearMomentDiagram(LineElement line, DirectionalLineLoad load, float[,] controlPoints, LineForceComponent component, float scale)
{
if (load == null) return;
float dirComponent = 0f, position;
// Get Load direction in Local Coordinate frame
Vector3 dir = getLocalDir(line, load.Direction);
switch (component)
{
case LineForceComponent.Axial:
case LineForceComponent.Torsion:
dirComponent = dir.X;
break;
case LineForceComponent.Shear22:
case LineForceComponent.Moment33:
dirComponent = dir.Y;
break;
case LineForceComponent.Shear33:
case LineForceComponent.Moment22:
dirComponent = dir.Z;
break;
}
int i;
switch (component)
{
case LineForceComponent.Shear22:
case LineForceComponent.Shear33:
for (i = 0; i < controlPoints.GetLength(0); i++)
{
position = controlPoints[i,0] * line.Length;
controlPoints[i, 1] += addToShearDiagram(load, dirComponent, position, line.Length) * scale;
}
break;
case LineForceComponent.Moment33:
dirComponent = -dirComponent;
for (i = 0; i < controlPoints.GetLength(0); i++)
{
position = controlPoints[i,0] * line.Length;
controlPoints[i, 1] += addToMomentDiagram(load, dirComponent, position, line.Length) * scale;
}
break;
case LineForceComponent.Moment22:
for (i = 0; i < controlPoints.GetLength(0); i++)
{
position = controlPoints[i,0] * line.Length;
controlPoints[i, 1] += addToMomentDiagram(load, dirComponent, position, line.Length) * scale;
}
break;
default:
break;
}
}