1#include "MosaicFindTool.h"
4#include <QDoubleValidator>
5#include <QGraphicsEllipseItem>
6#include <QGraphicsScene>
15#include "FindSpotGraphicsItem.h"
16#include "MosaicGraphicsView.h"
17#include "MosaicSceneWidget.h"
18#include "Projection.h"
19#include "TProjection.h"
20#include "PvlKeyword.h"
40 void MosaicFindTool::getUserGroundPoint() {
45 QValidator::State validLat =
47 if(validLat != QValidator::Acceptable) {
48 QMessageBox::warning(getWidget(),
"Error",
49 "Latitude value must be in the range -90 to 90",
50 QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
56 QValidator::State validLon =
58 if(validLon != QValidator::Acceptable) {
59 QMessageBox::warning(getWidget(),
"Error",
60 "Longitude value must be a double",
61 QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
65 double lat = IString(latitude.toStdString()).ToDouble();
66 double lon = IString(longitude.toStdString()).ToDouble();
68 Projection *projection = getWidget()->getProjection();
72 TProjection *tproj = (TProjection *) projection;
73 if (tproj->SetGround(lat, lon)) {
74 QPointF scenePos(projection->XCoord(), -1 * projection->YCoord());
75 QRectF sceneRect(getWidget()->getView()->sceneRect());
77 if (sceneRect.contains(scenePos)) {
78 if(p_findSpot != NULL) {
82 p_findSpot =
new FindSpotGraphicsItem(scenePos, getWidget());
84 getWidget()->getScene()->addItem(p_findSpot);
85 getWidget()->getView()->centerOn(scenePos);
88 QString message =
"Lat/Lon not within this view.";
89 QMessageBox::information(getWidget(),
"Point Not Found",
90 message, QMessageBox::Ok);
107 p_action->setIcon(
getIcon(
"find.png"));
108 p_action->setToolTip(
"Find (f)");
109 p_action->setShortcut(Qt::Key_F);
111 "<b>Function:</b> Find a specific latitude/longitude on the mosaic "
113 "This tool allows you to type in a latitude and longitude, in the "
114 "projection's native units, and that point will be centered and given "
115 "a red dot on the mosaic scene. Alternatively, you can <b>click</b> on "
116 "the mosaic scene and it will give you the latitude and longitude values "
117 "along with drawing the red dot."
118 "<p><b>Shortcut:</b> f</p> ";
119 p_action->setWhatsThis(text);
126 p_latLineEdit->setValidator(
new QDoubleValidator(-90.0, 90.0, 99,
this));
131 QLabel *latLabel =
new QLabel(
"Latitude");
132 QLabel *lonLabel =
new QLabel(
"Longitude");
135 QPushButton *okButton =
new QPushButton(
"Go to Point");
136 connect(okButton, SIGNAL(clicked()),
this, SLOT(getUserGroundPoint()));
138 QPushButton *clearButton =
new QPushButton(
"Clear Point");
139 connect(clearButton, SIGNAL(clicked()),
this, SLOT(clearPoint()));
142 QHBoxLayout *actionLayout =
new QHBoxLayout();
143 actionLayout->addWidget(latLabel);
145 actionLayout->addWidget(lonLabel);
147 actionLayout->addWidget(okButton);
148 actionLayout->addWidget(clearButton);
149 actionLayout->addStretch(1);
150 actionLayout->setMargin(0);
153 toolBarWidget->setLayout(actionLayout);
155 return toolBarWidget;
170 PvlObject MosaicFindTool::toPvl()
const {
181 void MosaicFindTool::fromPvl(
const PvlObject &obj) {
184 if(
toBool(obj[
"Visible"][0])) {
185 getUserGroundPoint();
190 QString MosaicFindTool::projectPvlObjectName()
const {
191 return "MosaicFindTool";
209 void MosaicFindTool::mouseButtonRelease(QPointF mouseLoc, Qt::MouseButton s) {
213 if(s == Qt::LeftButton) {
214 Projection *proj = getWidget()->getProjection();
219 if (tproj && getWidget()->getView()->sceneRect().contains(mouseLoc)) {
220 if (tproj->SetCoordinate(mouseLoc.x(), -1 * mouseLoc.y())) {
221 if (p_findSpot != NULL) {
225 p_findSpot =
new FindSpotGraphicsItem(mouseLoc, getWidget());
227 getWidget()->getScene()->addItem(p_findSpot);
229 p_latLineEdit->setText(QString::number(tproj->Latitude(),
'g', 10));
230 p_lonLineEdit->setText(QString::number(tproj->Longitude(),
'g', 10));
242 void MosaicFindTool::clearPoint() {
243 if(p_findSpot != NULL) {
244 getWidget()->getScene()->removeItem(p_findSpot);
Base class for Map Projections.
ProjectionType
This enum defines the subclasses of Projection supported in Isis.
@ Triaxial
These projections are used to map triaxial and irregular-shaped bodies.
ProjectionType projectionType() const
Returns an enum value for the projection type.
A single keyword-value pair.
Contains Pvl Groups and Pvl Objects.
Base class for Map TProjections.
This is free and unencumbered software released into the public domain.
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
bool toBool(const QString &string)
Global function to convert from a string to a boolean.