Объектный реактор (Ошибка Automation. Объект был стерт)
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Объектный реактор (Ошибка Automation. Объект был стерт)

Объектный реактор (Ошибка Automation. Объект был стерт)

Ответ
Поиск в этой теме
Непрочитано 03.12.2009, 18:33 #1
Объектный реактор (Ошибка Automation. Объект был стерт)
молодой человек
 
Регистрация: 14.11.2007
Сообщений: 159

Здравствуйте!
Начал ковырять реакторы, и споткнулся на объектном реакторе.
Реактор создаю следующим образом:
Код:
[Выделить все]
       (setq sset (entlast));выноска
   ;владелец реактора:
       (setq axl (list (vlax-ename->vla-object en)))
   ;реакция реактора- вызов ф-ции kos_reac_mk_leader_dim
       (setq reactor
        (vlr-object-reactor axl (list (vlax-ename->vla-object sset))
                           (list '(:vlr-modified . kos_reac_mk_leader_dim)))
       )
Функция отклика:
Код:
[Выделить все]
(defun kos_reac_mk_leader_dim (vlao reac cname /)
      (princ "Изменилась пластина !!!")
  (setq lll (car (vlr-data reac)));указатель на выноске
  (setq en (vlax-vla-object->ename vlao));указатель на профиль (владелец)
  (if (= nil en)
    (progn
      (princ "Объект стерт!!!")
      (setq lmk (vlax-vla-object->ename lll));преобразование указателя на выноску
      (setq slka (cdr (nth 1(nth 1 (assoc -3 (entget lmk '("Vinoska")))))))
      (setq vin-ki (ssget "_x"(list (list -3 (list "Vinoska" (cons 1000 slka))))));сбор всех выносок
      (setq i -1)
         (repeat (sslength vin-ki)
                 (setq ee (ssname vin-ki(setq i (1+ i))))
                 (vla-delete (vlax-ename->vla-object ee));удаление связанных выносок
         )
    ) 
  )
;;;  Изменение текста выноски
    (setq item (vlax-ename->vla-object en))
    (setq Height (rtos (vla-get-Height item)2 0)); толщина 
    (setq Width (rtos (round1 (vla-get-Width item)5)2 0)); ширина
    (setq depth (rtos (round1 (vlax-get-property item 'depth)5)2 0)); длина
    (setq qqq (strcat "-"Height"x"Width"x"depth)); сбор основных размеров
  
    (vla-put-textstring  lll qqq);изменение текста выноски
)
Строчка (vlr-data reac) выдаёт одну и ту же ошибку по всем свойствам
<TextString> Ошибка Automation. Объект был стерт

Подскажите, пожалуйста, как обойти эту проблему?
Просмотров: 2996
 
Непрочитано 03.12.2009, 22:26
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409


У меня ощущение, что тут будет не все так просто... Попробуй блокировать цикличность изменений объектов выноски и ее аннотации. Кроме того, попытайся исключить ssget; кроме простого удаления выносок надо бы сначала от них "откреплять" реакторы...
Скажу честно - сумбурно, потому как особо код не смотрел. И не особо старался понять, что он делает.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.12.2009, 11:47
#3
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Я пологаю что стирает его именно твое-же vla-delete, посмотри сколько раз тебе пишет "Изменилась пластина !!!" - скорее всего идет "самовызов" реактора, бороться с этим можно вводя глобальные переменные - флаги считающие колличество обработок (просто поставить на начало и конец у меня не получилось, т.к. автолисп не сразу запускает реактор (в отличие обработки событий в других языках), а по очереди - как там это конкретно реализованно я не знаю).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 04.12.2009, 13:54
#4
молодой человек


 
Регистрация: 14.11.2007
Сообщений: 159


Спасибо вам огромное! Натолкнули на мысль. Всё оказалось до обидного банально. Когда удаляю объект-владелец к ошибке приводит строчка
(setq item (vlax-ename->vla-object en))
И потом, из-за этой ошибки программа начинает себя вести неадекватно (не корректно передаются данные реактора (Ошибка Automation. Объект был стерт), что приводит к цикличному выполнению функции-отклика). Кстати, что самое интересное, этот цикл длится до тех пор, пока всё-таки появятся "нормальные" данные.
Теперь всё стало работать так как надо.
Кстати, ещё и это подсказка помогла решить проблему:
Цитата:
Кроме того, попытайся исключить ssget; кроме простого удаления выносок надо бы сначала от них "откреплять" реакторы...
Спасибо ещё раз

Последний раз редактировалось молодой человек, 04.12.2009 в 17:21.
молодой человек вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Объектный реактор (Ошибка Automation. Объект был стерт)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несоответствие результатов в Лире s.vas Лира / Лира-САПР 19 11.11.2009 07:31
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47