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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Команда PURGE, или как удалить действительно ненужные неиспользуемые элементы из файла

Команда PURGE, или как удалить действительно ненужные неиспользуемые элементы из файла

Ответ
Поиск в этой теме
Непрочитано 04.06.2009, 18:35 #1
Команда PURGE, или как удалить действительно ненужные неиспользуемые элементы из файла
AlphaGeo
 
Сообщений: n/a

Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Кто-нибудь придумал пуржить только "левое", сохраняя то, что было в указанном файле-шаблоне?
Можно задавать маски имен блоков
Код:
[Выделить все]
_.-purge;_b;*U*;_n;
_.-purge;_b;*D*;_n;
Однако есть опасность удалить неиспользуемые полезные блоки, в имени которых содержатся символы "D" или "U".
Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Пока замечал, что скорость реген сильно зависит от числа узлов в границах заливок-штриховок. И от общего числа узлов всех элементов. Можно попробовать замораживать слои с Hatch на время работы с блоками.
Кстати, сегодня обратил внимание: если при штриховке часть контура приходится на дин.блок, то после завершения штрихования в файле как раз и появляются эти самые *Uxxx и *Dxxx. Видимо, происходит переопределение блоков при участии их в контуре штриховки.

Последний раз редактировалось AlphaGeo, 04.06.2009 в 18:43.
Просмотров: 18354
 
Непрочитано 04.06.2009, 19:42
#2
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от AlphaGeo Посмотреть сообщение
Можно задавать маски имен блоков
Код:
[Выделить все]
_.-purge;_b;*U*;_n;
_.-purge;_b;*D*;_n;
Однако есть опасность удалить неиспользуемые полезные блоки, в имени которых содержатся символы "D" или "U".
А синтаксис позволяет задать не просто "D" или "U", а "*D" или "*U"?
По настоящему все "левое" можно отпуржить, только сравнивая с исходным шаблоном==образцом. Лишними могут быть ведь не только останки дин. блоков и размеров, но и "чужие" блоки, типы линий, стили текста, мультилинии и т.д. и т.п.
АлексЮстасу вне форума  
 
Непрочитано 04.06.2009, 19:54
#3
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
А синтаксис позволяет задать не просто "D" или "U", а "*D" или "*U"?
Представленная в посте #1251 запись как раз и учитывает блоки"*D*" и "*U*". Я незнаю, возможно ли задавать маску каким-либо символом, соотвествующим одному любому символу, а не нескольким любым символам, как это задается при помощи *.

Цитата:
Сообщение от АлексЮстасу
По настоящему все "левое" можно отпуржить, только сравнивая с исходным шаблоном==образцом. Лишними могут быть ведь не только останки дин. блоков и размеров, но и "чужие" блоки, типы линий, стили текста, мультилинии и т.д. и т.п.
Как вариант - написать пакет (Script-файл), при загруке которого сначала происходила бы очистка чертежа, а потом создание и подгрузка всех необходимых настроек. Однако, это несколько трудоемко. Но можно и попробовать.

Добавлено:
Если воспользоваться функцией System Variable Editor из ExpressTools (команда _.SYSVDLG),то можно создать scr-файл прямо оттуда... Останется дело за малым: прошерстить весть это файл и удалить ненужное, и добавить и изменить, что необходимо.

Последний раз редактировалось AlphaGeo, 04.06.2009 в 20:12.
 
 
Непрочитано 04.06.2009, 21:21
#4
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от AlphaGeo Посмотреть сообщение
Представленная в посте #1251 запись как раз и учитывает блоки"*D*" и "*U*".
Похоже, что я написал неоднозначно. Я имел в виду не любое вхождение символа "D", т.е. ;*D*;_ , а вхождение двух символов - "*D".
Т.е. позволяет ли синтаксис как-то описать звездочку "*" как обычный символ, а не как маску. В других случаях для этого можно использовать слэш "/", иногда одинарные ковычки.

Я до макросов еще не дорос - может быть с этого момента и начну.
АлексЮстасу вне форума  
 
