Skip to content

Скрипти інструментів командного рядка

Скрипти можна використовувати для створення інструментів командного рядка, які використовують функціональність QCAD. Такий скрипт може, наприклад, генерувати креслення на основі параметрів, конвертувати креслення або аналізувати креслення.

Базова структура скрипта інструмента командного рядка може виглядати, наприклад, як показано нижче. Це також повністю функціональний приклад скрипта, який можна використовувати як інструмент командного рядка для додавання лінії від 0,0 до 100,100 до заданого креслення та експортування цього креслення під новим ім’ям файлу:

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;
}
// створити новий документ (поза екраном):
var doc = new RDocument(new RMemoryStorage(), new RSpatialIndexNavel());
var di = new RDocumentInterface(doc);
// імпортувати заданий файл:
if (di.importFile(inFile) != RDocumentInterface.IoErrorNoError) {
di.destroy();
print("Cannot import file:", inFile);
return;
}
// додати лінію до креслення (за допомогою QCAD Simple API):
startTransaction(di);
addLine(0, 0, 100, 100);
endTransaction();
// експортувати до заданого файлу (-o)
if (!di.exportFile(outFile)) {
di.destroy();
print("Cannot export file:", outFile);
return;
}
di.destroy();
}
if (typeof(including) == 'undefined' || including === false) {
main();
}

Запуск скриптів інструментів командного рядка

Section titled “Запуск скриптів інструментів командного рядка”

Припустимо, що цей скрипт збережено як scripts/Tools/ExTool/ExTool.js.

Тоді його можна запустити так:

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

Якщо скрипт запускається як частина вебслужби, обов’язково передайте також перемикачі -no-gui та -allow-multiple-instances, щоб повідомити QCAD, що графічний інтерфейс недоступний і що можна паралельно запускати кілька екземплярів:

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

На сервері зазвичай також передають -platform offscreen для запуску без екрана (тобто без сервера X11 у Linux):

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