Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: D_TRex от 18-05-2022, 11:34:13

Название: Запрет обновления листов
Отправлено: D_TRex от 18-05-2022, 11:34:13
Здравствуйте, проблема следующая - создаю новый лист (а документ обрастает 60 км водопроводной сети, весит более 50мб).
В общем создаю новый лист, жду пока он прорисуется пару минут, затем быстренько форматирую и всё по новой.
Вопрос, я в начале ввожу все эти переменные

Код - vb.net [Выбрать]
  1.              CadDoc.Utility.Prompt("Начало создания листов")
  2.              CadDoc.SetVariable("SAVETIME", 0) ' отключаю автосохранение
  3.              CadDoc.SetVariable("REGENMODE", 0) ' отключаю обновление модели
  4.              CadDoc.SetVariable("FIELDEVAL", 0) ' отключаю обновление полей
  5.  

но в командной строке вижу:

Команда: Начало создания листов
Выполняется регенерация листов.
Выполняется регенерация листов.
Выполняется регенерация модели.
        -//-
Команда: Выполняется регенерация листов.
Команда: Выполняется регенерация модели.
Команда: Выполняется регенерация модели.
Команда: Выполняется регенерация модели.
Команда: Листы успешно созданы

Переменные устанавливаются, так как я потом проверял в AutoCade. Что я делаю не так или какие переменные не учёл, если приложение AutoCad использовать в фоновом режиме то он отказывается выполнять команды по созданию листа. Как вариант подскажите как создать лист без видового экрана, либо как минимизировать содержимое видового экрана. Понятно что последнее больше вопрос чертёжникам, а не программистам, но можете вполне столкнуться, так как листы в пустом файле создаются мигом, а вот в файле с примитивами - в разы дольше.
Название: Re: Запрет обновления листов
Отправлено: Александр Ривилис от 18-05-2022, 11:44:36
LAYOUTREGENCTL
LAYOUTCREATEVIEWPORT
Название: Re: Запрет обновления листов
Отправлено: D_TRex от 18-05-2022, 12:00:10
LAYOUTCREATEVIEWPORT это по ходу то что надо. Спасибо.
Код - vb.net [Выбрать]
  1. CadDoc.SetVariable("LAYOUTCREATEVIEWPORT", 0)
А синтаксис не подскажите, так как в кад сперва идёт ввод команды, а потом значение

Вот так оказывается прошло
Код - vb.net [Выбрать]
  1. CadDoc.Utility.Prompt("LAYOUTCREATEVIEWPORT" & vbCrLf)
  2. CadDoc.Utility.Prompt(0 & vbCrLf)
Название: Re: Запрет обновления листов
Отправлено: Александр Ривилис от 18-05-2022, 16:01:55
Вот так оказывается прошло
Код - vb.net [Выбрать]
CadDoc.Utility.Prompt("LAYOUTCREATEVIEWPORT" & vbCrLf)
CadDoc.Utility.Prompt(0 & vbCrLf)
Это что такое??? Указанное мною выше - это не команды, а системные переменные. Поэтому их устанавливают через SetVariable. А Utility.Prompt - это просто печать в командной строке без передачи команды/системной переменной в AutoCAD.
Название: Re: Запрет обновления листов
Отправлено: D_TRex от 18-05-2022, 19:06:30
В каде сперва пишется команда "LAYOUTCREATEVIEWPORT" потом надо нажать Enter, то есть она сразу не ждёт значения, поэтому зашёл через Promt. Предыдущие что я указал в листинге, да одной строкой работают.
Проблема другая как создать Pview до его отображения, либо что отключить, так как отрисовка каждого последующего листа занимает ещё больше времени чем предыдущего и в результате вылет ошибкой. Я отключил вообще все слои, отключил указанные выше синхронизации, но всё равно время отнимается на отрисовку. На работе "камень i7" и поколение посвежее, а вот дома i5 старенький, а я с работы отпросился с понтом буду разбивать листы 190 штук как ни как.

Civil как бы умеет создавать листы в фоне, я не пробовал, но они разработчики и у них все карты, но разбивает только на протяжении трассы, мне этот метод для вспомогательных чертежей не подходит. Но про теневое создание надо подумать.

Сделали бы на основе СПДС рамки, которые потом идут в листы, я так и сделал (динамический блок рамок с сохранением параметров в атрибутах) я их считываю и создаю листы, но вот проблема на больших файлах, часть попробую конечно разделить, но это не скоро (малый опыт в многопоточности).