From e2593e2efe140d47870b0c511cbf5160db080edd Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Fri, 12 Feb 2021 04:44:15 -0500 Subject: Move QPDFMatrix into the public API --- include/qpdf/QPDFMatrix.hh | 95 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 include/qpdf/QPDFMatrix.hh (limited to 'include') diff --git a/include/qpdf/QPDFMatrix.hh b/include/qpdf/QPDFMatrix.hh new file mode 100644 index 00000000..85f42af7 --- /dev/null +++ b/include/qpdf/QPDFMatrix.hh @@ -0,0 +1,95 @@ +// Copyright (c) 2005-2021 Jay Berkenbilt +// +// This file is part of qpdf. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Versions of qpdf prior to version 7 were released under the terms +// of version 2.0 of the Artistic License. At your option, you may +// continue to consider qpdf to be licensed under those terms. Please +// see the manual for additional information. + +#ifndef QPDFMATRIX_HH +#define QPDFMATRIX_HH + +#include +#include +#include + +// This class represents a PDF transformation matrix using a tuple +// such that +// +// ┌ ┐ +// │ a b 0 │ +// (a, b, c, d, e, f) = │ c d 0 │ +// │ e f 1 │ +// └ ┘ + +class QPDFMatrix +{ + public: + QPDF_DLL + QPDFMatrix(); + QPDF_DLL + QPDFMatrix(double a, double b, double c, + double d, double e, double f); + QPDF_DLL + QPDFMatrix(QPDFObjectHandle::Matrix const&); + + // Returns the six values separated by spaces as real numbers with + // trimmed zeroes. + QPDF_DLL + std::string unparse() const; + + QPDF_DLL + QPDFObjectHandle::Matrix getAsMatrix() const; + + // Replace this with other * this + QPDF_DLL + void concat(QPDFMatrix const& other); + + // Same as concat(sx, 0, 0, sy, 0, 0) + QPDF_DLL + void scale(double sx, double sy); + + // Same as concat(1, 0, 0, 1, tx, ty); + QPDF_DLL + void translate(double tx, double ty); + + // Any value other than 90, 180, or 270 is ignored + QPDF_DLL + void rotatex90(int angle); + + // Transform a point. The underlying operation is to take + // [x y 1] * this + // and take the first and second rows of the result as xp and yp. + QPDF_DLL + void transform(double x, double y, double& xp, double& yp); + + // Transform a rectangle by creating a new rectangle that tightly + // bounds the polygon resulting from transforming the four + // corners. + QPDF_DLL + QPDFObjectHandle::Rectangle transformRectangle( + QPDFObjectHandle::Rectangle r); + + private: + double a; + double b; + double c; + double d; + double e; + double f; +}; + +#endif // QPDFMATRIX_HH -- cgit v1.2.3-54-g00ecf