X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fvaluenode_blinecalctangent.cpp;h=671ce59d071c84625cb310eedfb0b354bbebd5ec;hb=756c0d29ac1742f231e6615f9a577e574e35a4af;hp=778fb429ad43a70c61b911792b2c90f521311a1c;hpb=1e9792b864c8565ac9d05796eb91fb03fb09a64d;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/valuenode_blinecalctangent.cpp b/synfig-core/trunk/src/synfig/valuenode_blinecalctangent.cpp index 778fb42..671ce59 100644 --- a/synfig-core/trunk/src/synfig/valuenode_blinecalctangent.cpp +++ b/synfig-core/trunk/src/synfig/valuenode_blinecalctangent.cpp @@ -1,11 +1,12 @@ /* === S Y N F I G ========================================================= */ /*! \file valuenode_blinecalctangent.cpp -** \brief Template File +** \brief Implementation of the "BLine Tangent" valuenode conversion. ** ** $Id$ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007, 2008 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 @@ -57,8 +58,8 @@ using namespace synfig; ValueNode_BLineCalcTangent::ValueNode_BLineCalcTangent(const ValueBase::Type &x): LinkableValueNode(x) { - if(x!=ValueBase::TYPE_VECTOR) - throw Exception::BadType(ValueBase::type_name(x)); + if(x!=ValueBase::TYPE_ANGLE && x!=ValueBase::TYPE_VECTOR) + throw Exception::BadType(ValueBase::type_local_name(x)); ValueNode_BLine* value_node(new ValueNode_BLine()); set_link("bline",value_node); @@ -69,7 +70,7 @@ ValueNode_BLineCalcTangent::ValueNode_BLineCalcTangent(const ValueBase::Type &x) LinkableValueNode* ValueNode_BLineCalcTangent::create_new()const { - return new ValueNode_BLineCalcTangent(ValueBase::TYPE_VECTOR); + return new ValueNode_BLineCalcTangent(get_type()); } ValueNode_BLineCalcTangent* @@ -95,7 +96,13 @@ ValueNode_BLineCalcTangent::operator()(Time t)const BLinePoint blinepoint0, blinepoint1; if (!looped) size--; - if (size < 1) return Vector(); + if (size < 1) + switch (get_type()) + { + case ValueBase::TYPE_ANGLE: return Angle(); + case ValueBase::TYPE_VECTOR: return Vector(); + default: assert(0); return ValueBase(); + } if (loop) { amount = amount - int(amount); @@ -121,9 +128,19 @@ ValueNode_BLineCalcTangent::operator()(Time t)const etl::derivative< etl::hermite > deriv(curve); #ifdef ETL_FIXED_DERIVATIVE - return deriv(amount-from_vertex)*(0.5); + switch (get_type()) + { + case ValueBase::TYPE_ANGLE: return (deriv(amount-from_vertex)*(0.5)).angle(); + case ValueBase::TYPE_VECTOR: return deriv(amount-from_vertex)*(0.5); + default: assert(0); return ValueBase(); + } #else - return deriv(amount-from_vertex)*(-0.5); + switch (get_type()) + { + case ValueBase::TYPE_ANGLE: return (deriv(amount-from_vertex)*(-0.5)).angle(); + case ValueBase::TYPE_VECTOR: return deriv(amount-from_vertex)*(-0.5); + default: assert(0); return ValueBase(); + } #endif } @@ -140,23 +157,15 @@ ValueNode_BLineCalcTangent::get_local_name()const } bool -ValueNode_BLineCalcTangent::set_link_vfunc(int i,ValueNode::Handle x) +ValueNode_BLineCalcTangent::set_link_vfunc(int i,ValueNode::Handle value) { assert(i>=0 && i=0 && i=0 && i=0 && i