ArcEngine搭载C#进行GIS的二次开发,关于目标显示的问题,由于考虑到设置定时器刷新目标位置和方向,因此在显示图层上采用的是动态图层DynamicLayer,主要用到的dll文件是ESRI.ArcGIS.ADF.BaseClasses,通过继承BaseDynamicLayer设计一个自己的动态图层基类,这样在加载其他图层时可以很方便的调用。先上基类的代码

using ESRI.ArcGIS.ADF.BaseClasses;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using System;
using System.Windows.Forms; namespace GIS
{
public abstract class myDynamicLayer : BaseDynamicLayer
{
protected IDynamicGlyph DynamicGlyph; private readonly Timer timer = new Timer();
private bool isUpdate; public IColor TransparenyColor { get; set; } public int Level { get; set; } public double Scale
{
get { return MapElement.GetScale(Level); }
} public IPoint MouseMvePoint { get; set; } public string LayerName
{
get { return m_sName; }
set { m_sName = value; }
} public int TimerInterval
{
get { return timer.Interval; }
set
{
timer.Enabled = false;
timer.Interval = value;
timer.Enabled = true;
}
} public void BeginUpdate()
{
isUpdate = true;
} public void EndUpdate()
{
isUpdate = false;
} protected FisDynamicLayer()
{
Level = ;
timer.Interval = ;
timer.Tick += timer_Tick;
timer.Enabled = true;
TransparenyColor = MapElement.SetColor(, , , );
} public override void DrawDynamicLayer(esriDynamicDrawPhase DynamicDrawPhase, IDisplay Display, IDynamicDisplay DynamicDisplay)
{
if (!m_bIsImmediateDirty) return; if (DynamicDrawPhase != esriDynamicDrawPhase.esriDDPImmediate)
{
return;
} if (!m_bValid || !m_visible)
{
return;
} if (isUpdate)
{
return;
} IDynamicSymbolProperties2 DynamicSymbolProps = DynamicDisplay as IDynamicSymbolProperties2;
IDynamicGlyphFactory2 DynamicGlyphFactory2 = DynamicDisplay.DynamicGlyphFactory as IDynamicGlyphFactory2; if (DynamicSymbolProps == null || DynamicGlyphFactory2 == null)
{
return;
} DrawDynamicLayerEx(DynamicDisplay, DynamicGlyphFactory2, DynamicSymbolProps); m_bIsImmediateDirty = false;
}
private void timer_Tick(object sender, EventArgs e)
{
if (!m_bIsImmediateDirty)
m_bIsImmediateDirty = true;
}
}
}

此外需要在动态图层基类中创建一个abstract方法以方便继承时写入不同图层的需要

public abstract void DrawDynamicLayerEx(IDynamicDisplay DynamicDisplay, IDynamicGlyphFactory2 DynamicGlyphFactory2, IDynamicSymbolProperties2 DynamicSymbolProps);

  这样你就有了一个可以继承的动态图层基类了,生成新图层时重写上面的抽象方法即可,例如:

public override void DrawDynamicLayerEx(IDynamicDisplay DynamicDisplay, IDynamicGlyphFactory2 DynamicGlyphFactory2, IDynamicSymbolProperties2 DynamicSymbolProps)
{
if (MouseMvePoint == null)
{
return;
} if (!IsClicked)
{
return;
} if (pPointCollection.PointCount > )
{
pPointCollection.RemovePoints(, pPointCollection.PointCount);
} if (pPointCollection.PointCount > )
{
if (IsMoved)
{
Radius = CircleRadius(pPointCollection.Point[], MouseMvePoint); } points = CirclePointCollection(pPointCollection.Point[], Radius, );
} DynamicSymbolProps.SetScale(esriDynamicSymbolType.esriDSymbolMarker, 6.0f, 6.0f);
DynamicSymbolProps.SetColor(esriDynamicSymbolType.esriDSymbolMarker, 255.0f, 0.0f, 0.0f, 1.0f);
DynamicDisplay.DrawMarker(CenterPoint); DynamicSymbolProps.SetScale(esriDynamicSymbolType.esriDSymbolMarker, 1.0f, 1.0f);
DynamicSymbolProps.SetColor(esriDynamicSymbolType.esriDSymbolMarker, 255.0f, 0.0f, 0.0f, 1.0f);
DynamicDisplay.DrawPolyline(points); DynamicSymbolProps.SetScale(esriDynamicSymbolType.esriDSymbolMarker, 1.0f, 1.0f);
DynamicSymbolProps.SetColor(esriDynamicSymbolType.esriDSymbolMarker, 255.0f, 0.0f, 0.0f, 0.5f);
DynamicDisplay.DrawPolygon(points);
}

