Ограничения entmakex

Автор Тема: Ограничения entmakex  (Прочитано 8727 раз)

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

Оффлайн Кирилл НикифоровАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 4
Ограничения entmakex
« : 27-11-2018, 11:51:56 »
Здравствуйте!

На днях столкнулся с неожиданным поведением функции entmakex.
Описание проблемы: В файле чертежа вставлена внешняя ссылка (подложка с планом) объемом около 160 Мб. Тяжело, но автокад дышит. Запускается лисп, который должен создать анонимный блок, а затем создать вставку этого блока в пространстве модели. В лиспе используется entmakex в обоих случаях.
Блок создается (имя приблизительно *U33333), но при вставке возвращается nil. Ладно, ну не смог... хотя непонятно почему. Но самое интересное - дальше. Если создать именованный блок, то при запуске возвращается имя примитива, но УДАЛЁННОЕ, и никакой вставки. Линии, полилинии создаются "на ура".
Без такой большой внешней ссылки, естественно, все работает, как ожидается.

Собственно вопрос: это нормально? ))) Ни про какие ограничения entmakex за много лет я сведений не нашел.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничения entmakex
« Ответ #1 : 27-11-2018, 12:00:58 »
Я бы предположил, что это какой-то баг. Но его причину и есть ли возможность его обойти - не скажу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Кирилл НикифоровАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 4
Re: Ограничения entmakex
« Ответ #2 : 27-11-2018, 12:39:23 »
Обойти может vla-InsertBlock, что собственно мы и сделали.
Но "нежданчик" насторожил.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничения entmakex
« Ответ #3 : 27-11-2018, 13:01:37 »
Проверяли в нескольких версиях AutoCAD со всеми обновлениями?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Кирилл НикифоровАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 4
Re: Ограничения entmakex
« Ответ #4 : 27-11-2018, 13:23:35 »
2016-x64 и 2018-x64 дают одинаковый результат. И - да, со всеми апдейтами.
Подозреваю, что виновато имя блока большее, чем 32768.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничения entmakex
« Ответ #5 : 27-11-2018, 13:32:13 »
Подозреваю, что виновато имя блока большее, чем 32768.
Не понял. Имеется в виду число в наименовании неименованного блока? Тогда причем здесь внешняя ссылка? Или в ней тоже огромное количество неименованных блоков?
Проверить несложно. Достаточно в цикле создать > 32K неименованных блоков.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Кирилл НикифоровАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 4
Re: Ограничения entmakex
« Ответ #6 : 27-11-2018, 14:15:34 »
Проверил. Работает значительно дальше. Предположение было ошибочным.
« Последнее редактирование: 27-11-2018, 14:57:10 от Кирилл Никифоров »

Оффлайн Кирилл НикифоровАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 4
Re: Ограничения entmakex
« Ответ #7 : 27-11-2018, 14:50:59 »
Блоков создает "без счета", я не дождался конца (больше 33000)
А вот инсерты может создать из блока с именем <= *U32767. *U32768 уже nil.
Предположение подтверждается.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничения entmakex
« Ответ #8 : 27-11-2018, 14:54:04 »
Интересный факт. Нужно подумать как сделать тестовый файл и демонстрационную программку в несколько строк. Тогда можно будет отправить в ADN DevHelp.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Кирилл НикифоровАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 4
Re: Ограничения entmakex
« Ответ #9 : 27-11-2018, 14:58:28 »
OK
Сейчас попробую оформить.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничения entmakex
« Ответ #10 : 27-11-2018, 15:00:55 »
OK
Сейчас попробую оформить.
Спасибо! Я заодно проверю в AutoCAD 2019 со всеми обновлениями. Если исправлено, то особого смысла отправлять нет - это значит, что этот баг уже отправляли и его исправили и к старым версиям (даже 2018) решили не возвращаться.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Ограничения entmakex
« Ответ #11 : 27-11-2018, 15:01:19 »
А почему не использовать конструкцию вида
Код - Auto/Visual Lisp [Выбрать]
  1. (setq def (vlax-vla-object->ename (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
  2.                                            (vlax-3d-point '(0. 0. 0.))
  3.                                            "*U"
  4.                                            ) ;_ end of vla-add
  5.                                   ) ;_ end of vlax-vla-object->ename
  6.       ) ;_ end of setq
Если уж так нужен именно entmake? Имя будет гарантированно уникальное.
Хотя сам факт невозможности создания анонимного блока интересен.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничения entmakex
« Ответ #12 : 27-11-2018, 15:06:04 »
Алексей Кулик,
Так вариант с vla-InsertBlock уже выше был предложен как workaround. Или ты о чем-то другом?
И вообще-то тут отловленный баг, который не мешало бы отправить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничения entmakex
« Ответ #13 : 27-11-2018, 15:07:51 »
Хотя сам факт невозможности создания анонимного блока интересен.
Блок создаётся, но не вставляется при помощи (entmake)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Ограничения entmakex
« Ответ #14 : 27-11-2018, 15:08:11 »
Я не про вставку, а про создание анонимного блока. Я так понял, что проблема именно в этом - невозможно создать анонимный блок, если число превышает 2^15-1
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничения entmakex
« Ответ #15 : 27-11-2018, 15:09:01 »
Я так понял, что проблема именно в этом - невозможно создать анонимный блок, если число превышает 2^15-1
Нет. Блок создаётся, но не вставляется.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Кирилл НикифоровАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 4
Re: Ограничения entmakex
« Ответ #16 : 27-11-2018, 15:16:01 »
Код - Auto/Visual Lisp [Выбрать]
  1. (defun testblock ()
  2.  (entmake (list
  3.               (cons 0 "BLOCK")
  4.               (cons 100 "AcDbEntity")
  5.               (cons 8 "0")
  6.               (cons 100 "AcDbBlockBegin")
  7.               (cons 2 "*Unnamed")
  8.               (cons 70 1)
  9.               (cons 10 (list 0.0 0.0 0.0))))
  10.   (entmakex (list (cons 0 "LWPOLYLINE")
  11.                   (cons 100 "AcDbEntity")
  12.                   (cons 100 "AcDbPolyline")
  13.                   (cons 90 3)
  14.                   (cons 8 "0")
  15.                   (cons 10 (quote (-150.0 0.0)))
  16.                   (cons 40 300.0)
  17.                   (cons 41 50.0)
  18.                   (cons 42 0.0)
  19.                   (cons 10 (quote (100.0 0.0)))
  20.                   (cons 40 300.0)
  21.                   (cons 41 300.0)
  22.                   (cons 42 0.0)
  23.                   (cons 10 (quote (150.0 0.0)))
  24.                   (cons 40 0.0)
  25.                   (cons 41 0.0)
  26.                   (cons 42 0.0)))
  27.   (entmake (list
  28.               (cons 0 "ENDBLK")
  29.               (cons 100 "AcDbEntity")
  30.               (cons 100 "AcDbBlockEnd")
  31.               (cons 8 "0"))))
  32.  
  33. (defun make-blocks ( / aName aNum)
  34.   (setq aName "0"
  35.         aNum 0)
  36.   (while (and aName (< aNum 33000))
  37.     (setq aName (testblock)
  38.           aNum (1+ aNum)))
  39.   (princ aName))
  40.  
  41. (defun test (aName)
  42.   ;; (setq aName "*U33000")        
  43.  (entmakex
  44.    (list
  45.      (cons 0 "INSERT")
  46.      (cons 100 "AcDbEntity")
  47.      (cons 100 "AcDbBlockReference")
  48.      (cons 2 aName)
  49.      (cons 10 (list 0.0 0.0 0.0))
  50.      (cons 50 0.0))))
  51.  
  52. ;;; (make-blocks)
  53. ;;; (test "*U32767")
  54. ;;; (test "*U32768") - nil
  55.  

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничения entmakex
« Ответ #17 : 27-11-2018, 15:27:20 »
Кирилл Никифоров,
В AutoCAD 2019.1.2 (т.е. в последней на данный момент версии) не работает. Так что отправляю в ADN DevHelp. Спасибо!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Кирилл НикифоровАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 4
Re: Ограничения entmakex
« Ответ #18 : 27-11-2018, 15:28:32 »
Вам спасибо, Александр, за содействие и сочувствие.  :)

Оффлайн Кирилл НикифоровАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 4
Re: Ограничения entmakex
« Ответ #19 : 27-11-2018, 15:42:04 »
А если после создания 33000 анонимных блоков попробовать создать именованный, то при попытке вставки возвращается УДАЛЕННОЕ <EntityName>.
Код для теста:

Код - Auto/Visual Lisp [Выбрать]
  1. (defun named-testblock ()
  2.  (entmake (list
  3.               (cons 0 "BLOCK")
  4.               (cons 100 "AcDbEntity")
  5.               (cons 8 "0")
  6.               (cons 100 "AcDbBlockBegin")
  7.               (cons 2 "TestBlock") ;_ BlockName
  8.               (cons 70 0)
  9.               (cons 10 (list 0.0 0.0 0.0))))
  10.   (entmakex (list (cons 0 "LWPOLYLINE")
  11.                   (cons 100 "AcDbEntity")
  12.                   (cons 100 "AcDbPolyline")
  13.                   (cons 90 3)
  14.                   (cons 8 "0")
  15.                   (cons 10 (quote (-150.0 0.0)))
  16.                   (cons 40 300.0)
  17.                   (cons 41 50.0)
  18.                   (cons 42 0.0)
  19.                   (cons 10 (quote (100.0 0.0)))
  20.                   (cons 40 300.0)
  21.                   (cons 41 300.0)
  22.                   (cons 42 0.0)
  23.                   (cons 10 (quote (150.0 0.0)))
  24.                   (cons 40 0.0)
  25.                   (cons 41 0.0)
  26.                   (cons 42 0.0)))
  27.   (entmake (list
  28.               (cons 0 "ENDBLK")
  29.               (cons 100 "AcDbEntity")
  30.               (cons 100 "AcDbBlockEnd")
  31.               (cons 8 "0"))))
  32.  
  33. ;;; (named-testblock)
  34. ;;; (test "TestBlock")
  35.  

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничения entmakex
« Ответ #20 : 27-11-2018, 15:46:21 »
А если после создания 33000 анонимных блоков попробовать создать именованный, то при попытке вставки возвращается УДАЛЕННОЕ <EntityName>.
Думаю, что оно тут взаимосвязано с предыдущей ошибкой. Так что если они разберутся с ней, то эта уйдёт автоматически.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ограничения entmakex
« Ответ #21 : 01-12-2018, 00:49:43 »
Баг подтвердили. Так что когда-нибудь исправят. :-)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Кирилл НикифоровАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 4
Re: Ограничения entmakex
« Ответ #22 : 03-12-2018, 10:53:08 »
Спасибо, Александр.
Жаль, надежды на исправление маловато...