'''' This code is part of Document Solutions for Imaging demos.'' Copyright (c) MESCIUS inc. All rights reserved.''ImportsSystem.DrawingImportsGrapeCity.Documents.DrawingImportsGrapeCity.Documents.TextImportsGrapeCity.Documents.ImagingImports GCTEXT = GrapeCity.Documents.Text '' 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.PublicClassRoundRectangleFunctionGenerateImage(ByVal pixelSize AsSize,ByVal dpi AsSingle,ByVal opaque AsBoolean,OptionalByVal sampleParams AsString() = Nothing) AsGcBitmap Dim bmp = NewGcBitmap(pixelSize.Width, pixelSize.Height, True, dpi, dpi)Dim Inch = dpiUsing g = bmp.CreateGraphics(Color.RoyalBlue)Dim rc = Util.AddNote("GcGraphics 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.", g) '' 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 + Inch / 2, Inch * 2, Inch) g.FillRoundRect(rEasy, rx, ry, Color.PaleGreen) g.DrawRoundRect(rEasy, rx, ry, Color.Blue, 4)'' Add a label:Dim tf = NewTextFormat() With { .Font = GCTEXT.Font.FromFile(IO.Path.Combine("Resources", "Fonts", "FreeSerif.ttf")), .FontSize = Inch / 6 } 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 + Inch / 2)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)EndUsing'' DoneReturn bmpEndFunction '' 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