Scripts d'outils en ligne de commande
Introduction
Section intitulée « Introduction »Les scripts peuvent être utilisés pour créer des outils en ligne de commande qui exploitent les fonctionnalités de QCAD. Un tel script pourrait par exemple générer un dessin à partir de paramètres, convertir un dessin ou analyser un dessin.
La structure de base d’un script d’outil en ligne de commande peut par exemple ressembler à ce qui est montré ci-dessous. Il s’agit également d’un script d’exemple pleinement fonctionnel qui peut être utilisé comme outil en ligne de commande pour ajouter une ligne de 0,0 à 100,100 à un dessin donné et exporter ce dessin sous un nouveau nom de fichier :
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; }
// créer un nouveau document (hors écran) : var doc = new RDocument(new RMemoryStorage(), new RSpatialIndexNavel()); var di = new RDocumentInterface(doc);
// importer le fichier donné : if (di.importFile(inFile) != RDocumentInterface.IoErrorNoError) { di.destroy(); print("Cannot import file:", inFile); return; }
// ajouter une ligne au dessin (avec l'API QCAD Simple) : startTransaction(di); addLine(0, 0, 100, 100); endTransaction();
// exporter vers le fichier donné (-o) if (!di.exportFile(outFile)) { di.destroy(); print("Cannot export file:", outFile); return; }
di.destroy();}
if (typeof(including) == 'undefined' || including === false) { main();}Exécuter des scripts d’outils en ligne de commande
Section intitulée « Exécuter des scripts d’outils en ligne de commande »Supposons que ce script soit enregistré sous scripts/Tools/ExTool/ExTool.js.
Il peut alors être exécuté comme suit :
qcad -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxfSi le script est exécuté dans le cadre d’un service web, veillez à passer aussi les commutateurs -no-gui et -allow-multiple-instances pour indiquer à QCAD qu’aucune interface graphique n’est disponible et que plusieurs instances peuvent s’exécuter en parallèle :
qcad -no-gui -allow-multiple-instances -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxfSur un serveur, vous passeriez généralement aussi -platform offscreen pour une exécution sans affichage (headless) (c’est-à-dire sans serveur X11 sous Linux) :
qcad -platform offscreen -no-gui -allow-multiple-instances -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxf