private void DrawSymbolsInOrder(IFeatureCursor Cursor, esriDrawPhase drawPhase, IDisplay Display, ITrackCancel trackCancel)
		{
			// this sub draws either markers or line symbols from large small so that the smallest symbols will be drawn on top

			// in graduated symbol case, a cursor is built and parsed n times for n size classes
			// in proportional symbol case, symbols are sorted and drawn from largest to smallest

			int iSizeIndex = 0;
			int iCurrentDrawableSymbolIndex = 0;
			IFeatureCursor pMyCursor = null;
			IFeature pFeat = null;
			IFeatureDraw pFeatDraw = null;
			bool bContinue = true;
			ISymbol pSizeSym = null;
			ISymbol pDrawSym = null;
			IFeatureCursor pSortedCursor = null;

			if (m_pSizeRend is IProportionalSymbolRenderer)
			{
				// sort 
				pSortedCursor = SortData(Cursor, trackCancel);

				// draw
				pFeat = pSortedCursor.NextFeature();
				while (pFeat != null)
				{
					pDrawSym = GetFeatureSymbol(pFeat);
					// draw the feature
					pFeatDraw = pFeat as IFeatureDraw;
					Display.SetSymbol(pDrawSym);

          //implementation of IExportSupport
          BeginFeature(pFeat, Display);
          					
					pFeatDraw.Draw(drawPhase, Display, pDrawSym, true, null, esriDrawStyle.esriDSNormal);

          //implementation of IExportSupport
          GenerateExportInfo(pFeat, Display);
          EndFeature(Display);
					
					// get next feature
					pFeat = pSortedCursor.NextFeature();
					if (trackCancel != null)
							bContinue = trackCancel.Continue();
				}

			}
			else
			{
				IClassBreaksRenderer pSizeCBRend = null;
                pSizeCBRend = m_pSizeRend as IClassBreaksRenderer;
				pMyCursor = Cursor;
				for (iCurrentDrawableSymbolIndex = (pSizeCBRend.BreakCount - 1); iCurrentDrawableSymbolIndex >= 0; iCurrentDrawableSymbolIndex--)
				{
					// do not build a cursor the 1st time because we already have one
					if (iCurrentDrawableSymbolIndex < (pSizeCBRend.BreakCount - 1))
					{
						// build pMyCursor
						pMyCursor = m_pFeatureClass.Search(m_pQueryFilter, true);
					}
					pFeat = pMyCursor.NextFeature();
					while (pFeat != null)
					{
						// check to see if we will draw in this pass
						pSizeSym = m_pSizeRend.get_SymbolByFeature(pFeat);
						iSizeIndex = GetSymbolIndex(pSizeSym, pSizeCBRend);
						if (iSizeIndex == iCurrentDrawableSymbolIndex)
						{
							// go ahead and draw the symbol
							// get symbol to draw
							pDrawSym = GetFeatureSymbol(pFeat);

							// draw the feature
							pFeatDraw = pFeat as IFeatureDraw;
							Display.SetSymbol(pDrawSym);

              //implementation of IExportSupport
              BeginFeature(pFeat, Display);
							
							pFeatDraw.Draw(drawPhase, Display, pDrawSym, true, null, esriDrawStyle.esriDSNormal);

              //implementation of IExportSupport
              GenerateExportInfo(pFeat, Display);
              EndFeature(Display);
              
							if (trackCancel != null)
									bContinue = trackCancel.Continue();
						}

						pFeat = pMyCursor.NextFeature();
					}

				} // increment DOWN to next symbol size

			}

		}
예제 #2
0
        public void Apply()
        {
            IObjectCopy          copy     = new ObjectCopyClass();
            IClassBreaksRenderer renderer = copy.Copy(this.iclassBreaksRenderer_0) as IClassBreaksRenderer;

            this.igeoFeatureLayer_0.Renderer = renderer as IFeatureRenderer;
        }
		private bool CompareRenderers(IFeatureRenderer pRend, IFeatureRenderer pCheckRend)
		{

			if (pRend is IClassBreaksRenderer)
			{
				// type
				if (! (pCheckRend is IClassBreaksRenderer))
						return false;

				IClassBreaksRenderer pCBRend = null;
				pCBRend = pRend as IClassBreaksRenderer;
				IClassBreaksRenderer pCBCheckRend = null;
				pCBCheckRend = pCheckRend as IClassBreaksRenderer;

				// break count
				if (pCBRend.BreakCount != pCBCheckRend.BreakCount)
						return false;

				// field
				if (pCBRend.Field != pCBCheckRend.Field)
						return false;

			}

			return true;

		}
예제 #4
0
파일: Thematic.cs 프로젝트: truonghinh/TnX
 public Thematic(IMapControl3 mapControl)
 {
     if (mapControl != null)
     {
         this._mapControl = mapControl;
     }
     _renderer = new ClassBreaksRendererClass();
     _classify = new QuantileClass();
     _tableHistogram = new BasicTableHistogramClass();
     _colorFrom = new HsvColorClass();
     _colorTo = new HsvColorClass();
     _algClrRamp = new AlgorithmicColorRampClass();
 }
예제 #5
0
        public static IFeatureRenderer  HideSymbolOfLayer(IGeoFeatureLayer pGeoFeatureLayer)
        {
            IFeatureRenderer pFeatureRenderer = pGeoFeatureLayer.Renderer;

            ISymbol pSymbol = null;

            if (pFeatureRenderer is ISimpleRenderer)
            {
                ISimpleRenderer pSimpleRender = pFeatureRenderer as ISimpleRenderer;
                pSimpleRender.Symbol = null;
                //pSymbol = pSimpleRender.Symbol;
                //SetSymbolNoColor(pGeoFeatureLayer, ref pSymbol);
                //pSimpleRender.Symbol = pSymbol;
                return(pSimpleRender as IFeatureRenderer);
            }
            else if (pFeatureRenderer is IUniqueValueRenderer)
            {
                IUniqueValueRenderer pUniqueRender = pFeatureRenderer as IUniqueValueRenderer;

                for (int i = 0; i < pUniqueRender.ValueCount; i++)
                {
                    string sValue = pUniqueRender.get_Value(i);
                    pUniqueRender.set_Symbol(sValue, null);
                    //pSymbol = pUniqueRender.get_Symbol(sValue);
                    //SetSymbolNoColor(pGeoFeatureLayer, ref pSymbol);
                    //pUniqueRender.set_Symbol(sValue, pSymbol);
                }
                return(pUniqueRender as IFeatureRenderer);
            }
            else if (pFeatureRenderer is IClassBreaksRenderer)
            {
                IClassBreaksRenderer pClassRenderer = pFeatureRenderer as IClassBreaksRenderer;
                for (int i = 0; i < pClassRenderer.BreakCount; i++)
                {
                    pClassRenderer.set_Symbol(i, null);
                }
                pClassRenderer.BackgroundSymbol = null;
                return(pClassRenderer as IFeatureRenderer);
            }
            else if (pFeatureRenderer is IProportionalSymbolRenderer)
            {
            }
            else if (pFeatureRenderer is IChartRenderer)
            {
                IChartRenderer pChartRenderer = pFeatureRenderer as IChartRenderer;
                pChartRenderer.BaseSymbol  = null;
                pChartRenderer.ChartSymbol = null;
            }
            return(null);
        }
예제 #6
0
        private void button2_Click(object sender, System.EventArgs e)
        {
            //Create a new ClassBreaksRenderer and set properties
            m_classBreaksRenderer              = new ClassBreaksRenderer();
            m_classBreaksRenderer.Field        = comboBox1.SelectedItem.ToString();
            m_classBreaksRenderer.BreakCount   = Convert.ToInt32(textBox1.Text);
            m_classBreaksRenderer.MinimumBreak = Convert.ToDouble(textBox2.Text);

            //Calculate the class interval by a simple mean value
            double interval = (Convert.ToDouble(textBox3.Text) - m_classBreaksRenderer.MinimumBreak) / m_classBreaksRenderer.BreakCount;

            //Get the color ramp
            IColorRamp colorRamp = (IColorRamp)m_styleGalleryItem.Item;

            //Set the size of the color ramp and recreate it
            colorRamp.Size = Convert.ToInt32(textBox1.Text);
            bool createRamp;

            colorRamp.CreateRamp(out createRamp);

            //Get the enumeration of colors from the color ramp
            IEnumColors enumColors = colorRamp.Colors;

            enumColors.Reset();
            double currentBreak = m_classBreaksRenderer.MinimumBreak;

            ISimpleFillSymbol simpleFillSymbol;

            //Loop through each class break
            for (int i = 0; i <= m_classBreaksRenderer.BreakCount - 1; i++)
            {
                //Set class break
                m_classBreaksRenderer.set_Break(i, currentBreak);
                //Create simple fill symbol and set color
                simpleFillSymbol       = new SimpleFillSymbolClass();
                simpleFillSymbol.Color = enumColors.Next();
                //Add symbol to renderer
                m_classBreaksRenderer.set_Symbol(i, (ISymbol)simpleFillSymbol);
                currentBreak += interval;
            }

            //Hide the form
            this.Hide();
        }
