Прошу помощи с кодом. VBA

Автор Тема: Прошу помощи с кодом. VBA  (Прочитано 15517 раз)

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

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #15 : 09-02-2019, 02:06:51 »
В одном месте dim1Obj, а в другом dimObj
да Ё-моё... исправил все. работает.
Спасибо Александр большое.
Сажусь после работы за комп, концентрация совсем никуда...

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #16 : 10-02-2019, 03:20:19 »
Код - Visual Basic [Выбрать]
  1. Public Function KILLandLOOT(mass1 As String, alpha As Variant)
  2.     Dim dim1Obj As AcadObject
  3.     Dim midObj As AcadObject
  4.     Dim i As Integer
  5.    
  6.     Set midObj = ThisDrawing.HandleToObject(mass1)
  7.     Set dim1Obj = midObj.Copy
  8.     dim1Obj.Arrowhead1Type = acArrowBoxBlank: dim1Obj.Arrowhead2Type = acArrowBoxBlank
  9.     dim1Obj.Color = acRed
  10.     dim1Obj.ExtensionLineOffset = 0: dim1Obj.ArrowheadSize = 0: dim1Obj.ExtensionLineExtend = 0
  11.  
  12.     Dim expObj As Variant
  13.     expObj = dim1Obj.Explode
  14.   ' Проходим по взорванному объекту, отображая
  15.  ' тип каждого полученного объекта другим цветом
  16.    For i = 0 To UBound(expObj)
  17.     expObj(i).Color = acRed
  18.     expObj(i).Update
  19.     MsgBox "Тип объекта " & i & ": " & expObj(i).ObjectName
  20.     expObj(i).Color = acByLayer
  21.     expObj(i).Update
  22.   Next
  23. End Function



1. Александр, не подскажете почему не работает explode применительно к размерам?
И 2. Дайте ссылку на какой-нибудь ресурс где можно по vba что-нибудь прочитать. А то уже неудобно дергать вас глупыми вопросами.

Я так понял explode не работает с AcadObject?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом. VBA
« Ответ #17 : 10-02-2019, 14:49:41 »
1. Александр, не подскажете почему не работает explode применительно к размерам?
Увы, но в очередной раз мы попадаем на ограничение VBA в AutoCAD. Только для этих типов объектов есть метод Explode:

