AccoreConsole проблема с загрузкой лиспа

Автор Тема: AccoreConsole проблема с загрузкой лиспа  (Прочитано 1277 раз)

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

Оффлайн GeorgАвтор темы

  • ADN OPEN
  • Сообщений: 28
  • Карма: 0
  • //Я не программист
Здравствуйте,
Возник практический вопрос с загрузкой LSP файла внутрь Автокада в рамках некоего метода на C# (стоит упомянуть, что имеется ввиду Civil 3D)
Файл LSP генерится в ходе выполнения скрипта на C# в рамках отдельного ... компонента Dynamo. Так-то пользователь может загрузить его самостоятельно, но мне хочется чтобы все шло автоматизированно

Суть вопроса в чем?
Есть командная строка AutoCAD (Civil 3D) - установив переменную SECURELOAD = 0 и скопировав строку
Код - Auto/Visual Lisp [Выбрать]
  1. (load "C:\\Users\\GeorgKeneberg\\Documents\\Temp\\LOG\\4d959fac-eac0-42c6-9a94-26810dd31935.lsp")
все работает и экспортируется корректно [файл LSP выполняет серию запросов к библиотеке координат и на выходе формирует файл XML в "Мои документы" после чего сам закрывается] - то есть от меня никаких действий кроме как его загрузить не надо;
Для запуска того же самого из-под AccoreConsole нужно как я понял сделать на основе той строки отдельный src файл .. и тут я вообще уже завис без понимания что/куда. Например - обязательно ли упоминание чертежа ... ведь я обращаюсь к внутренним базам данных программы минуя любые объекты на чертеже

Код - INI [Выбрать]
  1. Команда: /s Неизвестная команда "/S".  Для вызова справки нажмите F1.
  2. Команда: C:\Users\GeorgKeneberg\Documents\Temp\LOG\script.scr Неизвестная команда "SCR".  Для вызова справки нажмите F1.
  3. Команда: /l Неизвестная команда "/L".  Для вызова справки нажмите F1.
  4. Команда: en-US
Или даже для теста в нем нельзя ничего писать ручками?

Пока склоняюсь к мысли вообще не трогать это программное решение и дать пользователю самому загрузить файл, слишком сложна для меня  :-\
P.S. Во вором случае код явно не тот (для форматирования), но не знаю как такое прописать.

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

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #1 : 07-11-2020, 19:18:39 »
Для запуска того же самого из-под AccoreConsole нужно как я понял сделать на основе той строки отдельный src файл ..
Не src, а scr (от Script).
Что именно не понятно с запуском accoreconsole.exe? Вроде бы всё понятно написано:
Usage:
AcCoreConsole.exe [/i <input dwg>] /s <script>[/product <product>] [/l <language>] [/isolate <userid> <userDataFolder>] [/readonly] [/p[rofile] <profile>]

