Przejdź do głównej zawartości

Skrypty narzędzi wiersza poleceń

Skrypty można wykorzystać do tworzenia narzędzi wiersza poleceń, które wykorzystują funkcje QCAD. Taki skrypt może na przykład generować rysunek na podstawie parametrów, konwertować rysunek lub analizować rysunek.

Podstawowa struktura skryptu narzędzia wiersza poleceń może wyglądać na przykład tak, jak pokazano poniżej. Jest to również w pełni funkcjonalny przykładowy skrypt, którego można użyć jako narzędzia wiersza poleceń do dodania linii od 0,0 do 100,100 do danego rysunku i wyeksportowania tego rysunku pod nową nazwą pliku:

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;
}
// utwórz nowy dokument (poza ekranem):
var doc = new RDocument(new RMemoryStorage(), new RSpatialIndexNavel());
var di = new RDocumentInterface(doc);
// importuj podany plik:
if (di.importFile(inFile) != RDocumentInterface.IoErrorNoError) {
di.destroy();
print("Cannot import file:", inFile);
return;
}
// dodaj linię do rysunku (za pomocą QCAD Simple API):
startTransaction(di);
addLine(0, 0, 100, 100);
endTransaction();
// eksportuj do podanego pliku (-o)
if (!di.exportFile(outFile)) {
di.destroy();
print("Cannot export file:", outFile);
return;
}
di.destroy();
}
if (typeof(including) == 'undefined' || including === false) {
main();
}

Załóżmy, że ten skrypt jest zapisany jako scripts/Tools/ExTool/ExTool.js.

Można go następnie uruchomić w następujący sposób:

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

Jeśli skrypt jest uruchamiany jako część usługi sieciowej, pamiętaj, aby przekazać również przełączniki -no-gui i -allow-multiple-instances, aby poinformować QCAD, że GUI nie jest dostępne i że można równolegle uruchamiać wiele instancji:

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

Na serwerze zazwyczaj przekazuje się również -platform offscreen, aby uruchomić bez ekranu (tj. bez serwera X11 w systemie Linux):

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