File: SvgExportPlugin.cpp

package info (click to toggle)
tulip 6.0.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 196,224 kB
  • sloc: cpp: 571,851; ansic: 13,983; python: 4,105; sh: 1,555; yacc: 522; xml: 484; makefile: 168; pascal: 148; lex: 55
file content (108 lines) | stat: -rw-r--r-- 3,940 bytes parent folder | download
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/**
 *
 * This file is part of Tulip (https://tulip.labri.fr)
 *
 * Authors: David Auber and the Tulip development Team
 * from LaBRI, University of Bordeaux
 *
 * Tulip is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation, either version 3
 * of the License, or (at your option) any later version.
 *
 * Tulip is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 */
#include "ReadGraph.h"
#include "ExportSvg.h"

#include <tulip/ExportModule.h>
#include <tulip/LayoutProperty.h>
#include <tulip/ColorProperty.h>
#include <tulip/IntegerProperty.h>
#include <tulip/DoubleProperty.h>
#include <tulip/SizeProperty.h>
#include <tulip/StringProperty.h>

using namespace std;
using namespace tlp;

static const char *paramHelp[] = {
    // color interpolation
    "Indicates if edge color interpolation has to be used.",

    // size interpolation
    "Indicates if edge size interpolation has to be used.",

    // edge extremities
    "Indicates if edge extremities have to be exported.",

    // Background color
    "Specifies the background color.",

    // No background
    "Specifies if a background is needed.",

    // human readable
    "Adds line-breaks and indentation to empty sections between elements"
    " (ignorable whitespace). The main purpose of this parameter is to split"
    " the data into several lines, and to increase readability for a human reader."
    " Be careful, this adds a large amount of data to the output file.",

    // node labels
    "Specifies if node labels have to be exported.",

    // edge labels
    "Specifies if edge labels have to be exported.",

    // metanode labels
    "Specifies if node and edge labels inside metanodes have to be exported."};

class SvgExport : public tlp::ExportModule {

public:
  PLUGININFORMATION("SVG Export", "Sami Gasri, Charles-Antoine Lami, Bruno Pinaud", "16/07/2013",
                    "<p>Supported extensions: svg, svgz (compressed svg).</p><p>Exports a graph "
                    "visualization in a SVG formatted file.</p>",
                    "1.10", "File")

  std::string icon() const override {
    return ":/tulip/graphperspective/icons/32/export_svg.png";
  }

  SvgExport(tlp::PluginContext *context) : tlp::ExportModule(context, {"svg", "svgz"}) {
    addInParameter<bool>("edge color interpolation", paramHelp[0], "false");
    addInParameter<bool>("edge size interpolation", paramHelp[1], "true");
    addInParameter<bool>("edge extremities", paramHelp[2], "false");
    addInParameter<Color>("background color", paramHelp[3], "(255,255,255,255)");
    addInParameter<bool>("no background", paramHelp[4], "false");
    addInParameter<bool>("makes SVG output human readable", paramHelp[5], "true");
    addInParameter<bool>("export node labels", paramHelp[6], "true");
    addInParameter<bool>("export edge labels", paramHelp[7], "false");
    addInParameter<bool>("export metanode labels", paramHelp[8], "false");
  }

  bool exportGraph(ostream &os) override {
    pluginProgress->showPreview(false);
    bool autoformatting(true);

    if (dataSet != nullptr) {
      dataSet->get("makes SVG output human readable", autoformatting);
    }

    ExportSvg svg(pluginProgress, os, autoformatting); // We call our first concrete builder
    bool ret = ReadGraph::readGraph(graph, dataSet, pluginProgress, svg);

    if (!ret && autoformatting) {
      pluginProgress->setError(pluginProgress->getError() +
                               "<br/><br/>Human readable output is on. This adds a large amount of "
                               "data to the output file. Try to disable it and try again.");
    }

    return ret;
  }
};
PLUGIN(SvgExport)