X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fmodules%2Fmod_particle%2Fplant.cpp;h=47b13a3e61a5c40d5e0bbc07383dfa5234ba2a63;hb=284f2de6f33ed153630ffda94653a9eea093095e;hp=1a89f1f446d41a49de12b382079ca7bd8d36d8f7;hpb=0395514261f9ab95377771b808a733f973c8a562;p=synfig.git diff --git a/synfig-core/trunk/src/modules/mod_particle/plant.cpp b/synfig-core/trunk/src/modules/mod_particle/plant.cpp index 1a89f1f..47b13a3 100644 --- a/synfig-core/trunk/src/modules/mod_particle/plant.cpp +++ b/synfig-core/trunk/src/modules/mod_particle/plant.cpp @@ -6,7 +6,7 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley -** Copyright (c) 2007 Chris Moore +** Copyright (c) 2007, 2008 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -76,6 +76,7 @@ SYNFIG_LAYER_SET_CVS_ID(Plant,"$Id$"); Plant::Plant(): + origin(0,0), split_angle(Angle::deg(10)), gravity(0,-0.1), velocity(0.3), @@ -240,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); @@ -283,6 +287,7 @@ Plant::set_param(const String & param, const ValueBase &value) needs_sync_=true; return true; } + IMPORT(origin); IMPORT_PLUS(split_angle,needs_sync_=true); IMPORT_PLUS(gravity,needs_sync_=true); IMPORT_PLUS(gradient,needs_sync_=true); @@ -308,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); } @@ -342,6 +350,7 @@ Plant::get_param(const String& param)const if(param=="seed") return random.get_seed(); EXPORT(bline); + EXPORT(origin); EXPORT(split_angle); EXPORT(gravity); EXPORT(velocity); @@ -353,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(); @@ -373,8 +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_scalar("width") + .set_origin("origin") + .set_hint("width") + ); + + ret.push_back(ParamDesc("origin") + .set_local_name(_("Origin")) ); ret.push_back(ParamDesc("gradient") @@ -449,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; } @@ -474,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()); - const Point br(renddesc.get_br()); + 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());