1. 功能简介
在PIE SDK中,所有的制图元素、视图范围以及排版等都可以保存成一个模板,以供多次重复使用。使用时只需要打开该模板,加载相应数据,就可以直接出图了,省去了重复制作图幅的麻烦,方便快捷。
2. 功能实现说明
2.1新建模板
在PIE中,每个显示的地图都是一个地图文档(PmdContents),它可以保存为*.pmd文件。新建的地图文档可以直接替换当前地图文档,并替换其中的地图、制图对象。
2.2 实现思路及原理说明
第一步 |
获取当前模板,并判断是否保存当前模板 |
第二步 |
新建一个mapDocument,将其中的focusMap赋值给mapControl |
第三步 |
将mapDocument的pagelayout对象赋值给pageLayoutControl |
第四步 |
刷新视图 |
2.3 核心接口与方法
接口/类 |
方法 |
说明 |
MapDocument |
ReplaceContents () |
替换mapDocument中内容 |
MapDocument |
SaveAs () |
另存地图文档 |
2.4示例代码
示例代码 |
1 /// <summary> 2 /// 新建地图工程 3 /// </summary> 4 private void NewPmd() 5 { 6 //保存当前地图文档 7 DialogResult resultType = MessageBox.Show("是否保存当前地图工程", "新建地图工程", MessageBoxButtons.YesNoCancel); 8 if (resultType == DialogResult.Cancel) 9 { 10 return; 11 } 12 else if (resultType == DialogResult.Yes) 13 { 14 //获取当前地图文档 15 IMapDocument mapDocument = (pageLayoutControl1 as Control).Tag as IMapDocument; //PIE DesktopCommand中可用m_Application.MapDocument来获取 16 if (mapDocument == null) 17 { 18 mapDocument = new MapDocument(); 19 mapDocument.ReplaceContents(pageLayoutControl1); 20 } 21 22 // 获得保存路径信息 23 string pmdFilePath = mapDocument.GetDocumentFilename(); 24 if (string.IsNullOrEmpty(pmdFilePath)) 25 { 26 SaveFileDialog saveFileDialog = new SaveFileDialog(); 27 saveFileDialog.Title = "地图文档另存为:"; 28 saveFileDialog.Filter = "PMD|*.pmd"; 29 if (saveFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) return; 30 pmdFilePath = saveFileDialog.FileName; 31 if (string.IsNullOrEmpty(pmdFilePath)) return; 32 } 33 if (!pmdFilePath.EndsWith(".pmd")) 34 { 35 pmdFilePath = pmdFilePath + ".pmd"; 36 } 37 mapDocument.SaveAs(pmdFilePath, true, true); 38 } 39 40 //新建地图文档 41 IMapDocument newMapDocument = new MapDocument(); 42 newMapDocument.New(""); 43 44 //为PageLayoutControl设置PageLayout 45 IPageLayout newPageLayout = newMapDocument.GetPageLayout(); 46 pageLayoutControl1.PageLayout = newPageLayout; 47 48 //为MapControl设置Map 49 IMap newMap = (newPageLayout as IActiveView).FocusMap; 50 mapControl1.FocusMap = newMap; 51 52 //将mapDocument对象存入tag属性中,以备后续使用 53 (pageLayoutControl1 as Control).Tag = newMapDocument; 54 55 //激活并刷新控件 56 if (tabControlMain.SelectedIndex == 0) 57 { 58 pageLayoutControl1.DeActivate(); 59 mapControl1.Activate(); 60 mapControl1.PartialRefresh(ViewDrawPhaseType.ViewAll); 61 } 62 else 63 { 64 mapControl1.DeActivate(); 65 pageLayoutControl1.Activate(); 66 pageLayoutControl1.PartialRefresh(ViewDrawPhaseType.ViewAll); 67 } 68 } |