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