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

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

Ошибка Automation. Пустой ID объекта?

Ответ
Поиск в этой теме
Непрочитано 14.02.2024, 09:35 #1
Ошибка Automation. Пустой ID объекта?
prajdziswet
 
Регистрация: 30.03.2015
Сообщений: 153

получаю набор блоков и прохожусь по им, на стороке (на определенной итерации):
Код:
[Выделить все]
 (setq obj (vlax-ename->vla-object list_block))
где list_block -это имя (ssname)

вываливается ошибка "Ошибка Automation. Пустой ID объекта", причем вываливается на команде присвоения "setq obj", в чем может быть дело:
Нажмите на изображение для увеличения
Название: Clip2net_240214090437.jpeg
Просмотров: 29
Размер:	152.4 Кб
ID:	261558
какую доп. проверку можно сделать?, имя не nill и команда "vlax-ename" тоже не нилл =(

после проверки автокада на ошибки изчезает...//выполнять проверку до работы лиспа или можно как то проверить эту ошибку?


Последний раз редактировалось prajdziswet, 14.02.2024 в 09:49.
Просмотров: 1800
 
Непрочитано 14.02.2024, 10:04
#2
Кулик Алексей aka kpblc
Moderator

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


А list_block точно ename ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.02.2024, 10:22
#3
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Вставь перед вызовом команду:

(print list_block)

и сразу же увидишь, где и как происходит сбой.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 14.02.2024, 10:28
#4
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Вставь перед вызовом команду:

(print list_block)

и сразу же увидишь, где и как происходит сбой.
А что, точки останова уже не работают?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.02.2024, 10:39
#5
prajdziswet


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А list_block точно ename ?
да точно (я сам сначала подумал, может list_block=нил или что-то еще..):
1) срабатывает на 95 итерации, до этого проходит нормально (если не имя, то отрубила б на первом объекте) //а так 94 объекта обработало нормально
2) редактор видно, что возвращается "vlax-ename->vla-object" (на скрине[что прикреплял] последнее значение, это как раз vlax-ename->vla-object)
А вот стантартное присваивания сбаивает "setq" - вываливается ошибка в командную строчку...

если проверить и исправить (_audit автокада), все работает нормально... - поэтому наверное никак не отловим, но тут люди поумнее меня = вдруг идея?

Последний раз редактировалось prajdziswet, 14.02.2024 в 10:59.
prajdziswet вне форума  
 
Автор темы   Непрочитано 14.02.2024, 10:50
#6
prajdziswet


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


Нажмите на изображение для увеличения
Название: Контрольное значение _240214104833.jpeg
Просмотров: 20
Размер:	124.5 Кб
ID:	261559

нулевой ид.dwg

----- добавлено через ~1 мин. -----
- прикрепил файл двг(почистил), вываливалось на втором объекте

Последний раз редактировалось prajdziswet, 14.02.2024 в 11:06.
prajdziswet вне форума  
 
Непрочитано 14.02.2024, 11:16
#7
Кулик Алексей aka kpblc
Moderator

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


Файл это хорошо, а код самостоятельно выдумывать? И чего надо сделать / получить ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.02.2024, 11:23
#8
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Строка:

(setq obj (vlax-ename->vla-object list_block))


вызывается в цикле (while ... ) или из рекурсии?

Ну и на всякий: переменная obj - локальная или глобальная?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 14.02.2024, 11:29
#9
Кулик Алексей aka kpblc
Moderator

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


А какая разница - глобальная или локальная, если она переназначается. Короче, код нужен.
Код:
[Выделить все]
 (defun get-all-names (/ selset)
  (if (= (type (setq selset
                      (vl-catch-all-apply
                        (function
                          (lambda ()
                            (ssget '((0 . "INSERT")))
                          )
                        )
                      )
               )
         )
         'pickset
      )
    (mapcar
      (function
        (lambda (x)
          (list (cons "pointer" x)
                (cons "vla" (setq x (vlax-ename->vla-object x)))
                (cons "name"
                      (if (vlax-property-available-p x 'effectivename)
                        (vla-get-effectivename x)
                      )
                )
          )
        )
      )
      ((lambda (/ tab item)
         (repeat (setq tab  nil
                       item (sslength selset)
                 ) ;_ end setq
           (setq tab (cons (ssname selset (setq item (1- item))) tab))
         )
       )
      )
    )
  )
)
Срабатывает вполне себе корректно
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.02.2024, 12:14
#10
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Цитата:
А какая разница - глобальная или локальная, если она переназначается.
Всякие случаи бывают.

Я когда-то давным-давно отлавливал похожее "непредсказуемое"
и "недокументированное" поведение кода. Выкрутился только тем,
что каждый раз в явном виде перед очередным

(setq aaa <... что-то там ...> )

делал

(setq aaa nil)

С логической точки зрения совершенно бессмысленная операция,
но - видимо - что-то было не то при работе Автокада со своей же
памятью.

----- добавлено через ~2 мин. -----
А, забыл.

Ещё (gc) добавлять в этом участке кода приходилось.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 14.02.2024, 12:25
#11
Кулик Алексей aka kpblc
Moderator

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


Offtop: Ну пока ТС код не покажет, бухтеть можно до бесконечности
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.02.2024, 12:46
#12
prajdziswet


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


Прошу прощения, что код не дал, сейчас выдрал из программы часть (у меня не работает):

Код:
[Выделить все]
   (vl-load-com)
  (setq	nabor_blocks
	 (ssget	"_X"
		(list (cons 0 "INSERT")
		      (cons 100 "AcDbBlockReference")
		)
	 )
  )
(if (null nabor_blocks)

    (progn
      (princ "\nНе составлен список блоков. ")
					; сообщение об отсутствии
      (princ)				; тихий выход
    )					; конец progn

    (progn
      (setq i	-1
	    len	(sslength nabor_blocks)
      )
      (repeat len
	(setq i (1+ i))			; Выбор следующего примитива и получение его списка
     (print i)
	(if (= i 2)
	(princ)
	 )
	(setq list_block (ssname nabor_blocks i))
(vla-get-effectivename (setq obj (vlax-ename->vla-object list_block)))
)))
на втором объекте ошибка

tmp.lsp

п.с или у меня только? автокад 2020 =)

Последний раз редактировалось prajdziswet, 14.02.2024 в 13:12.
prajdziswet вне форума  
 
Непрочитано 14.02.2024, 13:25
#13
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Не смогу проверить, нет 20-ки под рукой.

А точно ошибку даёт (setq ... ), а не (vla-get-effectivename ...) ?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 14.02.2024, 14:08
#14
prajdziswet


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


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Не смогу проверить, нет 20-ки под рукой.

А точно ошибку даёт (setq ... ), а не (vla-get-effectivename ...) ?
1) проверь на чем есть (если есть возможность), теоретически оно не должно зависить от версии...
2) покрайне мере в редакторе и отладке по шагам, он вываливался при setq, до эфективного имени не доходил (он выделял только при setq и вываливался)
prajdziswet вне форума  
 
Непрочитано 14.02.2024, 14:12
1 | #15
Кулик Алексей aka kpblc
Moderator

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


Код отработал вполне нормально (ACAD2021). Уточнение: на том файле, который был предоставлен. 2 блока, все без ошибок.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.02.2024, 14:18
#16
prajdziswet


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Код отработал вполне нормально (ACAD2021). Уточнение: на том файле, который был предоставлен. 2 блока, все без ошибок.
Спасибо Алексей, тогда очень странно..
-попробую дома правда у меня и дома 2020
prajdziswet вне форума  
 
Непрочитано 14.02.2024, 14:33
#17
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Да, "кривой" объект - делай проверку.

Проверяй на "nil", хотя его там быть и не должно.

Ниже - для наглядности - код и лог.

(setq list_block (ssname nabor_blocks i))
(print "\n00000")
(print list_block)
(print (entget list_block))
(print (setq obj (vlax-ename->vla-object list_block)))
(print "\n11111")
(print (vla-get-effectivename (setq obj (vlax-ename->vla-object list_block))))

(print "\n22222")

--------------------

Команда: 22

0
"\n00000"
<Имя объекта: 7ff4ee221ee0>
((-1 . <Имя объекта: 7ff4ee221ee0>) (0 . "INSERT") (330 . <Имя объекта: 7ff4ee2069f0>) (5 . "427C1E") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Я_СТРЕЛКА-СЕВЕР") (62 . 8) (370 . 20) (100 . "AcDbBlockReference") (2 . "SYMBOL3000120") (10 562497.0 -1.47223e+006 96108.0) (41 . 1000.0) (42 . 1000.0) (43 . 1000.0) (50 . 0.095427) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
#<VLA-OBJECT IAcadBlockReference 000002a96ab21248>
"\n11111"
"SYMBOL3000120"
"\n22222"
1
"\n00000"
<Имя объекта: 7ff4ee221e70>
((-1 . <Имя объекта: 7ff4ee221e70>) (0 . "INSERT") (5 . "427C17") (102 . "{ACAD_XDICTIONARY") (360 . <Имя объекта: 7ff4ee2248a0>) (102 . "}") (330 . <Имя объекта: 7ff4ee2069f0>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "ГП-размеры") (62 . 1) (6 . "Continuous") (370 . 20) (100 . "AcDbBlockReference") (66 . 1) (2 . "Съемка") (10 -2.78231e+008 -2.51363e+008 -95973.5) (41 . 1000.0) (42 . 1000.0) (43 . 1000.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
#<VLA-OBJECT IAcadBlockReference 000002a96f967a38>
"\n11111"
"Съемка"
"\n22222"
2
"\n00000"
<Имя объекта: 7ff4ee20e060>
nil
#<VLA-OBJECT IAcadBlockReference 000002a96f967968>
"\n11111"
Команда:

Исследовать глубже - сорри - некогда.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 14.02.2024, 14:52
#18
Кулик Алексей aka kpblc
Moderator

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


===AAA===, у меня ощущение, что ты код пишешь и тестишь не в VLIDE
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.02.2024, 14:54
#19
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Конечно. Я же "из динозавров". :-)

----- добавлено через ~2 мин. -----
Старый-добрый "Мульти-Едит".
Заточил, конечно, "под себя".
Цвета, горячие клавиши и прочее...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 14.02.2024, 14:57
#20
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Проход 1: проверено объектов: 11300
Проверка объектов, проход 2

Проход 2: проверено объектов: 100
AcDbBlockReference(16319B) BTR Id invalid
AcDbBlockReference(16319C) BTR Id invalid
AcDbBlockReference(1753FF) BTR Id invalid
AcDbBlockReference(187670) BTR Id invalid
AcDbBlockReference(188173) BTR Id invalid
AcDbBlockReference(19A3D6) BTR Id invalid
Проход 2: проверено объектов: 11300

Проверка блоков Проверено блоков: 75

Проверка AcDsRecords
Всего найдено ошибок: 6, исправлено: 0

Стерто 0 объектов

----- добавлено через 40 сек. -----
это результат проверки файла из поста №6
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Ошибка Automation. Пустой ID объекта?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему возникает ошибка "Нет объекта опирающегося на сваю"? САПФИР 2021. OSPV Лира / Лира-САПР 3 03.02.2022 08:14
Текущий ремонт, капитальный ремонт, техническое обслуживание. Через сколько лет наступает после сдачи объекта? Red_line Архитектура 12 12.09.2018 14:52
При выделении объекта в Автокаде стала выпадать ошибка см. скриншот dextron3 AutoCAD 3 27.01.2013 15:53
Ошибка при удлинении объекта r0nan AutoCAD 2 18.09.2010 21:51
Получение разрешения на строительство объекта капитального строительства maxummm Прочее. Архитектура и строительство 18 25.08.2010 20:31