X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fmodules%2Fexample%2Fmetaballs.cpp;h=0cfa6c3cc27543c4b419c8a3d34bb2ea90c7ee57;hb=ca157a87151421913925eaef67fdd402bbdc8c8f;hp=874d7f9ef8e39226c98149e7f402bacf0c8dbd49;hpb=6dfd55be0cb07c9358695aa5e1b0015d2f5d97bf;p=synfig.git diff --git a/synfig-core/trunk/src/modules/example/metaballs.cpp b/synfig-core/trunk/src/modules/example/metaballs.cpp index 874d7f9..0cfa6c3 100644 --- a/synfig-core/trunk/src/modules/example/metaballs.cpp +++ b/synfig-core/trunk/src/modules/example/metaballs.cpp @@ -159,7 +159,27 @@ Metaballs::get_param_vocab()const return ret; } -static inline Real densityfunc(const synfig::Point &p, const synfig::Point &c, Real R) +synfig::Layer::Handle +Metaballs::hit_check(synfig::Context context, const synfig::Point &point)const +{ + Real density(totaldensity(point)); + + if (density <= 0 || density > 1 || get_amount() == 0) + return context.hit_check(point); + + synfig::Layer::Handle tmp; + + if (get_blend_method()==Color::BLEND_BEHIND && (tmp=context.hit_check(point))) + return tmp; + + if (Color::is_onto(get_blend_method()) && !(context.hit_check(point))) + return 0; + + return const_cast(this); +} + +Real +Metaballs::densityfunc(const synfig::Point &p, const synfig::Point &c, Real R)const { const Real dx = p[0] - c[0]; const Real dy = p[1] - c[1]; @@ -179,7 +199,7 @@ static inline Real densityfunc(const synfig::Point &p, const synfig::Point &c, R } Real -Metaballs::totaldensity(const Point &pos) const +Metaballs::totaldensity(const Point &pos)const { Real density = 0;