Непрочитано 04.06.2009, 23:43
#5
Juss_00

Инженер
 
Регистрация: 11.12.2007
Москва
Сообщений: 295


АлексЮстасу, спасибо за *Х* не думал что "звездочки тут работают =)
__________________
Live as though tomorrow you will die,
Study as though you will live eternally.
Juss_00 вне форума  
 
Непрочитано 05.06.2009, 02:22
#6
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от Juss_00 Посмотреть сообщение
АлексЮстасу, спасибо за *Х* не думал что "звездочки тут работают =)
Увы, я не понял эту похвалу или иронию ... Я не понял, можно ли так записать, чтобы отпуржить только блоки "*Dxxx" и "*Uxxx"... Я в макросах полный пока ноль...
АлексЮстасу вне форума  
 
Непрочитано 05.06.2009, 03:10
#7
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


как вариант. Можно вставить в шаблон все нужные блоки размеры таблицы... засунуть из на спец слой и слой заморозить и закрыть.
После этого спокойно пуржить все подряд
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 05.06.2009, 11:13
#8
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,923
<phrase 1=


Может так, с масками
Цитата:
_.-purge;_b;?U*;_n;
_.-purge;_b;?D*;_n;
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 05.06.2009, 18:12
#9
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от zenon Посмотреть сообщение
Может так, с масками
_.-purge;_b;?U*;_n;
_.-purge;_b;?D*;_n;
Удалились все блоки со второй буквой "D" - в том числе и полезные...

Цитата:
Я незнаю, возможно ли задавать маску каким-либо символом, соответствующим одному любому символу, а не нескольким любым символам, как это задается при помощи *.
AlphaGeo - вот, zenon уже и ответил - символом "?"

Последний раз редактировалось АлексЮстасу, 05.06.2009 в 21:19.
АлексЮстасу вне форума  
 
Непрочитано 06.06.2009, 00:51
#10
Кулик Алексей aka kpblc
Moderator

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


По-моему, подойдет нечто типа
Код:
[Выделить все]
_.-purge;_b;`*U*;_n;
Не проверял.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.06.2009, 02:37
#11
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
По-моему, подойдет нечто типа
Код:
[Выделить все]
_.-purge;_b;`*U*;_n;
Не проверял.
См. пост 1251 и позже

Похоже, что наиболее пока подходящим будет:
_.-purge;_b;?U?;_n;_.-purge;_b;?U??;_n;_.-purge;_b;?U???;_n;_.-purge;_b;?U????;_n;

Даже у меня сработало.
Однако, остается некоторый риск, что может встретиться и нужный, не временный блок с нормальным именем, подпадающим под эти маски, который пуржить бы не хотелось...
Все-таки нужна и звездочка перед "U", но у кого бы узнать, как ее описать как простой символ, а не маску? Тогда пурж будет однозначным.

Кстати, кто-нибудь еще знает, как обнулить счетчик этих "*Uxxx" и "*Dxxx"? Тогда бы вероятность отпуржить нужное еще бы уменьшилась.

Последний раз редактировалось АлексЮстасу, 06.06.2009 в 02:48.
АлексЮстасу вне форума  
 
Непрочитано 06.06.2009, 17:09
#12
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
По-моему, подойдет нечто типа
Код:
[Выделить все]
_.-purge;_b;`*U*;_n;
Не проверял.
Алексей, апостроф не спасает... Смотрел в Справке AutoCAD'a - все что нашел, это описание поиска текста с использованием * и ?. Видать, другого не предусмотренно.
 
 
Непрочитано 06.06.2009, 18:04
#13
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
По-моему, подойдет нечто типа
Код:
[Выделить все]
_.-purge;_b;`*U*;_n;
Не проверял.
С апострофом вроде бы пуржатся только "левые" блоки!
Спасибо!!
Я апостроф просто не разглядел ночью, честно, прошу у тебя прощения...
И мой пост 1264 - ошибка...
АлексЮстасу вне форума  
 
