Очистка файлов от ненужных данных LineStyle DGN в AutoCAD.

Автор Тема: Очистка файлов от ненужных данных LineStyle DGN в AutoCAD.  (Прочитано 48899 раз)

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

Оффлайн Подшиваленко Дмитрий

  • ADN Club
  • **
  • Сообщений: 64
  • Карма: 0
В VisualLisp/AutoLisp??? Нет конечно. Тут нужны Windows hooks, на которые лисп не способен.
Печаль :(
Вообще-то я бы не стал в реакторах использовать команды...
Алексей, твою позицию по этому вопросу я помню. Тем не менее другого способа избавиться именно от неиспользуемых масштабов и зарег. приложений, кроме как очистка командой в реакторе, не было найдено/предложено. Напомню, масштабы и зарег. прил. перетекают в текущий чертёж из ссылочного файла (при подключении ссылки). Уже хочется пнуть автодеск, чтобы они сделали возможность отключения перетекания этого барахла из ссылок.

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

  • Administrator
  • *****
  • Сообщений: 776
  • Карма: 122
Очистка зарегистрированных приложений:
Код - Auto/Visual Lisp [Выбрать]
  1. (vlax-for app (vla-get-registeredapplications (vla-get-activedocument (vlax-get-acad-object)))
  2.   (vl-catch-all-apply (function (lambda () (vla-delete app))))
  3.   ) ;_ end of vlax-for
И про очистку масштабов аннотаций тоже были подобные решения, мне кажется.
Все, что сказано - личное мнение.

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

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

Оффлайн Подшиваленко Дмитрий

  • ADN Club
  • **
  • Сообщений: 64
  • Карма: 0
И про очистку масштабов аннотаций тоже были подобные решения, мне кажется.
Нужно чистить именно неиспользуемые масштабы и приложения. Прочитав эту ветку заново, нашёл фразу о том, что лисп на такое не способен.

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

  • Administrator
  • *****
  • Сообщений: 776
  • Карма: 122
Теоретически можно попытаться очистить записи в словаре ACAD_SCALELIST, но я не уверен в корректности конечного результата. Надо пробовать, а у меня сейчас другой работы многовато :(
Все, что сказано - личное мнение.

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

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

Оффлайн Подшиваленко Дмитрий

  • ADN Club
  • **
  • Сообщений: 64
  • Карма: 0
Теоретически можно попытаться очистить записи в словаре ACAD_SCALELIST, но я не уверен в корректности конечного результата. Надо пробовать, а у меня сейчас другой работы многовато
Так это опять же полная очистка словаря. Вся страница 4 этой ветки посвещена тому, что на лиспе нельзя создать механизм очистки неиспользуемых элементов словаря.
А так же:
Снова упираемся в ограничения lisp. В нём нет средств проверки "используется/не используется". Нужно сканировать всё базу чертежа.

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

  • Administrator
  • *****
  • Сообщений: 776
  • Карма: 122
Хорошо, уговорил :) Не стану спорить.
P.S. На прошлой работе очистку масштабов аннотаций я повесил на "загрузку" документа. Там команды применять можно совершенно спокойно.
Все, что сказано - личное мнение.

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

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

Оффлайн Подшиваленко Дмитрий

  • ADN Club
  • **
  • Сообщений: 64
  • Карма: 0
P.S. На прошлой работе очистку масштабов аннотаций я повесил на "загрузку" документа. Там команды применять можно совершенно спокойно.
Так на загрузке она и так у меня висит. Проблема в том, что при подключении ссылки они опять липнут и толку от того что ты их почистил при загрузке никакого :( Поэтому и пошла тема реакторов.
Собственно vla-sendcommand нормально отрабатывает в реакторе на событие vlr-beginClose. Он посылает команду как раз не в никуда, а в чертёж перед событием vlr-beginSave. Вот только бы отловить значение этого диалога... Но до хуков мне далеко... Почитал про них уже...
Блин, по-ходу vla-sendcommand не перед vlr-beginSave. Была мысль убрать команду сохранения в реакторе, оставить очистку, а акад уже сам сохранит очищенный файл. Не прокатило. Чистит, но не сохраняет :(
« Последнее редактирование: 16-02-2018, 15:07:41 от Подшиваленко Дмитрий »

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

  • Administrator
  • *****
  • Сообщений: 776
  • Карма: 122
А если использовать vla-save? :) Правда, как быть с абсолютно новым файлом - еще вопрос.
Все, что сказано - личное мнение.

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

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

Оффлайн Подшиваленко Дмитрий

  • ADN Club
  • **
  • Сообщений: 64
  • Карма: 0
А если использовать vla-save?  Правда, как быть с абсолютно новым файлом - еще вопрос.
Так вопрос в том, что надо сохранять (да и чистить тоже) только при ответе "Да" в диалоге на закрытие. А это, как сказал Александр, только хуками ловить. Я думал, может есть реактор какой-нибудь на тему этих диалоговых окон, но не нашёл.

Оффлайн Подшиваленко Дмитрий

  • ADN Club
  • **
  • Сообщений: 64
  • Карма: 0
Очистка зарегистрированных приложений:
Код - Auto/Visual Lisp [Выбрать]
  1. (vlax-for app (vla-get-registeredapplications (vla-get-activedocument (vlax-get-acad-object)))
  2.   (vl-catch-all-apply (function (lambda () (vla-delete app))))
  3.   ) ;_ end of vlax-for
И про очистку масштабов аннотаций тоже были подобные решения, мне кажется.
Решил потестить этот код. Сначала подумал что акад подвис. В итоге дождался. В общем код выполнялся 11 минут (для сравнения команда "purge _r" выполняется 22 секунды). Но результат заставил задуматься. С помощью ArxDbg (огромное спасибо Александру Ривилису) посмотрел содержимое RegApp Table. В принципе лисп оставил в ней почти то же самое, что и команда "purge _r", то есть вычистил неиспользуемые приложения (несколько штук не вычистил). Поэтому закралось сомнение в утверждении Александра о том, что на лиспе нельзя очищать неиспользуемые элементы.
Алексей, огромная просьба, если вдруг вспомнишь где были такие решения, кинь, пожалуйста, ссылку, буду очень благодарен :)
На моей памяти все решения, которые я находил, приводили к полному сбросу списка масштабов (и внедрению своих). Такой у меня есть. Нужен лисп, который бы давал результат, аналогичный команде (command "_-scalelistedit" "_d" "*" "_e"), то есть очищал именно неиспользуемые масштабы аннотаций.
Естественно это не горит :)
Понимаю, что мы тут уже не совсем в теме, поэтому создал ветку http://forum.dwg.ru/showthread.php?p=1712142#post1712142.

Оффлайн Подшиваленко Дмитрий

  • ADN Club
  • **
  • Сообщений: 64
  • Карма: 0
Нарыл https://forums.autodesk.com/t5/autocad-civil-3d-customization/scale-list-cleanup-lisp/td-p/5645436
Взял оттуда очистку ссылочных масштабов, повесил на реактор команды закрытия. Всё работает как надо :) Всем огромное спасибо :)

Оффлайн axl_slash

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Ребята, всем привет! Прошу помощи, есть файлы (ссылка на один из них https://cloud.mail.ru/public/AFBc/zZCknLJSH) которые дико тормозят и чистки которые вшиты в акад18 и двг пурж и чистка лиспом прокси никак не помогают. Если начертить полилинию и начать двигать контрольную точку, то комп начинает просто висеть, особенно когда это файл сборки состоящий из нескольких (внешние ссылки) подобных файлов с большим размером. В чём проблема то?

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

  • Administrator
  • *****
  • Сообщений: 8807
  • Карма: 1091
  • Рыцарь ObjectARX
  • Skype: rivilis
axl_slash,
1. К данной теме этот вопрос не имеет никакого отношения, т.к. никаких типов линий DGN в чертеже нет. Поэтому обсуждаться здесь этот вопрос больше не будет.
2. Деинсталлируй SPDS Extension и проверь как работает. У меня никаких "тормозов" при изменении положения ручек полилинии не возникает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн axl_slash

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Спасибо за оперативный ответ. К сожалению не помогло. попробую в другом разделе задать вопрос