예제 #7
0
        private void Renderer()
        {
            IGeoFeatureLayer pGeoFeatureL = (IGeoFeatureLayer)layer2Symbolize;
            IFeatureClass    featureClass = pGeoFeatureL.FeatureClass;
            int lfieldNumber = featureClass.FindField(strRendererField);

            if (lfieldNumber == -1)
            {
                MessageBox.Show("Can't find field called " + strRendererField);
                return;
            }
            m_classBreaksRenderer = CreateClassBreaksRenderer(featureClass);
            if (m_classBreaksRenderer == null)
            {
                return;
            }
            pGeoFeatureL.Renderer = (IFeatureRenderer)m_classBreaksRenderer;
            m_activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography,
                                        null, m_activeView.Extent);
        }
예제 #8
0
        private void button1_Click(object sender, System.EventArgs e)
        {
            //Get the layer selected in the combo box
            IGeoFeatureLayer geofeaturelayer = null;
            IMap             map             = axPageLayoutControl1.ActiveView.FocusMap;

            for (int i = 0; i <= map.LayerCount - 1; i++)
            {
                if (map.get_Layer(i).Name == comboBox1.SelectedItem.ToString())
                {
                    geofeaturelayer = (IGeoFeatureLayer)map.get_Layer(i);
                    break;
                }
            }
            if (geofeaturelayer == null)
            {
                return;
            }

            //Create ClassBreaks form
            Form2 classBreaksForm = new  Form2();

            //Get a ClassBreakRenderer that uses the selected ColorRamp
            IClassBreaksRenderer classBreaksRenderer = classBreaksForm.GetClassBreaksRenderer(geofeaturelayer);

            if (classBreaksRenderer == null)
            {
                return;
            }

            //Set the new renderer
            geofeaturelayer.Renderer = (IFeatureRenderer)classBreaksRenderer;

            //Trigger contents changed event for TOCControl
            axPageLayoutControl1.ActiveView.ContentsChanged();
            //Refresh the display
            axPageLayoutControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, geofeaturelayer, null);

            //Dispose of the form
            classBreaksForm.Dispose();
        }
예제 #9
0
 private void method_1()
 {
     if (this.igeoFeatureLayer_0 == null)
     {
         this.iclassBreaksRenderer_0 = null;
     }
     else
     {
         IClassBreaksRenderer pInObject = this.igeoFeatureLayer_0.Renderer as IClassBreaksRenderer;
         if (pInObject == null)
         {
             if (this.iclassBreaksRenderer_0 == null)
             {
                 this.iclassBreaksRenderer_0 = new ClassBreaksRendererClass();
             }
         }
         else
         {
             IObjectCopy copy = new ObjectCopyClass();
             this.iclassBreaksRenderer_0 = copy.Copy(pInObject) as IClassBreaksRenderer;
         }
     }
 }
		private int GetSymbolIndex(ISymbol pSym, IClassBreaksRenderer pRend)
		{
			// given an input symbol and a renderer, this function returns the index of
			//   the class that the symbol represents in the renderer

			int i = 0;
			int iNumBreaks = 0;

		
			iNumBreaks = pRend.BreakCount;
			i = 0;
			ILegendInfo pLegendInfo = null;
			pLegendInfo = pRend as ILegendInfo;
			while (i < iNumBreaks - 1)
			{
				if (pLegendInfo.SymbolsAreGraduated)
				{
					// compare based on size
					if (SymbolsAreSameSize(pSym, pRend.get_Symbol(i)))
							break;
				}
				else
				{
					// compare based on color
					if (SymbolsAreSameColor(pSym, pRend.get_Symbol(i)))
							break;
				}
				i = i + 1;
			}

			return i;

			// NOTE: for some reason we can't test that the symbol objects are the same, so above we do quick test for equal properties instead
			//Do While (i < iNumBreaks - 1)
			//    If pSym Is pRend.Symbol(i) Then Exit Do
			//    i = i + 1
			//Loop

			//Return i

			// (I think this only works for renderer that does Graduated symbols)
			//If m_ShapeType = esriGeometryType.esriGeometryPoint Or m_ShapeType = esriGeometryType.esriGeometryPolygon Then
			//    ' determine the symbol index based on marker symbol size
			//    pInMarkerSym = pSym
			//    i = 0
			//    pClassMarkerSym = pRend.Symbol(0)
			//    dblSize = pClassMarkerSym.Size
			//    Do While (i < iNumBreaks - 1) And (pInMarkerSym.Size > dblSize)
			//        pClassMarkerSym = pRend.Symbol(i)
			//        dblSize = pClassMarkerSym.Size
			//        i = i + 1
			//    Loop
			//    iReturnVal = i
			//Else ' m_shapetype = esriGeometryLine
			//    ' determine the symbol index based on line symbol width
			//    pInLineSym = pSym
			//    i = 0
			//    pClassLineSym = pRend.Symbol(0)
			//    dblWidth = pClassLineSym.Width
			//    Do While (i < iNumBreaks - 1) And (pInLineSym.Width > dblWidth)
			//        pClassLineSym = pRend.Symbol(i)
			//        dblSize = pClassLineSym.Width
			//        i = i + 1
			//    Loop
			//    iReturnVal = i
			//End If

		}
