Отключить регенерацию листов в автокаде
Перейти к содержимому

Отключить регенерацию листов в автокаде

  • автор:

Регенерация чертежа в AutoCAD или что делать если «не отъезжает колесиком»? (видео)

Во время работы в AutoCAD для навигации по чертежу мы, как правило, пользуемся мышью. Иногда возникают ситуации, когда при вращении колеса мыши, чертеж как бы «заедает» — он отказывается отдаляться или приближаться. Иная ситуация подобного рода — когда дуговые элементы и окружности выглядят «угловатыми» — они становятся ломаными линиями. Для решения этих проблем смотрите наш урок. Мы расскажем, как следует использовать команду «Регенерировать все» (всереген или _regenall в командной строке) и как вывести кнопку регенерации на Панель быстрого доступа.

Опубликовано в: интерфейс и настройки

Как отключить автоматическую регенерацию листов

Доброе время суток! Подскажите, можно ли отключить автоматическую регенерацию листов при переключении между ними? Если можно, то как?
Проблема в том, что листы содержат таблицы, зависимые от таблиц на других листах и от атрибутов динамических блоков. Поэтому каждый переход между листами обходится довольно «дорого» по времени. Кэширование листов включено. Это ничего не меняет.

Просмотров: 15826
Регистрация: 10.08.2013
Сообщений: 11,014
может, переменная regenmode -> 0 ?

LISP, C# (ACAD 200[9,12,13,14])

Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
Может, как раз кеширование и надо включить?

__________________
Моя библиотека lisp-функций

Обращение ко мне — на «ты».
Все, что сказано — личное мнение.

Кулик Алексей aka kpblc
Посмотреть профиль
Посетить домашнюю страницу Кулик Алексей aka kpblc
Найти ещё сообщения от Кулик Алексей aka kpblc

Регистрация: 29.01.2014
Новосибирск
Сообщений: 433
Сообщение от Сергей812
может, переменная regenmode -> 0 ?

0 и стоит. Не помогает

—— добавлено через ~1 мин. ——

Сообщение от Кулик Алексей aka kpblc
Может, как раз кеширование и надо включить?
Сообщение от RNB
Кэширование листов включено. Это ничего не меняет.
Регистрация: 20.03.2008
Сообщений: 2,653

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

Регистрация: 22.10.2007
Сообщений: 1,859
Сообщение от RNB
0 и стоит. Не помогает

у почему не помогает. У меня до этого было regenmode -> 0 . По этой теме переключил на 1 и при открытии листы стали обновляться. Просто при создании *.plt нужно было запускать регенерацию в ручную а иначе бывало что уходило в файл и на печать без обновления изменений. Потом головная боль, и я как раз на днях ршил веруть автоматическую регенерацию. Так что всё работает и в ту и в другую сторону. Возможно проблема в чём то другом.

Valery Brelovsky
Посмотреть профиль
Найти ещё сообщения от Valery Brelovsky

Регистрация: 29.01.2014
Новосибирск
Сообщений: 433
Сообщение от skkkk

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

В мощность упирается 100%. Вопрос в том, что железо далеко не самое слабое.
При кэшировании всё хорошо работает без полей и таблиц со ссылками. Таблицы вообще слабо оптимизированы, по моим наблюдениям, даже без полей.

Сообщение от Valery Brelovsky

у почему не помогает. У меня до этого было regenmode -> 0 . По этой теме переключил на 1 и при открытии листы стали обновляться. Просто при создании *.plt нужно было запускать регенерацию в ручную а иначе бывало что уходило в файл и на печать без обновления изменений. Потом головная боль, и я как раз на днях ршил веруть автоматическую регенерацию. Так что всё работает и в ту и в другую сторону. Возможно проблема в чём то другом.

При работе в модели помогает. При работе в листе помогает. А при переключении между листами — не помогает.

Отключение и включение регенерации

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

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

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

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

Если в коде используется вывод в ком.строку каких-либо сообщений, в этот момент управление из-под лиспа передается AutoCAD’у. Да, это иногда необходимо. Но все же стоит помнить, что AutoCAD может решить именно в этот момент обновить чертеж. Явной и четкой связи я не обнаружил, но с некоторых пор стараюсь минимизировать вывод в ком.строку.

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

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

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

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

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

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

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

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

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

    Как таковая регенерация с точки зрения пользователя — благо. С точки зрения программиста-лиспописателя — зло. В последних версиях AutoCAD вроде бы научился корректно обрабатывать текущее значение REGENMODE, но я в этом совсем не уверен. Поэтому сейчас я использую один из двух показанных вариантов. Скорее всего, есть третий, четвертый и т.д. (про .NET только не рассказывайте, ладно? :)) — но до них я пока не дошел.

    Можно ли отключить автоматическую регенерацию при открытии файла?

    Форумы CADUser → Autodesk → AutoCAD → Можно ли отключить автоматическую регенерацию при открытии файла?

    Страницы 1

    Чтобы отправить ответ, вы должны войти или зарегистрироваться

    Сообщения 10

    #1 Тема от Kostya 25 ноября 2004г. 15:55:33

    Тема: Можно ли отключить автоматическую регенерацию при открытии файла?

    Есть файлы, немного дефективные,с расширением DWG но их судя по всему экспортировали в этот формат их другой проги. При открытии автокад слетает без предупреждения или вежливо так «Fatal error. » причем перед тем как слететь на секунду загорается его изображение. Файла 3-4открываются .(всего их где-то 15) Но после удаления части штриховок и пропургенивания и аудита чертеж начинает открываться. При чем тут регенерация? Время от времени открывшийся файл слетает так же успешно после команды RegenAll ;(

    #2 Ответ от Hrenn 25 ноября 2004г. 15:58:23

    Re: Можно ли отключить автоматическую регенерацию при открытии файла?

    #3 Ответ от Kostya 26 ноября 2004г. 10:20:12

    Re: Можно ли отключить автоматическую регенерацию при открытии файла?

    > Хмурый
    Спасибо, хмурый ! ТОлько она сохраняется в чертеже, а уменя етот самый не открывается. Я думал, что есть возможность отключить регенерацию перед открытием чертежа.

    #4 Ответ от Hrenn 26 ноября 2004г. 10:46:59

    Re: Можно ли отключить автоматическую регенерацию при открытии файла?

    Попробуйте «_recower» этих файлов.

    #5 Ответ от Hrenn 26 ноября 2004г. 10:47:56

    Re: Можно ли отключить автоматическую регенерацию при открытии файла?

    I am sorry. «_recover»

    #6 Ответ от Jura 26 ноября 2004г. 11:07:10

    Re: Можно ли отключить автоматическую регенерацию при открытии файла?

    Можно попытаться конвертнуть в DXF и обратно (если удасться открыть ) Если не лечится, то попытаться с конвертированием в DXF «старой» версии.

    #7 Ответ от Kostya 29 ноября 2004г. 17:15:12

    Re: Можно ли отключить автоматическую регенерацию при открытии файла?

    recover не проходит, dxf пробовал, но не старые версии. Кстати вьюер ACADSEE 3.0 без проблем открывает и смотрит.

    #8 Ответ от Jura 29 ноября 2004г. 17:50:39

    Re: Можно ли отключить автоматическую регенерацию при открытии файла?

    какая у Вас версия Acad`a ?

    #9 Ответ от Vitalij 29 ноября 2004г. 19:30:01

    Re: Можно ли отключить автоматическую регенерацию при открытии файла?

    может и поможет как мертвому припарка, но всё же. а если открыть цзистый чертёж и вставить в него ехтот испорченый как блок ? У меня иногда похожие запарки бывают, так ехтот метод помогает (не всегда, тогда обрашхаюсь к бакам), но я так понял, баками здесь не пахнет 🙁

    #10 Ответ от Kostya 30 ноября 2004г. 17:07:14

    Re: Можно ли отключить автоматическую регенерацию при открытии файла?

    > Vitalij
    ААА-а-аа-а-а-а. Получилось . Блоком можно . Но обнаружил спотыкуху када-смешно-ему не нравился 1 слой, который начинался с пробела . Причем это он писал, когда я пытался в лоб его открыть !(Или через DXF-уже не помню). После вставки блоком и проверкой Audit-ом выдал
    Invalid layer name » Стена в грунте» found.
    Changed to «AUDIT_I_041130170413-0». Если эту мелочь подправить ручками в DXF файле- то возможно будет и открыть, наверное.
    Да, еще один метод- может кому поможет- вчера один наш местный мастер без каких-либо проблем открыл все эти файлы в CORELe . И после сохранения их не отрыгивает Автокад! 😉
    Спасибо форуму и всем, кто откликнулся, Виталичу- особенное !

    Сообщения 10

    Тему читают: 1 гость

    Страницы 1

    Чтобы отправить ответ, вы должны войти или зарегистрироваться

    Форумы CADUser → Autodesk → AutoCAD → Можно ли отключить автоматическую регенерацию при открытии файла?

    Форум работает на PunBB , при поддержке Informer Technologies, Inc

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *