Author: Carlos Lopez <[email protected]>
Date: Sat Aug 13 18:25:19 2011 +0200
Remember the start and end tips of the dash widthpoints that are removed
because they are out from [0, 1] and restore them later
---
.../src/modules/mod_geometry/advanced_outline.cpp | 39 ++++++++++++++++----
1 files changed, 32 insertions(+), 7 deletions(-)
diff --git a/synfig-core/src/modules/mod_geometry/advanced_outline.cpp
b/synfig-core/src/modules/mod_geometry/advanced_outline.cpp
index 518efc3..3f107ae 100644
--- a/synfig-core/src/modules/mod_geometry/advanced_outline.cpp
+++ b/synfig-core/src/modules/mod_geometry/advanced_outline.cpp
@@ -147,6 +147,7 @@ Advanced_Outline::sync()
bool homogeneous(homogeneous_);
bool dash_enabled(dash_enabled_);
Real dash_offset(dash_offset_);
+ int dstart_tip, dend_tip;
const bool blineloop(bline_.get_loop());
int bline_size(bline.size());
int wplist_size(wplist.size());
@@ -158,6 +159,7 @@ Advanced_Outline::sync()
vector<WidthPoint>::iterator witer, wnext;
// those iterators will run only the copy of wplist.
vector<WidthPoint>::iterator cwiter, cwnext;
+ vector<WidthPoint>::iterator dwiter, dwnext;
// first tangent: used to remember the first tangent of the
first bezier
// used to draw sharp cusp on the last step.
Vector first_tangent;
@@ -311,6 +313,11 @@ Advanced_Outline::sync()
if(diter==dilist.end())
diter=dilist.begin();
};
+ synfig::info("---from dash offset to
1.0 ---");
+ dwiter=dwplist.begin();
+ for(;dwiter!=dwplist.end();dwiter++)
+ synfig::info("P:%f W:%f B:%d
A:%d", dwiter->get_position(), dwiter->get_width(),
dwiter->get_side_type_before(), dwiter->get_side_type_after());
+ synfig::info("------");
// Correct the two last widthpoints
triming its position to be <= 1.0
if(inserted)
{
@@ -330,10 +337,17 @@ Advanced_Outline::sync()
// restore the 'after'
widthpoint
{
synfig::info("restoring after");
+
dend_tip=after.get_side_type_after();
+
synfig::info("after type = %d", dend_tip);
dwplist.push_back(after);
}
}
}
+ synfig::info("---trim > 1.0 ---");
+ dwiter=dwplist.begin();
+ for(;dwiter!=dwplist.end();dwiter++)
+ synfig::info("P:%f W:%f B:%d
A:%d", dwiter->get_position(), dwiter->get_width(),
dwiter->get_side_type_before(), dwiter->get_side_type_after());
+ synfig::info("------");
inserted=0;
//
// Now insert the widhtpoints from Dash
Offset to 0.0
@@ -355,6 +369,11 @@ Advanced_Outline::sync()
if(rditer==dilist.rend())
rditer=dilist.rbegin();
};
+ synfig::info("---From Dash Offset to
0.0 ---");
+ dwiter=dwplist.begin();
+ for(;dwiter!=dwplist.end();dwiter++)
+ synfig::info("P:%f W:%f B:%d
A:%d", dwiter->get_position(), dwiter->get_width(),
dwiter->get_side_type_before(), dwiter->get_side_type_after());
+ synfig::info("------");
// Correct the two first widthpoints
triming its position to be >= 0.0
if(inserted)
{
@@ -374,13 +393,19 @@ Advanced_Outline::sync()
// restore the
'before' widthpoint
{
synfig::info("restoring before");
+
dstart_tip=before.get_side_type_before();
dwplist.insert(dwplist.begin(), before);
}
}
}
+ synfig::info("---trim < 0.0 ---");
+ dwiter=dwplist.begin();
+ for(;dwiter!=dwplist.end();dwiter++)
+ synfig::info("P:%f W:%f B:%d
A:%d", dwiter->get_position(), dwiter->get_width(),
dwiter->get_side_type_before(), dwiter->get_side_type_after());
+ synfig::info("------");
//// Debug info
synfig::info("------");
- vector<WidthPoint>::iterator
dwiter(dwplist.begin());
+ dwiter=dwplist.begin();
for(;dwiter!=dwplist.end();dwiter++)
synfig::info("P:%f W:%f B:%d
A:%d", dwiter->get_position(), dwiter->get_width(),
dwiter->get_side_type_before(), dwiter->get_side_type_after());
synfig::info("------");
@@ -427,7 +452,7 @@ Advanced_Outline::sync()
// lie in a dash empty space.
// first prepare the dash widthpoint
iterators
dwiter=dwplist.begin();
- vector<WidthPoint>::iterator
dwnext(dwiter+1);
+ dwnext=dwiter+1;
do
{
Real
dwiter_pos=dwiter->get_position();
@@ -506,7 +531,7 @@ Advanced_Outline::sync()
// If the first (last) widthpoint are interpolate before (after)
// and the last (first) widthpoint is not interpolate after
(before)
// and we are doing dashes, then make the first (last)
widthpoint to
- // have the layer start (end) tip type
+ // have the start (end) dash item's corresponding tip.
if(blineloop && dash_enabled)
{
synfig::info("blineloop and dash_enabled");
@@ -517,8 +542,8 @@ Advanced_Outline::sync()
&&
last->get_side_type_after() !=
WidthPoint::TYPE_INTERPOLATE)
{
- synfig::info("setting first to before=%d",
start_tip_);
- first->set_side_type_before(start_tip_);
+ synfig::info("setting first to before=%d",
dstart_tip);
+ first->set_side_type_before(dstart_tip);
}
synfig::info("last type after = %d",
last->get_side_type_after());
synfig::info("last position = %f",
last->get_position());
@@ -526,8 +551,8 @@ Advanced_Outline::sync()
&&
first->get_side_type_before() !=
WidthPoint::TYPE_INTERPOLATE)
{
- synfig::info("setting last to after=%d",
end_tip_);
- last->set_side_type_after(end_tip_);
+ synfig::info("setting last to after=%d",
dend_tip);
+ last->set_side_type_after(dend_tip);
}
}
------------------------------------------------------------------------------
FREE DOWNLOAD - uberSVN with Social Coding for Subversion.
Subversion made easy with a complete admin console. Easy
to use, easy to manage, easy to install, easy to extend.
Get a Free download of the new open ALM Subversion platform now.
http://p.sf.net/sfu/wandisco-dev2dev
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl