天天看點

讓草圖符号附着到氣球

今天在論壇上看到一個文章,問起如何讓草圖符号(Sketched Symbol)附着到氣球(Balloon)。使用者界面是能做的,但API失敗。經過一些研究,發現這裡有些技巧。

先來看看使用者界面怎麼做:

首選選擇草圖符号, 右鍵菜單裡有一項

讓草圖符号附着到氣球
讓草圖符号附着到氣球

Inventor會讓你選擇位置作為引線的端點,在氣球附近移動滑鼠,你會發現在氣球圓圈周上,滑鼠會變成一個小十字,而在其它位置還是箭頭。這說明有效的位置隻是氣球的圓周。而使用者的API代碼使用的是氣球圓心位置,于是失敗了。另外發現,使用者界面操作,先選擇氣球上的點,接着是草圖符号點位置。而API的引線點集合首先需要添加草圖符号點位置, 接着是氣球上的點。否則也會失敗。

讓草圖符号附着到氣球
讓草圖符号附着到氣球

以下是個簡單代碼,假定你有一張圖紙,已經建立了一個氣球和草圖符号。拾取它們,然後運作。它取用氣球圓半徑,從圓心(氣球的位置Position)沿着X方向計算出圓周上的一個點。

  Public Sub AttachSymbolToBalloon()

        ' 假定打開一張工程圖

        Dim oDrawDoc As DrawingDocument

        oDrawDoc = ThisApplication.ActiveDocument

        ' 擷取目前圖紙

        Dim oActiveSheet As Sheet

        oActiveSheet = oDrawDoc.ActiveSheet

        ' 假定拾取了氣球和草圖符号

        Dim oBalloon As Balloon

        oBalloon = oDrawDoc.SelectSet.Item(1)

        Dim oSS As SketchedSymbol

        oSS = oDrawDoc.SelectSet.Item(2)

        '需要的引線點集合 

        Dim oObjColl As ObjectCollection

        oObjColl = ThisApplication.TransientObjects.CreateObjectCollection()

        ' 第一個是草圖符号位置點 

        Dim oFirstPt1 As Point2d

        oFirstPt1 = ThisApplication.TransientGeometry.CreatePoint2d(oSS.Position.X, oSS.Position.Y)

        '第二個是氣球圓周上某點 

        Dim oPtItent As Point2d

        oPtItent = ThisApplication.TransientGeometry.CreatePoint2d( _

        oBalloon.Position.X + oBalloon.Style.BalloonDiameter / 2, _

           oBalloon.Position.Y) 

        Dim oBalloonIntent As GeometryIntent

        oBalloonIntent = oActiveSheet.CreateGeometryIntent(oBalloon, oPtItent)

        ' 注意添加順序

        Call oObjColl.Add(oFirstPt1)

        Call oObjColl.Add(oBalloonIntent)

        ' 加入引線。

        Call oSS.Leader.AddLeader(oObjColl)

    End Sub

讓草圖符号附着到氣球