9#include "AbstractPointItem.h"
16#include "CnetDisplayProperties.h"
17#include "ControlMeasure.h"
18#include "ControlNet.h"
19#include "ControlPoint.h"
20#include "IException.h"
23#include "TableColumn.h"
24#include "TableColumnList.h"
28 QString AbstractPointItem::getColumnName(Column col) {
35 return "Chooser Name";
45 return "Adjusted SP Lat";
47 return "Adjusted SP Lon";
48 case AdjustedSPRadius:
49 return "Adjusted SP Radius";
50 case AdjustedSPLatSigma:
51 return "Adjusted SP Lat Sigma";
52 case AdjustedSPLonSigma:
53 return "Adjusted SP Lon Sigma";
54 case AdjustedSPRadiusSigma:
55 return "Adjusted SP Radius Sigma";
57 return "A Priori SP Lat";
59 return "A Priori SP Lon";
61 return "A Priori SP Radius";
62 case APrioriSPLatSigma:
63 return "A Priori SP Lat Sigma";
64 case APrioriSPLonSigma:
65 return "A Priori SP Lon Sigma";
66 case APrioriSPRadiusSigma:
67 return "A Priori SP Radius Sigma";
69 return "A Priori SP Source";
70 case APrioriSPSourceFile:
71 return "A Priori SP Source File";
72 case APrioriRadiusSource:
73 return "A Priori Radius Source";
74 case APrioriRadiusSourceFile:
75 return "A Priori Radius Source File";
77 return "Jigsaw Rejected";
84 AbstractPointItem::Column AbstractPointItem::getColumn(QString columnTitle) {
85 for (
int i = 0; i < COLS; i++) {
86 if (columnTitle == getColumnName((Column)i))
90 QString msg =
"Column title [" + columnTitle +
"] does not match any of "
91 "the defined column types";
96 TableColumnList *AbstractPointItem::createColumns() {
97 TableColumnList *columnList =
new TableColumnList;
99 columnList->append(
new TableColumn(getColumnName(Id),
false,
false));
101 new TableColumn(getColumnName(PointType),
false,
false));
103 new TableColumn(getColumnName(ChooserName),
false,
false));
105 new TableColumn(getColumnName(DateTime),
true,
false));
107 new TableColumn(getColumnName(EditLock),
false,
false));
109 new TableColumn(getColumnName(Ignored),
false,
true));
111 new TableColumn(getColumnName(Reference),
false,
false));
113 new TableColumn(getColumnName(AdjustedSPLat),
true,
false));
115 new TableColumn(getColumnName(AdjustedSPLon),
true,
false));
117 new TableColumn(getColumnName(AdjustedSPRadius),
true,
false));
119 new TableColumn(getColumnName(AdjustedSPLatSigma),
true,
false));
121 new TableColumn(getColumnName(AdjustedSPLonSigma),
true,
false));
123 new TableColumn(getColumnName(AdjustedSPRadiusSigma),
true,
false));
125 new TableColumn(getColumnName(APrioriSPLat),
false,
false));
127 new TableColumn(getColumnName(APrioriSPLon),
false,
false));
129 new TableColumn(getColumnName(APrioriSPRadius),
false,
false));
131 new TableColumn(getColumnName(APrioriSPLatSigma),
false,
false));
133 new TableColumn(getColumnName(APrioriSPLonSigma),
false,
false));
135 new TableColumn(getColumnName(APrioriSPRadiusSigma),
false,
false));
137 new TableColumn(getColumnName(APrioriSPSource),
false,
false));
139 new TableColumn(getColumnName(APrioriSPSourceFile),
false,
false));
141 new TableColumn(getColumnName(APrioriRadiusSource),
false,
false));
142 columnList->append(
new TableColumn(
143 getColumnName(APrioriRadiusSourceFile),
false,
false));
145 new TableColumn(getColumnName(JigsawRejected),
true,
false));
151 AbstractPointItem::AbstractPointItem(ControlPoint *cp,
152 int avgCharWidth, AbstractTreeItem *parent)
153 : AbstractTreeItem(parent) {
156 calcDataWidth(avgCharWidth);
158 connect(m_point, SIGNAL(destroyed(
QObject *)),
this, SLOT(sourceDeleted()));
162 AbstractPointItem::~AbstractPointItem() {
167 QVariant AbstractPointItem::getData()
const {
168 return getData(getColumnName(Id));
172 QVariant AbstractPointItem::getData(QString columnTitle)
const {
174 Column column = getColumn(columnTitle);
176 switch ((Column) column) {
178 return QVariant((QString)m_point->GetId());
180 return QVariant((QString)m_point->GetPointTypeString());
182 return QVariant((QString)m_point->GetChooserName());
186 return QVariant((QString)m_point->GetDateTime());
188 if (m_point->IsEditLocked())
189 return QVariant(
"Yes");
191 return QVariant(
"No");
194 if (m_point->IsIgnored())
195 return QVariant(
"Yes");
197 return QVariant(
"No");
199 if (m_point->GetNumMeasures())
201 CnetDisplayProperties::getInstance()->getImageName(
202 (QString) m_point->GetRefMeasure()->GetCubeSerialNumber()));
207 m_point->GetAdjustedSurfacePoint().GetLatitude().degrees());
210 m_point->GetAdjustedSurfacePoint().GetLongitude().degrees());
211 case AdjustedSPRadius:
213 m_point->GetAdjustedSurfacePoint().GetLocalRadius().meters());
214 case AdjustedSPLatSigma:
216 m_point->GetAdjustedSurfacePoint().
217 GetLatSigmaDistance().meters());
218 case AdjustedSPLonSigma:
220 m_point->GetAdjustedSurfacePoint().
221 GetLonSigmaDistance().meters());
222 case AdjustedSPRadiusSigma:
224 m_point->GetAdjustedSurfacePoint().
225 GetLocalRadiusSigma().meters());
228 m_point->GetAprioriSurfacePoint().GetLatitude().degrees());
231 m_point->GetAprioriSurfacePoint().GetLongitude().degrees());
232 case APrioriSPRadius:
234 m_point->GetAprioriSurfacePoint().GetLocalRadius().meters());
235 case APrioriSPLatSigma:
237 m_point->GetAprioriSurfacePoint().
238 GetLatSigmaDistance().meters());
239 case APrioriSPLonSigma:
241 m_point->GetAprioriSurfacePoint().
242 GetLonSigmaDistance().meters());
243 case APrioriSPRadiusSigma:
245 m_point->GetAprioriSurfacePoint().
246 GetLocalRadiusSigma().meters());
247 case APrioriSPSource:
248 return QVariant((QString)m_point->GetSurfacePointSourceString());
249 case APrioriSPSourceFile:
250 return QVariant((QString)m_point->GetAprioriSurfacePointSourceFile());
251 case APrioriRadiusSource:
252 return QVariant((QString)m_point->GetRadiusSourceString());
253 case APrioriRadiusSourceFile:
254 return QVariant((QString)m_point->GetAprioriRadiusSourceFile());
256 if (m_point->IsRejected())
257 return QVariant(
"Yes");
259 return QVariant(
"No");
267 void AbstractPointItem::setData(QString
const &columnTitle,
268 QString
const &newData) {
270 Column column = getColumn(columnTitle);
272 switch ((Column) column) {
274 m_point->SetId(newData);
277 m_point->SetType(m_point->StringToPointType(newData));
280 m_point->SetChooserName(newData);
283 m_point->SetDateTime(newData);
286 if (newData ==
"Yes")
287 m_point->SetEditLock(
true);
289 m_point->SetEditLock(
false);
292 m_point->SetIgnored(newData ==
"Yes");
295 m_point->SetRefMeasure(newData);
298 m_point->SetAdjustedSurfacePoint(SurfacePoint(
299 Latitude(catchNull(newData), Angle::Degrees),
300 m_point->GetAdjustedSurfacePoint().GetLongitude(),
301 m_point->GetAdjustedSurfacePoint().GetLocalRadius()));
304 m_point->SetAdjustedSurfacePoint(SurfacePoint(
305 m_point->GetAdjustedSurfacePoint().GetLatitude(),
306 Longitude(catchNull(newData), Angle::Degrees),
307 m_point->GetAdjustedSurfacePoint().GetLocalRadius()));
309 case AdjustedSPRadius:
310 m_point->SetAdjustedSurfacePoint(SurfacePoint(
311 m_point->GetAdjustedSurfacePoint().GetLatitude(),
312 m_point->GetAdjustedSurfacePoint().GetLongitude(),
313 Distance(catchNull(newData), Distance::Meters)));
315 case AdjustedSPLatSigma: {
316 QString msg =
"Cannot set adjusted surface point latitude sigma";
317 throw IException(IException::Programmer, msg, _FILEINFO_);
320 case AdjustedSPLonSigma: {
321 QString msg =
"Cannot set adjusted surface point longitude sigma";
322 throw IException(IException::Programmer, msg, _FILEINFO_);
325 case AdjustedSPRadiusSigma: {
326 QString msg =
"Cannot set adjusted surface point radius sigma";
327 throw IException(IException::Programmer, msg, _FILEINFO_);
331 Latitude newLat(catchNull(newData), Angle::Degrees);
332 SurfacePoint newSurfacePoint(prepareSurfacePoint(newLat,
333 m_point->GetAprioriSurfacePoint()));
335 newSurfacePoint.SetSphericalCoordinates(newLat,
336 newSurfacePoint.GetLongitude(),
337 newSurfacePoint.GetLocalRadius());
338 m_point->SetAprioriSurfacePoint(newSurfacePoint);
342 Longitude newLon(catchNull(newData), Angle::Degrees);
343 SurfacePoint newSurfacePoint(prepareSurfacePoint(newLon,
344 m_point->GetAprioriSurfacePoint()));
346 newSurfacePoint.SetSphericalCoordinates(
347 newSurfacePoint.GetLatitude(),
349 newSurfacePoint.GetLocalRadius());
350 m_point->SetAprioriSurfacePoint(newSurfacePoint);
353 case APrioriSPRadius: {
354 Distance newRadius(catchNull(newData), Distance::Meters);
355 SurfacePoint newSurfacePoint(prepareSurfacePoint(newRadius,
356 m_point->GetAprioriSurfacePoint()));
358 newSurfacePoint.SetSphericalCoordinates(
359 newSurfacePoint.GetLatitude(),
360 newSurfacePoint.GetLongitude(),
362 m_point->SetAprioriSurfacePoint(newSurfacePoint);
365 case APrioriSPLatSigma: {
366 Distance newSigma(catchNull(newData), Distance::Meters);
367 SurfacePoint newSurfacePoint(prepareSigmas(newSigma,
368 m_point->GetAprioriSurfacePoint()));
370 newSurfacePoint.SetSphericalSigmasDistance(
371 newSigma, newSurfacePoint.GetLonSigmaDistance(),
372 newSurfacePoint.GetLocalRadiusSigma());
374 m_point->SetAprioriSurfacePoint(newSurfacePoint);
377 case APrioriSPLonSigma: {
378 Distance newSigma(catchNull(newData), Distance::Meters);
379 SurfacePoint newSurfacePoint(prepareSigmas(newSigma,
380 m_point->GetAprioriSurfacePoint()));
382 newSurfacePoint.SetSphericalSigmasDistance(
383 newSurfacePoint.GetLatSigmaDistance(), newSigma,
384 newSurfacePoint.GetLocalRadiusSigma());
386 m_point->SetAprioriSurfacePoint(newSurfacePoint);
389 case APrioriSPRadiusSigma: {
390 Distance newSigma(catchNull(newData), Distance::Meters);
391 SurfacePoint newSurfacePoint(prepareSigmas(newSigma,
392 m_point->GetAprioriSurfacePoint()));
394 newSurfacePoint.SetSphericalSigmasDistance(
395 newSurfacePoint.GetLatSigmaDistance(),
396 newSurfacePoint.GetLonSigmaDistance(),
399 m_point->SetAprioriSurfacePoint(newSurfacePoint);
402 case APrioriSPSource:
403 m_point->SetAprioriSurfacePointSource(
404 m_point->StringToSurfacePointSource(newData));
406 case APrioriSPSourceFile:
407 m_point->SetAprioriSurfacePointSourceFile(newData);
409 case APrioriRadiusSource:
410 m_point->SetAprioriRadiusSource(
411 m_point->StringToRadiusSource(newData));
413 case APrioriRadiusSourceFile:
414 m_point->SetAprioriRadiusSourceFile(newData);
427 bool AbstractPointItem::isDataEditable(QString columnTitle)
const {
429 if (m_point->IsEditLocked()) {
430 if (getColumn(columnTitle) == EditLock)
441 void AbstractPointItem::deleteSource() {
443 if (m_point->IsEditLocked()) {
444 QString msg =
"Point [" + getFormattedData() +
"] is edit locked and "
446 throw IException(IException::User, msg, _FILEINFO_);
448 else if (m_point->GetNumLockedMeasures() > 0) {
449 QString msg =
"Point [" + getFormattedData() +
"] has at least one "
450 "edit locked measure and cannot be deleted";
451 throw IException(IException::User, msg, _FILEINFO_);
454 ControlPoint *tempPoint = m_point;
456 tempPoint->Parent()->DeletePoint(tempPoint);
461 AbstractTreeItem::InternalPointerType AbstractPointItem::getPointerType()
const {
462 return AbstractTreeItem::Point;
466 void *AbstractPointItem::getPointer()
const {
471 bool AbstractPointItem::hasPoint(ControlPoint *p)
const {
475 void AbstractPointItem::sourceDeleted() {
480 SurfacePoint AbstractPointItem::prepareSigmas(Distance newSigma,
481 SurfacePoint surfacePoint) {
482 const Distance free(10000, Distance::Meters);
483 Distance latSigDist = surfacePoint.GetLatSigmaDistance();
484 Distance lonSigDist = surfacePoint.GetLonSigmaDistance();
485 Distance radiusSigDist = surfacePoint.GetLocalRadiusSigma();
487 if (newSigma.isValid()) {
488 if (!latSigDist.isValid())
490 if (!lonSigDist.isValid())
492 if (!radiusSigDist.isValid())
493 radiusSigDist = free;
496 latSigDist = Distance();
497 lonSigDist = Distance();
498 radiusSigDist = Distance();
501 surfacePoint.SetSphericalSigmasDistance(
502 latSigDist, lonSigDist, radiusSigDist);
507 SurfacePoint AbstractPointItem::prepareSurfacePoint(Latitude newLat,
508 SurfacePoint surfacePoint) {
509 if (newLat.isValid()) {
510 surfacePoint = prepareSurfacePoint(surfacePoint);
513 surfacePoint.SetSphericalCoordinates(Latitude(), Longitude(),
521 SurfacePoint AbstractPointItem::prepareSurfacePoint(Longitude newLon,
522 SurfacePoint surfacePoint) {
523 if (newLon.isValid()) {
524 surfacePoint = prepareSurfacePoint(surfacePoint);
527 surfacePoint.SetSphericalCoordinates(Latitude(), Longitude(),
535 SurfacePoint AbstractPointItem::prepareSurfacePoint(
536 Distance newRadius, SurfacePoint surfacePoint) {
537 if (newRadius.isValid()) {
538 surfacePoint = prepareSurfacePoint(surfacePoint);
541 surfacePoint.SetSphericalCoordinates(Latitude(), Longitude(),
549 SurfacePoint AbstractPointItem::prepareSurfacePoint(
550 SurfacePoint surfacePoint) {
551 Latitude lat = surfacePoint.GetLatitude();
552 Longitude lon = surfacePoint.GetLongitude();
553 Distance radius = surfacePoint.GetLocalRadius();
556 lat = Latitude(0, Angle::Degrees);
558 lon = Longitude(0, Angle::Degrees);
559 if (!radius.isValid())
560 radius = Distance(10000, Distance::Meters);
562 surfacePoint.SetSphericalCoordinates(lat, lon, radius);
@ Programmer
This error is for when a programmer made an API call that was illegal.
This is free and unencumbered software released into the public domain.