Circular text in a drawing cannot be done easily using standard CATIA V5 commands. You can maybe put a letter into the required position, use a Rotate command to copy it along a circle and then edit letter text one by one. Or you can utilize the power of VBA.
A code below creates a circular text in a matter of milliseconds. All you have to do is to set some initial properties and let your computer do his job.
How it works
In the Main procedure, we define variables we need for DrawCircularText routine. A must for all geometric calculations is a constant PI. The PI, unfortunately, does not exist in VBA and we have to specify it ourselves. I have found a nice little trick on how to define it without assigning the PI value directly. A formula pi = 4 * Atn(1) does it.
Other variables like r, spacing, and txt represent properties of circular text:
- r is an inner radius of circular text
- spacing is a central angle of an arc between letters in radians
- txt is our circular text
You can change these variables as you need.
The last row in the Main sub is a call to a DrawCircularText routine, which takes five parameters. Last two of them are declared as Optional and we can omit them in a procedure call if we are happy with predefined font name and font size. And we are :).
Option Explicit
' PI definition on module level
Dim pi As Double
Sub Main()
' set PI variable
pi = 4 * Atn(1)
' get active view
Dim view As DrawingView
Set view = CATIA.ActiveDocument.Sheets.ActiveSheet.Views.ActiveView
Dim r As Double
Dim spacing As Double
Dim txt As String
' set circular text properties, change it as you need!
r = 50
spacing = 10 * (pi / 180)
txt = "Just Example JUST EXAMPLE 123456789"
DrawCircularText view, r, spacing, txt
' DrawCircularText view, r, spacing, txt, "Algerian (TrueType)", 8
End Sub
The procedure DrawCircularText takes care of all hard work. It draws each letter from input string to the correct location and set its properties like the angle, anchor point, font name, and font size.
Probably the most important here is a parametric equation of a circle which is defined as:
- x = r cos(t)
- y = r sin(t)
where x, y are the coordinates of any point on the circle, r is the radius of the circle and t is the parameter - the angle.
Sub DrawCircularText(view As DrawingView, r As Double, spacing As Double, txt As String, _
Optional fntName As String = "Courier10 BT", Optional fntSize As Long = 10)
' get drawing text collection
Dim drwTexts As DrawingTexts
Set drwTexts = view.Texts
Dim i As Long
Dim letterAngle As Double
For i = 1 To Len(txt)
Dim posX As Double
Dim posY As Double
posX = r * Cos(letterAngle)
posY = r * Sin(letterAngle)
' create letter
Dim letter As DrawingText
Set letter = drwTexts.Add(Mid(txt, i, 1), posX, -posY)
letter.Angle = 270 - letterAngle * 180 / pi
' get DrawingTextProperties object of a letter
Dim textProp As DrawingTextProperties
Set textProp = letter.TextProperties
' set text properties of a letter
With textProp
' set letter mirror mode, do not let CATIA to perform auto flip of text
.Mirror = catTextNoFlip
.AnchorPoint = catBottomCenter
.FontName = fntName
.FontSize = fntSize
' update text properties
.Update
End With
letterAngle = spacing * i
Next
End Sub
If you copy all routines into a standard module and launch Main procedure, you should get a nice circular text like the one below.
Circular text in CATIA V5 Drawing