P.S.: Рекомендую побыстрее забыть про VBA и перейти на .NET (лучше C#) для AutoCAD

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом. VBA
« Ответ #18 : 10-02-2019, 15:03:42 »
Вот так можно расчленить размер:
Код - Visual Basic [Выбрать]
  1. Option Explicit
  2.  
  3. Sub XplodeDims()
  4.  
  5. Dim objDim As AcadEntity
  6. Dim pt As AcadPoint
  7. Dim strCmd As String
  8.  
  9. strCmd = "_Explode" & vbCr
  10.  
  11. On Error Resume Next
  12. Utility.GetEntity objDim, pt, "Выберите размер"
  13.  
  14. If Err.Number <> -2147352567 Then
  15.  
  16.   If InStr(1, TypeName(objDim), "IAcadDim") = 0 Then
  17.    ' Это не размер
  18.   MsgBox "Это не размер!", vbCritical
  19.   Else
  20.    strCmd = strCmd & "(handent " & Chr(34)
  21.    strCmd = strCmd & objDim.Handle & Chr(34)
  22.    strCmd = strCmd & ")" & vbCr
  23.   End If
  24.  
  25. End If
  26.  
  27. On Error GoTo 0
  28. ' Находим последний элемент до расчленения
  29. Dim nLastEnt As Integer
  30. nLastEnt = ThisDrawing.ModelSpace.Count - 1
  31.  
  32. ' Запускаем _EXPLODE
  33. SendCommand strCmd & vbCr
  34.  
  35. ' Находим последний элемент после расчленения
  36. Dim nLastEntNew As Integer
  37. nLastEntNew = ThisDrawing.ModelSpace.Count - 1
  38.  
  39. MsgBox ("Новых элементов: " & CStr(nLastEntNew - nLastEnt + 1))
  40.  
  41. Dim i As Integer
  42.  
  43. For i = nLastEnt To nLastEntNew
  44.   ' Очередной расчленённый объект
  45.  MsgBox (ThisDrawing.ModelSpace.Item(i).ObjectName)
  46. Next
  47. End Sub
« Последнее редактирование: 10-02-2019, 16:44:40 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Прошу помощи с кодом. VBA
« Ответ #19 : 10-02-2019, 17:55:07 »
А если попробовать найти блок отвечающий за размер и взрывать уже его, для блока метод explode вроде работает...
Да, придется проверить смещения хендла для различных типов размеров, но это всяко лучше командного метода.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом. VBA
« Ответ #20 : 10-02-2019, 17:57:49 »
А если попробовать найти блок отвечающий за размер и взрывать уже его, для блока метод explode вроде работает...
Да, придется проверить смещения хендла для различных типов размеров, но это всяко лучше командного метода.
Лучше всего вообще не пользоваться VBA. Смещение хендла в разных версиях AutoCAD (а возможно и внутри) одной может быть разным. А если чертеж пришел (не дай Бог) из какого-то клона AutoCAD, то может быть совсем печально...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом. VBA
« Ответ #21 : 10-02-2019, 18:42:58 »
А если попробовать найти блок отвечающий за размер и взрывать уже его, для блока метод explode вроде работает...
Кстати, блок взрывать не нужно (и невозможно) - это же не INSERT, а BLOCK. По нему можно просто пройтись итератором.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Прошу помощи с кодом. VBA
« Ответ #22 : 10-02-2019, 19:29:23 »
Кстати, блок взрывать не нужно (и невозможно) - это же не INSERT, а BLOCK. По нему можно просто пройтись итератором.
ну я примерно на это и намекал в 7 сообщении...

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #23 : 10-02-2019, 22:25:55 »
P.S.: Рекомендую побыстрее забыть про VBA и перейти на .NET (лучше C#) для AutoCAD

Да, я уже склоняюсь потихоньку к такому выводу. Вот только думал, что вместо С# будет Piton (у меня светит впереди еще необходимость разбираться с Рино грасхоппером, а там питон), но  не суть. Может параллельно будет Питон с C#. Самое главное сколько будет времени свободного.

Вот в сети нарыл системную переменную DIMASSOC=0 (при 0 вставляет размер взорванным) , но как ее прикрутить к программе и возможно ли это вообще не понял пока.
Но в целом я так примерно и думал в направлении запуска внешней команды, единственно долго бы тупил, без подсказки, как это правильно оформить :)

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #24 : 10-02-2019, 22:28:46 »
А если попробовать найти блок отвечающий за размер и взрывать уже его, для блока метод explode вроде работает...
Да, придется проверить смещения хендла для различных типов размеров, но это всяко лучше командного метода.
для меня это наверное пока рановато. Идея в принципе понятна, но я вязну на раз два в особенностях автокада (+ совсем начальные знания по vba)...

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом. VBA
« Ответ #25 : 11-02-2019, 00:12:20 »
Вот в сети нарыл системную переменную DIMASSOC=0 (при 0 вставляет размер взорванным) , но как ее прикрутить к программе и возможно ли это вообще не понял пока.
Размеры у тебя уже вставлены, так что никакая системная переменная на них не повлияет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #26 : 11-02-2019, 01:14:30 »
Вот так можно расчленить размер:
Спасибо, размеры взрываются, единственно автокад считает что после взрыва добавлен только один элемент (в моем случае это AcDbAlignedDimension) хотя все в модели взорвано на кусочки...

Размеры у тебя уже вставлены, так что никакая системная переменная на них не повлияет.
а если скопировать размер с этой системной переменной=0 , так не получится (это уже чисто ради интереса)?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом. VBA
« Ответ #27 : 11-02-2019, 01:19:15 »
Спасибо, размеры взрываются, единственно автокад считает что после взрыва добавлен только один элемент (в моем случае это AcDbAlignedDimension) хотя все в модели взорвано на кусочки...
Ты проверял с моим кодом? Размеры у тебя в модели или в листе? Если в листе, то вместо modelspace должно быть paperspace.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом. VBA
« Ответ #28 : 11-02-2019, 01:20:57 »
а если скопировать размер с этой системной переменной=0 , так не получится (это уже чисто ради интереса)?
Нет конечно. Эта системная переменная влияет только на создание размеров командой AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #29 : 11-02-2019, 01:35:44 »
Ты проверял с моим кодом? Размеры у тебя в модели или в листе? Если в листе, то вместо modelspace должно быть paperspace.
да, проверял с Вашим кодом. Размеры в модели.