Example:
AcCoreConsole.exe /i 8th_floor.dwg /s test.scr /l en-US
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GeorgАвтор темы

  • ADN OPEN
  • Сообщений: 28
  • Карма: 0
  • //Я не программист
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #2 : 07-11-2020, 19:26:55 »
Как минимум непонятно с какого пути его запускать - "/s test.scr" и обязательно ли наличие чертежа, из под чего запускать?
Я же верно понимаю что сама программа AutoCAD/Civil3D должно быть при этом запущено?

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

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #3 : 07-11-2020, 19:56:01 »
Я же верно понимаю что сама программа AutoCAD/Civil3D должно быть при этом запущено?
Нет. acCoreConsole - это вместо AutoCAD. Впрочем я не уверен в нормальной работоспособности Civil 3D API в acCoreConsole. Однозначно COM/ActiveX API работать не будут.
1. Чертеж не обязателен.
2. scr-файл - это обычный текстовый файл, в котором в каждой строке своя команда. Новая строка - это как нажатие ENTER на клавиатуре. И будь внимательней с пробелами, так как они в некоторых контекстах работают как ENTER
3. Запуск будет выглядеть приблизительно так:
"<путь_к_каталогу_AutoCAD>\acCoreConsole.exe" /s "путь к scr-файлу.scr"
4. Простейший scr-файл может содержать одну строку и первод на следующую:
_QUIT(т.е. немедленное завершение acCoreConsole)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GeorgАвтор темы

  • ADN OPEN
  • Сообщений: 28
  • Карма: 0
  • //Я не программист
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #4 : 07-11-2020, 22:06:28 »
Больше спасибо, выглядит очень страшно  ;D
Да, все таки, более просто тогда будет выглядеть эти действия со стороны пользователя
Я что-то попробовал, да не получается((
Вполне допускаю что уже запутался от этих кавычек, скобочек :'(

Код - C# [Выбрать]
  1. async public static void GetPartOfMAPCSLIBRARY(string Folder_Path, string CS_value, string CS_Agree, bool selection)
  2.                 {
  3.                         var guid = Guid.NewGuid();
  4.                         string writePath = $@"{Folder_Path}\{guid}.lsp";
  5.                         string writePath2 = $@"{Folder_Path}\{guid}.scr";
  6.  
  7.                         MgCoordinateSystemFactory coordSysFactory = new MgCoordinateSystemFactory();
  8.                         MgCoordinateSystemCatalog csCatalog = coordSysFactory.GetCatalog();
  9.                         MgCoordinateSystemDictionary csDict = csCatalog.GetCoordinateSystemDictionary();
  10.  
  11.                         MgCoordinateSystemEnum csDictEnum = csDict.GetEnum();
  12.                         int csCount = csDict.GetSize();
  13.                         using (StreamWriter export_file = new StreamWriter(writePath, true, Encoding.UTF8))
  14.                         {
  15.                                 export_file.WriteLine(@"(command ""MAPCSLIBRARYEXPORT""");
  16.                                 export_file.Close();
  17.                                 export_file.Dispose();
  18.                         }
  19.  
  20.                         MgStringCollection csNames = csDictEnum.NextName(csCount);
  21.                         string csName = null;
  22.  
  23.                         MgCoordinateSystem cs = null;
  24.                         bool csProtect;
  25.  
  26.                         for (int i = 0; i < csCount; i++)
  27.                         {
  28.                                 csName = csNames.GetItem(i);
  29.                                 cs = csDict.GetCoordinateSystem(csName);
  30.                                 csProtect = cs.IsProtected();
  31.  
  32.                                         if (csProtect == selection)
  33.                                         {
  34.                                                 using (StreamWriter export_file = new StreamWriter(writePath, true, Encoding.UTF8))
  35.                                                 {
  36.                                                         string csNameStr = csName.ToString();
  37.                                                         await export_file.WriteLineAsync($@"""{csNameStr}""" + " " + $"\"{CS_value}\"");
  38.                                                 }
  39.                                         }
  40.                         }
  41.                         string space = " ";
  42.                         using (StreamWriter export_file = new StreamWriter(writePath, true, Encoding.UTF8))
  43.                         {
  44.                                 export_file.Write(" " + $@"""{space}""" + " " + $@"""{CS_Agree}""" +" " +  @"""""" + ")");
  45.                                 export_file.Close();
  46.                                 export_file.Dispose();
  47.                         }
  48.  
  49.                         using (StreamWriter export_file2 = new StreamWriter(writePath2, true, Encoding.UTF8))
  50.                         {
  51.                                 export_file2.Write("(load "+ $@"""C:\\Users\\GeorgKeneberg\\Documents\\Temp\\LOG\\{guid}.lsp"")");
  52.                                 export_file2.Write("_QUIT");
  53.                                 export_file2.Close();
  54.                                 export_file2.Dispose();
  55.                         }
  56.                         System.Diagnostics.Process.Start($@"""C:\Program Files\Autodesk\AutoCAD 2021\accoreconsole.exe"" /s ""{writePath2}""");
  57.                 }
И скрин:

P.S. Я ни в коем случае не прошу разбираться в этом коде, просто реально не буду идти таким путем, пусть пользователь его загрузит сам. Да и реально походу он не понимает что надо обращаться к API Civil'a
P.P.S. Да, вы говорили как-то про табуляцию, я все забываю поправить


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

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #5 : 07-11-2020, 22:11:43 »
Замени обратный слеш ("\") на прямой ("/")
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GeorgАвтор темы

  • ADN OPEN
  • Сообщений: 28
  • Карма: 0
  • //Я не программист
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #6 : 07-11-2020, 22:31:23 »
Для чистоты эксперимента я решил вообще сделать так:
Для сформированного LSP-файла
Код - INI [Выбрать]
  1. C:\Users\GeorgKeneberg\Documents\Temp\LOG\da21b338-88ea-404c-973b-817bd52a7de8.lsp

сделал scr-файл
Код - INI [Выбрать]
  1. C:\Users\GeorgKeneberg\Documents\Temp\LOG\da21b338-88ea-404c-973b-817bd52a7de8.scr
с таким контентом:
Код - Auto/Visual Lisp [Выбрать]
  1. (load "C:\\Users\\GeorgKeneberg\\Documents\\Temp\\LOG\\da21b338-88ea-404c-973b-817bd52a7de8.lsp")

И собственно запускаю метод содержащий лишь операцию: (специально оставил второй)
Код - C# [Выбрать]
  1.                 public static void GetXML ()
  2.                 {
  3.                         System.Diagnostics.Process.Start($@"""C:/Program Files/Autodesk/AutoCAD 2021/accoreconsole.exe"" /s ""C:/Users/GeorgKeneberg/Documents/Temp/LOGda21b338-88ea-404c-973b-817bd52a7de8.scr""");
  4.                 }
  5. public static void GetXML3()
  6.  
В общем  возвращает "не найден файл", я наверное не так вас понял, где изменить слеши?
« Последнее редактирование: 07-11-2020, 23:03:07 от Georg »

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

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #7 : 08-11-2020, 00:09:09 »
я наверное не так вас понял, где изменить слеши?
В lisp-выражении, которое в scr-файле. Но похоже у тебя где-то еще проблема. Как выглядит сообщение о ненайденном файле? Картинку приложи.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GeorgАвтор темы

  • ADN OPEN
  • Сообщений: 28
  • Карма: 0
  • //Я не программист
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #8 : 08-11-2020, 12:56:37 »
Да.. так и выглядит


Dynamo не особо подробен на счет объяснений (тоже самое к слову выводит и VS если запустить этот метод там)

Я не пойму другое - как должен выглядеть вызываемый ключ для оператора System.Diagnostics.Process.Start();?
Если прямо вводить - "C:/Program Files/Autodesk/AutoCAD 2021/accoreconsole.exe" /s "D:/D1.scr" - он заругается на непонятный ему символ /s, а если в кавычках, то уже я не пойму как он это интерпретирует
А как вводить по другому я не пойму. Да Бог с ним в конце концов, у меня товарищ на Python'е это напишут, там есть вроде более простые решения - все равно не критично ;)


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

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #9 : 08-11-2020, 14:15:25 »
Ты используешь не тот метод Start. Тебе нужен этот >>метод Start(String, String)<<
Первый параметр - путь к exe-файлу ( "C:\\Program Files\\Autodesk\\AutoCAD 2021\\accoreconsole.exe" ), второй параметр - параметры для запуска ("/s \"D:\\D1.scr\"")
Итого:
Код - C# [Выбрать]
  1. System.Diagnostics.Process.Start("C:\\Program Files\\Autodesk\\AutoCAD 2021\\accoreconsole.exe", "/s \"D:\\D1.scr\"")
« Последнее редактирование: 08-11-2020, 21:30:58 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GeorgАвтор темы

  • ADN OPEN
  • Сообщений: 28
  • Карма: 0
  • //Я не программист
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #10 : 08-11-2020, 14:56:17 »
Собственно, что происходит теперь:
Делается простой метод, с параметрами как вы указали:
Код - C# [Выбрать]
  1.                 public static void GetXML()
  2.                 {
  3.                         System.Diagnostics.Process.Start("C:\\Program Files\\Autodesk\\AutoCAD 2021\\accoreconsole.exe", "/s \"D:\\D1.scr\"");
  4.                 }
  5.                 public static void GetXML2()
  6.                 {
  7.                         System.Diagnostics.Process.Start("C:\\Program Files\\Autodesk\\AutoCAD 2021\\accoreconsole.exe", "/s \"D:\\D2.scr\"");
  8.                 }
Их два, так как один (D1) выглядит  так -
Код - Auto/Visual Lisp [Выбрать]
  1. (load “D:\\A.lsp”)
А другой (D2) - так:
Код - Auto/Visual Lisp [Выбрать]
  1. (load "D:\\A.lsp")
Увидел встречающиеся разные варианты "закавычивания"
Сам запускаемый субъект выглядит так (упрощен до примера):
Код - Auto/Visual Lisp [Выбрать]
  1. (command "MAPCSLIBRARYEXPORT"
  2. "Abidjan1987.LL" "СистемаКоординат"
  3. "Abidjan1987.TM-5NW" "СистемаКоординат"
  4.  " " "Д" "")

И возвращается, собственно, в обоих случаях "ноль"
При успешном варианте в корне "C:\Users\GeorgKeneberg\Documents" должен создаваться файл XML - но его не создается :(
Видимо действительно консоль не понимает команды Civil 3D

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

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #11 : 08-11-2020, 21:26:52 »
Видимо действительно консоль не понимает команды Civil 3D
Проверь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #12 : 08-11-2020, 21:29:25 »
Увидел встречающиеся разные варианты "закавычивания"
Похоже что-то с этим делает движок форума. Кавычки должны быть двойные обычные. Т.е. вот это правильно:
Код - Auto/Visual Lisp [Выбрать]
  1. (load "D:\\A.lsp")
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GeorgАвтор темы

  • ADN OPEN
  • Сообщений: 28
  • Карма: 0
  • //Я не программист
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #13 : 15-11-2020, 02:28:46 »
Добрый вечер, простите за долгую паузу; решил оставить как есть - пусть пользователь делает этот шаг;
Сел вот для интереса смотреть на интеграцию VS Code & Lisp - понравилось как он лихо загружает LSP - а интересно можно ли как-то с этого боку подобраться к решению проблемы? https://help.autodesk.com/view/OARX/2021/ENU/?guid=GUID-04C9D015-0A4C-4B74-8208-85255D202B07
И еще вопрос.. есть ли где некий "Developer Guide for Lisp" именно для команд Civil 3D - например вот в статье в конце есть одна такая команда  https://knowledge.autodesk.com/support/autocad-map-3d/learn-explore/caas/CloudHelp/cloudhelp/2019/ENU/MAP3D-Use/files/GUID-E7341078-3CD6-437E-B272-137BA7919380-htm.html
(нужен только сборник таких команд .. я что-то вообще не могу найти такое  :-\)

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

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #14 : 15-11-2020, 02:31:38 »
И еще вопрос.. есть ли где некий "Developer Guide for Lisp" именно для команд Civil 3D
Нет. Ничего подобного нет и не предвидится.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GeorgАвтор темы

  • ADN OPEN
  • Сообщений: 28
  • Карма: 0
  • //Я не программист
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #15 : 15-11-2020, 02:38:10 »
Эх, то есть никак нельзя расшарить возможные команды не только для обычного AutoCAD? (подсказка при вводе)

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

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #16 : 15-11-2020, 02:44:39 »
Georg,
Тебе нужен список доступных команд? Тогда в командной строке AutoCAD (или Civil 3D) набираеш _ARX _Command и смотришь в текстовом окне. Там их будут сотни...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GeorgАвтор темы

  • ADN OPEN
  • Сообщений: 28
  • Карма: 0
  • //Я не программист
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #17 : 15-11-2020, 02:53:03 »
Я думал, есть некая.. спецификация аргументов вызываемых функций - как наподобие про статью ранее про пакетный экспорт определений систем координат во внешний файл
Например в моем случае системная команда выполняющая экспорт данных в LandXML (кстати, эта тема https://adn-cis.org/forum/index.php?topic=7573.0) называется "_AeccLandXMLOut" и если прописать ее в структуру
Код - Auto/Visual Lisp [Выбрать]
  1. (command "_AeccLandXMLOut"
  2. surface "Поверхность1"
  3. )
То в Civil 3D это будет порождать диалоговое окно - вопрос только в аргументах этой функции так, чтобы он "понял" что делать .... если так получится делать - то вопрос с прогрузкой LSP файла внутрб программы был бы актуален для действий, для которых нет иных API кроме как вот средствами LISP ...
Возможно сказал глупость, ибо вообще уже запутался  :(

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

  • Administrator
  • *****
  • Сообщений: 12138
  • Карма: 1574
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #18 : 15-11-2020, 17:49:59 »
То в Civil 3D это будет порождать диалоговое окно
Если эта команда работает только через диалоговое окно, то ты ничего не сделаешь. Если есть вариант её исполнения для командной строки, то можешь сделать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение