Inhalt
Einleitung
Scripts können verwendet werden, um Kommandozeilenwerkzeuge zu erstellen, welche QCAD-Funktionalität nutzen. Ein solches Skript kann z.B. eine Zeichnung anhand von Parametern erzeugen, eine Zeichnung konvertieren oder eine Zeichnung analysieren.
Beispiel
Die Grundstruktur eines Kommandozeilenwerkzeugskripts kann z.B. wie folgt aussehen. Dies ist ein voll funktionsfähiges Beispielskript, das als Kommandozeilenwerkzeug verwendet werden kann, um eine Linie von 0,0 bis 100,100 zu einer gegebenen Zeichnung hinzuzufügen und diese Zeichnung unter einem neuen Dateinamen zu exportieren.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
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 (usine 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(); } |
Skripte als Kommandozeilenwerkzeug starten
Angenommen, dieses Skript ist unter scripts/Tools/ExTool/ExTool.js gespeichert.
Es kann dann wie folgt ausgeführt werden::
qcad -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxf
Wenn das Skript als Teil eines Webservices ausgeführt wird, verwenden Sie ausserdem die Schalter -no-gui und -allow-multiple-instances, um QCAD mitzuteilen, dass keine GUI verfügbar ist und mehrere Instanzen parallel ausgeführt werden können:
qcad -no-gui -allow-multiple-instances -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxf
Auf einem Server würden Sie normalerweise auch -platform offscreen übergeben, um headless zu laufen (d.h. ohne X11-Server unter Linux):
qcad -platform offscreen -no-gui -allow-multiple-instances -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxf