ADN Club > AutoLisp / VisualLISP и DCL
AccoreConsole проблема с загрузкой лиспа
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. Да, вы говорили как-то про табуляцию, я все забываю поправить
Навигация
Перейти к полной версии