PIE-SDK 二次开发
PIE-SDK是一套PIE的可重用的通用的二次开发组件集,基于PIE-SDK我们可以进行组件式和插件式的二次开发,下面我将分别介绍如何使用PIE-SDK进行组件式和插件式的二次开发
注:需要安装好vs2015以及PIE-SDK
组件式二次开发
为支持组件式二次开发,PIE-SDE为我们提供了MapControl、TOCControl、PageLayoutControl三个控件使用,其中MapControl控件主要用于地图数据的显示和分析,TOCControl主要用于显示数据的组织结构,PageLayoutControl主要用于地图制图与专题图的输出。
注意:在这里我们需要注意的一点是,如果你们安装的是32位的PIE-SDK,那么你们将能够在工具箱里面看见这三个控件,并通过拖动控件进行使用,如果安装的是64位的,则没有控件,必须通过代码实现,实现代码如下:
声明:
private PIE.AxControls.MapControl mMapcontrol;
private PIE.AxControls.TOCControl tocControl;
private PIE.AxControls.PageLayoutControl pageLayerControl;
初始化:
mMapcontrol = new PIE.AxControls.MapControl();
tocControl = new PIE.AxControls.TOCControl();
pageLayerControl = new PIE.AxControls.PageLayoutControl();
然后就是将其放在指定的位置或者是放入容器中,便可使用了,在这里我推荐使用windows提供的一些容器控件,首先设计好界面位置结构,然后将控件放入对应容器中即可,比如将tocControl放入splitContainer中:
splitContainer1.Panel1.Controls.Add(tocControl);
tocControl.Dock = DockStyle.Fill;
在这里要注意不管是tocControl还是PageLayoutControl控件,都必须绑定一个伙伴控件,这里大多数情况下便是mMapcontrol 控件了,可以使用他们内置的函数SetBuddyControl实现,如下:
tocControl.SetBuddyControl(mMapcontrol);
前面介绍了一些组件式开发的基础知识,接下来我们将简单实现一个组件式开发:
1、打开vs新建项目,选择Visual C# ——>windows 窗体应用程序(注意:目标框架选择.NET Framework 4)
2、设置坏境,根据你安装的PIE-SDK版本,设置Debug和Release环境,新建选择x86平台或x64平台
3、添加引用,点击应用——>添加引用,将PIE-SDK的全部引用选中,确定
4、拖控件,设计界面,在这里我托了一个菜单控件以及一个splitContainer容器控件,如下图:
代码入下:
// Form1.Designer.cs
namespace CMLTestEngine
{
partial class Form1
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.文件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.我的测试ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.加载栅格数据ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.拉框放大ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.我的插件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.SuspendLayout();
this.SuspendLayout();
//
// menuStrip1
//
this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.文件ToolStripMenuItem,
this.我的测试ToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(829, 28);
this.menuStrip1.TabIndex = 0;
this.menuStrip1.Text = "menuStrip1";
//
// 文件ToolStripMenuItem
//
this.文件ToolStripMenuItem.Name = "文件ToolStripMenuItem";
this.文件ToolStripMenuItem.Size = new System.Drawing.Size(51, 24);
this.文件ToolStripMenuItem.Text = "文件";
//
// 我的测试ToolStripMenuItem
//
this.我的测试ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.加载栅格数据ToolStripMenuItem,
this.拉框放大ToolStripMenuItem,
this.我的插件ToolStripMenuItem});
this.我的测试ToolStripMenuItem.Name = "我的测试ToolStripMenuItem";
this.我的测试ToolStripMenuItem.Size = new System.Drawing.Size(81, 24);
this.我的测试ToolStripMenuItem.Text = "我的测试";
//
// 加载栅格数据ToolStripMenuItem
//
this.加载栅格数据ToolStripMenuItem.Name = "加载栅格数据ToolStripMenuItem";
this.加载栅格数据ToolStripMenuItem.Size = new System.Drawing.Size(181, 26);
this.加载栅格数据ToolStripMenuItem.Text = "加载栅格数据";
this.加载栅格数据ToolStripMenuItem.Click += new System.EventHandler(this.加载栅格数据ToolStripMenuItem_Click);
//
// 拉框放大ToolStripMenuItem
//
this.拉框放大ToolStripMenuItem.Name = "拉框放大ToolStripMenuItem";
this.拉框放大ToolStripMenuItem.Size = new System.Drawing.Size(181, 26);
this.拉框放大ToolStripMenuItem.Text = "拉框放大";
this.拉框放大ToolStripMenuItem.Click += new System.EventHandler(this.拉框放大ToolStripMenuItem_Click);
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.Location = new System.Drawing.Point(0, 28);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Size = new System.Drawing.Size(829, 389);
this.splitContainer1.SplitterDistance = 276;
this.splitContainer1.TabIndex = 1;
//
// 我的插件ToolStripMenuItem
//
this.我的插件ToolStripMenuItem.Name = "我的插件ToolStripMenuItem";
this.我的插件ToolStripMenuItem.Size = new System.Drawing.Size(181, 26);
this.我的插件ToolStripMenuItem.Text = "我的插件";
this.我的插件ToolStripMenuItem.Click += new System.EventHandler(this.我的插件ToolStripMenuItem_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(829, 417);
this.Controls.Add(this.splitContainer1);
this.Controls.Add(this.menuStrip1);
this.MainMenuStrip = this.menuStrip1;
this.Name = "Form1";
this.Text = "Form1";
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStripMenuItem 文件ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem 我的测试ToolStripMenuItem;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.ToolStripMenuItem 加载栅格数据ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem 拉框放大ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem 我的插件ToolStripMenuItem;
}
}
//Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PIE.AxControls;
using PIE.SystemUI;
using cml.ControlsTest;
namespace CMLTestEngine
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
mMapcontrol = new PIE.AxControls.MapControl();
tocControl = new PIE.AxControls.TOCControl();
tocControl.SetBuddyControl(mMapcontrol);
splitContainer1.Panel1.Controls.Add(tocControl);
splitContainer1.Panel2.Controls.Add(mMapcontrol);
mMapcontrol.Dock = DockStyle.Fill;
tocControl.Dock = DockStyle.Fill;
}
private PIE.AxControls.MapControl mMapcontrol;
private PIE.AxControls.TOCControl tocControl;
private PIE.AxControls.PageLayoutControl pageLayerControl;
private void 加载栅格数据ToolStripMenuItem_Click(object sender, EventArgs e)
{
PIE.SystemUI.ICommand cmd = new PIE.Controls.RasterCommand();
cmd.OnCreate(mMapcontrol);
cmd.OnClick();
}
private void 拉框放大ToolStripMenuItem_Click(object sender, EventArgs e)
{
PIE.SystemUI.ITool tool = new PIE.Controls.MapZoomInTool();
(tool as ICommand).OnCreate(mMapcontrol);
mMapcontrol.CurrentTool = tool;
}
private void 我的插件ToolStripMenuItem_Click(object sender, EventArgs e)
{
// PIE.SystemUI.ICommand cmd = new cml.ControlsTest.VectorCommand();
//cmd.OnCreate(mMapcontrol);
// cmd.OnClick();
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "打开栅格图像";
openFileDialog.Filter = "栅格图像|*.jpg;*.tif;*.png";
openFileDialog.Multiselect = true;
if (openFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
string[] files = openFileDialog.FileNames;
PIE.Carto.ILayer layer = null;
for (int i = 0; i < files.Length; i++)
{
layer = PIE.Carto.LayerFactory.CreateDefaultLayer(files[i]);
mMapcontrol.ActiveView.FocusMap.AddLayer(layer);
}
mMapcontrol.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll);
}
}
}