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

Автор Тема: Inventor API: Как получить ItemNumber из DrawingCurve  (Прочитано 5892 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Владимир АнаньевАвтор темы

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

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

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

Код - Visual Basic [Выбрать]
  1. Public Sub SetSketchedSymbolNumber()
  2.  
  3.   Dim oDwg As DrawingDocument
  4.   Set oDwg = ThisApplication.ActiveDocument
  5.  
  6.   ' SketchedSymbol должен быть выделен
  7.  Dim oSymbol As SketchedSymbol
  8.   Set oSymbol = oDwg.SelectSet(1)
  9.  
  10.   ' Эскизное обозначение должно быть
  11.  ' ассоциировано с компонентом
  12.  Dim oNode As LeaderNode
  13.   Set oNode = oSymbol.Leader.AllLeafNodes(1)
  14.  
  15.   Dim oCurve As DrawingCurve
  16.   Set oCurve = oNode.AttachedEntity.Geometry
  17.  
  18.   Dim oSheet As Sheet
  19.   Set oSheet = oDwg.ActiveSheet
  20.  
  21.   Dim oTO As TransientObjects
  22.   Set oTO = ThisApplication.TransientObjects
  23.  
  24.   Dim oTG As TransientGeometry
  25.   Set oTG = ThisApplication.TransientGeometry
  26.  
  27.   Dim oLeaderPoints As ObjectCollection
  28.   Set oLeaderPoints = oTO.CreateObjectCollection
  29.   ' Положение точки вставки временного обозначения
  30.  ' роли не играет - все равно убькм
  31.  Call oLeaderPoints.Add(oTG.CreatePoint2d(0, 0))
  32.  
  33.   ' ItemNumber извлечём из временного обозначения
  34.  Dim sItemNumber As String
  35.  
  36.   Dim oTM As TransactionManager
  37.   Set oTM = ThisApplication.TransactionManager
  38.  
  39.   Dim oTransaction As Transaction
  40.   Set oTransaction = oTM.StartTransaction(oDwg, "TempTransaction")
  41.  
  42.   Dim oGeometryIntent As GeometryIntent
  43.   Set oGeometryIntent = oSheet.CreateGeometryIntent(oCurve)
  44.   Call oLeaderPoints.Add(oGeometryIntent)
  45.  
  46.   Dim oBalloon As Balloon
  47.   Set oBalloon = oSheet.Balloons.Add(oLeaderPoints, , kStructured)
  48.  
  49.   ' We could also get the DrawingBOMRow and BOMRow
  50.  ' oBalloon.BalloonValueSets(1).ReferencedRow.BOMRow
  51.  ' but this time we just need the ItemNumber
  52.  
  53.   ' oBalloon можеть дать не только ItemNumber,
  54.  ' но и ссылки на DrawingBOMRow и BOMRow:
  55.  ' oBalloon.BalloonValueSets(1).ReferencedRow.BOMRow
  56.  ' Но в данном случае эскизному обозначению нужен только ItemNumber
  57.  sItemNumber = oBalloon.BalloonValueSets(1).itemNumber
  58.  
  59.   ' Эта транзакция не появится в стеке Undo/Redo и
  60.  ' внешне все быдет выглядеть так, будто
  61.  ' balloon и не существовал вовсе.
  62.  Call oTransaction.Abort
  63.  
  64.   ' Обновление первого текстового бокса
  65.  ' в эскизном обозначении - впишем туда ItemNumber
  66.  Dim oBox As TextBox
  67.   Set oBox = oSymbol.Definition.Sketch.TextBoxes(1)
  68.              
  69.   Call oSymbol.SetPromptResultText(oBox, sItemNumber)
  70. End Sub
  71.  
Ссылка на оригинал:
http://adndevblog.typepad.com/manufacturing/2013/11/get-itemnumber-from-the-drawingcurve.html

« Последнее редактирование: 27-11-2013, 21:42:45 от Александр Ривилис »