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; } }
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); } }