It's been a while but I've found code (credits to Taking it to the next level: Drawing Automation) that made me able to add balloons. It's just not finding an object reference for the midPoint.
Sub Main()
Dim oDrawDoc As DrawingDocument = ThisApplication.ActiveDocument
Dim oActiveSheet As Sheet = oDrawDoc.ActiveSheet
Dim oDrawingView As DrawingView = oActiveSheet.DrawingViews.Item(1)
Dim oAssemblyDoc As AssemblyDocument = oDrawingView.ReferencedDocumentDescriptor.ReferencedDocument
Dim oTG As TransientGeometry = ThisApplication.TransientGeometry
Dim oOccs As Inventor.ComponentOccurrences = oAssemblyDoc.ComponentDefinition.Occurrences
For Each oOcc As ComponentOccurrence In oOccs
If oOcc.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
Call TraverseSubAssy(oActiveSheet, oDrawingView, oTG, oOcc.SubOccurrences)
Else
Call CreateBalloon(oActiveSheet, oDrawingView, oTG, oOcc)
End If
Next
End Sub
Private Sub TraverseSubAssy(oActiveSheet As Sheet, oDrawingView As DrawingView, oTG As TransientGeometry, oOccs As ComponentOccurrences)
For Each oOcc As ComponentOccurrence In oOccs
If oOcc.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
Call TraverseSubAssy(oActiveSheet, oDrawingView, oTG, oOcc.SubOccurrences)
Else
Call CreateBalloon(oActiveSheet, oDrawingView, oTG, oOcc)
End If
Next
End Sub
Public Sub CreateBalloon(oActiveSheet As Sheet, oDrawingView As DrawingView, oTG As TransientGeometry, oOcc As ComponentOccurrence)
Dim oModelDoc As PartDocument = oOcc.Definition.Document
Dim oObjs As ObjectCollection = oModelDoc.AttributeManager.FindObjects("iLogicEntityNameSet", "iLogicEntityName", "Balloon")
If oObjs.Count = 0 Then
Exit Sub
End If
Dim oFace As Face
oFace = oObjs.Item(1)
Dim oFaceProxy As FaceProxy
oOcc.CreateGeometryProxy(oFace, oFaceProxy)
Dim oDrawCurves As DrawingCurvesEnumerator
oDrawCurves = oDrawingView.DrawingCurves(oFaceProxy)
Dim oDrawingCurve As DrawingCurve
oDrawingCurve = oDrawCurves.Item(1)
Dim midPoint As Point2d = Nothing
midPoint = oDrawingCurve.MidPoint
Dim oLeaderPoints As ObjectCollection = ThisApplication.TransientObjects.CreateObjectCollection
oLeaderPoints.Add(oTG.CreatePoint2d(midPoint.X, midPoint.Y ))
Dim geoIntent As GeometryIntent = oActiveSheet.CreateGeometryIntent(oDrawingCurve, .5)
oLeaderPoints.Add(geoIntent)
Dim oBalloon As Balloon = Nothing
oBalloon = oActiveSheet.Balloons.Add(oLeaderPoints)
End Sub