Simulating balloon creation on drawing sheet

By Xiaodong Liang

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(                &#160
;   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

Comments

2 responses to “Simulating balloon creation on drawing sheet”

  1. John C Avatar
    John C

    Hello,
    Is there a way to add the balloon from the parts list without actually drawing it? Like creating the balloon as from when a user is actually selecting from the balloon ribbon on the top?
    I am using this piece of code but could not figure out the [virtual component as object] part:
    Dim oObjBalloon As ObjectCollection
    oObjBalloon = invApp.TransientObjects.CreateObjectCollection
    Call oObjBalloon.Add(oTG.CreatePoint2d(22, 17))
    Call oObjBalloon.Add(oTG.CreatePoint2d(20, 19.3))
    Dim oBalloon As Balloon
    oBalloon = SSheet.Balloons.Add(oObjBalloon, oPartslist.PartsListRows.Item(1))

  2. Really trying to understand this

Leave a Reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading