Firstly, I am able to create text elements by providing text width and height values (via text boxes on a form) using the active units of a design file (values are in Metres) however I have been asked to instead for the values to always represent Millimeters AND for the text to be annotation text. In a previous thread I had difficulty with annotation scale not working for newly created cells and Jan Slegr advised that I try using ActiveModelReference.GetLastValidGraphicalElement to apply a property handler after the cell was added to the design file. Without know if creating text receptive to annotation scale changes is a similar in process to creating annotation cells, I have amended my text creation code like so:
Header = Point3dAdd(Point, Point3dFromXYZ(-0.5, -1.25, 0))
Point = Header
If CStr(CurrArray(R, C)) = vbNullString Then
Set oText = CreateTextElement1(Nothing, "0", Point, Matrix3dIdentity)
Else
Set oText = CreateTextElement1(Nothing, CStr(CurrArray(R, C)), Point, Matrix3dIdentity)
End If
Set WriteChainage = oText
Set oFont = ActiveDesignFile.Fonts.Find(msdFontTypeWindowsTrueType, sFontName)
oText.TextStyle.Font = oFont
oText.TextStyle.Height = dFontHeight
oText.TextStyle.Width = dFontWidth
oText.TextStyle.Color = ActiveModelReference.InternalColorFromRGBColor(RGB(sRGBVals(0), sRGBVals(1), sRGBVals(2)))
oText.TextStyle.Justification = msdTextJustificationRightCenter
oText.Redraw msdDrawingModeNormal
ActiveModelReference.AddElement oText
Set oText = ActiveModelReference.GetLastValidGraphicalElement
Set oProp = CreatePropertyHandler(oText)
oProp.SelectByAccessString "AnnotationPurpose"
If oProp.GetValue = True Then
oProp.SelectByAccessString "IsAnnotation"
Debug.Print "the Text Annotation value is " & oProp.GetValue
oProp.SetValue (True)
End If
The result can be seen below:
![]()
I have checked the VBA help and it doesn't mention AnnotationPurpose anywhere. I discovered the term from this page but I am unsure if it is only specific to annotation cells and not annotation text. Can anyone advise how what I need to change to create annotation text?
Secondly, I am looking for some advice how I can ensure the dFontHeight and dFontWidth variable values always represent Millimeters regardless of if the active designfile units are either Meters or Millimetres. My initial thoughts are to use a simple IF Else statement to check the value of ActiveModelReference.MasterUnit.Label and if the value is m (meters), divide the textbox values by 1000 otherwise just use the textbox value. Does this sound feasible or am I missing something?