Module: synfig/synfig Branch: genete_width_outline Commit: afe05f30c9b4819a90b03b1112ec2df7657656dd URL: http://synfig.git.sourceforge.net/git/gitweb.cgi?p=synfig/synfig;a=commit;h=afe05f30c9b4819a90b03b1112ec2df7657656dd
Author: Carlos Lopez <genet...@gmail.com> Date: Mon Jan 17 21:42:01 2011 +0100 Initial draft to handle bline parameter connection at advanced outline layer --- .../src/modules/mod_geometry/advanced_outline.cpp | 60 ++++++++++++++++++++ .../src/modules/mod_geometry/advanced_outline.h | 5 ++ 2 files changed, 65 insertions(+), 0 deletions(-) diff --git a/synfig-core/src/modules/mod_geometry/advanced_outline.cpp b/synfig-core/src/modules/mod_geometry/advanced_outline.cpp index 3044ce9..9734987 100644 --- a/synfig-core/src/modules/mod_geometry/advanced_outline.cpp +++ b/synfig-core/src/modules/mod_geometry/advanced_outline.cpp @@ -46,6 +46,9 @@ #include <vector> #include <synfig/valuenode_bline.h> +#include <synfig/valuenode_wplist.h> +#include <synfig/valuenode_composite.h> +#include <synfig/valuenode_blinecalcvertex.h> #endif @@ -401,3 +404,60 @@ Advanced_Outline::get_param_vocab()const ); return ret; } + +bool +Advanced_Outline::connect_dynamic_param(const String& param, etl::loose_handle<ValueNode> x) +{ + synfig::info("attempting to connect %s", param.c_str()); + if(param=="bline") + if(!connect_bline_to_wplist(x)) + synfig::warning("Advanced Outline: WPList doesn't accept new bline"); + return Layer::connect_dynamic_param(param, x); +} + +bool +Advanced_Outline::connect_bline_to_wplist(etl::loose_handle<ValueNode> x) +{ + if(x->get_type() != ValueBase::TYPE_LIST) + { + synfig::info("Not a list"); + return false; + } + if(ValueNode_DynamicList::Handle::cast_static(x)->get_contained_type() != ValueBase::TYPE_BLINEPOINT) + { + synfig::info("Not blinepoints!"); + return false; + } + ValueNode::LooseHandle vnode; + DynamicParamList::const_iterator iter(dynamic_param_list().find("wplist")); + if(iter==dynamic_param_list().end()) + { + synfig::warning("WPList doesn't exists yet"); + return false; + } + ValueNode_WPList::LooseHandle wplist(ValueNode_WPList::Handle::cast_dynamic(iter->second)); + if(!wplist) + { + synfig::info("WPList is not ready: NULL"); + return false; + } + int i; + if(!wplist->link_count()) + { + synfig::info("WPList::link_count()=0"); + return false; + } + for(i=0;i<wplist->link_count();i++) + { + ValueNode_Composite::LooseHandle compo(ValueNode_Composite::Handle::cast_dynamic(wplist->get_link(i))); + ValueNode::LooseHandle hidden_vertex(compo->get_link("hidden_vertex")); + if(!hidden_vertex) + { + synfig::warning("Unable to retrieve WPList::hidden vertex Handle!"); + return false; + } + if(!ValueNode_BLineCalcVertex::Handle::cast_dynamic(hidden_vertex)) + synfig::info("hidden vertex reached, not converted"); + } + return true; +} diff --git a/synfig-core/src/modules/mod_geometry/advanced_outline.h b/synfig-core/src/modules/mod_geometry/advanced_outline.h index 8b7970b..0ada011 100644 --- a/synfig-core/src/modules/mod_geometry/advanced_outline.h +++ b/synfig-core/src/modules/mod_geometry/advanced_outline.h @@ -73,7 +73,12 @@ public: virtual void set_time(Context context, Time time, Vector pos)const; virtual bool set_version(const String &ver){if(ver=="0.1")old_version_=true; return true;} virtual void reset_version(){old_version_=false;} + //! Connects the parameter to another Value Node. Implementation for this layer + virtual bool connect_dynamic_param(const String& param, etl::loose_handle<ValueNode> x ); +private: + + bool connect_bline_to_wplist(etl::loose_handle<ValueNode> x); }; /* === E N D =============================================================== */ ------------------------------------------------------------------------------ Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)! Finally, a world-class log management solution at an even better price-free! Download using promo code Free_Logger_4_Dev2Dev. Offer expires February 28th, so secure your free ArcSight Logger TODAY! http://p.sf.net/sfu/arcsight-sfd2d _______________________________________________ Synfig-devl mailing list Synfig-devl@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/synfig-devl