C# ArcEngine二次开发之动态图层的更多相关文章

  1. Arcengine 二次开发添加右键菜单

    最近在搞arcengine 二次开发,遇到了好多问题,也通过网上查资料试着慢慢解决了,把解决的步骤记录下来,有需要帮助的可以看一下,也欢迎各位来批评指正. 想给自己的map application在图 ...

  2. Qt+QGis二次开发:矢量图层的显示样式

    原文链接:QGis二次开发基础 -- 矢量图层的显示样式

  3. Arcengine 二次开发得到点shapefile的坐标

    做二次开发的时候,想要得到Point shapfile的坐标和相应的属性,也就是Point 的(x,y)和某个属性,在网上查了一些资料,做总结如下 首先,你要确定自己要操作的图层,一般来说,得到当前操 ...

  4. [ArcEngine二次开发]为Feature的属性赋值

    在创建FeatureClass之后,需要为FeatureClass添加Features,在为Feature的字段赋值时,代码大致如下: 在这里赋值的时候,出现了一个错误: The operation ...

  5. ArcEngine二次开发,TOCControl控件上使用contextMenuStrip

    右键菜单,在二次开发中很实用,以前没用过,最近通过一本书了解到,一直想找这么一个控件来用. 一般的控件,将contextMenuStrip控件拖到所依托的控件上,然后输入自己想要的几个功能.  在所依 ...

  6. ArcEngine二次开发错误编码对照表(转)

    阅读数:3323 每当我们在进行AE开发,出现错误时经常会出现错误代码,但是我们并不知道它到底代表什么意思,这里的而错误编码我们可以对照着找到我们需要的时候常详细信息(问题是,经常还是会出现没有错误编 ...

  7. 转载:ArcEngine二次开发界面基本设置

    转自:https://blog.csdn.net/weixin_42032107/article/details/80644991 1.   在form窗体中添加菜单栏和状态栏控件 2.   添加li ...

  8. AUTOCAD二次开发-----删除一个图层里面的所有对象

    https://blog.csdn.net/aasswwe/article/details/40899759 private void Test() { // 获取当前文档和数据库 Document ...

  9. ArcEngine二次开发之提取外包矩

    1.通过ITopologicalOperator接口,此方法适用于需要获得包含几个或多个要素的最小外包矩形 public IEnvelope GetEnvelope(IGeometryCollecti ...

随机推荐

  1. [Swift]LeetCode722. 删除注释 | Remove Comments

    Given a C++ program, remove comments from it. The program source is an array where source[i] is the  ...

  2. 「造个轮子」——cicada 设计一个配置模块

    前言 在前两次的 cicada 版本中其实还不支持读取配置文件,比如对端口.路由的配置. 因此我按照自己的想法创建了一个 issue ,也收集到了一些很不错的建议. 最终其实还是按照我之前的想法来做了 ...

  3. oracle调整内存大小

    1.查看已分配内存,看到memory_max_target为20GSQL> show parameter sga NAME                     TYPE     VALUE- ...

  4. EF下lambda与linq查询&&扩展方法

    1. linq查询数据 WebTestDBEntities db = new WebTestDBEntities(); 1.1 linq查询所有列数据 var userInfoList = from ...

  5. Qt之自定义托盘

    说起Qt,真是个不错的ui库,不仅仅ui做的好,其他方面也不差,在平台扩展方面也是非常的强大.这篇文章我将会分析下qt的托盘,QSystemTrayIcon是qt的托盘类,托盘类的用途是什么我就不说了 ...

  6. 『没有上司的舞会 树形DP』

    树形DP入门 有些时候,我们需要在树形结构上进行动态规划来求解最优解. 例如,给定一颗\(N\)个节点的树(通常是无根树,即有\(N-1\)条无向边),我们可以选择任意节点作为根节点从而定义出每一颗子 ...

  7. redis 系列18 事件

    一.概述 Redis服务器是一个事件驱动程序,服务器需要处理两类事件:1文件事件,2时间事件.文件事件是关于客户端与服务器之间的通信操作.时间事件是关于服务器内部的一些定时操作.本篇还是参照" ...

  8. MyEclipse 新手使用教程---图文详解

    引言 某天在群里看到有小伙伴问MyEclipse/Eclipse的一些使用问题,虽然在我看来,问的问题很简单,但是如果对于刚刚学习的人来说,可能使用就不那么友好了.毕竟我在开始使用MyEclipse/ ...

  9. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(2)- KBOOT形态(ROM/Bootloader/Flashloader)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT形态. 痞子衡在前一篇文章里简介了 KBOOT架构,我们知道KBOOT是一个完善的Bootl ...

  10. 浅析java程序的执行过程

    在研究任何一门语言时,无论是面向过程的c,c++(面向过程和面向对象),还是面向对象的.net,java等,弄清语言执行过程至关重要.  何为语言执行过程? 所谓语言执行过程,指对于任何一门语言,如j ...