Scripts voor opdrachtregelprogramma's
Inleiding
Section titled “Inleiding”Scripts kunnen worden gebruikt om opdrachtregelprogramma’s te maken die de functionaliteit van QCAD benutten. Zo’n script zou bijvoorbeeld een tekening op basis van parameters kunnen genereren, een tekening kunnen converteren of een tekening kunnen analyseren.
Voorbeeld
Section titled “Voorbeeld”De basisstructuur van een script voor een opdrachtregelprogramma kan er bijvoorbeeld uitzien zoals hieronder getoond. Dit is tevens een volledig functioneel voorbeeldscript dat als opdrachtregelprogramma kan worden gebruikt om een lijn van 0,0 naar 100,100 aan een gegeven tekening toe te voegen en die tekening onder een nieuwe bestandsnaam te exporteren:
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; }
// nieuw document maken (buiten het scherm): var doc = new RDocument(new RMemoryStorage(), new RSpatialIndexNavel()); var di = new RDocumentInterface(doc);
// het gegeven bestand importeren: if (di.importFile(inFile) != RDocumentInterface.IoErrorNoError) { di.destroy(); print("Cannot import file:", inFile); return; }
// een lijn aan de tekening toevoegen (met de QCAD Simple API): startTransaction(di); addLine(0, 0, 100, 100); endTransaction();
// naar het gegeven bestand exporteren (-o) if (!di.exportFile(outFile)) { di.destroy(); print("Cannot export file:", outFile); return; }
di.destroy();}
if (typeof(including) == 'undefined' || including === false) { main();}Scripts voor opdrachtregelprogramma’s uitvoeren
Section titled “Scripts voor opdrachtregelprogramma’s uitvoeren”Laten we aannemen dat dit script is opgeslagen onder scripts/Tools/ExTool/ExTool.js.
Het kan dan als volgt worden uitgevoerd:
qcad -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxfAls het script als onderdeel van een webservice wordt uitgevoerd, geef dan zeker ook de schakelaars -no-gui en -allow-multiple-instances mee om QCAD te laten weten dat er geen GUI beschikbaar is en dat meerdere instanties parallel kunnen worden uitgevoerd:
qcad -no-gui -allow-multiple-instances -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxfOp een server zou u doorgaans ook -platform offscreen meegeven om zonder scherm (headless) uit te voeren (d.w.z. zonder X11-server op Linux):
qcad -platform offscreen -no-gui -allow-multiple-instances -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxf