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

Reply via email to