X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fvaluenode_scale.cpp;h=b272d7d6b994418dc91c6a8746830e1a7b30b3c6;hb=fb6a93cf220f019cc2128e3b076f9094aa7b463f;hp=25b382250d64c303ea3d860f9048fae55c3fd9d6;hpb=9ff670a60001e455fa506f6b6292300e8d1cec8f;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/valuenode_scale.cpp b/synfig-core/trunk/src/synfig/valuenode_scale.cpp index 25b3822..b272d7d 100644 --- a/synfig-core/trunk/src/synfig/valuenode_scale.cpp +++ b/synfig-core/trunk/src/synfig/valuenode_scale.cpp @@ -142,20 +142,49 @@ synfig::ValueNode_Scale::operator()(Time t)const } synfig::ValueBase -synfig::ValueNode_Scale::operator()(Time t, const synfig::Point &target_value)const +synfig::ValueNode_Scale::get_inverse(Time t, const synfig::Vector &target_value) const { Real scalar_value((*scalar)(t).get(Real())); if(scalar_value==0) - return (*value_node)(t).get(value_node->get_type()); - switch (get_type()) - case ValueBase::TYPE_REAL: - return target_value.mag() / scalar_value; - case ValueBase::TYPE_ANGLE: - return Angle::tan(target_value[1] / scalar_value ,target_value[0] / scalar_value); - default: - return target_value / scalar_value; + throw runtime_error(strprintf("ValueNode_Scale: %s",_("Attempting to get the inverse of a non invertible Valuenode"))); + else + { + switch (get_type()) + { + case ValueBase::TYPE_REAL: + return target_value.mag() / scalar_value; + case ValueBase::TYPE_ANGLE: + return Angle::tan(target_value[1] / scalar_value ,target_value[0] / scalar_value); + default: + return target_value / scalar_value; + } + } + return ValueBase(); } +synfig::ValueBase +synfig::ValueNode_Scale::get_inverse(Time t, const synfig::Angle &target_value) const +{ + Real scalar_value((*scalar)(t).get(Real())); + if(scalar_value==0) + throw runtime_error(strprintf("ValueNode_Scale: %s",_("Attempting to get the inverse of a non invertible Valuenode"))); + else + { + switch (get_type()) + { + default: + return (*value_node)(t).get(Angle()) + target_value / scalar_value; + } + } + return ValueBase(); +} + +bool +synfig::ValueNode_Scale::is_invertible(Time t) const +{ + Real scalar_value((*scalar)(t).get(Real())); + return (!scalar_value==0); +} bool ValueNode_Scale::set_link_vfunc(int i,ValueNode::Handle value)