zoukankan      html  css  js  c++  java
  • ArcEngine唯一值着色再开发!

      有些工作看似简单,其实真正做起来还是需要很花一些功夫的!别人开发了唯一值着色程序,本想拿来用无奈做的实在没有办法满足要求,所以只好自己开发。不多言,先上截图:

      这里做了一个颜色显示控件ColorRampComboBox,主要可以返回色带的起始颜色FromColor和ToColor。还定义了一个事件和属性SelectedIndex;

    ColorRampComboBox
     1 using System;
     2 using System.Drawing;
     3 using System.Windows.Forms;
     4 using System.Drawing.Drawing2D;
     5 
     6 namespace GeoLibert
     7 {
     8     public partial class ColorRampComboBox : UserControl
     9     {
    10         public ColorRampComboBox()
    11         {
    12             InitializeComponent();
    13             PersonalizeComponent();
    14         }
    15         private Color _FromColor;
    16         private Color _ToColor;
    17         public Color FromColor
    18         {
    19 
    20             get { return _FromColor; }
    21             set { _FromColor = value; }
    22         }
    23         public Color ToColor
    24         {
    25            get { return _ToColor; }
    26 
    27             set { _ToColor = value; }
    28 
    29         }
    30         int selectIndex = -1;
    31 
    32         public int SelectedIndex
    33         {
    34             get { return selectIndex; }
    35             set 
    36             { 
    37                 selectIndex = value;
    38                 comboBox1.SelectedIndex = selectIndex;
    39             }
    40         }
    41 
    42         public event EventHandler SelectColorChanged;
    43         //预定义的渐变色
    44         private static string[] colorList =
    45         {
    46             "Black|White","White|Black","Red|Blue",
    47             "Red|Green","Blue|Green",
    48             "Aqua|Aquamarine","Azure|Beige",
    49             "Bisque|Black","BlanchedAlmond|Blue","BlueViolet|Brown",
    50             "BurlyWood|CadetBlue","Chartreuse|Chocolate",
    51             "CornflowerBlue|Cornsilk","Crimson|Cyan","DarkBlue|DarkCyan",
    52             "DarkGoldenrod|DarkGray","DarkGreen|DarkKhaki",
    53             "DarkMagenta|DarkOliveGreen","DarkOrange|DarkOrchid"
    54 
    55         };
    56         private void PersonalizeComponent()
    57 
    58         {
    59             this.comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
    60             this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
    61             this.comboBox1.ItemHeight = 18;
    62             this.comboBox1.BeginUpdate();
    63             this.comboBox1.Items.Clear();
    64             foreach (string oneColor in colorList)
    65             {
    66                 this.comboBox1.Items.Add(oneColor);
    67             }
    68            this.comboBox1.EndUpdate();
    69 
    70         }
    71         private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
    72         {
    73             if (e.Index < 0)
    74                 return;
    75             Rectangle rect = e.Bounds;
    76             //读取起始、终止颜色值
    77             string fColorName = comboBox1.Items[e.Index].ToString().Split('|')[0];
    78             string tColorName = comboBox1.Items[e.Index].ToString().Split('|')[1];
    79             _FromColor = Color.FromName(fColorName);
    80             _ToColor = Color.FromName(tColorName);
    81             //选择线性渐变刷子
    82             LinearGradientBrush brush = new LinearGradientBrush(rect, _FromColor, _ToColor, 0, false);
    83             rect.Inflate(-1, -1);
    84             // 填充颜色
    85             e.Graphics.FillRectangle(brush, rect);
    86             // 绘制边框
    87             e.Graphics.DrawRectangle(Pens.Black, rect);
    88         }
    89         private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    90         {
    91             selectIndex = comboBox1.SelectedIndex;
    92             if (SelectColorChanged != null)
    93             {
    94                 SelectColorChanged(this, e);
    95             }
    96         }
    97 
    98     }
    99 }

      下面是部分唯一值着色程序代码,

      程序逻辑:选择图层,选择字段,选择色带,获取唯一值时根据字段和色带创建Bitmap,添加相应的ListView项;

           根据已有的字段(UniqueRenderer),改变色带是,修改其符号颜色。

    View Code
      1 namespace GeoLibert
      2 {
      3     public partial class frmUniqueRenderer : Form
      4     {
      5         public frmUniqueRenderer()
      6         {
      7             InitializeComponent();
      8         }
      9         ISceneControl m_SceneCtrl = null;
     10         public ISceneControl SceneCtrl
     11         {
     12             get { return m_SceneCtrl; }
     13             set { m_SceneCtrl = value; }
     14         }
     15         IFeatureLayer pCurrentLyr = null;//当前图层
     16         IUniqueValueRenderer pUniqueValueR = null;
     17         IStyleGalleryClass pStyleGalleryClass = null;
     18         esriGeometryType m_strShapeType;//当前图层类型
     19         private void frmUniqueRenderer_Load(object sender, EventArgs e)
     20         {
     21             //加载图层
     22             if (m_SceneCtrl == null)
     23             {return;}
     24             ESRI.ArcGIS.esriSystem.IUID uid = new ESRI.ArcGIS.esriSystem.UIDClass();
     25             uid.Value = "{40A9E885-5533-11D0-98BE-00805F7CED21}";
     26             IScene map = m_SceneCtrl.Scene;
     27             if (map.LayerCount == 0) { return; }
     28             IEnumLayer enumLyr = map.get_Layers((ESRI.ArcGIS.esriSystem.UID)uid, true);
     29             enumLyr.Reset();
     30             ILayer layer = enumLyr.Next();
     31             while (layer != null)
     32             {
     33                 IFeatureLayer featlyr = layer as IFeatureLayer;
     34                 cmbChooseLayer.Items.Add(featlyr.Name);
     35                 layer = enumLyr.Next();
     36             }
     37             colorRampComboBox1.SelectedIndex = 0;//选择第一个色带
     38             cmbChooseLayer.SelectedIndex = 0;//默认选择第一个图层
     39             listView1.SmallImageList = imageList2;
     40             listView1.LargeImageList = imageList2;
     41             listView1.View = View.Details;
     42             //InitServerStyleFile(styleFilename);
     43             int columnWidth = listView1.Width / 4;
     44             listView1.Columns.Add("符号", columnWidth, HorizontalAlignment.Left);
     45             listView1.Columns.Add("字段值", columnWidth, HorizontalAlignment.Left);
     46             listView1.Columns.Add("标注", columnWidth, HorizontalAlignment.Left);
     47             
     48         }
     49         private void cmbChooseLayer_SelectedIndexChanged(object sender, EventArgs e)
     50         {
     51             pCurrentLyr = GetFeatureLayerFromMapLyr(cmbChooseLayer.SelectedIndex);
     52             m_strShapeType = pCurrentLyr.FeatureClass.ShapeType;//
     53             IFeatureClass featcls = pCurrentLyr.FeatureClass;
     54             IFields pFields = featcls.Fields;
     55             for (int i = 0; i < pFields.FieldCount;i++ )
     56             {
     57                 IField pfield=pFields.get_Field(i);
     58                 if (pfield.Type!=esriFieldType.esriFieldTypeGeometry)
     59                 {
     60                     combFields.Items.Add(pfield.Name);
     61                 }              
     62             }
     63             IGeoFeatureLayer pGeoFeatureLayer = pCurrentLyr as IGeoFeatureLayer;
     64             IFeatureRenderer  pFeatureRenderer = pGeoFeatureLayer.Renderer;          
     65             //判断当前图层类型,构建IStyleGalleryClass
     66             switch (featcls.ShapeType)
     67             {
     68                 case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
     69                     pStyleGalleryClass = new MarkerSymbolStyleGalleryClassClass();
     70                     break;
     71                 case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
     72                     pStyleGalleryClass = new LineSymbolStyleGalleryClassClass();
     73                     break;
     74                 case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
     75                     pStyleGalleryClass = new FillSymbolStyleGalleryClassClass();
     76                     break;
     77                 case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultiPatch:
     78                     pStyleGalleryClass = new FillSymbolStyleGalleryClassClass();
     79                     break;
     80                 default:
     81                     break;
     82             }
     83             listView1.Items.Clear();
     84             imageList2.Images.Clear();
     85             if (pFeatureRenderer is ISimpleRenderer)
     86             {
     87                 ISimpleRenderer pSimpleRenderer = pFeatureRenderer as ISimpleRenderer;
     88                 ISymbol pSymbol = pSimpleRenderer.Symbol;
     89                 Bitmap bitmap = PreviewSymbol(pStyleGalleryClass, pSymbol, imageList2.ImageSize.Width, imageList2.ImageSize.Height);
     90                 imageList2.Images.Add(bitmap as Image);
     91                 ListViewItem listviewitem1 = new ListViewItem(new string[] { " ", "默认值","默认值" }, 0);
     92                 listView1.Items.Add(listviewitem1);
     93             }
     94             else if (pFeatureRenderer is IUniqueValueRenderer)
     95             {
     96                 pUniqueValueR = new UniqueValueRendererClass();//构建新的唯一值着色类
     97                 IUniqueValueRenderer pUnique = pFeatureRenderer as IUniqueValueRenderer;
     98 
     99                 IObjectCopy objCopy = new ObjectCopyClass();
    100                 object copiedUniqueVR = objCopy.Copy(pUnique);
    101                 object toUniqueVR = pUniqueValueR;
    102                 objCopy.Overwrite(copiedUniqueVR, ref toUniqueVR);
    103                 ISymbol pSymbolDefault = pUniqueValueR.DefaultSymbol;
    104                 if (pSymbolDefault!=null)
    105                 {
    106                     Bitmap bitmap = PreviewSymbol(pStyleGalleryClass, pSymbolDefault, imageList2.ImageSize.Width, imageList2.ImageSize.Height);
    107                     imageList2.Images.Add(bitmap as Image);
    108                     ListViewItem listviewitem0 = new ListViewItem();
    109                     listviewitem0.SubItems.Add("默认值");
    110                     listviewitem0.SubItems.Add("默认值");
    111                     listviewitem0.ImageIndex = 0;
    112                     listView1.Items.Add(listviewitem0);
    113                 }
    114                 string strfield = pUniqueValueR.get_Field(0);
    115                 IFeatureClass pCurrentFeatCls = pCurrentLyr.FeatureClass;
    116                 int idx = -1;
    117                 for (int i = 0; i < pFields.FieldCount; i++)
    118                 {
    119                     IField pfield = pFields.get_Field(i);
    120                     if (pfield.Type != esriFieldType.esriFieldTypeGeometry)
    121                     {
    122                         idx++;
    123                         if (pfield.Name==strfield)
    124                         {
    125                             combFields.SelectedIndex = idx;
    126                         }                    
    127                     }
    128                 }
    129                 if (idx!=-1)
    130                 {
    131                     isGetAllValue = true;
    132                     recordNum = pUniqueValueR.ValueCount;
    133                 }             
    134                 for (int i = 0; i < pUniqueValueR.ValueCount; i++)
    135                 {
    136                     string strValue = pUniqueValueR.get_Value(i);
    137                     ISymbol pSymbol1 = pUniqueValueR.get_Symbol(strValue);
    138                     
    139                     Bitmap bitmap1 = PreviewSymbol(pStyleGalleryClass, pSymbol1, imageList2.ImageSize.Width, imageList2.ImageSize.Height);
    140                     imageList2.Images.Add(bitmap1 as Image);
    141                     ListViewItem listviewitem1 = new ListViewItem();
    142                     listviewitem1.SubItems.Add(strValue);
    143                     listviewitem1.SubItems.Add(strValue);
    144                     listviewitem1.ImageIndex = i + 1;
    145                     listView1.Items.Add(listviewitem1);
    146                 }             
    147 
    148             }
    149         }
    150         Bitmap PreviewSymbol(IStyleGalleryClass pStyleGalleryClass, object galleryItem, int imgWidth, int imgHeight)
    151         {
    152             Bitmap bitmap = new Bitmap(imgWidth, imgHeight);
    153             Graphics graphics = Graphics.FromImage(bitmap);
    154             tagRECT rect = new tagRECT();
    155             rect.right = bitmap.Width;
    156             rect.bottom = bitmap.Height;
    157             System.IntPtr hdc = graphics.GetHdc();
    158 
    159             pStyleGalleryClass.Preview(galleryItem, hdc.ToInt32(), ref rect);
    160             graphics.ReleaseHdc(hdc);
    161             graphics.Dispose();
    162             return bitmap;
    163         }
    164         //从地图图层中获得特征类数据图层
    165         private IFeatureLayer GetFeatureLayerFromMapLyr(int selectidx)
    166         {
    167             //AxSceneControl axScene= pMainFrm.axSceneControl1;
    168             IFeatureLayer featlyr = null;
    169 
    170             ESRI.ArcGIS.esriSystem.IUID uid = new ESRI.ArcGIS.esriSystem.UIDClass();
    171             uid.Value = "{40A9E885-5533-11D0-98BE-00805F7CED21}";
    172             IScene scene = m_SceneCtrl.Scene;
    173             IEnumLayer enumLyr = scene.get_Layers((ESRI.ArcGIS.esriSystem.UID)uid, true);
    174             enumLyr.Reset();
    175             ILayer layer = enumLyr.Next();
    176             int i = 0;
    177             while (layer != null)
    178             {
    179                 
    180                 if (i == selectidx)
    181                 {
    182                     featlyr = layer as IFeatureLayer;
    183                     break;
    184                 }
    185                 i++;
    186                 layer = enumLyr.Next();
    187             }
    188             return featlyr;
    189         }
    190    
    191         //书写颜色转换函数,从.NET颜色转换为esri的颜色
    192         private IColor ConvertColorToColor(Color color)
    193         {
    194             IRgbColor pColor = new RgbColorClass();
    195             pColor.RGB = color.B * 65536 + color.G * 256 + color.R;
    196             return pColor;
    197         }
    198 
    199         private void colorRampComboBox1_SelectColorChanged(object sender, EventArgs e)
    200         {
    201             
    202             if (isGetAllValue && recordNum > 0)
    203             {
    204                 Color fromColor = colorRampComboBox1.FromColor;
    205                 Color toColor = colorRampComboBox1.ToColor;
    206                 IColorRamp pColorRamp = null;
    207                 IAlgorithmicColorRamp pAlgorithmColorRamp = new AlgorithmicColorRamp();
    208                 pAlgorithmColorRamp.ToColor = this.ConvertColorToColor(toColor);
    209                 pAlgorithmColorRamp.FromColor = this.ConvertColorToColor(fromColor);
    210                 //设置梯度类型
    211                 pAlgorithmColorRamp.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
    212                 //设置颜色带颜色数量
    213                 //////任意产生recordNum个颜色,recordNum就是要素的数目
    214                 pAlgorithmColorRamp.Size = recordNum+1;
    215                 //创建颜色带
    216                 bool bTrue = true;
    217                 pAlgorithmColorRamp.CreateRamp(out bTrue);
    218                 pColorRamp = pAlgorithmColorRamp as IColorRamp;
    219 
    220                 listView1.Items.Clear();
    221                 imageList2.Images.Clear();
    222                 ISymbol pSymbol0 = pUniqueValueR.DefaultSymbol;
    223                 Bitmap bitmap0 = PreviewSymbol(pStyleGalleryClass, pSymbol0, imageList2.ImageSize.Width, imageList2.ImageSize.Height);
    224                 Image image0 = bitmap0;
    225                 imageList2.Images.Add(image0);
    226                 ListViewItem lv0 = new ListViewItem(new string[] { " ", "默认值", "默认值"}, 0);
    227                 listView1.Items.Add(lv0);
    228                 IEnumColors pEnumRamp = pColorRamp.Colors;
    229                 for (int i = 0; i < pUniqueValueR.ValueCount; i++)
    230                 {
    231                     
    232                     IColor pNextUniqueColor = null;
    233                     //获得随机颜色带中的任意一种颜色
    234                     pNextUniqueColor = pEnumRamp.Next();
    235                     if (pNextUniqueColor == null)
    236                     {
    237                         pEnumRamp.Reset();
    238                         pNextUniqueColor = pEnumRamp.Next();
    239                     }
    240                     ISymbol addSymbol = GetSymbolByShpType(m_strShapeType, pNextUniqueColor);
    241                     string strValue = pUniqueValueR.get_Value(i);
    242                     pUniqueValueR.set_Symbol(strValue, addSymbol);
    243                     Bitmap bitmap = PreviewSymbol(pStyleGalleryClass, addSymbol, imageList2.ImageSize.Width, imageList2.ImageSize.Height);
    244                     Image image = bitmap;
    245                     imageList2.Images.Add(image);
    246                     listView1.SmallImageList = imageList2;
    247                     ListViewItem lv = new ListViewItem(new string[] { " ", strValue, strValue}, i+1);
    248                     listView1.Items.Add(lv);
    249 
    250                 }
    251             }
    252 
    253         }
    254         
    255         private void btnOK_Click(object sender, EventArgs e)
    256         {
    257             IGeoFeatureLayer m_pGeoFeatureL = (IGeoFeatureLayer)pCurrentLyr;
    258             m_pGeoFeatureL.Renderer = (IFeatureRenderer)pUniqueValueR;
    259             m_SceneCtrl.SceneGraph.Invalidate(pCurrentLyr, true, false);
    260             m_SceneCtrl.SceneViewer.Redraw(true);
    261             m_SceneCtrl.SceneGraph.RefreshViewers();
    262             this.DialogResult = DialogResult.OK;
    263             
    264         }
    265         private void btnCancel_Click(object sender, EventArgs e)
    266         {
    267             this.DialogResult = DialogResult.Cancel;
    268         }
    269         bool isGetAllValue = false;
    270         int recordNum = 0;//找出该图层的记录数
    271         private void btnGetUniqueValue_Click(object sender, EventArgs e)
    272         {
    273             if (isGetAllValue == false)
    274             {
    275                 isGetAllValue = true;
    276                 IGeoFeatureLayer m_pGeoFeatureL = (IGeoFeatureLayer)pCurrentLyr;
    277                 
    278                 string LayerFieldName = combFields.Text;
    279                 pUniqueValueR = new UniqueValueRendererClass();
    280                 IColor colr = GetRGB(238,223,155);
    281                 pUniqueValueR.DefaultSymbol = GetSymbolByShpType(m_strShapeType, colr); 
    282                 pUniqueValueR.UseDefaultSymbol = false;            
    283                 ITable pTable = (ITable)m_pGeoFeatureL;
    284                 ////////找出LayerFieldName在字段中的编号
    285                 int lfieldNumber = pTable.FindField(combFields.Text);
    286                 if (lfieldNumber == -1)
    287                 {
    288                     MessageBox.Show("无法找到字段" + LayerFieldName);
    289                     return;
    290                 }
    291                 /////只用一个字段进行单值着色
    292                 pUniqueValueR.FieldCount = 1;
    293                 /////用于区分着色的字段
    294                 pUniqueValueR.set_Field(0, LayerFieldName);
    295                 //产生查询过滤器
    296                 IQueryFilter pQueryFilter = new QueryFilterClass();
    297                 pQueryFilter.AddField(LayerFieldName);
    298                 ////依据某个字段在表中找出指向所有行的游标对象
    299                 ICursor pNumCursor = pTable.Search(pQueryFilter, true);
    300                   
    301                 System.Collections.IEnumerator enumerator;
    302                 IDataStatistics DS = new DataStatisticsClass();
    303                 DS.Field = LayerFieldName;//设置唯一值字段
    304                 DS.Cursor = pNumCursor;//数据来源
    305                 enumerator = DS.UniqueValues;//得到唯一值
    306                 recordNum = DS.UniqueValueCount;
    307                 //ZS = Convert.ToString(DS.UniqueValueCount);
    308                 enumerator.Reset();//从新指向第一个值
    309 
    310                 Color fromColor = colorRampComboBox1.FromColor;
    311                 Color toColor = colorRampComboBox1.ToColor;
    312                 IColorRamp pColorRamp = null;
    313                 IAlgorithmicColorRamp pAlgorithmColorRamp = new AlgorithmicColorRamp();
    314                 pAlgorithmColorRamp.ToColor = this.ConvertColorToColor(toColor);
    315                 pAlgorithmColorRamp.FromColor = this.ConvertColorToColor(fromColor);
    316                 //设置梯度类型
    317                 pAlgorithmColorRamp.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
    318                 //设置颜色带颜色数量
    319                 //////任意产生recordNum个颜色,recordNum就是要素的数目
    320                 pAlgorithmColorRamp.Size = recordNum+1;
    321                 //创建颜色带
    322                 bool bTrue = true;
    323                 pAlgorithmColorRamp.CreateRamp(out bTrue);
    324                 pColorRamp = pAlgorithmColorRamp as IColorRamp;
    325                 IEnumColors pEnumRamp = pColorRamp.Colors;
    326                 IColor pNextUniqueColor = null;
    327 
    328                 /////遍历所有的要素
    329                while (enumerator.MoveNext())//pNextRow!=null
    330                {
    331                    object fieldValue;
    332                    fieldValue = enumerator.Current;
    333                    string codeValue = fieldValue.ToString();
    334                    //获得随机颜色带中的任意一种颜色
    335                    pNextUniqueColor = pEnumRamp.Next();
    336                    if (pNextUniqueColor == null)
    337                    {
    338                        pEnumRamp.Reset();
    339                        pNextUniqueColor = pEnumRamp.Next();
    340                    }
    341                    ISymbol addSymbol = GetSymbolByShpType(m_strShapeType, pNextUniqueColor);
    342                    pUniqueValueR.AddValue(codeValue, LayerFieldName, addSymbol);
    343                }
    344                 listView1.Items.Clear();
    345                 imageList2.Images.Clear();
    346                 ISymbol pSymbol0 = pUniqueValueR.DefaultSymbol;
    347                 Bitmap bitmap0 = PreviewSymbol(pStyleGalleryClass, pSymbol0, imageList2.ImageSize.Width, imageList2.ImageSize.Height);
    348                 Image image0 = bitmap0;
    349                 imageList2.Images.Add(image0);
    350                 ListViewItem lv0 = new ListViewItem(new string[] { " ", "默认值", "默认值" }, 0);
    351                 listView1.Items.Add(lv0);
    352                 for (int i = 0; i < pUniqueValueR.ValueCount; i++)
    353                 {
    354                     string strValue = pUniqueValueR.get_Value(i);
    355                     ISymbol pSymbol = pUniqueValueR.get_Symbol(strValue);
    356                     Bitmap bitmap = PreviewSymbol(pStyleGalleryClass, pSymbol, imageList2.ImageSize.Width, imageList2.ImageSize.Height);
    357                     Image image = bitmap;
    358                     imageList2.Images.Add(image);
    359                     listView1.SmallImageList = imageList2;
    360                     ListViewItem lv = new ListViewItem(new string[] { " ", strValue, strValue}, i+1);
    361                     listView1.Items.Add(lv);
    362 
    363                 }
    364             }
    365           
    366         }
    367         public ISymbol GetSymbolByShpType(esriGeometryType strShpType, IColor fillColor)
    368         {
    369             ISymbol returnSyb = null;
    370             IFillSymbol pFillSymbol;
    371             ILineSymbol pLineSymbol;
    372             //设置背景符号
    373             if (strShpType == esriGeometryType.esriGeometryPolygon)
    374             {
    375                 pFillSymbol = new SimpleFillSymbolClass();
    376                 pFillSymbol.Color = fillColor;
    377                 pLineSymbol = new SimpleLineSymbolClass();
    378                 pLineSymbol.Color =ConvertColorToColor(Color.Black);
    379                 pLineSymbol.Width = 1;//outLineWid;
    380                 pFillSymbol.Outline = pLineSymbol;
    381                 returnSyb = (ISymbol)pFillSymbol;
    382             }
    383             if (strShpType == esriGeometryType.esriGeometryPolyline)
    384             {
    385                 ILineSymbol pLineBaseSymbol;
    386                 pLineBaseSymbol = new SimpleLineSymbolClass();
    387                 pLineBaseSymbol.Color = fillColor;
    388                 returnSyb = (ISymbol)pLineBaseSymbol;
    389             }
    390             if (strShpType == esriGeometryType.esriGeometryPoint)
    391             {
    392                 IMarkerSymbol pMarkerBaseSymbol;
    393                 pMarkerBaseSymbol = new SimpleMarkerSymbolClass();
    394                 pMarkerBaseSymbol.Color = fillColor;
    395                 pMarkerBaseSymbol.Size = 4;
    396                 returnSyb = (ISymbol)pMarkerBaseSymbol;
    397             }
    398             if (strShpType == esriGeometryType.esriGeometryMultiPatch)
    399             {
    400                 pFillSymbol = new SimpleFillSymbolClass();
    401                 pFillSymbol.Color = fillColor;
    402                 pLineSymbol = new SimpleLineSymbolClass();
    403                 pLineSymbol.Color = ConvertColorToColor(Color.Black);
    404                 pLineSymbol.Width = 1;//outLineWid;
    405                 pFillSymbol.Outline = pLineSymbol;
    406                 returnSyb = (ISymbol)pFillSymbol;
    407             }
    408             return returnSyb;
    409         }
    410 
    411         private IColor GetRGB(int r, int g, int b)
    412         {
    413             IRgbColor pColor;
    414             pColor = new RgbColorClass();
    415             pColor.Red = r;
    416             pColor.Green = g;
    417             pColor.Blue = b;
    418             return pColor;
    419         }
    420 
    421         private void btnRemoveAllValue_Click(object sender, EventArgs e)
    422         {
    423             pUniqueValueR.RemoveAllValues();
    424             isGetAllValue = false;
    425             listView1.Items.Clear();
    426             imageList2.Images.Clear();
    427             ISymbol pSymbol0 = pUniqueValueR.DefaultSymbol;
    428             Bitmap bitmap0 = PreviewSymbol(pStyleGalleryClass, pSymbol0, imageList2.ImageSize.Width, imageList2.ImageSize.Height);
    429             Image image0 = bitmap0;
    430             imageList2.Images.Add(image0);
    431             ListViewItem lv0 = new ListViewItem(new string[] { " ", "默认值", "默认值" }, 0);
    432             listView1.Items.Add(lv0);
    433         }
    434 
    435         private void combFields_SelectedIndexChanged(object sender, EventArgs e)
    436         {
    437             isGetAllValue = false;
    438         }
    439     }
    440  
    441 }

      该程序还没有实现双击改变某一个符号的功能,不过应该不难,只需要修改pUniqueRenderer,Set_Symbol(I)就行了!

    参考文献:1.自定义ComboBox显示色带:http://blog.sina.com.cn/s/blog_86d10dc7010166i7.html

    文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
  • 相关阅读:
    Ubuntu apache 虚拟主机配置
    Apache Directory 指令
    Sphinx 全文检索
    双系统Linux(ubuntu)进入windows的NTFS分区之挂载错误
    Composer 中国镜像
    Liunx下全局安装 Composer
    提高代码质量技巧
    mysql 中浮点型与定点型记录
    cookie安全
    php 小坑记录
  • 原文地址:https://www.cnblogs.com/yhlx125/p/2609695.html
Copyright © 2011-2022 走看看