private IEnumerable <BucklingLength> CalculateMemberBucklingLengths(Member Member, BeamAxis Axis) { Node currentNode; BucklingLength currentBucklingLength; List <BucklingLength> bucklingLengths; MEMBERCLASS memberClass; bucklingLengths = new List <BucklingLength>(); memberClass = this.DetermineMemberClass(Member); currentNode = Member.StartNode; currentBucklingLength = new BucklingLength(); foreach (var beam in Member.Beams) { currentBucklingLength.Beams.Add(beam); // Determine the next node in case one of the beams is flipped currentNode = (currentNode == beam.StartNode) ? beam.EndNode : beam.StartNode; // Loop through connected beams to see if one of them is a stability brace foreach (var connectedBeam in currentNode.ConnectedBeams.Where(b => !Member.Beams.Contains(b) && this.StabilityBraces.Contains(b))) { // Check the connection plane and angle of the brace var checkAxis = Axis == BeamAxis.Major ? BeamAxis.Minor : BeamAxis.Major; bool memberInPlaneWithAxis = beam.CheckIBeamInAxisPlane(connectedBeam, checkAxis); double connectionAngle = Math.Abs((beam.GetAngleRelativeToBeamAxis(connectedBeam, checkAxis) + 90) % 180 - 90); // Split the member if the brace connects in the correct place or within 45 of that plane if (memberInPlaneWithAxis || (!memberInPlaneWithAxis && connectionAngle <= 45)) { if (currentBucklingLength.Beams.Count > 1) { bucklingLengths.Add(currentBucklingLength); } currentBucklingLength = new BucklingLength(); break; } } } if (currentBucklingLength.Beams.Count > 1) { bucklingLengths.Add(currentBucklingLength); } bucklingLengths.ForEach(bl => bl.Member = Member); return(bucklingLengths); }
private IEnumerable <BucklingLength> CalculateMemberUnsupportedLength(Member Member) { Node currentNode; BucklingLength currentBucklingLength; List <BucklingLength> bucklingLengths; MEMBERCLASS memberClass; bucklingLengths = new List <BucklingLength>(); memberClass = this.DetermineMemberClass(Member); currentNode = Member.StartNode; currentBucklingLength = new BucklingLength(); foreach (var beam in Member.Beams) { currentBucklingLength.Beams.Add(beam); currentNode = (currentNode == beam.StartNode) ? beam.EndNode : beam.StartNode; foreach (var connectedBeam in currentNode.ConnectedBeams.Where(cb => !Member.Beams.Contains(cb) && cb.Spec != BeamSpec.MemberTruss)) { bool memberInPlaneWithAxis = beam.CheckIBeamInAxisPlane(connectedBeam, BeamAxis.Major); double connectionAngle = Math.Abs((beam.GetAngleRelativeToBeamAxis(connectedBeam, BeamAxis.Major) + 90) % 180 - 90); if (memberInPlaneWithAxis || (!memberInPlaneWithAxis && connectionAngle <= 45)) { if (CheckMemberRestraint(Member, connectedBeam, memberClass)) { if (currentBucklingLength.Beams.Count > 1) { bucklingLengths.Add(currentBucklingLength); } currentBucklingLength = new BucklingLength(); break; } } } } if (currentBucklingLength.Beams.Count > 1) { bucklingLengths.Add(currentBucklingLength); } bucklingLengths.ForEach(bl => bl.Member = Member); return(bucklingLengths); }
private IEnumerable<BucklingLength> CalculateMemberUnsupportedLength(Member Member) { Node currentNode; BucklingLength currentBucklingLength; List<BucklingLength> bucklingLengths; MEMBERCLASS memberClass; bucklingLengths = new List<BucklingLength>(); memberClass = this.DetermineMemberClass(Member); currentNode = Member.StartNode; currentBucklingLength = new BucklingLength(); foreach (Beam beam in Member.Beams) { currentBucklingLength.Beams.Add(beam); currentNode = (currentNode == beam.StartNode) ? beam.EndNode : beam.StartNode; foreach (Beam connectedBeam in currentNode.ConnectedBeams.Where(cb => !Member.Beams.Contains(cb) && cb.Spec != BEAMSPEC.MEMBERTRUSS)) { double connectionAngle; bool memberInPlaneWithAxis; memberInPlaneWithAxis = beam.CheckIBeamInAxisPlane(connectedBeam, BEAMAXIS.MAJOR); connectionAngle = Math.Abs((beam.GetAngleRelativeToBeamAxis(connectedBeam, BEAMAXIS.MAJOR) + 90) % 180 - 90); if (memberInPlaneWithAxis || (!memberInPlaneWithAxis && connectionAngle <= 45)) if (CheckMemberRestraint(Member, connectedBeam, memberClass)) { if (currentBucklingLength.Beams.Count > 1) bucklingLengths.Add(currentBucklingLength); currentBucklingLength = new BucklingLength(); break; } } } if (currentBucklingLength.Beams.Count > 1) bucklingLengths.Add(currentBucklingLength); bucklingLengths.ForEach(bl => bl.Member = Member); return bucklingLengths; }
private IEnumerable<BucklingLength> CalculateMemberBucklingLengths(Member Member, BEAMAXIS Axis) { Node currentNode; BucklingLength currentBucklingLength; List<BucklingLength> bucklingLengths; MEMBERCLASS memberClass; bucklingLengths = new List<BucklingLength>(); memberClass = this.DetermineMemberClass(Member); currentNode = Member.StartNode; currentBucklingLength = new BucklingLength(); foreach (Beam beam in Member.Beams) { currentBucklingLength.Beams.Add(beam); // Determine the next node in case one of the beams is flipped currentNode = (currentNode == beam.StartNode) ? beam.EndNode : beam.StartNode; // Loop through connected beams to see if one of them is a stability brace foreach (Beam connectedBeam in currentNode.ConnectedBeams.Where(b => !Member.Beams.Contains(b) && this.StabilityBraces.Contains(b))) { double connectionAngle; bool memberInPlaneWithAxis; BEAMAXIS checkAxis; // Check the connection plane and angle of the brace checkAxis = Axis == BEAMAXIS.MAJOR ? BEAMAXIS.MINOR : BEAMAXIS.MAJOR; memberInPlaneWithAxis = beam.CheckIBeamInAxisPlane(connectedBeam, checkAxis); connectionAngle = Math.Abs((beam.GetAngleRelativeToBeamAxis(connectedBeam, checkAxis) + 90) % 180 - 90); // Split the member if the brace connects in the correct place or within 45 of that plane if (memberInPlaneWithAxis || (!memberInPlaneWithAxis && connectionAngle <= 45)) { if (currentBucklingLength.Beams.Count > 1) bucklingLengths.Add(currentBucklingLength); currentBucklingLength = new BucklingLength(); break; } } } if (currentBucklingLength.Beams.Count > 1) bucklingLengths.Add(currentBucklingLength); bucklingLengths.ForEach(bl => bl.Member = Member); return bucklingLengths; }