Сообщество программистов Autodesk в СНГ

ADN Club => Адаптация AutoCAD и вертикальных приложений => Тема начата: DMuzer от 31-01-2020, 14:21:50

Название: Как правильно сделать команду на кнопке
Отправлено: DMuzer от 31-01-2020, 14:21:50
Добрый день!
Хочу повесить на кнопку запуск скрипта.
при нажатии кнопки, должна выполняться команда оболочки:
python d:\18_проектирование\команды\000.001 - проба.py

пытаюсь сделать так:
^C^C(command "_.shell" "python \"d:\\18_проектирование\\команды\\000.001 - проба.py\"")
но не выходит, понимаю что проблема с экранирование кавычек и обратных слешей, но никак не выходит, подскажите, как правильно сформировать строку.
Название: Re: Как правильно сделать команду на кнопке
Отправлено: Александр Ривилис от 31-01-2020, 14:36:44
python в данном случае это python.exe ? Тогда нужно задать путь к нему.
Название: Re: Как правильно сделать команду на кнопке
Отправлено: Александр Ривилис от 31-01-2020, 14:40:37
Что-нибудь такое наверное:
Код - Auto/Visual Lisp [Выбрать]
  1. ^C^C(startapp "C:\\Users\\<имя пользователя>\\AppData\\Local\\Programs\\Python\\Python37\\python.exe" "\"d:\\18_проектирование\\команды\\000.001 - проба.py\"")
Название: Re: Как правильно сделать команду на кнопке
Отправлено: DMuzer от 31-01-2020, 16:11:55
путь к python прописан в PATH, без аргументов запускается., сейчас попробую еще разок, видимо, я слэши не там где нужно ставил.
Название: Re: Как правильно сделать команду на кнопке
Отправлено: Александр Ривилис от 31-01-2020, 16:18:26
путь к python прописан в PATH, без аргументов запускается., сейчас попробую еще разок, видимо, я слэши не там где нужно ставил.
С блокнотом вот так запускается (открывает файл):
Код - Auto/Visual Lisp [Выбрать]
  1. ^C^C(startapp "notepad.exe" "\"d:\\18_проектирование\\команды\\000.001 - проба.py\"")
Так что и с PYTHON должно работать.
Название: Re: Как правильно сделать команду на кнопке
Отправлено: DMuzer от 31-01-2020, 16:18:51
Вот такая строка
(startapp "python" "\"D:\\18_проектирование\\acad_scripts\\000.000.03_Проба.py\"")
если я ее ввожу в строку autocad, то выполняется правильно
Но почему то на кнопке не хочет...
Название: Re: Как правильно сделать команду на кнопке
Отправлено: DMuzer от 31-01-2020, 16:22:33
В командной строке появляется
 (startapp "python" "D:
и ждет дальнейшего ввода, что то я косячу, со слешами какая то непонятка.
Название: Re: Как правильно сделать команду на кнопке
Отправлено: Александр Ривилис от 31-01-2020, 16:30:27
В командной строке появляется
 (startapp "python" "D:
и ждет дальнейшего ввода, что то я косячу, со слешами какая то непонятка.
Проверяй:
Код - Auto/Visual Lisp [Выбрать]
  1. ^C^C(startapp "python" "D:/18_проектирование/acad_scripts/000.000.03_Проба.py")
Название: Re: Как правильно сделать команду на кнопке
Отправлено: DMuzer от 31-01-2020, 16:48:11
Да, так работает!!!
Я видел в справке, что если использовать команду cmd c ключом /k то окно консоли не будет показываться, а можно ли со startapp нечто подобное?
Название: Re: Как правильно сделать команду на кнопке
Отправлено: Александр Ривилис от 31-01-2020, 16:59:35
Я видел в справке, что если использовать команду cmd c ключом /k то окно консоли не будет показываться, а можно ли со startapp нечто подобное?
Нет. А разве pythonw.exe  не запускается без окна?
Название: Re: Как правильно сделать команду на кнопке
Отправлено: DMuzer от 31-01-2020, 19:14:58
Какая то магия, почему так происходит?
вставляю в строку такую команду, все работает
(startapp "python" "D:/18_проектирование/команды/Спецификация_лист_Вставить_таблицу_отдельно.py")

то же самое вставляю в макрос команды, но с кнопки не работает... Что не так?
Название: Re: Как правильно сделать команду на кнопке
Отправлено: DMuzer от 31-01-2020, 19:24:50
Подчистил пробелы после скобок и вроде заработало...
С этим связано?
Название: Re: Как правильно сделать команду на кнопке
Отправлено: Александр Ривилис от 31-01-2020, 19:34:30
С этим связано?
Да. В меню каждый пробел вне lisp-выражения - это как пробел (или ввод) на клавиатуре.
Название: Re: Как правильно сделать команду на кнопке
Отправлено: DMuzer от 01-02-2020, 12:12:48
А через ActiveX можно настраивать/создавать кнопки, менюшки, команды?
Название: Re: Как правильно сделать команду на кнопке
Отправлено: Алексей Кулик от 01-02-2020, 13:33:47
Частично можно. Например, добавить выпадающее меню, поменять доступность команд, еще что-то. Но я бы создавал частичное меню, которое и использовал бы. Это проще и в результате дешевле получается.
Название: Re: Как правильно сделать команду на кнопке
Отправлено: Александр Ривилис от 01-02-2020, 13:46:20
А через ActiveX можно настраивать/создавать кнопки, менюшки, команды?
Да. Но это нужно будет делать при каждом запуске AutoCAD, т.к. это всё нельзя сохранить в CUI/CUIX средствами ActiveX.
Название: Re: Как правильно сделать команду на кнопке
Отправлено: DMuzer от 01-02-2020, 16:43:09
А можно ли конкретно создавать команды? По моему это первое что приходится делать, и не слишком удобно все это устроено.
Название: Re: Как правильно сделать команду на кнопке
Отправлено: Александр Ривилис от 01-02-2020, 18:38:29
А можно ли конкретно создавать команды?
Уточни вопрос. Что такое "создавать команды"? Чтобы в командной строке можно было ввести имя команды и запустился её код? Тогда это не с помощью ActiveX. В нём нет средств для регистрации команд. Тут или lisp, или arx, или .NET.
Название: Re: Как правильно сделать команду на кнопке
Отправлено: DMuzer от 01-02-2020, 18:41:54
Я имею ввиду вот что:
при настройке интерфейса я делаю так:
1. Создаю команду - соответственно выбираю иконку, название, прописываю макрос.
2. И добавляю на какую то панель.

Я имел ввиду, могу ли я создать такие команды не вручную, поскольку, я думаю их много надо создавать, а написать какой то скрипт для этого?
Название: Re: Как правильно сделать команду на кнопке
Отправлено: Александр Ривилис от 01-02-2020, 18:45:55
Я имел ввиду, могу ли я создать такие команды не вручную, поскольку, я думаю их много надо создавать, а написать какой то скрипт для этого?
Это можно делать только при помощи AutoCAD .NET API (все классы в Autodesk.AutoCAD.Customization). И соответственно создаётся/редактируется CUI/CUIX-файл.
Название: Re: Как правильно сделать команду на кнопке
Отправлено: DMuzer от 01-02-2020, 18:49:39
Спасибо за ответ!!!
Название: Re: Как правильно сделать команду на кнопке
Отправлено: Привалов Дмитрий от 05-02-2020, 07:37:02
В командной строке появляется
 (startapp "python" "D:
и ждет дальнейшего ввода, что то я косячу, со слешами какая то непонятка.
Подчистил пробелы после скобок и вроде заработало...
С этим связано?
Да. В меню каждый пробел вне lisp-выражения - это как пробел (или ввод) на клавиатуре.

Пробелы не единственная возможная причина. Существует ограничение на длину строки команд, которые можно выполнить с кнопки, около 255 символов. Я на такое натыкался в 2010. При этом в кнопе хранится вся строка, но выполняется только ее часть.

При вводе через консоль все работает, при нажатии кнопки происходит обрезание списка команд и не срабатывает.

Для обхода ограничения приходилось создавать внешний lisp файл, выносить код туда. А на кнопку вешать подгрузку/исполнение файла.
По причине ограничения стоит избегать длинных путей к файлам.