PIE-SDK 二次开发之组件式二次开发

这篇博客介绍了如何利用PIE-SDK进行组件式和插件式的二次开发。首先,讲解了组件式开发,包括MapControl、TOCControl和PageLayoutControl三个关键控件的使用,并提供了在32位和64位环境下创建控件的方法。接着,通过一个简单的实例展示了在VS2015中创建Windows窗体应用程序,设置环境,添加引用,设计界面并编写代码的过程,实现了加载栅格数据和拉框放大的功能。此外,还提及了插件式开发的可能性。
摘要由CSDN通过智能技术生成

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);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值