Exemplo n.º 1
0
        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;
                }
            }
        }
Exemplo n.º 2
0
        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);
        }