Определение габаритов группы выбранных объектов

Автор Тема: Определение габаритов группы выбранных объектов  (Прочитано 7156 раз)

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

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

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Добрый день,
макросами в автокаде начала заниматься  с весны 2021, встала, так сказать, острейшая необходимость обработки туевой хучи давальческих разносортных чертежей.
на просторах интернета нашла такой код

Определение габаритов группы выбранных объектов
После запуска процедуры выберите несколько объектов и изображение будет масштабировано по их габаритам.
Код - Visual Basic [Выбрать]
  1. '@~~~~ Get the bounding box of a selection set ~~~~@
  2. Public Function GetSSBoundingBox(Min As Variant, _
  3. Max As Variant, objSet As AcadSelectionSet) As Boolean
  4.   Dim dblMaxX As Double
  5.   Dim dblMaxY As Double
  6.   Dim dblMinX As Double
  7.   Dim dblMinY As Double
  8.   Dim varMin As Variant
  9.   Dim varMax As Variant
  10.   Dim objEnt As AcadEntity
  11.   Dim objUtil As Object
  12.   On Error GoTo Err_Control
  13.   Set objUtil = ThisDrawing.Utility
  14.   objSet.Item(0).GetBoundingBox varMin, varMax
  15.   dblMinX = varMin(0)
  16.   dblMinY = varMin(1)
  17.   dblMaxX = varMax(0)
  18.   dblMaxY = varMax(1)
  19.   'Get the highs and lows
  20.  For Each objEnt In objSet
  21.     objEnt.GetBoundingBox varMin, varMax
  22.     If varMin(0) < dblMinX Then
  23.       dblMinX = varMin(0)
  24.     End If
  25.     If varMin(1) < dblMinY Then
  26.       dblMinY = varMin(1)
  27.     End If
  28.     If varMax(0) > dblMaxX Then
  29.       dblMaxX = varMax(0)
  30.     End If
  31.     If varMax(1) > dblMaxY Then
  32.       dblMaxY = varMax(1)
  33.     End If
  34.   Next objEnt
  35.   'Fill the arrays
  36.  objUtil.CreateTypedArray Min, vbDouble, dblMinX, dblMinY, 0
  37.   objUtil.CreateTypedArray Max, vbDouble, dblMaxX, dblMaxY, 0
  38.   GetSSBoundingBox = True
  39. Exit_Here:
  40.   Exit Function
  41. Err_Control:
  42.   MsgBox Err.Description
  43.   Resume Exit_Here
  44. End Function
  45.  
  46.  
  47. Public Sub Test_GetSSBoundingBox()
  48.   Dim acSelSet As AcadSelectionSet
  49.   Dim varMin As Variant
  50.   Dim varMax As Variant
  51.   Dim dblPnts(0 To 5) As Double
  52.  
  53.   Set acSelSet = ThisDrawing.SelectionSets.Add("TestGetSSBB")
  54.   acSelSet.SelectOnScreen
  55.   GetSSBoundingBox varMin, varMax, acSelSet
  56.   ZoomWindow varMin, varMax
  57. End Sub

но загвоздка в том, что объекты у меня уже выбранны и выбирать мне их acSelSet.SelectOnScreen не надо, НО если я их не выберу, то у меня не идёт стока Set objUtil = ThisDrawing.Utility и макрос тютюк,
пыталась разобраться и читать справки, но видимо не догоняю, поэтому обращаюсь к вам, знатоки, может вы мне втолкуете или дадите совет, как осуществить это
« Последнее редактирование: 10-12-2021, 15:21:33 от Александр Ривилис »

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

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
разобралась
заместо acSelSet.SelectOnScreen надо acSelSet.Select acSelectionSetAll

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
antonovamarmihalovna,
Напоминаю про правило форматирования кода на нашем форуме (у меня в подписи)!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
разобралась
заместо acSelSet.SelectOnScreen надо acSelSet.Select acSelectionSetAll
Это выбор всего, а не того, что было предварительно выбрано.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
ой так приятно от вас получить ответ

это acSelSet.Select acSelectionSetAll мне подходит но

а как тогда чтобы то что было предварительно выбрано.

огромненькое вам спасибо, видео посмотрела, буду делать так, но надеюсь что  буду находить решение вопросов на форуме, я только начинающий в этом, а тут уже тааакие знатоки

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
а как тогда чтобы то что было предварительно выбрано.
Код - Visual Basic [Выбрать]
  1. acSelSet.Select acSelectionSetPrevious
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение