/// <summary> /// Get ActorRoles mapped to roles held in RoleFilter Flags /// </summary> /// <param name="role">RoleFilter</param> /// <returns>List of IfcActorRole</returns> private List <IfcActorRole> GetActorRoles(RoleFilter role) { if (RoleMap == null) { RoleMap = new Dictionary <RoleFilter, IfcActorRole>(); } List <IfcActorRole> actorRoles = new List <IfcActorRole>(); if (role.HasFlag(RoleFilter.Architectural)) { actorRoles.Add(RoleMap.ContainsKey(RoleFilter.Architectural) ? RoleMap[RoleFilter.Architectural] : MapRole(RoleFilter.Architectural, IfcRole.Architect)); } if (role.HasFlag(RoleFilter.Mechanical)) { actorRoles.Add(RoleMap.ContainsKey(RoleFilter.Mechanical) ? RoleMap[RoleFilter.Mechanical] : MapRole(RoleFilter.Mechanical, IfcRole.MechanicalEngineer)); } if (role.HasFlag(RoleFilter.Electrical)) { actorRoles.Add(RoleMap.ContainsKey(RoleFilter.Electrical) ? RoleMap[RoleFilter.Electrical] : MapRole(RoleFilter.Electrical, IfcRole.ElectricalEngineer)); } if (role.HasFlag(RoleFilter.Plumbing)) { actorRoles.Add(RoleMap.ContainsKey(RoleFilter.Plumbing) ? RoleMap[RoleFilter.Plumbing] : MapRole(RoleFilter.Plumbing, IfcRole.UserDefined)); } if (role.HasFlag(RoleFilter.FireProtection)) { actorRoles.Add(RoleMap.ContainsKey(RoleFilter.FireProtection) ? RoleMap[RoleFilter.FireProtection] : MapRole(RoleFilter.FireProtection, IfcRole.UserDefined)); } if (role.HasFlag(RoleFilter.Unknown)) { actorRoles.Add(RoleMap.ContainsKey(RoleFilter.Unknown) ? RoleMap[RoleFilter.Unknown] : MapRole(RoleFilter.Unknown, IfcRole.UserDefined)); } return(actorRoles); }
/// <summary> /// Extension method to use default role configuration resource files /// </summary> /// <param name="roles">MergeRoles, Flag enum with one or more roles</param> /// <param name="append">true = add, false = overwrite existing </param> /// <param name="rolesFilter">Dictionary of roles to OutPutFilters to use for merge, overwrites current assigned dictionary</param> public void ApplyRoleFilters(RoleFilter roles, bool append = false, Dictionary <RoleFilter, OutPutFilters> rolesFilter = null) { if (rolesFilter != null) { RolesFilterHolder = rolesFilter; } bool init = append ? !this.IsEmpty(): false; OutPutFilters mergeFilter = null; foreach (RoleFilter role in Enum.GetValues(typeof(RoleFilter))) { if (roles.HasFlag(role)) { if (RolesFilterHolder.ContainsKey(role)) { mergeFilter = RolesFilterHolder[role]; } else { //load defaults string mergeFile = GetDefaultRoleFile(role); if (!string.IsNullOrEmpty(mergeFile)) { mergeFilter = new OutPutFilters(mergeFile, role); RolesFilterHolder[role] = mergeFilter; } } if (mergeFilter != null) { if (!init) { this.Copy(mergeFilter); //start a fresh init = true; //want to merge on next loop iteration } else { this.Merge(mergeFilter); } } mergeFilter = null; } } //add the default property filters OutPutFilters defaultPropFilters = new OutPutFilters(null, RoleFilter.Unknown, ImportSet.PropertyFilters); this.Merge(defaultPropFilters); //save the applied roles at end as this.Copy(mergeFilter) would set to first role in RoleFilter AppliedRoles = roles; }
/// <summary> /// Get ActorRoles mapped to roles held in RoleFilter Flags /// </summary> /// <param name="role">RoleFilter</param> /// <returns>List of IfcActorRole</returns> private List <IIfcActorRole> GetActorRoles(RoleFilter role) { if (RoleMap == null) { RoleMap = new Dictionary <RoleFilter, IIfcActorRole>(); } var actorRoles = new List <IIfcActorRole>(); using (var tx = Model.BeginTransaction("RoleSettings")) { if (role.HasFlag(RoleFilter.Architectural)) { actorRoles.Add( RoleMap.ContainsKey(RoleFilter.Architectural) ? RoleMap[RoleFilter.Architectural] : MapRole(RoleFilter.Architectural, IfcRoleEnum.ARCHITECT)); } if (role.HasFlag(RoleFilter.Mechanical)) { actorRoles.Add( RoleMap.ContainsKey(RoleFilter.Mechanical) ? RoleMap[RoleFilter.Mechanical] : MapRole(RoleFilter.Mechanical, IfcRoleEnum.MECHANICALENGINEER)); } if (role.HasFlag(RoleFilter.Electrical)) { actorRoles.Add( RoleMap.ContainsKey(RoleFilter.Electrical) ? RoleMap[RoleFilter.Electrical] : MapRole(RoleFilter.Electrical, IfcRoleEnum.ELECTRICALENGINEER)); } if (role.HasFlag(RoleFilter.Plumbing)) { actorRoles.Add( RoleMap.ContainsKey(RoleFilter.Plumbing) ? RoleMap[RoleFilter.Plumbing] : MapRole(RoleFilter.Plumbing, IfcRoleEnum.USERDEFINED)); } if (role.HasFlag(RoleFilter.FireProtection)) { actorRoles.Add( RoleMap.ContainsKey(RoleFilter.FireProtection) ? RoleMap[RoleFilter.FireProtection] : MapRole(RoleFilter.FireProtection, IfcRoleEnum.USERDEFINED)); } if (role.HasFlag(RoleFilter.Unknown)) { actorRoles.Add( RoleMap.ContainsKey(RoleFilter.Unknown) ? RoleMap[RoleFilter.Unknown] : MapRole(RoleFilter.Unknown, IfcRoleEnum.USERDEFINED)); } tx.Commit(); } return(actorRoles); }
/// <summary> /// Extension method to use default role configuration resource files /// </summary> /// <param name="roles">MergeRoles, Flag enum with one or more roles</param> /// <param name="append">true = add, false = overwrite existing </param> /// <param name="rolesFilter">Dictionary of roles to OutPutFilters to use for merge, overwrites current assigned dictionary</param> public void ApplyRoleFilters(RoleFilter roles, bool append = false, Dictionary <RoleFilter, OutputFilters> rolesFilter = null) { if (rolesFilter != null) { RolesFilterHolder = rolesFilter; } var init = append && !IsEmpty(); OutputFilters mergeFilter = null; foreach (RoleFilter role in Enum.GetValues(typeof(RoleFilter))) { if (!roles.HasFlag(role)) { continue; } if (RolesFilterHolder.ContainsKey(role)) { mergeFilter = RolesFilterHolder[role]; } else { // load defaults mergeFilter = GetDefaults(role, _log); RolesFilterHolder[role] = mergeFilter; } if (mergeFilter != null) { if (!init) { Copy(mergeFilter); //start a fresh init = true; //want to merge on next loop iteration } else { Merge(mergeFilter); } } mergeFilter = null; } //add the default property filters OutputFilters defaultPropFilters = new OutputFilters(null, _log, RoleFilter.Unknown, ImportSet.PropertyFilters); Merge(defaultPropFilters); //save the applied roles at end as this.Copy(mergeFilter) would set to first role in RoleFilter AppliedRoles = roles; }
public static bool HasMultipleFlags(this RoleFilter filter) { int flagsSet = 0; foreach (RoleFilter flag in Enum.GetValues(typeof(RoleFilter))) { if (filter.HasFlag(flag)) { flagsSet++; if (flagsSet > 1) { return(true); } } } return(false); }
/// <summary> /// Convert a list of IfcActorRole to set correct flags on the returned RoleFilter /// </summary> /// <param name="actorRoles">list of IfcActorRole</param> /// <returns>RoleFilter</returns> public static RoleFilter GetRoleFilters(List <IfcActorRole> actorRoles) { RoleFilter roles = RoleFilter.Unknown; //reset to unknown //set selected roles int idx = 0; foreach (var item in actorRoles) { RoleFilter role = MapActorRole(item); if (!roles.HasFlag(role)) { roles |= role; //add flag to RoleFilter //remove the inital RoleFilter.Unknown, set in declaration unless found role is unknown if ((idx == 0) && (role != RoleFilter.Unknown)) { roles &= ~RoleFilter.Unknown; } idx++; } } return(roles); }
/// <summary> /// Get ActorRoles mapped to roles held in RoleFilter Flags /// </summary> /// <param name="role">RoleFilter</param> /// <returns>List of IfcActorRole</returns> private List<IfcActorRole> GetActorRoles(RoleFilter role) { if (RoleMap == null) RoleMap = new Dictionary<RoleFilter, IfcActorRole>(); List<IfcActorRole> actorRoles = new List<IfcActorRole>(); if (role.HasFlag(RoleFilter.Architectural)) { actorRoles.Add(RoleMap.ContainsKey(RoleFilter.Architectural) ? RoleMap[RoleFilter.Architectural] : MapRole(RoleFilter.Architectural, IfcRole.Architect)); } if (role.HasFlag(RoleFilter.Mechanical)) { actorRoles.Add(RoleMap.ContainsKey(RoleFilter.Mechanical) ? RoleMap[RoleFilter.Mechanical] : MapRole(RoleFilter.Mechanical, IfcRole.MechanicalEngineer)); } if (role.HasFlag(RoleFilter.Electrical)) { actorRoles.Add(RoleMap.ContainsKey(RoleFilter.Electrical) ? RoleMap[RoleFilter.Electrical] : MapRole(RoleFilter.Electrical, IfcRole.ElectricalEngineer)); } if (role.HasFlag(RoleFilter.Plumbing)) { actorRoles.Add(RoleMap.ContainsKey(RoleFilter.Plumbing) ? RoleMap[RoleFilter.Plumbing] : MapRole(RoleFilter.Plumbing, IfcRole.UserDefined)); } if (role.HasFlag(RoleFilter.FireProtection)) { actorRoles.Add(RoleMap.ContainsKey(RoleFilter.FireProtection) ? RoleMap[RoleFilter.FireProtection] : MapRole(RoleFilter.FireProtection, IfcRole.UserDefined)); } if (role.HasFlag(RoleFilter.Unknown)) { actorRoles.Add(RoleMap.ContainsKey(RoleFilter.Unknown) ? RoleMap[RoleFilter.Unknown] : MapRole(RoleFilter.Unknown, IfcRole.UserDefined)); } return actorRoles; }