Статьи > Тестирование статей

Inventor API: Как получить ItemNumber из DrawingCurve

(1/1)

Владимир Ананьев:
Иногда требуется найти DrawingBOMRow / BOMRow для заданного объекта DrawingCurve. Например, нужно выяснить ItemNumber, ассоциированный с компонентом, представленным на чертежном виде данной кривой.  В таких случаях наиболее простым решением является создание вспомогательного объекта Balloon.

Метод таков.  Мы создаем временный Balloon, который ссылается на заданную кривую на чертеже.  Если сделать это внутри транзакции, которая потом отменяется (Aborted), то внешне все будет выглядеть так, как если бы этот Balloon никогда и не создавался.

Допустим, мы имеем SketchedSymbol, в котором имеется TextBox с запрашиваемым значением (prompted entry), и у нас уже имеется вхождение этого обозначения, ассоциированное с некоей кривой (DrawingCurve).  Тогда приведенный ниже код можно использовать для обновления текста в эскизном обозначении.


--- Код - Visual Basic [Выбрать] ---Public Sub SetSketchedSymbolNumber()   Dim oDwg As DrawingDocument  Set oDwg = ThisApplication.ActiveDocument    ' SketchedSymbol должен быть выделен  Dim oSymbol As SketchedSymbol  Set oSymbol = oDwg.SelectSet(1)   ' Эскизное обозначение должно быть  ' ассоциировано с компонентом  Dim oNode As LeaderNode  Set oNode = oSymbol.Leader.AllLeafNodes(1)    Dim oCurve As DrawingCurve  Set oCurve = oNode.AttachedEntity.Geometry    Dim oSheet As Sheet  Set oSheet = oDwg.ActiveSheet    Dim oTO As TransientObjects  Set oTO = ThisApplication.TransientObjects    Dim oTG As TransientGeometry  Set oTG = ThisApplication.TransientGeometry    Dim oLeaderPoints As ObjectCollection  Set oLeaderPoints = oTO.CreateObjectCollection  ' Положение точки вставки временного обозначения  ' роли не играет - все равно убькм  Call oLeaderPoints.Add(oTG.CreatePoint2d(0, 0))   ' ItemNumber извлечём из временного обозначения  Dim sItemNumber As String    Dim oTM As TransactionManager  Set oTM = ThisApplication.TransactionManager    Dim oTransaction As Transaction  Set oTransaction = oTM.StartTransaction(oDwg, "TempTransaction")   Dim oGeometryIntent As GeometryIntent  Set oGeometryIntent = oSheet.CreateGeometryIntent(oCurve)  Call oLeaderPoints.Add(oGeometryIntent)    Dim oBalloon As Balloon  Set oBalloon = oSheet.Balloons.Add(oLeaderPoints, , kStructured)    ' We could also get the DrawingBOMRow and BOMRow  ' oBalloon.BalloonValueSets(1).ReferencedRow.BOMRow  ' but this time we just need the ItemNumber    ' oBalloon можеть дать не только ItemNumber,  ' но и ссылки на DrawingBOMRow и BOMRow:  ' oBalloon.BalloonValueSets(1).ReferencedRow.BOMRow  ' Но в данном случае эскизному обозначению нужен только ItemNumber  sItemNumber = oBalloon.BalloonValueSets(1).itemNumber    ' Эта транзакция не появится в стеке Undo/Redo и  ' внешне все быдет выглядеть так, будто  ' balloon и не существовал вовсе.  Call oTransaction.Abort   ' Обновление первого текстового бокса  ' в эскизном обозначении - впишем туда ItemNumber  Dim oBox As TextBox  Set oBox = oSymbol.Definition.Sketch.TextBoxes(1)                Call oSymbol.SetPromptResultText(oBox, sItemNumber)End Sub Ссылка на оригинал:
http://adndevblog.typepad.com/manufacturing/2013/11/get-itemnumber-from-the-drawingcurve.html

Навигация

[0] Главная страница сообщений

Перейти к полной версии