Isis 3 Programmer Reference
MeasureCountFilter.cpp
1 #include "IsisDebug.h"
2 
3 #include "MeasureCountFilter.h"
4 
5 #include <iostream>
6 
7 #include <QButtonGroup>
8 #include <QFont>
9 #include <QHBoxLayout>
10 #include <QLabel>
11 #include <QLineEdit>
12 #include <QMargins>
13 #include <QPair>
14 #include <QRadioButton>
15 #include <QSpinBox>
16 #include <QString>
17 
18 #include "ControlMeasure.h"
19 #include "ControlNet.h"
20 #include "ControlPoint.h"
21 
22 
23 namespace Isis {
24  MeasureCountFilter::MeasureCountFilter(
25  AbstractFilter::FilterEffectivenessFlag flag,
26  int minimumForSuccess) : AbstractFilter(flag, minimumForSuccess) {
27  init();
28  createWidget();
29  }
30 
31 
32  MeasureCountFilter::MeasureCountFilter(const MeasureCountFilter &other) : AbstractFilter(other) {
33  init();
34  createWidget();
35 
36  m_count = other.m_count;
37  m_minimum = other.m_minimum;
38  m_countSpinBox->setValue(other.m_countSpinBox->value());
39  m_minMaxGroup->button(other.m_minMaxGroup->checkedId())->click();
40  }
41 
42 
43 
44  MeasureCountFilter::~MeasureCountFilter() {
45  }
46 
47 
48  void MeasureCountFilter::init() {
49  m_minMaxGroup = NULL;
50  m_countSpinBox = NULL;
51  m_count = 0;
52  m_minimum = true;
53  }
54 
55 
56  void MeasureCountFilter::createWidget() {
57  QFont minMaxFont("SansSerif", 9);
58  QRadioButton *minButton = new QRadioButton("Minimum");
59  minButton->setFont(minMaxFont);
60  QRadioButton *maxButton = new QRadioButton("Maximum");
61  maxButton->setFont(minMaxFont);
62 
63  m_minMaxGroup = new QButtonGroup;
64  connect(m_minMaxGroup, SIGNAL(buttonClicked(int)),
65  this, SLOT(updateMinMax(int)));
66  m_minMaxGroup->addButton(minButton, 0);
67  m_minMaxGroup->addButton(maxButton, 1);
68 
69  minButton->click();
70 
71  m_countSpinBox = new QSpinBox;
72  m_countSpinBox->setRange(0, std::numeric_limits< int >::max());
73  m_countSpinBox->setValue(m_count);
74  connect(m_countSpinBox, SIGNAL(valueChanged(int)),
75  this, SLOT(updateMeasureCount(int)));
76 
77  // hide inclusive and exclusive buttons,
78  // and add spinbox for min measure m_count
79  getInclusiveExclusiveLayout()->itemAt(0)->widget()->setVisible(false);
80  getInclusiveExclusiveLayout()->itemAt(1)->widget()->setVisible(false);
81  getInclusiveExclusiveLayout()->addWidget(minButton);
82  getInclusiveExclusiveLayout()->addWidget(maxButton);
83  getInclusiveExclusiveLayout()->addSpacing(8);
84  getInclusiveExclusiveLayout()->addWidget(m_countSpinBox);
85  }
86 
87 
88  bool MeasureCountFilter::evaluate(const QPair<QString, ControlNet *> *imageAndNet) const {
89  return AbstractFilter::evaluateImageFromPointFilter(imageAndNet);
90  }
91 
92 
93  bool MeasureCountFilter::evaluate(const ControlPoint *point) const {
94  return (point->getMeasures().size() >= m_count && m_minimum) ||
95  (point->getMeasures().size() <= m_count && !m_minimum);
96  }
97 
98 
99  bool MeasureCountFilter::evaluate(const ControlMeasure *measure) const {
100  return true;
101  }
102 
103 
104  AbstractFilter *MeasureCountFilter::clone() const {
105  return new MeasureCountFilter(*this);
106  }
107 
108 
109  QString MeasureCountFilter::getImageDescription() const {
110  QString description = AbstractFilter::getImageDescription();
111 
112  if (getMinForSuccess() == 1) {
113  description += "point that ";
114 
115  if (!inclusive())
116  description += "doesn't have";
117 
118  description += "has ";
119  }
120  else {
121  description += "points that ";
122 
123  if (!inclusive())
124  description += "don't ";
125 
126  description += "have ";
127  }
128 
129  description += "at ";
130 
131  if (m_minimum)
132  description += "least ";
133  else
134  description += "most ";
135 
136  description += QString::number(m_count) + " measures";
137 
138  return description;
139  }
140 
141 
142  QString MeasureCountFilter::getPointDescription() const {
143  QString description;
144 
145  if (!inclusive())
146  description = "don't ";
147 
148  description = "have at ";
149 
150  if (m_minimum)
151  description += "least ";
152  else
153  description += "most ";
154 
155  description += QString::number(m_count) + " measures";
156 
157  return description;
158  }
159 
160 
161  void MeasureCountFilter::updateMinMax(int buttonId) {
162  m_minimum = (buttonId == 0);
163  emit filterChanged();
164  }
165 
166 
167  void MeasureCountFilter::updateMeasureCount(int newCount) {
168  m_count = newCount;
169  emit filterChanged();
170  }
171 }
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31