private static void setClipRegion(Graphics gr, PdfClipRegion clipRegion, float userUnit)
        {
            if (clipRegion.IntersectedPaths.Count == 0)
            {
                return;
            }

            Matrix transformationBefore = gr.Transform;

            try
            {
                gr.Transform = new Matrix(userUnit, 0, 0, userUnit, 0, 0);
                foreach (PdfPath clipPath in clipRegion.IntersectedPaths)
                {
                    using (var gdiPath = new GraphicsPath())
                    {
                        toGdiPath(clipPath, gdiPath);
                        gdiPath.Transform(toGdiMatrix(clipPath.TransformationMatrix));

                        gdiPath.FillMode = (FillMode)clipPath.ClipMode.Value;
                        gr.SetClip(gdiPath, CombineMode.Intersect);
                    }
                }
            }
            finally
            {
                gr.Transform = transformationBefore;
            }
        }
Example #2
0
        private static void setClipRegion(PdfCanvas canvas, PdfClipRegion clipRegion)
        {
            if (clipRegion.IntersectedPaths.Count == 0)
            {
                return;
            }

            PdfMatrix transformationBefore = canvas.TransformationMatrix;

            try
            {
                foreach (PdfPath clipPath in clipRegion.IntersectedPaths)
                {
                    canvas.ResetTransform();
                    canvas.Transform(clipPath.TransformationMatrix);
                    appendPath(canvas, clipPath);
                    canvas.SetClip(clipPath.ClipMode.Value);
                }
            }
            finally
            {
                canvas.ResetTransform();
                canvas.Transform(transformationBefore);
            }
        }
        private static void saveStateAndDraw(Graphics gr, PdfClipRegion clipRegion, float userUnit, Action draw)
        {
            var state = gr.Save();

            try
            {
                setClipRegion(gr, clipRegion, userUnit);

                draw();
            }
            finally
            {
                gr.Restore(state);
            }
        }