Example #1
0
        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);
        }
Example #2
0
        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;
        }