Skip to content

Komandrindas rīku skripti

Skriptus var izmantot, lai izveidotu komandrindas rīkus, kas izmanto QCAD funkcionalitāti. Šāds skripts var, piemēram, ģenerēt rasējumu, pamatojoties uz parametriem, konvertēt rasējumu vai analizēt rasējumu.

Komandrindas rīka skripta pamatstruktūra var izskatīties, piemēram, kā parādīts zemāk. Šis ir arī pilnībā funkcionējošs piemēra skripts, ko var izmantot kā komandrindas rīku, lai pievienotu līniju no 0,0 līdz 100,100 dotam rasējumam un eksportētu šo rasējumu ar jaunu faila nosaukumu:

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;
}
// izveidot jaunu dokumentu (ārpus ekrāna):
var doc = new RDocument(new RMemoryStorage(), new RSpatialIndexNavel());
var di = new RDocumentInterface(doc);
// importēt doto failu:
if (di.importFile(inFile) != RDocumentInterface.IoErrorNoError) {
di.destroy();
print("Cannot import file:", inFile);
return;
}
// pievienot līniju rasējumam (izmantojot QCAD Simple API):
startTransaction(di);
addLine(0, 0, 100, 100);
endTransaction();
// eksportēt uz doto failu (-o)
if (!di.exportFile(outFile)) {
di.destroy();
print("Cannot export file:", outFile);
return;
}
di.destroy();
}
if (typeof(including) == 'undefined' || including === false) {
main();
}

Pieņemsim, ka šis skripts ir saglabāts kā scripts/Tools/ExTool/ExTool.js.

Pēc tam to var palaist šādi:

qcad -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxf

Ja skripts tiek palaists kā daļa no tīmekļa pakalpojuma, noteikti nododiet arī slēdžus -no-gui un -allow-multiple-instances, lai paziņotu QCAD, ka GUI nav pieejams un ka var paralēli palaist vairākus gadījumus:

qcad -no-gui -allow-multiple-instances -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxf

Serverī parasti nodotu arī -platform offscreen, lai palaistu bez ekrāna (t.i., bez X11 servera Linux sistēmā):

qcad -platform offscreen -no-gui -allow-multiple-instances -autostart scripts/Tools/ExTool/ExTool.js -f -o out.dxf in.dxf