예제 #11
0
        private void method_5(IColorRamp icolorRamp_1, IClassBreaksRenderer iclassBreaksRenderer_1, int int_0,
                              ITable itable_0, string string_0, string string_1, esriDataNormalization esriDataNormalization_0)
        {
            try
            {
                esriGeometryType esriGeometryAny = esriGeometryType.esriGeometryAny;
                if (this.igeoFeatureLayer_0.FeatureClass != null)
                {
                    esriGeometryAny = this.igeoFeatureLayer_0.FeatureClass.ShapeType;
                }
                IClassify classify =
                    this.method_2((iclassBreaksRenderer_1 as IClassBreaksUIProperties).Method) as IClassify;
                if (classify != null)
                {
                    object          obj2;
                    object          obj3;
                    bool            flag;
                    ITableHistogram histogram = new BasicTableHistogramClass
                    {
                        Field     = string_0,
                        Table     = itable_0,
                        NormField = string_1
                    };
                    (histogram as IDataNormalization).NormalizationType = esriDataNormalization_0;
                    (histogram as IBasicHistogram).GetHistogram(out obj2, out obj3);
                    if (classify is IClassifyMinMax2)
                    {
                        double minimum = (histogram as IStatisticsResults).Minimum;
                        double maximum = (histogram as IStatisticsResults).Maximum;
                        (classify as IClassifyMinMax2).ClassifyMinMax(minimum, maximum, ref int_0);
                    }
                    else if (classify is IDeviationInterval)
                    {
                        (classify as IDeviationInterval).Mean        = (histogram as IStatisticsResults).Mean;
                        (classify as IDeviationInterval).StandardDev =
                            (histogram as IStatisticsResults).StandardDeviation;
                        (classify as IDeviationInterval).DeviationInterval = 0.5;
                        classify.Classify(ref int_0);
                    }
                    else
                    {
                        (classify as IClassifyGEN).Classify(obj2, obj3, ref int_0);
                    }
                    iclassBreaksRenderer_1.BreakCount = int_0;
                    this.bool_0 = false;
                    this.cboClassifyNum.SelectedIndex = int_0 - 1;
                    this.bool_0 = true;
                    double[] classBreaks = (double[])classify.ClassBreaks;
                    if (classBreaks.Length == 0)
                    {
                        icolorRamp_1.Size = 5;
                    }
                    else
                    {
                        icolorRamp_1.Size = classBreaks.Length;
                    }
                    icolorRamp_1.CreateRamp(out flag);
                    IEnumColors colors = icolorRamp_1.Colors;
                    ISymbol     sym    = null;
                    for (int i = 0; i < (classBreaks.Length - 1); i++)
                    {
                        IColor color = colors.Next();
                        switch (esriGeometryAny)
                        {
                        case esriGeometryType.esriGeometryLine:
                        case esriGeometryType.esriGeometryPolyline:
                        {
                            ILineSymbol symbol2 = new SimpleLineSymbolClass
                            {
                                Color = color
                            };
                            sym = symbol2 as ISymbol;
                            break;
                        }

                        case esriGeometryType.esriGeometryPolygon:
                        {
                            ISimpleFillSymbol symbol3 = new SimpleFillSymbolClass
                            {
                                Color = color,
                                Style = esriSimpleFillStyle.esriSFSSolid
                            };
                            sym = symbol3 as ISymbol;
                            break;
                        }

                        case esriGeometryType.esriGeometryPoint:
                        case esriGeometryType.esriGeometryMultipoint:
                        {
                            IMarkerSymbol symbol4 = new SimpleMarkerSymbolClass
                            {
                                Color = color
                            };
                            sym = symbol4 as ISymbol;
                            break;
                        }
                        }
                        iclassBreaksRenderer_1.set_Symbol(i, sym);
                        (iclassBreaksRenderer_1 as IClassBreaksUIProperties).set_LowBreak(i, classBreaks[i]);
                        iclassBreaksRenderer_1.set_Break(i, classBreaks[i + 1]);
                        string label = classBreaks[i].ToString() + " - " + classBreaks[i + 1].ToString();
                        iclassBreaksRenderer_1.set_Label(i, label);
                    }
                }
            }
            catch (Exception exception)
            {
                Logger.Current.Error("", exception, "");
            }
        }
		private void button2_Click(object sender, System.EventArgs e)
		{
			//Create a new ClassBreaksRenderer and set properties
			m_classBreaksRenderer = new ClassBreaksRenderer();
			m_classBreaksRenderer.Field = comboBox1.SelectedItem.ToString();
			m_classBreaksRenderer.BreakCount = Convert.ToInt32(textBox1.Text);
			m_classBreaksRenderer.MinimumBreak = Convert.ToDouble(textBox2.Text);

			//Calculate the class interval by a simple mean value
			double interval = (Convert.ToDouble(textBox3.Text) - m_classBreaksRenderer.MinimumBreak) / m_classBreaksRenderer.BreakCount;

			//Get the color ramp
			IColorRamp colorRamp = (IColorRamp) m_styleGalleryItem.Item;
			//Set the size of the color ramp and recreate it
			colorRamp.Size = Convert.ToInt32(textBox1.Text);
			bool createRamp;
			colorRamp.CreateRamp(out createRamp);

			//Get the enumeration of colors from the color ramp
			IEnumColors enumColors = colorRamp.Colors;
			enumColors.Reset();
			double currentBreak = m_classBreaksRenderer.MinimumBreak;

			ISimpleFillSymbol simpleFillSymbol;
			//Loop through each class break
			for (int i = 0; i <= m_classBreaksRenderer.BreakCount-1; i++)
			{
				//Set class break
				m_classBreaksRenderer.set_Break(i,currentBreak);
				//Create simple fill symbol and set color
				simpleFillSymbol = new SimpleFillSymbolClass();
				simpleFillSymbol.Color = enumColors.Next();
				//Add symbol to renderer
				m_classBreaksRenderer.set_Symbol(i, (ISymbol)simpleFillSymbol);
				currentBreak += interval;
			}

			//Hide the form
			this.Hide();
		}
		public void Draw(IFeatureCursor cursor, esriDrawPhase DrawPhase, IDisplay Display, ITrackCancel trackCancel)
		{
			string ActiveErrorHandler = null;

	try
	{
			// loop through and draw each feature

			IFeature pFeat = null;
			IFeatureRenderer pRend = null;

			bool bContinue = false;

			// do not draw features if no display
			if (Display == null)
				return;

			// we can't draw without somewhere to get our base symbols from
			if (m_pMainRend == null)
				return;

			if (m_pSizeRend != null)
			{
				// size varies
				if (m_ShapeType == esriGeometryType.esriGeometryPoint | m_ShapeType == esriGeometryType.esriGeometryPolyline)
				{
					if (DrawPhase == esriDrawPhase.esriDPGeography)
					{
						// draw symbols in order from large to small
						DrawSymbolsInOrder(cursor, DrawPhase, Display, trackCancel);
					}
				}
				else if (m_ShapeType == esriGeometryType.esriGeometryPolygon)
				{
					if (DrawPhase == esriDrawPhase.esriDPAnnotation)
					{
						// draw primary symbology from large to small
						DrawSymbolsInOrder(cursor, DrawPhase, Display, trackCancel);
					}
					else if (DrawPhase == esriDrawPhase.esriDPGeography)
					{
						// draw background symbology
						pFeat = cursor.NextFeature();
						bContinue = true;

						// while there are still more features and drawing has not been cancelled
                        IFillSymbol pBackFillSym;

                        
						while ((pFeat != null) & (bContinue == true))
						{
							// draw the feature
                            IFeatureDraw pFeatDraw = pFeat as IFeatureDraw;
							if (m_pSizeRend is IClassBreaksRenderer)
							{
                                IClassBreaksRenderer pCBRend = m_pSizeRend as IClassBreaksRenderer;
								pBackFillSym = pCBRend.BackgroundSymbol;
							}
							else
							{
                                IProportionalSymbolRenderer pPropRend = m_pSizeRend as IProportionalSymbolRenderer;
								pBackFillSym = pPropRend.BackgroundSymbol;
							}
							Display.SetSymbol(pBackFillSym as ISymbol);

              //implementation of IExportSupport
              BeginFeature(pFeat, Display);
              
							pFeatDraw.Draw(DrawPhase, Display, pBackFillSym as ISymbol, true, null, esriDrawStyle.esriDSNormal);

              //implementation of IExportSupport
							GenerateExportInfo(pFeat, Display);
							EndFeature(Display);
							
							pFeat = cursor.NextFeature();
              if (trackCancel != null)
                bContinue = trackCancel.Continue();
						}
					}
					else
					{
                        Marshal.ThrowExceptionForHR(147500037); //E_FAIL
					}
				}

			}
			else
			{
				// size does not vary
				if (DrawPhase != esriDrawPhase.esriDPGeography)
				{
                    Marshal.ThrowExceptionForHR(147500037); //E_FAIL
				}
				else
					DrawSymbols(cursor, DrawPhase, Display, trackCancel);
			}

}

catch
{
}
		}
예제 #14
0
        private static void AddSymbolNode(TreeNodeComLayer tnComLayer, object renderer)
        {
            int             index;
            LogicBaseTree   logicBT    = new LogicBaseTree();
            ImageCollection treeImages = logicBT.TreeList.StateImageList as ImageCollection;

            if (renderer is SimpleRenderer)
            {
                ISimpleRenderer simpleRenderer = (ISimpleRenderer)renderer;
                ISymbol         symbol         = simpleRenderer.Symbol;
                Image           img            = ConvertSymbolToImage.Convert(symbol, 16, 16);
                index = treeImages.Images.Add(img);
                //img.Save("d:\\" + index + ".JPG");

                string         label    = simpleRenderer.Label;
                TreeNodeSymbol tnSymbol = new TreeNodeSymbol()
                {
                    Name = label, CustomValue = symbol
                };
                tnSymbol.ImageIndex = index;
                tnComLayer.Add(tnSymbol);
            }
            else if (renderer is UniqueValueRenderer)
            {
                string renderLabel = "";
                IUniqueValueRenderer uniqueValueRenderer = renderer as IUniqueValueRenderer;
                for (int i = 0; i < uniqueValueRenderer.FieldCount - 1; i++)
                {
                    renderLabel += uniqueValueRenderer.get_Field(i) + " /";
                }
                renderLabel += uniqueValueRenderer.get_Field(uniqueValueRenderer.FieldCount - 1);//FieldCount为地物分类数
                //getImage(esriGeometryType.esriGeometryPolygon, Color.White).Save("D:\\111.jpg");
                index = treeImages.Images.Add(getImage(esriGeometryType.esriGeometryPolygon, Color.White));

                TreeNodeSymbol tnChartNode = new TreeNodeSymbol()
                {
                    Name = renderLabel, CustomValue = uniqueValueRenderer
                };
                tnChartNode.ImageIndex = index;
                tnComLayer.Add(tnChartNode);

                for (int i = 0; i < uniqueValueRenderer.ValueCount; i++)//ValueCount为地物分类下的设施种类数
                {
                    ISymbol symbol = uniqueValueRenderer.get_Symbol(uniqueValueRenderer.get_Value(i));

                    Image img = ConvertSymbolToImage.Convert(symbol, 16, 16);
                    //img.Save("D:\\121121.jpg");


                    index = treeImages.Images.Add(img);

                    TreeNodeSymbol tnSymbol = new TreeNodeSymbol()
                    {
                        Name = uniqueValueRenderer.get_Label(uniqueValueRenderer.get_Value(i)), CustomValue = symbol
                    };
                    tnSymbol.ImageIndex = index;
                    tnComLayer.Add(tnSymbol);
                }
                if (uniqueValueRenderer.UseDefaultSymbol)
                {
                    ISymbol symbol = uniqueValueRenderer.DefaultSymbol;
                    Image   img    = ConvertSymbolToImage.Convert(symbol, 16, 16);
                    index = treeImages.Images.Add(img);

                    TreeNodeSymbol tnSymbol = new TreeNodeSymbol()
                    {
                        Name = uniqueValueRenderer.DefaultLabel, CustomValue = symbol
                    };
                    tnSymbol.ImageIndex = index;
                    tnComLayer.Add(tnSymbol);
                }
            }
            else if (renderer is IChartRenderer)
            {
                IChartRenderer  chartRenderer = renderer as IChartRenderer;
                IRendererFields pFields       = chartRenderer as IRendererFields;
                string          renderLabel   = "";
                for (int i = 0; i < pFields.FieldCount - 1; i++)
                {
                    renderLabel += pFields.get_FieldAlias(i) + " /";
                }
                renderLabel += pFields.get_FieldAlias(pFields.FieldCount - 1);

                index = treeImages.Images.Add(getImage(esriGeometryType.esriGeometryPolygon, Color.White));

                TreeNodeSymbol tnChartNode = new TreeNodeSymbol()
                {
                    Name = renderLabel, CustomValue = chartRenderer
                };
                tnChartNode.ImageIndex = index;
                tnComLayer.Add(tnChartNode);


                ISymbolArray symArray = chartRenderer.ChartSymbol as ISymbolArray;
                for (int i = 0; i < symArray.SymbolCount; i++)
                {
                    ISymbol symbol = symArray.get_Symbol(i);

                    Image img = ConvertSymbolToImage.Convert(symbol, 16, 16);
                    index = treeImages.Images.Add(img);

                    TreeNodeSymbol tnSymbol = new TreeNodeSymbol()
                    {
                        Name = pFields.get_FieldAlias(i), CustomValue = symbol
                    };
                    tnSymbol.ImageIndex = index;
                    tnComLayer.Add(tnSymbol);
                }
            }
            else if (renderer is IClassBreaksRenderer)
            {
                IClassBreaksRenderer classRenderer = renderer as IClassBreaksRenderer;
                index = treeImages.Images.Add(getImage(esriGeometryType.esriGeometryPolygon, Color.White));

                TreeNodeSymbol tnChartNode = new TreeNodeSymbol()
                {
                    Name = classRenderer.Field, CustomValue = classRenderer
                };
                tnChartNode.ImageIndex = index;
                tnComLayer.Add(tnChartNode);


                for (int i = 0; i < classRenderer.BreakCount; i++)
                {
                    ISymbol symbol = classRenderer.get_Symbol(i);

                    Image img = ConvertSymbolToImage.Convert(symbol, 16, 16);
                    index = treeImages.Images.Add(img);

                    TreeNodeSymbol tnSymbol = new TreeNodeSymbol()
                    {
                        Name = classRenderer.get_Label(i), CustomValue = symbol
                    };
                    tnSymbol.ImageIndex = index;
                    tnComLayer.Add(tnSymbol);
                }
            }
            else if (renderer is IRasterRenderer)
            {
                if (renderer is IRasterClassifyColorRampRenderer)
                {
                    //MessageBox.Show("IRasterClassifyColorRampRenderer");
                }
                else if (renderer is IRasterUniqueValueRenderer)
                {
                    //MessageBox.Show("IRasterUniqueValueRenderer");
                }
                else if (renderer is IRasterStretchColorRampRenderer)
                {
                    ////MessageBox.Show("IRasterStretchColorRampRenderer");
                    IRasterStretchColorRampRenderer pRSCRR = renderer as IRasterStretchColorRampRenderer;

                    index = treeImages.Images.Add(getImage(esriGeometryType.esriGeometryPolygon, Color.White));
                    TreeNodeSymbol tnChartNode = new TreeNodeSymbol()
                    {
                        Name = "<Value>", CustomValue = pRSCRR
                    };
                    tnChartNode.ImageIndex = index;
                    tnComLayer.Add(tnChartNode);

                    if (pRSCRR.ColorRamp.Size >= 3)
                    {
                        IEnumColors colors = pRSCRR.ColorRamp.Colors;
                        colors.Reset();
                        IColor  c      = colors.Next();
                        Color[] cArray = new Color[3];
                        int     count  = 0;
                        while (c != null)
                        {
                            count++;
                            if (count == 1)
                            {
                                cArray[0] = Color.FromArgb(c.RGB);
                            }
                            else if (count == pRSCRR.ColorRamp.Size / 2)
                            {
                                cArray[1] = Color.FromArgb(c.RGB);
                            }
                            else if (count == pRSCRR.ColorRamp.Size)
                            {
                                cArray[2] = Color.FromArgb(c.RGB);
                            }
                            c = colors.Next();
                        }
                        for (int i = 0; i < 3; i++)
                        {
                            Image img = getImage(esriGeometryType.esriGeometryPolygon, cArray[i]);
                            index = treeImages.Images.Add(img);

                            string label = "";
                            if (i == 0)
                            {
                                label = pRSCRR.LabelLow;
                            }
                            else if (i == 1)
                            {
                                label = pRSCRR.LabelMedium;
                            }
                            else if (i == 2)
                            {
                                label = pRSCRR.LabelHigh;
                            }

                            TreeNodeSymbol tnSymbol = new TreeNodeSymbol()
                            {
                                Name = label, CustomValue = cArray[i]
                            };
                            tnSymbol.ImageIndex = index;
                            tnComLayer.Add(tnSymbol);
                        }
                    }
                }

                else if (renderer is IRasterRGBRenderer)
                {
                    //MessageBox.Show("IRasterRGBRenderer");
                }
                else if (renderer is IRasterColormap)
                {
                    //MessageBox.Show("IRasterColormap");
                }
                else
                {
                    //MessageBox.Show("未处理的IRasterRenderer类型:  " + renderer.GetType().FullName);
                }
            }
            else if (renderer is ITinRenderer)
            {
                if (renderer is ITinColorRampRenderer)
                {
                    ////MessageBox.Show("ITinColorRampRenderer");
                    ITinColorRampRenderer pTCRR = renderer as ITinColorRampRenderer;

                    index = treeImages.Images.Add(getImage(esriGeometryType.esriGeometryPolygon, Color.White));
                    TreeNodeSymbol tnChartNode = new TreeNodeSymbol()
                    {
                        Name = "Elevation", CustomValue = pTCRR
                    };
                    tnChartNode.ImageIndex = index;
                    tnComLayer.Add(tnChartNode);



                    for (int i = 0; i < pTCRR.BreakCount; i++)
                    {
                        ISymbol symbol = pTCRR.get_Symbol(i);
                        Image   img    = ConvertSymbolToImage.Convert(symbol, 16, 16);
                        index = treeImages.Images.Add(img);
                        TreeNodeSymbol tnSymbol = new TreeNodeSymbol()
                        {
                            Name = pTCRR.get_Label(i), CustomValue = symbol
                        };
                        tnSymbol.ImageIndex = index;
                        tnComLayer.Add(tnSymbol);
                    }
                }
                else if (renderer is ITinUniqueValueRenderer)
                {
                    ////MessageBox.Show("ITinUniqueValueRenderer");
                    ITinUniqueValueRenderer pTUVR = renderer as ITinUniqueValueRenderer;

                    index = treeImages.Images.Add(getImage(esriGeometryType.esriGeometryPolygon, Color.White));

                    TreeNodeSymbol tnChartNode = new TreeNodeSymbol()
                    {
                        Name = "Elevation", CustomValue = pTUVR
                    };
                    tnChartNode.ImageIndex = index;
                    tnComLayer.Add(tnChartNode);


                    for (int i = 0; i < pTUVR.ValueCount; i++)
                    {
                        string  val    = pTUVR.get_Value(i);
                        ISymbol symbol = pTUVR.get_Symbol(val);
                        Image   img    = ConvertSymbolToImage.Convert(symbol, 16, 16);
                        index = treeImages.Images.Add(img);

                        TreeNodeSymbol tnSymbol = new TreeNodeSymbol()
                        {
                            Name = pTUVR.get_Label(val), CustomValue = symbol
                        };
                        tnSymbol.ImageIndex = index;
                        tnComLayer.Add(tnSymbol);
                    }
                    if (pTUVR.UseDefaultSymbol)
                    {
                        ISymbol symbol = pTUVR.DefaultSymbol;
                        Image   img    = ConvertSymbolToImage.Convert(symbol, 16, 16);
                        index = treeImages.Images.Add(img);

                        TreeNodeSymbol tnSymbol = new TreeNodeSymbol()
                        {
                            Name = pTUVR.DefaultLabel, CustomValue = symbol
                        };
                        tnSymbol.ImageIndex = index;
                        tnComLayer.Add(tnSymbol);
                    }
                }
                else if (renderer is ITinSingleSymbolRenderer)
                {
                    ////MessageBox.Show("ITinSingleSymbolRenderer");
                    ITinSingleSymbolRenderer pTSSR = renderer as ITinSingleSymbolRenderer;
                    ISymbol symbol = pTSSR.Symbol;
                    Image   img    = ConvertSymbolToImage.Convert(symbol, 16, 16);
                    index = treeImages.Images.Add(img);

                    TreeNodeSymbol tnSymbol = new TreeNodeSymbol()
                    {
                        Name = pTSSR.Label, CustomValue = symbol
                    };
                    tnSymbol.ImageIndex = index;
                    tnComLayer.Add(tnSymbol);
                }
                else
                {
                    //MessageBox.Show("未处理的ITinRenderer类型:  " + renderer.GetType().FullName);
                }
            }
            else
            {
                //MessageBox.Show("未处理的Renderer类型:  " + renderer.GetType().FullName);
            }
        }
