Скриптове за инструменти от командния ред
Въведение
Section titled “Въведение”Скриптовете могат да се използват за създаване на инструменти от командния ред, които използват функционалността на QCAD. Такъв скрипт може например да генерира чертеж въз основа на параметри, да конвертира чертеж или да анализира чертеж.
Пример
Section titled “Пример”Основната структура на скрипт за инструмент от командния ред може да изглежда например както е показано по-долу. Това е и напълно функционален примерен скрипт, който може да се използва като инструмент от командния ред за добавяне на линия от 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; }
// създаване на нов документ (без екран): var doc = new RDocument(new RMemoryStorage(), new RSpatialIndexNavel()); var di = new RDocumentInterface(doc);
// импортиране на дадения файл: if (di.importFile(inFile) != RDocumentInterface.IoErrorNoError) { di.destroy(); print("Cannot import file:", inFile); return; }
// добавяне на линия към чертежа (чрез QCAD Simple API): startTransaction(di); addLine(0, 0, 100, 100); endTransaction();
// експортиране в дадения файл (-o) if (!di.exportFile(outFile)) { di.destroy(); print("Cannot export file:", outFile); return; }
di.destroy();}
if (typeof(including) == 'undefined' || including === false) { main();}Изпълнение на скриптове за инструменти от командния ред
Section titled “Изпълнение на скриптове за инструменти от командния ред”Да приемем, че този скрипт е записан под 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