/// <summary> /// 复制 /// </summary> /// <returns></returns> public override moRenderer Clone() { moUniqueValueRenderer sRenderer = new moUniqueValueRenderer(); sRenderer._Field = _Field; sRenderer._HeadTitle = _HeadTitle; sRenderer._ShowHead = _ShowHead; Int32 sValueCount = _Values.Count; for (Int32 i = 0; i <= sValueCount - 1; i++) { string sValue = _Values[i]; moSymbol sSymbol = null; if (_Symbols[i] != null) { sSymbol = _Symbols[i].Clone(); } sRenderer.AddUniqueValue(sValue, sSymbol); } if (_DefaultSymbol != null) { sRenderer.DefaultSymbol = _DefaultSymbol.Clone(); } sRenderer._ShowDefaultSymbol = _ShowDefaultSymbol; return(sRenderer); }
/// <summary> /// 绘制所有要素 /// </summary> /// <param name="g">绘图对象</param> /// <param name="extent">绘制范围(地图坐标)</param> /// <param name="mapScale">地图比例尺的倒数</param> /// <param name="dpm">每米对应的点数</param> /// <param name="mpu">地图坐标单位对应的米数</param> internal void DrawFeatures(Graphics g, moRectangle extent, double mapScale, double dpm, double mpu) { //(1)为所有要素配置符号 SetFeatureSymbols(); //(2)判断是否位于绘制范围内,如是,则绘制 Int32 sFeatureCount = _Features.Count; for (Int32 i = 0; i < sFeatureCount; i++) { moFeature sFeature = _Features.GetItem(i); if (IsFeatureInExtent(sFeature, extent) == true) { moGeometry sGeometry = sFeature.Geometry; moSymbol sSymbol = sFeature.Symbol; moMapDrawingTools.DrawGeometry(g, extent, mapScale, dpm, mpu, sGeometry, sSymbol); } } }
//要素的符号是否可见 private bool IsFeatureSymbolVisible(moFeature feature) { moSymbol sSymbol = feature.Symbol; if (sSymbol.SymbolType == moSymbolTypeConstant.SimpleMarkerSymbol) { moSimpleMarkerSymbol sMarkerSymbol = (moSimpleMarkerSymbol)sSymbol; return(sMarkerSymbol.Visible); } else if (sSymbol.SymbolType == moSymbolTypeConstant.SimpleLineSymbol) { moSimpleLineSymbol sLineSymbol = (moSimpleLineSymbol)sSymbol; return(sLineSymbol.Visible); } else if (sSymbol.SymbolType == moSymbolTypeConstant.SimpleFillSymbol) { moSimpleFillSymbol sFillSymbol = (moSimpleFillSymbol)sSymbol; return(sFillSymbol.Visible); } else { throw new Exception("Invalid symbol type!"); } }
//绘制矩形 internal static void DrawRectangle(Graphics g, moRectangle extent, double mapScale, double dpm, double mpu, moRectangle rectangle, moSymbol symbol) { if (symbol.SymbolType == moSymbolTypeConstant.SimpleFillSymbol) { moSimpleFillSymbol sSymbol = (moSimpleFillSymbol)symbol; if (sSymbol.Visible == true) { DrawRectangleBySimpleFill(g, extent, mapScale, dpm, mpu, rectangle, sSymbol); } } }
//绘制点集合(多点) internal static void DrawPoints(Graphics g, moRectangle extent, double mapScale, double dpm, double mpu, moPoints points, moSymbol symbol) { if (symbol.SymbolType == moSymbolTypeConstant.SimpleMarkerSymbol) { moSimpleMarkerSymbol sSymbol = (moSimpleMarkerSymbol)symbol; if (sSymbol.Visible == true) { Int32 sPointCount = points.Count; for (Int32 i = 0; i <= sPointCount - 1; i++) { moPoint sPoint = points.GetItem(i); DrawPointBySimpleMarker(g, extent, mapScale, dpm, mpu, sPoint, sSymbol); } } } }
//绘制线段 internal static void DrawLine(Graphics g, moRectangle extent, double mapScale, double dpm, double mpu, moPoint point1, moPoint point2, moSymbol symbol) { if (symbol.SymbolType == moSymbolTypeConstant.SimpleLineSymbol) { moSimpleLineSymbol sSymbol = (moSimpleLineSymbol)symbol; if (sSymbol.Visible == true) { DrawLineBySimpleLine(g, extent, mapScale, dpm, mpu, point1, point2, sSymbol); } } }
internal static void DrawGeometry(Graphics g, moRectangle extent, double mapScale, double dpm, double mpu, moGeometry geometry, moSymbol symbol) { if (extent == null) { return; } if (geometry == null) { return; } if (symbol == null) { return; } if (geometry.GetType() == typeof(moPoint)) { moPoint sPoint = (moPoint)geometry; DrawPoint(g, extent, mapScale, dpm, mpu, sPoint, symbol); } else if (geometry.GetType() == typeof(moMultiPolyline)) { moMultiPolyline sMultiPolyline = (moMultiPolyline)geometry; DrawMultiPolyline(g, extent, mapScale, dpm, mpu, sMultiPolyline, symbol); } else if (geometry.GetType() == typeof(moMultiPolygon)) { moMultiPolygon sMultiPolygon = (moMultiPolygon)geometry; DrawMultiPolygon(g, extent, mapScale, dpm, mpu, sMultiPolygon, symbol); } }
/// <summary> /// 增加一个唯一值及对应的符号 /// </summary> /// <param name="value"></param> /// <param name="symbol"></param> public void AddUniqueValue(string value, moSymbol symbol) { _Values.Add(value); _Symbols.Add(symbol); }
public void SetSymbol(Int32 index, moSymbol symbol) { _Symbols[index] = symbol; }
/// <summary> /// 增加一个分割值及对应的符号 /// </summary> /// <param name="value"></param> /// <param name="symbol"></param> public void AddBreakValue(double value, moSymbol symbol) { _BreakValues.Add(value); _Symbols.Add(symbol); }
/// <summary> /// 以指定符号绘制指定矩形 /// </summary> /// <param name="rectangle"></param> /// <param name="symbol"></param> public void DrawRectangle(moRectangle rectangle, moSymbol symbol) { moMapDrawingTools.DrawRectangle(_MyGraphics, _Extent, _MapScale, _dpm, _mpu, rectangle, symbol); }
/// <summary> /// 以指定符号绘制指定点集合 /// </summary> /// <param name="points"></param> /// <param name="symbol"></param> public void DrawPoints(moPoints points, moSymbol symbol) { moMapDrawingTools.DrawPoints(_MyGraphics, _Extent, _MapScale, _dpm, _mpu, points, symbol); }
/// <summary> /// 以指定符号绘制指定复合多边形 /// </summary> /// <param name="multiPolygon"></param> /// <param name="symbol"></param> public void DrawMultiPolygon(moMultiPolygon multiPolygon, moSymbol symbol) { moMapDrawingTools.DrawMultiPolygon(_MyGraphics, _Extent, _MapScale, _dpm, _mpu, multiPolygon, symbol); }
/// <summary> /// 以指定符号绘制指定线段 /// </summary> /// <param name="point1"></param> /// <param name="point2"></param> /// <param name="symbol"></param> public void DrawLine(moPoint point1, moPoint point2, moSymbol symbol) { moMapDrawingTools.DrawLine(_MyGraphics, _Extent, _MapScale, _dpm, _mpu, point1, point2, symbol); }
/// <summary> /// 绘制所有选择要素 /// </summary> /// <param name="g"></param> /// <param name="extent"></param> /// <param name="mapScale"></param> /// <param name="dpm"></param> /// <param name="mpu"></param> /// <param name="symbol"></param> internal void DrawSelectedFeatures(Graphics g, moRectangle extent, double mapScale, double dpm, double mpu, moSymbol symbol) { //判断是否位于绘制范围内,不是,则绘制 Int32 sFeatureCount = _SelectedFeatures.Count; for (Int32 i = 0; i < sFeatureCount; i++) { moFeature sFeature = _SelectedFeatures.GetItem(i); if (IsFeatureInExtent(sFeature, extent) == true) { moGeometry sGeometry = sFeature.Geometry; moMapDrawingTools.DrawGeometry(g, extent, mapScale, dpm, mpu, sGeometry, symbol); } } }