예제 #15
0
        protected override void OnClick()
        {
            //
            // When the utility is selected, check that we have a currently selected
            // feature layer with a ClassBreaksRenderer already set. First we get the contents view.
            //
            IContentsView ContentsView = null;

            ContentsView = ArcMap.Document.CurrentContentsView;
            //
            // If we have a DisplayView active
            //
            object               VarSelectedItem     = null;
            IGeoFeatureLayer     GeoFeatureLayer     = null;
            IClassBreaksRenderer ClassBreaksRenderer = null;
            IEnumColors          pColors             = null;
            int         lngCount     = 0;
            IHsvColor   HsvColor     = null;
            IClone      ClonedSymbol = null;
            ISymbol     NewSymbol    = null;
            IActiveView ActiveView   = null; //AlgorithimcColorRamp contains HSV colors.

            if (ContentsView is TOCDisplayView)
            {
                if (ContentsView.SelectedItem is DBNull)
                {
                    //
                    // If we don't have anything selected.
                    //
                    MessageBox.Show("SelectedItem is Null C#." + "Select a layer in the Table of Contents.", "No Layer Selected", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                //
                // Get the selected Item.
                //
                VarSelectedItem = ContentsView.SelectedItem;
                //
                // Selected Item should implement the IGeoFeatureLayer interface - therefore we
                // have selected a feature layer with a Renderer property (Note: Other interfaces
                // also have a Renderer property, which may behave differently.
                //
                if (VarSelectedItem is IGeoFeatureLayer)
                {
                    GeoFeatureLayer = (IGeoFeatureLayer)VarSelectedItem;
                    //
                    // Set the cached property to true, so we can refresh this layer
                    // without refreshing all the layers, when we have changed the symbols.
                    //
                    GeoFeatureLayer.Cached = true;
                    //
                    // Check we have an existing ClassBreaksRenderer.
                    //
                    if (GeoFeatureLayer.Renderer is IClassBreaksRenderer)
                    {
                        ClassBreaksRenderer = (IClassBreaksRenderer)GeoFeatureLayer.Renderer;
                        //
                        // If successful so far we can go ahead and open the Form. This allows the
                        // user to change the properties of the new RandomColorRamp.
                        //
                        frmAlgoColorRamp.m_lngClasses = ClassBreaksRenderer.BreakCount;
                        frmAlgoColorRamp.ShowDialog();
                        //
                        // Return the selected colors enumeration.
                        pColors = frmAlgoColorRamp.m_enumNewColors;
                        if (pColors == null)
                        {
                            //
                            // User has cancelled the form, or not set a ramp.
                            //
                            //MsgBox("Colors object is empty. Exit Sub")

                            return;
                        }
                        //
                        // Set the new random colors onto the Symbol array of the ClassBreaksRenderer.
                        //
                        pColors.Reset(); // Because you never know if the enumeration has been
                        // iterated before being passed back.

                        int tempFor1 = ClassBreaksRenderer.BreakCount;
                        for (lngCount = 0; lngCount < tempFor1; lngCount++)
                        {
                            //
                            // For each Value in the ClassBreaksRenderer, we clone the existing
                            // Fill symbol (so that all the properties are faithful preserved,
                            // and set its color from our new AlgorithmicColorRamp.
                            //
                            IClone symClone;
                            symClone = (IClone)ClassBreaksRenderer.get_Symbol(lngCount);

                            ClonedSymbol = CloneMe(ref (symClone));
                            //
                            // Now the ClonedSymbol variable holds a copy of the existing
                            // Symbol, we can change the assigned Color. We set the new
                            // symbol onto the Symbol array of the Renderer.          '
                            //
                            HsvColor  = (IHsvColor)pColors.Next();
                            NewSymbol = SetColorOfUnknownSymbol(ClonedSymbol, HsvColor);
                            if (NewSymbol != null)
                            {
                                ClassBreaksRenderer.set_Symbol(lngCount, NewSymbol);
                            }
                        }
                        //
                        // Refresh the table of contents and the changed layer.
                        //
                        ActiveView = (IActiveView)ArcMap.Document.FocusMap;
                        ActiveView.ContentsChanged();
                        ArcMap.Document.UpdateContents();
                        ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, GeoFeatureLayer, null);
                    }
                }
            }
        }
        private void Renderer()
        {
            IGeoFeatureLayer pGeoFeatureL = (IGeoFeatureLayer)layer2Symbolize;
            IFeatureClass featureClass = pGeoFeatureL.FeatureClass;

            //找出rendererField在字段中的编号
            int lfieldNumber = featureClass.FindField(strRendererField);
            if (lfieldNumber == -1)
            {
                MessageBox.Show("Can't find field called " + strRendererField);
                return;
            }
            m_classBreaksRenderer = CreateClassBreaksRenderer(featureClass, strClassifyMethod);
            if (m_classBreaksRenderer == null) return;
            pGeoFeatureL.Renderer = (IFeatureRenderer)m_classBreaksRenderer;
            m_activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, m_activeView.Extent);
            m_TOCControl.Update();
        }
