Gå til innholdet

Skript for kommandolinjeverktøy

Skript kan brukes til å lage kommandolinjeverktøy som utnytter QCAD-funksjonalitet. Et slikt skript kan for eksempel generere en tegning basert på parametere, konvertere en tegning eller analysere en tegning.

Den grunnleggende strukturen til et skript for et kommandolinjeverktøy kan for eksempel se ut som vist nedenfor. Dette er også et fullt fungerende eksempelskript som kan brukes som kommandolinjeverktøy for å legge til en linje fra 0,0 til 100,100 i en gitt tegning og eksportere den tegningen under et nytt filnavn:

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;
}
// opprett nytt dokument (utenfor skjermen):
var doc = new RDocument(new RMemoryStorage(), new RSpatialIndexNavel());
var di = new RDocumentInterface(doc);
// importer den gitte filen:
if (di.importFile(inFile) != RDocumentInterface.IoErrorNoError) {
di.destroy();
print("Cannot import file:", inFile);
return;
}
// legg til linje i tegningen (med QCAD Simple API):
startTransaction(di);
addLine(0, 0, 100, 100);
endTransaction();
// eksporter til den gitte filen (-o)
if (!di.exportFile(outFile)) {
di.destroy();
print("Cannot export file:", outFile);
return;
}
di.destroy();
}
if (typeof(including) == 'undefined' || including === false) {
main();
}

La oss anta at dette skriptet er lagret under scripts/Tools/ExTool/ExTool.js.

Det kan deretter kjøres som følger:

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

Hvis skriptet kjøres som en del av en webtjeneste, må du også sørge for å sende bryterne -no-gui og -allow-multiple-instances for å fortelle QCAD at ingen GUI er tilgjengelig, og at flere instanser kan kjøres parallelt:

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

På en server ville du vanligvis også sende -platform offscreen for å kjøre uten skjerm (dvs. uten 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