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

ADN Club => VBA => Тема начата: antonovamarmihalovna от 10-12-2021, 10:27:04

Название: Определение габаритов группы выбранных объектов
Отправлено: antonovamarmihalovna от 10-12-2021, 10:27:04
Добрый день,
макросами в автокаде начала заниматься  с весны 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 и макрос тютюк,
пыталась разобраться и читать справки, но видимо не догоняю, поэтому обращаюсь к вам, знатоки, может вы мне втолкуете или дадите совет, как осуществить это
Название: Re: Определение габаритов группы выбранных объектов
Отправлено: antonovamarmihalovna от 10-12-2021, 14:29:54
разобралась
заместо acSelSet.SelectOnScreen надо acSelSet.Select acSelectionSetAll
Название: Re: Определение габаритов группы выбранных объектов
Отправлено: Александр Ривилис от 10-12-2021, 15:22:20
antonovamarmihalovna,
Напоминаю про правило форматирования кода на нашем форуме (у меня в подписи)!
Название: Re: Определение габаритов группы выбранных объектов
Отправлено: Александр Ривилис от 10-12-2021, 15:23:29
разобралась
заместо acSelSet.SelectOnScreen надо acSelSet.Select acSelectionSetAll
Это выбор всего, а не того, что было предварительно выбрано.
Название: Re: Определение габаритов группы выбранных объектов
Отправлено: antonovamarmihalovna от 10-12-2021, 16:41:12
ой так приятно от вас получить ответ

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

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

огромненькое вам спасибо, видео посмотрела, буду делать так, но надеюсь что  буду находить решение вопросов на форуме, я только начинающий в этом, а тут уже тааакие знатоки
Название: Re: Определение габаритов группы выбранных объектов
Отправлено: Александр Ривилис от 10-12-2021, 17:47:06
а как тогда чтобы то что было предварительно выбрано.
Код - Visual Basic [Выбрать]
  1. acSelSet.Select acSelectionSetPrevious