Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: Elfilagas от 06-07-2016, 14:53:17

Название: Найти позицию на чертеже
Отправлено: Elfilagas от 06-07-2016, 14:53:17
Добрый день,
Нужно найти позицию на чертеже, выделить ее и приблизить изображение этой позиции (как в AutoCAD).
Найти то нашёл, а с выделением не получается. Подскажите или в мануал натыкайте. )

Код - vb.net [Выбрать]
  1.             Dim oDoc As DrawingDocument = InvApp.ActiveDocument
  2.             Dim Posit As String = InputBox("Введите номер позиции:", "Поиск позиции на чертеже.", "")
  3.             Dim oSheet As Sheet
  4.             Dim oBalloon As Balloon
  5.             Dim oBalloonValueSet As BalloonValueSet
  6.             For Each oSheet In oDoc.Sheets
  7.                 For Each oBalloon In oSheet.Balloons
  8.                     For Each oBalloonValueSet In oBalloon.BalloonValueSets
  9.                         If Posit = oBalloonValueSet.Value Then
  10.                             'Как же тебя выделить то?
  11.                         End If
  12.                     Next
  13.                 Next
  14.             Next
Название: Re: Найти позицию на чертеже
Отправлено: Алексей Романов от 06-07-2016, 17:03:27
Найти то нашёл, а с выделением не получается.
В соседней теме было...
Код - Visual Basic [Выбрать]
  1. If Posit = oBalloonValueSet.value Then
  2.     'Как же тебя выделить то?
  3.    If oDoc.SelectSet.Count > 0 Then oDoc.SelectSet.Clear
  4.     oDoc.SelectSet.Select oBalloon
  5. End If
Код на ВБА!
А вот приближать рамкой придется...
Название: Re: Найти позицию на чертеже
Отправлено: Elfilagas от 06-07-2016, 17:24:00
Спасибо, еще добавил переключение листа, а то отображал позиции на активном:
Код - vb.net [Выбрать]
  1. oBalloon.Parent.Activate()
А про приближение рамкой - это как делается?
Хотя лучше применение вида, чтобы весь лист виден был, как при открытии чертежа, т.к. в принципе выделенные позиции достаточно сложно не заменить, да и бывают случаи, когда одна позиция несколько раз показывается.


Название: Re: Найти позицию на чертеже
Отправлено: Elfilagas от 08-07-2016, 09:06:47
Если кому пригодится:           
           
Код - vb.net [Выбрать]
  1.             Dim oDoc As DrawingDocument = InvApp.ActiveDocument
  2.             Dim Posit As String = InputBox("Введите номер позиции:", "Поиск позиции на чертеже.", "")
  3.             Dim oSheet As Sheet
  4.             Dim oBalloon As Balloon
  5.             Dim oBalloonValueSet As BalloonValueSet
  6.             Dim Flag As Boolean = False
  7.             Dim oBalloonColl As Inventor.ObjectCollection = InvApp.TransientObjects.CreateObjectCollection()
  8.             Dim ListColl As New List(Of String)
  9.  
  10.             For Each oSheet In oDoc.Sheets
  11.                 For Each oBalloon In oSheet.Balloons
  12.                     For Each oBalloonValueSet In oBalloon.BalloonValueSets
  13.                         If Posit = oBalloonValueSet.Value Then
  14.                             If oDoc.ActiveSheet.Name = oBalloon.Parent.Name Then
  15.                                 oBalloonColl.Add(oBalloon)
  16.                             Else
  17.                                 ListColl.Add(oBalloon.Parent.Name)
  18.                             End If
  19.                             Flag = True
  20.                         End If
  21.                     Next
  22.                 Next
  23.             Next
  24.  
  25.             If oDoc.SelectSet.Count > 0 Then oDoc.SelectSet.Clear()
  26.             oDoc.SelectSet.SelectMultiple(oBalloonColl)
  27.  
  28.             If Flag = False Then MsgBox("Позиция " & Chr(34) & Posit & Chr(34) & " на чертеже не найдена.")
  29.  
  30.             ListColl.Sort()
  31.             Dim n As String = ""
  32.             For i = 0 To ListColl.Count - 1
  33.                 If InStr(1, n, ListColl(i)) = 0 Then n = n & vbCrLf & ListColl(i)
  34.             Next
  35.  
  36.             If n <> "" Then
  37.                 MsgBox("Позиция " & Chr(34) & Posit & Chr(34) & " найдена на листе(ах): " & n)
  38.             End If
  39.  
  40.             InvApp.CommandManager.StartCommand(Inventor.CommandIDEnum.kZoomAllCommand)

Единственное не понял почему не работает:
Код - vb.net [Выбрать]
  1. InvApp.ActiveView.Camera.Fit()
Поэтому сделал через команду. Что не так?