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 来从新恢复初始的符号信息并进行预览。