Работа со скриптами

Автор Тема: Работа со скриптами  (Прочитано 9835 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Алексей ФедоровАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Работа со скриптами
« : 31-10-2016, 13:21:22 »
Доброго времени суток!

Написал программу, открывающую и закрывающую DWG-файлы и выполняющие с каждым файлом определенные действия. Открытие-закрытие DWG-файлов выполняю скриптом. После окончания перебора всех файлов нужно запустить функцию. Почему-то выполнение функции происходит перед выполнением скрипта, хотя в программе она стоит после.

Код - Auto/Visual Lisp [Выбрать]
  1. (setq fo (open (strcat path_ritm_sudno "\\tmp\\myscript.scr") "w"))  
  2. (while (< i le_spis_file)
  3. (write-line "_.OPEN" fo)
  4. (write-line (strcat ORDER_DIR "DWG\\" (nth i spis_file)) fo)
  5. (write-line "(np_l \"fa_stat_f_l.vlx\")" fo)  
  6. (write-line "(one_pos_stat)" fo)
  7. (write-line "_.SAVE" fo)
  8. (write-line (strcat ORDER_DIR "DWG\\" (nth i spis_file)) fo)
  9. (write-line "_.CLOSE" fo)
  10. (setq i (+ i 1))
  11. )  
  12. (write-line "(np_l \"fa_stat_f_l.vlx\")" fo)  
  13. (write-line "(fa_svod_f_l)" fo)
  14. (close fo)
  15.  
  16. (setvar "SDI" 0)
  17. (command "_.delay" 1000)
  18. (command "_.SCRIPT" (strcat path_ritm_sudno "\\tmp\\myscript.scr"))
  19. (vl-file-delete (strcat path_ritm_sudno "\\tmp\\myscript.scr"))
  20. (fa_svod_f_l)

Подскажите почему так происходит и что мне сделать, чтоб функция (fa_svod_f_l) выполнялась после скрипта?
« Последнее редактирование: 02-11-2016, 14:17:39 от Александр Ривилис »

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Работа со скриптами
« Ответ #1 : 31-10-2016, 13:52:40 »
Ничего не понял. Что ты собираешься делать с открытыми документами? Это самый главный вопрос.
Вопрос номер два: можно ли те же вещи сделать в консольном AutoCAD? Если да, то почему не делается в нем?
Скрипт, конечно, вещь хорошая - но я бы поискал альтернативные решения.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Алексей ФедоровАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Re: Работа со скриптами
« Ответ #2 : 31-10-2016, 14:25:58 »
Алексей, с каждого открытого документа я считываю уникальные значения атрибутов блока. Мне нужно перебрать все DWG-файлы папки и считать с каждого определенную информацию. Насколько я знаю в Лиспе открывать DWG-файлы можно только с помощью скриптов.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Работа со скриптами
« Ответ #3 : 31-10-2016, 14:39:46 »
Ай-яй-яй, неправда ваша :) А ObjectDBX на что? Открываем файл, считываем содержимое блока пространства модели и анализируем его как угодно. Другой момент, если во вхождениях блоков используются поля - тогда ситуация становится значительно более печальной.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Работа со скриптами
« Ответ #4 : 31-10-2016, 14:40:25 »
В крайнем случае есть другой вариант: вставить файл как внешнюю ссылку, пройтись по нему как по обычному блоку, выгрузить ссылку. И так далее, пока список файлов не кончится
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Алексей ФедоровАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Re: Работа со скриптами
« Ответ #5 : 31-10-2016, 14:53:51 »
Понимаете, Алексей, программу я уже практически написал, и с использованием скриптов. Просто она с состоит из двух частей: первая часть - перебор файлов и запись нужных мне данных в блокнотовский файл;вторая - работа с получившимся блокнотовским файлом. Если запускать эти части программы последовательно порознь, то все получается как надо. Просто хотелось бы объединить эти две программы в одну.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Работа со скриптами
« Ответ #6 : 31-10-2016, 15:35:19 »
Ну, меня один ))
Я бы все же через ObjectDBX, наверное, шел - проще и дешевле. И ошибки отловить можно запросто. И сообщений о ненайденных шрифтах / ссылках / типах линий не появляется (но все это будет зависеть от состава блоков). Сейчас из описания я понял только то, что я ничего не понял...
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа со скриптами
« Ответ #7 : 31-10-2016, 16:10:35 »
Алексей Федоров
Зачем SDI устанавливаешь в 0? Для такой обработки скорее SDI следовало устанавливать в 1. _CLOSE придётся убрать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа со скриптами
« Ответ #8 : 31-10-2016, 16:11:44 »
Алексей, с каждого открытого документа я считываю уникальные значения атрибутов блока. Мне нужно перебрать все DWG-файлы папки и считать с каждого определенную информацию.
Если только считываешь информацию, то зачем файл сохранять?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Работа со скриптами
« Ответ #9 : 31-10-2016, 16:33:44 »
Я боюсь, что во вхождениях блоков (в атрибутах) участвуют поля, которые следует пересчитывать.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа со скриптами
« Ответ #10 : 31-10-2016, 16:41:27 »
Я боюсь, что во вхождениях блоков (в атрибутах) участвуют поля, которые следует пересчитывать.
И? Для этого чертеж всё-равно не обязательно сохранять.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Работа со скриптами
« Ответ #11 : 31-10-2016, 16:51:54 »
Логично :) С другой стороны, кто его знает - что там на событие сохранения "повешено" ;)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Алексей ФедоровАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Re: Работа со скриптами
« Ответ #12 : 02-11-2016, 10:39:04 »
Алексей Федоров
Зачем SDI устанавливаешь в 0? Для такой обработки скорее SDI следовало устанавливать в 1. _CLOSE придётся убрать.
Александр, если SDI равен 1, то задает вопрос "Really want to discard all changes to drawing?" и при любом ответе работа программы заканчивается.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Работа со скриптами
« Ответ #13 : 02-11-2016, 11:28:42 »
Алексей Федоров, приведи код своих функций. Я почему-то думаю, что можно обойтись и другими методами, без скриптов и проч. Ну или действительно задействовать консольный ACAD...
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа со скриптами
« Ответ #14 : 02-11-2016, 14:08:48 »
Александр, если SDI равен 1, то задает вопрос "Really want to discard all changes to drawing?" и при любом ответе работа программы заканчивается.
Если у тебя в коде _SAVE, то откуда этот запрос?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ФедоровАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Re: Работа со скриптами
« Ответ #15 : 02-11-2016, 14:09:36 »
Полностью функции приводить я думаю нет смысла, они достаточно громоздкие и там помимо прочего есть взаимодействие с FoxPro, приведу упрощенную версию функций. Суть от этого не меняется.

