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); }
private bool CheckMemberRestraint(Member MemberToCheck, Beam StartBeam, MEMBERCLASS MemberClass) { bool output; HashSet<Node> nodes; // Gather all nodes connected to the beam to check or any beams parallel to it 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 IEnumerable<Member> 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)); else output = false; return output; }