Questions similar to this appear on the Bentley Discussion Groups.

Text Nodes and Text

MicroStation provides two sorts of text element: text nodes (VBA TextNodeElement) and text (VBA TextElement). A TextElement is the simpler: it contains a single line of text. It has no line termination, such as a line-feed or carriage return.

A TextNodeElement is more complex. It is, in MicroStation terminology, a ComplexElement. In other words, a container that holds one or more TextElements.

Using MicroStation's text editor, it's easy to create and place a TextElement in your DGN model. It's also easy to create, intentionally or inadvertently, a TextNodeElement when you type Enter or Return while editing your text.

Unravelling Text Nodes

Sometimes you don't want a TextNodeElement with those pesky carriage returns. Sometimes you just want a plain line of text with no breaks. The VBA project described here does exactly that: it unravels a TextNodeElement into a single TextElement.

The project provides a Text Node Picker class (clsTextNodePicker). That's a VBA class that Implements ILocateCommandEvents, tuned to handle TextNodeElements and nothing else. The interesting work is done by VBA function ConvertTextNode …

' ---------------------------------------------------------------------
'   ConvertTextNode
'   Extract the text components from a text node element and create a
'   new text element.
'   Returns:    TextElement
' ---------------------------------------------------------------------
Public Function ConvertTextNode(ByVal oNode As TextNodeElement) As TextElement
    Set ConvertTextNode = Nothing
    Const SPACE                             As String = " "
    Dim s                                   As String
    Dim words                               As ElementEnumerator
    Set words = oNode.GetSubElements
    Do While words.MoveNext
        s = s + words.Current.AsTextElement.Text
        s = s + SPACE
    Loop
    Set ConvertTextNode = CreateTextElement1(oNode, s, oNode.Origin, oNode.Rotation)
End Function

The function creates a new TextElement having the same origin and rotation as the TextNodeElement. It uses the TextNodeElement as a template, so should inherit the node's symbology and level settings.

Download

Download the Convert Text Nodes to Text VBA Project

Download a ZIP package that contains the ConvertTextNodeToText.mvba project.