Код - Auto/Visual Lisp [Выбрать]
  1. (defun fa_razb (  /  )
  2.  
  3. (setq path_ritm_sudno (vl-registry-read "HKEY_LOCAL_MACHINE\\SOFTWARE\\ЦНИИТС\\РИТМ-СУДНО" "path"))
  4. (setq fo (open (strcat path_ritm_sudno "\\Project.txt" ) "R"))
  5. (read-line fo)
  6. (read-line fo)
  7. (read-line fo)
  8. (read-line fo)
  9. (read-line fo)
  10. (read-line fo)
  11. (setq VSPOM_ORDER_DIR (read-line fo))  
  12. (close fo)  
  13.  
  14. (setq ORDER_DIR (substr VSPOM_ORDER_DIR 6))
  15.  
  16. (setq spis_file (vl-directory-files (strcat ORDER_DIR "DWG") "*.DWG" 1))
  17. (setq le_spis_file (length spis_file))
  18. (setq i 0)
  19.  
  20.  
  21. (vl-file-delete (strcat path_ritm_sudno "\\tmp\\FasLasStat.txt"))  
  22. (setq fo (open (strcat path_ritm_sudno "\\tmp\\myscript.scr") "w"))  
  23. (while (< i le_spis_file)
  24. (write-line "_.OPEN" fo)
  25. (write-line (strcat ORDER_DIR "DWG\\" (nth i spis_file)) fo)
  26. (write-line "(np_l \"fa_stat_f_l.vlx\")" fo)  
  27. (write-line "(one_pos_stat2)" fo)
  28. (write-line "_.SAVE" fo)
  29. (write-line (strcat ORDER_DIR "DWG\\" (nth i spis_file)) fo)
  30. (write-line "_.CLOSE" fo)
  31. (setq i (+ i 1))
  32. )  
  33. ;(write-line "(np_l \"fa_stat_f_l.vlx\")" fo)  
  34. ;(write-line "(fa_svod_f_l)" fo)
  35. (close fo)
  36.  
  37.  (setvar "SDI" 0)
  38.  (command "_.delay" 0)
  39.  (command "_.SCRIPT" (strcat path_ritm_sudno "\\tmp\\myscript.scr"))
  40.  ;(vl-file-delete (strcat path_ritm_sudno "\\tmp\\myscript.scr"))
  41.  (fa_svod_f_l2)
  42.  
  43.  
  44. )
  45.  
  46. (defun one_pos_stat2 ( / )
  47. (alert "1")
  48. )
  49.  
  50. (defun fa_svod_f_l2 ( / )
  51. (alert "2")
  52. )

Все равно сначала выводится сообщение "2", а уж потом сообщения "1" столько раз, сколько DWG-файлов в папке.
« Последнее редактирование: 02-11-2016, 14:17:24 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа со скриптами
« Ответ #16 : 02-11-2016, 14:15:27 »
Я вообще перестал что-то понимать. Ты в скрипт записываешь
Код - Auto/Visual Lisp [Выбрать]
  1. (write-line "(fa_svod_f_l)" fo)
После этого запускаешь скрипт, а потом снова запускаешь
Код - Auto/Visual Lisp [Выбрать]
  1. (fa_svod_f_l)
Так и что ты хочешь?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа со скриптами
« Ответ #17 : 02-11-2016, 14:18:24 »
И прочитай уже наконец-то у меня в подписи как следует форматировать код на форуме.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ФедоровАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Re: Работа со скриптами
« Ответ #18 : 02-11-2016, 17:04:09 »
Александр Ривилис, извините, вы видимо не туда посмотрели. я не записываю в скрипт

Код - Auto/Visual Lisp [Выбрать]
  1. (write-line "(fa_svod_f_l)" fo)

Эта строчка в скрипте у меня закомментирована.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа со скриптами
« Ответ #19 : 02-11-2016, 17:25:17 »
Александр Ривилис, извините, вы видимо не туда посмотрели. я не записываю в скрипт
Я смотрел исходный скрипт в первом сообщении темы.
P.S.: Запиши в конец скрипта
Код - Auto/Visual Lisp [Выбрать]
  1. (fa_svod_f_l2)
а из основного кода его убери.
Иначе вряд ли у тебя что-то хорошее получится.
И вообще такой код будет зависеть от версии AutoCAD и состояния переменной FIBERWORLD
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение