ADN Club > AutoLisp / VisualLISP и DCL

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

(1/4) > >>

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

Суть вопроса в чем?
Есть командная строка AutoCAD (Civil 3D) - установив переменную SECURELOAD = 0 и скопировав строку

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


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

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

Александр Ривилис:

--- Цитата: Georg от 07-11-2020, 18:41:28 ---Для запуска того же самого из-под 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
--- Конец кода ---

Georg:
Как минимум непонятно с какого пути его запускать - "/s test.scr" и обязательно ли наличие чертежа, из под чего запускать?
Я же верно понимаю что сама программа AutoCAD/Civil3D должно быть при этом запущено?

Александр Ривилис:

--- Цитата: Georg от 07-11-2020, 19:26:55 ---Я же верно понимаю что сама программа 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)

Georg:
Больше спасибо, выглядит очень страшно  ;D
Да, все таки, более просто тогда будет выглядеть эти действия со стороны пользователя
Я что-то попробовал, да не получается((
Вполне допускаю что уже запутался от этих кавычек, скобочек :'(


--- Код - C# [Выбрать] ---async public static void GetPartOfMAPCSLIBRARY(string Folder_Path, string CS_value, string CS_Agree, bool selection)                {                        var guid = Guid.NewGuid();                        string writePath = $@"{Folder_Path}\{guid}.lsp";                        string writePath2 = $@"{Folder_Path}\{guid}.scr";                         MgCoordinateSystemFactory coordSysFactory = new MgCoordinateSystemFactory();                        MgCoordinateSystemCatalog csCatalog = coordSysFactory.GetCatalog();                        MgCoordinateSystemDictionary csDict = csCatalog.GetCoordinateSystemDictionary();                         MgCoordinateSystemEnum csDictEnum = csDict.GetEnum();                        int csCount = csDict.GetSize();                        using (StreamWriter export_file = new StreamWriter(writePath, true, Encoding.UTF8))                        {                                export_file.WriteLine(@"(command ""MAPCSLIBRARYEXPORT""");                                export_file.Close();                                export_file.Dispose();                        }                         MgStringCollection csNames = csDictEnum.NextName(csCount);                        string csName = null;                         MgCoordinateSystem cs = null;                        bool csProtect;                         for (int i = 0; i < csCount; i++)                        {                                csName = csNames.GetItem(i);                                cs = csDict.GetCoordinateSystem(csName);                                csProtect = cs.IsProtected();                                         if (csProtect == selection)                                        {                                                using (StreamWriter export_file = new StreamWriter(writePath, true, Encoding.UTF8))                                                {                                                        string csNameStr = csName.ToString();                                                        await export_file.WriteLineAsync($@"""{csNameStr}""" + " " + $"\"{CS_value}\"");                                                }                                        }                        }                        string space = " ";                        using (StreamWriter export_file = new StreamWriter(writePath, true, Encoding.UTF8))                        {                                export_file.Write(" " + $@"""{space}""" + " " + $@"""{CS_Agree}""" +" " +  @"""""" + ")");                                export_file.Close();                                export_file.Dispose();                        }                         using (StreamWriter export_file2 = new StreamWriter(writePath2, true, Encoding.UTF8))                        {                                export_file2.Write("(load "+ $@"""C:\\Users\\GeorgKeneberg\\Documents\\Temp\\LOG\\{guid}.lsp"")");                                export_file2.Write("_QUIT");                                export_file2.Close();                                export_file2.Dispose();                        }                        System.Diagnostics.Process.Start($@"""C:\Program Files\Autodesk\AutoCAD 2021\accoreconsole.exe"" /s ""{writePath2}""");                }И скрин:

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

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии