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

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 50
  • Карма: 1
  • //Я не программист
Здравствуйте,
Возник практический вопрос с загрузкой 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
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь 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
  • **
  • Сообщений: 50
  • Карма: 1
  • //Я не программист
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #2 : 07-11-2020, 19:26:55 »
Как минимум непонятно с какого пути его запускать - "/s test.scr" и обязательно ли наличие чертежа, из под чего запускать?
Я же верно понимаю что сама программа AutoCAD/Civil3D должно быть при этом запущено?

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 50
  • Карма: 1
  • //Я не программист
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
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #7 : 08-11-2020, 00:09:09 »
я наверное не так вас понял, где изменить слеши?
В lisp-выражении, которое в scr-файле. Но похоже у тебя где-то еще проблема. Как выглядит сообщение о ненайденном файле? Картинку приложи.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 50
  • Карма: 1
  • //Я не программист
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
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь 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
  • **
  • Сообщений: 50
  • Карма: 1
  • //Я не программист
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
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AccoreConsole проблема с загрузкой лиспа
« Ответ #11 : 08-11-2020, 21:26:52 »
Видимо действительно консоль не понимает команды Civil 3D
Проверь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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