19 #include <tulip/ForEach.h>
21 template<
typename PropType,
typename RealType,
typename VectorType,
unsigned int SIZE>
22 VectorPropertyAnimation<PropType, RealType, VectorType, SIZE>::VectorPropertyAnimation(
tlp::Graph *graph, PropType *start, PropType *end,
23 PropType *out,
tlp::BooleanProperty *selection,
int frameCount,
bool computeNodes,
bool computeEdges,QObject* parent) :
24 CachedPropertyAnimation<PropType, RealType, RealType> (graph, start, end, out, selection, frameCount, computeNodes, computeEdges,parent) {
26 assert(frameCount > 1);
28 if (this->_computeNodes) {
30 forEach(n, this->_graph->getNodes()) {
31 if (this->_selection && !this->_selection->getNodeValue(n))
34 std::pair<PropVector, PropVector> values(PropVector(this->_start->getNodeValue(n)), PropVector(this->_end->getNodeValue(n)));
36 if (steps.find(values) == steps.end()) {
37 tlp::Vector<double, SIZE> stepsVector;
39 for (
unsigned int i = 0; i < SIZE; ++i)
40 stepsVector[i] = ((
double)values.second[i] - (double)values.first[i]) * 1. / (frameCount - 1);
42 steps[values] = stepsVector;
47 if (this->_computeEdges) {
49 forEach(e, this->_graph->getEdges()) {
50 if (this->_selection && !this->_selection->getEdgeValue(e))
53 std::pair<PropVector, PropVector> values(PropVector(this->_start->getEdgeValue(e)), PropVector(this->_end->getEdgeValue(e)));
55 if (steps.find(values) == steps.end()) {
56 tlp::Vector<double, SIZE> stepsVector;
58 for (
unsigned int i = 0; i < SIZE; ++i)
59 stepsVector[i] = ((
double) (values.second[i] - (double)values.first[i])) * 1. / (frameCount - 1);
61 steps[values] = stepsVector;
67 template<
typename PropType,
typename RealType,
typename VectorType,
unsigned int SIZE>
68 RealType VectorPropertyAnimation<PropType, RealType, VectorType, SIZE>::getNodeFrameValue(
const RealType &startValue,
const RealType &endValue,
70 PropVector result((PropVector)startValue);
71 std::pair<PropVector, PropVector> values(result, (PropVector) endValue);
72 tlp::Vector<double, SIZE> stepVal(steps[values]);
74 for (
unsigned i=0; i < SIZE; ++i)
75 result[i] += stepVal[i] * frame;
77 return RealType(result);
80 template<
typename PropType,
typename RealType,
typename VectorType,
unsigned int SIZE>
81 RealType VectorPropertyAnimation<PropType, RealType, VectorType, SIZE>::getEdgeFrameValue(
const RealType &startValue,
const RealType &endValue,
83 return getNodeFrameValue(startValue, endValue, frame);