ArcGIS Engine 渲染----饼图
ArcGIS Engine 渲染----饼图
上一篇 / 下一篇 2007-07-21 21:24:31 / 个人分类:ArcGIS Engine
这几天一直看AE,几天看下来没什么头绪,日子过得恍恍忽忽.今天终于写了一个程序练练手,根据帮助的VB程序改编的,在众多的接口之间跳来跳去,晕头转向.现把代码贴出来,给处在迷茫中的朋友一点小启示,也以此自勉!
画饼图,C#实现:
private RgbColor GetRgbColor(int red, int green, int blue)
k7G9hF3g6nZ0z*v0 {3sNews.Net——中国地理空间信息门户网站i,H!uA!kc%Z
RgbColor rgbColor = new RgbColorClass();3sNews.Net——中国地理空间信息门户网站w_%T;Q0N;@
rgbColor.Red = red;3sNews.Net——中国地理空间信息门户网站 v*NO+Fi|7D
rgbColor.Green = green;3sNews.Net——中国地理空间信息门户网站+[6`EBt
rgbColor.Blue = blue;
return rgbColor;3sNews.Net——中国地理空间信息门户网站Nn \&Cs4E,?pa,X
}
private void btnPieChart_Click(object sender, EventArgs e)
}_ Q{5iZ,L0 {
7Gp;CN%D,er0 IMap pMap = new MapClass();3sNews.Net——中国地理空间信息门户网站 Dt;E3M1G
IFeatureLayer pFLayer = (IFeatureLayer)axMapControl1.get_Layer(0);
T6Z#p-^#g0 IGeoFeatureLayer pGeoFeaLayer = (IGeoFeatureLayer)pFLayer;
IChartRenderer pChartRenderer = new ChartRendererClass();
// Set up the field to draw charts
IRendererFields pRenderFields = (IRendererFields)pChartRenderer;3sNews.Net——中国地理空间信息门户网站jf&k%v-u0O(` E
pRenderFields.AddField("Pop_cntry", null);3sNews.Net——中国地理空间信息门户网站ppTMz%X]7QcR
IPieChartRenderer pPieChartRender = (IPieChartRenderer)pChartRenderer;
//Calculate the max value of the data field to scale the chart
-H];]V+T#tU w0 //ICursor pCursor = new CursorClass();
IQueryFilter pQueryFilter = new QueryFilterClass();
;@|_ g/hhB/|'C }0 //IRowBuffer pRow = new RowBufferClass();3sNews.Net——中国地理空间信息门户网站7Y ]h }oH
ITable pTable = (ITable)pGeoFeaLayer;3sNews.Net——中国地理空间信息门户网站Wnt%s.s,G|%[L @6E@
pQueryFilter.AddField("Pop_cntry");3sNews.Net——中国地理空间信息门户网站,a#b_ e/h
ICursor pCursor = pTable.Search(pQueryFilter, true);
int fieldIndex;3sNews.Net——中国地理空间信息门户网站Ee g*yf?g&O5g \!H
double MaxValue;
5`p9`J:H_f0 bool firstValue;
9tY]\?0 double fieldValue;
fieldIndex = pTable.FindField("Pop_cntry");
2l8v `N*V R'}aKs0 firstValue = true;3sNews.Net——中国地理空间信息门户网站 v;TL"J:C.PiS"t
MaxValue = 0;
3sNews.Net——中国地理空间信息门户网站pvgd5pV_Cq"H
IRowBuffer pRow = pCursor.NextRow();3sNews.Net——中国地理空间信息门户网站b(hF!W6Q#W
while (pRow != null)
^Q3B4T i V`;Cd0 {3sNews.Net——中国地理空间信息门户网站Y-j9[']G|8T,`[
fieldValue =(double) pRow.get_Value(fieldIndex);
];BD#v@#[?)X0 if (firstValue)3sNews.Net——中国地理空间信息门户网站#jWY-M |2tA-L
{3sNews.Net——中国地理空间信息门户网站Ex4d%Qk
MaxValue = fieldValue;
'Vdh/g4a:B&c0 firstValue = false;
(SJ },da sg0 }
if (fieldValue > MaxValue)3sNews.Net——中国地理空间信息门户网站#fq7B#sh8zl }7s
{
*^&ex#s*QS0 MaxValue = fieldValue;
X q7`e+DHg0 }3sNews.Net——中国地理空间信息门户网站(T8QcJjJI.F
pRow = pCursor.NextRow();
;N0_.t!w8_ee4^0 }
IPieChartSymbol pPiechartSymbol = new Pie ChartSymbolClass();
g/U W7[ eQ-@0 IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
IChartSymbol pChartSymbol = (IChartSymbol)pPiechartSymbol;
E E8O2O/I"A$O,i^m)U0 pPiechartSymbol.Clockwise = true;
![k bT?0 pPiechartSymbol.UseOutline = true;
ILineSymbol pOutLine = new SimpleLineSymbolClass();3sNews.Net——中国地理空间信息门户网站 q0G.k{EU.r
pOutLine.Color = GetRgbColor(255,0,255);3sNews.Net——中国地理空间信息门户网站3I(F ?&vQ;G9v8t9M
pOutLine.Width = 1;
HX x}-[ g-P0 pPiechartSymbol.Outline = pOutLine;
IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pPiechartSymbol;
//finally
pChartSymbol.MaxValue = MaxValue;
pMarkerSymbol.Size = 16;
ISymbolArray pSymbolArray = (ISymbolArray)pPiechartSymbol;
UnfzD%]0 pFillSymbol.Color = GetRgbColor(213,212,252);
pFillSymbol.Outline = pOutLine;
G/E3t*R"\ ]6V:b1s0 pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
//set up the background
pFillSymbol.Color = GetRgbColor(239,228,190);
O@z(Yr9RT.Kc:Z0 pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol;
pChartRenderer.UseOverposter = false;
pPieChartRender.MinSize = 6;
pPieChartRender.MinValue = 453588;
s `,@ _%Z}S8|0 pPieChartRender.FlanneryCompensation = false;
zf z3hi k0 pPieChartRender.ProportionalBySum = true;
pChartRenderer.ChartSymbol = (IChartSymbol)pPiechartSymbol;
T%` R4X+iyA)r*t4y0 pChartRenderer.CreateLegend();
c|U?B:zFfG0 pGeoFeaLayer.Renderer =(IFeatureRenderer) pChartRenderer;
this.axLicenseControl1.Refresh();
}
PS:可能代码有点复杂,望大家多多指正,呵呵!
来自:http://www.3snews.net/html/47/6447-9536.html