File indexing completed on 2024-05-19 04:26:58

0001 /*
0002  *  SPDX-FileCopyrightText: 2017 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 #ifndef LIBKIS_TRANSFORMMASK_H
0007 #define LIBKIS_TRANSFORMMASK_H
0008 
0009 #include <QObject>
0010 #include "Node.h"
0011 
0012 #include <kis_types.h>
0013 
0014 #include "kritalibkis_export.h"
0015 #include "libkis.h"
0016 
0017 /**
0018  * @brief The TransformMask class
0019  * A transform mask is a mask type node that can be used
0020  * to store transformations.
0021  */
0022 class KRITALIBKIS_EXPORT TransformMask : public Node
0023 {
0024     Q_OBJECT
0025     Q_DISABLE_COPY(TransformMask)
0026 
0027 public:
0028     explicit TransformMask(KisImageSP image, QString name, QObject *parent = 0);
0029     explicit TransformMask(KisImageSP image, KisTransformMaskSP mask, QObject *parent = 0);
0030     ~TransformMask() override;
0031 public Q_SLOTS:
0032 
0033     /**
0034      * @brief type Krita has several types of nodes, split in layers and masks. Group
0035      * layers can contain other layers, any layer can contain masks.
0036      *
0037      * @return transformmask
0038      *
0039      * If the Node object isn't wrapping a valid Krita layer or mask object, and
0040      * empty string is returned.
0041      */
0042     virtual QString type() const override;
0043 
0044     QTransform finalAffineTransform() const;
0045 
0046     /**
0047      * @brief toXML
0048      * @return a string containing XML formated transform parameters.
0049      */
0050     QString toXML() const;
0051 
0052     /**
0053      * @brief fromXML set the transform of the transform mask from XML formatted data.
0054      * The xml must have a valid id
0055      *
0056      * dumbparams - placeholder for static transform masks
0057      * tooltransformparams - static transform mask
0058      * animatedtransformparams - animated transform mask
0059      *
0060 @code
0061 <!DOCTYPE transform_params>
0062 <transform_params>
0063   <main id="tooltransformparams"/>
0064   <data mode="0">
0065    <free_transform>
0066     <transformedCenter type="pointf" x="12.3102137276208" y="11.0727768562035"/>
0067     <originalCenter type="pointf" x="20" y="20"/>
0068     <rotationCenterOffset type="pointf" x="0" y="0"/>
0069     <transformAroundRotationCenter value="0" type="value"/>
0070     <aX value="0" type="value"/>
0071     <aY value="0" type="value"/>
0072     <aZ value="0" type="value"/>
0073     <cameraPos z="1024" type="vector3d" x="0" y="0"/>
0074     <scaleX value="1" type="value"/>
0075     <scaleY value="1" type="value"/>
0076     <shearX value="0" type="value"/>
0077     <shearY value="0" type="value"/>
0078     <keepAspectRatio value="0" type="value"/>
0079     <flattenedPerspectiveTransform m23="0" m31="0" m32="0" type="transform" m33="1" m12="0" m13="0" m22="1" m11="1" m21="0"/>
0080     <filterId value="Bicubic" type="value"/>
0081    </free_transform>
0082   </data>
0083 </transform_params>
0084 @endcode
0085      * @param xml a valid formated XML string with proper main and data elements.
0086      * @return a true response if successful, a false response if failed.
0087      */
0088     bool fromXML(const QString &xml);
0089 
0090 };
0091 
0092 #endif // LIBKIS_TRANSFORMMASK_H
0093