コード例 #1
0
 private void RestorePlugins(XmlProject project)
 {
     foreach (var p in project.Plugins)
     {
         _context.PluginManager.LoadPlugin(p.Guid, _context);
     }
 }
コード例 #2
0
        private bool ValidateLayers(XmlProject project)
        {
            var missingLayers = new List <MissingLayer>();

            TryFindLayers(project, missingLayers);

            // if it didn't help, let's offer the user to find them
            if (missingLayers.Any())
            {
                var p = _context.Container.GetInstance <MissingLayersPresenter>();
                if (!p.Run(missingLayers))
                {
                    return(false);
                }

                foreach (var layer in missingLayers)
                {
                    var xmlLayer = layer.Tag as XmlLayer;
                    if (xmlLayer != null)
                    {
                        if (File.Exists(layer.Filename))
                        {
                            xmlLayer.Identity.Filename = layer.Filename;
                        }
                        else
                        {
                            xmlLayer.SkipLoading = true;
                        }
                    }
                }
            }

            return(true);
        }
コード例 #3
0
        private void TryFindLayers(XmlProject project, List <MissingLayer> missingLayers)
        {
            // in case project has moved, let's try to use relative filename
            foreach (var xmlLayer in project.Layers)
            {
                if (xmlLayer.Identity.IdentityType == Api.Enums.LayerIdentityType.File)
                {
                    if (!File.Exists(xmlLayer.Identity.Filename))
                    {
                        string filename = project.Settings.UpdateLayerPath(xmlLayer.Identity.Filename);

                        if (!File.Exists(filename))
                        {
                            var ml = new MissingLayer(xmlLayer.Name, xmlLayer.Identity.Filename, xmlLayer.LayerType, xmlLayer);

                            missingLayers.Add(ml);

                            continue;
                        }

                        // substitute with relative one
                        xmlLayer.Identity.Filename = filename;
                    }
                }
            }
        }
コード例 #4
0
        public static XmlProject CreateReProject(IAppContext context, string name, string parentPath, int epsgCode)
        {
            ProjectLoadingView _loadingForm;

            _loadingForm = new ProjectLoadingView(name);
            context.View.ShowChildView(_loadingForm, false);
            Application.DoEvents();
            context.View.Lock();
            _loadingForm.ShowProgress(10, "创建项目目录");
            DirectoryInfo info = new DirectoryInfo(parentPath + "\\" + name);

            if (info.Exists == false)
            {
                info.Create();
            }
            info.CreateSubdirectory("Database");
            info.CreateSubdirectory("Attachments");
            _loadingForm.ShowProgress(30, "创建项目数据库");
            IREDatabase reDatabase = new ReDatabase(Path.Combine(info.FullName, "Database\\redatabase.db"));
            string      errMsg     = "";

            _loadingForm.ShowProgress(50, "初始化项目数据库,数据较多,请耐心等待");
            reDatabase.InitREDatabase(epsgCode, _loadingForm, out errMsg);
            string     projectFile = Path.Combine(info.FullName, name + ".vgproj");
            XmlProject project     = new XmlProject(context as ISecureContext, projectFile);

            project.ProjectName    = name;
            project.Database       = "Database\\redatabase.db";
            project.AttachmentPath = "Attachments";
            _loadingForm.Close();
            _loadingForm.Dispose();
            context.View.Unlock();
            _loadingForm = null;
            return(project);
        }
コード例 #5
0
        private void RestoreGroups(XmlProject project)
        {
            if (project.Groups == null)
            {
                return;
            }

            foreach (var g in project.Groups)
            {
                var group = _context.Legend.Groups.Add(g.Name);
                group.Expanded = g.Expanded;

                foreach (var guid in g.Layers)
                {
                    var layer = _context.Legend.Layers.FirstOrDefault(l => l.Guid == guid);
                    if (layer != null)
                    {
                        _context.Layers.MoveLayer(layer.Handle, group.Handle);
                    }
                }
            }

            // first group was generated automatically
            if (_context.Legend.Groups.Any())
            {
                _context.Legend.Groups.Remove(_context.Legend.Groups[0].Handle);
            }
        }
コード例 #6
0
ファイル: ProjectLoader.cs プロジェクト: secondii/Yutai
        /// <summary>
        /// Restores the state of application by populating application _context after project file was deserialized.
        /// </summary>
        public bool Restore(XmlProject project, ProjectLoadingView loadingForm)
        {
            _context.MainView.Lock();
            System.IO.FileInfo fileInfo = new FileInfo(project.Settings.LoadAsFilename);
            _basePath = fileInfo.DirectoryName;

            try
            {
                //因为插件引导的时候需要读取项目文档里面的配置,因此,这个参数必须在插件引导前赋值
                loadingForm.ShowProgress(30, "正在加载地图");
                _context.YutaiProject = project;
                RestoreMxdDocument(project);
                //  RestoreSxdDocument(project);
                loadingForm.ShowProgress(100, "正在加载插件");
                RestorePlugins(project);
                //loadingForm.ShowProgress(100, "正在设置视图范围");
                //RestoreExtents(project);
                return(true);
            }
            finally
            {
                _context.YutaiProject = project;
                _context.MainView.Unlock();
                //_broadcaster.BroadcastEvent(p => p.ProjectOpened_, this, null);
            }
        }
コード例 #7
0
        public static XmlProjectDataAccess From(AbsoluteFilePath projectFilePath, XmlProject deserializeProjectFile)
        {
            var xmlProjectDataAccess = new XmlProjectDataAccess(deserializeProjectFile);

            xmlProjectDataAccess.SetAbsolutePath(projectFilePath);
            xmlProjectDataAccess.NormalizeProjectDependencyPaths(projectFilePath);
            return(xmlProjectDataAccess);
        }
コード例 #8
0
        private void RestoreMapProjection(XmlProject project)
        {
            var sr = new SpatialReference();

            sr.ImportFromAutoDetect(project.Map.Projection);

            _context.SetMapProjection(sr);
        }
コード例 #9
0
        private static XmlProject DeserializeProjectFile(AbsoluteFilePath projectFilePath)
        {
            var serializer = CreateXmlSerializer();

            using var fileStream = new FileStream(projectFilePath.ToString(), FileMode.Open);
            XmlProject result = (XmlProject)serializer.Deserialize(fileStream);

            return(result);
        }
コード例 #10
0
ファイル: ProjectLoader.cs プロジェクト: secondii/Yutai
 private void RestoreLocator(XmlProject project)
 {
     //var locator = project.Locator;
     //if (locator != null)
     //{
     //    var bitmap = _imageSerializationService.ConvertStringToImage(locator.Image, locator.Type);
     //    _context.Locator.RestorePicture(bitmap as System.Drawing.Image, locator.Dx, locator.Dy, locator.XllCenter, locator.YllCenter);
     //}
 }
コード例 #11
0
        private void RestoreExtents(XmlProject project)
        {
            var e = project.Map.Envelope;

            if (e != null)
            {
                _context.Map.ZoomToExtents(new Envelope(e.MinX, e.MaxX, e.MinY, e.MaxY));
            }
        }
コード例 #12
0
ファイル: ProjectLoader.cs プロジェクト: secondii/Yutai
 private void RestorePlugins(XmlProject project)
 {
     if (project.Plugins == null)
     {
         return;
     }
     foreach (var p in project.Plugins)
     {
         _context.PluginManager.LoadPlugin(p.Guid, _context);
     }
 }
コード例 #13
0
        private static XmlProject ToXmlProject(Project project)
        {
            ArgumentChecks.AssertNotNull(project, nameof(project));

            // Create XML project.
            var xmlProject = new XmlProject
            {
                Id    = project.Id,
                Title = project.Title,
            };

            // Create XML items.
            foreach (var item in project.Items)
            {
                var xmlItem = new XmlItem
                {
                    Id = item.Id,
                    PublicIdentifier                   = item.PublicIdentifier,
                    Summary                            = item.Summary,
                    Description                        = item.Description,
                    EstimatedCostOfDelayPerDay         = item.EstimatedCostOfDelayPerDay,
                    EstimatedDevelopmentDurationInDays = item.EstimatedDevelopmentDurationInDays,
                };

                xmlProject.Items.Add(xmlItem);
            }

            // Create XML backlogs.
            foreach (var backlog in project.Backlogs)
            {
                var xmlBacklog = new XmlBacklog
                {
                    Id   = backlog.Id,
                    Name = backlog.Name,
                };

                // Create XML backlog items.
                foreach (var backlogItem in backlog.BacklogItems)
                {
                    var xmlBacklogItem = new XmlBacklogItem
                    {
                        ItemId = backlogItem.Item.Id,
                        Rank   = backlogItem.Rank,
                    };

                    xmlBacklog.BacklogItems.Add(xmlBacklogItem);
                }

                xmlProject.Backlogs.Add(xmlBacklog);
            }

            return(xmlProject);
        }
