From Inventor 2009, API has provided the direct way to create balloon. Following is a code to mimic the creation of balloon, adding the balloon elements to a drawing sketch.
Private Sub DrawBalloon() ' assume we have got Inventor application 'set a reference to the drawing document 'this assumes a drawing document is active Dim oDrawDoc As DrawingDocument oDrawDoc = _InvApplication.ActiveDocument 'get the sketch on the sheet 'or create a new sketch on the active sheet Dim oSketch As DrawingSketch If oDrawDoc.ActiveSheet.Sketches.Count = 0 Then oSketch = oDrawDoc.ActiveSheet.Sketches.Add Else oSketch = oDrawDoc.ActiveSheet.Sketches(1) End If ' Create text using various overrides. Dim strBalloonText As String strBalloonText = InputBox("Enter text for the balloon:") Dim oTG As TransientGeometry oTG = _InvApplication.TransientGeometry ' Open the sketch for edit so the text boxes can be created. oSketch.Edit() Dim oPnt2d As Point2d oPnt2d = oTG.CreatePoint2d(10, 15) Dim sText As String sText = "" + _ strBalloonText + "" Dim oTextBox As TextBox oTextBox = oSketch.TextBoxes.AddFitted(  
; oTG.CreatePoint2d(oPnt2d.X + 2.0#, oPnt2d.Y + 2.0#), sText) Dim oTextBoxOrigin As Point2d oTextBoxOrigin = oTextBox.Origin 'draw the balloon If (Len(strBalloonText) > 0 And Len(strBalloonText) < 3) Then Dim oBalloonCtPt As Point2d oBalloonCtPt = oTG.CreatePoint2d oBalloonCtPt.X = oTextBoxOrigin.X + oTextBox.Width / 2 oBalloonCtPt.Y = oTextBoxOrigin.Y - oTextBox.Height / 2 Dim dBalloonRad As Double dBalloonRad = oTextBox.Width / 2.0# + 0.5 Dim oBalloon As SketchCircle oBalloon = oSketch.SketchCircles.AddByCenterRadius( oBalloonCtPt, dBalloonRad) 'draw the line connecting balloon and workpoint Dim dDist As Double dDist = Math.Sqrt((oBalloonCtPt.X - oPnt2d.X) * (oBalloonCtPt.X - oPnt2d.X) + (oBalloonCtPt.Y - oPnt2d.Y) * (oBalloonCtPt.Y - oPnt2d.Y)) Dim oLineEndPt As Point2d oLineEndPt = oTG.CreatePoint2d oLineEndPt.X = ((oPnt2d.X - oBalloonCtPt.X) * (dBalloonRad / dDist)) + oBalloonCtPt.X oLineEndPt.Y = ((oPnt2d.Y - oBalloonCtPt.Y) * (dBalloonRad / dDist)) + oBalloonCtPt.Y Dim oConnectLine As SketchLine oConnectLine = oSketch.SketchLines.AddByTwoPoints( oLineEndPt, oPnt2d) End If If (Len(strBalloonText) >= 3) Then Dim oBalloonLine1StartPt As Point2d oBalloonLine1StartPt = oTG.CreatePoint2d oBalloonLine1StartPt.X = oTextBoxOrigin.X oBalloonLine1StartPt.Y = oTextBoxOrigin.Y + 0.25 Dim oBalloonLine1EndPt As Point2d oBalloonLine1EndPt = oTG.CreatePoint2d oBalloonLine1EndPt.X = oTextBoxOrigin.X + oTextBox.Width oBalloonLine1EndPt.Y = oTextBoxOrigin.Y + 0.25 Dim oBalloonLine2StartPt As Point2d oBalloonLine2StartPt = oTG.CreatePoint2d oBalloonLine2StartPt.X = oTextBoxOrigin.X oBalloonLine2StartPt.Y = oTextBoxOrigin.Y - oTextBox.Height - 0.25 Dim oBalloonLine2EndPt As Point2d oBalloonLine2EndPt = oTG.CreatePoint2d oBalloonLine2EndPt.X = oTextBoxOrigin.X + oTextBox.Width oBalloonLine2EndPt.Y = oTextBoxOrigin.Y - oTextBox.Height - 0.25 C
all oSketch.SketchLines.AddByTwoPoints( oBalloonLine1StartPt, oBalloonLine1EndPt) Call oSketch.SketchLines.AddByTwoPoints( oBalloonLine2StartPt, oBalloonLine2EndPt) Dim oBalloonArc1CtPt As Point2d oBalloonArc1CtPt = oTG.CreatePoint2d( (oBalloonLine1StartPt.X + oBalloonLine2StartPt.X) / 2, (oBalloonLine1StartPt.Y + oBalloonLine2StartPt.Y) / 2) Dim oBalloonArc2CtPt As Point2d oBalloonArc2CtPt = oTG.CreatePoint2d((oBalloonLine1EndPt.X + oBalloonLine2EndPt.X) / 2, (oBalloonLine1EndPt.Y + oBalloonLine2EndPt.Y) / 2) oSketch.SketchArcs.AddByCenterStartEndPoint( oBalloonArc1CtPt, oBalloonLine1StartPt, oBalloonLine2StartPt) oSketch.SketchArcs.AddByCenterStartEndPoint( oBalloonArc2CtPt, oBalloonLine1EndPt, oBalloonLine2EndPt, False) Dim dDist, dBalloonRad, oLineEndPt, oConnectLine 'draw the line connecting balloon and workpoint dDist = Math.Sqrt((oBalloonArc1CtPt.X - oPnt2d.X) * (oBalloonArc1CtPt.X - oPnt2d.X) + (oBalloonArc1CtPt.Y - oPnt2d.Y) * (oBalloonArc1CtPt.Y - oPnt2d.Y)) dBalloonRad = Math.Sqrt((oBalloonArc1CtPt.X - oBalloonLine1StartPt.X) * (oBalloonArc1C
tPt.X - oBalloonLine1StartPt.X) + (oBalloonArc1CtPt.Y - oBalloonLine1StartPt.Y) * (oBalloonArc1CtPt.Y - oBalloonLine1StartPt.Y)) oLineEndPt = oTG.CreatePoint2d oLineEndPt.X = ((oPnt2d.X - oBalloonArc1CtPt.X) * (dBalloonRad / dDist)) + oBalloonArc1CtPt.X oLineEndPt.Y = ((oPnt2d.Y - oBalloonArc1CtPt.Y) * (dBalloonRad / dDist)) + oBalloonArc1CtPt.Y oConnectLine = oSketch.SketchLines.AddByTwoPoints (oLineEndPt, oPnt2d) End If ' Exit the sketch from the edit environment. oSketch.ExitEdit() End Sub

Leave a Reply