ArcEngine(AE)符号选择器及符号恢复功能【转载】
ArcEngine(AE)符号选择器及符号恢复功能【转载】
http://rsgisman.bokee.com/viewdiary.24217873.html
AE 开发中进行地图简单符号渲染的一个必要手段。AE自带了SymbologyControl控件用于进行符号类型文件的加载和显示,并通过StyleGalleryItem来返回选择的内容。这也让设计一个自定义符号选择器变得非常简单。
简单的符号绘制是通过设置图层的SimpleRenderer属性来得到的。在借鉴一些例程之后,我也设计了这样一个符号选择功能,只需通过简单的调用一个函数得到返回的SimpleRenderer赋值给图层即可:
Dim pSimpleRenderer As ISimpleRenderer
Set pSimpleRenderer = frmSymbolSelector.GetSimpleRenderer(pCurrentLayer)
此处的frmSymbolSelector就是一个自定义的符号选择器,调用该选择器时只需要通过定义的借口函数GetSimpleRenderer就能调出符号选择器供选择相应图层类型的符号,如图所示:
在设计开发完之后首先发现有个问题,就是“取消”功能之后,如果在“取消”前已经选择了新符号或者修改了原有符号并进行了符号的预览,那么图层的符号也会 改变。因为函数GetSimpleRenderer是通过传递图层变量来获取初始符号信息的,在符号选择器中修改的符号是和图层的符号关联在一起的。为了 避免此项错误,就必须在最初始获取原始符号信息时将其另外保留一份,在“取消”时再将该原始符号从新赋值给图层。这里就有一个问题,直接通过符号赋值的方 法行不通,因此使用了IClone对象来进行拷贝原始符号信息:
Private pOriginalSymbol As ISymbol
Dim pCloneFatherSymbol As IClone
Set pCloneFatherSymbol = pSimpleRenderer.Symbol
Set pOriginalSymbol = pCloneFatherSymbol.Clone
这样如果我们在“取消”时将pOriginalSymbol从新拷贝会图层符号即可,
而符号“恢复”也正是采取该方式来实现,通过pOriginalSymbol 来从新恢复初始的符号信息并进行预览。