Ошибка в Private Sub AcadDocument_ObjectErased(ByVal ObjectID As LONG_PTR)

Автор Тема: Ошибка в Private Sub AcadDocument_ObjectErased(ByVal ObjectID As LONG_PTR)  (Прочитано 15683 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 1
Здравствуйте,

Происходит ошибка: Method 'ObjectIdToObject' of object 'IAcadDocument' failed

при выполнении следующего:

Код - Visual Basic [Выбрать]
  1. Private Sub AcadDocument_ObjectErased(ByVal ObjectID As LONG_PTR)
  2. Dim tempObj As AcadObject
  3.     Set tempObj = ThisDrawing.ObjectIdToObject(ObjectID) 'здесь ошибка
  4. End Sub

AutoCAD 2016, Windows 10 x64

Подскажите в чем проблема. Заранее спасибо

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
wl2000
Приветствую на форуме!
Происходит ошибка: Method 'ObjectIdToObject' of object 'IAcadDocument' failed
Всегда (т.е. при удалении любого примитива)?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 1
Я, собственно, только начал работать с макросом, где это нужно, поэтому я не могу сказать, что раньше работало, а сейчас нет. У меня только вхождения блоков в этом проекте - при попытке их удаления всегда происходит такая ошибка

Отмечено как Решение wl2000 23-11-2015, 22:43:26

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Если я не ошибаюсь, то именно так и должно быть. Т.е. по ObjectId для удалённого объекта сам объект в VBA получить нельзя.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 1
Тогда, получается, при этом событии невозможно понять какой объект был удалён?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Тогда, получается, при этом событии невозможно понять какой объект был удалён?
Именно так. Нашёл тему, которой уже скоро 15 лет: http://forums.autodesk.com/t5/visual-basic-customization/objecterased-event-question/m-p/346276
Итак. Средствами VBA это сделать нельзя (можно при помощи ObjectARX и AutoCAD .NET API). Разве что до операции удаления хранить коллекцию ObjectID и описаний объектов, которые тебя интересуют и потом находить по ObjectID удалённого объекта его описание.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 1
Вас понял. Спасибо большое

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Пожалуйста. Я бы рекомендовал использовать в AutoCAD не VBA, а .NET API.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 1
я пробовал - не понравилось

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
я пробовал - не понравилось
"Это ты просто его готовить не умеешь!" (c) :)
Возможности AutoCAD .NET API значительно шире возможностей VBA в AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 1
возможности гораздо шире, я это знаю
но и неудобства тоже большие - транзакции всякие, невозможно редактировать код "на лету", для проверки работы нужно компилировать код и запускать автокад (много-много раз, а это медленно очень)

может, действительно, не умею готовить

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
но и неудобства тоже большие - транзакции всякие
Можно и не пользоваться ими. Я тут неоднократно приводил примеры как обходится без транзакций.
невозможно редактировать код "на лету"
Для меня это - достоинство. Иначе в случае аварийной ситуации, когда AutoCAD вылетает, теряешь все изменения кода.
для проверки работы нужно компилировать код и запускать автокад
Это пожалуй единственное неудобство. Ну тогда ObjectARX - там можно загружать/выгружать приложение. Единственно что практически любая ошибка и AutoCAD крэшится.
много-много раз
А вот это зависит от того, насколько чистый код ты сразу пишешь. Например, для проверки вот этого кода мне понадобилось два запуска AutoCAD (и то в первый раз я создавал тестовый блок): http://adn-cis.org/forum/index.php?topic=3229.msg13471#msg13471
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 1
Я тут неоднократно приводил примеры как обходится без транзакций
где можно посмотреть?


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

  • ADN OPEN
  • Сообщений: 19
  • Карма: 1
а вот там где про 3Дполилинию без транзакций - это ко всем примитивам применимо?