/// <summary> /// Processes IfcGroup handle. /// </summary> /// <param name="ifcGroup">The IfcGroup handle.</param> /// <returns>The IFCGroup object.</returns> public static IFCGroup ProcessIFCGroup(IFCAnyHandle ifcGroup) { if (IFCAnyHandleUtil.IsNullOrHasNoValue(ifcGroup)) { Importer.TheLog.LogNullError(IFCEntityType.IfcGroup); return(null); } IFCEntity cachedIFCGroup; IFCImportFile.TheFile.EntityMap.TryGetValue(ifcGroup.StepId, out cachedIFCGroup); if (cachedIFCGroup != null) { return(cachedIFCGroup as IFCGroup); } if (IFCAnyHandleUtil.IsSubTypeOf(ifcGroup, IFCEntityType.IfcZone)) { return(IFCZone.ProcessIFCZone(ifcGroup)); } if (IFCAnyHandleUtil.IsSubTypeOf(ifcGroup, IFCEntityType.IfcSystem)) { return(IFCSystem.ProcessIFCSystem(ifcGroup)); } return(new IFCGroup(ifcGroup)); }
/// <summary> /// Top-level function that processes an IFC file for reference. /// </summary> /// <returns>True if the process is successful, false otherwise.</returns> private bool ProcessReference() { InitializeOpenTransaction("Open IFC Reference File"); //If there is more than one project, we will be ignoring all but the first one. IList <IFCAnyHandle> projects = IFCImportFile.TheFile.GetInstances(IFCEntityType.IfcProject, false); if (projects.Count == 0) { Importer.TheLog.LogError(-1, "There were no IfcProjects found in the file. Aborting import.", false); return(false); } IFCProject.ProcessIFCProject(projects[0]); // The IFC toolkit relies on the IFC schema definition to read in the file. The schema definition has entities that have data fields, // and INVERSE relationships. Unfortunately, the standard IFC 2x3 schema has a "bug" where one of the inverse relationships is missing. // Normally we don't care all that much, but now we do. So if we don't allow using this inverse (because if we did, it would just constantly // throw exceptions), we need another way to get the zones. This is the way. // We are also using this to find IfcSystems that don't have the optional IfcRelServicesBuildings set. if (!IFCImportFile.TheFile.Options.AllowUseHasAssignments) { IList <IFCAnyHandle> zones = IFCImportFile.TheFile.GetInstances(IFCEntityType.IfcZone, false); foreach (IFCAnyHandle zone in zones) { IFCZone ifcZone = IFCZone.ProcessIFCZone(zone); if (ifcZone != null) { OtherEntitiesToCreate.Add(ifcZone); } } IList <IFCAnyHandle> systems = IFCImportFile.TheFile.GetInstances(IFCEntityType.IfcSystem, false); foreach (IFCAnyHandle system in systems) { IFCSystem ifcSystem = IFCSystem.ProcessIFCSystem(system); if (ifcSystem != null) { OtherEntitiesToCreate.Add(ifcSystem); } } } return(PostProcessReference()); }