Example #1
0
        private bool CheckMemberRestraint(Member MemberToCheck, Beam StartBeam, MEMBERCLASS MemberClass)
        {
            bool output = false;

            // Gather all nodes connected to the beam to check or any beams parallel to it
            var nodes = new HashSet <Node>(BeamHelpers.GatherParallelBeams(StartBeam).SelectMany(b => new List <Node>()
            {
                b.StartNode, b.EndNode
            }));

            // Check if any of the connected members are class above the current member
            var connectedMembers = nodes.SelectMany(n => n.ConnectedMembers).Where(m => m != null && m != MemberToCheck);

            if (MemberClass == MEMBERCLASS.PRIMARY)
            {
                output = connectedMembers.Any(m => this.PrimaryMembers.Contains(m));
            }
            else if (MemberClass == MEMBERCLASS.SECONDARY)
            {
                output = connectedMembers.Any(m => this.PrimaryMembers.Contains(m) || this.SecondaryMembers.Contains(m));
            }
            else if (MemberClass == MEMBERCLASS.TERTIARY)
            {
                output = connectedMembers.Any(m => this.PrimaryMembers.Contains(m) || this.SecondaryMembers.Contains(m) || this.TertiaryMembers.Contains(m));
            }

            return(output);
        }
Example #2
0
        /// <summary>
        /// Classify the beams in the model accordin to their specifications
        /// </summary>
        void ClassifyBeams()
        {
            const string   status = "Classifying beams...";
            int            beamsProcessed;
            int            totalBeamToProcess;
            HashSet <Beam> beamsToProcess;

            beamsToProcess     = new HashSet <Beam>(this.Beams);
            beamsProcessed     = 0;
            totalBeamToProcess = beamsToProcess.Count;

            // Any vertical beam attached directly to a support node is a column
            Parallel.ForEach(beamsToProcess.Where(b => (b.StartNode.IsSupport || b.EndNode.IsSupport) && (this.ZAxisUp ? b.IsParallelToZ : b.IsParallelToY)), beam =>
            {
                foreach (var parallelBeam in BeamHelpers.GatherParallelBeams(beam))
                {
                    parallelBeam.Type = BeamType.COLUMN;
                    this.OnModelBuildStatusUpdate(new ModelBuildStatusUpdateEventArgs(status, Interlocked.Increment(ref beamsProcessed), totalBeamToProcess));
                }
            });
            beamsToProcess.RemoveWhere(b => b.Type == BeamType.COLUMN);

            // Classify all remaining beams
            // If a beam is vertical and not a column, then it is a post, otehrwise it is a beam
            // All other beams are classified as braces
            Parallel.ForEach(beamsToProcess, beam =>
            {
                if (beam.Spec == BeamSpec.Unspecified)
                {
                    if ((this.ZAxisUp && beam.IsParallelToZ) || !this.ZAxisUp && beam.IsParallelToY)
                    {
                        beam.Type = BeamType.POST;
                    }
                    else
                    {
                        beam.Type = BeamType.BEAM;
                    }
                }
                else
                {
                    beam.Type = BeamType.BRACE;
                }

                this.OnModelBuildStatusUpdate(new ModelBuildStatusUpdateEventArgs(status, Interlocked.Increment(ref beamsProcessed), totalBeamToProcess));
            });
        }