Скрипты инструментов командной строки
Введение
Заголовок раздела «Введение»Скрипты можно использовать для создания инструментов командной строки, использующих функциональность QCAD. Такой скрипт может, например, создавать чертёж на основе параметров, преобразовывать чертёж или анализировать чертёж.
Базовая структура скрипта инструмента командной строки может выглядеть, например, так, как показано ниже. Это также полностью функциональный пример скрипта, который можно использовать как инструмент командной строки для добавления линии от 0,0 до 100,100 в заданный чертёж и экспорта этого чертежа под новым именем файла:
include("scripts/simple.js");include("scripts/Tools/arguments.js");
function printHelp() { print("Usage: " + args[1] + " [OPTION]... <drawing file>"); print(); print("This tool does..."); print(); print(" -f, -force Overwrite existing output file"); print(" -h, -help Display this help"); print(" -o, -outfile=FILE Set output file to FILE"); print(" -p, -parameter Some parameter..."); print(" ..."); printGenericUsage(); print();}
function main() { if (testArgument(args, "-h", "-help")) { printHelp(); return; }
if (args.length < 3) { print("No input file given. Try -h for help."); return; }
var inFile = args[args.length - 1]; if (inFile.indexOf("-") === 0) { print("No input file. Try -h for help."); return; }
var fi = new QFileInfo(inFile); if (!fi.isAbsolute()) { inFile = RSettings.getLaunchPath() + QDir.separator + inFile; fi = new QFileInfo(inFile); }
var outFile = getArgument(args, "-o", "-outfile"); if (outFile !== undefined) { outFile = getAbsolutePathForArg(outFile); } else { print("No output file. Try -h for help."); }
if (new QFileInfo(outFile).exists() && !testArgument(args, "-f", "-force")) { print("Output file exists already, not overwriting: ", outFile); print("Use -f to force overwrite"); return; }
// create new document (off screen): var doc = new RDocument(new RMemoryStorage(), new RSpatialIndexNavel()); var di = new RDocumentInterface(doc);
// import given file: if (di.importFile(inFile) != RDocumentInterface.IoErrorNoError) { di.destroy(); print("Cannot import file:", inFile); return; }
// add line to drawing (using QCAD Simple API): startTransaction(di); addLine(0, 0, 100, 100); endTransaction();
// export to given file (-o) if (!di.exportFile(outFile)) { di.destroy(); print("Cannot export file:", outFile); return; }
di.destroy();}
if (typeof(including) == 'undefined' || including === false) { main();}Запуск скриптов инструментов командной строки
Заголовок раздела «Запуск скриптов инструментов командной строки»Предположим, что этот скрипт сохранён под именем scripts/Tools/ExTool/ExTool.js.
Тогда его можно запустить следующим образом:
qcad -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxfЕсли скрипт запускается как часть веб-службы, обязательно также передайте ключи -no-gui и -allow-multiple-instances, чтобы сообщить QCAD, что графический интерфейс недоступен и несколько экземпляров могут выполняться параллельно:
qcad -no-gui -allow-multiple-instances -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxfНа сервере вы обычно также передавали бы -platform offscreen для запуска без графического окружения (то есть без сервера X11 в Linux):
qcad -platform offscreen -no-gui -allow-multiple-instances -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxf