Регенерация модели в автокаде как отключить

Обновлено: 06.07.2024

Разрабатывая различные коды для AutoCAD, я обнаружил, что зачастую самым емким по времени и ресурсам становится обновление чертежа. Регенерация, проще говоря.

Идея, казалось бы, проста и незатейлива: отключаем REGENMODE, выполняем что хотим и потом восстанавливаем значение переменной. Ну, для гарантии выполняем обновление - хоть командой _.regenall, хоть функцией (redraw), хоть через (vla-regen (vla-get-activedocument (vlax-get-acad-object)) acactiveviewport).

Но, к сожалению, не все так просто и прозрачно, как хотелось бы.

Регенерация чертежа, насколько я понял, в обязательном порядке производится при использовании командных методов. Команда завершена - чертеж обновлен. Особенно это касается использования команд редактирования блоков и внешних ссылок. REGENMODE в таком случае игнорируется.

Допустим, мы добавляем в чертеж примитив. И добавляем в текущее пространство, используя entmake или entmakex. В таком случае регенерация, как правило, не выполняется, но примитив отображается сразу. При добавлении примитива в описание какого-либо блока (т.е. указывается группа 330) по окончании обновления блока, насколько я помню, регенерация будет выполняться обязательно. Ставил подобные эксперименты уже очень давно, да и ActiveX мне нравится больше - поэтому здесь могу ошибаться.

Если нам надо добавлять большое количество примитивов в чертеж, то entmake внутри текущего пространства в данном случае может сыграть плохую шутку: AutoCAD будет понимать, что база все обновляется, обновляется, обновляется. А регенерации все нет и нет. В один не самый прекрасный момент ACAD может решить, что "все, парни, с меня хватит" - и начать регенерацию.

Если надо менять большое количество примитивов, то entmod тоже не самое лучшее решение, как мне кажется. Насколько я помню, после entmod использование entupd практически обязательно - в противном случае примитив может быть "полностью обновлен" только после перезапуска чертежа. То есть - здравствуй, регенерация по примитиву. Опять же, могу ошибаться.

Добавление примитива в чертеж через ActiveX не вызывает регенерацию по каждому чиху. Но если выполняется добавление нескольких сотен примитивов, то регенерация может быть вызвана в любой момент. То же самое касается и изменения примитивов. И на REGENMODE в подавляющем большинстве случаев AutoCAD'у плевать.

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

  1. Создание большого количества примитивов
    • Создание описания анонимного блока
    • Создание внутри этого анонимного блока всех нужных примитивов
    • Вставка анонимного блока, его разбитие и уничтожение вхождения

