Mercurial > octave
annotate src/octave-svgconvert.cc @ 27923:bd51beb6205e
update formatting of copyright notices
* Use <https://octave.org/copyright/> instead of
<https://octave.org/COPYRIGHT.html/>.
* For consistency with other comments in the Octave sources, use
C++-style comments for copyright blocks in C and C++ files.
* Use delimiters above and below copyright blocks that are appropriate
for the language used in the file.
* Eliminate extra spacing inside copyright blocks.
* lex.ll (looks_like_copyright): Also allow newlines and carriage
returns before the word "Copyright".
* scripts/mk-doc.pl (gethelp): Also skip empty comment lines.
* bp-table.cc, type.m: Adjust tests.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 08 Jan 2020 11:59:41 -0500 |
parents | 1891570abac8 |
children | 49a0d90cd2a3 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 // Copyright (C) 2017-2020 The Octave Project Developers |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software; you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation; either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <http://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
25 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
26 #include <iostream> |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
27 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
28 #include <QtCore> |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
29 #include <QtXml> |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
30 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
31 #include <QApplication> |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
32 #include <QFontDatabase> |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
33 #include <QImage> |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
34 #include <QPainter> |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
35 #include <QPrinter> |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
36 #include <QRegExp> |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
37 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
38 class pdfpainter : public QPainter |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
39 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
40 public: |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
41 pdfpainter (QString fname, QRectF sizepix, double dpi) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
42 : m_fname (fname), m_sizef (sizepix), m_dpi (dpi), m_printer () |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
43 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
44 double scl = get_scale (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
45 m_sizef.setWidth (m_sizef.width () * scl); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
46 m_sizef.setHeight (m_sizef.height () * scl); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
47 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
48 // Printer settings |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
49 m_printer.setOutputFormat (QPrinter::PdfFormat); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
50 m_printer.setFontEmbeddingEnabled (true); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
51 m_printer.setOutputFileName (get_fname ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
52 m_printer.setFullPage (true); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
53 m_printer.setPaperSize (get_rectf ().size (), QPrinter::DevicePixel); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
54 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
55 // Painter settings |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
56 begin (&m_printer); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
57 setViewport (get_rect ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
58 scale (get_scale (), get_scale ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
59 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
60 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
61 ~pdfpainter (void) { } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
62 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
63 QString get_fname (void) const { return m_fname; } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
64 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
65 QRectF get_rectf (void) const { return m_sizef; } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
66 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
67 QRect get_rect (void) const { return m_sizef.toRect (); } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
68 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
69 double get_scale (void) const { return m_dpi / 72.0; } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
70 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
71 void finish (void) { end (); } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
72 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
73 private: |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
74 QString m_fname; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
75 QRectF m_sizef; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
76 double m_dpi; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
77 QPrinter m_printer; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
78 }; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
79 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
80 // String conversion functions |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
81 QVector<double> qstr2vectorf (QString str) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
82 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
83 QVector<double> pts; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
84 QStringList coords = str.split (","); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
85 for (QStringList::iterator p = coords.begin (); p != coords.end (); p += 1) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
86 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
87 double pt = (*p).toDouble (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
88 pts.append (pt); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
89 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
90 return pts; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
91 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
92 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
93 QVector<double> qstr2vectord (QString str) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
94 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
95 QVector<double> pts; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
96 QStringList coords = str.split (","); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
97 for (QStringList::iterator p = coords.begin (); p != coords.end (); p += 1) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
98 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
99 double pt = (*p).toDouble (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
100 pts.append (pt); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
101 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
102 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
103 return pts; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
104 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
105 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
106 QVector<QPointF> qstr2ptsvector (QString str) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
107 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
108 QVector<QPointF> pts; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
109 str = str.trimmed (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
110 str.replace (" ", ","); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
111 QStringList coords = str.split (","); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
112 for (QStringList::iterator p = coords.begin (); p != coords.end (); p += 2) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
113 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
114 QPointF pt ((*p).toDouble (), (*(p+1)).toDouble ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
115 pts.append (pt); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
116 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
117 return pts; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
118 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
119 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
120 QVector<QPoint> qstr2ptsvectord (QString str) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
121 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
122 QVector<QPoint> pts; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
123 str = str.trimmed (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
124 str.replace (" ", ","); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
125 QStringList coords = str.split (","); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
126 for (QStringList::iterator p = coords.begin (); p != coords.end (); p += 2) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
127 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
128 QPoint pt ((*p).toDouble (), (*(p+1)).toDouble ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
129 pts.append (pt); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
130 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
131 return pts; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
132 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
133 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
134 // Extract field arguments in a style-like string, e.g. "bla field(1,34,56) bla" |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
135 QString get_field (QString str, QString field) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
136 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
137 QString retval; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
138 QRegExp rx (field + "\\(([^\\)]*)\\)"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
139 int pos = 0; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
140 pos = rx.indexIn (str, pos); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
141 if (pos > -1) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
142 retval = rx.cap (1); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
143 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
144 return retval; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
145 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
146 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
147 // Polygon reconstruction class |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
148 class octave_polygon |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
149 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
150 public: |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
151 octave_polygon (void) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
152 { } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
153 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
154 octave_polygon (QPolygonF p) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
155 { m_polygons.push_back (p); } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
156 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
157 ~octave_polygon (void) { } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
158 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
159 int count (void) const |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
160 { return m_polygons.count (); } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
161 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
162 void reset (void) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
163 { m_polygons.clear (); } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
164 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
165 QList<QPolygonF> reconstruct (void) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
166 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
167 if (m_polygons.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
168 return QList<QPolygonF> (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
169 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
170 // Once a polygon has been merged to another, it is marked unsuded |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
171 QVector<bool> unused; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
172 for (auto it = m_polygons.begin (); it != m_polygons.end (); it++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
173 unused.push_back (false); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
174 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
175 bool tryagain = (m_polygons.count () > 1); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
176 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
177 while (tryagain) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
178 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
179 tryagain = false; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
180 for (auto ii = 0; ii < m_polygons.count (); ii++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
181 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
182 if (! unused[ii]) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
183 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
184 QPolygonF polygon = m_polygons[ii]; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
185 for (auto jj = ii+1; jj < m_polygons.count (); jj++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
186 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
187 if (! unused[jj]) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
188 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
189 QPolygonF newpoly = mergepoly (polygon, m_polygons[jj]); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
190 if (newpoly.count ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
191 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
192 polygon = newpoly; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
193 m_polygons[ii] = newpoly; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
194 unused[jj] = true; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
195 tryagain = true; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
196 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
197 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
198 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
199 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
200 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
201 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
202 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
203 // Try to remove cracks in polygons |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
204 for (auto ii = 0; ii < m_polygons.count (); ii++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
205 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
206 QPolygonF polygon = m_polygons[ii]; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
207 tryagain = ! unused[ii]; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
208 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
209 while (tryagain && polygon.count () > 4) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
210 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
211 tryagain = false; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
212 QVector<int> del; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
213 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
214 for (auto jj = 1; jj < (polygon.count () - 1); jj++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
215 if (polygon[jj-1] == polygon[jj+1]) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
216 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
217 if (! del.contains (jj)) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
218 del.push_front (jj); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
219 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
220 del.push_front (jj+1); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
221 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
222 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
223 for (auto idx : del) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
224 polygon.remove (idx); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
225 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
226 if (del.count ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
227 tryagain = true; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
228 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
229 m_polygons[ii] = polygon; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
230 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
231 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
232 // FIXME: There may still be residual cracks, we should do something like |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
233 // resetloop = 2; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
234 // while (resetloop) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
235 // currface = shift (currface, 1); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
236 // if (currface(1) == currface(3)) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
237 // currface([2 3]) = []; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
238 // resetloop = 2; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
239 // else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
240 // resetloop--; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
241 // endif |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
242 // endwhile |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
243 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
244 QList<QPolygonF> retval; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
245 for (int ii = 0; ii < m_polygons.count (); ii++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
246 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
247 QPolygonF polygon = m_polygons[ii]; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
248 if (! unused[ii] && polygon.count () > 2) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
249 retval.push_back (polygon); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
250 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
251 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
252 return retval; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
253 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
254 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
255 static inline |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
256 bool eq (QPointF p1, QPointF p2) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
257 { |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26993
diff
changeset
|
258 return ((qAbs (p1.x () - p2.x ()) |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26993
diff
changeset
|
259 <= 0.00001 * qMin (qAbs (p1.x ()), qAbs (p2.x ()))) |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26993
diff
changeset
|
260 && (qAbs (p1.y () - p2.y ()) |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26993
diff
changeset
|
261 <= 0.00001 * qMin (qAbs (p1.y ()), qAbs (p2.y ())))); |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
262 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
263 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
264 static |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
265 QPolygonF mergepoly (QPolygonF poly1, QPolygonF poly2) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
266 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
267 // Close polygon contour |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
268 poly1.push_back (poly1[0]); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
269 poly2.push_back (poly2[0]); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
270 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
271 for (int ii = 0; ii < (poly1.size () - 1); ii++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
272 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
273 for (int jj = 0; jj < (poly2.size () - 1); jj++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
274 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
275 bool forward = (eq (poly1[ii], poly2[jj]) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
276 && eq (poly1[ii+1], poly2[jj+1])); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
277 bool backward = ! forward && (eq (poly1[ii], poly2[jj+1]) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
278 && eq (poly1[ii+1], poly2[jj])); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
279 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
280 if (forward || backward) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
281 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
282 // Unclose contour |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
283 poly1.pop_back (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
284 poly2.pop_back (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
285 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
286 QPolygonF merged; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
287 for (int kk = 0; kk < (ii+1); kk++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
288 merged.push_back (poly1[kk]); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
289 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
290 // Shift vertices and eliminate the common edge |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
291 std::rotate (poly2.begin (), poly2.begin () + jj, poly2.end ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
292 poly2.erase (poly2.begin ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
293 poly2.erase (poly2.begin ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
294 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
295 if (forward) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
296 for (int kk = poly2.size (); kk > 0; kk--) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
297 merged.push_back (poly2[kk-1]); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
298 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
299 for (int kk = 0; kk < poly2.size (); kk++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
300 merged.push_back (poly2[kk]); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
301 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
302 for (int kk = ii+1; kk < poly1.size (); kk++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
303 merged.push_back (poly1[kk]); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
304 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
305 // Return row vector |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
306 QPolygonF out (merged.size ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
307 for (int kk = 0; kk < merged.size (); kk++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
308 out[kk] = merged[kk]; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
309 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
310 return out; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
311 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
312 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
313 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
314 return QPolygonF (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
315 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
316 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
317 void add (QPolygonF p) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
318 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
319 if (m_polygons.count () == 0) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
320 m_polygons.push_back (p); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
321 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
322 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
323 QPolygonF tmp = mergepoly (m_polygons.back (), p); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
324 if (tmp.count ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
325 m_polygons.back () = tmp; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
326 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
327 m_polygons.push_back (p); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
328 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
329 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
330 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
331 private: |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
332 QList<QPolygonF> m_polygons; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
333 }; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
334 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
335 void draw (QDomElement& parent_elt, pdfpainter& painter) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
336 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
337 QDomNodeList nodes = parent_elt.childNodes (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
338 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
339 static QString clippath_id; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
340 static QMap< QString, QVector<QPoint> > clippath; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
341 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
342 // tspan elements must have access to the font and position extracted from |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
343 // their parent text element |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
344 static QFont font; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
345 static double dx = 0, dy = 0; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
346 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
347 for (int i = 0; i < nodes.count (); i++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
348 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
349 QDomNode node = nodes.at (i); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
350 if (! node.isElement ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
351 continue; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
352 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
353 QDomElement elt = node.toElement (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
354 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
355 if (elt.tagName () == "clipPath") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
356 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
357 clippath_id = "#" + elt.attribute ("id"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
358 draw (elt, painter); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
359 clippath_id = QString (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
360 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
361 else if (elt.tagName () == "g") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
362 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
363 bool current_clipstate = painter.hasClipping (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
364 QRegion current_clippath = painter.clipRegion (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
365 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
366 QString str = elt.attribute ("clip-path"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
367 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
368 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
369 QVector<QPoint> pts = clippath[get_field (str, "url")]; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
370 if (! pts.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
371 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
372 painter.setClipRegion (QRegion (QPolygon (pts))); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
373 painter.setClipping (true); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
374 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
375 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
376 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
377 draw (elt, painter); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
378 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
379 // Restore previous clipping settings |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
380 painter.setClipRegion (current_clippath); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
381 painter.setClipping (current_clipstate); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
382 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
383 else if (elt.tagName () == "text") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
384 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
385 // Font |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
386 font = QFont (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
387 QString str = elt.attribute ("font-family"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
388 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
389 font.setFamily (elt.attribute ("font-family")); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
390 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
391 str = elt.attribute ("font-weight"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
392 if (! str.isEmpty () && str != "normal") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
393 font.setWeight (QFont::Bold); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
394 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
395 str = elt.attribute ("font-style"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
396 if (! str.isEmpty () && str != "normal") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
397 font.setStyle (QFont::StyleItalic); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
398 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
399 int sz = elt.attribute ("font-size").toInt (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
400 if (sz > 0) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
401 font.setPixelSize (sz); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
402 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
403 painter.setFont (font); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
404 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
405 // Translation and rotation |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
406 painter.save (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
407 str = get_field (elt.attribute ("transform"), "translate"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
408 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
409 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
410 QStringList trans = str.split (","); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
411 dx = trans[0].toDouble (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
412 dy = trans[1].toDouble (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
413 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
414 str = get_field (elt.attribute ("transform"), "rotate"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
415 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
416 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
417 QStringList rot = str.split (","); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
418 painter.translate (dx+rot[1].toDouble (), |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
419 dy+rot[2].toDouble ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
420 painter.rotate (rot[0].toDouble ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
421 dx = rot[1].toDouble (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
422 dy = rot[2].toDouble (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
423 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
424 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
425 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
426 painter.translate (dx, dy); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
427 dx = 0; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
428 dy = 0; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
429 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
430 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
431 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
432 draw (elt, painter); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
433 painter.restore (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
434 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
435 else if (elt.tagName () == "tspan") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
436 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
437 // Font |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
438 QFont saved_font(font); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
439 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
440 QString str = elt.attribute ("font-family"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
441 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
442 font.setFamily (elt.attribute ("font-family")); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
443 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
444 str = elt.attribute ("font-weight"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
445 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
446 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
447 if (str != "normal") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
448 font.setWeight (QFont::Bold); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
449 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
450 font.setWeight (QFont::Normal); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
451 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
452 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
453 int sz = elt.attribute ("font-size").toInt (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
454 if (sz > 0) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
455 font.setPixelSize (sz); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
456 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
457 painter.setFont (font); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
458 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
459 // Color is specified in rgb |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
460 str = get_field (elt.attribute ("fill"), "rgb"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
461 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
462 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
463 QStringList clist = str.split (","); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
464 painter.setPen (QColor (clist[0].toInt (), clist[1].toInt (), |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
465 clist[2].toInt ())); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
466 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
467 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
468 QStringList xx = elt.attribute ("x").split (" "); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
469 int y = elt.attribute ("y").toInt (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
470 str = elt.text (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
471 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
472 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
473 int ii = 0; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
474 foreach (QString s, xx) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
475 if (ii < str.size ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
476 painter.drawText (s.toInt ()-dx, y-dy, str.at (ii++)); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
477 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
478 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
479 draw (elt, painter); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
480 font = saved_font; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
481 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
482 else if (elt.tagName () == "polyline") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
483 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
484 // Color |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
485 QColor c (elt.attribute ("stroke")); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
486 QString str = elt.attribute ("stroke-opacity"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
487 if (! str.isEmpty () && str.toDouble () != 1.0 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
488 && str.toDouble () >= 0.0) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
489 c.setAlphaF (str.toDouble ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
490 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
491 QPen pen; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
492 pen.setColor (c); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
493 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
494 // Line properies |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
495 str = elt.attribute ("stroke-width"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
496 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
497 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
498 double w = str.toDouble () * painter.get_scale (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
499 if (w > 0) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
500 pen.setWidthF (w / painter.get_scale ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
501 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
502 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
503 str = elt.attribute ("stroke-linecap"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
504 pen.setCapStyle (Qt::SquareCap); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
505 if (str == "round") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
506 pen.setCapStyle (Qt::RoundCap); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
507 else if (str == "butt") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
508 pen.setCapStyle (Qt::FlatCap); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
509 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
510 str = elt.attribute ("stroke-linejoin"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
511 pen.setJoinStyle (Qt::MiterJoin); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
512 if (str == "round") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
513 pen.setJoinStyle (Qt::RoundJoin); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
514 else if (str == "bevel") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
515 pen.setJoinStyle (Qt::BevelJoin); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
516 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
517 str = elt.attribute ("stroke-dasharray"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
518 pen.setStyle (Qt::SolidLine); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
519 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
520 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
521 QVector<double> pat = qstr2vectord (str); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
522 if (pat.count () != 2 || pat[1] != 0) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
523 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
524 // Express pattern in linewidth units |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
525 for (auto& p : pat) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
526 p /= pen.widthF (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
527 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
528 pen.setDashPattern (pat); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
529 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
530 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
531 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
532 painter.setPen (pen); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
533 painter.drawPolyline (qstr2ptsvector (elt.attribute ("points"))); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
534 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
535 else if (elt.tagName () == "image") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
536 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
537 // Images are represented as a base64 stream of png formated data |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
538 QString href_att = elt.attribute ("xlink:href"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
539 QString prefix ("data:image/png;base64,"); |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26993
diff
changeset
|
540 QByteArray data |
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26993
diff
changeset
|
541 = QByteArray::fromBase64 (href_att.mid (prefix.length ()).toLatin1 ()); |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
542 QImage img; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
543 if (img.loadFromData (data, "PNG")) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
544 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
545 QRect pos(elt.attribute ("x").toInt (), |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
546 elt.attribute ("y").toInt (), |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
547 elt.attribute ("width").toInt (), |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
548 elt.attribute ("height").toInt ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
549 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
550 // Translate |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
551 painter.save (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
552 QString str = get_field (elt.attribute ("transform"), "matrix"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
553 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
554 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
555 QVector<double> m = qstr2vectorf (str); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
556 double scl = painter.get_scale (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
557 QTransform tform(m[0]*scl, m[1]*scl, m[2]*scl, |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
558 m[3]*scl, m[4]*scl, m[5]*scl); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
559 painter.setTransform (tform); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
560 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
561 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
562 painter.setRenderHint (QPainter::Antialiasing, false); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
563 painter.drawImage (pos, img); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
564 painter.setRenderHint (QPainter::Antialiasing, true); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
565 painter.restore (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
566 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
567 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
568 else if (elt.tagName () == "polygon") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
569 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
570 if (! clippath_id.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
571 clippath[clippath_id] = qstr2ptsvectord (elt.attribute ("points")); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
572 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
573 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
574 QString str = elt.attribute ("fill"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
575 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
576 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
577 QColor color (str); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
578 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
579 str = elt.attribute ("fill-opacity"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
580 if (! str.isEmpty () && str.toDouble () != 1.0 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
581 && str.toDouble () >= 0.0) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
582 color.setAlphaF (str.toDouble ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
583 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
584 QPolygonF p (qstr2ptsvector (elt.attribute ("points"))); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
585 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
586 if (p.count () > 2) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
587 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
588 painter.setBrush (color); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
589 painter.setPen (Qt::NoPen); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
590 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
591 painter.setRenderHint (QPainter::Antialiasing, false); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
592 painter.drawPolygon (p); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
593 painter.setRenderHint (QPainter::Antialiasing, true); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
594 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
595 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
596 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
597 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
598 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
599 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
600 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
601 // Append a list of reconstructed child polygons to a QDomElement and remove |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
602 // the original nodes |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
603 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
604 void replace_polygons (QDomElement& parent_elt, QList<QDomNode> orig, |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
605 QList<QPolygonF> polygons) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
606 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
607 if (! orig.count () || (orig.count () == polygons.count ())) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
608 return; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
609 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
610 QDomNode last = orig.last (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
611 for (int ii = 0; ii < polygons.count (); ii++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
612 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
613 QPolygonF polygon = polygons[ii]; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
614 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
615 QDomNode node = last.cloneNode (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
616 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
617 QString pts; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
618 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
619 for (int jj = 0; jj < polygon.count (); jj++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
620 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
621 pts += QString ("%1,%2 ").arg (polygon[jj].x ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
622 .arg (polygon[jj].y ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
623 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
624 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
625 node.toElement ().setAttribute ("points", pts.trimmed ()); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
626 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
627 if (! last.isNull ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
628 last = parent_elt.insertAfter (node, last); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
629 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
630 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
631 for (int ii = 0; ii < orig.count (); ii++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
632 parent_elt.removeChild (orig.at (ii)); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
633 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
634 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
635 void reconstruct_polygons (QDomElement& parent_elt) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
636 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
637 QDomNodeList nodes = parent_elt.childNodes (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
638 QColor current_color; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
639 QList<QDomNode> replaced_nodes; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
640 octave_polygon current_polygon; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
641 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
642 // Collection of child nodes to be removed and polygons to be added |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
643 QList< QPair<QList<QDomNode>,QList<QPolygonF> > > collection; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
644 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
645 for (int ii = 0; ii < nodes.count (); ii++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
646 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
647 QDomNode node = nodes.at (ii); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
648 if (! node.isElement ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
649 continue; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
650 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
651 QDomElement elt = node.toElement (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
652 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
653 if (elt.tagName () == "polygon") |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
654 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
655 QString str = elt.attribute ("fill"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
656 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
657 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
658 QColor color (str); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
659 str = elt.attribute ("fill-opacity"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
660 if (! str.isEmpty ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
661 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
662 double alpha = str.toDouble (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
663 if (alpha != 1.0 && str.toDouble () >= 0.0) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
664 color.setAlphaF (alpha); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
665 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
666 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
667 if (! current_polygon.count ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
668 current_color = color; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
669 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
670 if (color != current_color) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
671 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
672 // Reconstruct the previous series of triangle |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
673 QList<QPolygonF> polygons = current_polygon.reconstruct (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
674 collection.push_back (QPair<QList<QDomNode>,QList<QPolygonF> > |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
675 (replaced_nodes, polygons)); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
676 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
677 replaced_nodes.clear (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
678 current_polygon.reset (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
679 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
680 current_color = color; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
681 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
682 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
683 QPolygonF p (qstr2ptsvector (elt.attribute ("points"))); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
684 current_polygon.add (p); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
685 replaced_nodes.push_back (node); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
686 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
687 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
688 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
689 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
690 if (current_polygon.count ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
691 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
692 QList<QPolygonF> polygons = current_polygon.reconstruct (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
693 collection.push_back (QPair<QList<QDomNode>,QList<QPolygonF> > |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
694 (replaced_nodes, polygons)); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
695 replaced_nodes.clear (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
696 current_polygon.reset (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
697 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
698 reconstruct_polygons (elt); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
699 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
700 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
701 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
702 // Finish |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
703 collection.push_back (QPair<QList<QDomNode>,QList<QPolygonF> > |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
704 (replaced_nodes, current_polygon.reconstruct ())); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
705 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
706 for (int ii = 0; ii < collection.count (); ii++) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
707 replace_polygons (parent_elt, collection[ii].first, collection[ii].second); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
708 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
709 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
710 int main(int argc, char *argv[]) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
711 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
712 const char *doc = "See \"octave-svgconvert -h\""; |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
26993
diff
changeset
|
713 const char *help = "Usage:\n\ |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
714 octave-svgconvert infile fmt dpi font reconstruct outfile\n\n\ |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
715 Convert svg file to pdf, or svg. All arguments are mandatory:\n\ |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
716 * infile: input svg file or \"-\" to indicate that the input svg file should be \ |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
717 read from stdin\n\ |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
718 * fmt: format of the output file. May be one of pdf or svg\n\ |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
719 * dpi: device dependent resolution in screen pixel per inch\n\ |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
720 * font: specify a file name for the default FreeSans font\n\ |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
721 * reconstruct: specify wether to reconstruct triangle to polygons (0 or 1)\n\ |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
722 * outfile: output file name\n"; |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26063
diff
changeset
|
723 |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
724 if (strcmp (argv[1], "-h") == 0) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
725 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
726 std::cout << help; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
727 return 0; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
728 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
729 else if (argc != 7) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
730 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
731 std::cerr << help; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
732 return -1; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
733 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
734 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
735 // Open svg file |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
736 QFile file; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
737 if (strcmp (argv[1], "-") != 0) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
738 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
739 // Read from file |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
740 file.setFileName (argv[1]); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
741 if (! file.open (QIODevice::ReadOnly | QIODevice::Text)) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
742 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
743 std::cerr << "Unable to open file " << argv[1] << "\n"; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
744 std::cerr << help; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
745 return -1; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
746 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
747 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
748 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
749 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
750 // Read from stdin |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
751 if (! file.open (stdin, QIODevice::ReadOnly | QIODevice::Text)) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
752 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
753 std::cerr << "Unable read from stdin\n"; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
754 std::cerr << doc; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
755 return -1; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
756 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
757 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
758 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
759 // Create a DOM document and load the svg file |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
760 QDomDocument document; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
761 QString msg; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
762 if(! document.setContent (&file, false, &msg)) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
763 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
764 std::cerr << "Failed to parse XML contents" << std::endl |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
765 << msg.toStdString (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
766 std::cerr << doc; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
767 file.close(); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
768 return -1; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
769 } |
26993
119353eb6b38
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26647
diff
changeset
|
770 |
26647
903c9a39e051
Make sure octave-svgconvert encodes SVG documents in UTF8 (bug #55612)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
771 file.close (); |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
772 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
773 // Format |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
774 if (strcmp (argv[2], "pdf") != 0 && strcmp (argv[2], "svg") != 0) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
775 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
776 std::cerr << "Unhandled output file format " << argv[2] << "\n"; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
777 std::cerr << doc; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
778 return -1; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
779 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
780 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
781 // Resolution |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
782 double dpi = QString (argv[3]).toDouble (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
783 if (dpi <= 0.0) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
784 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
785 std::cerr << "DPI must be positive\n"; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
786 return -1; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
787 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
788 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
789 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
790 // Get the viewport from the root element |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
791 QDomElement root = document.firstChildElement(); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
792 double x0, y0, dx, dy; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
793 QString s = root.attribute ("viewBox"); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
794 QTextStream (&s) >> x0 >> y0 >> dx >> dy; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
795 QRectF vp (x0, y0, dx, dy); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
796 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
797 // Setup application and add default FreeSans font if needed |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
798 QApplication a (argc, argv); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
799 |
26063
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
800 // When printing to PDF we may need the default FreeSans font |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
801 if (! strcmp (argv[2], "pdf")) |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
802 { |
26063
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
803 QFont font ("FreeSans"); |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
804 if (! font.exactMatch ()) |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
805 { |
26063
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
806 QString fontpath (argv[4]); |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
807 if (! fontpath.isEmpty ()) |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
808 { |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
809 int id = QFontDatabase::addApplicationFont (fontpath); |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
810 if (id < 0) |
26617
98afb8bbd1f6
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
26063
diff
changeset
|
811 std::cerr << "warning: print: " |
26063
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
812 "Unable to add default font to database\n"; |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
813 } |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
814 else |
4407b315339d
print.m: Fix localization of the default font file (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26042
diff
changeset
|
815 std::cerr << "warning: print: FreeSans font not found\n"; |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
816 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
817 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
818 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
819 // First render in a temporary file |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
820 QTemporaryFile fout; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
821 if (! fout.open ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
822 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
823 std::cerr << "Could not open temporary file\n"; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
824 return -1; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
825 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
826 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
827 // Do basic polygons reconstruction |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
828 if (QString (argv[5]).toInt ()) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
829 reconstruct_polygons (root); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
830 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
831 // Draw |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
832 if (! strcmp (argv[2], "pdf")) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
833 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
834 // PDF painter |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
835 pdfpainter painter (fout.fileName (), vp, dpi); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
836 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
837 draw (root, painter); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
838 painter.finish (); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
839 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
840 else |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
841 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
842 // Return modified svg document |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
843 QTextStream out (&fout); |
26647
903c9a39e051
Make sure octave-svgconvert encodes SVG documents in UTF8 (bug #55612)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
844 out.setCodec ("UTF-8"); |
903c9a39e051
Make sure octave-svgconvert encodes SVG documents in UTF8 (bug #55612)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
26617
diff
changeset
|
845 out << document.toByteArray (); |
26027
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
846 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
847 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
848 // Delete output file before writing with new data |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
849 if (QFile::exists (argv[6])) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
850 if (! QFile::remove (argv[6])) |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
851 { |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
852 std::cerr << "Unable to replace existing file " << argv[6] << "\n"; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
853 return -1; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
854 } |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
855 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
856 fout.copy (argv[6]); |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
857 |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
858 return 0; |
98d7a111786a
Add SVG convertion option for printing to PDF and raster outputs (bug #52193)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
diff
changeset
|
859 } |