コード例 #14
0
ファイル: ProjectLoader.cs プロジェクト: secondii/Yutai
 private void RestoreExtents(XmlProject project)
 {
     if (project.Envelope != null)
     {
         IEnvelope env = new Envelope() as IEnvelope;
         env.XMin = project.Envelope.XMin;
         env.XMax = project.Envelope.XMax;
         env.YMin = project.Envelope.YMin;
         env.YMax = project.Envelope.YMax;
         _context.MapControl.ActiveView.Extent = env;
     }
 }
コード例 #15
0
 /// <summary>
 /// Restores the state of application by populating application _context after project file was deserialized.
 /// </summary>
 public bool Restore(XmlProject project, ProjectLoadingView loadingForm)
 {
     _context.View.Lock();
     try
     {
         loadingForm.ShowProgress(30, "正在加载数据库");
         //((ISecureContext) _context).VastProject = project;
         loadingForm.ShowProgress(100, "正在加载插件");
         RestorePlugins(project);
         return(true);
     }
     finally
     {
         _context.VastProject = project;
         _context.View.Unlock();
     }
 }
コード例 #16
0
        private static Project ToProject(XmlProject xmlProject)
        {
            ArgumentChecks.AssertNotNull(xmlProject, nameof(xmlProject));

            var project = new Project(xmlProject.Id)
            {
                Title = xmlProject.Title
            };

            foreach (var xmlItem in xmlProject.Items)
            {
                var item = new Item(xmlItem.Id)
                {
                    PublicIdentifier                   = xmlItem.PublicIdentifier,
                    Summary                            = xmlItem.Summary,
                    Description                        = xmlItem.Description,
                    EstimatedCostOfDelayPerDay         = xmlItem.EstimatedCostOfDelayPerDay,
                    EstimatedDevelopmentDurationInDays = xmlItem.EstimatedDevelopmentDurationInDays
                };

                project.Items.Add(item);
            }

            foreach (var xmlBacklog in xmlProject.Backlogs)
            {
                var backlog = new Backlog(xmlBacklog.Id)
                {
                    Name = xmlBacklog.Name
                };

                foreach (var xmlBacklogItem in xmlBacklog.BacklogItems)
                {
                    var referencedItem = project.Items.Single(i => i.Id == xmlBacklogItem.ItemId);
                    var backlogItem    = new BacklogItem(referencedItem)
                    {
                        Rank = xmlBacklogItem.Rank
                    };

                    backlog.BacklogItems.Add(backlogItem);
                }

                project.Backlogs.Add(backlog);
            }

            return(project);
        }
コード例 #17
0
ファイル: ProjectLoader.cs プロジェクト: secondii/Yutai
        private void RestoreMxdDocument(XmlProject project)
        {
            if (string.IsNullOrEmpty(project.MapDocumentName))
            {
                return;
            }
            string mxdPath = _basePath + "\\" + project.MapDocumentName;

            if (File.Exists(mxdPath))
            {
                _context.MapControl.LoadMxFile(mxdPath, null, null);
            }
            else
            {
                MessageService.Current.Warn("二维文档不存在," + mxdPath);
            }
        }
コード例 #18
0
ファイル: ProjectLoader.cs プロジェクト: secondii/Yutai
        private void RestoreSxdDocument(XmlProject project)
        {
            if (string.IsNullOrEmpty(project.MapDocumentName))
            {
                return;
            }
            string sxdPath = _basePath + "\\" + project.SceneDocumentName;

            if (File.Exists(sxdPath))
            {
                _context.SceneControl.LoadSxFile(sxdPath);
            }
            else
            {
                MessageService.Current.Warn("三维文档不存在," + sxdPath);
            }
        }
コード例 #19
0
ファイル: OverviewDockPanel.cs プロジェクト: secondii/Yutai
        public void InitOverview()
        {
            XmlProject project = ((ISecureContext)_context).YutaiProject;

            if (project.Overview != null)
            {
                string oType = project.Overview.OverviewType.ToUpper().Trim();
                if (oType == "MXD")
                {
                    string   mxdName  = project.Overview.ObjectName;
                    FileInfo fileInfo =
                        new FileInfo(FileHelper.GetRelativePath(project.Settings.LoadAsFilename, mxdName));

                    if (fileInfo.Exists)
                    {
                        axMapControl1.LoadMxFile(fileInfo.FullName);
                    }
                    else
                    {
                        CopyLastLayerToOverview();
                    }
                }
                else
                {
                    string layerName = project.Overview.ObjectName.Trim();
                    if (string.IsNullOrEmpty(layerName))
                    {
                        CopyLastLayerToOverview();
                    }
                    else
                    {
                        CopyLayerToOverview(layerName);
                    }
                }
            }
            else
            {
                CopyLastLayerToOverview();
            }
            this.axMapControl1.ActiveView.Refresh();

            this.ClipBounds = _mainMapControl.Map.ClipGeometry;
            this.axMapControl1.Map.ClearSelection();
        }
コード例 #20
0
        private bool RestoreLayers(XmlProject project, out int selectedLayerHandle)
        {
            selectedLayerHandle = -1;

            if (!ValidateLayers(project))
            {
                return(false);
            }

            var layers = _context.Map.Layers;
            int step   = 0;
            int count  = project.Layers.Count;

            foreach (var xmlLayer in project.Layers)
            {
                step++;
                FireProgressChanged(step, count, "Loading layer: " + xmlLayer.Name);

                if (xmlLayer.SkipLoading)
                {
                    Logger.Current.Info("Layer loading was skipped: " + xmlLayer.Identity);
                    continue;
                }

                if (_layerService.AddLayerIdentity(xmlLayer.Identity))
                {
                    int handle = _layerService.LastLayerHandle;
                    var layer  = layers.ItemByHandle(handle) as ILegendLayer;
                    xmlLayer.RestoreLayer(layer, _broadcaster);

                    if (xmlLayer.Selected)
                    {
                        selectedLayerHandle = handle;
                    }
                }
                else if (_layerService.Aborted)
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #21
0
        /// <summary>
        /// Restores the state of application by populating application _context after project file was deserialized.
        /// </summary>
        public bool Restore(XmlProject project)
        {
            _context.Map.Lock();
            _context.Legend.Lock();

            RestoreTmsProvider(project.Map.TileProviderId);

            try
            {
                _layerService.BeginBatch();

                RestoreMapProjection(project);

                RestorePlugins(project);

                int selectedLayerHandle;
                if (!RestoreLayers(project, out selectedLayerHandle))
                {
                    return(false);
                }

                RestoreGroups(project);

                RestoreExtents(project);

                RestoreLocator(project);

                if (selectedLayerHandle != -1)
                {
                    _context.Legend.SelectedLayerHandle = selectedLayerHandle;
                }

                return(true);
            }
            finally
            {
                _layerService.EndBatch();
                _context.Map.Unlock();
                _context.Legend.Unlock();
                _context.Legend.Redraw(LegendRedraw.LegendAndMap);
            }
        }
コード例 #22
0
        public override void OnClick()
        {
            //IProjectService projectService = _context.Container.GetSingleton<IProjectService>();
            //projectService.TryClose();
            frmCreateDB frm = new frmCreateDB();

            if (_context.View.ShowChildView(frm, true))
            {
                string     projectFile = Path.Combine(frm.ProjectFile, frm.ProjectName, frm.ProjectName + ".vgproj");
                XmlProject project     =
                    ReProjectHelper.CreateReProject(_context, frm.ProjectName, frm.ProjectFile, frm.EpsGCode);
                using (var writer = new StreamWriter(projectFile))
                {
                    writer.Write(project.Serialize());
                    writer.Flush();
                }
                //((ISecureContext) _context).VastProject = project;
                IProjectService projectService = _context.Container.GetSingleton <IProjectService>();
                projectService.Open(projectFile, false);
            }
        }
コード例 #23
0
 public XmlProjectDataAccess(XmlProject xmlProject)
 {
     _xmlProject = xmlProject;
 }
コード例 #24
0
        private string SerializeMapState(string filename)
        {
            var project = new XmlProject(_context as ISecureContext, filename);

            return(project.Serialize(false));
        }
コード例 #25
0
 public void SetAbsolutePath(AbsoluteFilePath projectFilePath)
 {
     _xmlProject = _xmlProject with {
         AbsolutePath = projectFilePath
     };
 }