예제 #17
0
        public void InitRendererObject(List <FieldInfo> pFields, IFeatureRenderer pRenderer, esriSymbologyStyleClass _SymbologyStyleClass)
        {
            flag = true;
            m_SymbologyStyleClass = _SymbologyStyleClass;

            cmbField.Items.AddRange(pFields.ToArray());

            IClassBreaksRenderer pBreakRenderer = pRenderer as IClassBreaksRenderer;

            cmbField.Text       = pBreakRenderer.Field;
            levelInput.Value    = pBreakRenderer.BreakCount;
            minSizeInput.Value  = 1;
            maxSizeInput.Value  = 10;
            minValueInput.Value = 0;
            maxValueInput.Value = 100;
            double minBreak = pBreakRenderer.MinimumBreak;

            minBreak = Math.Round(minBreak, 4);
            for (int i = 0; i < pBreakRenderer.BreakCount; i++)
            {
                ISymbol pSymbol    = pBreakRenderer.get_Symbol(i);
                string  label      = pBreakRenderer.get_Label(i);
                double  breakValue = pBreakRenderer.get_Break(i);
                breakValue = Math.Round(breakValue, 4);
                double lastBreak = 0;
                if (i == 0)
                {
                    lastBreak = minBreak;

                    double size = ModuleCommon.GetSymbolSize(pSymbol);
                    minSizeInput.Value = size;

                    minValueInput.Value = lastBreak;
                }
                else
                {
                    lastBreak = pBreakRenderer.get_Break(i - 1);
                    lastBreak = Math.Round(lastBreak, 4);
                }

                if (i == pBreakRenderer.BreakCount - 1)
                {
                    double size = ModuleCommon.GetSymbolSize(pSymbol);
                    maxSizeInput.Value = size;

                    maxValueInput.Value = breakValue;
                }

                listValueItem.SmallImageList.Images.Add("Symbol" + i.ToString(), ModuleCommon.Symbol2Picture(pSymbol, ModuleCommon.ImageWidth, ModuleCommon.ImageHeight));//yjl20110826 add
                System.Windows.Forms.ListViewItem item = new System.Windows.Forms.ListViewItem();
                item.Name     = "Item" + i.ToString();
                item.Text     = "";
                item.ImageKey = "Symbol" + i.ToString();
                item.Tag      = pSymbol;

                System.Windows.Forms.ListViewItem.ListViewSubItem subItem = new System.Windows.Forms.ListViewItem.ListViewSubItem();
                subItem.Name = "Range" + i.ToString();
                subItem.Text = (lastBreak == 0 ? "0" : lastBreak.ToString()) + "-" + (breakValue == 0 ? "0" : breakValue.ToString());
                subItem.Tag  = subItem.Text;
                item.SubItems.Add(subItem);

                System.Windows.Forms.ListViewItem.ListViewSubItem subItem1 = new System.Windows.Forms.ListViewItem.ListViewSubItem();
                subItem1.Name = "Label" + i.ToString();
                subItem1.Text = label;
                item.SubItems.Add(subItem1);

                listValueItem.Items.Add(item);
            }
            flag = false;
            if (pBreakRenderer.BreakCount == 0)
            {
                levelInput.Value = 5;

                switch (m_SymbologyStyleClass)
                {
                case esriSymbologyStyleClass.esriStyleClassMarkerSymbols:
                case esriSymbologyStyleClass.esriStyleClassLineSymbols:
                    labelPreviewFore.Tag = ModuleCommon.CreateSymbol(m_SymbologyStyleClass);
                    break;

                case esriSymbologyStyleClass.esriStyleClassFillSymbols:
                    labelPreviewFore.Tag = ModuleCommon.CreateSymbol(esriSymbologyStyleClass.esriStyleClassMarkerSymbols);
                    break;
                }
            }
            else
            {
                labelPreviewFore.Tag = pBreakRenderer.get_Symbol(0);
            }
            labelPreviewFore.Image = ModuleCommon.Symbol2Picture(labelPreviewFore.Tag as ISymbol, ModuleCommon.ImageWidth, ModuleCommon.ImageHeight);

            if (m_SymbologyStyleClass == esriSymbologyStyleClass.esriStyleClassFillSymbols)
            {
                if (pBreakRenderer.BackgroundSymbol == null)
                {
                    labelPreviewBack.Tag = ModuleCommon.CreateSymbol(esriSymbologyStyleClass.esriStyleClassFillSymbols);
                }
                else
                {
                    labelPreviewBack.Tag = pBreakRenderer.BackgroundSymbol as ISymbol;
                }
                labelPreviewBack.Visible = true;
                labelBackCaption.Visible = true;
                labelPreviewBack.Image   = ModuleCommon.Symbol2Picture(labelPreviewBack.Tag as ISymbol, ModuleCommon.ImageWidth, ModuleCommon.ImageHeight);
            }
            else
            {
                labelPreviewBack.Tag     = null;
                labelPreviewBack.Visible = false;
                labelBackCaption.Visible = false;
            }
        }
예제 #18
0
        public void processFeatureLayer(ILayer lyr)
        {
            type = "Vektor";
            fillLayerProps(lyr);
            fillDatalayerProps(lyr);
            IFeatureLayer flyr = lyr as IFeatureLayer;

            fillDefQueryProps(flyr);
            processJoins(flyr);
            processRelates(flyr);

            IGeoFeatureLayer gflyr = flyr as IGeoFeatureLayer;

            if (gflyr.DisplayAnnotation == true)
            {
                IAnnotateLayerPropertiesCollection labelPropsColl = gflyr.AnnotationProperties;
                for (int collIndex = 0; collIndex < labelPropsColl.Count; collIndex++)
                {
                    IAnnotateLayerProperties annoLayerProps;
                    IElementCollection       elCol1;
                    IElementCollection       elCol2;
                    labelPropsColl.QueryItem(collIndex, out annoLayerProps, out elCol1, out elCol2);
                    string sql = annoLayerProps.WhereClause;
                    ILabelEngineLayerProperties2 labelEngineProps = (ILabelEngineLayerProperties2)annoLayerProps;
                    string expr = labelEngineProps.Expression;
                    this.label = this.label + sql + "?" + expr + "/";
                }
            }
            this.label = this.label.TrimEnd('/');

            IFeatureRenderer rend = gflyr.Renderer;

            if (rend is IUniqueValueRenderer)
            {
                string felder          = "";
                IUniqueValueRenderer u = rend as IUniqueValueRenderer;
                for (int i = 0; i < u.FieldCount; i++)
                {
                    felder = felder + u.get_Field(i) + "/";
                }
                symbfields = felder.TrimEnd('/') + " (UniqueValueRenderer)";
            }
            else if (rend is IProportionalSymbolRenderer)
            {
                IProportionalSymbolRenderer prop = rend as IProportionalSymbolRenderer;
                symbfields = prop.Field + " (ProportionalSymbolRenderer)";
            }
            else if (rend is IClassBreaksRenderer)
            {
                IClassBreaksRenderer cl = rend as IClassBreaksRenderer;
                symbfields = cl.Field + " (ClassBreaksRenderer)";;
            }
            else if (rend is ISimpleRenderer)
            {
                symbfields = "kein Feld (SimpleRenderer)";
            }
            else
            {
                symbfields = "unbekannter Renderer";
            }
        }
