Hoppa till innehåll

Skript för kommandoradsverktyg

Skript kan användas för att skapa kommandoradsverktyg som utnyttjar QCAD-funktionalitet. Ett sådant skript kan till exempel generera en ritning baserat på parametrar, konvertera en ritning eller analysera en ritning.

Den grundläggande strukturen för ett skript för ett kommandoradsverktyg kan till exempel se ut som visas nedan. Detta är också ett fullt fungerande exempelskript som kan användas som kommandoradsverktyg för att lägga till en linje från 0,0 till 100,100 i en given ritning och exportera den ritningen under ett nytt filnamn:

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;
}
// skapa nytt dokument (utanför skärmen):
var doc = new RDocument(new RMemoryStorage(), new RSpatialIndexNavel());
var di = new RDocumentInterface(doc);
// importera den angivna filen:
if (di.importFile(inFile) != RDocumentInterface.IoErrorNoError) {
di.destroy();
print("Cannot import file:", inFile);
return;
}
// lägg till linje i ritningen (med QCAD Simple API):
startTransaction(di);
addLine(0, 0, 100, 100);
endTransaction();
// exportera till den angivna filen (-o)
if (!di.exportFile(outFile)) {
di.destroy();
print("Cannot export file:", outFile);
return;
}
di.destroy();
}
if (typeof(including) == 'undefined' || including === false) {
main();
}

Låt oss anta att detta skript är sparat som scripts/Tools/ExTool/ExTool.js.

Det kan sedan köras enligt följande:

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

Om skriptet körs som en del av en webbtjänst, se till att även skicka med flaggorna -no-gui och -allow-multiple-instances för att tala om för QCAD att inget GUI är tillgängligt och att flera instanser kan köras parallellt:

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

På en server skulle du vanligtvis också skicka med -platform offscreen för att köra utan skärm (dvs. utan en X11-server på Linux):

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