this should be quite simple, but it's driving me mad.
I'm adding some text boxes from the API as Callout Balloons. For some of them, I need to adjust the size so the text inside wraps into the surface. As far as I know, this should work:
Dim objBalloon As SolidEdgeFrameworkSupport.Balloon
objBalloon = balloons.Add(0.0, 0.0, 0.0)
objBalloon.Style.Name = strMyStyle 'My style!
objBalloon.TextScale = dMyScale
'API Docs suggest that width should be defined prior to change widthmode
objBalloon.CalloutTextWidth = dWith
objBalloon.CalloutTextWidthMode = SolidEdgeFrameworkSupport.DimCalloutTextWidthModeConstants.igDimCalloutFixedWrapText
objBalloon.BalloonText = strMyText
objBalloon.Callout = 1
objBalloon.CalloutBorder = False
However, when the app finishes, the text is not wrapped. It retains default width mode (fit to content). The weird thing is that, if you double-click it to edit the properties and, without modifying anything, you close the window, the width mode gets updated with the wrapped value (unfortunately, width measure value is not updated).
It seems that the balloon needs some sort of "refresh" in order to get correctly updated, but I don't know how to force that refresh from the API.
The only workaround is creating an initial balloon correctly formatted and use Copy/Paste. This is far from elegant and slower, unfortunately.
I'm not sure that I fully understand the issue or am able to fully reproduce what you're describing but in my testing, this code got the text to wrap. I understand that my code goes against the API documentation but it's obvious that the order of API calls matters. This still may not be the "correct" approach but it does produce a different result.
From what I can gather, setting the BalloonText property a 2nd time before setting the CalloutTextWidth is the trick (hack).
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim application = DirectCast(Marshal.GetActiveObject("SolidEdge.application"), SolidEdgeFramework.Application)
Dim draftDocument = application.GetActiveDocument(Of SolidEdgeDraft.DraftDocument)()
Dim sheet = draftDocument.ActiveSheet
Dim balloons = TryCast(sheet.Balloons, SolidEdgeFrameworkSupport.Balloons)
Dim balloon = balloons.Add(0.05, 0.05, 0)
balloon.CalloutTextWidthMode = SolidEdgeFrameworkSupport.DimCalloutTextWidthModeConstants.igDimCalloutFixedWrapText
balloon.BalloonText = "THIS IS A TEST"
balloon.Callout = 1
balloon.CalloutBorder = False
balloon.BalloonText = balloon.BalloonText
balloon.CalloutTextWidth = 0.015
' Ghosting occurres (on my machine) so force a window update.
Dim sheetWindow = CType(application.ActiveWindow, SolidEdgeDraft.SheetWindow)