'''' This code is part of Document Solutions for PDF .NET demos.'' Copyright (c) MESCIUS inc. All rights reserved.''ImportsSystem.IOImportsSystem.DrawingImportsGrapeCity.Documents.PdfImportsGrapeCity.Documents.TextImportsGrapeCity.Documents.Drawing '' This sample demonstrates how to draw round rectangles'' using dedicated DrawRoundRect/FillRoundRect methods.'' It also shows how the same result may be achieved with'' graphics paths.PublicClassRoundRectangleFunctionCreatePDF(ByVal stream AsStream) AsIntegerDim doc = NewGcPdfDocument()Dim page = doc.NewPage()Dim g = page.Graphics Dim rc = Util.AddNote("GcPdfGraphics has dedicated methods to easily draw and fill rectangles with rounded corners. " +"This sample also shows how the same result may be achieved using graphics paths. " +"While they are not really needed for drawing round rectangles, graphics paths allow " +"to draw and fill arbitrary figures with complex geometries.", page) '' Rounded rectangle's radii:Dim rx = 36, ry = 24 '' Using dedicated methods to draw And fill round rectangles:Dim rEasy = NewRectangleF(rc.Left, rc.Bottom + 36, 144, 72) g.FillRoundRect(rEasy, rx, ry, Color.PaleGreen) g.DrawRoundRect(rEasy, rx, ry, Color.Blue, 4)'' Add a label:Dim tf = NewTextFormat() With {.Font = StandardFonts.Times, .FontSize = 14} g.DrawString("The easy way.", tf, rEasy, TextAlignment.Center, ParagraphAlignment.Center, False) '' Using graphics path to achieve the same result:Dim rHard = rEasy rHard.Offset(0, rEasy.Height + 36)Dim path = MakeRoundRect(g, rHard, rx, ry) g.FillPath(path, Color.PaleVioletRed) g.DrawPath(path, Color.Purple, 4)'' Add a label: g.DrawString("The hard way.", tf, rHard, TextAlignment.Center, ParagraphAlignment.Center, False) '' Done doc.Save(stream)Return doc.Pages.CountEndFunction '' This method shows how to create a graphics path that may be used'' to fill Or draw arbitrary shapes on a GcGraphics.PrivateFunctionMakeRoundRect(ByVal g AsGcGraphics, ByVal rc AsRectangleF, ByVal rx AsSingle, ByVal ry AsSingle) AsIPathDim path = g.CreatePath()Dim sz = NewSizeF(rx, ry)'' start from horizontal top left path.BeginFigure(NewPointF(rc.Left + rx, rc.Top)) path.AddLine(NewPointF(rc.Right - rx, rc.Top)) path.AddArc(NewArcSegment() With {.Point = NewPointF(rc.Right, rc.Top + ry), .SweepDirection = SweepDirection.Clockwise, .Size = sz}) path.AddLine(NewPointF(rc.Right, rc.Bottom - ry)) path.AddArc(NewArcSegment() With {.Point = NewPointF(rc.Right - rx, rc.Bottom), .SweepDirection = SweepDirection.Clockwise, .Size = sz}) path.AddLine(NewPointF(rc.Left + rx, rc.Bottom)) path.AddArc(NewArcSegment() With {.Point = NewPointF(rc.Left, rc.Bottom - ry), .SweepDirection = SweepDirection.Clockwise, .Size = sz}) path.AddLine(NewPointF(rc.Left, rc.Top + ry)) path.AddArc(NewArcSegment() With {.Point = NewPointF(rc.Left + rx, rc.Top), .SweepDirection = SweepDirection.Clockwise, .Size = sz}) path.EndFigure(FigureEnd.Closed)Return pathEndFunctionEndClass