10#include <QDomDocument>
23#define M_SQRT_2 1.41421356237309504880
27#include <boost/math/special_functions/erf.hpp>
28#define erf(x) boost::math::erf(x)
37 d->fade = 1.0 - (
fh +
fv) / 2.0;
39 if (
d->fade == 0.0)
d->fade = 1e-6;
40 else if (
d->fade == 1.0)
d->fade = 1.0 - 1e-6;
42 d->center = (2.5 * (6761.0*
d->fade-10000.0))/(
M_SQRT_2*6761.0*
d->fade);
43 d->alphafactor = 255.0 / (2.0 * erf(
d->center));
74inline quint8 KisGaussCircleMaskGenerator::Private::value(qreal dist)
const
77 quint8 ret = alphafactor * (erf(dist + center) - erf(dist - center));
78 return (quint8) 255 - ret;
88 return d->applicator.data();
98 qreal dist = sqrt(norme(xr, yr *
d->ycoef));
101 if (
d->fadeMaker.needFade(dist, &
value)) {
105 return d->value(dist);
float value(const T *src, size_t ch)
auto createOptimizedClass(Args &&...param)
auto createScalarClass(Args &&...params)
void setMaskScalarApplicator()
QScopedPointer< KisBrushMaskApplicatorBase > applicator
KisGaussCircleMaskGenerator(qreal diameter, qreal ratio, qreal fh, qreal fv, int spikes, bool antialiasEdges)
quint8 valueAt(qreal x, qreal y) const override
void setScale(qreal scaleX, qreal scaleY) override
~KisGaussCircleMaskGenerator() override
bool shouldVectorize() const override
KisMaskGenerator * clone() const override
const QScopedPointer< Private > d
virtual bool shouldSupersample() const
const QScopedPointer< Private > d
void fixRotation(qreal &xr, qreal &yr) const
virtual void setScale(qreal scaleX, qreal scaleY)
qreal effectiveSrcWidth() const
const KoID GaussId("gauss", ki18n("Gaussian"))
generate brush mask with a Gaussian-blurred edge