Aller au contenu

Scripts d'outils en ligne de commande

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.dxf

Si 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.dxf

Sur 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