28using namespace Qt::StringLiterals;
32 auto newEffect = std::make_unique<QgsTransformEffect>();
33 newEffect->readProperties( map );
42 QPainter *painter = context.
painter();
47 const QTransform t = createTransform( context );
48 painter->setTransform( t,
true );
55 props.insert( u
"reflect_x"_s, mReflectX ?
"1" :
"0" );
56 props.insert( u
"reflect_y"_s, mReflectY ?
"1" :
"0" );
57 props.insert( u
"scale_x"_s, QString::number( mScaleX ) );
58 props.insert( u
"scale_y"_s, QString::number( mScaleY ) );
59 props.insert( u
"rotation"_s, QString::number( mRotation ) );
60 props.insert( u
"shear_x"_s, QString::number( mShearX ) );
61 props.insert( u
"shear_y"_s, QString::number( mShearY ) );
62 props.insert( u
"translate_x"_s, QString::number( mTranslateX ) );
63 props.insert( u
"translate_y"_s, QString::number( mTranslateY ) );
66 props.insert( u
"enabled"_s,
mEnabled ?
"1" :
"0" );
67 props.insert( u
"draw_mode"_s, QString::number(
int(
mDrawMode ) ) );
73 mEnabled = props.value( u
"enabled"_s, u
"1"_s ).toInt();
75 mReflectX = props.value( u
"reflect_x"_s, u
"0"_s ).toInt();
76 mReflectY = props.value( u
"reflect_y"_s, u
"0"_s ).toInt();
77 mScaleX = props.value( u
"scale_x"_s, u
"1.0"_s ).toDouble();
78 mScaleY = props.value( u
"scale_y"_s, u
"1.0"_s ).toDouble();
79 mRotation = props.value( u
"rotation"_s, u
"0.0"_s ).toDouble();
80 mShearX = props.value( u
"shear_x"_s, u
"0.0"_s ).toDouble();
81 mShearY = props.value( u
"shear_y"_s, u
"0.0"_s ).toDouble();
82 mTranslateX = props.value( u
"translate_x"_s, u
"0.0"_s ).toDouble();
83 mTranslateY = props.value( u
"translate_y"_s, u
"0.0"_s ).toDouble();
96 const QTransform t = createTransform( context );
97 return t.mapRect( rect );
100QTransform QgsTransformEffect::createTransform(
const QgsRenderContext &context )
const
104 const QPicture &pic =
source();
108 const int width = pic.boundingRect().width();
109 const int height = pic.boundingRect().height();
110 const int top = pic.boundingRect().top();
111 const int left = pic.boundingRect().left();
121 t.rotate( mRotation );
122 t.shear( mShearX, mShearY );
123 t.scale( mScaleX, mScaleY );
125 if ( mReflectX || mReflectY )
127 t.scale( mReflectX ? -1 : 1, mReflectY ? -1 : 1 );
130 t.translate( -left - width / 2.0, -top - height / 2.0 );
void drawSource(QPainter &painter)
Draws the source QPicture onto the specified painter.
const QPicture & source() const
Returns the source QPicture.
bool enabled() const
Returns whether the effect is enabled.
DrawMode
Drawing modes for effects.
Contains information about the context of a rendering operation.
double convertToPainterUnits(double size, Qgis::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale(), Qgis::RenderSubcomponentProperty property=Qgis::RenderSubcomponentProperty::Generic) const
Converts a size from the specified units to painter units (pixels).
QPainter * painter()
Returns the destination QPainter for the render operation.
Scoped object for saving and restoring a QPainter object's state.
static QString encodeMapUnitScale(const QgsMapUnitScale &mapUnitScale)
static QgsMapUnitScale decodeMapUnitScale(const QString &str)
static Q_INVOKABLE Qgis::RenderUnit decodeRenderUnit(const QString &string, bool *ok=nullptr)
Decodes a render unit from a string.
static Q_INVOKABLE QString encodeUnit(Qgis::DistanceUnit unit)
Encodes a distance unit to a string.