Вариант плох тем, что база чертежа становится достаточно сильно фрагментированной: хендл описания блока, хендлы объектов внутри описания блока, хендл вхождения блока - и все это на выброс. Теоретически можно превысить предел хендлов (он хотя и велик, но не бесконечен). Но метод хорош тем, что вся работа выполняется абсолютно не затрагивая графическую область чертежа. И лишь в самом конце - вставка и разбитие.

  • Создание описания анонимного блока
  • Создание внутри этого анонимного блока нового примитива или копирование в него существующего
  • Изменение созданного (или скопированного) примитива
  • Получение нужных характеристик из созданного (скопированного) примитива
  • Необязательное отключение REGENMODE
  • Изменение реального примитива на основе полученных данных
  • Восстановление REGENMODE
      Этот вариант тоже не без недостатков. И они те же, что и у первого: ненужная фрагментация базы чертежа, хотя и не такая глобальная.

    Конечно, можно выкрутиться: создать новый документ (чтобы в него не переключиться, создавать наверняка придется через ObjectDBX), в нем все делать, а потом просто импортировать соответствующие элементы. Но на моей практике такого пока еще не требовалось.


    Сигнатура проблемы:
    Имя события проблемы: APPCRASH
    Имя приложения: acad.exe
    Версия приложения: 24.1.208.0
    Отметка времени приложения: 4dbf9c16
    Имя модуля с ошибкой: acad.exe
    Версия модуля с ошибкой: 24.1.208.0
    Отметка времени модуля с ошибкой: 4dbf9c16
    Код исключения: c0000005
    Смещение исключения: 0000000000699a9f
    Версия ОС: 6.1.7601.2.1.0.256.4
    Код языка: 1049
    Дополнительные сведения 1: 1413
    Дополнительные сведения 2: 1413e41584bc3093eba1615b3698ff4c
    Дополнительные сведения 3: 7bb6
    Дополнительные сведения 4: 7bb6494ed2dfa741b262794d45067d76

    All
    Есть у меня еще одна ситуация, которая меня раздражает. Я не знаю, насколько это нормально. Не то, что я раздражаюсь , а сама ситуация. Открывается файл в котором есть лист, где вставлены несколько растровых изображение (jpg файлы). Так вот файл открывается, но изображения не показываются. А чтобы они показались, надо просто открыть диспетчер внешних ссылок (меню Вставка -> Внешние ссылки).
    При этом в командной строке выводится
    "команда: _externalreferences Регенерация отложена.
    Выполняется регенерация листов.
    Выполняется регенерация модели.
    Регенерация отложена.
    Выполняется регенерация листов.
    Выполняется регенерация модели."

    Я давно где-то в справке читал следующее (пишу по памяти): "AutoCAD иногда в целях убыстрения открытия чертежа отключает вывод растровых изображений. Чтобы они показались, надо открыть диспетчер внешних ссылок и нажать на значке Обновить" в левом верхнем углу диалогового окна.

    ПК следующей конфигурации:
    Intel Core i7-3770;
    ASUS P8Z77-V DELUXE;
    2 x DIMM DDR3 (1600) 8Gb;
    SSD 180Gb;
    NVidia Quadro K4000 3072Mb;
    Windows 7 x64 SP1
    Autocad 2012 | Autocad 2014

    В процессе работы имею вот такие артефакты:

    А иногда отображается все корректно:

    Это самый минимум, что приходится видеть.

    Производительность работы автокада на этом ПК такая же, а иногда и ниже, ноута с дискретной видеокартой купленного 4 года назад за 28000р.

    Управляет настройкой системы.


    Производительность 3D графики

    Управление конфигурацией системы 3D графики.

    Параметры производительности 3D графики

    Текущее устройство указания

    Управление параметрами устройства указания.

    Текущее устройство указания

    Отображает список доступных драйверов устройств указания.

    • Текущее системное устройство указания: Устанавливает системное устройство указания текущим.
    • Wintab Compatible Digitizer: Установка текущим дигитайзера, совместимого с Wintab.

    Определяет, откуда программа принимает входные данные: от мыши и дигитайзера или только от дигитайзера.

    Режим обновления списка отображения на вкладке "Модель" и вкладках "Лист". При переходе с одной вкладки на другую это обновление может осуществляться либо путем регенерации чертежа, либо путем сохранения списка отображения в памяти и последующей регенерации только измененных объектов. Изменяя этот режим, можно управлять производительностью работы с чертежами. (системная переменная LAYOUTREGENCTL)

    Примечание Эффективность установленного режима регенерации вкладок зависит от различных факторов. Для получения дополнительной информации см. описание системной переменной LAYOUTREGENCTL.

    Чертеж регенерируется каждый раз при переходе на другую вкладку.

    Для вкладки "Модель" и последнего активного листа список отображения сохраняется в памяти. При переключении между этими двумя вкладками регенерации не происходит. При переходе на какой-либо другой лист его содержимое регенерируется.

    Чертеж регенерируется только при первом заходе на каждую из вкладок. Поскольку списки отображения сохраняются в памяти на протяжении всего рабочего сеанса, последующих регенераций при переходе между вкладками уже не требуется.

    Параметры подключения к БД

    Управление параметрами подключения к базам данных.

    Хранить индекс связей в чертеже

    Сохраняет индекс баз данных внутри файла чертежа. Флажок устанавливается в целях оптимизации производительности в процессе операций выбора по связи. Для уменьшения размера чертежа и ускорения процесса открытия чертежей, содержащих информацию из баз данных, флажок следует сбросить.

    Указывает, требуется ли открывать таблицы баз данных в файле только для чтения.

    Управление параметрами системы.

    Отобразить диалоговое окно размера текста OLE

    Отображает диалоговое окно размера текста OLE при вставке объектов OLE в чертежи.

    Вызов всех диалоговых окон, содержащих флажок "Больше не выводить это предупреждение". Все диалоговые окна с предупреждениями выводятся, независимо от предыдущей настройки параметра для каждого отдельного диалогового окна.

    Включает звуковой сигнал при обнаружении ошибочного ввода данных.

    Указывает, требуется ли загружать файл acad.lsp в каждый чертеж. Если флажок не установлен, в чертежи загружается только файл acaddoc.lsp. Чтобы не вызывать LISP-вычислений в определенных чертежах, следует сбросить флажок. (системная переменная ACADLSPASDOC)

    Разрешение использования длинных имен для именованных объектов в символьных таблицах чертежей. Имя объекта может содержать до 255 символов. В него могут входить буквы, цифры, пробелы и специальные символы, которые не используются Windows и данной программой в других целях. Длинные имена могут быть заданы для слоев, размерных стилей, блоков, типов линий, текстовых стилей, листов, ПСК, видов и видовых экранов. Параметр хранится в чертеже. (системная переменная EXTNAMES)

    Устанавливает в программе режим поиска адаптеров объектов. С помощью адаптеров объектов можно отображать сторонние объекты и работать с ними, даже если приложение ObjectARX, в котором они были созданы, недоступно.

    Искать адаптеры в Интернете

    Выполняет поиск адаптеров объектов на веб-узле Autodesk. (системная переменная PROXYWEBSEARCH)

    Устанавливает количество попыток для поиска адаптеров объектов.

    Подробнее об адаптерах объектов см. раздел Работа со сторонними объектами и заместителями документа "Руководство пользователя".

    Управляет настройкой системы.


    Производительность 3D графики

    Управление конфигурацией системы 3D графики.

    Параметры производительности 3D графики

    Текущее устройство указания

    Управление параметрами устройства указания.

    Текущее устройство указания

    Отображает список доступных драйверов устройств указания.

    • Текущее системное устройство указания: Устанавливает системное устройство указания текущим.
    • Wintab Compatible Digitizer: Установка текущим дигитайзера, совместимого с Wintab.

    Определяет, откуда программа принимает входные данные: от мыши и дигитайзера или только от дигитайзера.

    Режим обновления списка отображения на вкладке "Модель" и вкладках "Лист". При переходе с одной вкладки на другую это обновление может осуществляться либо путем регенерации чертежа, либо путем сохранения списка отображения в памяти и последующей регенерации только измененных объектов. Изменяя этот режим, можно управлять производительностью работы с чертежами. (системная переменная LAYOUTREGENCTL)

    Примечание Эффективность установленного режима регенерации вкладок зависит от различных факторов. Для получения дополнительной информации см. описание системной переменной LAYOUTREGENCTL.

    Чертеж регенерируется каждый раз при переходе на другую вкладку.

    Для вкладки "Модель" и последнего активного листа список отображения сохраняется в памяти. При переключении между этими двумя вкладками регенерации не происходит. При переходе на какой-либо другой лист его содержимое регенерируется.

    Чертеж регенерируется только при первом заходе на каждую из вкладок. Поскольку списки отображения сохраняются в памяти на протяжении всего рабочего сеанса, последующих регенераций при переходе между вкладками уже не требуется.

    Параметры подключения к БД

    Управление параметрами подключения к базам данных.

    Хранить индекс связей в чертеже

    Сохраняет индекс баз данных внутри файла чертежа. Флажок устанавливается в целях оптимизации производительности в процессе операций выбора по связи. Для уменьшения размера чертежа и ускорения процесса открытия чертежей, содержащих информацию из баз данных, флажок следует сбросить.

    Указывает, требуется ли открывать таблицы баз данных в файле только для чтения.

    Управление параметрами системы.

    Отобразить диалоговое окно размера текста OLE

    Отображает диалоговое окно размера текста OLE при вставке объектов OLE в чертежи.

    Вызов всех диалоговых окон, содержащих флажок "Больше не выводить это предупреждение". Все диалоговые окна с предупреждениями выводятся, независимо от предыдущей настройки параметра для каждого отдельного диалогового окна.

    Включает звуковой сигнал при обнаружении ошибочного ввода данных.

    Указывает, требуется ли загружать файл acad.lsp в каждый чертеж. Если флажок не установлен, в чертежи загружается только файл acaddoc.lsp. Чтобы не вызывать LISP-вычислений в определенных чертежах, следует сбросить флажок. (системная переменная ACADLSPASDOC)

    Разрешение использования длинных имен для именованных объектов в символьных таблицах чертежей. Имя объекта может содержать до 255 символов. В него могут входить буквы, цифры, пробелы и специальные символы, которые не используются Windows и данной программой в других целях. Длинные имена могут быть заданы для слоев, размерных стилей, блоков, типов линий, текстовых стилей, листов, ПСК, видов и видовых экранов. Параметр хранится в чертеже. (системная переменная EXTNAMES)

    Устанавливает в программе режим поиска адаптеров объектов. С помощью адаптеров объектов можно отображать сторонние объекты и работать с ними, даже если приложение ObjectARX, в котором они были созданы, недоступно.

    Искать адаптеры в Интернете

    Выполняет поиск адаптеров объектов на веб-узле Autodesk. (системная переменная PROXYWEBSEARCH)

    Устанавливает количество попыток для поиска адаптеров объектов.

    Подробнее об адаптерах объектов см. раздел Работа со сторонними объектами и заместителями документа "Руководство пользователя".

    Читайте также: