Remove .gitignore do nothing is ignored.
[synfig.git] / synfig-core / trunk / src / modules / mod_particle / plant.cpp
index e1758f1..47b13a3 100644 (file)
@@ -76,7 +76,7 @@ SYNFIG_LAYER_SET_CVS_ID(Plant,"$Id$");
 
 
 Plant::Plant():
-       offset(0,0),
+       origin(0,0),
        split_angle(Angle::deg(10)),
        gravity(0,-0.1),
        velocity(0.3),
@@ -241,6 +241,9 @@ Plant::sync()const
                        if((((i+1)*sprouts + steps/2) / steps) > branch_count) {
                                Vector branch_velocity(deriv(f).norm()*velocity + deriv(f).perp().norm()*perp_velocity);
 
+                               if (isnan(branch_velocity[0]) || isnan(branch_velocity[1]))
+                                       continue;
+
                                branch_velocity[0] += random_factor * random(Random::SMOOTH_COSINE, 1, f*splits, 0.0f, 0.0f);
                                branch_velocity[1] += random_factor * random(Random::SMOOTH_COSINE, 2, f*splits, 0.0f, 0.0f);
 
@@ -284,7 +287,7 @@ Plant::set_param(const String & param, const ValueBase &value)
                needs_sync_=true;
                return true;
        }
-       IMPORT(offset);
+       IMPORT(origin);
        IMPORT_PLUS(split_angle,needs_sync_=true);
        IMPORT_PLUS(gravity,needs_sync_=true);
        IMPORT_PLUS(gradient,needs_sync_=true);
@@ -310,6 +313,9 @@ Plant::set_param(const String & param, const ValueBase &value)
        IMPORT(size);
        IMPORT(size_as_alpha);
        IMPORT(reverse);
+       IMPORT(use_width);
+
+       IMPORT_AS(origin,"offset");
 
        return Layer_Composite::set_param(param,value);
 }
@@ -344,7 +350,7 @@ Plant::get_param(const String& param)const
        if(param=="seed")
                return random.get_seed();
        EXPORT(bline);
-       EXPORT(offset);
+       EXPORT(origin);
        EXPORT(split_angle);
        EXPORT(gravity);
        EXPORT(velocity);
@@ -356,9 +362,9 @@ Plant::get_param(const String& param)const
        EXPORT(random_factor);
        EXPORT(drag);
        EXPORT(size);
-
        EXPORT(size_as_alpha);
        EXPORT(reverse);
+       EXPORT(use_width);
 
        EXPORT_NAME();
 
@@ -376,12 +382,12 @@ Plant::get_param_vocab()const
        ret.push_back(ParamDesc("bline")
                .set_local_name(_("Vertices"))
                .set_description(_("A list of BLine Points"))
-               .set_origin("offset")
-               //.set_hint("width")
+               .set_origin("origin")
+               .set_hint("width")
        );
 
-       ret.push_back(ParamDesc("offset")
-               .set_local_name(_("Offset"))
+       ret.push_back(ParamDesc("origin")
+               .set_local_name(_("Origin"))
        );
 
        ret.push_back(ParamDesc("gradient")
@@ -456,6 +462,11 @@ Plant::get_param_vocab()const
                .set_description(_("Drag slows the growth"))
        );
 
+       ret.push_back(ParamDesc("use_width")
+               .set_local_name(_("Use Width"))
+               .set_description(_("Scale the velocity by the bline's width"))
+       );
+
        return ret;
 }
 
@@ -481,8 +492,8 @@ Plant::accelerated_render(Context context,Surface *surface,int quality, const Re
        dest_surface.set_wh(surface->get_w(),surface->get_h());
        dest_surface.clear();
 
-       const Point     tl(renddesc.get_tl()-offset);
-       const Point br(renddesc.get_br()-offset);
+       const Point     tl(renddesc.get_tl()-origin);
+       const Point br(renddesc.get_br()-origin);
 
        const int       w(renddesc.get_w());
        const int       h(renddesc.get_h());