Tutorial: Scripts de herramientas de línea de comandos

Índice

 

Introducción

Los scripts pueden utilizarse para crear herramientas de línea de comandos que aprovechen la funcionalidad de QCAD. Un script de este tipo puede, por ejemplo, generar un dibujo en función de unos parámetros, convertir un dibujo o analizar un dibujo.

Ejemplo

La estructura básica de un script de herramienta de línea de comandos puede tener, por ejemplo, el aspecto que se muestra a continuación. Este es también un script de ejemplo totalmente funcional que puede utilizarse como herramienta de línea de comandos para añadir una línea de 0,0 a 100,100 a un dibujo dado y exportar ese dibujo con un nuevo nombre de archivo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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;
    }

    // create new document (off screen):
    var doc = new RDocument(new RMemoryStorage(), new RSpatialIndexNavel());
    var di = new RDocumentInterface(doc);

    // import given file:
    if (di.importFile(inFile) != RDocumentInterface.IoErrorNoError) {
        di.destroy();
        print("Cannot import file:", inFile);
        return;
    }

    // add line to drawing (usine QCAD Simple API):
    startTransaction(di);
    addLine(0,0, 100,100);
    endTransaction()

    // export to given file (-o)
    if (!di.exportFile(outFile)) {
        di.destroy();
        print("Cannot export file:", outFile);
        return;
    }
    
    di.destroy();
}

if (typeof(including)=='undefined' || including===false) {
    main();
}

Ejecución de scripts de herramientas de línea de comandos

Supongamos que este script se guarda en scripts/Tools/ExTool/ExTool.js.

A continuación, se puede ejecutar de la siguiente manera

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

Si el script se ejecuta como parte de un servicio web, asegúrese de pasar también los modificadores -no-gui y -allow-multiple-instances para indicar a QCAD que no dispone de interfaz gráfica de usuario y que se pueden ejecutar múltiples instancias en paralelo:

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

En un servidor normalmente también pasaría -platform offscreen para ejecutar headless (es decir, sin un servidor X11 en Linux):

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