今天在論壇上看到一個文章,問起如何讓草圖符号(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