/*! \file valuedescset.cpp
** \brief Template File
**
-** $Id: valuedescset.cpp,v 1.1.1.1 2005/01/07 03:34:37 darco Exp $
+** $Id$
**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2007 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
ACTION_SET_CATEGORY(Action::ValueDescSet,Action::CATEGORY_VALUEDESC);
ACTION_SET_PRIORITY(Action::ValueDescSet,0);
ACTION_SET_VERSION(Action::ValueDescSet,"0.0");
-ACTION_SET_CVS_ID(Action::ValueDescSet,"$Id: valuedescset.cpp,v 1.1.1.1 2005/01/07 03:34:37 darco Exp $");
+ACTION_SET_CVS_ID(Action::ValueDescSet,"$Id$");
/* === G L O B A L S ======================================================= */
// our first tangent is being manipulated,
// then we also need to adjust the other
// tangent.
- if( value_desc.parent_is_value_node()
- && value_desc.get_parent_value_node()->get_type()==ValueBase::TYPE_BLINEPOINT
- && value_desc.get_index()==4
- && (*value_desc.get_parent_value_node())(time).get(BLinePoint()).get_split_tangent_flag()==false
- )
+ if( value_desc.parent_is_value_node() &&
+ value_desc.get_parent_value_node()->get_type()==ValueBase::TYPE_BLINEPOINT &&
+ (value_desc.get_index()==4 || value_desc.get_index()==5) &&
+ (*value_desc.get_parent_value_node())(time).get(BLinePoint()).get_split_tangent_flag()==false)
{
- DEBUGPOINT();
- ValueNode_Composite::Handle parent_value_node;
- parent_value_node=parent_value_node.cast_dynamic(value_desc.get_parent_value_node());
+ printf("a tangent got changed - #%d\n", value_desc.get_index()-3);
- assert(parent_value_node);
+ {
+ ValueNode_Composite::Handle parent_value_node;
+ parent_value_node=parent_value_node.cast_dynamic(value_desc.get_parent_value_node());
+ assert(parent_value_node);
- Action::Handle action(Action::create("value_desc_set"));
+ Vector t1((*parent_value_node->get_link("t1"))(time));
+ Vector t2((*parent_value_node->get_link("t2"))(time));
+ printf("current values are: t1(%.2f, %2.f) t2(%.2f, %.2f)\n", t1[0], t1[1], t2[0], t2[1]);
+ }
- if(!action)
- throw Error(_("Unable to find action value_desc_set (bug)"));
+ if (value_desc.get_index()==4) {
+ printf("copying change to tangent 2\n");
+ DEBUGPOINT();
+ ValueNode_Composite::Handle parent_value_node;
+ parent_value_node=parent_value_node.cast_dynamic(value_desc.get_parent_value_node());
- action->set_param("canvas",get_canvas());
- action->set_param("canvas_interface",get_canvas_interface());
- action->set_param("time",time);
- action->set_param("new_value",value);
- action->set_param("value_desc",ValueDesc(parent_value_node,5));
+ assert(parent_value_node);
- if(!action->is_ready())
- throw Error(Error::TYPE_NOTREADY);
+ Action::Handle action(Action::create("value_desc_set"));
- add_action(action);
+ if(!action)
+ throw Error(_("Unable to find action value_desc_set (bug)"));
+
+ action->set_param("canvas",get_canvas());
+ action->set_param("canvas_interface",get_canvas_interface());
+ action->set_param("time",time);
+ action->set_param("new_value",value);
+ action->set_param("value_desc",ValueDesc(parent_value_node,5));
+
+ if(!action->is_ready())
+ throw Error(Error::TYPE_NOTREADY);
+
+ add_action(action);
+ }
}
// If we are a reference value node, then
// If we are merging the tangents of a BLinePoint,
// we must also set the second tangent for things
// to interpolate properly
- if( value_desc.parent_is_value_node()
- && value_desc.get_parent_value_node()->get_type()==ValueBase::TYPE_BLINEPOINT
- && value_desc.get_index()==3
-// && value.get(bool())==false // Actually, we want to do this any time the split flag is tweaked with
- )
+ if (value_desc.parent_is_value_node() &&
+ value_desc.get_parent_value_node()->get_type()==ValueBase::TYPE_BLINEPOINT &&
+ value_desc.get_index()==3)
{
ValueNode_Composite::Handle parent_value_node;
parent_value_node=parent_value_node.cast_dynamic(value_desc.get_parent_value_node());
assert(parent_value_node);
- Action::Handle action(Action::create("value_desc_set"));
+ // are we splitting or merging the tangents?
+ if (value.get(bool()))
+ {
+ // we are splitting tangents
- if(!action)
- throw Error(_("Unable to find action value_desc_set (bug)"));
+ Action::Handle action(Action::create("value_desc_set"));
- action->set_param("canvas",get_canvas());
- action->set_param("canvas_interface",get_canvas_interface());
- action->set_param("time",time);
- action->set_param("new_value",(*parent_value_node->get_link(4))(time));
- action->set_param("value_desc",ValueDesc(parent_value_node,5));
+ if(!action)
+ throw Error(_("Unable to find action value_desc_set (bug)"));
- if(!action->is_ready())
- throw Error(Error::TYPE_NOTREADY);
+ action->set_param("canvas",get_canvas());
+ action->set_param("canvas_interface",get_canvas_interface());
+ action->set_param("time",time);
+ action->set_param("new_value",(*parent_value_node->get_link(4))(time));
+ action->set_param("value_desc",ValueDesc(parent_value_node,5));
+
+ if(!action->is_ready())
+ throw Error(Error::TYPE_NOTREADY);
+
+ add_action(action);
+ }
+ else
+ {
+ // we are merging tangents
+
+ // the merged tangent should be the average of the 2 tangents we're merging
+ ValueBase average(((Vector)((*parent_value_node->get_link("t1"))(time)) +
+ (Vector)((*parent_value_node->get_link("t2"))(time))) / 2);
+
+ {
+ Action::Handle action(Action::create("value_desc_set"));
+
+ if(!action)
+ throw Error(_("Unable to find action value_desc_set (bug)"));
+
+ action->set_param("canvas",get_canvas());
+ action->set_param("canvas_interface",get_canvas_interface());
+ action->set_param("time",time);
+ action->set_param("new_value",average);
+ action->set_param("value_desc",ValueDesc(parent_value_node,4));
+
+ if(!action->is_ready())
+ throw Error(Error::TYPE_NOTREADY);
+
+ add_action(action);
+ }
+
+ {
+ Action::Handle action(Action::create("value_desc_set"));
+
+ if(!action)
+ throw Error(_("Unable to find action value_desc_set (bug)"));
+
+ action->set_param("canvas",get_canvas());
+ action->set_param("canvas_interface",get_canvas_interface());
+ action->set_param("time",time);
+ action->set_param("new_value",average);
+ action->set_param("value_desc",ValueDesc(parent_value_node,5));
+
+ if(!action->is_ready())
+ throw Error(Error::TYPE_NOTREADY);
+
+ add_action(action);
+ }
+ }
- add_action(action);
}
/* DEBUGPOINT();