Circular text in CATIA V5 drawings

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
        End With

        letterAngle = spacing * i
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

Circular text in CATIA V5 Drawing

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>