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

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

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

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Off-Topic: показать
Часть информации по тому, "что можно сносить, а с чем лучше погодить":
http://autolisp.ru/2015/08/26/erase-dictionaries-at-dwg/

Масштабы аннотаций у меня на работе, например, стандартизированы. Если есть возможность - сносятся лишние, а стандартные устанавливаются и настраиваются.
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • **
  • Сообщений: 64
  • Карма: 0
У нас со стандартизацией (в частности с масштабами аннотаций) всё сложно. Из-за специфики института некоторые чертят в метрах, некоторые в миллиметрах. Я столкнулся с тем, что "метровщики" используют свои масштабы аннотаций (например масштаб описан как 1:5000, а единицы 1:5, ибо чертёж в метрах и им так удобнее).
Но это так, оффтоп, поэтому на эту тему  дискутировать в этой ветке наверное не стоит.

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
если это вообще реализуемо и не слишком медленно будет работать
Это нереализуемо на лиспе. А на ObjectARX или .NET реализуемо, но будет работать слишком долго на файлах типа вашего 25Мбайтного мусора и соотвественно не имеет смысла - в автозагрузку такую проверку ни в коем случае ставить нельзя.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Насчет единиц проектирования - ну извините, тут совсем все просто: lunits, insunits, insunitsdefsource, insunitsdeftarget - кто мешает настроить?
По "PrePurge" я смогу реализовать только вариант "по состоянию на последнее сохранение", не больше. Рушить файлы не хочется от слова совсем :)
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
По "PrePurge" я смогу реализовать только вариант "по состоянию на последнее сохранение", не больше.
Как ты собираешься на лиспе подсчитывать используемость или неиспользуемость элементов словаря в лиспе? ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 64
  • Карма: 0
А на ObjectARX или .NET реализуемо, но будет работать слишком долго на файлах типа вашего 25Мбайтного мусора и соотвественно не имеет смысла - в автозагрузку такую проверку ни в коем случае ставить нельзя.
Возможно. Всё будет зависеть от того, сможет ли Алексей вообще реализовать эту идею и с какой скоростью это будет работать. К тому же такую проверку планируется применять не ко всем словарям сразу, а к отдельным и только после тестирования на пачке файлов. Для объектов DGN и ScaleList на данном этапе вполне достаточно проверки полного количества записей словаря.

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Я собираюсь скопировать текущий файл в %temp% (возможно, с новым именем) и открыть через ObjectDBX. Поудалять данные для указанных словарей и вернуть разницу. Потом закрыть файл dwg и удалить его. Надеюсь, сработает нормально (прямо сейчас возможности подобное провернуть не имею - работы многовато).
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Всё будет зависеть от того, сможет ли Алексей вообще реализовать эту идею и с какой скоростью это будет работать.
Я поясню почему я считаю, что на лиспе это принципиально невозможно. Для того, чтобы определить, что какой-то из объектов словаря используется в чертеже необходимо выполнить проверку не ссылается ли каждый из объектов чертежа на выбранный объект. Для этой цели в лиспе нет средств. Но даже если бы это удалось, то пришлось бы для каждого из объектов словаря сканировать весь чертеж. Представь себе, что у тебя в словаре всего лишь 1000 объектов и в чертеже вообще больше ничего нет (в действительности есть еще хотябы 1000 объектов - слои, типы линий, визуальные стили и т.д. и т.п.). Так вот такая проверка уже будет порядка 1000000 итераций. А если это как в твоём примере > 300000 объектов в словаре, то итераций будет 90000000000 !!!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я собираюсь скопировать текущий файл в %temp% (возможно, с новым именем) и открыть через ObjectDBX. Поудалять данные для указанных словарей и вернуть разницу. Потом закрыть файл dwg и удалить его. Надеюсь, сработает нормально
Так ты же удалишь таким образом и используемые элементы...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Н-да, вариант оказался нерабочим: записи удалить не представляется возможным без предварительной очистки файла (блоки, типы линий, текстовые и размерные стили и т.п.). Даже не знаю, имеет ли смысл показывать свое "чудовище".
Если коротко - то prePurge сделать не удалось.
---
Добавлю: можно, конечно, попробовать создать новый экземпляр AutoCAD, в него загрузить копию, почистить, потом дальше открыть... Но это уже, мне кажется, будет перебор.
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • **
  • Сообщений: 64
  • Карма: 0
Если коротко - то prePurge сделать не удалось.
Не страшно, спасибо и на том что сделал :) Реально очень помог :)
Интересно, а по какому алгоритму сам Акад анализирует список неиспользуемых объектов в команде Purge перед самой очисткой? На адекватных файлах этот анализ происходит не так уж и долго, тем более там анализируются все объекты. Или эти методы недоступны обычными методами программирования?

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Так и чистится там текущий документ, а не открытый через ObjectDBX (т.е. достаточно криво ;))
P.S. В Autodesk AppStore есть пакетная чистилка файлов. Названия не помню, но поискать можно.
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Или эти методы недоступны обычными методами программирования?
Эти методы недоступны в лиспе, но доступны в ObjectARX.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 64
  • Карма: 0
Так и чистится там текущий документ
Так и надо, чтобы чистился текущий документ :) Точнее ПреПуржился :)

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
В принципе, есть еще одна идея: запустить чистку, а потом выполнить откат обратно. Но как файл потом будет работать - не представляю.
Все, что сказано - личное мнение.

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

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