27 #include "../../../st/maptools/TrajectoryDataSetLayer.h"
29 #include "../canvas/MapDisplay.h"
36 #include "ui_TimeSliderWidgetForm.h"
37 #include "ui_SliderPropertiesDialogForm.h"
48 #include <QGraphicsEffect>
50 #include <QGraphicsView>
52 #include <QParallelAnimationGroup>
53 #include <QPropertyAnimation>
56 #include <QTextStream>
57 #include <QContextMenuEvent>
58 #include <QMessageBox>
59 #include <QInputDialog>
60 #include <QDateTimeEdit>
61 #include <QColorDialog>
62 #include <QListWidget>
65 #include <QFileDialog>
70 m_erasePerfectly(false),
71 m_ui(new Ui::TimeSliderWidgetForm),
72 m_maxSliderValue(1000000000),
77 setFocusPolicy(Qt::StrongFocus);
78 setMouseTracking(
true);
91 m_ui->m_TemporalHorizontalSlider->setMinimum(0);
94 m_ui->m_durationSpinBox->setMinimum(100);
95 m_ui->m_durationSpinBox->setMaximum(100000000);
96 m_ui->m_durationSpinBox->setValue(10000);
97 m_ui->m_durationSpinBox->setSingleStep(10000);
99 m_spd->
m_ui->m_initialTimeLineEdit->setEnabled(
false);
100 m_spd->
m_ui->m_finalTimeLineEdit->setEnabled(
false);
102 m_spd->
m_ui->m_opacitySpinBox->setMinimum(0);
103 m_spd->
m_ui->m_opacitySpinBox->setMaximum(255);
104 m_spd->
m_ui->m_opacitySpinBox->setValue(255);
105 m_spd->
m_ui->m_opacitySpinBox->setSingleStep(5);
118 m_ui->m_settingsToolButton->setIcon(QIcon::fromTheme(
"preferences-system"));
119 m_ui->m_playToolButton->setIcon(QIcon::fromTheme(
"media-playback-start"));
120 m_ui->m_stopToolButton->setIcon(QIcon::fromTheme(
"media-playback-stop"));
123 connect(
m_ui->m_dateTimeEdit, SIGNAL(dateTimeChanged(
const QDateTime&) ),
this, SLOT(
onDateTimeEditChanged(
const QDateTime&)));
128 connect(
m_ui->m_TemporalHorizontalSlider, SIGNAL(sliderMoved (
int)),
this, SLOT(
onSliderMoved(
int)));
130 setAttribute(Qt::WA_DeleteOnClose,
true);
138 m_spd->
m_ui->m_forwardRadioButton->setCheckable(
true);
142 QBrush brush(Qt::transparent);
143 QPalette palette(brush, brush, brush, brush, brush, brush, brush, brush, brush);
162 m_spd->
m_ui->m_forwardColorPushButton->installEventFilter(
this);
163 m_spd->
m_ui->m_backwardColorPushButton->installEventFilter(
this);
164 m_spd->
m_ui->m_iconPushButton->installEventFilter(
this);
165 m_ui->m_dateTimeEdit->installEventFilter(
this);
167 m_ui->m_dateTimeEdit->setDisplayFormat(
"dd/MMM/yyyy hh:mm:ss");
171 m_ui->m_durationSpinBox->setEnabled(
false);
172 m_ui->m_settingsToolButton->setEnabled(
false);
173 m_ui->m_playToolButton->setEnabled(
false);
174 m_ui->m_stopToolButton->setEnabled(
false);
175 m_ui->m_dateTimeEdit->setEnabled(
false);
180 m_ui->m_durationSpinBox->setEnabled(
true);
181 m_ui->m_settingsToolButton->setEnabled(
true);
182 m_ui->m_playToolButton->setEnabled(
true);
183 m_ui->m_stopToolButton->setEnabled(
true);
185 m_ui->m_dateTimeEdit->setEnabled(
true);
187 m_ui->m_dateTimeEdit->setEnabled(
false);
199 QList<QGraphicsItem*>::iterator it = list.begin();
211 m_parallelAnimation->stop();
212 m_parallelAnimation->clear();
213 delete m_parallelAnimation;
214 delete m_animationScene;
216 bool b = m_animationView->testAttribute(Qt::WA_DeleteOnClose);
217 m_animationView->close();
219 delete m_animationView;
229 if(layer->getType() ==
"TRAJECTORYDATASETLAYER")
232 QString title(tl->
getTitle().c_str());
233 QPair<QString, te::st::TrajectoryDataSetLayer*> p(title, tl);
234 if(trajectoryAlreadyExists(p))
235 QMessageBox::information(
this, title +
" already exists",
"This item is already being animated!");
237 addTrajectory(tl,
"");
245 if(layer->getType() ==
"TRAJECTORYDATASETLAYER")
247 QString title = layer->getTitle().c_str();
248 removeAnimation(title);
266 QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
268 QList<QGraphicsItem*> list = m_animationScene->items();
269 QList<QGraphicsItem*>::iterator it;
271 for(it = list.begin(); it != list.end(); ++it)
364 int ind = m_spd->m_ui->m_animationComboBox->currentIndex();
367 QString title = m_spd->m_ui->m_animationComboBox->currentText();
368 removeAnimation(title);
376 int ind = m_spd->m_ui->m_animationComboBox->currentIndex();
379 QString title = m_spd->m_ui->m_animationComboBox->currentText();
380 removeAnimation(title);
386 QList<QGraphicsItem*> list = m_animationScene->items();
387 QList<QGraphicsItem*>::iterator it;
389 for(it = list.begin(); it != list.end(); ++it)
395 if(list.count() == 1)
397 onStopToolButtonnClicked();
398 m_animationScene->removeItem(ai);
399 m_parallelAnimation->removeAnimation(ai->
m_animation);
402 m_ui->m_TemporalHorizontalSlider->setValue(0);
403 m_parallelAnimation->setCurrentTime(0);
404 m_ui->m_settingsToolButton->setEnabled(
false);
405 m_ui->m_playToolButton->setEnabled(
false);
406 m_ui->m_stopToolButton->setEnabled(
false);
407 m_ui->m_durationSpinBox->setEnabled(
false);
408 m_ui->m_dateTimeEdit->setEnabled(
false);
410 removeOnPropertieCombo(title);
415 bool running =
false;
416 int state = m_parallelAnimation->state();
417 if(state == QAbstractAnimation::Running)
420 onPlayToolButtonnClicked();
423 m_currentTime = m_parallelAnimation->currentTime();
424 m_animationScene->removeItem(ai);
425 m_parallelAnimation->removeAnimation(ai->
m_animation);
426 if(ai->pixmap().isNull() ==
false)
428 if(m_animationScene->m_numberOfTrajectories)
430 m_animationScene->m_mutex.lock();
431 m_animationScene->m_trajectoryPixmap->fill(Qt::transparent);
432 m_animationScene->m_mutex.unlock();
439 calculateSpatialExtent();
440 calculateTemporalExtent();
442 setDuration(m_duration);
443 setDirection(m_direction);
447 onPlayToolButtonnClicked();
448 m_parallelAnimation->setCurrentTime(m_currentTime);
454 removeOnPropertieCombo(title);
461 size_t size = m_spd->m_ui->m_animationComboBox->count();
462 for(i = 0; i < size; ++i)
464 QString ititle = m_spd->m_ui->m_animationComboBox->itemText(i);
467 m_spd->m_ui->m_animationComboBox->removeItem(i);
469 onAnimationComboBoxActivated(i-1);
470 else if(m_spd->m_ui->m_animationComboBox->count() > 0)
471 onAnimationComboBoxActivated(0);
480 const QMimeData* mdata = e->mimeData();
481 QList<QUrl> urls = mdata->urls();
484 QByteArray ba = mdata->data(
"application/x-terralib;value=\"DraggedItems\"");
488 std::vector<te::qt::widgets::AbstractTreeItem*>* ditems = (std::vector<AbstractTreeItem*>*)s.toULongLong();
489 std::vector<te::qt::widgets::AbstractTreeItem*>::iterator it;
490 for(it = ditems->begin(); it != ditems->end(); ++it)
493 std::string ltype = ati->
getLayer()->getType();
494 if(ltype ==
"TRAJECTORYDATASETLAYER")
501 e->setDropAction(Qt::LinkAction);
503 QString path = urls.begin()->path();
504 size_t pos = path.indexOf(
"/");
508 QStringList nameFilter;
509 nameFilter.append(
"*.ctl");
510 QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
511 if(files.empty() ==
false)
513 QString file(path +
"/" + files.first());
514 FILE* fp = fopen(file.toStdString().c_str(),
"r");
516 int c = fread(buf,
sizeof(
char), 2000, fp);
520 if(s.contains(
"undef", Qt::CaseInsensitive))
526 nameFilter.append(
"S1123*.jpg");
527 QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
528 if(files.empty() ==
false && files.first().length() == 26)
533 nameFilter.append(
"S1118*.jpg");
534 QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
535 if(files.empty() ==
false && files.first().length() == 26)
547 m_dropModifiers = e->keyboardModifiers();
548 const QMimeData* mdata = e->mimeData();
549 m_dropUrls = mdata->urls();
550 m_dropBA = mdata->data(
"application/x-terralib;value=\"DraggedItems\"");
551 QTimer::singleShot(10,
this, SLOT(dropAction()));
557 int state = m_parallelAnimation->state();
558 int tempo = m_currentTime;
559 if(state == QAbstractAnimation::Running)
560 onPlayToolButtonnClicked();
562 if(m_dropModifiers == Qt::NoModifier)
564 onStopToolButtonnClicked();
565 m_spd->m_ui->m_animationComboBox->clear();
566 m_spd->m_ui->m_animationComboBox->clear();
567 m_ui->m_TemporalHorizontalSlider->setValue(0);
568 m_parallelAnimation->setCurrentTime(0);
569 m_ui->m_settingsToolButton->setEnabled(
false);
570 m_ui->m_playToolButton->setEnabled(
false);
571 m_ui->m_stopToolButton->setEnabled(
false);
572 m_ui->m_durationSpinBox->setEnabled(
false);
573 m_ui->m_dateTimeEdit->setEnabled(
false);
575 QList<QGraphicsItem*> list = m_animationScene->items();
576 QList<QGraphicsItem*>::iterator it;
577 for(it = list.begin(); it != list.end(); ++it)
580 m_animationScene->removeItem(ai);
581 m_parallelAnimation->removeAnimation(ai->
m_animation);
589 m_spd->m_ui->m_animationComboBox->clear();
595 if(m_dropUrls.empty())
597 if(m_dropBA.count() != 0)
600 std::vector<te::qt::widgets::AbstractTreeItem*>* ditems = (std::vector<AbstractTreeItem*>*)s.toULongLong();
601 std::vector<te::qt::widgets::AbstractTreeItem*>::iterator it;
602 for(it = ditems->begin(); it != ditems->end(); ++it)
605 std::string ltype = ati->
getLayer()->getType();
606 if(ltype ==
"TRAJECTORYDATASETLAYER")
609 QString title(tl->
getTitle().c_str());
610 QPair<QString, te::st::TrajectoryDataSetLayer*> p(title, tl);
611 if(trajectoryAlreadyExists(p))
612 QMessageBox::information(
this, title +
" already exists",
"This item is already being animated!");
614 addTrajectory(tl,
"");
621 QList<QUrl>::iterator it;
622 for(it = m_dropUrls.begin(); it != m_dropUrls.end(); ++it)
624 QString path = it->path();
626 QString title = dir.dirName();
629 QPair<QString, QString> p(title, path);
631 if(coverageAlreadyExists(p))
632 QMessageBox::information(
this,
"animation already exists",
"This item is already being animated!");
634 addTemporalImages(path);
638 if(state == QAbstractAnimation::Running || m_dropModifiers == Qt::NoModifier)
640 m_currentTime = tempo;
641 onPlayToolButtonnClicked();
642 m_parallelAnimation->setCurrentTime(m_currentTime);
648 for(
int i = 0; i < m_spd->m_ui->m_animationComboBox->count(); ++i)
650 if(item.first == m_spd->m_ui->m_animationComboBox->itemText(i))
672 for(
int i = 0; i < m_spd->m_ui->m_animationComboBox->count(); ++i)
674 if(item.first == m_spd->m_ui->m_animationComboBox->itemText(i))
696 int state = m_parallelAnimation->state();
698 QString title = tl->
getTitle().c_str();
700 m_animationScene->addItem(ti);
702 animation->setEasingCurve(QEasingCurve::Linear);
708 size_t size = dset->
size();
719 std::auto_ptr<te::dt::DateTime> time = dset->
getTime();
721 if(tiraRepetido == *tinstant)
723 tiraRepetido = *tinstant;
727 std::auto_ptr<te::gm::Geometry> geom = dset->
getGeometry();
735 m_parallelAnimation->addAnimation(animation);
736 calculateSpatialExtent();
737 calculateTemporalExtent();
739 setDuration(m_duration);
740 setDirection(m_direction);
742 if(state == QAbstractAnimation::Running)
744 onPlayToolButtonnClicked();
745 m_parallelAnimation->setCurrentTime(m_currentTime);
747 if(m_animationScene->items().isEmpty() ==
false)
749 m_ui->m_durationSpinBox->setEnabled(
true);
750 m_ui->m_settingsToolButton->setEnabled(
true);
751 m_ui->m_playToolButton->setEnabled(
true);
752 m_ui->m_stopToolButton->setEnabled(
true);
753 if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
754 m_ui->m_dateTimeEdit->setEnabled(
true);
756 m_ui->m_dateTimeEdit->setEnabled(
false);
785 m_spd->m_ui->m_animationComboBox->addItem(title);
786 int count = m_spd->m_ui->m_animationComboBox->count();
787 m_spd->m_ui->m_animationComboBox->setCurrentIndex(count-1);
793 onAnimationComboBoxActivated(count-1);
798 if(m_animationScene->items().isEmpty())
799 m_ui->m_durationSpinBox->setValue(m_duration);
801 int state = m_parallelAnimation->state();
802 m_currentTime = m_parallelAnimation->currentTime();
803 if(state == QAbstractAnimation::Running)
804 onPlayToolButtonnClicked();
809 QMessageBox::information(
this,
"Error",
"Load error: " + filePath);
814 calculateSpatialExtent();
815 calculateTemporalExtent();
817 setDuration(m_duration);
818 setDirection(m_direction);
819 if(state == QAbstractAnimation::Running)
821 onPlayToolButtonnClicked();
822 m_parallelAnimation->setCurrentTime(m_currentTime);
824 if(m_animationScene->items().isEmpty() ==
false)
826 m_ui->m_durationSpinBox->setEnabled(
true);
827 m_ui->m_settingsToolButton->setEnabled(
true);
828 m_ui->m_playToolButton->setEnabled(
true);
829 m_ui->m_stopToolButton->setEnabled(
true);
830 if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
831 m_ui->m_dateTimeEdit->setEnabled(
true);
833 m_ui->m_dateTimeEdit->setEnabled(
false);
863 m_spd->m_ui->m_animationComboBox->addItem(dir.dirName());
864 int count = m_spd->m_ui->m_animationComboBox->count();
865 m_spd->m_ui->m_animationComboBox->setCurrentIndex(count-1);
866 onAnimationComboBoxActivated(count-1);
938 PixmapItem* pi = getTemporalImageCtlParameters(path);
942 m_animationScene->addItem(pi);
945 animation->setEasingCurve(QEasingCurve::Linear);
946 m_parallelAnimation->addAnimation(animation);
948 QString suffix =
"." + pi->
m_suffix;
949 QStringList nameFilter;
950 nameFilter.append(
"*" + suffix);
952 QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
953 size_t count = files.count();
962 for(
size_t i = 0; i < count; ++i)
964 QString f = files[i];
976 for(
size_t i = 0; i < count; ++i)
979 pos -= QPointF(w, h);
981 pos += QPointF(w, h);
994 QList<QGraphicsItem*> list = m_animationScene->items();
995 QList<QGraphicsItem*>::iterator it;
997 for(it = list.begin(); it != list.end(); ++it)
1005 m_spatialExtent.Union(e);
1010 QRectF rect(m_spatialExtent.m_llx, m_spatialExtent.m_lly, m_spatialExtent.getWidth(), m_spatialExtent.getHeight());
1011 m_animationScene->setSceneRect(rect);
1012 m_animationView->setSceneRect(rect);
1013 m_animationView->fitInView(rect);
1024 QList<QGraphicsItem*> list = m_animationScene->items();
1025 QList<QGraphicsItem*>::iterator it = list.begin();
1026 if(it != list.end())
1034 while(it != list.end())
1038 if(initial < t_initial)
1039 t_initial = initial;
1049 if(list.count() == 1)
1051 m_temporalAnimationExtent = tp;
1053 for(it = list.begin(); it != list.end(); ++it)
1064 QVector<te::dt::TimePeriod>
times;
1065 QVector<te::gm::Envelope> envelopes;
1066 QList<QGraphicsItem*> list = m_animationScene->items();
1067 QList<QGraphicsItem*>::iterator it;
1068 for(it = list.begin(); it != list.end(); ++it)
1075 if(m_parallelAnimation->state() == QAbstractAnimation::Stopped)
1076 m_parallelAnimation->clear();
1079 int cur = m_parallelAnimation->currentTime();
1080 m_parallelAnimation->stop();
1081 m_parallelAnimation->clear();
1082 m_parallelAnimation->setCurrentTime(cur);
1085 for(it = list.begin(), i = 0 ; it != list.end(); ++it, ++i)
1093 m_parallelAnimation->addAnimation(a);
1102 boost::posix_time::ptime iTime = m_temporalAnimationExtent.getInitialTimeInstant().getTimeInstant();
1103 boost::posix_time::ptime fTime = m_temporalAnimationExtent.getFinalTimeInstant().getTimeInstant();
1104 boost::posix_time::time_duration diff = fTime - iTime;
1105 double totalSeconds = diff.total_seconds();
1107 diff = pTime - iTime;
1108 double seconds = diff.total_seconds();
1110 double t = seconds / totalSeconds;
1111 int ret = qRound(t * (
double)m_duration);
1117 double t = m_parallelAnimation->currentTime();
1118 double trel = t / (double)m_duration;
1121 boost::posix_time::ptime iTime = m_temporalAnimationExtent.getInitialTimeInstant().
getTimeInstant();
1122 boost::posix_time::ptime fTime = m_temporalAnimationExtent.getFinalTimeInstant().getTimeInstant();
1123 boost::posix_time::time_duration diff = fTime - iTime;
1124 double totalSeconds = diff.total_seconds();
1126 int secs = qRound(totalSeconds * trel);
1127 boost::posix_time::time_duration td = boost::posix_time::seconds(secs);
1128 boost::posix_time::ptime time = iTime + td;
1135 if(m_animationScene->items().isEmpty())
1137 if(m_parallelAnimation->state() == QAbstractAnimation::Stopped)
1144 if(m_ui->m_dateTimeEdit->isEnabled() ==
false)
1145 t = getTimeInstant();
1148 QDateTime d = m_ui->m_dateTimeEdit->dateTime();
1153 QList<QGraphicsItem*> list = m_animationScene->items();
1154 QList<QGraphicsItem*>::iterator it;
1156 if(m_animationScene->m_numberOfCoverages)
1159 for(it = list.begin(); it != list.end(); ++it)
1162 if(ai->pixmap().isNull())
1167 if(t < tini || t > tfim)
1172 drawPixmapItem(pi, drect, painter);
1177 if(m_animationScene->m_numberOfTrajectories)
1180 m_animationScene->m_mutex.lock();
1181 QPixmap* pixt = ((
AnimationScene*)(m_animationScene))->m_trajectoryPixmap;
1182 painter->drawPixmap(0, 0, *pixt);
1183 m_animationScene->m_mutex.unlock();
1186 for(it = list.begin(); it != list.end(); ++it)
1189 if(ai->pixmap().isNull() ==
false)
1194 if(t < tini || t > tfim)
1199 QRect r = ai->pixmap().rect();
1201 QRect dr = m_display->rect();
1202 if(dr.intersects(r))
1219 m_direction = direction;
1220 m_parallelAnimation->setDirection(m_direction);
1222 unsigned int count = m_parallelAnimation->animationCount();
1223 for(
unsigned int i = 0; i < count; ++i)
1225 QPropertyAnimation* a = (QPropertyAnimation*)m_parallelAnimation->animationAt(i);
1234 m_animationScene->setDuration(duration);
1239 m_animationScene->createNewPixmap();
1244 m_animationScene->createNewPixmap();
1245 m_animationScene->setMatrix();
1246 m_animationScene->draw(m_currentTime);
1251 m_animationScene->setAutomaticPan(title);
1270 QList<QGraphicsItem*> list = m_animationScene->items();
1271 QList<QGraphicsItem*>::iterator it;
1272 for(it = list.begin(); it != list.end(); ++it)
1307 if(obj == m_spd->m_ui->m_forwardColorPushButton)
1309 if(e->type() == QEvent::Paint)
1311 QPainter painter(m_spd->m_ui->m_forwardColorPushButton);
1312 QBrush brush(m_spd->m_ui->m_forwardColorPushButton->palette().color(QPalette::Window));
1313 painter.fillRect(m_spd->m_ui->m_forwardColorPushButton->rect(), brush);
1316 else if(e->type() == QEvent::MouseButtonPress)
1318 QColor cor = QColorDialog::getColor(m_spd->m_ui->m_forwardColorPushButton->palette().color(QPalette::Window),
this,
"Forward Color", QColorDialog::ShowAlphaChannel);
1319 if(cor.isValid() ==
false)
1321 else if(cor == m_spd->m_ui->m_forwardColorPushButton->palette().color(QPalette::Window))
1324 m_spd->m_ui->m_forwardColorPushButton->setPalette(QPalette(cor));
1326 QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
1328 QList<QGraphicsItem*> list = m_animationScene->items();
1329 QList<QGraphicsItem*>::iterator it;
1332 for(it = list.begin(); it != list.end(); ++it)
1336 if(title == titlecb)
1347 else if(obj == m_spd->m_ui->m_backwardColorPushButton)
1349 if(e->type() == QEvent::Paint)
1351 QPainter painter(m_spd->m_ui->m_backwardColorPushButton);
1352 QBrush brush(m_spd->m_ui->m_backwardColorPushButton->palette().color(QPalette::Window));
1353 painter.fillRect(m_spd->m_ui->m_backwardColorPushButton->rect(), brush);
1356 else if(e->type() == QEvent::MouseButtonPress)
1358 QColor cor = QColorDialog::getColor(m_spd->m_ui->m_backwardColorPushButton->palette().color(QPalette::Window),
this,
"Forward Color", QColorDialog::ShowAlphaChannel);
1359 if(cor.isValid() ==
false)
1361 else if(cor == m_spd->m_ui->m_backwardColorPushButton->palette().color(QPalette::Window))
1364 m_spd->m_ui->m_backwardColorPushButton->setPalette(QPalette(cor));
1366 QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
1368 QList<QGraphicsItem*> list = m_animationScene->items();
1369 QList<QGraphicsItem*>::iterator it;
1372 for(it = list.begin(); it != list.end(); ++it)
1376 if(title == titlecb)
1387 else if(obj == m_spd->m_ui->m_iconPushButton)
1389 if(e->type() == QEvent::Paint)
1391 QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
1393 QList<QGraphicsItem*> list = m_animationScene->items();
1394 QList<QGraphicsItem*>::iterator it;
1397 for(it = list.begin(); it != list.end(); ++it)
1400 QPixmap pix = ai->pixmap();
1401 if(pix.isNull() ==
false)
1405 if(title == titlecb)
1411 QPainter painter(m_spd->m_ui->m_iconPushButton);
1412 painter.fillRect(m_spd->m_ui->m_iconPushButton->rect(), QBrush(Qt::white));
1413 QPixmap pix = ti->pixmap();
1414 QRect r = pix.rect();
1415 r.moveCenter(m_spd->m_ui->m_iconPushButton->rect().center());
1416 painter.drawPixmap(r, pix, pix.rect());
1421 else if(e->type() == QEvent::MouseButtonPress)
1423 QString fileName = QFileDialog::getOpenFileName(
this, tr(
"Select File"),
"C:/", tr(
"Images (*.png *.xpm *.jpg *.gif)"));
1424 if(fileName.isNull())
1427 QPixmap pix(fileName);
1430 QMessageBox::information(
this,
"Pixmap Error",
"Invalid File");
1434 QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
1436 QList<QGraphicsItem*> list = m_animationScene->items();
1437 QList<QGraphicsItem*>::iterator it;
1440 for(it = list.begin(); it != list.end(); ++it)
1443 if(ai->pixmap().isNull() ==
false)
1447 if(title == titlecb)
1454 pp.fill(Qt::transparent);
1455 QPainter painter(&pp);
1456 painter.drawPixmap(pp.rect(), pix, pix.rect());
1461 m_spd->m_ui->m_iconPushButton->update();
1466 else if(obj == m_ui->m_dateTimeEdit)
1468 if(e->type() == QEvent::MouseButtonRelease)
1470 QDateTime d = m_ui->m_dateTimeEdit->dateTime();
1480 else if(d >= maximun)
1482 else if(d == m_oldQDateTime)
1483 d = fixDateTimeEdit(m_ui->m_dateTimeEdit, d);
1485 m_ui->m_dateTimeEdit->setDateTime(d);
1489 onFinishAnimation();
1493 else if(obj == m_spd->m_ui->m_initialAnimationDateTimeEdit)
1495 if(e->type() == QEvent::MouseButtonRelease)
1497 QDateTime d = m_spd->m_ui->m_initialAnimationDateTimeEdit->dateTime();
1507 else if(d >= maximun)
1509 else if(d == m_oldQDateTime)
1510 d = fixDateTimeEdit(m_spd->m_ui->m_initialAnimationDateTimeEdit, d);
1512 m_spd->m_ui->m_initialAnimationDateTimeEdit->setDateTime(d);
1517 else if(obj == m_spd->m_ui->m_finalAnimationDateTimeEdit)
1519 if(e->type() == QEvent::MouseButtonRelease)
1521 QDateTime d = m_spd->m_ui->m_finalAnimationDateTimeEdit->dateTime();
1531 else if(d >= maximun)
1533 else if(d == m_oldQDateTime)
1534 d = fixDateTimeEdit(m_spd->m_ui->m_finalAnimationDateTimeEdit, d);
1536 m_spd->m_ui->m_finalAnimationDateTimeEdit->setDateTime(d);
1541 return QObject::eventFilter(obj, e);
1660 if(m_spd->isHidden())
1668 if(m_animationScene->items().isEmpty())
1671 int state = m_parallelAnimation->state();
1672 if(state == QAbstractAnimation::Running)
1674 m_ui->m_playToolButton->setIcon(QIcon::fromTheme(
"media-playback-start"));
1675 m_parallelAnimation->pause();
1676 m_ui->m_dateTimeEdit->setEnabled(
true);
1681 m_ui->m_playToolButton->setIcon(QIcon::fromTheme(
"media-playback-pause"));
1682 if(m_comingBack ==
false)
1684 if(m_spd->m_ui->m_forwardRadioButton->isChecked())
1685 onForwardRadioButtonClicked(
true);
1686 if(m_spd->m_ui->m_backwardRadioButton->isChecked())
1687 onBackwardRadioButtonClicked(
true);
1689 if(m_spd->m_ui->m_loopCheckBox->isChecked())
1690 onLoopCheckBoxClicked(
true);
1691 if(m_spd->m_ui->m_goAndBackCheckBox->isChecked())
1692 onGoAndBackCheckBoxClicked(
true);
1694 if(m_parallelAnimation->direction() == QAbstractAnimation::Forward)
1696 if(m_ui->m_TemporalHorizontalSlider->value() == m_maxSliderValue)
1698 m_parallelAnimation->setCurrentTime(0);
1699 m_ui->m_TemporalHorizontalSlider->setValue(0);
1704 if(m_ui->m_TemporalHorizontalSlider->value() == 0)
1706 m_parallelAnimation->setCurrentTime(m_duration);
1707 m_ui->m_TemporalHorizontalSlider->setValue(m_maxSliderValue);
1710 m_ui->m_dateTimeEdit->setEnabled(
false);
1718 if(m_animationScene->items().isEmpty())
1721 m_parallelAnimation->stop();
1722 m_ui->m_dateTimeEdit->setEnabled(
false);
1723 m_ui->m_playToolButton->setIcon(QIcon::fromTheme(
"media-playback-start"));
1730 m_comingBack =
false;
1734 if(m_finished ==
false)
1736 if(m_parallelAnimation->direction() == QAbstractAnimation::Forward)
1738 m_ui->m_TemporalHorizontalSlider->setValue(0);
1739 m_parallelAnimation->setCurrentTime(0);
1743 m_ui->m_TemporalHorizontalSlider->setValue(m_maxSliderValue);
1744 m_parallelAnimation->setCurrentTime(m_parallelAnimation->duration());
1747 m_display->update();
1754 int state = m_parallelAnimation->state();
1755 if(state == QAbstractAnimation::Running)
1757 m_parallelAnimation->pause();
1760 m_display->update();
1761 m_parallelAnimation->resume();
1767 m_display->update();
1773 int state = m_parallelAnimation->state();
1774 if(state == QAbstractAnimation::Running)
1777 calculateSpatialExtent();
1780 m_display->update();
1781 m_parallelAnimation->start();
1786 calculateSpatialExtent();
1789 m_display->update();
1795 if(m_animationScene->items().isEmpty())
1798 int state = m_parallelAnimation->state();
1799 if(state == QAbstractAnimation::Stopped)
1802 m_parallelAnimation->start();
1804 else if(state == QAbstractAnimation::Paused)
1806 m_parallelAnimation->resume();
1812 int oldCurTime = m_parallelAnimation->currentTime();
1814 if(m_parallelAnimation->state() == QAbstractAnimation::Stopped)
1816 onStopToolButtonnClicked();
1820 double v = (double)value / (
double)m_maxSliderValue;
1822 int curTime = qRound(v * (
double)m_parallelAnimation->duration());
1824 if(curTime >= m_parallelAnimation->duration())
1825 curTime = m_parallelAnimation->duration();
1828 if(m_goAndBack ==
true)
1830 if(m_comingBack ==
false && m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
1832 else if(m_comingBack ==
false && m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
1834 else if(m_comingBack ==
true && m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
1836 else if(m_comingBack ==
true && m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
1841 if(m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
1843 else if(m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
1847 m_parallelAnimation->setCurrentTime(curTime);
1849 this->erase(curTime);
1851 m_currentTime = curTime;
1853 if(m_currentTime == 0 || m_currentTime == m_parallelAnimation->duration())
1854 onFinishAnimation();
1856 if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
1857 m_display->update();
1862 QDateTime qdatetime(qdate, qtime);
1863 m_ui->m_dateTimeEdit->setDateTime(qdatetime);
1868 QAbstractAnimation::Direction direction = m_parallelAnimation->direction();
1869 if(direction == QAbstractAnimation::Forward)
1870 direction = QAbstractAnimation::Backward;
1872 direction = QAbstractAnimation::Forward;
1873 setDirection(direction);
1880 if(m_currentTime >= m_duration && m_parallelAnimation->direction() == QAbstractAnimation::Forward)
1882 m_currentTime = m_duration;
1884 m_comingBack =
true;
1885 m_parallelAnimation->setCurrentTime(m_currentTime);
1887 else if(m_currentTime <= 0 && m_parallelAnimation->direction() == QAbstractAnimation::Backward)
1891 m_comingBack =
false;
1892 m_parallelAnimation->setCurrentTime(m_currentTime);
1896 m_parallelAnimation->pause();
1905 m_comingBack = !m_comingBack;
1916 m_parallelAnimation->setCurrentTime(m_currentTime);
1921 if(m_comingBack ==
false)
1922 onStopToolButtonnClicked();
1932 onStopToolButtonnClicked();
1938 m_currentTime = m_parallelAnimation->currentTime();
1939 int v = qRound((
double)m_maxSliderValue * (
double)m_currentTime/(
double)m_duration);
1941 m_ui->m_TemporalHorizontalSlider->setValue(v);
1943 updateTimeTextEdit();
1948 if(m_ui->m_dateTimeEdit->isEnabled() ==
false && m_animationScene->items().isEmpty() ==
false)
1953 QDateTime qdatetime(qdate, qtime);
1954 m_ui->m_dateTimeEdit->setDateTime(qdatetime);
1960 emit deleteTimeSliderWidget();
1965 int state = m_parallelAnimation->state();
1966 if(state == QAbstractAnimation::Running)
1967 onPlayToolButtonnClicked();
1969 QList<QGraphicsItem*> list = m_animationScene->items();
1970 int i = list.indexOf(item);
1974 QList<QGraphicsItem*>::iterator it = list.begin();
1975 while(it != list.end())
1978 m_animationScene->removeItem(ai);
1981 while(list.isEmpty() ==
false)
1984 m_animationScene->addItem(ai);
1987 onPlayToolButtonnClicked();
1992 int state = m_parallelAnimation->state();
1993 if(state == QAbstractAnimation::Running)
1994 onPlayToolButtonnClicked();
1996 QList<QGraphicsItem*> list = m_animationScene->items();
1997 int i = list.indexOf(item);
2001 QList<QGraphicsItem*>::iterator it = list.begin();
2002 while(it != list.end())
2005 m_animationScene->removeItem(ai);
2008 while(list.isEmpty() ==
false)
2011 m_animationScene->addItem(ai);
2014 onPlayToolButtonnClicked();
2019 QString title = m_spd->m_ui->m_animationComboBox->currentText();
2021 QList<QGraphicsItem*> list = m_animationScene->items();
2022 QList<QGraphicsItem*>::iterator it;
2024 for(it = list.begin(); it != list.end(); ++it)
2038 QString title = m_spd->m_ui->m_animationComboBox->currentText();
2040 QList<QGraphicsItem*> list = m_animationScene->items();
2041 QList<QGraphicsItem*>::iterator it;
2043 for(it = list.begin(); it != list.end(); ++it)
2057 QList<QGraphicsItem*> list = m_animationScene->items();
2058 QList<QGraphicsItem*>::iterator it;
2059 for(it = list.begin(); it != list.end(); ++it)
2062 if(ai->pixmap().isNull() ==
false)
2066 if(m_erasePerfectly)
2068 m_parallelAnimation->setCurrentTime(curTime);
2072 m_parallelAnimation->setCurrentTime(curTime);
2074 m_currentTime = curTime;
2079 if(val == m_duration)
2082 m_currentTime = m_parallelAnimation->currentTime();
2083 double f = double(m_currentTime) / (double)m_duration;
2085 int step = m_ui->m_durationSpinBox->singleStep();
2090 if(v == 0 || v == m_duration + step || v == m_duration - step)
2096 else if(v > step*10)
2099 v = m_duration + step;
2102 else if(step == 1000)
2107 v = m_duration - step;
2109 else if(v > step*10)
2112 v = m_duration + step;
2115 else if(step == 10000)
2120 v = m_duration - step;
2122 else if(v > step*10)
2125 v = m_duration + step;
2128 else if(step == 100000)
2133 v = m_duration - step;
2135 else if(v > step*10)
2138 v = m_duration + step;
2141 else if(step == 1000000)
2146 v = m_duration - step;
2148 else if(v > step*10)
2151 v = m_duration + step;
2155 m_duration = (v / step) * step;
2156 m_ui->m_durationSpinBox->setValue(m_duration);
2157 m_ui->m_durationSpinBox->setSingleStep(step);
2162 bool running =
false;
2163 if(m_parallelAnimation->state() == QAbstractAnimation::Running)
2166 onPlayToolButtonnClicked();
2169 m_currentTime = qRound(f * (
double)m_duration);
2170 m_animationScene->m_mutex.lock();
2171 m_animationScene->m_trajectoryPixmap->fill(Qt::transparent);
2172 m_animationScene->m_mutex.unlock();
2173 setDuration(m_duration);
2174 m_parallelAnimation->setCurrentTime(m_currentTime);
2177 onPlayToolButtonnClicked();
2182 if(m_ui->m_dateTimeEdit->isEnabled() ==
false)
2186 int oldCurTime = m_parallelAnimation->currentTime();
2189 unsigned long totalSecs = m_temporalAnimationExtent.getTimePeriod().length().total_seconds();
2191 te::dt::Date date(t.date().year(), t.date().month(), t.date().day());
2196 unsigned long secs = tp.
getTimePeriod().length().total_seconds();
2198 double v = (double)secs / (
double)totalSecs;
2199 int curTime = qRound(v * (
double)m_parallelAnimation->duration());
2201 if(curTime > m_parallelAnimation->duration())
2202 curTime = m_parallelAnimation->duration();
2205 if(m_goAndBack ==
true)
2207 if(m_comingBack ==
false && m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
2209 else if(m_comingBack ==
false && m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
2211 else if(m_comingBack ==
true && m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
2213 else if(m_comingBack ==
true && m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
2218 if(m_direction == QAbstractAnimation::Forward && curTime < oldCurTime)
2220 else if(m_direction == QAbstractAnimation::Backward && curTime > oldCurTime)
2224 m_currentTime = curTime;
2225 m_parallelAnimation->setCurrentTime(curTime);
2227 this->erase(curTime);
2229 if(m_parallelAnimation->state() == QAbstractAnimation::Paused)
2230 m_display->update();
2236 QDateTimeEdit::Section section = dte->currentSection();
2237 if(section == QDateTimeEdit::SecondSection)
2239 int sec = t.time().second();
2245 else if(section == QDateTimeEdit::MinuteSection)
2247 int min = t.time().minute();
2253 else if(section == QDateTimeEdit::HourSection)
2255 int hour = t.time().hour();
2257 t = t.addSecs(-3600);
2259 t = t.addSecs(3600);
2261 else if(section == QDateTimeEdit::DaySection)
2263 int day = t.date().day();
2269 else if(section == QDateTimeEdit::MonthSection)
2271 int month = t.date().month();
2273 t = t.addMonths(-1);
2287 if(dwrect.intersects(rec))
2289 QRect r = pi->
m_matrix.mapRect(rec).toRect();
2293 painter->drawImage(r, *ima);
2296 QSize size = ima->size();
2297 int width = size.width();
2298 int height = size.height();
2300 if(ima->format() == QImage::Format_ARGB32)
2302 for(
int i = 0; i < height; ++i)
2304 unsigned char* u = ima->scanLine(i);
2305 for(
int j = 0; j < width; ++j)
2307 QRgb* v = (QRgb*)(u + (j << 2));
2309 *v = qRgba(qRed(*v), qGreen(*v), qBlue(*v) , pi->
m_opacity);
2312 painter->drawImage(r, *ima);
2316 QImage img(size, QImage::Format_ARGB32);
2317 for(
int i = 0; i < height; ++i)
2319 unsigned char* u = ima->scanLine(i);
2320 unsigned char* uu = img.scanLine(i);
2322 for(
int j = 0; j < width; ++j)
2324 QRgb* v = (QRgb*)(u + (j << 2));
2325 QRgb* uv = (QRgb*)(uu + (j << 2));
2327 *uv = qRgba(qRed(*v), qGreen(*v), qBlue(*v) , pi->
m_opacity);
2330 painter->drawImage(r, img);
2340 painter->drawPixmap(pos, t->pixmap());
2343 QSize size = t->pixmap().size();
2344 int width = size.width();
2345 int height = size.height();
2346 QImage ima = t->pixmap().toImage();
2348 if(ima.format() == QImage::Format_ARGB32)
2350 for(
int i = 0; i < height; ++i)
2352 unsigned char* u = ima.scanLine(i);
2353 for(
int j = 0; j < width; ++j)
2355 QRgb* v = (QRgb*)(u + (j << 2));
2357 *v = qRgba(255, 255, 255 , 0);
2359 *v = qRgba(qRed(*v), qGreen(*v), qBlue(*v) , t->
m_opacity);
2362 painter->drawImage(pos, ima);
2366 QImage img(size, QImage::Format_ARGB32);
2367 for(
int i = 0; i < height; ++i)
2369 unsigned char* u = ima.scanLine(i);
2370 unsigned char* uu = img.scanLine(i);
2372 for(
int j = 0; j < width; ++j)
2374 QRgb* v = (QRgb*)(u + (j << 2));
2375 QRgb* uv = (QRgb*)(uu + (j << 2));
2377 *uv = qRgba(255, 255, 255 , 0);
2379 *uv = qRgba(qRed(*v), qGreen(*v), qBlue(*v) , t->
m_opacity);
2382 painter->drawImage(pos, img);
2389 QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
2391 QList<QGraphicsItem*> list = m_animationScene->items();
2392 QList<QGraphicsItem*>::iterator it;
2394 for(it = list.begin(); it != list.end(); ++it)
2398 if(title.contains(titlecb))
2402 m_display->update();
2410 QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
2412 QList<QGraphicsItem*> list = m_animationScene->items();
2413 QList<QGraphicsItem*>::iterator it;
2415 for(it = list.begin(); it != list.end(); ++it)
2419 if(title.contains(titlecb))
2421 QPixmap pix = ai->pixmap();
2423 QPixmap pn(m_spd->m_ui->m_widthSpinBox->value(), m_spd->m_ui->m_heightSpinBox->value());
2424 pn.fill(Qt::transparent);
2425 if(pix.isNull() ==
false)
2429 if(file.isEmpty() ==
false)
2435 QPainter painter(&pn);
2436 painter.drawPixmap(pn.rect(), pf, pf.rect());
2440 m_spd->m_ui->m_iconPushButton->update();
2441 m_display->update();
2446 pn.fill(Qt::transparent);
2447 QPainter painter(&pn);
2449 painter.setBrush(b);
2452 painter.drawEllipse(QRect(1, 1, 18, 18));
2456 m_spd->m_ui->m_iconPushButton->update();
2458 m_display->update();
2466 QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
2468 QList<QGraphicsItem*> list = m_animationScene->items();
2469 QList<QGraphicsItem*>::iterator it;
2471 for(it = list.begin(); it != list.end(); ++it)
2475 if(title.contains(titlecb))
2477 QPixmap pix = ai->pixmap();
2478 QPixmap pn(m_spd->m_ui->m_widthSpinBox->value(), m_spd->m_ui->m_heightSpinBox->value());
2479 pn.fill(Qt::transparent);
2480 if(pix.isNull() ==
false)
2484 if(file.isEmpty() ==
false)
2490 QPainter painter(&pn);
2491 painter.drawPixmap(pn.rect(), pf, pf.rect());
2495 m_spd->m_ui->m_iconPushButton->update();
2496 m_display->update();
2501 QPainter painter(&pn);
2503 painter.setBrush(b);
2506 painter.drawEllipse(QRect(1, 1, 18, 18));
2508 m_spd->m_ui->m_iconPushButton->update();
2512 m_display->update();
2523 QDateTime qdatetimei(qdatei, qtimei);
2524 m_spd->m_ui->m_initialAnimationDateTimeEdit->setDateTime(qdatetimei);
2529 QDateTime qdatetimef(qdatef, qtimef);
2530 m_spd->m_ui->m_finalAnimationDateTimeEdit->setDateTime(qdatetimef);
2532 if(m_direction == QAbstractAnimation::Forward)
2534 if(m_spd->m_ui->m_forwardRadioButton->isChecked() ==
false)
2535 m_spd->m_ui->m_forwardRadioButton->toggle();
2539 m_spd->m_ui->m_loopCheckBox->setChecked(
true);
2541 m_spd->m_ui->m_goAndBackCheckBox->setChecked(
true);
2546 QDateTime t = m_spd->m_ui->m_initialAnimationDateTimeEdit->dateTime();
2547 te::dt::Date date(t.date().year(), t.date().month(), t.date().day());
2555 QDateTime t = m_spd->m_ui->m_finalAnimationDateTimeEdit->dateTime();
2556 te::dt::Date date(t.date().year(), t.date().month(), t.date().day());
2567 QDateTime qdatetime(qdate, qtime);
2568 m_spd->m_ui->m_initialAnimationDateTimeEdit->setDateTime(qdatetime);
2576 QDateTime qdatetime(qdate, qtime);
2577 m_spd->m_ui->m_finalAnimationDateTimeEdit->setDateTime(qdatetime);
2582 if(b==
false && m_spd->m_ui->m_propertyWidget->isHidden())
2584 if(b==
true && m_spd->m_ui->m_propertyWidget->isHidden()==
false)
2587 int h = m_spd->m_ui->m_propertyWidget->height();
2591 m_spd->m_ui->m_propertyWidget->hide();
2592 resize(width(), height()-h);
2596 m_spd->m_ui->m_propertyWidget->show();
2597 resize(width(), height()+h);
2606 QDateTime qdatetimei(qdatei, qtimei);
2607 QDateTime qdi = m_spd->m_ui->m_initialAnimationDateTimeEdit->dateTime();
2608 if(qdatetimei != qdi)
2614 QDateTime qdatetimef(qdatef, qtimef);
2615 QDateTime qdf = m_spd->m_ui->m_finalAnimationDateTimeEdit->dateTime();
2616 if(qdatetimef != qdf)
2619 if(m_spd->m_ui->m_forwardRadioButton->isChecked() && m_direction != QAbstractAnimation::Forward)
2621 if(m_spd->m_ui->m_forwardRadioButton->isChecked() ==
false && m_direction != QAbstractAnimation::Backward)
2623 if(m_spd->m_ui->m_loopCheckBox->isChecked() != m_loop)
2625 if(m_spd->m_ui->m_goAndBackCheckBox->isChecked() != m_goAndBack)
2633 if(m_direction == QAbstractAnimation::Forward)
2636 m_comingBack =
false;
2644 if(m_direction == QAbstractAnimation::Backward)
2647 m_comingBack =
false;
2660 if(m_goAndBack != b)
2665 m_comingBack =
false;
2676 if(ti > tf || ti == tf)
2678 QMessageBox::warning(
this,
"Time Extent Error",
"Initial time can not be larger than the end time!", QMessageBox::Ok);
2688 QDateTime qdatetimei(qdatei, qtimei);
2689 QDateTime qdi = m_spd->m_ui->m_initialAnimationDateTimeEdit->dateTime();
2692 t = m_temporalAnimationExtent.getFinalTimeInstant();
2695 QDateTime qdatetimef(qdatef, qtimef);
2696 QDateTime qdf = m_spd->m_ui->m_finalAnimationDateTimeEdit->dateTime();
2698 if(qdatetimei == qdi && qdatetimef == qdf)
2703 boost::posix_time::time_duration ndiff = nfTime - niTime;
2704 double ntotalSeconds = ndiff.total_seconds();
2706 boost::posix_time::time_duration diff = fTime - iTime;
2707 double totalSeconds = diff.total_seconds();
2708 double rel = m_duration / totalSeconds;
2710 int nduration = qRound(rel * ntotalSeconds);
2714 if(btinst >= niTime && btinst <= nfTime)
2716 boost::posix_time::time_duration d = btinst - niTime;
2717 double tot = d.total_seconds();
2718 m_currentTime = qRound(nduration * tot / ntotalSeconds);
2721 m_currentTime = nduration;
2723 int state = m_parallelAnimation->state();
2724 if(state == QAbstractAnimation::Running)
2725 onPlayToolButtonnClicked();
2727 QDateTime dt = m_ui->m_dateTimeEdit->dateTime();
2733 calculateSpatialExtent();
2735 m_duration = nduration;
2736 m_ui->m_durationSpinBox->setValue(m_duration);
2737 setDuration(m_duration);
2738 setDirection(m_direction);
2740 if(state == QAbstractAnimation::Running)
2742 onPlayToolButtonnClicked();
2743 m_parallelAnimation->setCurrentTime(m_currentTime);
2744 m_parallelAnimation->start();
2748 m_parallelAnimation->setCurrentTime(m_currentTime);
2749 m_parallelAnimation->start();
2750 if(state == QAbstractAnimation::Paused)
2751 m_parallelAnimation->pause();
2754 if(tp == m_temporalAnimationExtent)
2755 onDateTimeEditChanged(dt);
2786 QString titlecb = m_spd->m_ui->m_animationComboBox->currentText();
2788 QList<QGraphicsItem*> list = m_animationScene->items();
2789 QList<QGraphicsItem*>::iterator it;
2791 for(it = list.begin(); it != list.end(); ++it)
2795 if(title.contains(titlecb))
2798 m_spd->m_ui->m_opacitySpinBox->setValue(op);
2800 QString sini = getDateString(tini);
2802 QString sfim = getDateString(tfim);
2803 m_spd->m_ui->m_initialTimeLineEdit->setText(sini);
2804 m_spd->m_ui->m_finalTimeLineEdit->setText(sfim);
2806 adjustTrajectoryGroupBox(ai);
2816 QDateTime qdatetime(qdate, qtime);
2817 return qdatetime.toString(
"dd/MMM/yyyy hh:mm:ss");
2822 QPixmap pix = ai->pixmap();
2825 m_spd->m_ui->m_trajectoryGroupBox->setEnabled(
false);
2826 m_spd->m_ui->m_forwardColorPushButton->setPalette(QPalette(Qt::gray));
2827 m_spd->m_ui->m_forwardColorPushButton->update();
2828 m_spd->m_ui->m_backwardColorPushButton->setPalette(QPalette(Qt::gray));
2829 m_spd->m_ui->m_backwardColorPushButton->update();
2830 m_spd->m_ui->m_autoPanCheckBox->setChecked(
false);
2831 m_spd->m_ui->m_drawTrailCheckBox->setChecked(
false);
2835 m_spd->m_ui->m_trajectoryGroupBox->setEnabled(
true);
2837 m_spd->m_ui->m_forwardColorPushButton->setPalette(QPalette(ti->
m_forwardColor));
2838 m_spd->m_ui->m_forwardColorPushButton->update();
2839 m_spd->m_ui->m_backwardColorPushButton->setPalette(QPalette(ti->
m_backwardColor));
2840 m_spd->m_ui->m_backwardColorPushButton->update();
2842 m_spd->m_ui->m_panFactorDoubleSpinBox->setValue(ti->
m_panFactor);
2843 m_spd->m_ui->m_drawTrailCheckBox->setChecked(ti->
m_drawTrail);
2845 QPixmap pix = ti->pixmap();
2846 m_spd->m_ui->m_widthSpinBox->setValue(pix.width());
2847 m_spd->m_ui->m_heightSpinBox->setValue(pix.height());
2848 m_spd->m_ui->m_iconPushButton->update();
2866 QString file(fileName);
2867 int ind = file.indexOf(
"_");
2868 if(file.indexOf(
"_", ind+1) != -1)
2869 ind = file.indexOf(
"_", ind+1);
2870 file.remove(0, ind+1);
2871 QString ano(file), mes(file), dia(file), hour(file), min(file);
2872 ano.remove(4, ano.length()-4);
2874 mes.remove(2, mes.length()-2);
2876 dia.remove(2, dia.length()-2);
2878 hour.remove(2, hour.length()-2);
2880 min.remove(2, min.length()-2);
2882 te::dt::Date date(ano.toInt(), mes.toInt(), dia.toInt());
2889 QString title = m_spd->m_ui->m_animationComboBox->currentText();
2890 setAutomaticPan(title);
2896 QString file(path +
"/racc.ctl");
2897 FILE* fp = fopen(file.toStdString().c_str(),
"r");
2901 fread(buf, 2000,
sizeof(
char), fp);
2903 QString ss(QString(buf).simplified());
2906 if(!(ss.contains(
"undef ", Qt::CaseInsensitive) && ss.contains(
"title", Qt::CaseInsensitive) &&
2907 ss.contains(
"xdef", Qt::CaseInsensitive) && ss.contains(
"ydef", Qt::CaseInsensitive) &&
2908 ss.contains(
"linear", Qt::CaseInsensitive) && ss.contains(
"zdef", Qt::CaseInsensitive)))
2919 size_t pos = ss.indexOf(
"UNDEF ", Qt::CaseInsensitive) + strlen(
"UNDEF ");
2921 pos = ss.indexOf(
"TITLE", Qt::CaseInsensitive);
2923 pi->
m_undef = atoi(s.toStdString().c_str());
2927 pos = ss.indexOf(
"XDEF ", Qt::CaseInsensitive) + strlen(
"XDEF ");
2929 pos = ss.indexOf(
" ");
2931 pi->
m_ncols = atoi(s.toStdString().c_str());
2934 pos = ss.indexOf(
"LINEAR ", Qt::CaseInsensitive) + strlen(
"LINEAR ");
2936 pos = ss.indexOf(
" ");
2938 double llx = atof(s.toStdString().c_str()) - 360.;
2940 pos = ss.indexOf(
"YDEF ", Qt::CaseInsensitive);
2942 double resX = atof(s.toStdString().c_str());
2946 pos = ss.indexOf(
"YDEF ", Qt::CaseInsensitive) + strlen(
"YDEF ");
2948 pos = ss.indexOf(
" ");
2950 pi->
m_nlines = atoi(s.toStdString().c_str());
2953 pos = ss.indexOf(
"LINEAR ", Qt::CaseInsensitive) + strlen(
"LINEAR ");
2955 pos = ss.indexOf(
" ");
2957 double lly = atof(s.toStdString().c_str());
2959 pos = ss.indexOf(
"ZDEF ", Qt::CaseInsensitive);
2961 double resY = atof(s.toStdString().c_str());
2964 double w = (double)pi->
m_ncols * resX;
2965 double h = (
double)pi->
m_nlines * resY;
2973 std::vector<std::pair<int, QColor> > tab;
2975 tab.push_back(std::pair<int, QColor>(i+=3, QColor(2, 1, 201, 255)));
2976 tab.push_back(std::pair<int, QColor>(i+=3, QColor(1, 71, 254, 255)));
2977 tab.push_back(std::pair<int, QColor>(i+=3, QColor(3, 148, 250, 255)));
2978 tab.push_back(std::pair<int, QColor>(i+=3, QColor(5, 200, 251, 255)));
2979 tab.push_back(std::pair<int, QColor>(i+=3, QColor(2, 254, 233, 255)));
2980 tab.push_back(std::pair<int, QColor>(i+=3, QColor(1, 254, 151, 255)));
2981 tab.push_back(std::pair<int, QColor>(i+=3, QColor(2, 254, 4, 255)));
2982 tab.push_back(std::pair<int, QColor>(i+=3, QColor(99, 254, 2, 255)));
2983 tab.push_back(std::pair<int, QColor>(i+=3, QColor(200, 255, 1, 255)));
2984 tab.push_back(std::pair<int, QColor>(i+=3, QColor(237, 255, 0, 255)));
2985 tab.push_back(std::pair<int, QColor>(i+=3, QColor(251, 232, 2, 255)));
2986 tab.push_back(std::pair<int, QColor>(i+=3, QColor(254, 199, 2, 255)));
2987 tab.push_back(std::pair<int, QColor>(i+=3, QColor(252, 179, 2, 255)));
2988 tab.push_back(std::pair<int, QColor>(i+=3, QColor(254, 147, 4, 255)));
2989 tab.push_back(std::pair<int, QColor>(i+=3, QColor(253, 99, 2, 255)));
2990 tab.push_back(std::pair<int, QColor>(i+=3, QColor(254, 1, 2, 255)));
2991 tab.push_back(std::pair<int, QColor>(i+=3, QColor(254, 0, 49, 255)));
2992 tab.push_back(std::pair<int, QColor>(i+=3, QColor(255, 5, 1, 255)));
3000 QString file(path +
"/Prec5km.ctl");
3001 FILE* fp = fopen(file.toStdString().c_str(),
"r");
3005 fread(buf, 2000,
sizeof(
char), fp);
3007 QString ss(QString(buf).simplified());
3010 if(!(ss.contains(
"undef ", Qt::CaseInsensitive) && ss.contains(
"xdef", Qt::CaseInsensitive)
3011 && ss.contains(
"ydef", Qt::CaseInsensitive) && ss.contains(
"linear", Qt::CaseInsensitive)
3012 && ss.contains(
"zdef", Qt::CaseInsensitive)))
3023 size_t pos = ss.indexOf(
"undef ", Qt::CaseInsensitive) + strlen(
"undef ");
3025 pos = ss.indexOf(
"xdef", Qt::CaseInsensitive);
3027 pi->
m_undef = atof(s.toStdString().c_str());
3031 pos = ss.indexOf(
"xdef ", Qt::CaseInsensitive) + strlen(
"xdef ");
3033 pos = ss.indexOf(
" ");
3035 pi->
m_ncols = atoi(s.toStdString().c_str());
3038 pos = ss.indexOf(
"linear ", Qt::CaseInsensitive) + strlen(
"linear ");
3040 pos = ss.indexOf(
" ");
3042 double llx = atof(s.toStdString().c_str());
3044 pos = ss.indexOf(
"ydef ", Qt::CaseInsensitive);
3046 double resX = atof(s.toStdString().c_str());
3050 pos = ss.indexOf(
"ydef ", Qt::CaseInsensitive) + strlen(
"ydef ");
3052 pos = ss.indexOf(
" ");
3054 pi->
m_nlines = atoi(s.toStdString().c_str());
3057 pos = ss.indexOf(
"linear ", Qt::CaseInsensitive) + strlen(
"linear ");
3059 pos = ss.indexOf(
" ");
3061 double lly = atof(s.toStdString().c_str());
3063 pos = ss.indexOf(
"zdef ", Qt::CaseInsensitive);
3065 double resY = atof(s.toStdString().c_str());
3068 double w = (double)pi->
m_ncols * resX;
3069 double h = (
double)pi->
m_nlines * resY;
3077 std::vector<std::pair<int, QColor> > tab;
3079 tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 1, 201, 255)));
3080 tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 18, 213, 255)));
3081 tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 24, 220, 255)));
3082 tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 36, 227, 255)));
3083 tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 54, 240, 255)));
3084 tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 71, 254, 255)));
3085 tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 90, 252, 255)));
3086 tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 106, 251, 255)));
3087 tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 130, 253, 255)));
3088 tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 148, 250, 255)));
3089 tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 160, 250, 255)));
3090 tab.push_back(std::pair<int, QColor>(i+=1, QColor(4, 174, 250, 255)));
3091 tab.push_back(std::pair<int, QColor>(i+=1, QColor(4, 186, 250, 255)));
3092 tab.push_back(std::pair<int, QColor>(i+=1, QColor(5, 200, 251, 255)));
3093 tab.push_back(std::pair<int, QColor>(i+=1, QColor(5, 214, 246, 255)));
3094 tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 227, 241, 255)));
3095 tab.push_back(std::pair<int, QColor>(i+=1, QColor(3, 240, 237, 255)));
3096 tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 254, 233, 255)));
3097 tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 254, 212, 255)));
3098 tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 190, 255)));
3099 tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 170, 255)));
3100 tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 160, 255)));
3101 tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 151, 255)));
3102 tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 105, 255)));
3103 tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 72, 255)));
3104 tab.push_back(std::pair<int, QColor>(i+=1, QColor(1, 254, 37, 255)));
3105 tab.push_back(std::pair<int, QColor>(i+=1, QColor(2, 254, 4, 255)));
3106 tab.push_back(std::pair<int, QColor>(i+=1, QColor(25, 254, 4, 255)));
3107 tab.push_back(std::pair<int, QColor>(i+=1, QColor(56, 254, 3, 255)));
3108 tab.push_back(std::pair<int, QColor>(i+=1, QColor(71, 254, 3, 255)));
3109 tab.push_back(std::pair<int, QColor>(i+=1, QColor(99, 254, 2, 255)));
3110 tab.push_back(std::pair<int, QColor>(i+=1, QColor(125, 254, 2, 255)));
3111 tab.push_back(std::pair<int, QColor>(i+=1, QColor(150, 254, 2, 255)));
3112 tab.push_back(std::pair<int, QColor>(i+=1, QColor(175, 254, 2, 255)));
3113 tab.push_back(std::pair<int, QColor>(i+=1, QColor(200, 255, 1, 255)));
3114 tab.push_back(std::pair<int, QColor>(i+=1, QColor(209, 255, 1, 255)));
3115 tab.push_back(std::pair<int, QColor>(i+=1, QColor(218, 255, 1, 255)));
3116 tab.push_back(std::pair<int, QColor>(i+=1, QColor(229, 255, 1, 255)));
3117 tab.push_back(std::pair<int, QColor>(i+=1, QColor(237, 255, 0, 255)));
3118 tab.push_back(std::pair<int, QColor>(i+=1, QColor(240, 248, 0, 255)));
3119 tab.push_back(std::pair<int, QColor>(i+=1, QColor(244, 241, 0, 255)));
3120 tab.push_back(std::pair<int, QColor>(i+=1, QColor(250, 237, 0, 255)));
3121 tab.push_back(std::pair<int, QColor>(i+=1, QColor(251, 232, 2, 255)));
3122 tab.push_back(std::pair<int, QColor>(i+=1, QColor(251, 226, 2, 255)));
3123 tab.push_back(std::pair<int, QColor>(i+=1, QColor(252, 215, 2, 255)));
3124 tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 208, 2, 255)));
3125 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 199, 2, 255)));
3126 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 194, 2, 255)));
3127 tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 190, 2, 255)));
3128 tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 184, 2, 255)));
3129 tab.push_back(std::pair<int, QColor>(i+=1, QColor(252, 179, 2, 255)));
3130 tab.push_back(std::pair<int, QColor>(i+=1, QColor(252, 172, 2, 255)));
3131 tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 164, 2, 255)));
3132 tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 155, 2, 255)));
3133 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 147, 4, 255)));
3134 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 136, 4, 255)));
3135 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 125, 3, 255)));
3136 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 112, 3, 255)));
3137 tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 99, 2, 255)));
3138 tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 75, 2, 255)));
3139 tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 50, 2, 255)));
3140 tab.push_back(std::pair<int, QColor>(i+=1, QColor(253, 25, 2, 255)));
3141 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 1, 2, 255)));
3142 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 1, 12, 255)));
3143 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 1, 25, 255)));
3144 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 1, 37, 255)));
3145 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 0, 49, 255)));
3146 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 2, 37, 255)));
3147 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 3, 25, 255)));
3148 tab.push_back(std::pair<int, QColor>(i+=1, QColor(254, 4, 12, 255)));
3149 tab.push_back(std::pair<int, QColor>(i+=1, QColor(255, 5, 1, 255)));
3156 QString path = pi->
m_dir.absolutePath() +
"/";
3159 QString baseName = fi.baseName();
3162 if(pi->
m_suffix ==
".bin" && baseName ==
"racc")
3164 size_t nchars = pi->
m_ncols * 2;
3165 uchar* buf =
new uchar[nchars];
3166 FILE* fp = fopen(file.toStdString().c_str(),
"rb");
3168 ima->fill(Qt::transparent);
3172 for(
size_t j = 0; j < pi->
m_nlines; ++j)
3174 uchar* u = ima->scanLine(j);
3175 fread(buf, nchars,
sizeof(
char), fp);
3176 for(
size_t i = 0; i < pi->
m_ncols; i++)
3178 uc[0] = *(buf + (i<<1));
3179 uc[1] = *(buf + (1+(i<<1)));
3180 ushort b = *(ushort*)uc;
3184 QRgb* v = (QRgb*)(u + (i << 2));
3185 *v = qRgba(pi->
m_lut[b].red(), pi->
m_lut[b].green(), pi->
m_lut[b].blue(), 255);
3192 else if(pi->
m_suffix ==
".bin" && baseName.contains(
"Prec5km"))
3194 QString auxFile(file);
3195 size_t pos = auxFile.indexOf(baseName);
3196 auxFile.remove(0, pos);
3197 pos = auxFile.indexOf(
"_");
3198 size_t pp = auxFile.indexOf(
".bin");
3199 int offset = atoi(auxFile.mid(pos+1, pp-pos+1).toStdString().c_str());
3202 auxFile.remove(pos, auxFile.length()-pos);
3203 auxFile = path + auxFile + pi->
m_suffix;
3205 size_t nchars = pi->
m_ncols * 4;
3206 uchar* buf =
new uchar[nchars];
3207 FILE* fp = fopen(auxFile.toStdString().c_str(),
"rb");
3208 fseek(fp, offset, SEEK_SET);
3209 fseek(fp, 4, SEEK_CUR);
3211 ima->fill(Qt::transparent);
3215 for(
size_t j = 0; j < pi->
m_nlines; ++j)
3217 uchar* u = ima->scanLine(pi->
m_nlines-1-j);
3218 fread(buf, nchars,
sizeof(
char), fp);
3220 for(
size_t i = 0; i < pi->
m_ncols; i++)
3222 uc[0] = *(buf + (i<<2));
3223 uc[1] = *(buf + (1+(i<<2)));
3224 uc[2] = *(buf + (2+(i<<2)));
3225 uc[3] = *(buf + (3+(i<<2)));
3226 float b = *(
float*)uc;
3229 uchar a = (uchar) (b * 10000. + .5);
3230 QRgb* v = (QRgb*)(u + (i << 2));
3231 *v = qRgba(pi->
m_lut[a].red(), pi->
m_lut[a].green(), pi->
m_lut[a].blue(), 255);
3239 ima =
new QImage(file);
3248 QString d = dir.dirName();
3249 QStringList nameFilter;
3250 nameFilter.append(
"*.ctl");
3251 QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
3252 QString ctlFile = files.first();
3254 if(ctlFile ==
"racc.ctl")
3255 pi = getHidroMetadata(path);
3256 else if(ctlFile ==
"Prec5km.ctl")
3257 pi = getEtaMetadata(path);
3261 nameFilter.append(
"S11*.jpg");
3262 QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
3263 if(files.empty() ==
false && files.first().length() == 26)
3264 pi = getGoesMetadata(path);
3266 pi = getTemporalImageMetadata(path);
3274 PixmapItem* pi = getHidroCtlParameters(path);
3278 m_animationScene->addItem(pi);
3281 animation->setEasingCurve(QEasingCurve::Linear);
3282 m_parallelAnimation->addAnimation(animation);
3284 QStringList nameFilter;
3285 nameFilter.append(
"*.bin");
3287 QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
3288 size_t count = files.count();
3297 for(
size_t i = 0; i < count; ++i)
3299 QString f = files[i];
3300 t = getHidroTime(f);
3313 for(
size_t i = 0; i < count; ++i)
3316 pos -= QPointF(dw, dh);
3318 pos += QPointF(dw, dh);
3333 m_animationScene->addItem(pi);
3336 animation->setEasingCurve(QEasingCurve::Linear);
3337 m_parallelAnimation->addAnimation(animation);
3339 QStringList nameFilter;
3340 nameFilter.append(
"*.bin");
3342 QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
3343 size_t count = files.count();
3349 tf =
te::dt::TimeInstant(tf.getTimeInstant() + boost::posix_time::seconds(60*60*24*3 - 3600));
3355 for(
size_t i = 0; i < count; ++i)
3357 QString f = files[i];
3358 QFileInfo fi(path +
"/" + f);
3359 QString baseName = fi.baseName();
3363 tnext = getEtaTime(files[i+1]);
3368 while((t < tnext || t == tnext) && n <= 72)
3373 fname = path +
"/" + baseName +
"_" + sn +
"." + fi.suffix();
3378 size_t tsize = pi->
m_files.count();
3387 for(
size_t i = 0; i < tsize; ++i)
3390 pos -= QPointF(dw, dh);
3392 pos += QPointF(dw, dh);
3403 QString file(fileName);
3404 int ind = file.indexOf(
"racc.") + strlen(
"racc.");
3405 file.remove(0, ind);
3406 QString ano =
"20" + file.mid(0, 2);
3407 QString mes = file.mid(2, 2);
3408 QString dia = file.mid(4, 2);
3409 QString hour = file.mid(7, 2);
3410 QString min = file.mid(9, 2);
3412 te::dt::Date date(ano.toInt(), mes.toInt(), dia.toInt());
3419 QString file(fileName);
3420 int ind = file.indexOf(
"Prec5km") + strlen(
"Prec5km");
3421 file.remove(0, ind);
3422 QString ano = file.mid(0, 4);
3423 QString mes = file.mid(4, 2);
3424 QString dia = file.mid(6, 2);
3425 QString hour = file.mid(8, 2);
3427 te::dt::Date date(ano.toInt(), mes.toInt(), dia.toInt());
3434 PixmapItem* pi = getTemporalImageCtlParameters(path);
3438 m_animationScene->addItem(pi);
3441 animation->setEasingCurve(QEasingCurve::Linear);
3442 m_parallelAnimation->addAnimation(animation);
3444 QString suffix =
"." + pi->
m_suffix;
3445 QStringList nameFilter;
3446 nameFilter.append(
"*" + suffix);
3448 QStringList files = dir.entryList(nameFilter, QDir::Files, QDir::Name);
3449 size_t count = files.count();
3458 for(
size_t i = 0; i < count; ++i)
3460 QString f = files[i];
3462 t = getTemporalImageTime(f);
3472 for(
size_t i = 0; i < count; ++i)
3475 pos -= QPointF(w, h);
3477 pos += QPointF(w, h);
3487 QString file(path +
"/image.ctl");
3488 FILE* fp = fopen(file.toStdString().c_str(),
"r");
3492 fread(buf, 2000,
sizeof(
char), fp);
3494 QString ss(QString(buf).simplified());
3497 if(!(ss.contains(
"suffix ", Qt::CaseInsensitive) && ss.contains(
"undef", Qt::CaseInsensitive) &&
3498 ss.contains(
"srid", Qt::CaseInsensitive) && ss.contains(
"llx", Qt::CaseInsensitive) &&
3499 ss.contains(
"lly", Qt::CaseInsensitive) && ss.contains(
"urx", Qt::CaseInsensitive) &&
3500 ss.contains(
"ury", Qt::CaseInsensitive)))
3508 size_t pos = ss.indexOf(
"suffix ", Qt::CaseInsensitive) + strlen(
"suffix ");
3510 pos = ss.indexOf(
" undef", Qt::CaseInsensitive);
3516 pos = ss.indexOf(
"undef ", Qt::CaseInsensitive) + strlen(
"undef ");
3518 pos = ss.indexOf(
" srid", Qt::CaseInsensitive);
3520 pi->
m_undef = atof(s.toStdString().c_str());
3524 pos = ss.indexOf(
"srid ", Qt::CaseInsensitive) + strlen(
"srid ");
3526 pos = ss.indexOf(
" llx", Qt::CaseInsensitive);
3528 pi->
m_SRID = atoi(s.toStdString().c_str());
3532 pos = ss.indexOf(
"llx ", Qt::CaseInsensitive) + strlen(
"llx ");
3534 pos = ss.indexOf(
" lly", Qt::CaseInsensitive);
3536 double llx = atof(s.toStdString().c_str());
3540 pos = ss.indexOf(
"lly ", Qt::CaseInsensitive) + strlen(
"lly ");
3542 pos = ss.indexOf(
" urx", Qt::CaseInsensitive);
3544 double lly = atof(s.toStdString().c_str());
3548 pos = ss.indexOf(
"urx ", Qt::CaseInsensitive) + strlen(
"urx ");
3550 pos = ss.indexOf(
" ury", Qt::CaseInsensitive);
3552 double urx = atof(s.toStdString().c_str());
3556 pos = ss.indexOf(
"ury ", Qt::CaseInsensitive) + strlen(
"ury ");
3558 double ury = atof(ss.toStdString().c_str());
3560 double w = urx - llx;
3561 double h = ury - lly;
3569 QString file(fileName);
3570 int ind = file.indexOf(
"_") + strlen(
"_");
3571 file.remove(0, ind);
3572 QString ano = file.mid(0, 4);
3573 QString mes = file.mid(5, 2);
3574 QString dia = file.mid(8, 2);
3575 QString hour = file.mid(11, 2);
3576 QString min = file.mid(14, 2);
3577 QString sec = file.mid(17, 2);
3579 te::dt::Date date(ano.toInt(), mes.toInt(), dia.toInt());
const te::dt::DateTimePeriod * getTemporalExtent() const
It returns the temporal extent of the trajectory observations.
virtual const std::string & getTitle() const
It returns the layer title.
std::complex< double > times(std::complex< double > lhs, std::complex< double > rhs)
long getSeconds() const
It returns the seconds of a minute - from 0 to 59.
boost::gregorian::greg_year getYear() const
It returns the gregorian year.
double getWidth() const
It returns the envelope width.
boost::gregorian::greg_day getDay() const
It returns the gregorian day - from 1 to 31.
std::auto_ptr< te::st::TrajectoryDataSet > getTrajectoryDataset(te::common::TraverseType travType=te::common::FORWARDONLY) const
const boost::posix_time::ptime & getTimeInstant() const
It returns the boost time instant type.
A class to represent time instant.
This file contains include headers for the TerraLib ST memory module.
double m_llx
Lower left corner x-coordinate.
This file defines a class for a Animation Scene.
LineString is a curve with linear interpolation between points.
Date getDate() const
It returns the date associated to time instant.
A point with x and y coordinate values.
void setPoint(std::size_t i, const double &x, const double &y)
It sets the value of the specified point.
An Envelope defines a 2D rectangular region.
#define TE_UNKNOWN_SRS
A numeric value to represent a unknown SRS identification in TerraLib.
A base class for date data types.
std::auto_ptr< te::dt::DateTime > getTime() const
It returns the time pointed by the internal cursor.
TimeInstant getFinalTimeInstant() const
It gets the final time instant.
virtual int getSRID() const
It return the Spatial Reference System used by the Map Display.
TimeInstant getInitialTimeInstant() const
It gets the initial time instant.
An object that when created shows a cursor during its scope.
virtual const te::gm::Envelope & getExtent() const
It returns the world extent showned by the MapDisplay.
std::auto_ptr< te::gm::Geometry > getGeometry() const
It returns the geometry pointed by the internal cursor.
double m_lly
Lower left corner y-coordinate.
A class to represent a trajectory data set.
A class to represent time period.
This file defines a class for a Trajectory Animation.
const boost::posix_time::time_period & getTimePeriod() const
Assignment operator.
A class to represent time duration with nano-second/micro-second resolution.
This file defines a class for a Trajectory Item.
TimeDuration getTime() const
It returns the time duration associated to time instant.
A layer with reference to a dataset that contains trajectories.
This file defines a class for a Pixmap Item.
virtual int getSRID() const
It returns the Spatial Reference System ID associated to the Layer.
This file contains include headers for the TerraLib ST module.
void setPointN(std::size_t i, const Point &p)
It sets the value of the specified point to this new one.
long getMinutes() const
It returns the minutes of a hour - from 0 to 59.
This file contains include headers for the Data Access module of TerraLib.
virtual AbstractData * clone() const =0
It returns a clone of this object.
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
void transform(int oldsrid, int newsrid)
It will transform the coordinates of the Envelope from the old SRS to the new one.
std::size_t size() const
It returns the size of the trajectory observation set.
double getHeight() const
It returns the envelope height.
boost::gregorian::greg_month getMonth() const
It returns the gregorian month - from 1 to 12.
bool isValid() const
It tells if the rectangle is valid or not.
long getHours() const
It returns the hours of a day - from 0 to 23.
A layer with a reference to an TrajectoryDataSet.