17.10.2012

Некоторые тонкости работы с внешними ссылками.

Сегодня в скайпе достаточно долго общались на предмет "много внешних ссылок большого объема, работать почти невозможно. Кто виноват, что делать и как дальше жить?"

Не претендуя на истину в последней инстанции, хочу попытаться рассмотреть некоторые вопросы настройки системы, сети и AutoCAD.



Ну, касательно сети много не скажешь - понятно, что никакого WiFi или (брррр!) коаксиала. Нормальная витая пара с пропускной способностью не ниже 100 мегабит.

ОС: места на системном диске - побольше, винты - побыстрее. Остальное - по вкусу. В нашем случае не это критично.

Осталась самая малость: настроить сам AutoCAD. Поехали!

Во избежание непредсказуемых вопросов предположим, что вся контора работает по крайней мере на одной версии AutoCAD. Неважно, на какой - 2005, 2008 или 2013. Главное, что черезполосицы нет.

Далее. Набор ПО одинаков: если у кого-то AutoCAD Architecture, то у остальных либо AA, либо (как минимум) установлены соответствующие ObjectEnabler'ы. Теоретически в настройках можно сделать так, чтобы AutoCAD пытался сам вылезти в интернет и скачать соответствующий ObjectEnbaler. Практически подобное, как правило, нереализуемо: всем подряд проектировщикам никто доступа в интернет не даст. Так что это головная боль местных сисадминов / сапровцев.

Теперь будет очень много копий со справки, с моими комментариями. Хотите - читайте, не хотите - сразу комментируйте :)

Системная переменнаяОписаниеПояснение (с возможными рекомендациями)
proxynoticeПоказывает уведомление о наличии в файле прокси-объектов.
0Окна не показывается
1Окно показывается
Лично я ставлю в 1. Хотя бы для того, чтобы понимать, что в файле может "работать не так".
proxyshowУправляет показом прокси-объектов
0Прокси не показываются
1Прокси показываются полностью
2Вместо прокси видим прямоугольники
Обычно ставлю в 1. В таком случае уже многократно упоминавшийся ExplodeAllProxy сработает нормально
Эти переменные достаточно широко известны, теперь переходим к тому, что напрямую касается внешних ссылок.

Системная переменнаяОписаниеПояснение (с возможными рекомендациями)
demandloadЗадает условия подгрузки приложений и ObjectEnabler'ов
0Отключение подгрузки. Ничего не грузится и как будет отображаться и обрабатываться - одному богу известно
1Подгружает соответствующее приложение или ObjectEnabler при открытии чертежа, но не при вызове команды
2Подгружает приложение / ObjectEnabler только при вызове соответствующей команды
3Приложение или ObjectEnabler грузится при открытии файла или при вызове команды
Ставлю равным 2. В таком случае при proxyshow = 1, proxynotice = 1 у меня:
а) не грузится ничего лишнего
б) файл более-менее нормально отображается
в) я в курсе того, что в файле есть "лишнее" и могу это очистить. Соответственно я готов к проблемам при печати файла или использования буфера обмена.

Прежде чем продолжим, немного теории в моем понимании.

Есть такой параметр, который мало кто трогает - индексы. Фактически индекс для dwg - это как содержание для книги. Работать удобнее, но хорошее содержание запросто утяжеляет книгу.

Индексов в dwg практически два: пространственный и слоевой.

Пространственный индекс организовывает объекты по их положению в трехмерном пространстве. Такой индекс может оказаться полезным при подгрузке подрезанной внешней ссылки: считываются только объекты внутри контура подрезки.

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

Индексы можно создавать как принудительно при сохранении файла, так и возложить эту высокую миссию на AutoCAD.

Для ручного создания индексов вызовем окно "Сохранить как" и в выпадающем списке "Сервис" (в английской версии - Tools) выберем Параметры (Options). А там напрямую указано, какой индекс создавать.

Но каждый раз туда не набегаешься, поэтому обратимся к справке:

Системная переменнаяОписаниеПояснение (с возможными рекомендациями)
indexctlУправляет созданием индексов и их сохранением в файле

0Индексы не создаются. Значение по умолчанию.
1Создается только слоевой индекс
2Только пространственный индекс
3Создавать оба индекса
Обычно не трогаю, для больших файлов (благо их немного пока) предпочитаю создавать индексы принудительно

Сама по себе indexctl имеет весьма посредственное влияние. Для комфортной работы понадобится еще кое-что:

Системная переменнаяОписаниеПояснение (с возможными рекомендациями)
treedepthЗадает максимальное число ветвлений древовидного пространственного индекса.

0Запрещает использование пространственного индекса. Теоретически позволяет работать с большими чертежами - порядок обработки объектов внешних ссылок неизменен и определяется положением объектов в базе подгружаемого dwg
>0Включает пространственный индекс.
<0Наплевав на индекс, все объекты рассматриваются как двумерные. Требуется только для 2D-чертежей
Системная переменная хранится в чертеже, поэтому либо меняем в шаблоне, либо используем соответствующие лиспы / arx / dll, меняющие эту переменную.
По умолчанию значение 3020. В картографии, например, можно попытаться использовать либо 0, либо отрицательное значение.
treemaxСамая непонятная для меня переменная. С одной стороны, она ограничивает память компьютера на обработку индексов. С другой - позволяет обрабатывать чертежи, созданные на более мощных компьютерах.Не экспериментировал. Значение по умолчанию 10 000 000 не менял ни разу.

Так, с индексами вроде бы все. Осталась совсем мелюзга:

Системная переменнаяОписаниеПояснение (с возможными рекомендациями)
xloadctlРегулирует режим подгрузки ссылок.
0Отключает режим подгрузки; открывается весь чертеж.
1Включает режим подгрузки. Открывается файл ссылки.
2Включает режим подгрузки. Открываются и блокируются копии чертежей внешних ссылок; чертежи внешних ссылок не блокируются
По умолчанию значение 2. Т.е. файл ссылки копируется в каталог, установленный в xloadpath либо каталог расположения временных файлов AutoCAD и "подсасывается" уже оттуда.
Насколько я понял логику системной переменной: если установить xloadctl в 0, то ссылка будет проигнорирована. При 1 ссылка будет загружена оттуда, где она физически находится. При 2 файл копируется на локальную машину и подгружается уже с нее.

Теоретически при значении 2 работа на локальной машине будет наиболее быстрой, но при 0 можно будет просмотреть основной чертеж без попытки нахождения внешних ссылок. А при 1 на локальной машине ничего лишнего не будет появляться. Правда, и нагрузка на сервер / сеть будет аховая :(

Однозначной рекомендации дать не могу. Все зависит от конкретной ситуации.
xloadpath Папка для временных файлов внешних ссылокИмеет значение только для xloadctl = 2. По умолчанию совпадает с каталогом временных файлов AutoCAD.

В некоторых случаях (например, есть свободный HDD с увеличенным быстродействием) можно ее заменить. Да и чистить отдельный каталог, понимая, что в нем находится, всяко проще.

Пару раз для эксперимента менял значение, но заметного прироста производительности не обнаружил

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