projects
/
synfig.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update time-shifted waypoint position dynamically.
[synfig.git]
/
synfig-core
/
trunk
/
src
/
modules
/
mod_particle
/
plant.cpp
diff --git
a/synfig-core/trunk/src/modules/mod_particle/plant.cpp
b/synfig-core/trunk/src/modules/mod_particle/plant.cpp
index
68f7141
..
4f10df9
100644
(file)
--- a/
synfig-core/trunk/src/modules/mod_particle/plant.cpp
+++ b/
synfig-core/trunk/src/modules/mod_particle/plant.cpp
@@
-6,6
+6,7
@@
**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2007 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
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
@@
-216,6
+217,7
@@
Plant::sync()const
Real f;
int i=0, branch_count = 0, steps = round_to_int(1.0/step);
Real f;
int i=0, branch_count = 0, steps = round_to_int(1.0/step);
+ if (steps < 1) steps = 1;
for(f=0.0;f<1.0;f+=step,i++)
{
Point point(curve(f));
for(f=0.0;f<1.0;f+=step,i++)
{
Point point(curve(f));
@@
-272,7
+274,15
@@
Plant::set_param(const String & param, const ValueBase &value)
IMPORT_PLUS(gradient,needs_sync_=true);
IMPORT_PLUS(velocity,needs_sync_=true);
IMPORT_PLUS(perp_velocity,needs_sync_=true);
IMPORT_PLUS(gradient,needs_sync_=true);
IMPORT_PLUS(velocity,needs_sync_=true);
IMPORT_PLUS(perp_velocity,needs_sync_=true);
- IMPORT_PLUS(step,needs_sync_=true);
+ IMPORT_PLUS(step,{
+ needs_sync_ = true;
+ if (step <= 0)
+ step=0.01; // user is probably clueless - give a good default
+ else if (step < 0.00001)
+ step=0.00001; // 100K should be enough for anyone
+ else if (step > 1)
+ step=1;
+ });
IMPORT_PLUS(splits,needs_sync_=true);
IMPORT_PLUS(sprouts,needs_sync_=true);
IMPORT_PLUS(random_factor,needs_sync_=true);
IMPORT_PLUS(splits,needs_sync_=true);
IMPORT_PLUS(sprouts,needs_sync_=true);
IMPORT_PLUS(random_factor,needs_sync_=true);
@@
-443,6
+453,7
@@
Plant::accelerated_render(Context context,Surface *surface,int quality, const Re
sync();
std::vector<Particle>::reverse_iterator iter;
sync();
std::vector<Particle>::reverse_iterator iter;
+
float radius(size*sqrt(1.0f/(abs(pw)*abs(ph))));
int x1,y1,x2,y2;
float radius(size*sqrt(1.0f/(abs(pw)*abs(ph))));
int x1,y1,x2,y2;
@@
-456,6
+467,11
@@
Plant::accelerated_render(Context context,Surface *surface,int quality, const Re
color.set_a(1);
}
color.set_a(1);
}
+ // previously, radius was multiplied by sqrt(step)*12 only if
+ // the radius came out at less than 1 (pixel):
+ // if (radius<=1.0f) radius*=sqrt(step)*12.0f;
+ // seems a little arbitrary - does it help?
+
// calculate the box that this particle will be drawn as
float x1f=(iter->point[0]-tl[0])/pw-(scaled_radius*0.5);
float x2f=(iter->point[0]-tl[0])/pw+(scaled_radius*0.5);
// calculate the box that this particle will be drawn as
float x1f=(iter->point[0]-tl[0])/pw-(scaled_radius*0.5);
float x2f=(iter->point[0]-tl[0])/pw+(scaled_radius*0.5);