| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > LISP. Очистка чертежа от мусора

LISP. Очистка чертежа от мусора

Ответ
Поиск в этой теме
Непрочитано 18.08.2014, 16:15 11 | #1
LISP. Очистка чертежа от мусора
gomer
 
строю, ломаю
 
Украина
Регистрация: 03.04.2008
Сообщений: 5,515

Выкладываю пилотный проект программы по очистке чертежа. Код не мой, я просто собрал кое-что до кучи
Надеюсь кому-нибудь да поможет

Применение
- Загрузить CleanDWG.vlx в автокад или CleanDWG.des в bricscad
- В командной строке набрать CLEANDWG

Замеченные ошибки
В Autocad 2013 En русские буквы в диалоговом окне отображаются некорректно. Обсуждение проблемы тут

Критика и предложения приветствуются

История изменений
31.03.2014 Программа обновлена до версии 1.3

Миниатюры
Нажмите на изображение для увеличения
Название: CleanDWG13.png
Просмотров: 7674
Размер:	39.4 Кб
ID:	147269  

Вложения
Тип файла: zip CleanDWG13.zip (19.1 Кб, 12397 просмотров)


Последний раз редактировалось gomer, 16.03.2016 в 18:02.
Просмотров: 181004
 
Непрочитано 18.08.2014, 16:19
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Добавь еще очистку параметрических зависимостей и историю твердых тел Можно заодно еще и словари посносить, но это только для варианта "невертикального" AutoCAD (ИМХО).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.08.2014, 16:28
#3
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Очистка истории твердых тел какая-то есть. Насчет параметризации я пока не нашел "некомандный" способ для сего действия. В планах еще разобраться с с пустыми блоками, изображениями и внешними ссылками (код спилю у VVA из bgtools) и очистка прокси с помощью программы А. Ривилиса.
Алгоритм обработки текста самый простой пока, но это все поправимо
gomer вне форума  
 
Непрочитано 18.08.2014, 16:34
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Посмотри у меня на сайте - я делал все это.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.08.2014, 18:01
#5
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Кулик Алексей aka kpblc, А через entnext не быстрее будет удалить п-зависимости и вообще можно ли?
gomer вне форума  
 
Непрочитано 18.08.2014, 18:11
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Не думаю, что получится. Посмотри мой код http://autolisp.ru/2014/03/24/clear-dwg-at-opening/ - вроде бы работало. Нарисовать для этого кода dcl не проблема, но мне сегодня точно не до этого будет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.08.2014, 20:27
#7
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Не думаю, что получится.
Да действительно, не получается... А почему сначала entdel, а потом vla-delete?
gomer вне форума  
 
Непрочитано 18.08.2014, 21:16
#8
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от gomer Посмотреть сообщение
Критика и предложения приветствуются
Более ли менее потестировал по всем пунктам - ошибок не нашел.
Критиковать - нос не дорос, а вот предложения - пожалуй (в добавок к #3):
1. Прикрутить бы туда удаление дубликатов из overkill'a.
2. Мое мнение: галочки на удаление точек и маскировок и групп по умолчанию лучше бы убрать. Думаю, их правильнее сознательно поставить, чем случайно посносить нужные объекты. А в идеале - запоминать галочки, выбранные ранее. Хотя бы в пределах сеанса, но неплохо бы и глобально. Как это сделать лучше - не знаю. Может в реестр писать или в текстовый файл?
3. Не смог создать пустой Мтекст (однострочник получилось), может, программно надо было - поленился. А вот текст, содержащий только пробелы, не удаляется. Жаль, потому что его нельзя выделить кроме как Ctrl+A. Может, добавить галку "Текст из пробелов"? Ну или под одну грубенку его, все равно не могу придумать от него практического толку - в топку.

Беру на вооружение, спасибо, gomer.
skkkk вне форума  
 
Непрочитано 18.08.2014, 23:16
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Offtop: Если завтра будет время, опубликую графический вариант своего кода.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.08.2014, 17:00
#10
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от skkkk Посмотреть сообщение
1. Прикрутить бы туда удаление дубликатов из overkill'a.
Тут я бы посоветовал макрос, так как overkill - самостоятельная команда со своим диалогом

Цитата:
Сообщение от skkkk Посмотреть сообщение
галочки на удаление точек и маскировок и групп по умолчанию лучше бы убрать.
Может ты и прав, это не сложно переделать

Цитата:
Сообщение от skkkk Посмотреть сообщение
в идеале - запоминать галочки, выбранные ранее. Хотя бы в пределах сеанса, но неплохо бы и глобально. Как это сделать лучше - не знаю. Может в реестр писать или в текстовый файл?
не хотелось бы связываться с реестром, но опять же это несложно добавить, вопрос в том как реализовать это

Цитата:
Сообщение от skkkk Посмотреть сообщение
текст, содержащий только пробелы, не удаляется. Жаль, потому что его нельзя выделить кроме как Ctrl+A. Может, добавить галку "Текст из пробелов"? Ну или под одну грубенку его, все равно не могу придумать от него практического толку - в топку.
Текст с маскировкой может быть полезен Сейчас программа выбирает только пустой текст. Придумаешь маску (условие пустоты) для выбора, добавлю. Вообще это не так просто, нужно выбрать все тексты и каждый проверить на наличие контента и уж потом удалить. Это займет больше времени, а я уже заметил, что на больших файлах программа может вызвать подвисание. В-общем нужно тестить.
gomer вне форума  
 
Непрочитано 20.08.2014, 02:56
#11
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от gomer Посмотреть сообщение
Тут я бы посоветовал макрос, так как overkill - самостоятельная команда со своим диалогом
А жаль. У нее есть брат -overkill, который, вроде, можно накормить аргументами через (vla-SendCommand). А в случае отсутствия на машине ExpressTools можно эту галочку в DCL-диалог не включать. Но по-моему, ты недолюбливаешь командные способы.
Цитата:
Сообщение от gomer Посмотреть сообщение
не хотелось бы связываться с реестром, но опять же это несложно добавить, вопрос в том как реализовать это
Пока только могу лишь в качестве набросков для алгоритма:
Вариант №1:
1. Создаем для каждой галки запись в реестре. Шучу. Если это будет сумма битовых флагов, то записи хватит одной.
2. При запуске читаем эту запись.
3. При изменении пользователем набора галочек... чтобы узнать что будем делать, отправь смс на короткий номер
Вариант №2:
1. Создаем в укромном местечке, а может и в той же самой папке, откуда запущен лисп (кстати, не об этом ли здесь?) текстовый файл и делаем туда запись суммы битовых флагов.
2. Далее как и в п.п. 2 и 3 варианта №1.

Цитата:
Сообщение от gomer Посмотреть сообщение
Текст с маскировкой может быть полезен
Ну ладно, не в топку. То есть, если делать, то непременно отдельную галку? А маскированные пустые тексты, может, вообще удалять/не удалять вместе с маскировками?
Цитата:
Сообщение от gomer Посмотреть сообщение
Придумаешь маску (условие пустоты) для выбора, добавлю.
Пока слёту так и не могу придумать маску для n-ного количества пробелов. А заодно и "непустых" пробелов (те, что Ctrl+Shift+Space). А может и не надо, потому что
Цитата:
Сообщение от gomer Посмотреть сообщение
выбрать все тексты и каждый проверить на наличие контента
- это как-то не айс. Реально долго это может быть. Если уж и делать такую галку, то с пометкой "долго" и выключенной по умолчанию

----- добавлено через ~1 ч. -----
Еще пару мыслей:
1. Линии нулевой длины.
2. Может, "плющилку" 2D? Или хотя бы обнуление уровня полилиний? В частности случаи, когда полилиния ведет себя как-то неадекватно. Попадались такие файлы, может, смогу найти - выложу. При выборе такой полилинии не видна ее центральная ручка (при GRIPS=2) , и при попытке потянуть за крайнюю ручку рядом с полилинией появляется начало координат, с осью, параллельной этой полилинии (СК объекта?). У таких полилиний уровень всегда ненулевой, и при попытке обнулить его через свойства полилиния просто пропадает из виду. Надеюсь, понятно объяснить получилось...

Последний раз редактировалось skkkk, 20.08.2014 в 04:14.
skkkk вне форума  
 
Автор темы   Непрочитано 20.08.2014, 11:08
#12
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от skkkk Посмотреть сообщение
Создаем для каждой галки запись в реестре. Шучу.
Это не шутки, так и придется сделать, ведь
Цитата:
Сообщение от skkkk Посмотреть сообщение
Линии нулевой длины.
и сразу найдутся товарищи, кому не по нраву линии маленькой, но гордой, ненулевой длины. Точнее отрезки и скукоженные полилинии но это опять же лопатить. Знаю, спрашивал...
Хотя лопатить все равно придется, если нужно будет чистить в блоках
gomer вне форума  
 
Непрочитано 20.08.2014, 11:14
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Цитата:
Сообщение от gomer Посмотреть сообщение
Это не шутки, так и придется сделать, ведь
Еще раз говорю - посмотри у меня на сайте (http://autolisp.ru/2014/03/24/clear-dwg-at-opening/). Вся очистка регулируется единственным параметром - битом. А разбираешь ты его уже внутри кода.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.08.2014, 11:21
#14
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от skkkk Посмотреть сообщение
Пока слёту так и не могу придумать маску для n-ного количества пробелов.
Тримить строку от пробелов и табуляции и проверять на пустоту.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 20.08.2014, 11:40
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Цитата:
Сообщение от Do$ Посмотреть сообщение
Тримить строку от пробелов и табуляции и проверять на пустоту.
А заодно сносить форматирование...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.08.2014, 13:43
#16
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Да, если мтекст и все что на его основе.
Offtop: Как же с этим проще в NET! Там напрямую из MTEXT без танцев с бубном можно прочитать строку без форматирования...
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 21.08.2014, 14:01
#17
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от gomer Посмотреть сообщение
и сразу найдутся товарищи, кому не по нраву линии маленькой, но гордой, ненулевой длины
Можно для них сделать поле для записи минимального значения длины. Ниже которой все удалять. Но тут в таком темпе сейчас пойдет-поедет, что окошко программы не уместится на экране меньше 30 дюймов
Цитата:
Сообщение от Do$ Посмотреть сообщение
Тримить строку от пробелов и табуляции и проверять на пустоту.

Цитата:
Сообщение от Do$ Посмотреть сообщение
Offtop: Как же с этим проще в NET! Там напрямую из MTEXT без танцев с бубном можно прочитать строку без форматирования...
Я не ошибусь, если скажу, что все танцы сводятся к применению одной функции, например, LM:Unformat от Lee Mac?

----- добавлено через ~11 мин. -----
Цитата:
Сообщение от gomer Посмотреть сообщение
Это не шутки, так и придется сделать, ведь
В смысле, только из-за линий нулевой длины придется делать запись в реестре для каждой галочки? Не пойму, почему так?
skkkk вне форума  
 
Непрочитано 21.08.2014, 20:28
#18
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Offtop:
Цитата:
Сообщение от skkkk Посмотреть сообщение
Я не ошибусь, если скажу, что все танцы сводятся к применению одной функции, например, LM:Unformat от Lee Mac?
Я тоже так думал, когда примерно год тому назад коллега попросил помочь убрать форматирование мультитекста из чертежа. Большой чертеж геодезической съемки, где на каждый текст навешано было форматирования выше крыши. Ну, я прикинул - на лиспе я знаю кучу функций для этого, в том числе mip_MTEXT_Unformat, LM:Unformat, StripMtext... Не буду трогать NET, обойдусь ими. В итоге ни одна из них не справилась на 100%, все равно оставался мусор. В итоге, промучившись с поиском и проверками почти час, я плюнул на это дело и написал код в NET.
Если убрать всю "обвязку" (используемые имена пространств, выбор объектов, открытие-закрытие объектов на запись и пр...), то все сводится к одной строчке:
Код:
[Выделить все]
mText.Contents = mText.Text;
Берем одно свойство и записываем в другое - вот и все танцы.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 21.08.2014, 22:20
#19
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


ну . Net и побыстрее будет. проблема только в совместимости...
gomer вне форума  
 
Непрочитано 22.08.2014, 09:55
#20
MorganSpb


 
Регистрация: 10.07.2008
Сообщений: 87


как установить данную приблуду? лисп подгрузил, результата нет.
MorganSpb вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > LISP. Очистка чертежа от мусора

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему очистка чертежа не выполняется при наличии Object Enabler? Xara AutoCAD 15 03.07.2014 11:50
Создание шаблона и очистка чертежа Сержик AutoCAD 9 14.02.2013 23:06
LISP. Как запустить LISP программу при создании чертежа по шаблону? (Автоматическое заполнение основной надписи) Do$ LISP 25 22.06.2011 15:39
очистка скана от мусора grozd62 Прочее. Программное обеспечение 4 04.04.2011 21:41
LISP для очистки чертежа от дублирующихся объектов Nikolays AutoCAD 5 13.12.2010 16:59