public void Draw(XGraphics gfx, BoundingBox geombox, XRect mapframe) { if (this._visible) { TransformsProvider tp = new TransformsProvider(gfx); double geomScaleFactor = tp.WorldToPaperScale(geombox, mapframe); XRect geomFrame = tp.WorldToPaperRect(geombox, mapframe); double mapWorldXmin = geombox.Left - ((geomFrame.Left - mapframe.Left) / geomScaleFactor); double mapWorldYmin = geombox.Bottom - ((mapframe.Bottom - geomFrame.Bottom) / geomScaleFactor); double mapWorldXmax = geombox.Right + ((mapframe.Right - geomFrame.Right) / geomScaleFactor); double mapWorldYmax = geombox.Top + ((geomFrame.Top - mapframe.Top) / geomScaleFactor); XFont font = new XFont(this._fontFamilyName, this._fontSize, this._fontStyle); XBrush fontColor = new XSolidBrush(XColor.FromName(this._fontColorName)); XColor tickColor = XColor.FromName(this._tickColorName); gfx.DrawString(mapWorldXmin.ToString("0.00"), font, fontColor, mapframe.Left, mapframe.Top - (this._fontSize / 2), XStringFormat.BottomCenter); gfx.DrawString(mapWorldXmin.ToString("0.00"), font, fontColor, mapframe.Left, mapframe.Bottom + (this._fontSize / 2), XStringFormat.TopCenter); gfx.DrawString(mapWorldXmax.ToString("0.00"), font, fontColor, mapframe.Right, mapframe.Top - (this._fontSize / 2), XStringFormat.BottomCenter); gfx.DrawString(mapWorldXmax.ToString("0.00"), font, fontColor, mapframe.Right, mapframe.Bottom + (this._fontSize / 2), XStringFormat.TopCenter); gfx.DrawString(mapWorldYmin.ToString("0.00"), font, fontColor, mapframe.Left, mapframe.Bottom - (this._fontSize / 2), XStringFormat.BottomCenter); gfx.DrawString(mapWorldYmin.ToString("0.00"), font, fontColor, mapframe.Right, mapframe.Bottom - (this._fontSize / 2), XStringFormat.BottomCenter); gfx.DrawString(mapWorldYmax.ToString("0.00"), font, fontColor, mapframe.Left, mapframe.Top + (this._fontSize / 2), XStringFormat.TopCenter); gfx.DrawString(mapWorldYmax.ToString("0.00"), font, fontColor, mapframe.Right, mapframe.Top + (this._fontSize / 2), XStringFormat.TopCenter); gfx.DrawLine(new XPen(tickColor), mapframe.Left - (this._fontSize / 2), mapframe.Top, mapframe.Left + (this._fontSize / 2), mapframe.Top); gfx.DrawLine(new XPen(tickColor), mapframe.Left, mapframe.Top - (this._fontSize / 2), mapframe.Left, mapframe.Top + (this._fontSize / 2)); gfx.DrawLine(new XPen(tickColor), mapframe.Right - (this._fontSize / 2), mapframe.Top, mapframe.Right + (this._fontSize / 2), mapframe.Top); gfx.DrawLine(new XPen(tickColor), mapframe.Right, mapframe.Top - (this._fontSize / 2), mapframe.Right, mapframe.Top + (this._fontSize / 2)); gfx.DrawLine(new XPen(tickColor), mapframe.Left - (this._fontSize / 2), mapframe.Bottom, mapframe.Left + (this._fontSize / 2), mapframe.Bottom); gfx.DrawLine(new XPen(tickColor), mapframe.Left, mapframe.Bottom - (this._fontSize / 2), mapframe.Left, mapframe.Bottom + (this._fontSize / 2)); gfx.DrawLine(new XPen(tickColor), mapframe.Right - (this._fontSize / 2), mapframe.Bottom, mapframe.Right + (this._fontSize / 2), mapframe.Bottom); gfx.DrawLine(new XPen(tickColor), mapframe.Right, mapframe.Bottom - (this._fontSize / 2), mapframe.Right, mapframe.Bottom + (this._fontSize / 2)); //Algoritmo de cálculo de TickMarcks (4 intervalos) double sfX = mapframe.Width / (mapWorldXmax - mapWorldXmin); double tx = (mapWorldXmax - mapWorldXmin) / 4; double tx2 = tx + 10 - (tx % 10); double xtick = mapWorldXmin + tx2 - (mapWorldXmin % tx2); while (xtick < mapWorldXmax) { double xtickPts = mapframe.Left + ((xtick - mapWorldXmin) * sfX); //Control para evitar superposición de textos if ((xtickPts - mapframe.Left) > (this._fontSize * 9) & (mapframe.Right - xtickPts) > (this._fontSize * 9)) { gfx.DrawLine(new XPen(tickColor), xtickPts, mapframe.Top - (this._fontSize / 2), xtickPts, mapframe.Top); gfx.DrawString(xtick.ToString("0"), font, fontColor, xtickPts, mapframe.Top - (_fontSize / 2), XStringFormat.BottomCenter); gfx.DrawLine(new XPen(tickColor), xtickPts, mapframe.Bottom + (this._fontSize / 2), xtickPts, mapframe.Bottom); gfx.DrawString(xtick.ToString("0"), font, fontColor, xtickPts, mapframe.Bottom + (this._fontSize / 2), XStringFormat.TopCenter); } xtick += tx2; } double sfY = mapframe.Height / (mapWorldYmax - mapWorldYmin); double ty = (mapWorldYmax - mapWorldYmin) / 4; double ty2 = ty + 10 - (ty % 10); double ytick = mapWorldYmin + ty2 - (mapWorldYmin % ty2); while (ytick < mapWorldYmax) { double ytickPts = mapframe.Bottom - ((ytick - mapWorldYmin) * sfY); //Control para evitar superposición de textos if ((ytickPts - mapframe.Top) > (this._fontSize * 9) & (mapframe.Bottom - ytickPts) > (this._fontSize * 9)) { gfx.DrawLine(new XPen(tickColor), mapframe.Left - (this._fontSize / 2), ytickPts, mapframe.Left, ytickPts); gfx.DrawString(ytick.ToString("0"), font, fontColor, mapframe.Left, ytickPts - (this._fontSize / 2), XStringFormat.BottomCenter); gfx.DrawLine(new XPen(tickColor), mapframe.Right + (this._fontSize / 2), ytickPts, mapframe.Right, ytickPts); gfx.DrawString(ytick.ToString("0"), font, fontColor, mapframe.Right, ytickPts - (this._fontSize / 2), XStringFormat.BottomCenter); } ytick += ty2; } } }
public void Draw(XGraphics gfx, Map map) { TransformsProvider tp = new TransformsProvider(gfx); XRect rect = tp.FromCmsToPts(new XRect(this.Left, this.Top, this.Width, this.Height)); double geomScaleFactor; geomScaleFactor = tp.WorldToPaperScale(map.GetExtents(), rect); XRect geomFrame = tp.WorldToPaperRect(map.GetExtents(), rect); XGraphicsState state = gfx.Save(); gfx.TranslateTransform(geomFrame.X, geomFrame.Bottom); if (this._cacheIsEmpty) { foreach (Layer lyr in map.Layers) { if ((lyr) is VectorLayer) { if (this._overrideVectorLayerStyle) { this.DrawVectorLayer(gfx, map, geomScaleFactor, (VectorLayer)lyr, this._geomLineColorName, this._geomLineWidth, this._geomFillColorName); } else { if ((lyr as VectorLayer).Theme == null) { this.DrawVectorLayer(gfx, map, geomScaleFactor, (VectorLayer)lyr); } else { this.DrawThemeLayer(gfx, map, geomScaleFactor, (VectorLayer)lyr); } } } if (lyr is LabelLayer) { if (this._overrideLabelLayerStyle) { this.DrawLabelLayer(gfx, map, geomScaleFactor, (LabelLayer)lyr, _labelFontFamilyName, _labelFontSize, _labelFontStyle, _labelFontColorName); } else { LabelStyle simb = (lyr as LabelLayer).Style; this.DrawLabelLayer(gfx, map, geomScaleFactor, (LabelLayer)lyr, simb.Font.FontFamily.Name, simb.Font.Size, (XFontStyle)simb.Font.Style, simb.ForeColor.Name); } } } this._cacheIsEmpty = false; } else { foreach (PDFGeom g in this._geomCache) { if (g.FillStyle == null) { gfx.DrawPath(g.LineStyle, g.Geometry); } else if (g.LineStyle == null) { gfx.DrawPath(g.FillStyle, g.Geometry); } else { gfx.DrawPath(g.LineStyle, g.FillStyle, g.Geometry); } } foreach (PDFLabel l in this._labelCache) { gfx.DrawString(l.Text, l.Font, l.Brush, l.Point, XStringFormat.Center); } } gfx.Restore(state); _scale.Draw(gfx, geomScaleFactor); _geomarks.Draw(gfx, map.GetExtents(), rect); }