如何使用ArcGIS9.2中的动态显示(Dynamic Display)技术(三)
来源:互联网 发布:淘宝发货地址不是买家 编辑:程序博客网 时间:2024/05/21 09:32
1. 如何使用动态显示技术
3.1概述
这个介绍主要说明如何有效地使用ArcGIS Framework中的动态显示技术。介绍当前的一些使用方法和需求,演示一些GIS中需要采用动态显示技术的例子,以及一些接口的使用介绍。
3.2 Dynamic map在动态显示技术中的使用
推荐使用基于DynamicMap类的IDynamicMap接口,来使Dynamic map可用或不可用。
下面是IDynamicMap使用代码:
[C#]
//Cast the dynamic map from the focus map.
IDynamicMap dynamicMap = m_hookHelper.FocusMap as IDynamicMap;
//Make sure to switch into dynamic mode.
if (!dynamicMap.DynamicMapEnabled)
dynamicMap.DynamicMapEnabled = true;
[VB.NET]
' Cast the dynamic map from the focus map.
Dim dynamicMap As IDynamicMap = CType(m_hookHelper.FocusMap, IDynamicMap)
' Make sure to switch into dynamic mode.
If (Not dynamicMap.DynamicMapEnabled) Then
dynamicMap.DynamicMapEnabled = True
End If
(上述或以下有可能涉及的代码都是.net例子,但是最近我自己完成了vc6.0的Demons)
当设置Dynamic map为Enable,那么动态显示将使用OPenGL的render context来绘制基本的地图图层和动态图层。
3.3 Dynamic mode下的绘图
以下是两种Dynamic mode绘图方式:
(1) 实现IDynaimcLayer接口中的DrawDynamicLayer方法
(2) 监听动态显示的两个事件:
IDynamicMapEvents.BeforeDynamicDraw;
IDynamicMapEvents.AfterDynamicDraw;
3.3.1 绘图方式的两种选择(事实是本质的draw都是OpenGL方法)
(1)使用AO的API
(2)直接调用OpenGL的API
默认情况下OpenGL的纹理(texture)可用。需要注意的是,在最初需要开始利用OpenGL的方法时,要求关闭OpenGL 2D texture flag。
3.4绘图方式采用使用AO的API
[C#]
//Set the marker symbol.
m_dynamicSymbolProps.set_DynamicGlyph(esriDynamicSymbolType.esriDSymbolMarker,
m_markerGlyphs[2]);
//Draw a marker symbol.
DynamicDisplay.DrawMarker(m_point);
[VB.NET]
'Set the marker symbol.
m_dynamicSymbolProps.DynamicGlyph(esriDynamicSymbolType.esriDSymbolMarker) = m_markerGlyphs(2)
'Draw a marker symbol.
DynamicDisplay.DrawMarker(m_point)
In the following code example, drawing is done using a compound marker symbol using the dynamic display API:
[C#]
//Draw the item as a compound marker. This means that you do not have to draw the items and its
//accompanying labels separately, thus allowing you to write less code and better set
//the marker symbol.
m_dynamicSymbolProps.set_DynamicGlyph(esriDynamicSymbolType.esriDSymbolMarker,
m_markerGlyphs[2]);
//Drawing a compound marker symbol using six strings.
m_dynamicCompoundMarker.DrawCompoundMarker6(m_point, "TOP", "BOTTOM", "Item " +
Convert.ToString(r[0]), heading.ToString("###.##"), m_point.X.ToString(
"###.#####"), m_point.Y.ToString("###.#####"));
[VB.NET]
'Draw the item as a compound marker. This means that you do not have to draw the items and its
'accompanying labels separately, thus allowing you to write less code and better set
'the marker symbol.
m_dynamicSymbolProps.DynamicGlyph(esriDynamicSymbolType.esriDSymbolMarker) = m_markerGlyphs(2)
'Drawing a compound marker symbol using six strings.
m_dynamicCompoundMarker.DrawCompoundMarker6
(m_point,
"TOP",
"BOTTOM",
"Item " & Convert.ToString(r(0)),
heading.ToString("###.##"),
m_point.X.ToString("###.#####"), m_point.Y.ToString("###.#####"))
3.5绘图方式使用OpenGL的API
[C#]
GL.glDisable(GL.GL_TEXTURE_2D);
GL.glPushMatrix();
GL.glLoadIdentity();
// Draw a simple point.
GL.glBegin(GL.GL_POINTS);
GL.glColor3f(1.0f, 1.0f, 0.0f); //Yellow
GL.glVertex2f((float)x, (float)y);
GL.glEnd();
GL.glPopMatrix();
GL.glEnable(GL.GL_TEXTURE_2D);
[VB.NET]
GL.glDisable(GL.GL_TEXTURE_2D)
GL.glPushMatrix()
GL.glLoadIdentity()
' Draw a simple point.
GL.glBegin(GL.GL_POINTS)
GL.glColor3f(1.0F, 1.0F, 0.0F)
GL.glVertex2f(CType(x, Single), CType(y, Single))
GL.glEnd()
GL.glPopMatrix()
GL.glEnable(GL.GL_TEXTURE_2D)
3.5动态图层
动态图层也是普通的图层。它实现了普通图层的接口,当然为此你必须最小程度上实现ILayer接口。事实上,实现了ILayer接口能够使自己加载到map上,也能使自己被放在内容列表中。需要实现一个动态图层,也需要实现IDynamicLayer接口,那就有如下的方法需要被实现:
DrawDynamicLayer
在绘制阶段决定画什么内容
DynamicLayerDirty
表明上次画完后的动态显示是否改变
DynamicRecompileRate
重新编译率是以百分之一秒为间隔的,这使得编译阶段的动态显示中的绘制方法(DrawDynamicLayer)可以被调用。
由于动态显示是处于激活状态的,这就意味着它就有固定的循环过程。在每次的阶段绘制过程中,都会检查DynaimcLayer中的脏标志,来重绘所有的动态图层中的内容。
(...待续-jx1228)
- 如何使用ArcGIS9.2中的动态显示(Dynamic Display)技术(三)
- 如何使用ArcGIS9.2中的动态显示(Dynamic Display)技术(一)
- 如何使用ArcGIS9.2中的动态显示(Dynamic Display)技术(二)
- 如何使用ArcGIS9.2中的动态显示(Dynamic Display)技术(四)
- 如何使用ArcGIS9.2中的动态显示(Dynamic Display)技术(五)
- 如何使用ArcGIS中的动态显示(Dynamic Display)技术(六)
- 如何理解C++中的动态绑定(dynamic binding)
- 如何理解C++中的动态绑定(dynamic binding)
- 使用动态类型Dynamic Type
- 宽动态Wide Dynamic Recording技术摄像机
- ArcGIS9.2安装步骤
- ArcGIS9.2安装步骤
- Quick中音频控制、display介绍及使用、创建显示对象的三种方法
- 如何使用iframe实现calendar动态显示,
- 如何处理BLOB类型数据之三:使用Servlet在页面上显示BLOB中的图片
- java中的动态代理-Dynamic Proxy
- 9-Hibernate3中的动态模型(Dynamic Model)
- Java中的Dynamic Proxy(动态代理)
- 应聘C语言类工作职位面试题大汇总3
- 使用WiX打包你的应用程序之一---基本应用
- A project with an Output Type of Class Library cannot be started directly
- 我的文章01
- 应聘C语言类工作职位面试题大汇总4
- 如何使用ArcGIS9.2中的动态显示(Dynamic Display)技术(三)
- 应聘C语言类工作职位面试题大汇总5
- 应聘C语言类工作职位面试题大汇总6
- 将Excel数据导入到数据库中
- jar文件的双击运行
- 应聘C语言类工作职位面试题大汇总7
- Hibernate级联操作Cascade学之---save-update
- Ajax基础--方法和属性
- LOGO免费在线制作http://www.dingdu.cn/post/logo