예제 #19
0
        public override void InitRendererObject(IFeatureRenderer _Renderer, esriSymbologyStyleClass _SymbologyStyleClass)
        {
            m_SymbologyStyleClass = _SymbologyStyleClass;
            InitUI();

            #region InitObject

            IClassBreaksRenderer _BreakRenderer = null;
            if ((_Renderer is IClassBreaksRenderer) == false)
            {
                _BreakRenderer = new ClassBreaksRendererClass();
                if (m_SymbologyStyleClass == esriSymbologyStyleClass.esriStyleClassFillSymbols)
                {
                    _BreakRenderer.BackgroundSymbol = ModuleCommon.CreateSymbol(esriSymbologyStyleClass.esriStyleClassFillSymbols) as IFillSymbol;
                }
                else
                {
                    _BreakRenderer.BackgroundSymbol = null;
                }
                _BreakRenderer.MinimumBreak = 0;
                _BreakRenderer.Field        = "";

                m_Field.DataValue     = "<NONE>";
                m_SizeLevel.DataValue = 3;
                m_MinSize.DataValue   = 1;
                m_MaxSize.DataValue   = 6;
                m_MinValue.DataValue  = 0;
                m_MaxValue.DataValue  = 100;
                switch (m_SymbologyStyleClass)
                {
                case esriSymbologyStyleClass.esriStyleClassMarkerSymbols:
                case esriSymbologyStyleClass.esriStyleClassLineSymbols:
                    m_ForeSymbol.DataValue = ModuleCommon.CreateSymbol(m_SymbologyStyleClass);
                    m_BackSymbol           = null;
                    break;

                case esriSymbologyStyleClass.esriStyleClassFillSymbols:
                    m_ForeSymbol.DataValue     = ModuleCommon.CreateSymbol(esriSymbologyStyleClass.esriStyleClassMarkerSymbols);
                    m_BackSymbol               = new SymbolValue();
                    m_BackSymbol.ControlName   = "BackSymbol";
                    m_BackSymbol.Caption       = "±³¾°·ûºÅ";
                    m_BackSymbol.ControlWidth  = 100;
                    m_BackSymbol.ControlHeight = 40;
                    m_BackSymbol.DataValue     = ModuleCommon.CreateSymbol(esriSymbologyStyleClass.esriStyleClassFillSymbols);
                    break;
                }
            }
            else
            {
                _BreakRenderer = _Renderer as IClassBreaksRenderer;

                m_SizeLevel.DataValue = _BreakRenderer.BreakCount;
                if (_BreakRenderer.BreakCount > 0)
                {
                    m_MinValue.DataValue = _BreakRenderer.MinimumBreak;
                    m_MaxValue.DataValue = _BreakRenderer.get_Break(m_SizeLevel.DataValue - 1);

                    m_MinSize.DataValue = ModuleCommon.GetSymbolSize(_BreakRenderer.get_Symbol(0));
                    m_MaxSize.DataValue = ModuleCommon.GetSymbolSize(_BreakRenderer.get_Symbol(m_SizeLevel.DataValue - 1));

                    m_ForeSymbol.DataValue = _BreakRenderer.get_Symbol(0);
                }
                else
                {
                    m_MinValue.DataValue   = 0;
                    m_MaxValue.DataValue   = 100;
                    m_MinSize.DataValue    = 1;
                    m_MaxSize.DataValue    = 6;
                    m_ForeSymbol.DataValue = ModuleCommon.CreateSymbol(m_SymbologyStyleClass);
                }

                if (_BreakRenderer.BackgroundSymbol == null)
                {
                    m_BackSymbol = null;
                }
                else
                {
                    m_BackSymbol               = new SymbolValue();
                    m_BackSymbol.ControlName   = "BackSymbol";
                    m_BackSymbol.Caption       = "±³¾°·ûºÅ";
                    m_BackSymbol.ControlWidth  = 100;
                    m_BackSymbol.ControlHeight = 40;
                    m_BackSymbol.DataValue     = _BreakRenderer.BackgroundSymbol as ISymbol;
                }

                if (_BreakRenderer.Field == "")
                {
                    m_Field.DataValue = "<NONE>";
                }
                else
                {
                    m_Field.DataValue = _BreakRenderer.Field;
                }
            }

            #endregion

            #region InitListView

            m_ListValueItem.SmallImageList.Images.Clear();
            for (int i = 0; i < _BreakRenderer.BreakCount; i++)
            {
                ISymbol pSymbol = _BreakRenderer.get_Symbol(i);
                m_ListValueItem.SmallImageList.Images.Add("Symbol" + i.ToString(), ModuleCommon.Symbol2Picture(pSymbol, 80, 40));
                string label = _BreakRenderer.get_Label(i);
                double range = _BreakRenderer.get_Break(i);


                System.Windows.Forms.ListViewItem item = new System.Windows.Forms.ListViewItem();
                item.Name     = "Item" + i.ToString();
                item.Text     = "";
                item.ImageKey = "Symbol" + i.ToString();
                item.Tag      = pSymbol;

                string strMinValue = "0";
                if (i == 0)
                {
                    strMinValue = _BreakRenderer.MinimumBreak == 0 ? "0" : _BreakRenderer.MinimumBreak.ToString(".####");
                }
                else
                {
                    double sMinValue = (double)m_ListValueItem.Items[i - 1].SubItems[1].Tag;
                    strMinValue = sMinValue == 0 ? "0" : sMinValue.ToString(".####");
                }
                System.Windows.Forms.ListViewItem.ListViewSubItem subItem = new System.Windows.Forms.ListViewItem.ListViewSubItem();
                subItem.Name = "Range" + i.ToString();
                subItem.Text = strMinValue + "-" + (range == 0 ? "0" : range.ToString(".####"));
                subItem.Tag  = range;
                item.SubItems.Add(subItem);

                System.Windows.Forms.ListViewItem.ListViewSubItem subItem1 = new System.Windows.Forms.ListViewItem.ListViewSubItem();
                subItem1.Name = "Label" + i.ToString();
                subItem1.Text = label;
                item.SubItems.Add(subItem1);

                m_ListValueItem.Items.Add(item);
            }

            #endregion

            #region InitTree

            #region Field
            DevComponents.AdvTree.Node node = new DevComponents.AdvTree.Node();
            node.Text = m_Field.Caption;
            node.Name = "node" + m_Field.ControlName;
            DevComponents.AdvTree.Cell cell = new DevComponents.AdvTree.Cell();
            cell.HostedControl = GetComboBox(m_Field);
            node.Cells.Add(cell);
            m_TreeProperty.Nodes.Add(node);
            #endregion

            #region SizeLevel
            node               = new DevComponents.AdvTree.Node();
            node.Text          = m_SizeLevel.Caption;
            node.Name          = "node" + m_SizeLevel.ControlName;
            cell               = new DevComponents.AdvTree.Cell();
            cell.HostedControl = GetIntegerInput(m_SizeLevel);
            node.Cells.Add(cell);
            m_TreeProperty.Nodes.Add(node);
            #endregion

            #region MinSize
            node               = new DevComponents.AdvTree.Node();
            node.Text          = m_MinSize.Caption;
            node.Name          = "node" + m_MinSize.ControlName;
            cell               = new DevComponents.AdvTree.Cell();
            cell.HostedControl = GetDoubleInput(m_MinSize);
            node.Cells.Add(cell);
            m_TreeProperty.Nodes.Add(node);
            #endregion

            #region MaxSize
            node               = new DevComponents.AdvTree.Node();
            node.Text          = m_MaxSize.Caption;
            node.Name          = "node" + m_MaxSize.ControlName;
            cell               = new DevComponents.AdvTree.Cell();
            cell.HostedControl = GetDoubleInput(m_MaxSize);
            node.Cells.Add(cell);
            m_TreeProperty.Nodes.Add(node);
            #endregion

            #region MinValue
            node               = new DevComponents.AdvTree.Node();
            node.Text          = m_MinValue.Caption;
            node.Name          = "node" + m_MinValue.ControlName;
            cell               = new DevComponents.AdvTree.Cell();
            cell.HostedControl = GetDoubleInput(m_MinValue);
            node.Cells.Add(cell);
            m_TreeProperty.Nodes.Add(node);
            #endregion

            #region MaxValue
            node               = new DevComponents.AdvTree.Node();
            node.Text          = m_MaxValue.Caption;
            node.Name          = "node" + m_MaxValue.ControlName;
            cell               = new DevComponents.AdvTree.Cell();
            cell.HostedControl = GetDoubleInput(m_MaxValue);
            node.Cells.Add(cell);
            m_TreeProperty.Nodes.Add(node);
            #endregion

            #region ForeSymbol
            node               = new DevComponents.AdvTree.Node();
            node.Text          = m_ForeSymbol.Caption;
            node.Name          = "node" + m_ForeSymbol.ControlName;
            cell               = new DevComponents.AdvTree.Cell();
            cell.HostedControl = GetSymbolButton(m_ForeSymbol);
            node.Cells.Add(cell);
            m_TreeProperty.Nodes.Add(node);
            #endregion

            #region BackSymbol
            if (m_BackSymbol != null)
            {
                node               = new DevComponents.AdvTree.Node();
                node.Text          = m_BackSymbol.Caption;
                node.Name          = "node" + m_BackSymbol.ControlName;
                cell               = new DevComponents.AdvTree.Cell();
                cell.HostedControl = GetSymbolButton(m_BackSymbol);
                node.Cells.Add(cell);
                m_TreeProperty.Nodes.Add(node);
            }
            #endregion

            #endregion
        }
