Статьи > Тестирование статей
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
Навигация
Перейти к полной версии