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_pos(QPoint(0,0)),
20  m_SRID(-1),
21  m_automaticPan(false),
22  m_curTimeDuration(0),
23  m_opacity(255)
24 {
25 }
26 
28 {
29  delete m_route;
30 }
31 
33 {
34  int w = m_display->getDisplayPixmap()->width();
35  int h = m_display->getDisplayPixmap()->height();
36  te::qt::widgets::Canvas canvas(w, h);
37  te::gm::Envelope e = m_display->getExtent();
38  canvas.calcAspectRatio(e.m_llx, e.m_lly, e.m_urx, e.m_ury);
39  canvas.setWindow(e.m_llx, e.m_lly, e.m_urx, e.m_ury);
40  m_matrix = canvas.getMatrix();
41 }
42 
44 {
45  return m_matrix.map(m_pos).toPoint();
46 }
47 
48 void te::qt::widgets::AnimationItem::setDuration(const unsigned int& duration)
49 {
50  m_duration = duration;
51  m_animation->setDuration(m_duration);
52  if(m_direction == QAbstractAnimation::Forward)
53  m_curTimeDuration = 0;
54  else
55  m_curTimeDuration = m_duration;
56 }
57 
58 void te::qt::widgets::AnimationItem::setDirection(const QAbstractAnimation::Direction& direction)
59 {
60  m_direction = direction;
61  setDuration(m_duration);
62 }
63 
65 {
66  return m_duration;
67 }
68 
69 QAbstractAnimation::Direction te::qt::widgets::AnimationItem::getDirection()
70 {
71  return m_direction;
72 }
73 
75 {
76  te::dt::TimeInstant iTime = m_animation->m_temporalAnimationExtent.getInitialTimeInstant();
77  te::dt::TimeInstant fTime = m_animation->m_temporalAnimationExtent.getFinalTimeInstant();
78 
79  size_t ini = 0;
80  size_t size = m_time.count();
81  size_t fim = size;
82  for(size_t i = 0; i < size; ++i)
83  {
84  if(m_time[i] == iTime || m_time[i] > iTime)
85  {
86  ini = i;
87  break;
88  }
89  }
90  for(size_t i = size-1; i >= 0; --i)
91  {
92  if(m_time[i] == fTime || m_time[i] < fTime)
93  {
94  fim = i;
95  break;
96  }
97  }
98  size = fim - ini + 1;
99  size_t tfim = ini + size;
100 
101  m_SRID = m_display->getSRID();
102  m_animationRoute.clear();
103  m_animationTime.clear();
104 
105  if(m_display->getSRID() != TE_UNKNOWN_SRS && m_display->getSRID() != m_route->getSRID())
106  {
107  te::gm::LineString line(*m_route);
108  line.transform(m_display->getSRID());
109 
110  for(size_t i = ini; i < tfim; ++i)
111  {
112  std::auto_ptr<te::gm::Point> p(line.getPointN(i));
113  m_animationRoute.push_back(QPointF(p->getX(), p->getY()));
114  m_animationTime.push_back(m_time[i]);
115  }
116  }
117  else
118  {
119  for(size_t i = ini; i < tfim; ++i)
120  {
121  std::auto_ptr<te::gm::Point> p(m_route->getPointN(i));
122  m_animationRoute.push_back(QPointF(p->getX(), p->getY()));
123  m_animationTime.push_back(m_time[i]);
124  }
125  }
126 }
127 
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:322
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:65
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
LineString is a curve with linear interpolation between points.
Definition: LineString.h:62
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.
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:180