|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Последовательное применение lisp-функции к множеству файлов DWG
Проектировщик ВК. LISP-любитель.
Москва
Регистрация: 15.12.2003
Сообщений: 1,202
|
||
Просмотров: 23040
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Самый главный вопрос - в функции применяются интерактивные лисповые функции (типа get*) и командные методы или нет?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,202
![]() |
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Это ответ на половину вопроса.
Цитата:
Как реализовать обработку нескольких файлов в каталоге ? Там приведена заготовка с ф-цией dofile, в которую передается указатель на активный документ. Длальше с помощью vla можно что-то делать. Код:
2. Если есть командные методы, то связка bat scr и lsp думаю актуальна до сих пор. В свое время обрабатывал достаточно большие (по тем временам) объемы информации. Запускал перед обедом и шел кушать ![]() Все что нужно здесь в посте #11 3. На theswamp.org помотри тему Execute commands on all open drawings (требуется регистрация) PS. Код перенесен на Exchange ( OpenDwgsCmds) (ссылка LISP и DVB) 4. См. пост 10 5. Используя ObjectDBX: Пример ObjectDBX Base Program и Пример2 6. Автодесковский ScriptPro 2.0. Подробнее см #32 Сам пока не пользовался, но есть отзывы 7. Для тех, кому словосочетания DLL, .NET, ObjectArx не являются матерными ![]() 8. Программа для пакетной обработки файлов v.1.1
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 28.05.2016 в 12:45. Причина: Добавлен п.6 |
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,202
![]() |
VVA, спасибо за такой подробный ответ!
из соображений совместимости больше всего понравилась "связка bat scr и lsp", посмотрел файлы по ссылке, там есть такой bat: Код:
Можно ли сделать так, чтобы батник работал не только папками в корне дирректории, но и с теми, что во вложенных папках? Вопрос о сохранении обработанных файлов можно не рассматривать, так, как думаю буду сохранять по старым путям с измененным именем. |
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
http://forum.dwg.ru/showthread.php?t=16562
может быть это поможет. |
|||
![]() |
|
|||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Apelsinov,
Цитата:
Цитата:
Справку можно посмотреть, набрав for /? >>for.txt Фрагмент Цитата:
Лиспом по ссылке с поста #6 создаешь bat файл, где построчно перечисляешь каждый найденный файл. Пример bat: Цитата:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 06.10.2010 в 18:55. |
||||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,202
![]() |
открывая файлы батником в виде
Код:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Apelsinov, Это самый большой минус bat'а. У меня в свое время не вышло.
![]()
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Кроме того, при работе по сценарию никак не обрабатываются возможные ситуации. Понадобится Автокаду для какого-нибудь файла какой-то SHX, он задаст вопрос и весь сценарий поломается. Таким образом можно обрабатывать знакомые файлы, у которых не будет взбрыков.
Я чаще всего использую вот такую функцию Код:
first_message — предупреждающее сообщение перед запуском массовых операций, или NIL, если предупреждения не требуется; files_list — список полных имен обрабатываемых файлов; test_func — имя тестовой функции, выводящей first_message и проверяющей возможность начала обработки файлов по списку; quoted_func — имя функции, выполняющей операцию с именем одного файла из списка. С файлами могут производиться любые операции, не обязательно требующие открытия самих файлов. Вот пример применения, не имеющий практического смысла, но иллюстрирующий механизм работы функции: Код:
Разумеется, нам нужны функции, делающие что-то полезное, и их можно разработать сколько угодно, главное, чтобы в момент выполнения функции ru-batch-file-operations и тестовая, и основная функции были определены. Типовой алгоритм (не универсальный), применяемый нами для обработки посторонних DWG-файлов: 1. создается новый пустой рабочий файл; 2. в него вставляется обрабатываемый файл в виде блока; 3. производится требуемая обработка; 4. обработанный блок вновь сохраняется в файл . В конкретных вариантах возможны нюансы (например расчленение вставленного блока, запись в другой каталог, ведение LOG-файлов), но обязательным является дублированное несколько раз до и после обработки удаление «мусора», обеспечивающее постоянную «пустоту» рабочего файла. Таким способом я обрабатывал за раз до тысячи файлов топографических планшетов. Запускал на выходной и на дачу уезжал. Но способ не универсальный. Для DWG где всё только в модели - подходит хорошо. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Мне кажется, что вариант #4 (при соответствующей квалификации, конечно) является самым оптимальным.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.02.2008
Сообщений: 32
|
Добрый день!
В продолжение этой темы. Необходимо напечатать в PDF 500 файлов. Чертежи сделаны и в модели, и в листах. Подскажите, что я делаю не так. В функцию DOFILE - дописала печать документа. Но на печать выводится активный документ. Вот мой код. Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 01.11.2010 в 16:47. |
|||
![]() |
|
||||
elena_k, тебе надо вывести на напечать много файлов. Допустим, подшивка тебя не устраивает.
1. У тебя все эти файлы уже открыты или есть их список? Если есть список, где он в коде? 2. Ты так уверенно берешь чужой лисп, который лезет в реестр и не боишся? 3. Ты запускаешь код в одном файле, а хочешь чтобы он продолжал работать в других? 4. Что такое curDOC тебе расшифровать? "текущий документ". Ты загрузила функцию в текущий документ и распечатала его, дальше что? Кто загрузит следующий документ и загрузит в него эту функцию? На мой взгляд надо делать так: 1. Определится из какого документа ты собираешся работать со всем массивом остальных документов. 2. Создать список dwg файлов с полными путями. 3. прочесть эти две ссылки http://forum.dwg.ru/showpost.php?p=636946&postcount=47 http://forum.dwg.ru/showthread.php?t=58328 в первой запуск лиспа при открытии документа во второй запуск лиспа в уже открытом документе и многократно, если это необходимо. Имеется в виду запуск лиспа из вне, то есть из другого документа. 4. Если твоя функция работает, в смысле распечатывает активный документ, то запускай ее при каждом открытии нового документа. (бедный, бедный твой реестр ![]() |
||||
![]() |
|
||||
Регистрация: 15.02.2008
Сообщений: 32
|
Я не стала полностью приводить код. Он взят с форума
http://www.caduser.ru/forum/index.ph...#message161511 сообщение VVA. У меня есть список файлов.Я пыталась изменить только функцию DOFILE ![]() Я для себя писала программу вывода в PDF активного файла, в которой нужно только выбрать область печати, а дальше автоматом определяю какой это формат, в зависимости от ориентации чертежа выбираю файл *.pc3 ( заранее создала для альбомной и книжной ). А в реестр пишу путь, где лежит DWG файл.Не нужно выбирать куда сохранять PDF. Получалось значительно быстрее, чем просто печать файла. Но хотелось все сделать автоматом. Спасибо за участие и ссылки - буду изучать. |
|||
![]() |
|
||||
Вы, как я уже говорил, должны определиться откуда будете по очереди открывать файлы?
Вариантов всего два. Либо из скрипт-файла, либо из какого-то документа самого автокада. Я так понимаю, что вы выбираете второй путь? Если да, то переделайте свою функцию DOFILE и уберите в ней аргумент. Функция DOFILE должна всегда обрабатывать текущий активный. Весьма рекомендую в ней разобраться и в реестр не лезть! Запишите ее временно в acaddoc.lsp не забыв в конце дописать закрытие документа. Создайте функцию, которая создает список и по очереди просто открывает файлы. Файл откроется, обработается и сам закроется. Если такое не нравится, то создайте лисп с этой функцией, и как я вам написал в ссылках запускайте по очереди этот файл в разных документах. |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
elena_k, Можешь попробовать использовать еще ObjectDBX. Я добавил п.5 к посту #4
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 15.02.2008
Сообщений: 32
|
Добрый день!
VVA, kpblc спасибо. Знаний, наверное, пока малова-то . Надеялась, что смогу использовать готовый код, п.1 пост #4, только изменив функцию DOFILE. Но увы ![]() |
|||
![]() |
|
||||
|
||||
![]() |
|
||||
Цитата:
![]() Нужно пакетно обработать файлы в определенной папке с учетом вложенных. Будут командные методы, а также подгрузка и выполнение лиспов. Пока лучше этого варианта ничего не могу найти/придумать. |
||||
![]() |
|
||||
Появился AcCoreConsole.exe - он подобного рода задачи выполняет гораздо быстрее, чем acad.exe. Насколько мне известно, на последнем слёте пионеров Евгений Елпанов на эту тему делал доклад. Однако продукт пока весьма кривой.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
|
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Do$, Ознакомься с докладом Евгения. Он обещал его выложить, но думаю в личку получится быстрее.
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 25.10.2012 в 11:02. Причина: Орфография #28 |
|||
![]() |
|
||||
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Инженер-конструктор Регистрация: 29.10.2007
Юбилейный МО
Сообщений: 269
|
Есть неплохое описание редактирования нескольких файлов в книжке "AutoCAD секреты, которые должен знать каждый пользователь" Дэн Эббот, глава "Редактирование тысяч чертежей" стр. 338. Там он создаёт командный файл (*.bat) в котором запускает выполнение скрипта (*.scr), третьим шагом из скрипта запускается лист (*.lsp).
Ой, не заметил, что ещё первая страница есть ) Последний раз редактировалось Klo, 25.10.2012 в 11:19. Причина: Ой, не заметил, что ещё первая страница есть ) |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
hwd, Спасибо, исправил
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
![]() |
а есть ещё такая штука, как ScriptPro 2.0, скачать можно с автодесковской странички.
Описание с этой же страницы Цитата:
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
ИМХО: для пакетной обработки чертежей можно использовать ObjectDBX (но там есть некоторые ограничения).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
UPD Как дополнительный вариант: можно в автозагрузку AutoCAD засунуть плагин, который бы анализировал параметры строки запуска acad.exe и вытаскивал бы из них твои дополнительные параметры. Эти параметры игнорируются автокадом, но могут обрабатываться тобой. В обозначенном плагине ты можешь иметь XML файл, в настройках которого можно указывать, какие дополнительные параметры, каким образом следует обрабатывать. Код:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 25.10.2012 в 12:54. |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
mulscr старинного индусского производства можно еще попробовать, есть в виде лиспа, есть в виде отдельного приложения
|
|||
![]() |
|
||||
Цитата:
У меня задача для каждого файла из набора создать новый файл на основе нужного шаблона, вставить в него данные из файла набора средствами Autocad Map 3D и т.п., сохранить файл. Сохранить лучше под новым именем или в другую папку. Т.е. сам файл из набора открывать не нужно - только данные из него вставить. Скрипт я вроде бы написал, но для одного конкретного файла. Не могу сообразить, как в скрипте описать путь и название файла, т.е. как в скрипте указать вместо названия переменную? Последний раз редактировалось АлексЮстасу, 27.08.2013 в 20:46. |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Цитата:
Но при запуске бат-файла открывается один из файлов папки. А в моем случае это не нужно - из активного файла вставка данных средствами Map 3D запрещена. Можно как-то сделать, чтобы запускался Autocad, но не с файлом из папки, а с новым файлом на основе нужного dwt-файла? И (getvar "DWGNAME") после создания нового файла будет возвращать "Чертеж N", а мне нужно подключать файл с именем из папки. Т.е. как сохранить в начале скрипта имя текущего файла из папки? Последний раз редактировалось АлексЮстасу, 28.08.2013 в 03:41. |
||||
![]() |
|
||||
Регистрация: 18.12.2010
Сообщений: 5,115
|
Как меня тут поправили :
Код:
Цитата:
|
|||
![]() |
|
||||
Цитата:
Можно и без настроек Автокада - использовать не _qnew, а _new. В последнем шаблон прописывают прямо. Но вопрос был немного другой. Можно ли в bat-е для открывания Автокада сразу прописать нужный шаблон? Последний раз редактировалось АлексЮстасу, 28.08.2013 в 16:52. |
||||
![]() |
|
||||
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,296
|
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
1. Например в bate через SET запомнить в переменной имя файла, а в Автокаде через (getenv "имя_переменной") прочитать его. 2. В бате командой echo и > перенаправить вывод имени файла в файл, который потом прочитать лиспом. тынц 3. Как вариант не открывать пустой файл на основе шаблона, а в BAT'e копировать нужный шаблон в известное место под именем файла, который хотим подгрузить. Имя открытого файла и есть искомое имя файла, осталось только путь нужный подставить. Надеюсь, понятно объяснил. Если что спрашивай
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
|||||
Цитата:
Сейчас увидел, что Автокад пишет: Цитата:
Допустим, в такой на основе Вашего старого: Код:
Код:
Наугад написал: Цитата:
Цитата:
Последний раз редактировалось АлексЮстасу, 28.08.2013 в 20:16. |
|||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
АлексЮстасу, Разархивируй архив в какую-либо папку и запусти ustas.bat. В файле autocad.bat поправь путь к автокаду
PS А мне больше вариант 3 нравится. Тем более, что Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Цитата:
![]() Но одна засада есть - не подключается файл-источник данных командой Map 3D. Цитата:
Но вторая засада в том, что при подключении/отключении средствами Map 3D путь с именем необходимо задавать без кавычек. А (getenv "FL00") выдает в кавычках. Как с такой бедой бороться? Все-таки свершилось. Почему-то из команды и параметров, записанных в скрипте лисп-выражением, все сделалось. В нем кавычки имени файла воспринялись как кавычки параметра? Последний раз редактировалось АлексЮстасу, 31.08.2013 в 05:59. |
||||
![]() |
|
||||
Если на машинах пользователей операционная система не старее, чем Windows Vista, то скрипты гораздо удобней (и приятней) писать на PowerShell. В коде таких скриптов можно использовать различные технологии, в т.ч. и платформу .Net: непосредственно в коде скрипта, можно даже свои типы создавать (классы со свойствами и методами), подходящие под конкретные задачи, решаемые скриптом. Причём в Windows для PowerShell встроен и довольно удобный родной редактор. Присутствует возможность, к примеру, запускать скрипт на исполнение, просматривая результаты его работы без фактического выполнения скрипта. Т.е. если ваш скрипт должен выборочно удалить некоторые файлы, то запустив скрипт в таком режиме, вы увидите, какие файлы были бы удалены, в случае реального запуска. Если Windows XP, то PowerShell придётся ставить отдельно (бесплатен и доступен для скачивания). Те, кто имеет некоторый опыт написания кода на .NET могут неплохо развернуться на данном поле... PowerShell может всё то, что может cmd.exe и сверх этого много-много более. Майкрософт разработала и внедрила в Windows эту программу, дабы создать более мощную замену для cmd.exe: Cmd.exe нервно курит в сторонке. PowerShell, в отличие от cmd.exe и bash оперирует не текстом, а объектами (со всеми вытекающими плюшками). Если уж есть возможность, то писать скрипты лучше сразу на PowerShell. имхо.
Если интерес к указанному инструменту возникнет, то в качестве ознакомления можно почитать некоторые мои зарисовки по теме: http://bushman-andrey.blogspot.ru/se...bel/PowerShell http://www.vr-online.ru/blog/powersh...rshell-20-5640 http://www.vr-online.ru/blog/powersh...odnikam-c-5534 http://www.vr-online.ru/blog/powersh...p-ili-rtm-5695 http://www.vr-online.ru/blog/powersh...m-obrazca-5578 http://www.vr-online.ru/blog/powersh...ilozhenij-5533 http://www.vr-online.ru/blog/powersh...az-otrezh-5604 http://www.vr-online.ru/blog/powersh...aem-s-acl-5632 http://www.vr-online.ru/blog/powersh...-funkcija-5596 http://www.vr-online.ru/blog/powersh...t-klassov-5645 http://www.vr-online.ru/forum/podsve...owershell-5556
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 31.08.2013 в 09:49. |
||||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DwgRuLispLib: Команда. Загрузка lisp файлов из указанной папки | VVA | Библиотека функций | 7 | 15.02.2018 10:10 |
Грамотное открытие файлов DWG из макса (6,7,8) | Chuma | AutoCAD | 11 | 03.02.2010 08:05 |
Где можно найти в инете обширную библиотеку DWG файлов для проектирования??? | Romeo1786 | Поиск литературы, чертежей, моделей и прочих материалов | 7 | 28.05.2008 10:30 |
Программирование с использованием файлов DWG | fiandy | Программирование | 3 | 22.03.2008 20:27 |