74 std::vector<DataMetricPtr> MetricManager::getAllMetrics()
76 std::vector<DataMetricPtr> retval;
78 for (std::map<QString, DataPtr>::iterator iter=all.begin(); iter!=all.end(); ++iter)
82 retval.push_back(metric);
89 mSelection = selection;
94 mActiveLandmark = uid;
104 Vector3D p_r = metric->getRefCoord();;
105 this->setManualToolPosition(p_r);
108 void MetricManager::setManualToolPosition(
Vector3D p_r)
111 Vector3D p_pr = rMpr.inv().coord(p_r);
115 Vector3D offset = tool->get_prMt().vector(
Vector3D(0, 0, tool->getTooltipOffset()));
117 p_r = rMpr.coord(p_pr);
128 p1->get_rMd_History()->setParentSpace(
"reference");
130 p1->setCoordinate(point);
142 this->addPointInDefaultPosition();
149 return this->addPoint(p_ref, ref);
161 frame->setSpace(ref);
162 frame->setFrame(rMt);
164 this->installNewMetric(frame);
175 frame->setSpace(ref);
176 frame->setFrame(rMt);
178 frame->setToolOffset(
trackingService()->getActiveTool()->getTooltipOffset());
180 this->installNewMetric(frame);
188 std::vector<DataPtr> args = this->getSpecifiedNumberOfValidArguments(p1->getArguments());
189 for (
unsigned i=0; i<args.size(); ++i)
190 p1->getArguments()->set(i, args[i]);
192 this->installNewMetric(p1);
199 std::vector<DataPtr> MetricManager::refinePointArguments(std::vector<DataPtr> args,
unsigned argNo)
203 for (
unsigned i=0; i<args.size();)
205 if (args.size() <= argNo)
207 if (!mSelection.count(args[i]->getUid()))
208 args.erase(args.begin()+i);
213 while (args.size() > argNo)
214 args.erase(args.begin());
216 while (args.size() < argNo)
231 std::vector<DataPtr> args = this->getSpecifiedNumberOfValidArguments(d0->getArguments());
232 for (
unsigned i=0; i<args.size(); ++i)
233 d0->getArguments()->set(i, args[i]);
235 this->installNewMetric(d0);
244 std::vector<DataPtr> args = this->getSpecifiedNumberOfValidArguments(d0->getArguments(), 3);
245 d0->getArguments()->set(0, args[0]);
246 d0->getArguments()->set(1, args[1]);
247 d0->getArguments()->set(2, args[1]);
248 d0->getArguments()->set(3, args[2]);
250 this->installNewMetric(d0);
257 std::vector<DataMetricPtr> metrics = this->getAllMetrics();
259 std::vector<DataPtr> args;
260 for (
unsigned i=0; i<metrics.size(); ++i)
262 if (arguments->validArgument(metrics[i]))
263 args.push_back(metrics[i]);
266 if (numberOfRequiredArguments<0)
267 numberOfRequiredArguments = arguments->getCount();
268 args = this->refinePointArguments(args, numberOfRequiredArguments);
277 std::vector<DataPtr> args = this->getSpecifiedNumberOfValidArguments(d0->getArguments());
278 d0->getArguments()->set(0, args[0]);
280 this->installNewMetric(d0);
287 std::vector<DataPtr> args = this->getSpecifiedNumberOfValidArguments(d0->getArguments());
288 d0->getArguments()->set(0, args[0]);
289 d0->getArguments()->set(1, args[1]);
291 this->installNewMetric(d0);
298 viewService()->getGroup(0)->addData(metric->getUid());
306 reportDebug(
"No reference tool, cannot load reference points into the pointsampler");
310 std::map<int, Vector3D> referencePoints_s = refTool->getReferencePoints();
311 if(referencePoints_s.empty())
313 reportWarning(
"No referenceppoints in reference tool "+refTool->getName());
320 std::map<int, Vector3D>::iterator it = referencePoints_s.begin();
321 for(; it != referencePoints_s.end(); ++it)
331 QFile file(filename);
332 if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
336 std::map<QString, DataPtr>::iterator iter;
337 for (iter = dataMap.begin(); iter != dataMap.end(); ++iter)
342 file.write(metric->getAsSingleLineString().toLatin1());
void addFrameButtonClickedSlot()
boost::shared_ptr< class FrameMetric > FrameMetricPtr
boost::shared_ptr< class ToolMetric > ToolMetricPtr
void addSphereButtonClickedSlot()
boost::shared_ptr< class DonutMetric > DonutMetricPtr
Transform3D Transform3D
Transform3D is a representation of an affine 3D transform.
boost::shared_ptr< DataMetric > DataMetricPtr
void addAngleButtonClickedSlot()
void addToolButtonClickedSlot()
csREF
the data reference space (r)
boost::shared_ptr< class SphereMetric > SphereMetricPtr
Data class that represents a single frame (transform).
Data class representing a plane.
static CoordinateSystem reference()
boost::shared_ptr< class AngleMetric > AngleMetricPtr
Data class that represents a donut.
boost::shared_ptr< class PlaneMetric > PlaneMetricPtr
void loadReferencePointsSlot()
boost::shared_ptr< class Data > DataPtr
void setSelection(std::set< QString > selection)
virtual RegistrationHistoryPtr get_rMd_History()
void exportMetricsToFile(QString filename)
void reportWarning(QString msg)
void addPlaneButtonClickedSlot()
Data class that represents a donut.
boost::shared_ptr< class MetricReferenceArgumentList > MetricReferenceArgumentListPtr
DataMetricPtr getMetric(QString uid)
Transform3D createTransformTranslate(const Vector3D &translation)
Identification of a Coordinate system.
boost::shared_ptr< class DistanceMetric > DistanceMetricPtr
Data class that represents a distance between two points, or a point and a plane. ...
void addPointButtonClickedSlot()
cxLogicManager_EXPORT SpaceProviderPtr spaceProvider()
Eigen::Vector3d Vector3D
Vector3D is a representation of a point or vector in 3D.
cxLogicManager_EXPORT ViewServicePtr viewService()
void addDonutButtonClickedSlot()
cxLogicManager_EXPORT PatientModelServicePtr patientService()
cxLogicManager_EXPORT TrackingServicePtr trackingService()
void activeMetricChanged()
void addDistanceButtonClickedSlot()
Base class for all Data Metrics.
Data class that represents an angle between two lines.
void moveToMetric(QString uid)
void reportDebug(QString msg)
void setActiveUid(QString uid)
boost::shared_ptr< class PointMetric > PointMetricPtr
boost::shared_ptr< class Tool > ToolPtr