Revision Table Balloons & API

I’ve been working on a drawing template update tool and have found almost everything I need to get things working. The remaining, albeit small, portion that I’d like to add is leaders to Revision Balloons, if they had them previously.

I’m using IAnnotation.SetLeader in order to create a leader that I can modify. From there, I’m using IAnnotation.SetPosition and IAnnotation.SetLeaderAttachmentPointAtIndex and it appears to work well. I’m just not sure why it’s moving when it’s rebuilt.

Does anyone have experience with this?

GIFs:
This is the macro running without any rebuilds of any type
After Revision Update

This is after the macro has run and the drawing is rebuilt. The revision balloon moves
Moving Balloon

@PeterBrinkhuis might have an answer for this one.

Question should probably read:

SOLIDWORKS balloon note mysteriously moved after rebuild :exploding_head: :exploding_head:

I saw the post and didn’t really have an idea yet :sweat_smile: can you at least post the code so we’re not just guessing?

The note needs to be attached to geometry. Maybe you’re breaking that link? I’ve seen notes show up at the origin before, but I don’t remember when or why.

Here’s the code pertaining to the revision bubble addition and leader modification.
You got me thinking that I might need to call some method of attachment to place the end of the leader on the entity that held it before. I’ll have to look into this as well, but if you have any other suggestions in the meantime, I’d appreciate it.

Set iNote = swDraw.InsertRevisionSymbol(symbolPosition(0), symbolPosition(1))
Set iAnno = iNote.GetAnnotation

If bwasAttached Then
	Dim g As Integer
	Dim ileaderIndex As Integer
	For g = 0 To UBound(leaderInfoIndex)
		Dim tempArray As Variant
		tempArray = leaderInfoIndex(g)
		If Not IsEmpty(tempArray) Then
			If CStr(tempArray(0)) = iNote.GetText Then
				ileaderIndex = g
				Exit For
			End If
		End If
	Next g
	
	Dim leaderInformationArray() As Variant
	Dim leaderInformation() As Double
	leaderInformationArray = leaderInfo(ileaderIndex)
	leaderInformation = leaderInformationArray(arrayIndex)
	
	Dim bRet As Boolean
	Dim iRet As Long
	
	iRet = iAnno.SetLeader3(swLeaderStyle_e.swBENT, swLeaderSide_e.swLS_SMART, True, True, False, False)
	
	swModel.Rebuild swRebuildOptions_e.swRebuildAll
	Dim sPos() As Double
	sPos = iAnno.GetPosition
	iAnno.SetPosition2 symbolPosition(0), symbolPosition(1), sPos(2)
	
	swModel.Rebuild swRebuildOptions_e.swRebuildAll
	
	iAnno.Select3 False, Nothing
	bRet = iAnno.SetLeaderAttachmentPointAtIndex(0, leaderInformation(0), leaderInformation(1), leaderInformation(2))
	bRet = iAnno.SetLeaderAttachmentPointAtIndex(1, leaderInformation(3), leaderInformation(4), leaderInformation(5))
	If bExtraLeader Then
		bRet = iAnno.SetLeaderAttachmentPointAtIndex(2, leaderInformation(6), leaderInformation(7), leaderInformation(8))
	End If
End If

That code doesn’t compile since it’s just a section of your macro. We can’t test it without making a whole bunch of assumptions.

I would still guess that you need to attach the annotation to an entity. Here’s the method for that:
https://help.solidworks.com/2018/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IAnnotation~SetAttachedEntities.html

@PeterBrinkhuis You were on the right track with this. Unfortunately I can’t share the full source code, as I’m sure you understand. Setting the attached entities worked to get the notes to stay in their place. They do move a tiny bit, however they point to the correct spot which is what I was initially trying to accomplish.

2 Likes