Непрочитано 06.06.2009, 19:31
#14
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
С апострофом вроде бы пуржатся только "левые" блоки!
Спасибо!!
Я апостроф просто не разглядел ночью, честно, прошу у тебя прощения...
И мой пост 1264 - ошибка...
Странно, почему ж у меня это вообще не страбатывает?
Код:
[Выделить все]
Команда: -очистить

Тип неиспользуемых объектов 
[Блоки/Рзмстили/Слои/типыЛин/Пстили/Формы/Тстили/Млстили/тблстИли/Зарегприл/Все]
: б
Имена удаляемых элементов <*>: '*U*
Запрашивать подтверждение на удаление каждого элемента? [Да/Нет] <Д>: _n
Элемент с именем "'*U*" не найден.

Команда: -ОЧИСТИТЬ

Тип неиспользуемых объектов 
[Блоки/Рзмстили/Слои/типыЛин/Пстили/Формы/Тстили/Млстили/тблстИли/Зарегприл/Все]
: б
Имена удаляемых элементов <*>: *U*
Запрашивать подтверждение на удаление каждого элемента? [Да/Нет] <Д>: _n
Удаление блок "*U10".
Удаление блок "*U11".
Удаление блок "*U12".
Удаление блок "*U6".
Удаление блок "*U7".
Удаление блок "*U9".
Удалено 6 блоки.


Добавлено:
Все, разобрался... Апостроф другой ("обратный") надо было набирать....

Последний раз редактировалось AlphaGeo, 06.06.2009 в 20:17.
 
 
Непрочитано 06.06.2009, 23:20
#15
Кулик Алексей aka kpblc
Moderator

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


Е-мое, да не апостроф это! Сравни
' - апостроф
` - тильда
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.06.2009, 23:48
#16
AlphaGeo


 
Сообщений: n/a


Алексей, для меня все время тильдой был вот этот символ ~
Тильда
Машинописный обратный апостроф
 
 
Непрочитано 07.06.2009, 00:00
#17
Кулик Алексей aka kpblc
Moderator

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


Ладно, ладно, не бушуй
Мир?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.06.2009, 02:55
#18
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от AlphaGeo Посмотреть сообщение
Смотрел в Справке AutoCAD'a - все что нашел, это описание поиска текста с использованием * и ?. Видать, другого не предусмотренно.
Если, создавая любой блок, использовать в имени *, то появится сообщение о кучке недопустимых символов в именах блоков. Там и "тильда" (обратный апостроф), и знаки больше-меньше, знаки препинания и пр. Возможно, все они чем-то могут быть нам полезны. Поле непаханное
А Алексей - гигант. И, благодаря ему, AlphaGeo и всем участникам, сделаю теперь для работы работы с дин. блоками типа свой (слегка спертый) первый макрос
АлексЮстасу вне форума  
 
Непрочитано 07.06.2009, 14:15
#19
AlphaGeo


 
Сообщений: n/a


Offtop:
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ладно, ладно, не бушуй
Мир?
Ммм... Как необычно. Обычно предложение мира мне делают только в "Цивилизации". Я всегда отказываю...
А тут вроде никто и воевать не собирался
 
 
Непрочитано 08.06.2009, 18:48
#20
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


создал макрос для очистки от "левых" блоков, но почему-то не получается создать маску для имен типа "A$C18D953CB" (откуда-то появляются блоки с подобными автоматическими именами)

Например, на: _.-purge;_b;A$C*;_n; или _.-purge;_b;A`$C*;_n; или _.-purge;_b;A$*;_n;

Автокад отвечает:

Enter type of unused objects to purge
[Blocks/Dimstyles/LAyers/LTypes/Plotstyles/SHapes/textSTyles/Mlinestyles/Tablest
yles/Regapps/All]: _b
Enter name(s) to purge <*>: A_n
Verify each name to be purged? [Yes/No] <Y>: _.-purge
Yes or No, please.

Получается, что "$" воспринимается как-то странно, хотя, в именах блоков доллар разрешен...


sv-rus, см. пост. 1212 - там как раз двустворчатая дверь разных типоразмеров.

Последний раз редактировалось АлексЮстасу, 08.06.2009 в 19:08.
АлексЮстасу вне форума  
 
Непрочитано 08.06.2009, 21:06
#21
Кулик Алексей aka kpblc
Moderator

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


Попробуй перед $ точно так же поставить обратный апостроф.
P.S. не проверял, подобные блоки у меня удаляются лиспом обычно...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.06.2009, 22:08
#22
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй перед $ точно так же поставить обратный апостроф.
P.S. не проверял, подобные блоки у меня удаляются лиспом обычно...
По опыту предудущей сессии это, естественно, было сделано первым (см. мой второй вариант: _.-purge;_b;A`$C*;_n;). Увы, результат аналогичен. Автокад:
Enter name(s) to purge <*>: A`_n
Verify each name to be purged? [Yes/No] <Y>: _.-purge
Yes or No, please.

Такое ощущение, что знак доллара воспринимается как знак точки с запятой - даром, что они висят на одной клавише (4). А не живет ли второй знак доллара еще на какой-либо клавише? Как знак вопроса, например (в русской на 7, в английской - рядом с шифтом)? Или еще как-то это объехать?...

Последний раз редактировалось АлексЮстасу, 08.06.2009 в 22:23.
АлексЮстасу вне форума  
 
Непрочитано 08.06.2009, 22:23
#23
AlphaGeo


 
Сообщений: n/a


АлексЮстасу, а просто с клавиатуры пробовал прогнать макрос? У меня вроде срабатывает, но нет файла с блоками a la A$C18D953CB.
Код:
[Выделить все]
Команда: -очистить

Тип неиспользуемых объектов 
[Блоки/Рзмстили/Слои/типыЛин/Пстили/Формы/Тстили/Млстили/тблстИли/Зарегприл/Все]
: б
Имена удаляемых элементов <*>: A`$C*
Запрашивать подтверждение на удаление каждого элемента? [Да/Нет] <Д>: _n
Элемент с именем "A`$C*" не найден.

Команда:
Команда: *Прервано*

Команда: -ОЧИСТИТЬ


Тип неиспользуемых объектов 
[Блоки/Рзмстили/Слои/типыЛин/Пстили/Формы/Тстили/Млстили/тблстИли/Зарегприл/Все]
: б
Имена удаляемых элементов <*>: A$C*
Запрашивать подтверждение на удаление каждого элемента? [Да/Нет] <Д>: _n
Элемент с именем "A$C*" не найден.
 
 
Непрочитано 08.06.2009, 22:28
#24
Кулик Алексей aka kpblc
Moderator

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


AlphaGeo, у меня в 2008:
Код:
[Выделить все]
Command: _-purge
Enter type of unused objects to purge 
[Blocks/Dimstyles/LAyers/LTypes/MAterials/Plotstyles/SHapes/textSTyles/Mlinestyl
es/Tablestyles/Visualstyles/Regapps/All]: _b
Enter name(s) to purge <*>: A$C*
Verify each name to be purged? [Yes/No] <Y>: _n
Deleting block "A$C48AE7A7F".
Deleting block "A$C774453FF".
Deleting block "A$C7E873DAC".
3 blocks deleted.
Странно...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.06.2009, 23:00
#25
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Гм... С клавиатуры и у меня сработало...

Command: _-purge
Enter type of unused objects to purge
[Blocks/Dimstyles/LAyers/LTypes/Plotstyles/SHapes/textSTyles/Mlinestyles/Tablest
yles/Regapps/All]: b
Enter name(s) to purge <*>: a$*
Verify each name to be purged? [Yes/No] <Y>: n
Deleting block "A$C18D953CB".
1 block deleted.
АлексЮстасу вне форума  
 
Непрочитано 08.06.2009, 23:24
#26
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Гм... С клавиатуры и у меня сработало...
А если маску имени блока взять в кавычки ("A$C*")?
Offtop: У меня все так же нет файла с блоками A$C... Пробовал разбивать размеры - думал от них эта зараза появляется - нифига, шиш.
Почитал Справку: символ $ вроде как используется при обозначении DIESEL-функций... Наверное, из-за этого и проблемы.
 
 
Непрочитано 08.06.2009, 23:25
#27
Кулик Алексей aka kpblc
Moderator

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


Ннда... Я б в таком случае задумывался о лиспе...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.06.2009, 02:14
#28
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Кулик Алексей aka kpblc, может вынести обсуждение в отдельную тему "Создание макроса для очистки чертежа от анонимных блоков"?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 09.06.2009, 02:37
#29
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от AlphaGeo Посмотреть сообщение
А если маску имени блока взять в кавычки ("A$C*")?
Offtop: У меня все так же нет файла с блоками A$C... Пробовал разбивать размеры - думал от них эта зараза появляется - нифига, шиш.
Почитал Справку: символ $ вроде как используется при обозначении DIESEL-функций... Наверное, из-за этого и проблемы.
Кавычки не помогли. Все-таки, похоже, что символ $ воспринимается как точка с запятой...
Сейчас у меня нет под рукой настоящего блока A$C18D953CB - я его на скорую руку сконструлил сам из первого попавшегося элемента

Кулик Алексей, В таких случаях я задумываюсь о MicroStation...
До лиспа я еще не дорос...
Без шуток - известно, откуда такие адские блоки типа "A$C774453FF" вообще берутся?
АлексЮстасу вне форума  
 
Непрочитано 09.06.2009, 04:37
#30
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Без шуток - известно, откуда такие адские блоки типа "A$C774453FF" вообще берутся?
Это автоматически генерируемые Автокадом, имена.
Один из вариантов появления: ctrl+c, shift+ctrl+v
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 09.06.2009, 08:21
#31
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Кавычки не помогли. Все-таки, похоже, что символ $ воспринимается как точка с запятой...
А если записать действительно в виде LISP-выражения этот макрос?
Код:
[Выделить все]
^C^C(command "_Purge" "_b" "A$C*" "_n")
По-моему, должно сработать.
Цитата:
Сообщение от wetr Посмотреть сообщение
Кулик Алексей aka kpblc, может вынести обсуждение в отдельную тему "Создание макроса для очистки чертежа от анонимных блоков"?
Поддерживаю... Готов поспособствовать с номерами сообщений, которые стоит перенести в другую тему.
 
 
Непрочитано 09.06.2009, 08:34
#32
Кулик Алексей aka kpblc
Moderator

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


Да легко С вас номера сообщений и новое название темы.
Тем временем лисповая попытка:
Код:
[Выделить все]
(defun _dwgru-purge-blocks (mask audit / adoc)
                           ;|
*    Очистка текущего файла от неиспользуемых блоков.
*    Параметры вызова:
	mask		маска имени блока. Допустимо применение символов *, ? и т.п. nil -> "*"
	audit		выполнять или нет автоматический аудит файла. t - выполнять
*    Примеры вызова:
(_dwgru-purge-blocks "A$C*" t)
(_dwgru-purge-blocks "`*U*" t)
|;
  (vl-load-com)
  (setq mask (if mask
               (strcase mask)
               "*"
               ) ;_ end of if
        ) ;_ end of setq
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (vlax-for blk_def (vla-get-blocks adoc)
    (vl-catch-all-apply
      (function
        (lambda (/ name)
          (if
            (and (equal (vla-get-islayout blk_def) :vlax-false)
                 (equal (vla-get-isxref blk_def) :vlax-false)
                 (wcmatch (strcase (cond
                                     ((vlax-property-available-p blk_def 'effectivename) (vla-get-effectivename blk_def))
                                     (t (vla-get-name blk_def))
                                     ) ;_ end of cond
                                   ) ;_ end of strcase
                          mask
                          ) ;_ end of wcmatch
                 ) ;_ end of and
             (vla-delete blk_def)
             ) ;_ end of if
          ) ;_ end of lambda
        ) ;_ end of function
      ) ;_ end of vl-catch-all-apply
    ) ;_ end of vlax-for
  (if audit
    (vla-auditinfo adoc :vlax-true)
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Особо не гонял.
---
Добавлено: www.jtbworld.com/lisp/purger.htm
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 09.06.2009 в 08:59.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.06.2009, 08:42
#33
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Да легко С вас номера сообщений и новое название темы.
Номера сообщений, переносимых в новую тему: 1251, 1253-1258, 1260, 1262, 1285.
Название... я бы предложил "Команда PURGE, или как удалить действительно ненужные неиспользуемые элементы из файла".

P.S. Это сообщение после создания новой темы и переноса сообщений можно удалить.
 
 
Непрочитано 09.06.2009, 09:03
#34
Кулик Алексей aka kpblc
Moderator

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


Сделано.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.06.2009, 17:06
#35
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


[quote=AlphaGeo;408058]А если записать действительно в виде LISP-выражения этот макрос?
Код:
[Выделить все]
^C^C(command "_Purge" "_b" "A$C*" "_n")
По-моему, должно сработать.

Автокад ответил:
Command: (command "_Purge" "_b" "A"_n")
Т.е. доллара не зрит напрочь, когда он не из командной строки...

Может быть текст для макроса подгружать из внешнего файла как-нибудь?
АлексЮстасу вне форума  
 
Непрочитано 09.06.2009, 17:36
#36
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


АлексЮстасу,
Код:
[Выделить все]
^C^C(command "_Purge" "_b" (strcat "A" (chr 36) "C*") "_n")
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 09.06.2009, 18:47
#37
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от VVA Посмотреть сообщение
АлексЮстасу,
Код:
[Выделить все]
^C^C(command "_Purge" "_b" (strcat "A" (chr 36) "C*") "_n")
Ура! Сработало!

В конце концов, что у меня получилось:
^C^C(command "_Purge" "_b" (strcat "A" (chr 36) "*") "n");_.-purge;_b;`*U*;_n;_.-purge;_b;`*D*;_n;_.-purge;_b;TerminatorO*;_n;_.-purge;_b;MAP_CLEAN*;_n;_.-purge;_b;ERR*;_n;_.-purge;_b;_AEC_*;_n;_.-purge;_d;;_n;_.-purge;_st;st*;_n;_.-purge;_st;стиль1;_n;_.audit;_y;

пуржу блоки: "A$*", "*U*", "*D*", "TerminatorO*", "MAP_CLEAN*",
"ERR*", "_AEC_*"
пуржу все стили Dimension
пуржу текстовые стили: "st*", любимый стиль "стиль1"
и делаю аудит.

спасибо ведь буквально всем!хотя, это ведь еще не решение...
АлексЮстасу вне форума  
 
Непрочитано 09.06.2009, 21:03
#38
Кулик Алексей aka kpblc
Moderator

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


Попробуй, например, код из #32 вызывать как (_dwgru-purge-blocks "A$C*,`*U*,teminator*,`*D*,_AEC_*,err*" t)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.06.2009, 02:44
#39
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй, например, код из #32 вызывать как (_dwgru-purge-blocks "A$C*,`*U*,teminator*,`*D*,_AEC_*,err*" t)
Для тупых: что такое "код из #32"?
Явочным порядком - ни из командной строки, ни с кнопки (_dwgru-purge-blocks "A$C*,`*U*,teminator*,`*D*,_AEC_*,err*" t) - не запустился...
Я же еще новичек в этом деле...
АлексЮстасу вне форума  
 
Непрочитано 10.06.2009, 02:49
#40
Кулик Алексей aka kpblc
Moderator

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


Ссылка из подписи VVA : http://dwg.ru/art/8
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.06.2009, 14:21
#41
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй, например, код из #32 вызывать как (_dwgru-purge-blocks "A$C*,`*U*,teminator*,`*D*,_AEC_*,err*" t)
Для данного случая, какие у лисповской программы преимущества перед макросом?
Текст лиспа, конечно, заметно изящнее, короче, чем макрос. Зато, его не нужно сохранять, подгружать.
За ссылку - Ссылка из подписи VVA : http://dwg.ru/art/8 - спасибо - еще не все освоил, но с ней все стало понятнее!

Собственно, о том, что задача очистки файлов на самом деле еще совсем не решена. Понятно, что мусора в файлах бывает много самого-самого разного. И предугадать что именно нужно пуржить невозможно. Зато можно твердо знать, что пуржить не нужно - те ресурсы, которые нужны для проекта. В моем случае все эти ресурсы прописаны в dwt-шаблоне.
Соответственно, по-настоящему правильное решение - отпуржить все, что не предусмотрено файлом-шаблоном.
Кстати, а может сам Автокад таит такую очевидно нужную функцию в своих закромах?

Последний раз редактировалось АлексЮстасу, 10.06.2009 в 14:39.
АлексЮстасу вне форума  
 
Непрочитано 10.06.2009, 15:48
#42
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Кстати, а может сам Автокад таит такую очевидно нужную функцию в своих закромах?
Ага. "Tool Paletts" называется. Закидываешь туда все из шаблона и не паришься по поводу Purge.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 10.06.2009, 16:05
#43
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от wetr Посмотреть сообщение
Ага. "Tool Paletts" называется. Закидываешь туда все из шаблона и не паришься по поводу Purge.
Да уж... Тут с wetr'ом сложно не согласиться. Я вот тоже пользуюсь Инструментальной палитрой, и макрос с пургеном у меня "расстреливает" все неиспользуемые элементы без суда и следствия.
 
 
Непрочитано 11.06.2009, 02:46
#44
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от AlphaGeo Посмотреть сообщение
Да уж... Тут с wetr'ом сложно не согласиться. Я вот тоже пользуюсь Инструментальной палитрой, и макрос с пургеном у меня "расстреливает" все неиспользуемые элементы без суда и следствия.
В общем случае это, увы, не спасает. А импорт из других сред? Или сохранение данных из других приложений? А натаскивание боевыми товарищами из неведомых закромов старья и даже самопала? А подваливание от соисполнителей из других контор мэрдеца? И т.п...

В полном идеале я вижу решение таким:
1. выявление вообще всего, что не предусмотрено шаблоном проекта и принятыми для проекта правилами (шаблоном же предусмотрено все - от слоев - до блоков, стилей и т.п., плюс допустимые типы элементов). Разборка с этими незаконными элементами - перекладка в слои проекта, присвоение законных цветов, стилей и т.п., преобразование в принятые типы.
2. пурж всего, что не предусмотрено шаблоном проекта. Предусмотренное остается в целости - для возможности беспроблемного дополнения, изменения.

Я, к слову, предпочитаю Tool Palettes - Feature Classes
АлексЮстасу вне форума  
 
Непрочитано 11.06.2009, 04:20
#45
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


АлексЮстасу, тогда тебе нужно файл шаблона обозвать стандартом (*.dws) и по полной пройтись CAD Standart_ом (_checkstandards) по проверяемым файлам.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 15.06.2009, 15:14
#46
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,074


Цитата:
Сообщение от wetr Посмотреть сообщение
АлексЮстасу, тогда тебе нужно файл шаблона обозвать стандартом (*.dws) и по полной пройтись CAD Standart_ом (_checkstandards) по проверяемым файлам.
Попробую!
Пардон, что сразу не ответил - не смог сразу переварить много разной новой информаци: и про лисп, и про стандарты. И просто работа...

По поводу уже сделанного макроса - если есть блоки с встроенными размерами==Dimension, то за один запуск макроса эти "*Dxxx" не пуржатся.
Я даже вставил в макрос два раза
_.-purge;_b;`*U*;_n;_.-purge;_b;`*D*;_n;
но ничего не получилось - "*Dxxx" остаются.
АлексЮстасу вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Команда PURGE, или как удалить действительно ненужные неиспользуемые элементы из файла



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ответственность за проектную документацию zaza-noza Организация проектирования и оформление документации 3 07.03.2008 09:54
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46