Exemplo n.º 1
0
        public static GCDProject Load(FileInfo projectFile)
        {
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(projectFile.FullName);

            XmlNode  nodProject = xmlDoc.SelectSingleNode("Project");
            string   name       = nodProject.SelectSingleNode("Name").InnerText;
            string   desc       = nodProject.SelectSingleNode("Description").InnerText;
            string   gcdv       = nodProject.SelectSingleNode("GCDVersion").InnerText;
            DateTime dtCreated  = DateTime.Parse(nodProject.SelectSingleNode("DateTimeCreated").InnerText);

            UnitsNet.Units.LengthUnit   horiz = (UnitsNet.Units.LengthUnit)Enum.Parse(typeof(UnitsNet.Units.LengthUnit), nodProject.SelectSingleNode("Units/Horizontal").InnerText);
            UnitsNet.Units.LengthUnit   vert  = (UnitsNet.Units.LengthUnit)Enum.Parse(typeof(UnitsNet.Units.LengthUnit), nodProject.SelectSingleNode("Units/Vertical").InnerText);
            UnitsNet.Units.AreaUnit     area  = (UnitsNet.Units.AreaUnit)Enum.Parse(typeof(UnitsNet.Units.AreaUnit), nodProject.SelectSingleNode("Units/Area").InnerText);
            UnitsNet.Units.VolumeUnit   vol   = (UnitsNet.Units.VolumeUnit)Enum.Parse(typeof(UnitsNet.Units.VolumeUnit), nodProject.SelectSingleNode("Units/Volume").InnerText);
            GCDConsoleLib.GCD.UnitGroup units = new GCDConsoleLib.GCD.UnitGroup(vol, area, vert, horiz);

            UnitsNet.Area cellArea    = UnitsNet.Area.From(0, area);
            XmlNode       nodCellArea = nodProject.SelectSingleNode("CellArea");

            if (!string.IsNullOrEmpty(nodCellArea.InnerText))
            {
                cellArea = UnitsNet.Area.From(double.Parse(nodCellArea.InnerText, CultureInfo.InvariantCulture), area);
            }

            ProjectManager.Project = new GCDProject(name, desc, projectFile, dtCreated, gcdv, cellArea, units);

            foreach (XmlNode nodOnline in nodProject.SelectNodes("Online/*"))
            {
                ProjectManager.Project.OnlineParams[nodOnline.Name] = nodOnline.InnerText;
            }

            // Load masks before DEMs. DEMs will load error surfaces that refer to masks
            foreach (XmlNode nodMask in nodProject.SelectNodes("Masks/Mask"))
            {
                if (nodMask.SelectSingleNode("Field") is XmlNode)
                {
                    // Regular or directional mask
                    if (nodMask.SelectSingleNode("Items") is XmlNode)
                    {
                        ProjectManager.Project.Masks.Add(new Masks.RegularMask(nodMask));
                    }
                    else
                    {
                        ProjectManager.Project.Masks.Add(new Project.Masks.DirectionalMask(nodMask));
                    }
                }
                else
                {
                    // Area of interest
                    ProjectManager.Project.Masks.Add(new Project.Masks.AOIMask(nodMask));
                }
            }

            // Load profile routes before DEMs, Ref Surfs and DoDs that might refer to
            // routes in their linear extractions
            foreach (XmlNode nodRoute in nodProject.SelectNodes("ProfileRoutes/ProfileRoute"))
            {
                ProjectManager.Project.ProfileRoutes.Add(new Project.ProfileRoutes.ProfileRoute(nodRoute));
            }

            foreach (XmlNode nodDEM in nodProject.SelectNodes("DEMSurveys/DEM"))
            {
                DEMSurvey dem = new DEMSurvey(nodDEM);
                ProjectManager.Project.DEMSurveys.Add(dem);
            }

            foreach (XmlNode nodRefSurf in nodProject.SelectNodes("ReferenceSurfaces/ReferenceSurface"))
            {
                Surface surf = new Surface(nodRefSurf, true, true);
                ProjectManager.Project.ReferenceSurfaces.Add(surf);
            }

            foreach (XmlNode nodDoD in nodProject.SelectNodes("DoDs/DoD"))
            {
                DoDBase dod = null;
                if (nodDoD.SelectSingleNode("Threshold") is XmlNode)
                {
                    dod = new DoDMinLoD(nodDoD);
                }
                else if (nodDoD.SelectSingleNode("ConfidenceLevel") is XmlNode)
                {
                    dod = new DoDProbabilistic(nodDoD);
                }
                else
                {
                    dod = new DoDPropagated(nodDoD);
                }

                ProjectManager.Project.DoDs.Add(dod);
            }

            foreach (XmlNode nodInter in nodProject.SelectNodes("InterComparisons/InterComparison"))
            {
                InterComparison inter = new InterComparison(nodInter, ProjectManager.Project.DoDs);
                ProjectManager.Project.InterComparisons.Add(inter);
            }

            foreach (XmlNode nodItem in nodProject.SelectNodes("MetaData/Item"))
            {
                ProjectManager.Project.MetaData[nodItem.SelectSingleNode("Key").InnerText] = nodItem.SelectSingleNode("Value").InnerText;
            }

            return(ProjectManager.Project);
        }
Exemplo n.º 2
0
 public bool IsInterComparisonNameUnique(string name, InterComparison ignore)
 {
     return(IsNameUnique(name, InterComparisons.Select(x => x as GCDProjectItem).ToList <GCDProjectItem>(), ignore));
 }