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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Последовательное применение lisp-функции к множеству файлов DWG

Последовательное применение lisp-функции к множеству файлов DWG

Ответ
Поиск в этой теме
Непрочитано 07.02.2009, 13:52
Последовательное применение lisp-функции к множеству файлов DWG
Apelsinov
 
Проектировщик ВК. LISP-любитель.
 
Москва
Регистрация: 15.12.2003
Сообщений: 1,186

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

Пока у меня есть только одна идея как это сделать - добавить F0 в автоисполнение при загрузке dwg, далее я указываю акаду на открытие файлов, он в каждом из них запускает F0 , в которой прописано сохранение и закрытие файла. Но этот метод мне не нравится по причине того, что прописывать F0 в автоисполнение придется в ручную.
Если же запускать F0 в автоисполнение по некоему флагу, который будет устанавливать функция запуска (хранить его можно, например, во внешнем файле) - то это решит проблему, но как то боязно, ибо сглючит что нибудь и не поменяется флаг на исходный, будет очень не приятно.

В идеале это все должно выглядеть так: запускае какую то программу (не обязательно на лиспе), она выдает окно для выбора дирректории, выбираем дирректорию, и жмем на старт - автокад начинает применять лисповую функцию последовательно к каждому файлу из этой дирректории, закрытие и сохранение файла можем отдать на откуп F0.
Просмотров: 22056
 
Непрочитано 28.08.2013, 16:46
#41
АлексЮстасу

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


Цитата:
Сообщение от trir Посмотреть сообщение
Как меня тут поправили :
Код:
[Выделить все]
 (command "_qnew")
(setq layer_name "Т_город_500.TAB")
(setq path1 <путь 1>)
(setq path2 <путь 2>)
(command "_ADESETCRDSYS" "с" "Pulkovo42.LL" "вЫход")
(command "-MapImport" "mapinfo" (strcat path1 layer_name) "Нет" "С" "У" "Т_город_500" "С" "Д" "Код" "Д" "С" "В" "В")
(command "_saveas" "2007" (strcat path2 layer_name) "_close")
Плз, ткните пальцем, где в этом коде запомнить название файла, приходящего из bat-а. Я честно не вижу.
Цитата:
Сообщение от trir Посмотреть сообщение
для _qnew dwt настраивается в настройках акад'а
Можно и без настроек Автокада - использовать не _qnew, а _new. В последнем шаблон прописывают прямо.
Но вопрос был немного другой. Можно ли в bat-е для открывания Автокада сразу прописать нужный шаблон?

Последний раз редактировалось АлексЮстасу, 28.08.2013 в 16:52.
АлексЮстасу вне форума  
 
Непрочитано 28.08.2013, 17:44
1 | #42
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,279


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Можно ли в bat-е для открывания Автокада сразу прописать нужный шаблон?
в bat'е (так же как и в ярлыке автокада, так и в ком. строке) можно поставить переключатель /t , а после него имя *.dwg или *.dwt файла, который будет запущен как шаблон вместе с автокад.
bernata вне форума  
 
Непрочитано 28.08.2013, 18:56
1 | #43
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от bernata Посмотреть сообщение
в bat'е (так же как и в ярлыке автокада, так и в ком. строке) можно поставить переключатель /t , а после него имя *.dwg или *.dwt файла, который будет запущен как шаблон вместе с автокад.
Все ключи командной строки

Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
где в этом коде запомнить название файла, приходящего из bat-а
1. Например в bate через SET запомнить в переменной имя файла, а в Автокаде через (getenv "имя_переменной") прочитать его.
2. В бате командой echo и > перенаправить вывод имени файла в файл, который потом прочитать лиспом. тынц
3. Как вариант не открывать пустой файл на основе шаблона, а в BAT'e копировать нужный шаблон в известное место под именем файла, который хотим подгрузить. Имя открытого файла и есть искомое имя файла, осталось только путь нужный подставить.
Надеюсь, понятно объяснил. Если что спрашивай
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 28.08.2013, 19:10
#44
АлексЮстасу

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


Цитата:
Сообщение от bernata Посмотреть сообщение
в bat'е (так же как и в ярлыке автокада, так и в ком. строке) можно поставить переключатель /t , а после него , который будет запущен как шаблон вместе с автокад.
Я правильно понял, что при /t имя *.dwg или *.dwt файла Автокад откроет не файл из каталога, а новый файл?
Сейчас увидел, что Автокад пишет:
Цитата:
Нельзя задавать имя шаблона при открытии чертежа.
Имя шаблона игнорируется.
VVA - я не понимаю, куда в bat втискивать, допустим, SET? Вроде бы место для него не предусмотрено.
Допустим, в такой на основе Вашего старого:
Код:
[Выделить все]
ECHO OFF
md GOTOVO
FOR %%A IN (*.DWG) DO "C:\Program Files\Autodesk\AutoCAD Civil 3D 2012\acad.exe" %%A /B Trans_SC1.scr
Или в такой, с /t:
Код:
[Выделить все]
ECHO OFF
md GOTOVO
FOR %%A IN (*.DWG) DO "C:\Program Files\Autodesk\AutoCAD Civil 3D 2012\acad.exe" /t "C:\Users\mis\appdata\local\autodesk\c3d 2012\rus\template\acadiso_m.dwt" %%A /B Trans_SC1.scr
И, пардон, как записываются эти SET ? Как-то так: SET FL00=%%A? Или с одним процентом?
Наугад написал:
Цитата:
FOR %%A IN (*.DWG) DO "C:\Program Files\Autodesk\AutoCAD Civil 3D 2012\acad.exe" /t "C:\Users\mis\appdata\local\autodesk\c3d 2012\rus\template\acadiso_m.dwt" %%A SET FL00=%%A /B Trans_SC2.scr
Автокад пока мне отвечает:
Цитата:
Команда: (getenv "FL00")
nil

Последний раз редактировалось АлексЮстасу, 28.08.2013 в 20:16.
АлексЮстасу вне форума  
 
Непрочитано 29.08.2013, 10:10
1 | #45
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


АлексЮстасу, Разархивируй архив в какую-либо папку и запусти ustas.bat. В файле autocad.bat поправь путь к автокаду
PS А мне больше вариант 3 нравится. Тем более, что
Цитата:
Нельзя задавать имя шаблона при открытии чертежа.
Вложения
Тип файла: zip ustas.zip (22.1 Кб, 70 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 31.08.2013, 05:12
#46
АлексЮстасу

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


Цитата:
Сообщение от VVA Посмотреть сообщение
апусти ustas.bat. В файле autocad.bat поправь путь к автокаду
PS А мне больше вариант 3 нравится. Тем более, что
Цитата:
Нельзя задавать имя шаблона при открытии чертежа.
Спасибо! Кое-как удалось запустить этот bat со своим скриптом. Сам мой скрипт и мешал в основном. Точнее, моя тупость
Но одна засада есть - не подключается файл-источник данных командой Map 3D.
Цитата:
Какие чертежи подключить (? - список): (getenv "FL00")
Выбрано чертежей: 0.
Засада оказалась, во-первых, в том, что команде подключения чертежей нужен к имени еще и полный путь. Заполучил его с помощью %~dp0.
Но вторая засада в том, что при подключении/отключении средствами Map 3D путь с именем необходимо задавать без кавычек. А (getenv "FL00") выдает в кавычках.
Как с такой бедой бороться?

Все-таки свершилось. Почему-то из команды и параметров, записанных в скрипте лисп-выражением, все сделалось. В нем кавычки имени файла воспринялись как кавычки параметра?

Последний раз редактировалось АлексЮстасу, 31.08.2013 в 05:59.
АлексЮстасу вне форума  
 
Непрочитано 31.08.2013, 09:33
#47
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Если на машинах пользователей операционная система не старее, чем Windows Vista, то скрипты гораздо удобней (и приятней) писать на PowerShell. В коде таких скриптов можно использовать различные технологии, в т.ч. и платформу .Net: непосредственно в коде скрипта, можно даже свои типы создавать (классы со свойствами и методами), подходящие под конкретные задачи, решаемые скриптом. Причём в Windows для PowerShell встроен и довольно удобный родной редактор. Присутствует возможность, к примеру, запускать скрипт на исполнение, просматривая результаты его работы без фактического выполнения скрипта. Т.е. если ваш скрипт должен выборочно удалить некоторые файлы, то запустив скрипт в таком режиме, вы увидите, какие файлы были бы удалены, в случае реального запуска. Если Windows XP, то PowerShell придётся ставить отдельно (бесплатен и доступен для скачивания). Те, кто имеет некоторый опыт написания кода на .NET могут неплохо развернуться на данном поле... PowerShell может всё то, что может cmd.exe и сверх этого много-много более. Майкрософт разработала и внедрила в Windows эту программу, дабы создать более мощную замену для cmd.exe: Cmd.exe нервно курит в сторонке. PowerShell, в отличие от cmd.exe и bash оперирует не текстом, а объектами (со всеми вытекающими плюшками). Если уж есть возможность, то писать скрипты лучше сразу на PowerShell. имхо.

Если интерес к указанному инструменту возникнет, то в качестве ознакомления можно почитать некоторые мои зарисовки по теме:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 31.08.2013 в 09:49.
hwd вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Последовательное применение lisp-функции к множеству файлов DWG

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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