Пример #1
0
        /// <summary>
        /// Renders a page to the specified graphics object
        /// </summary>
        private void PrintPage(int pageX, int pageY, Graphics g)
        {
            var page = _pages.GetPageRectange(pageX, pageY);

            var list = GetElementsWithinPage(pageX, pageY);

            g.PageScale = 1f;
            g.PageUnit  = GraphicsUnit.Display;

            foreach (var el in list.Reverse())
            {
                var matrix = g.Transform;

                var r    = el.Rectangle;
                var clip = RectangleHelper.GetIntersection(page, r);

                float offsetX = el is LayoutMap ? clip.X - page.X : r.X - page.X;
                float offsetY = el is LayoutMap ? clip.Y - page.Y : r.Y - page.Y;

                g.TranslateTransform(offsetX, offsetY);

                if (el is LayoutMap)
                {
                    // origin is a beginning of map on this page
                    var translatedClip = new RectangleF(0.0f, 0.0f, clip.Width + 1.0f, clip.Height + 1.0f);

                    g.SetClip(translatedClip);

                    // wait for the response from tilesLoaded and perform drawing
                    (el as LayoutMap).Print(g, clip, false);
                }
                else
                {
                    // origin is beginning of element (even if lies outside current page)
                    if (_useElementClipping)
                    {
                        offsetX = offsetX > 0 ? 0f : -offsetX;
                        offsetY = offsetY > 0 ? 0f : -offsetY;

                        g.SetClip(new RectangleF(offsetX, offsetY, clip.Width, clip.Height));
                    }

                    el.DrawElement(g, true, false);
                }

                g.Transform = matrix;
                g.ResetClip();
            }

            _pages.GetPage(pageX, pageY).Printed = true;
        }