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

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

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

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #45 : 11-02-2019, 22:18:28 »
Ну теперь становится ясно, что проблема в этих панельках.
как появится время попробую выяснить конкретнее, что является причиной такого поведения автокада...

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #46 : 12-02-2019, 22:23:11 »
Локализовал причину.
Макрос запускался через найденный в интернете кусок кода на LISPe. Вот что значит использовать то, что до конца не понимаешь как работает :))
Прошу прощения , что напряг народ очередной глупостью...

С этого варианта запуска макрос работает не корректно...
(зачем я его запихивал уже и не помню)
Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:dtest2 ()
  2.   (vl-load-com)
  3.   (vla-runmacro (vlax-get-acad-object) "C:/DVB/test.dvb!XplodeDims")
  4.   (while (/= (logand (getvar "cmdactive") 31) 0)
  5.   (command pause))
  6.   (princ)
  7. )

А если через: "^C^C-vbarun C:/DVB/test.dvb!XplodeDims" то все работает корректно...


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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом. VBA
« Ответ #47 : 12-02-2019, 22:32:41 »
DMA,
Вызов из lisp'а кода на VBA иногда приводит к таким проблемам.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #48 : 12-02-2019, 23:36:23 »
Вызов из lisp'а кода на VBA иногда приводит к таким проблемам.
А есть альтернативный код запускающий через Lisp макрос VBA работающий с выбором пользователя. Напрямую как я выше написал работает Ваш код. В моем макросе выбор набором примитивов работать не хочет.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом. VBA
« Ответ #49 : 12-02-2019, 23:41:25 »
А есть альтернативный код запускающий через Lisp макрос VBA работающий с выбором пользователя.
Код - Auto/Visual Lisp [Выбрать]
  1. (command "-VBARUN" "C:/DVB/test.dvb!XplodeDims")
В последних версиях AutoCAD наверное:
Код - Auto/Visual Lisp [Выбрать]
  1. (command-s "-VBARUN" "C:/DVB/test.dvb!XplodeDims")
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #50 : 12-02-2019, 23:45:30 »
Спасибо! Первый вариант корректно сработал. :)

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом. VBA
« Ответ #51 : 13-02-2019, 00:05:30 »
DMA,
Отлично! В дальнейшем пожалуйста каждый вопрос оформляй отдельной темой.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #52 : 19-02-2019, 13:32:06 »
В дальнейшем пожалуйста каждый вопрос оформляй отдельной темой.
У меня вопрос в контексте данного обсуждения.
Вернулся к своему макросу и подвис на следующем же шаге. Не могу получить координаты отрезка.
Как только к нему не пытался достучаться. H1-корректный, aa1- всегда пустое значение
Доступ к координатам отрезка же через Startpoint/Endpoint? Или я ошибаюсь?

Код - Visual Basic [Выбрать]
  1. If ThisDrawing.ModelSpace.Item(i).ObjectName = "AcDbLine" Then
  2.         Set Ln = ThisDrawing.ModelSpace.Item(i)
  3.         H1 = Ln.Handle
  4.         Set aa1 = ThisDrawing.HandleToObject(H1)
  5.         MsgBox aa1.startPoint
  6.          End If

Я уже начал думать что, возможно, запуск макроса через Lisp и здесь сыграл определенную роль :))

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом. VBA
« Ответ #53 : 19-02-2019, 14:26:47 »
DMA,
Как определен Ln? Ln.StartPoint и Ln.EndPoint должны возвращать то, что нужно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #54 : 19-02-2019, 15:26:45 »
Как определен Ln? Ln.StartPoint и Ln.EndPoint должны возвращать то, что нужно.

В настоящий момент как Dim Ln As AcadLine. Ноя уже перепробовал все что можно. Хотя может что и пропустил...

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Прошу помощи с кодом. VBA
« Ответ #55 : 19-02-2019, 15:47:53 »
Код - Visual Basic [Выбрать]
  1. Sub GetLineStartEndPoints()
  2.     Dim nEnts As Integer
  3.     nEnts = ThisDrawing.ModelSpace.Count
  4.     For i = 0 To nEnts - 1
  5.     Dim ent As AcadEntity
  6.       Set ent = ThisDrawing.ModelSpace.Item(i)
  7.       If ent.ObjectName = "AcDbLine" Then
  8.         Dim line As AcadLine
  9.         Set line = ent
  10.         MsgBox "Start point: (" & line.StartPoint(0) & " " _
  11.            & line.StartPoint(1) & " " _
  12.            & line.StartPoint(2) & ")" & vbCrLf _
  13.            & "End point: (" & line.EndPoint(0) & " " _
  14.            & line.EndPoint(1) & " " _
  15.            & line.EndPoint(2) & ")"
  16.       End If
  17.     Next
  18. End Sub
Так должно работать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 35
  • Карма: 0
Re: Прошу помощи с кодом. VBA
« Ответ #56 : 19-02-2019, 19:01:50 »
Так должно работать.
Работает! Спасибо , большое. :)