Module: synfig/synfig Branch: genete_width_outline Commit: fe8580bd12af6345a473625fb71f669c1d69c5f0 URL: http://synfig.git.sourceforge.net/git/gitweb.cgi?p=synfig/synfig;a=commit;h=fe8580bd12af6345a473625fb71f669c1d69c5f0
Author: Carlos Lopez <genet...@gmail.com> Date: Sat Feb 5 18:12:57 2011 +0100 Collect width points between boundaries of each bezier and sort them --- .../src/modules/mod_geometry/advanced_outline.cpp | 33 ++++++++++++++++++-- 1 files changed, 30 insertions(+), 3 deletions(-) diff --git a/synfig-core/src/modules/mod_geometry/advanced_outline.cpp b/synfig-core/src/modules/mod_geometry/advanced_outline.cpp index 01f02e9..b19e082 100644 --- a/synfig-core/src/modules/mod_geometry/advanced_outline.cpp +++ b/synfig-core/src/modules/mod_geometry/advanced_outline.cpp @@ -128,12 +128,17 @@ Advanced_Outline::sync() try { const bool blineloop(bline_.get_loop()); - ValueNode_BLine::Handle bline_valuenode; const vector<synfig::BLinePoint> bline(bline_.get_list().begin(),bline_.get_list().end()); - const vector<synfig::WidthPoint> wplist(wplist_.get_list().begin(), wplist_.get_list().end()); + int bline_size(bline.size()); + vector<synfig::WidthPoint> wplist(wplist_.get_list().begin(), wplist_.get_list().end()); vector<BLinePoint>::const_iterator biter,bnext(bline.begin()); + vector<WidthPoint>::iterator witer, wnext; + Real bezier_size = 1.0/(blineloop?bline_size:(bline_size==1?1.0:(bline_size-1))); + Real biter_pos(0.0), bnext_pos(bezier_size); const vector<BLinePoint>::const_iterator bend(bline.end()); vector<Point> side_a, side_b; + // If we are looped, the first bezier to handle starts form the + // last blinepoint to the first one if(blineloop) biter=--bline.end(); else @@ -175,7 +180,27 @@ Advanced_Outline::sync() iter_t, next_t ); - // Calculate the iter and next positions comparable with the + vector<synfig::WidthPoint> bwpoints; + vector<synfig::WidthPoint>::iterator bwpi; + // Collect the widthpoints that are inside this bezier + synfig::info("Collecting wpoints of %d wpoints", wplist.size()); + if(wplist.size()) + { + for(witer=wplist.begin(); witer!=wplist.end();witer++) + { + Real witer_pos(witer->get_norm_position()); + if(witer_pos < bnext_pos && witer_pos > biter_pos) + bwpoints.push_back(*witer); + } + } + synfig::info("=====biter pos %f", biter_pos); + sort(bwpoints.begin(), bwpoints.end()); + if(bwpoints.size()) + { + for(bwpi=bwpoints.begin();bwpi!=bwpoints.end();bwpi++) + synfig::info("Wpoint pos: %f", bwpi->get_position()); + } + synfig::info("=====bnext pos %f", bnext_pos); // width points const float biter_w((biter->get_width()*width_)*0.5f+expand_), @@ -245,6 +270,8 @@ Advanced_Outline::sync() side_a.push_back(curve(1.0)+last_tangent.perp().norm()*bnext_w); side_b.push_back(curve(1.0)-last_tangent.perp().norm()*bnext_w); first=false; + biter_pos = bnext_pos; + bnext_pos+=bezier_size; } if(blineloop) { ------------------------------------------------------------------------------ The modern datacenter depends on network connectivity to access resources and provide services. The best practices for maximizing a physical server's connectivity to a physical network are well understood - see how these rules translate into the virtual world? http://p.sf.net/sfu/oracle-sfdevnlfb _______________________________________________ Synfig-devl mailing list Synfig-devl@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/synfig-devl