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

PIE-SDK 二次开发

PIE-SDK是一套PIE的可重用的通用的二次开发组件集,基于PIE-SDK我们可以进行组件式和插件式的二次开发,下面我将分别介绍如何使用PIE-SDK进行组件式和插件式的二次开发

注:需要安装好vs2015以及PIE-SDK

插件式二次开发

PIE-SDK 支持我们进行Command、Tool以及Control三种类型的插件的二次开发,同时为我们提供了可直接使用的PIE桌面应用程序的界面,其中:
Command,命令,功能不需要鼠标和地图进行交互,例如全图显示,点击按钮地图接收到命令会自动全图显示;
Tool(工具)则相反,需要鼠标和地图进行交互,例如地图的漫游功能,拉框放大功能等,需要鼠标在地图上操作才会做出反应。
Control是包含了控件的Command,比如比例尺控制按钮、图像透明度控制按钮,通过操作Control中的控件即可实现地图的操作。

  • Command 命令插件开发步骤
    1、新建一个Command的类,继承PIE.Control.BaseCommand
    2、重写OnCreate(),OnClick()方法
  • Tool 工具插件开发步骤
    1、新建Tool的类,继承PIE.Controls.BaseTool
    2、根据需求可以重写MouseDown,MouseMove,MoudeUp等鼠标事件
  • Control 插件开发步骤
    1、新建一个Control的类,并继承PIE.Controls.BaseCommandControl
    2、根据需求重写Control对象,绑定地图控件对象OnCreate,Enabled属性等

前面我们介绍了一些PIE-SDK插件式二次开发的基础知识,下面我将具体介绍一下PIE-SDK插件式二次开发的具体步骤:
1、打开vs新建项目,选择Visual C# ——>类库(注意:目标框架选择.NET Framework 4)
2、设置坏境,根据你安装的PIE-SDK版本,设置Debug和Release环境,新建选择x86平台或x64平台
3、添加引用,点击应用——>添加引用,将PIE-SDK的全部引用选中,确定
4、添加类、并确定继承关系
5、重新类相关函数
6、点击生成(到这一步,你的插件便已经生成了)
7、将生成的dll文件复制到PIE-SDK的bin目录下
8、配置文件设置,在配置文件中新增Item项,设置控件类型(Type)为button,library为插件类名,如:PIE.ControlsTest.dll(带后缀的全称),caption为控件在界面显示的名称,identity为唯一标识,格式为类库名称+命令对象名称,如:PIE.ControlsTest.VectorCommand,代码中通过identity找到对应命令控件

注意:
1、为了便于找到生成的dll文件,在这里建议大家自己设置输出文件路径,具体操作为点击项目-属性-生成-输出-输出路径
2、如果想在开发过程中调试代码,需要设置外部程序,具体操作为项目-属性-调试-选择启动外面程序,然后选择PIE-SDK中的bin文件夹下的PIEApplication.exe,同时要将输出路径设置成bin文件夹的路径

代码展示:

// VectorCommand.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PIE.Controls;
using System.Windows.Forms;
namespace cml.ControlsTest
{
    public class VectorCommand : BaseCommand
    {
        public VectorCommand()
        {
         
        }

        public override void OnCreate(object hook)
        {
            if (hook == null) return;
            if (!(hook is PIE.Carto.IPmdContents)) return;

            this.Enabled = true;
            m_Hook = hook;
            m_HookHelper.Hook = hook;
        }

        public override void OnClick()
        {
            if (!this.Enabled) return;

            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Title = "请选择要打开的数据:";
            openFileDialog.Filter = "Shape Files|*.shp;*.000";
            openFileDialog.Multiselect = true;
            if (openFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;

            PIE.Carto.IActiveView activeVeiw = m_HookHelper.ActiveView;
            PIE.Carto.IMap map = m_HookHelper.FocusMap;
            PIE.Carto.ILayer layer = null;
            string[] files = openFileDialog.FileNames;
            for (int i = 0; i < files.Length; i++)
            {
                layer = PIE.Carto.LayerFactory.CreateDefaultLayer(files[i]);
                map.AddLayer(layer);
            }
            activeVeiw.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll);
        }
    }
}

// DrawElementTool .cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PIE.Controls;
using PIE.AxControls;
using PIE.Carto;
using PIE.Display;
using PIE.Geometry;
using System.Windows.Forms;
namespace cml.ControlsTest
{
    public class DrawElementTool : BaseTool
    {
        #region 成员变量

        /// <summary>
        /// 面元素
        /// </summary>
        /// 
        IPolygonElement m_PolygonEle = null;

        /// <summary>
        /// MapControl对象
        /// </summary>
        IMapControl m_MapControl = null;

        #endregion
        /// <summary>
        ///构造函数 
        /// </summary>
        /// <param name="mapControl"></param>
        public DrawElementTool(IMapControl mapControl)
        {
            // this.Cursor = "";//鼠标样式           
            m_MapControl = mapControl;
        }
        /// <summary>
        /// 鼠标点击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override void OnMouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left) //左键
            {
                if (m_MapControl == null) return;
                m_PolygonEle = new PolygonElement();
                IPolygon polygon = m_MapControl.TrackPolygon();
                m_PolygonEle.Symbol = SystemSymbolSetting.Instance.DefaultFillSymbol;
                m_PolygonEle.Geometry = polygon as IGeometry;

                m_HookHelper.ActiveView.GraphicsContainer.AddElement(m_PolygonEle);
                m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
            }
        }
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值