All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
AnimationItem.cpp
Go to the documentation of this file.
1 // TerraLib
2 #include "AnimationItem.h"
3 #include "AnimationScene.h"
4 #include "Animation.h"
5 #include "../canvas/MapDisplay.h"
6 #include "../canvas/Canvas.h"
7 
8 // Qt
9 #include <QtCore/QPropertyAnimation>
10 #include <QtGui/QPainter>
11 #include <QtCore/QVector>
12 
13 
15  : QObject(),
16  QGraphicsPixmapItem(),
17  m_title(title),
18  m_display(display),
19  m_SRID(-1),
20  m_pos(QPoint(0,0)),
21  m_automaticPan(false),
22  m_panFactor(.01),
23  m_curTimeDuration(0),
24  m_opacity(255)
25 {
26 }
27 
29 {
30  delete m_route;
31 }
32 
34 {
35  int w = m_display->getDisplayPixmap()->width();
36  int h = m_display->getDisplayPixmap()->height();
37  te::qt::widgets::Canvas canvas(w, h);
38  te::gm::Envelope e = m_display->getExtent();
39  canvas.calcAspectRatio(e.m_llx, e.m_lly, e.m_urx, e.m_ury);
40  canvas.setWindow(e.m_llx, e.m_lly, e.m_urx, e.m_ury);
41  m_matrix = canvas.getMatrix();
42 }
43 
45 {
46  return m_matrix.map(m_pos).toPoint();
47 }
48 
49 void te::qt::widgets::AnimationItem::setDuration(const unsigned int& duration)
50 {
51  m_duration = duration;
52  m_animation->setDuration(m_duration);
53  if(m_direction == QAbstractAnimation::Forward)
54  m_curTimeDuration = 0;
55  else
56  m_curTimeDuration = m_duration;
57 }
58 
59 void te::qt::widgets::AnimationItem::setDirection(const QAbstractAnimation::Direction& direction)
60 {
61  m_direction = direction;
62  setDuration(m_duration);
63 }
64 
66 {
67  return m_duration;
68 }
69 
70 QAbstractAnimation::Direction te::qt::widgets::AnimationItem::getDirection()
71 {
72  return m_direction;
73 }
74 
76 {
77  te::dt::TimeInstant iTime = m_animation->m_temporalAnimationExtent.getInitialTimeInstant();
78  te::dt::TimeInstant fTime = m_animation->m_temporalAnimationExtent.getFinalTimeInstant();
79 
80  size_t ini = 0;
81  size_t size = m_time.count();
82  size_t fim = size;
83  for(size_t i = 0; i < size; ++i)
84  {
85  if(m_time[i] == iTime || m_time[i] > iTime)
86  {
87  ini = i;
88  break;
89  }
90  }
91  for(size_t i = size-1; i >= 0; --i)
92  {
93  if(m_time[i] == fTime || m_time[i] < fTime)
94  {
95  fim = i;
96  break;
97  }
98  }
99  size = fim - ini + 1;
100  size_t tfim = ini + size;
101 
102  m_SRID = m_display->getSRID();
103  m_animationRoute.clear();
104  m_animationTime.clear();
105 
106  if(m_display->getSRID() != TE_UNKNOWN_SRS && m_display->getSRID() != m_route->getSRID())
107  {
108  te::gm::LineString line(*m_route);
109  line.transform(m_display->getSRID());
110 
111  for(size_t i = ini; i < tfim; ++i)
112  {
113  std::auto_ptr<te::gm::Point> p(line.getPointN(i));
114  m_animationRoute.push_back(QPointF(p->getX(), p->getY()));
115  m_animationTime.push_back(m_time[i]);
116  }
117  }
118  else
119  {
120  for(size_t i = ini; i < tfim; ++i)
121  {
122  std::auto_ptr<te::gm::Point> p(m_route->getPointN(i));
123  m_animationRoute.push_back(QPointF(p->getX(), p->getY()));
124  m_animationTime.push_back(m_time[i]);
125  }
126  }
127 }
128 
virtual void createAnimationDataInDisplayProjection()
Create Animation Item making reprojection if necessary.
AnimationItem(const QString &title, te::qt::widgets::MapDisplay *display)
Constructor It constructs a Animation Item.
Point * getPointN(std::size_t i) const
It returns the specified point in this LineString.
Definition: LineString.cpp:323
double m_urx
Upper right corner x-coordinate.
Definition: Envelope.h:346
A widget to control the display of a set of layers.
Definition: MapDisplay.h:66
void setMatrix()
It sets the internal matrix.
A class to represent time instant.
Definition: TimeInstant.h:55
QMatrix getMatrix()
It returns the matrix.
Definition: Canvas.cpp:2123
void setWindow(const double &llx, const double &lly, const double &urx, const double &ury)
It sets the world (or window) coordinates area (supposing a cartesian reference system).
Definition: Canvas.cpp:147
double m_llx
Lower left corner x-coordinate.
Definition: Envelope.h:344
This file defines a class for a Animation Scene.
LineString is a curve with linear interpolation between points.
Definition: LineString.h:62
This file defines a class for a Animation Item.
An Envelope defines a 2D rectangular region.
Definition: Envelope.h:51
#define TE_UNKNOWN_SRS
A numeric value to represent a unknown SRS identification in TerraLib.
Definition: Config.h:44
void calcAspectRatio(double &llx, double &lly, double &urx, double &ury, const te::map::AlignType hAlign=te::map::Center, const te::map::AlignType vAlign=te::map::Center)
It calculates the best aspect ratio for world (or window) coordinates area (supposing a cartesian ref...
Definition: Canvas.cpp:160
virtual ~AnimationItem()
Destructor It destructs a Animation Item.
void setDirection(const QAbstractAnimation::Direction &direction)
Sets the Animation Item direction.
double m_lly
Lower left corner y-coordinate.
Definition: Envelope.h:345
A canvas built on top of Qt.
Definition: Canvas.h:54
QPoint getPosInDeviceCoordinate()
It returns the Animation Item position in device coordinate.
This file defines a class for a Trajectory Animation.
double m_ury
Upper right corner y-coordinate.
Definition: Envelope.h:347
QAbstractAnimation::Direction getDirection()
Gets the Animation Item direction.
void setDuration(const unsigned int &duration)
Sets the Animation Item duration.
unsigned int getDuration()
Gets the Animation Item duration.
void transform(int srid)
It converts the coordinate values of the linestring to the new spatial reference system.
Definition: LineString.cpp:181