예제 #20
0
        public void InitRendererObject(List <FieldInfo> pFields, IFeatureRenderer pRenderer, esriSymbologyStyleClass _SymbologyStyleClass)
        {
            flag = true;
            m_SymbologyStyleClass = _SymbologyStyleClass;

            cmbField.Items.AddRange(pFields.ToArray());

            IClassBreaksRenderer     pBreakRenderer = pRenderer as IClassBreaksRenderer;
            IClassBreaksUIProperties pUIProp        = pBreakRenderer as IClassBreaksUIProperties;

            if (pUIProp.ColorRamp != "")
            {
                cmbColorRamp.Text = pUIProp.ColorRamp;
            }

            cmbField.Text       = pBreakRenderer.Field;
            levelInput.Value    = pBreakRenderer.BreakCount;
            minValueInput.Value = 0;
            maxValueInput.Value = 100;
            double minBreak = pBreakRenderer.MinimumBreak;

            minBreak = Math.Round(minBreak, 4);
            for (int i = 0; i < pBreakRenderer.BreakCount; i++)
            {
                ISymbol pSymbol    = pBreakRenderer.get_Symbol(i);
                string  label      = pBreakRenderer.get_Label(i);
                double  breakValue = pBreakRenderer.get_Break(i);
                breakValue = Math.Round(breakValue, 4);
                double lastBreak = 0;
                if (i == 0)
                {
                    lastBreak           = minBreak;
                    minValueInput.Value = lastBreak;
                }
                else
                {
                    lastBreak = pBreakRenderer.get_Break(i - 1);
                    lastBreak = Math.Round(lastBreak, 4);
                }

                if (i == pBreakRenderer.BreakCount - 1)
                {
                    maxValueInput.Value = breakValue;
                }
                listValueItem.SmallImageList.Images.Add("Symbol" + i.ToString(), ModuleCommon.Symbol2Picture(pSymbol, ModuleCommon.ImageWidth, ModuleCommon.ImageHeight));//yjl20110826 add
                System.Windows.Forms.ListViewItem item = new System.Windows.Forms.ListViewItem();
                item.Name     = "Item" + i.ToString();
                item.Text     = "";
                item.ImageKey = "Symbol" + i.ToString();
                item.Tag      = pSymbol;

                System.Windows.Forms.ListViewItem.ListViewSubItem subItem = new System.Windows.Forms.ListViewItem.ListViewSubItem();
                subItem.Name = "Range" + i.ToString();
                subItem.Text = (lastBreak == 0 ? "0" : lastBreak.ToString()) + "-" + (breakValue == 0 ? "0" : breakValue.ToString());
                subItem.Tag  = subItem.Text;
                item.SubItems.Add(subItem);

                System.Windows.Forms.ListViewItem.ListViewSubItem subItem1 = new System.Windows.Forms.ListViewItem.ListViewSubItem();
                subItem1.Name = "Label" + i.ToString();
                subItem1.Text = label;
                item.SubItems.Add(subItem1);

                listValueItem.Items.Add(item);
            }

            if (pBreakRenderer.BreakCount == 0)
            {
                levelInput.Value     = 5;
                labelPreviewFore.Tag = ModuleCommon.CreateSymbol(m_SymbologyStyleClass);
            }
            else
            {
                labelPreviewFore.Tag = pBreakRenderer.get_Symbol(0);
            }
            labelPreviewFore.Image = ModuleCommon.Symbol2Picture(labelPreviewFore.Tag as ISymbol, ModuleCommon.ImageWidth, ModuleCommon.ImageHeight);
            flag = false;
        }
		private void BuildColorMatrix()
		{
	try
	{
//			On Error GoTo ErrHand

			IClassBreaksRenderer pCBRend1 = null;
			IClassBreaksRenderer pCBRend2 = null;
            pCBRend1 = m_pColorRend1 as IClassBreaksRenderer;
            pCBRend2 = m_pColorRend2 as IClassBreaksRenderer;

			int i = 0;
			int j = 0;
			IColor pColor1 = null;
			IColor pColor2 = null;
			IColor pColor = null;

			if (m_eColorCombinationMethod == EColorCombinationType.enuCIELabMatrix)
			{
				// new (11/5/04) 

				// origin (CIELab average now, but would be better to extend both lines to intersection point,
				//   or average of points where they are closest)
				pColor1 = GetSymbolColor(pCBRend1.get_Symbol(0));
				pColor2 = GetSymbolColor(pCBRend2.get_Symbol(0));
				pColor = GetCombinedColor(pColor1, pColor2, EColorCombinationType.enuCIELabColorRamp);
				IColor pOriginColor = null;
				pOriginColor = pColor;
				m_OLEColorMatrix[i, j] = pColor.RGB;

				// bottom edge (known)

				int tempFor1 = pCBRend1.BreakCount;
				for (i = 1; i < tempFor1; i++)
				{
					pColor = GetSymbolColor(pCBRend1.get_Symbol(i));
					m_OLEColorMatrix[i, 0] = pColor.RGB;
				}

				// left edge (known)

				int tempFor2 = pCBRend2.BreakCount;
				for (j = 1; j < tempFor2; j++)
				{
					pColor = GetSymbolColor(pCBRend2.get_Symbol(j));
					m_OLEColorMatrix[0, j] = pColor.RGB;
				}

				// remaining values (interpolated)

				int tempFor3 = pCBRend1.BreakCount;
				for (i = 1; i < tempFor3; i++)
				{

					int tempFor4 = pCBRend2.BreakCount;
					for (j = 1; j < tempFor4; j++)
					{
						pColor1 = GetSymbolColor(pCBRend1.get_Symbol(i));
						pColor2 = GetSymbolColor(pCBRend2.get_Symbol(j));
						pColor = GetCombinedColor(pColor1, pColor2, EColorCombinationType.enuCIELabMatrix, pOriginColor);
						m_OLEColorMatrix[i, j] = pColor.RGB;
						//m_pColorMatrix(i, j) = GetCombinedColor(pColor1, pColor2)
					}
				}

			}
			else
			{

		
				int tempFor5 = pCBRend1.BreakCount;
				for (i = 0; i < tempFor5; i++)
				{

					int tempFor6 = pCBRend2.BreakCount;
					for (j = 0; j < tempFor6; j++)
					{
						pColor1 = GetSymbolColor(pCBRend1.get_Symbol(i));
						pColor2 = GetSymbolColor(pCBRend2.get_Symbol(j));
						pColor = GetCombinedColor(pColor1, pColor2, m_eColorCombinationMethod);
						m_OLEColorMatrix[i, j] = pColor.RGB;
						//m_pColorMatrix(i, j) = GetCombinedColor(pColor1, pColor2)
					}
				}

			}


			return;
}

catch
{
    Console.WriteLine("error");
}
		}
        private void btn_ok_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)m_FeatureLayer;

            //Find the selected field in the feature layer
            IFeatureClass featureClass = m_FeatureLayer.FeatureClass;
            string        pFileName    = cbx_Field.SelectedItem.ToString();

            if (pFileName == "None")
            {
                MessageBox.Show("不可用的字段,请选择其它图层"); return;
            }
            IField field = featureClass.Fields.get_Field(featureClass.FindField(pFileName));

            //Get a feature cursor
            ICursor cursor = (ICursor)m_FeatureLayer.Search(null, false);

            //Create a DataStatistics object and initialize properties
            IDataStatistics dataStatistics = new DataStatisticsClass();

            dataStatistics.Field  = field.Name;
            dataStatistics.Cursor = cursor;

            //Get the result statistics
            IStatisticsResults statisticsResults = dataStatistics.Statistics;

            //Set the values min min and max values
            m_MinOfField = statisticsResults.Minimum;
            m_MaxOfField = statisticsResults.Maximum;

            m_classBreaksRenderer              = new ClassBreaksRenderer();
            m_classBreaksRenderer.Field        = cbx_Field.SelectedItem.ToString();
            m_classBreaksRenderer.BreakCount   = (int)numUD_TotalClasses.Value;
            m_classBreaksRenderer.MinimumBreak = m_MinOfField;

            double interval = (m_MaxOfField - m_MinOfField) / m_classBreaksRenderer.BreakCount;

            //Get the color ramp
            IColorRamp colorRamp = (IColorRamp)m_styleGalleryItem.Item;

            //Set the size of the color ramp and recreate it
            colorRamp.Size = Convert.ToInt32(numUD_TotalClasses.Value);
            bool createRamp;

            colorRamp.CreateRamp(out createRamp);

            //Get the enumeration of colors from the color ramp
            IEnumColors enumColors = colorRamp.Colors;

            enumColors.Reset();
            double currentBreak = m_classBreaksRenderer.MinimumBreak;

            ISimpleFillSymbol simpleFillSymbol;

            //Loop rhough each class break
            for (int i = 0; i <= m_classBreaksRenderer.BreakCount - 1; i++)
            {
                //Set class break
                m_classBreaksRenderer.set_Break(i, currentBreak);
                //Create simple fill symbol and set color
                simpleFillSymbol       = new SimpleFillSymbolClass();
                simpleFillSymbol.Color = enumColors.Next();
                //Add symbol to renderer
                m_classBreaksRenderer.set_Symbol(i, (ISymbol)simpleFillSymbol);
                currentBreak += interval;
            }

            pGeoFeatureLayer.Renderer = (IFeatureRenderer)m_classBreaksRenderer;

            // geofeaturelayer.Renderer = (IFeatureRenderer)classBreaksRenderer;
            m_MapControl.ActiveView.ContentsChanged();
            m_MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pGeoFeatureLayer, null);
        }
 private static void RandomizeMarkerColor(IClassBreaksRenderer renderer)
 {
     IMarkerSymbol symbol;
     IRgbColor color = RandomColor();
     for (int i = 0; i < renderer.BreakCount; i++)
     {
         symbol = renderer.Symbol[i] as IMarkerSymbol;
         if (symbol != null)
         {
             symbol.Color = color;
             renderer.Symbol[i] = (ISymbol)symbol;
         }
     }
 }