splits=5;
drag=0.1;
size=0.015;
+ needs_sync_=true;
sync();
size_as_alpha=false;
}
synfig::Real sin_v=synfig::Angle::cos(split_angle).get();
synfig::Real cos_v=synfig::Angle::sin(split_angle).get();
- synfig::Vector velocity1(vel[0]*sin_v-vel[1]*cos_v+random_factor*random(2,30+n+depth,t*splits,0.0f,0.0f),vel[0]*cos_v+vel[1]*sin_v+random_factor*random(2,32+n+depth,t*splits,0.0f,0.0f));
- synfig::Vector velocity2(vel[0]*sin_v+vel[1]*cos_v+random_factor*random(2,31+n+depth,t*splits,0.0f,0.0f),-vel[0]*cos_v+vel[1]*sin_v+random_factor*random(2,33+n+depth,t*splits,0.0f,0.0f));
+ synfig::Vector velocity1(vel[0]*sin_v - vel[1]*cos_v + random_factor*random(Random::SMOOTH_COSINE, 30+n+depth, t*splits, 0.0f, 0.0f),
+ vel[0]*cos_v + vel[1]*sin_v + random_factor*random(Random::SMOOTH_COSINE, 32+n+depth, t*splits, 0.0f, 0.0f));
+ synfig::Vector velocity2(vel[0]*sin_v + vel[1]*cos_v + random_factor*random(Random::SMOOTH_COSINE, 31+n+depth, t*splits, 0.0f, 0.0f),
+ -vel[0]*cos_v + vel[1]*sin_v + random_factor*random(Random::SMOOTH_COSINE, 33+n+depth, t*splits, 0.0f, 0.0f));
Plant::branch(n,depth+1,t,stunt_growth,position,velocity1);
Plant::branch(n,depth+1,t,stunt_growth,position,velocity2);
bounding_rect=Rect::zero();
// Bline must have at least 2 points in it
- if(bline.size()<=2)
+ if(bline.size()<2)
return;
next=bline.begin();
void
Plant::sync()const
{
+ Mutex::Lock lock(mutex);
+ if (!needs_sync_) return;
particle_list.clear();
bounding_rect=Rect::zero();
// Bline must have at least 2 points in it
- if(bline.size()<=2)
+ if(bline.size()<2)
return;
std::vector<synfig::BLinePoint>::const_iterator iter,next;
bounding_rect.expand(point);
- Real stunt_growth(random(2,i,f+seg,0.0f,0.0f)/2.0+0.5);
+ Real stunt_growth(random(Random::SMOOTH_COSINE,i,f+seg,0.0f,0.0f)/2.0+0.5);
stunt_growth*=stunt_growth;
Vector branch_velocity(deriv(f).norm()*velocity);
- branch_velocity[0]+=random_factor*random(2,1,f*splits,0.0f,0.0f);
- branch_velocity[1]+=random_factor*random(2,2,f*splits,0.0f,0.0f);
+ 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);
if(i%b==0)
branch(
std::vector<Particle>::reverse_iterator iter;
const float size_factor(1);
- float radius(size_factor*size*sqrt(1.0f/(abs(pw)*abs(ph))));
+ float radius(size_factor*size*sqrt(1.0f/(abs(pw)*abs(ph)))), temp_radius;
if(radius>1.0f)
{
int x1,y1,x2,y2;
for(iter=particle_list.rbegin();iter!=particle_list.rend();++iter)
{
- float radius(radius);
+ temp_radius = radius;
+ float radius(temp_radius);
Color color(iter->color);
if(size_as_alpha)
{
float a,b,c,d;
for(iter=particle_list.rbegin();iter!=particle_list.rend();++iter)
{
- float radius(radius);
+ temp_radius = radius;
+ float radius(temp_radius);
Color color(iter->color);
if(size_as_alpha)
{