|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как в лисп PurgeFiles.lsp внедрить команду _.laydel, чтобы это работало
ГИП
Тула
Регистрация: 09.09.2006
Сообщений: 112
|
||
Просмотров: 7610
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Насколько я помню, подобный код должен работать, так сказать, не очень. Аудит-то точно работает только на текущем файле (кстати, vla-purgeall фактически тоже в некоторых версиях работал только в текущем). Открытие документа через vla-open может запросто привести к активации загруженного документа - и выполнение лиспа тупо прервется.
Я бы писал scr-файл и запускал консольный acad, подсовывая ему dwg и соответствующий скрипт. Возможно, это будет самым простым решением. ----- добавлено через 46 сек. ----- P.S. В магазине приложений Autodesk есть отличная утилита пакетной очистки (что-то типа BatchPurge, если не ошибаюсь). Работает - на ура!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Код:
ключ /r рекурсия (поиск во вложенных папках) сохраняешь код в текстовом фале с расширением *.bat кидаешь в папку которую чистить запускаешь...дальше оно само все сделается (по щучьему велению) ЗЫ я тут потестил, консольная версия где-то раз в десять пошустрее обрабатывает, но конечно может не все. --------- upd и про подчеркивания не забывай ну и итоговый scr может выглядеть как-то так Код:
__________________
Мастерская СПДС Последний раз редактировалось doctorraz, 05.03.2019 в 08:21. Причина: vla- не работает в консоли |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Только стоит помнить, что консольный acad сильно урезан по возможностям - так, поддержки vla- нет, загрузить arx, по-моему, тоже невозможно. Как насчет .NET-сборок - не в курсе.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
ExplodeProxy работаетupd не совсем
это то же (repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object)))) упсс ты прав, работало за счет Код:
__________________
Мастерская СПДС Последний раз редактировалось doctorraz, 07.03.2019 в 06:06. |
||||
![]() |
|
||||
Цитата:
BatchPurge, так понимаю, чистит, но слой не удаляет. То что doctorraz написал, похоже в нужном направлении. Цитата:
Что-то делает, но не сохраняет. Ниже лог командной строки (папка "1" с bat'ником и File.dwg; папка "2" содержит cleanConsole.scr): Код:
Содержание файла PurgeFilesPlus.bat: Код:
Код:
__________________
С уважением, Чигинский Дмитрий. |
||||
![]() |
|
||||
есть такой слой _Подписи?
и в скрипте последняя строка должна быть.. но пустая
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Слой есть, пустую строку добавил. Результат тот же. Файл *.dwg остаётся без изменения (не пересохраняется).
__________________
С уважением, Чигинский Дмитрий. |
||||
![]() |
|
||||
дай файл чертежа с которым не получается
__________________
Мастерская СПДС |
||||
![]() |
|
||||
хех, консольный АК чет валится на _.laydel
![]() поэтому будет медленно но верно))) (но быстрее чем руками) батник Код:
Код:
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Цитата:
Проверил также когда удаляемый слой отсутствует, нужно просто закрыть AutoCAD. Хотя возникает желание перед удалением слоя поставить условие-проверку о его наличии в файле) Можно ли это организовать? Также ещё вопрос, корректно ли будет в скрипт после после удаления слоя добавить Audit и Purge: Код:
Однако, после такой очистки остаются служебные блоки, типа *D1354, *D1355 и т.д. Отсюда и вопрос.
__________________
С уважением, Чигинский Дмитрий. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Блоки *D, *T - это соответственно блоки размеров и таблиц.
Если хочешь, повтори три раза строку с очисткой - уйдут. P.S. А вот про очистку зарегистрированных приложений забыл ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
![]() Цитата:
Код:
__________________
Мастерская СПДС Последний раз редактировалось doctorraz, 06.03.2019 в 11:24. |
||||
![]() |
|
||||
Цитата:
Если arx-файл зависит от acad.exe, то он не загружается в accoreconsole даже если его переименовать в crx-файл. .NET-сборки загружаются и работают если не используют acmgd.dll (accoremgd.dll и acdbmgd.dll использовать можно).
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Цитата:
----- добавлено через ~2 мин. ----- Цитата:
----- добавлено через ~3 мин. ----- как-то звучит сомнительно. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
koMon, я много раз пробовал провести аудит на нетекущем документе (вплоть до 2018 версии; на 2019 не проверял) - не работало. Как и vla-purgeall. Может, у меня руки кривые, не знаю.
Что именно сомнительно? Тот факт, что лисп выполняется только в текущем документе? Или тот факт, что если в процессе выполнения лиспа сменить документ, то выполнение прервется?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
сомнительно, что может запросто. ну то есть само. но ты же понимаешь, что само не может. только если программер пожелает.
|
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Насколько я понимаю, если в автозагрузке стоят какие-либо приложения, вносящие изменения в БД документа, то файл активируется. В любом случае - если будет выбор между vla-open и ObjectDBX, я выберу второе.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
я тоже, но не в этом случае(
|
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Еще в 2005 году было обсуждение на другом форуме (caduser.ru) про скорость и особенности работы лиспа на неактивном документе.
|
|||
![]() |
|
||||
Цитата:
Спасибо за уточнение, теперь то что и было нужно. Надо попробовать ExplodeProxyXXX встроить на досуге. Как понимаю, будет тогда вообще шикарно.
__________________
С уважением, Чигинский Дмитрий. |
||||
![]() |
|
||||
никаких проблем его встроить...
скачиваешь, подгружаешь один раз в АК (можно просто мышкой *.arx перетащить в окно чертежа)), потом в скрипт добавляешь перед окончательной очисткой и аудитом Код:
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Цитата:
если делать лисп по первоначальном варианту tc, то получим следующее. открываем акад (-2) однократно!, открываем какой-то dwg/создаём новый (-1) однократно!, загружаем лисп (0) однократно!, запускаем загруженную команду (1) для выбора группы файлов, обрабатываем файл (2, 3, 4). то есть в этих двух вариантах действия пересекаются только в пунктах 2, 3, 4. во втором случае исключаются временные интервалы (1+5)*количество файлов. таким образом теоретически и я думаю практически скорость обработки группы файлов по второму сценарию будет всё-таки больше) да к тому же vla методы работают ГОРАЗДО быстрее нежели методы командные. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Уточнение: я документы открывал через ObjectDBX.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
Offtop: Кстати, привязкой к активному окну документа и тот же эксель страдает при выполнении кода VBA - ряд операций с группами ячеек (сортировка, ресайз) не на активном листе вызывает явления: от появления артефактов отображения до появления ошибки кода, а в особо тяжелых случаях - и вылета приложения. |
|||
![]() |
|
||||
извините, что вмешиваюсь в столь высокоинтелектуальный спор, без сомнения все эти технологии хороши, но я пока не увидел ни одной строчки высокого кода. по теме топа.. ну впрочем не об этом.. если скриптом удалять несуществующий слой, то все дело сразу стопорится..
учитывая, что ТС просил помощь, а все отписавшиеся тут де факто ее оказывают, ну и типо я тож помогаю, но в лиспе Е-10..уважаемые, коль отписались в теме.. может чтонить по теме сможете набросать коду кагонить легкоприменимого для ламеров мимоходом так ----- добавлено через ~4 мин. ----- насколько я понял не важно за сколько времени, важен результат чреслами мериться тут мудрым мужам, да еще пред юнцами... ну вы поняли уважаемые..
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Если "нужен результат, по-быстрому и с минимальными затратами" - то scr, консольный acad и понеслась.
Если чистый лисп, то ситуация меняется очень сильно. И нарисовать код "на ура" вряд ли получится. По крайней мере у меня...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
по опыту предыдущих стрельб убедились, что консоль много чо не может.. в т.ч. удалять слои((((
теесу вроде скорость не критична, но при удалении несуществующего слоя процесс останавливается.. в принципе маленький лисп проверки слоя перед удалением ему бы помог наверное, но возможно он уже все сделал руками, пока тут обсуждают какая технология работает эффективнее)) ----- добавлено через ~12 ч. ----- Цитата:
Код:
__________________
Мастерская СПДС Последний раз редактировалось doctorraz, 08.03.2019 в 10:18. Причина: укоротил)) |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Или так:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
ну так это как бы совсем другое дело
![]() ![]() ----- добавлено через ~4 мин. ----- ну ежели по быренькому, на низком так сказать полёте, то можно, например, выполнить такой лисп, предварительно забив полный путь для обрабатываемой папки: Код:
Последний раз редактировалось koMon, 12.03.2019 в 13:48. |
||||
![]() |
|
||||
Регистрация: 14.02.2011
Сообщений: 66
|
Точно такая же проблема как у ТС, долго искал подобный функционал. Отлично все работает (хоть и долго).
Для себя добавил в скрипт ссылку на лисп для внедрения xref. Код:
Код:
Для сокращения времени на открытие автокада пробовал вместо команды _QUIT в конце команду _CLOSE. Команда работает с версиями автокада выше 2015 закрывая вкладку, но оставляя открытым сам автокад. Только вот батник в данном случае не отрабатывает следующий файл, все заканчивается после обработки и закрытия первого файла. Можно это как то исправить? P.S. Я по умолчанию не пользуюсь командной строкой, использую либо динамический ввод, либо если нужен лог текстовым окном которое открывается по F2. При использовании данного скрипта автоматически появляется командная строка и лог работы ведется в ней. И затем по умолчанию автокад открывается всегда с командной строкой, каждый раз приходится закрывать ее. Что можно сделать чтобы этого не происходило и лог при работе отображался именно в текстовом окне? Последний раз редактировалось Sart, 14.07.2020 в 10:41. Причина: P.S. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Попробуй использовать accoreconsole.exe
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.02.2011
Сообщений: 66
|
В дополнение к предыдущему посту.
Нашел програмку AutoScript для запуска скриптов из окна автокада. Описание http://imolodec.com/ace-articles/avt...riptov-chast-3 Ссылка на скачивание http://www.cadig.com/products/autocad-script-pro.php Собственно она решает вопрос заданный в предыдущем посте. В скрипте убираем две последние строки _qsave _QUIT В настройках программы ставим галочки "Save the dravings..." и "Close the dravings..." Запускаем скрипт из этой программы и тогда автокад не закрывается. ----- добавлено через ~1 мин. ----- Из предыдущего обсуждения я так понял что с ней будут работать не все команды из скрипта, но сейчас попробую. Последний раз редактировалось Sart, 14.07.2020 в 12:29. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Я не очень понимаю, зачем внедрять ссылки. Тем не менее есть команда
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.02.2011
Сообщений: 66
|
Не вышло
d:\Print>( echo Processing d:\Print\399_1-Р-2-АТ-01.dwg "c:\Program Files\Autodesk\AutoCAD 2020\accoreconsole.exe" /i "d:\Print\399_1-Р-2-АТ-01.dwg" /s "c:\clean\clean.scr" /l "en-US" ) Processing d:\Print\399_1-Р-2-АТ-01.dwg Redirect stdout (file: C:\Users\kulakov\AppData\Local\Temp\accc149162). AcCoreConsole: StdOutConsoleMode: processed-output: enabled,auto AutoCAD Core Engine Console - Copyright 2019 Autodesk, Inc. All rights reserved. (Q.111.0.0) Execution Path: c:\Program Files\Autodesk\AutoCAD 2020\accoreconsole.exe Version Number: Q.111.0.0 (UNICODE) Загружается модуль База AD... Выполняется регенерация листов. **** Системная переменная изменена **** Отслеживаемым системным переменным (4) назначены значения, отличные от предпочтительных. Для просмотра изменений воспользуйтесь командой СИСТПЕРЕММОНИТОР. Команда: Команда: Команда: Команда: (vl-cmdf "_-LAYER" "_u" "формат_роспись" "") Текущий слой: "формат_роспись" Задайте параметр [?/Создать/Установить/Новый/ПЕРеименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/пРозрачность/Материал/пеЧать/ПСтиль/Заморозить/РАзморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать/ВНешняя ссылка]: _u Список имен слоев для разблокирования или <выбрать объекты>: формат_роспись Задайте параметр [?/Создать/Установить/Новый/ПЕРеименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/пРозрачность/Материал/пеЧать/ПСтиль/Заморозить/РАзморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать/ВНешняя ссылка]: Команда: (vl-cmdf "CLAYER" "0") CLAYER Новое значение CLAYER <"формат_роспись">: 0 Команда: (if (/= (tblsearch "Layer" "формат_роспись") nil) (command "_.laydel" "_n" "формат_роспись" "" "_y")) d:\Print>( echo Processing d:\Print\399_1-Р-2-АТ-02.dwg "c:\Program Files\Autodesk\AutoCAD 2020\accoreconsole.exe" /i "d:\Print\399_1-Р-2-АТ-02.dwg" /s "c:\clean\clean.scr" /l "en-US" ) Processing d:\Print\399_1-Р-2-АТ-02.dwg Redirect stdout (file: C:\Users\kulakov\AppData\Local\Temp\accc471082). AcCoreConsole: StdOutConsoleMode: processed-output: enabled,auto AutoCAD Core Engine Console - Copyright 2019 Autodesk, Inc. All rights reserved. (Q.111.0.0) Execution Path: c:\Program Files\Autodesk\AutoCAD 2020\accoreconsole.exe Version Number: Q.111.0.0 (UNICODE) Загружается модуль База AD... Выполняется регенерация листов. Выполняется регенерация модели. **** Системная переменная изменена **** Отслеживаемым системным переменным (4) назначены значения, отличные от предпочтительных. Для просмотра изменений воспользуйтесь командой СИСТПЕРЕММОНИТОР. Команда: Команда: Команда: Команда: (vl-cmdf "_-LAYER" "_u" "формат_роспись" "") Текущий слой: "СВЯЗЬ" Задайте параметр [?/Создать/Установить/Новый/ПЕРеименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/пРозрачность/Материал/пеЧать/ПСтиль/Заморозить/РАзморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать/ВНешняя ссылка]: _u Список имен слоев для разблокирования или <выбрать объекты>: формат_роспись Задайте параметр [?/Создать/Установить/Новый/ПЕРеименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/пРозрачность/Материал/пеЧать/ПСтиль/Заморозить/РАзморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать/ВНешняя ссылка]: Команда: (vl-cmdf "CLAYER" "0") CLAYER Новое значение CLAYER <"СВЯЗЬ">: 0 Команда: (if (/= (tblsearch "Layer" "формат_роспись") nil) (command "_.laydel" "_n" "формат_роспись" "" "_y")) d:\Print>pause Для продолжения нажмите любую клавишу . . . Цитата:
Не помню почему, но предложенная команда почему то не устраивала, давненько уже разбирался. Пришлось использовать именно данный лисп для внедрения. Вспомнил почему не использую "_-.xref _bind *" Данная команда не внедряет ссылки если есть проблемы со ссылками 2 уровня, т.е. вложенными в используемые ссылки. Если одна из подссылок неподгружена или удалена, данная команда выдает ошибку. А приложенный лисп игнорирует данные косяки и внедряет в любом случае. Последний раз редактировалось Sart, 15.07.2020 в 05:14. Причина: Дополнение |
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать, чтобы ключевые слова отображались в менюшке? | -mavlin- | Программирование | 3 | 06.05.2009 15:32 |
Задумал лисп для layout | Red Nova | LISP | 40 | 05.06.2008 17:59 |
Нужен маленький лисп - для текста | maksimys | LISP | 2 | 28.11.2007 08:51 |
Нужен лисп (пронизыватель лайаутов) | dextron3 | LISP | 91 | 25.07.2007 07:37 |
Из лиспа в команду. | Pave1 | LISP | 4 | 25.07.2005 16:08 |