Найти позицию на чертеже

Автор Тема: Найти позицию на чертеже  (Прочитано 4453 раз)

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

Оффлайн ElfilagasАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Найти позицию на чертеже
« : 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

Отмечено как Решение Elfilagas 08-07-2016, 09:05:28

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Re: Найти позицию на чертеже
« Ответ #1 : 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
Код на ВБА!
А вот приближать рамкой придется...

Оффлайн ElfilagasАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Найти позицию на чертеже
« Ответ #2 : 06-07-2016, 17:24:00 »
Спасибо, еще добавил переключение листа, а то отображал позиции на активном:
Код - vb.net [Выбрать]
  1. oBalloon.Parent.Activate()
А про приближение рамкой - это как делается?
Хотя лучше применение вида, чтобы весь лист виден был, как при открытии чертежа, т.к. в принципе выделенные позиции достаточно сложно не заменить, да и бывают случаи, когда одна позиция несколько раз показывается.


« Последнее редактирование: 07-07-2016, 16:44:23 от Elfilagas »

Оффлайн ElfilagasАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Re: Найти позицию на чертеже
« Ответ #3 : 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()
Поэтому сделал через команду. Что не так?