|
Carlos Lopez |
a09598 |
/* === S Y N F I G ========================================================= */
|
|
Carlos Lopez |
a09598 |
/*! \file timepointcollect.cpp
|
|
Carlos Lopez |
a09598 |
** \brief Template File
|
|
Carlos Lopez |
a09598 |
**
|
|
Carlos Lopez |
a09598 |
** $Id$
|
|
Carlos Lopez |
a09598 |
**
|
|
Carlos Lopez |
a09598 |
** \legal
|
|
Carlos Lopez |
a09598 |
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
|
|
Carlos Lopez |
a09598 |
** Copyright (c) 2007 Chris Moore
|
|
Carlos Lopez |
a09598 |
**
|
|
Carlos Lopez |
a09598 |
** This package is free software; you can redistribute it and/or
|
|
Carlos Lopez |
a09598 |
** modify it under the terms of the GNU General Public License as
|
|
Carlos Lopez |
a09598 |
** published by the Free Software Foundation; either version 2 of
|
|
Carlos Lopez |
a09598 |
** the License, or (at your option) any later version.
|
|
Carlos Lopez |
a09598 |
**
|
|
Carlos Lopez |
a09598 |
** This package is distributed in the hope that it will be useful,
|
|
Carlos Lopez |
a09598 |
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Carlos Lopez |
a09598 |
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Carlos Lopez |
a09598 |
** General Public License for more details.
|
|
Carlos Lopez |
a09598 |
** \endlegal
|
|
Carlos Lopez |
a09598 |
*/
|
|
Carlos Lopez |
a09598 |
/* ========================================================================= */
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
/* === H E A D E R S ======================================================= */
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
#ifdef USING_PCH
|
|
Carlos Lopez |
a09598 |
# include "pch.h"
|
|
Carlos Lopez |
a09598 |
#else
|
|
Carlos Lopez |
a09598 |
#ifdef HAVE_CONFIG_H
|
|
Carlos Lopez |
a09598 |
# include <config.h></config.h>
|
|
Carlos Lopez |
a09598 |
#endif
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
#include "timepointcollect.h"
|
|
Diego Barrios Romero |
dcc14d |
#include <synfig valuenode_animated.h="" valuenodes=""></synfig>
|
|
Diego Barrios Romero |
dcc14d |
#include <synfig layer_pastecanvas.h="" layers=""></synfig>
|
|
Carlos Lopez |
a09598 |
#include "layer.h"
|
|
Carlos Lopez |
a09598 |
#include "canvas.h"
|
|
Carlos Lopez |
a09598 |
#include "value.h"
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
#endif
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
/* === U S I N G =========================================================== */
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
using namespace std;
|
|
Carlos Lopez |
a09598 |
using namespace etl;
|
|
Carlos Lopez |
a09598 |
using namespace synfig;
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
/* === M A C R O S ========================================================= */
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
/* === G L O B A L S ======================================================= */
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
/* === P R O C E D U R E S ================================================= */
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
/* === M E T H O D S ======================================================= */
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
//! \writeme
|
|
Carlos Lopez |
a09598 |
int
|
|
Carlos Lopez |
a09598 |
synfig::waypoint_collect(set<waypoint, std::less<uniqueid=""> > &waypoint_set,</waypoint,>
|
|
Carlos Lopez |
a09598 |
const Time &time,
|
|
Carlos Lopez |
a09598 |
const etl::handle<node> &node)</node>
|
|
Carlos Lopez |
a09598 |
{
|
|
Carlos Lopez |
a09598 |
const TimePointSet& timepoint_set(node->get_times());
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
// Check to see if there is anything in here at the given time
|
|
Carlos Lopez |
a09598 |
if(timepoint_set.find(time)==timepoint_set.end())
|
|
Carlos Lopez |
a09598 |
return 0;
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
// Check if we are a linkable value node
|
|
Carlos Lopez |
a09598 |
LinkableValueNode::Handle linkable_value_node;
|
|
Carlos Lopez |
a09598 |
linkable_value_node=linkable_value_node.cast_dynamic(node);
|
|
Carlos Lopez |
a09598 |
if(linkable_value_node)
|
|
Carlos Lopez |
a09598 |
{
|
|
Carlos Lopez |
a09598 |
const int link_count(linkable_value_node->link_count());
|
|
Carlos Lopez |
a09598 |
int i,ret(0);
|
|
Carlos Lopez |
a09598 |
for(i=0;i
|
|
Carlos Lopez |
a09598 |
ret+=waypoint_collect(waypoint_set,time,linkable_value_node->get_link(i).get());
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
return ret;
|
|
Carlos Lopez |
a09598 |
}
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
// Check if we are a layer
|
|
Carlos Lopez |
a09598 |
Layer::Handle layer;
|
|
Carlos Lopez |
a09598 |
layer=layer.cast_dynamic(node);
|
|
Carlos Lopez |
a09598 |
if(layer)
|
|
Carlos Lopez |
a09598 |
{
|
|
Carlos Lopez |
a09598 |
const Layer::DynamicParamList& dyn_param_list(layer->dynamic_param_list());
|
|
Carlos Lopez |
a09598 |
Layer::DynamicParamList::const_iterator iter;
|
|
Carlos Lopez |
a09598 |
int ret(0);
|
|
Carlos Lopez |
a09598 |
for(iter=dyn_param_list.begin();iter!=dyn_param_list.end();++iter)
|
|
Carlos Lopez |
a09598 |
ret+=waypoint_collect(waypoint_set,time,iter->second);
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
ValueBase canvas_value(layer->get_param("canvas"));
|
|
|
d89783 |
if(canvas_value.get_type()==type_canvas)
|
|
Carlos Lopez |
a09598 |
{
|
|
Carlos Lopez |
a09598 |
etl::handle<layer_pastecanvas> p = etl::handle<layer_pastecanvas>::cast_dynamic(layer);</layer_pastecanvas></layer_pastecanvas>
|
|
Carlos Lopez |
a09598 |
if (p)
|
|
Carlos Lopez |
a09598 |
ret+=waypoint_collect(waypoint_set, time + p->get_time_offset(),
|
|
Carlos Lopez |
a09598 |
Canvas::Handle(canvas_value.get(Canvas::Handle())));
|
|
Carlos Lopez |
a09598 |
else
|
|
Carlos Lopez |
a09598 |
ret+=waypoint_collect(waypoint_set, time,
|
|
Carlos Lopez |
a09598 |
Canvas::Handle(canvas_value.get(Canvas::Handle())));
|
|
Carlos Lopez |
a09598 |
}
|
|
Carlos Lopez |
a09598 |
return ret;
|
|
Carlos Lopez |
a09598 |
}
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
// Check if we are a canvas
|
|
Carlos Lopez |
a09598 |
Canvas::Handle canvas;
|
|
Carlos Lopez |
a09598 |
canvas=canvas.cast_dynamic(node);
|
|
Carlos Lopez |
a09598 |
if(canvas)
|
|
Carlos Lopez |
a09598 |
{
|
|
Carlos Lopez |
a09598 |
Canvas::const_iterator iter;
|
|
Carlos Lopez |
a09598 |
int ret(0);
|
|
Carlos Lopez |
a09598 |
for(iter=canvas->begin();iter!=canvas->end();++iter)
|
|
Carlos Lopez |
a09598 |
ret+=waypoint_collect(waypoint_set,time,*iter);
|
|
Carlos Lopez |
a09598 |
return ret;
|
|
Carlos Lopez |
a09598 |
}
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
// Check if we are an animated value node
|
|
Carlos Lopez |
a09598 |
ValueNode_Animated::Handle value_node_animated;
|
|
Carlos Lopez |
a09598 |
value_node_animated=value_node_animated.cast_dynamic(node);
|
|
Carlos Lopez |
a09598 |
if(value_node_animated)
|
|
Carlos Lopez |
a09598 |
{
|
|
Carlos Lopez |
a09598 |
try{
|
|
Carlos Lopez |
a09598 |
Waypoint waypoint=*value_node_animated->find(time);
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
// If it is already in the waypoint set, then
|
|
Carlos Lopez |
a09598 |
// don't bother adding it again
|
|
Carlos Lopez |
a09598 |
if(waypoint_set.find(waypoint)!=waypoint_set.end())
|
|
Carlos Lopez |
a09598 |
return 0;
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
waypoint_set.insert(waypoint);
|
|
Carlos Lopez |
a09598 |
return 1;
|
|
Carlos Lopez |
a09598 |
}catch(...)
|
|
Carlos Lopez |
a09598 |
{
|
|
Carlos Lopez |
a09598 |
return 0;
|
|
Carlos Lopez |
a09598 |
}
|
|
Carlos Lopez |
a09598 |
}
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
return 0;
|
|
Carlos Lopez |
a09598 |
}
|
|
Carlos Lopez |
a09598 |
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
bool
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
synfig::waypoint_search(Waypoint& waypoint, const UniqueID &uid, const etl::handle<node> &node)</node>
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
{
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
// Check if we are a linkable value node
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
LinkableValueNode::Handle linkable_value_node;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
linkable_value_node=linkable_value_node.cast_dynamic(node);
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
if(linkable_value_node)
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
{
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
const int link_count(linkable_value_node->link_count());
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
for(int i=0; i < link_count; i++) {
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
bool ret = waypoint_search(waypoint, uid, linkable_value_node->get_link(i).get());
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
if (ret)
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
return true;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
}
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
return false;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
}
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
// Check if we are a layer
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
Layer::Handle layer;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
layer=layer.cast_dynamic(node);
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
if(layer)
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
{
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
const Layer::DynamicParamList& dyn_param_list(layer->dynamic_param_list());
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
for(Layer::DynamicParamList::const_iterator iter=dyn_param_list.begin(); iter!=dyn_param_list.end(); ++iter) {
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
bool ret = waypoint_search(waypoint, uid, iter->second);
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
if (ret)
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
return true;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
}
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
ValueBase canvas_value(layer->get_param("canvas"));
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
if(canvas_value.get_type()==type_canvas)
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
{
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
bool ret = waypoint_search(waypoint, uid,
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
Canvas::Handle(canvas_value.get(Canvas::Handle())));
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
if (ret)
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
return true;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
}
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
return false;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
}
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
// Check if we are a canvas
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
Canvas::Handle canvas;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
canvas=canvas.cast_dynamic(node);
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
if(canvas)
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
{
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
for(Canvas::const_iterator iter = canvas->begin(); iter!=canvas->end(); ++iter) {
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
bool ret = waypoint_search(waypoint, uid, *iter);
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
if (ret)
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
return true;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
}
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
return false;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
}
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
// Check if we are an animated value node
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
ValueNode_Animated::Handle value_node_animated;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
value_node_animated=value_node_animated.cast_dynamic(node);
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
if(value_node_animated)
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
{
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
ValueNode_AnimatedInterfaceConst::const_findresult result = value_node_animated->find_uid(uid);
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
if (!result.second)
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
return false;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
waypoint = *result.first;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
return true;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
}
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
return false;
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
}
|
|
Rodolfo Ribeiro Gomes |
ad5dbf |
|
|
Carlos Lopez |
a09598 |
//! \writeme
|
|
Carlos Lopez |
a09598 |
int
|
|
Carlos Lopez |
a09598 |
synfig::activepoint_collect(set<activepoint, std::less<uniqueid=""> >& /*activepoint_set*/,const Time& time, const etl::handle<node>& node)</node></activepoint,>
|
|
Carlos Lopez |
a09598 |
{
|
|
Carlos Lopez |
a09598 |
const TimePointSet& timepoint_set(node->get_times());
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
// Check to see if there is anything in here at the given time
|
|
Carlos Lopez |
a09598 |
if(timepoint_set.find(time)==timepoint_set.end())
|
|
Carlos Lopez |
a09598 |
return 0;
|
|
Carlos Lopez |
a09598 |
|
|
Carlos Lopez |
a09598 |
return 0;
|
|
Carlos Lopez |
a09598 |
}
|