Text on Path with VB.NET

By , 2 May 2006

Prize winner in Competition "VB.NET Mar 2006"

Introduction

I searched the internet for a long time for some algorithm to display a "Text on a Path", but I only fond the Batik SVG Toolkit. It's a Java project for displaying SVG. SVG has the ability to display "Text on a Path", but I only needed the Text on Path functionality.

So, I started recollecting my old math education, and coded the first lines to calculate the angle of defined position on a path.

Do you remember a²+b²=c²? That is the base to solve this problem. You need two points on a straight line.

```Private Function GetAngle(ByVal _point1 As PointF, _
ByVal _point2 As PointF) As Decimal
Dim c As Decimal
c = Math.Sqrt((_point2.X - _point1.X) ^ 2 + _
(_point2.Y - _point1.Y) ^ 2)
'Oh yeah good old math a²+b²=c²

If c = 0 Then
Return 0
End If 'We must change the side where the triangle is
If _point1.X > _point2.X Then
Return Math.Asin((_point1.Y - _point2.Y) / c) * _
180 / Math.PI - 180
Else
Return Math.Asin((_point2.Y - _point1.Y) / c) * _
180 / Math.PI
End If

End Function```

Using the code

You can use the `TextOnPath` class to get a bitmap with the text on the given path.

The path must be set as `PathData`. You can also the the `TextPathPosition` (`Under`, `Center`, `Above`) and the align the text (`Left`, `Center`, `Right`).

```Dim _points(5) As PointF
Dim _top As TextOnPath.TextOnPath = New TextOnPath.TextOnPath
Dim _gp As GraphicsPath = New GraphicsPath

_points(0) = New PointF(81, 183)
_points(1) = New PointF(321, 305)
_points(2) = New PointF(333, 622)
_points(3) = New PointF(854, 632)
_points(4) = New PointF(864, 153)
_points(5) = New PointF(562, 224)

_top.PathDataTOP = _gp.PathData
_top.FontTOP = New Font("Microsoft Sans Serif", _
36, FontStyle.Regular)
_top.FillColorTOP = Color.Black
_top.ColorTOP = Color.White
_top.TextTOP = "Text on path goes around a path"
_top.ShowPath = True
_top.PathAlignTOP = TextOnPath.PathAlign.Center
_top.LetterSpacePercentage = 100
_top.TextPathPosition = TextOnPath.TextPosition.CenterPath

Dim oBitmap as Bitmap
oBitmap = _top.TextOnPathBitmap```

You can also get the new path data as an SVG string, so you can use it in HTML with Adobe SVG Viewer, or in Corel Draw or Adobe Illustrator.

```Dim _svg As String
_svg = _top.GetSVG(1024, 768)```

Points of interest

If someone has ideas to optimize this code, please contact me, and sorry for the bad English and the short description. This is my first article, and I'm still learning.

History

• Version 1.0 released.
• Version 1.01 released (`PathPoint` calculation optimized).

A list of licenses authors might use can be found here

 Alexander Seel Software Developer Germany Member
No Biography provided

Votes of 3 or less require a comment

Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
 Search this forum Profile popups    Spacing RelaxedCompactTight   Noise Very HighHighMediumLowVery Low   Layout Open AllThread ViewNo JavascriptPreview   Per page 102550
 First Prev Next
 Quick look does not reveal how to modify 'starting postion' of first char.... boblogan 3 Aug '12 - 3:33
 I have an implementation where Path is a Circle... now I need to allow the text to be 'spun' around that circle (like position at 3,6,9...etc)....   I cannot seem to find the proper value that sets this beginning char postion on the arc.   Great work BTW:   Thanks in advance Sign In·View Thread·Permalink
 draw text within any path? ASPUIPAB 29 Oct '11 - 11:39
 C# version and with optimization. guidebee 9 Jul '09 - 17:15
 Great job sf4all 15 Jul '09 - 4:45
 Re: C# version and with optimization. Member 7402166 21 Apr '11 - 5:21
 Interested in getting 1 developer license LarryKudrow 17 Mar '08 - 5:49
 Problem with Running Project bnjneer 5 Jan '08 - 14:30
 Problems mysticwars 13 Apr '07 - 9:36
 Sqrt and Decimal Wesner Moise 2 May '06 - 19:11
 Re: Sqrt and Decimal jarvisa 29 May '06 - 22:55
 VGdotnet PSwartzell1 24 Apr '06 - 5:51
 Excellent chimeric69 23 Apr '06 - 16:53
 Interesting graphical effect... Vlad Stanciu 21 Apr '06 - 8:32
 Last Visit: 31 Dec '99 - 18:00     Last Update: 18 May '13 - 23:31 Refresh 1