public static gbXMLSerializer.Construction TogbXML(this Construction construction, double tolerance = Core.Tolerance.MicroDistance)
        {
            if (construction == null)
            {
                return(null);
            }

            gbXMLSerializer.Construction construction_gbXML = new gbXMLSerializer.Construction();
            construction_gbXML.id   = Core.gbXML.Query.Id(construction, typeof(gbXMLSerializer.Construction));
            construction_gbXML.Name = construction.Name;

            return(construction_gbXML);
        }
        public static gbXMLSerializer.gbXML TogbXML(this AnalyticalModel analyticalModel, double silverSpacing = Core.Tolerance.MacroDistance, double tolerance = Core.Tolerance.MicroDistance)
        {
            if (analyticalModel == null)
            {
                return(null);
            }

            List <gbXMLSerializer.Construction> constructions_gbXML = new List <gbXMLSerializer.Construction>();

            List <Panel> panels = analyticalModel.AdjacencyCluster?.GetPanels();

            if (panels != null && panels.Count > 0)
            {
                HashSet <System.Guid> guids = new HashSet <System.Guid>();
                foreach (Panel panel in panels)
                {
                    Construction construction = panel?.Construction;
                    if (construction != null && !guids.Contains(construction.Guid))
                    {
                        gbXMLSerializer.Construction construction_gbXML = construction.TogbXML(tolerance);
                        if (construction_gbXML != null)
                        {
                            //constructions_gbXML.Add(construction_gbXML);
                            guids.Add(construction.Guid);
                        }
                    }

                    List <Aperture> apertures = panel?.Apertures;
                    if (apertures != null && apertures.Count > 0)
                    {
                        foreach (Aperture aperture in apertures)
                        {
                            ApertureConstruction apertureConstruction = aperture?.ApertureConstruction;
                            if (apertureConstruction == null)
                            {
                                continue;
                            }

                            gbXMLSerializer.Construction construction_gbXML = apertureConstruction.TogbXML(tolerance);
                            if (construction_gbXML != null)
                            {
                                //constructions_gbXML.Add(construction_gbXML);
                                guids.Add(construction.Guid);
                            }
                        }
                    }
                }
            }

            gbXMLSerializer.gbXML gbXML = new gbXMLSerializer.gbXML();
            gbXML.useSIUnitsForResults = "true";
            gbXML.temperatureUnit      = temperatureUnitEnum.C;
            gbXML.lengthUnit           = lengthUnitEnum.Meters;
            gbXML.areaUnit             = areaUnitEnum.SquareMeters;
            gbXML.volumeUnit           = volumeUnitEnum.CubicMeters;
            gbXML.version         = versionEnum.FiveOneOne;
            gbXML.Campus          = analyticalModel.TogbXML_Campus(silverSpacing, tolerance);
            gbXML.Constructions   = constructions_gbXML.ToArray();
            gbXML.DocumentHistory = Core.gbXML.Query.DocumentHistory(analyticalModel.Guid);

            return(gbXML);
        }