34 #include <QTreeWidget>
35 #include <QTreeWidgetItem>
36 #include <QStringList>
37 #include <QVBoxLayout>
38 #include <QHeaderView>
65 mViewService(viewService),
66 mPatientModelService(patientModelService)
70 void MetricBase::colorSelected()
77 QString retval = this->
getData()->getValueAsString();
86 "Set color of metric",
87 this->
getData()->getColor(), QDomNode());
88 QHBoxLayout* line =
new QHBoxLayout;
92 layout->addLayout(line);
93 connect(
mColorSelector.get(), SIGNAL(valueWasSet()),
this, SLOT(colorSelected()));
98 QWidget* widget =
new QWidget;
99 widget->setFocusPolicy(Qt::StrongFocus);
100 widget->setObjectName(objectName);
110 mInternalUpdate =
false;
115 mArguments = arguments;
116 connect(mArguments.get(), SIGNAL(argumentsChanged()),
this, SLOT(dataChangedSlot()));
123 mPSelector.resize(mArguments->getCount());
124 for (
unsigned i=0; i<mPSelector.size(); ++i)
127 QString(
"p%1").arg(i),
128 mArguments->getDescription(i),
129 mArguments->get(i) ? mArguments->get(i)->getUid() :
"",
134 connect(mPSelector[i].
get(), SIGNAL(valueWasSet()),
this, SLOT(pointSelected()));
137 this->dataChangedSlot();
140 void MetricReferenceArgumentListGui::getAvailableArgumentMetrics(QStringList* uid, std::map<QString,QString>* namemap)
143 for (std::map<QString, DataPtr>::iterator iter=data.begin(); iter!=data.end(); ++iter)
145 if (mArguments->validArgument(iter->second))
148 (*namemap)[iter->first] = iter->second->getName();
156 for (
unsigned i=0; i<mArguments->getCount(); ++i)
157 data << (mArguments->get(i) ? mArguments->get(i)->getName() : QString(
"*"));
158 return data.join(
"-");
161 void MetricReferenceArgumentListGui::pointSelected()
165 for (
unsigned i=0; i<mPSelector.size(); ++i)
168 if (mArguments->validArgument(data))
169 mArguments->set(i, data);
171 reportWarning(QString(
"Failed to set data [%1] in metric, invalid argument.").arg(data?data->getName():
"NULL"));
175 void MetricReferenceArgumentListGui::dataChangedSlot()
184 mInternalUpdate =
true;
187 std::map<QString,QString> names;
188 this->getAvailableArgumentMetrics(&range, &names);
190 for (
unsigned i=0; i<mPSelector.size(); ++i)
192 if (!mArguments->get(i))
194 mPSelector[i]->setValue(mArguments->get(i)->getUid());
195 mPSelector[i]->setDisplayNames(names);
196 mPSelector[i]->setValueRange(range);
199 mInternalUpdate =
false;
212 mInternalUpdate =
false;
224 QWidget* widget = this->
newWidget(
"point_metric");
225 QVBoxLayout* topLayout =
new QVBoxLayout(widget);
226 QHBoxLayout* hLayout =
new QHBoxLayout;
227 hLayout->setMargin(0);
228 topLayout->setMargin(0);
229 topLayout->addLayout(hLayout);
231 mSpaceSelector = this->createSpaceSelector();
234 mCoordinate = this->createCoordinateSelector();
237 QWidget* sampleButton = this->createSampleButton(widget);
238 hLayout->addWidget(sampleButton);
241 topLayout->addStretch();
252 "Select coordinate system to store position in.");
253 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(spaceSelected()));
263 "Coordinate values.",
265 DoubleRange(-1000,1000,1),
269 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(coordinateChanged()));
273 QWidget* PointMetricWrapper::createSampleButton(QWidget* parent)
const
275 QAction* sampleAction =
new QAction(
"Sample", parent);
276 QString sampleTip(
"Set the position equal to the current tool tip position.");
277 sampleAction->setStatusTip(sampleTip);
278 sampleAction->setWhatsThis(sampleTip);
279 sampleAction->setToolTip(sampleTip);
280 connect(sampleAction, SIGNAL(triggered()),
this, SLOT(moveToToolPosition()));
283 sampleButton->setDefaultAction(sampleAction);
299 Vector3D p = mData->getCoordinate();
301 if (mData->getSpace().mId==
csREF)
304 return mData->getSpace().toString() +
" " + coord;
307 void PointMetricWrapper::moveToToolPosition()
310 mData->setCoordinate(p);
313 void PointMetricWrapper::spaceSelected()
317 CoordinateSystem space = mSpaceSelector->getValue();
318 if (!space.isValid())
320 mData->setSpace(space);
323 void PointMetricWrapper::coordinateChanged()
327 mData->setCoordinate(mCoordinate->getValue());
336 mInternalUpdate =
true;
337 mSpaceSelector->setValue(mData->getSpace());
338 mCoordinate->setValue(mData->getCoordinate());
339 mInternalUpdate =
false;
351 mInternalUpdate =
false;
352 connect(mData.get(), SIGNAL(transformChanged()),
this, SLOT(dataChangedSlot()));
353 connect(mData.get(), SIGNAL(propertiesChanged()),
this, SLOT(dataChangedSlot()));
354 connect(
mPatientModelService.get(), SIGNAL(dataAddedOrRemoved()),
this, SLOT(dataChangedSlot()));
359 disconnect(
mPatientModelService.get(), SIGNAL(dataAddedOrRemoved()),
this, SLOT(dataChangedSlot()));
364 QWidget* widget = this->
newWidget(
"plane_metric");
365 QVBoxLayout* topLayout =
new QVBoxLayout(widget);
366 QHBoxLayout* hLayout =
new QHBoxLayout;
367 hLayout->setMargin(0);
368 topLayout->setMargin(0);
369 topLayout->addLayout(hLayout);
373 topLayout->addStretch();
375 this->dataChangedSlot();
395 void PlaneMetricWrapper::dataChangedSlot()
398 mInternalUpdate =
false;
415 mInternalUpdate =
false;
416 connect(mData.get(), SIGNAL(transformChanged()),
this, SLOT(dataChangedSlot()));
417 connect(patientModelService.get(), SIGNAL(dataAddedOrRemoved()),
this, SLOT(dataChangedSlot()));
422 QWidget* widget = this->
newWidget(
"distance_metric");
423 QVBoxLayout* topLayout =
new QVBoxLayout(widget);
424 QHBoxLayout* hLayout =
new QHBoxLayout;
425 hLayout->setMargin(0);
426 topLayout->setMargin(0);
427 topLayout->addLayout(hLayout);
431 topLayout->addStretch();
433 this->dataChangedSlot();
452 void DistanceMetricWrapper::dataChangedSlot()
455 mInternalUpdate =
false;
473 mInternalUpdate =
false;
474 connect(mData.get(), SIGNAL(transformChanged()),
this, SLOT(dataChangedSlot()));
475 connect(
mPatientModelService.get(), SIGNAL(dataAddedOrRemoved()),
this, SLOT(dataChangedSlot()));
480 disconnect(
mPatientModelService.get(), SIGNAL(dataAddedOrRemoved()),
this, SLOT(dataChangedSlot()));
485 QWidget* widget = this->
newWidget(
"angle_metric");
486 QVBoxLayout* topLayout =
new QVBoxLayout(widget);
487 QHBoxLayout* hLayout =
new QHBoxLayout;
488 hLayout->setMargin(0);
489 topLayout->setMargin(0);
490 topLayout->addLayout(hLayout);
494 mUseSimpleVisualization = this->createUseSimpleVisualizationSelector();
498 topLayout->addStretch();
500 this->dataChangedSlot();
518 void AngleMetricWrapper::dataChangedSlot()
520 mInternalUpdate =
true;
521 mUseSimpleVisualization->setValue(mData->getUseSimpleVisualization());
522 mInternalUpdate =
false;
525 void AngleMetricWrapper::guiChanged()
529 mData->setUseSimpleVisualization(mUseSimpleVisualization->getValue());
532 BoolPropertyPtr AngleMetricWrapper::createUseSimpleVisualizationSelector()
const
536 "Simple Visualization",
537 mData->getUseSimpleVisualization());
539 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
557 mInternalUpdate =
false;
558 connect(mData.get(), SIGNAL(propertiesChanged()),
this, SLOT(dataChangedSlot()));
563 QWidget* widget = this->
newWidget(
"donut_metric");
564 QVBoxLayout* topLayout =
new QVBoxLayout(widget);
565 QHBoxLayout* hLayout =
new QHBoxLayout;
566 hLayout->setMargin(0);
567 topLayout->setMargin(0);
568 topLayout->addLayout(hLayout);
572 mRadius = this->createRadiusSelector();
574 mThickness = this->createThicknessSelector();
576 mFlat = this->createFlatSelector();
578 mHeight = this->createHeightSelector();
582 topLayout->addStretch();
584 this->dataChangedSlot();
608 mInternalUpdate =
true;
609 mRadius->setValue(mData->getRadius());
610 mThickness->setValue(mData->getThickness());
611 mHeight->setValue(mData->getHeight());
612 mFlat->setValue(mData->getFlat());
613 mInternalUpdate =
false;
616 void DonutMetricWrapper::dataChangedSlot()
627 void DonutMetricWrapper::guiChanged()
631 mInternalUpdate =
true;
632 mData->setRadius(mRadius->getValue());
633 mData->setThickness(mThickness->getValue());
634 mData->setHeight(mHeight->getValue());
635 mData->setFlat(mFlat->getValue());
636 mInternalUpdate =
false;
647 DoubleRange(0, 50, 1),
651 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
661 mData->getThickness(),
662 DoubleRange(0.05, 1, 0.05),
666 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
675 "Disc height, NA to torus",
677 DoubleRange(0.0, 100, 1),
681 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
690 "Flat disk or torus",
694 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
704 mScaleToP1Widget(NULL)
707 mInternalUpdate =
false;
708 connect(mData.get(), SIGNAL(propertiesChanged()),
this, SLOT(dataChangedSlot()));
713 QWidget* widget = this->
newWidget(
"custom_metric");
714 QVBoxLayout* topLayout =
new QVBoxLayout(widget);
715 QHBoxLayout* hLayout =
new QHBoxLayout;
716 hLayout->setMargin(0);
717 topLayout->setMargin(0);
718 topLayout->addLayout(hLayout);
722 mDefineVectorUpMethod = this->createDefineVectorUpMethodSelector();
724 mModel = this->createModelSelector();
727 mOffsetFromP0 = this->createOffsetFromP0();
729 mOffsetFromP1 = this->createOffsetFromP1();
731 mRepeatDistance = this->createRepeatDistance();
734 mShowDistanceMarkers = this->createShowDistanceMarkers();
736 mDistanceMarkerVisibility = this->createDistanceMarkerVisibility();
738 topLayout->addWidget(mDistanceMarkerVisibilityWidget);
740 mScaleToP1 = this->createScaletoP1();
742 topLayout->addWidget(mScaleToP1Widget);
744 mTranslationOnly= this->createTranslationOnly();
747 mTextureFollowTool= this->createTextureFollowTool();
751 topLayout->addStretch();
753 this->dataChangedSlot();
777 mInternalUpdate =
true;
778 mDefineVectorUpMethod->setValue(mData->getDefineVectorUpMethod());
779 mModel->setValue(mData->getModelUid());
780 mInternalUpdate =
false;
784 void CustomMetricWrapper::dataChangedSlot()
795 void CustomMetricWrapper::guiChanged()
800 if(mModel->getData() && mModel->getData()->getType() ==
"image")
801 mScaleToP1Widget->setEnabled(
false);
803 mScaleToP1Widget->setEnabled(
true);
805 if(mShowDistanceMarkers->getValue())
806 mDistanceMarkerVisibilityWidget->setEnabled(
true);
808 mDistanceMarkerVisibilityWidget->setEnabled(
false);
810 mInternalUpdate =
true;
811 mData->setDefineVectorUpMethod(mDefineVectorUpMethod->getValue());
812 mData->setModelUid(mModel->getValue());
813 mData->setOffsetFromP0(mOffsetFromP0->getValue());
814 mData->setOffsetFromP1(mOffsetFromP1->getValue());
815 mData->setRepeatDistance(mRepeatDistance->getValue());
816 mData->setScaleToP1(mScaleToP1->getValue());
817 mData->setShowDistanceMarkers(mShowDistanceMarkers->getValue());
818 mData->setDistanceMarkerVisibility(mDistanceMarkerVisibility->getValue());
819 mData->setTranslationOnly(mTranslationOnly->getValue());
820 mData->setTextureFollowTool(mTextureFollowTool->getValue());
822 mInternalUpdate =
false;
829 "Scale model so that it fits between P0 and P1",
830 mData->getScaleToP1());
831 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
839 "Show distance to P0 for each repeated model",
840 mData->getShowDistanceMarkers());
841 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
849 "Ignore scale and rotate",
850 mData->getTranslationOnly());
851 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
859 "Any texture on the model will move with the tool",
860 mData->getTextureFollowTool());
861 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
869 "Position model an offset from P0 towards P1",
870 mData->getOffsetFromP0(), DoubleRange(-100, 100, 1), 0);
871 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
879 "When scaling to P1, scale to a point offset from P1 towards P0",
880 mData->getOffsetFromP1(), DoubleRange(-100, 100, 1), 0);
881 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
889 "Repeat model with this distance",
890 mData->getRepeatDistance(), DoubleRange(0, 100, 1), 0);
891 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
899 "Hide the markers if the distance to the camera exceeds this threshold",
900 mData->getDistanceMarkerVisibility(), DoubleRange(0, 1000, 1), 0);
901 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
905 StringPropertyPtr CustomMetricWrapper::createDefineVectorUpMethodSelector()
const
909 "Use to define the vector up",
910 "The vector up of the metric will be connected to one of:\n"
911 "- a) The static up vector of the operating table\n"
912 "- b) To a frame in p1, which might well be connected "
913 "to a tool giving a dynamic up vector.\n"
914 "- c) The tool up (tool negative x)",
915 mData->getDefineVectorUpMethod(),
916 mData->getDefineVectorUpMethods().getAvailableDefineVectorUpMethods(),
918 retval->setDisplayNames(mData->getDefineVectorUpMethods().getAvailableDefineVectorUpMethodsDisplayNames());
921 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
929 retval->setOnly2DImagesFilter(
true);
930 retval->setValueName(
"Model");
931 retval->setHelp(
"Model can be mesh or 2D image");
945 mInternalUpdate =
false;
946 connect(mData.get(), SIGNAL(propertiesChanged()),
this, SLOT(dataChangedSlot()));
951 QWidget* widget = this->
newWidget(
"sphere_metric");
952 QVBoxLayout* topLayout =
new QVBoxLayout(widget);
953 QHBoxLayout* hLayout =
new QHBoxLayout;
954 hLayout->setMargin(0);
955 topLayout->setMargin(0);
956 topLayout->addLayout(hLayout);
960 mRadius = this->createRadiusSelector();
964 topLayout->addStretch();
966 this->dataChangedSlot();
984 void SphereMetricWrapper::dataChangedSlot()
992 mInternalUpdate =
true;
993 mRadius->setValue(mData->getRadius());
994 mInternalUpdate =
false;
997 void SphereMetricWrapper::guiChanged()
1001 mData->setRadius(mRadius->getValue());
1011 DoubleRange(0, 50, 0.5),
1015 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
1024 MetricBase(viewService, patientModelService),
1027 mInternalUpdate =
false;
1028 connect(mData.get(), SIGNAL(propertiesChanged()),
this, SLOT(dataChangedSlot()));
1033 QWidget* widget = this->
newWidget(
"region_of_interest_metric");
1034 QVBoxLayout* topLayout =
new QVBoxLayout(widget);
1035 QHBoxLayout* hLayout =
new QHBoxLayout;
1036 hLayout->setMargin(0);
1037 topLayout->setMargin(0);
1038 topLayout->addLayout(hLayout);
1040 mDataListProperty = this->createDataListProperty();
1042 topLayout->addWidget(datalistwidget);
1044 mUseActiveTooltipProperty = this->createUseActiveTooltipSelector();
1047 mMaxBoundsDataProperty = this->createMaxBoundsDataSelector();
1050 mMarginProperty = this->createMarginSelector();
1054 topLayout->addStretch();
1056 this->dataChangedSlot();
1074 void RegionOfInterestMetricWrapper::dataChangedSlot()
1083 "Select data to define ROI",
1086 connect(retval.get(), &
Property::changed,
this, &RegionOfInterestMetricWrapper::guiChanged);
1095 "Select data to define maximal extent of ROI",
1099 connect(retval.get(), &
Property::changed,
this, &RegionOfInterestMetricWrapper::guiChanged);
1108 "Margin added outside the data",
1110 DoubleRange(0, 100, 1),
1114 connect(retval.get(), SIGNAL(valueWasSet()),
this, SLOT(guiChanged()));
1118 BoolPropertyPtr RegionOfInterestMetricWrapper::createUseActiveTooltipSelector()
const
1122 "Include tool tip in the roi",
1125 connect(retval.get(), &
Property::changed,
this, &RegionOfInterestMetricWrapper::guiChanged);
1132 mInternalUpdate =
true;
1135 std::map<QString, QString> names;
1137 for (std::map<QString, DataPtr>::iterator i=alldata.begin(); i!=alldata.end(); ++i)
1139 if (i->first == mData->getUid())
1142 names[i->first] = i->second->getName();
1145 mDataListProperty->setValue(mData->getDataList());
1146 mDataListProperty->setValueRange(data);
1147 mDataListProperty->setDisplayNames(names);
1149 mMaxBoundsDataProperty->setValue(mData->getMaxBoundsData());
1150 mMaxBoundsDataProperty->setValueRange(data);
1151 mMaxBoundsDataProperty->setDisplayNames(names);
1153 mMarginProperty->setValue(mData->getMargin());
1154 mUseActiveTooltipProperty->setValue(mData->getUseActiveTooltip());
1156 mInternalUpdate =
false;
1159 void RegionOfInterestMetricWrapper::guiChanged()
1161 if (mInternalUpdate)
1163 mData->setDataList(mDataListProperty->getValue());
1164 mData->setUseActiveTooltip(mUseActiveTooltipProperty->getValue());
1165 mData->setMargin(mMarginProperty->getValue());
1166 mData->setMaxBoundsData(mMaxBoundsDataProperty->getValue());
virtual QString getArguments() const
static BoolPropertyPtr initialize(const QString &uid, QString name, QString help, bool value, QDomNode root=QDomNode())
virtual QString getType() const
CustomMetricWrapper(ViewServicePtr viewService, PatientModelServicePtr patientModelService, CustomMetricPtr data)
void setArguments(MetricReferenceArgumentListPtr arguments)
virtual QString getArguments() const
RegionOfInterestMetricWrapper(ViewServicePtr viewService, PatientModelServicePtr patientModelService, RegionOfInterestMetricPtr data)
MetricReferenceArgumentListGui()
virtual DataMetricPtr getData() const
virtual DataMetricPtr getData() const
virtual QWidget * createWidget()
virtual DataMetricPtr getData() const
boost::shared_ptr< class DonutMetric > DonutMetricPtr
boost::shared_ptr< DataMetric > DataMetricPtr
void addColorWidget(QVBoxLayout *layout)
static StringPropertySelectDataPtr New(PatientModelServicePtr patientModelService, QString typeRegexp=".*")
static SpacePropertyPtr initialize(const QString &uid, QString name, QString help, Space value=Space(), std::vector< Space > range=std::vector< Space >(), QDomNode root=QDomNode())
QString getAsString() const
virtual ~PlaneMetricWrapper()
SphereMetricWrapper(ViewServicePtr viewService, PatientModelServicePtr patientModelService, SphereMetricPtr data)
virtual QString getType() const
QString prettyFormat(Vector3D val, int decimals, int fieldWidth)
boost::shared_ptr< class SpaceProperty > SpacePropertyPtr
PlaneMetricWrapper(ViewServicePtr viewService, PatientModelServicePtr patientModelService, PlaneMetricPtr data)
csREF
the data reference space (r) using LPS (left-posterior-superior) coordinates.
boost::shared_ptr< class SphereMetric > SphereMetricPtr
virtual DataMetricPtr getData() const =0
virtual DataMetricPtr getData() const
virtual QString getArguments() const
virtual DataMetricPtr getData() const
virtual QWidget * createWidget()
boost::shared_ptr< class AngleMetric > AngleMetricPtr
ViewServicePtr mViewService
virtual QString getType() const
virtual QString getArguments() const
virtual QString getArguments() const
static StringListPropertyPtr initialize(const QString &uid, QString name, QString help, QStringList value, QStringList range, QDomNode root=QDomNode())
QWidget * createDataWidget(ViewServicePtr viewService, PatientModelServicePtr patientModelService, QWidget *parent, PropertyPtr data, QGridLayout *gridLayout, int row)
Create a widget capable of displaying the input data.
ColorPropertyPtr mColorSelector
virtual QString getArguments() const
boost::shared_ptr< class PlaneMetric > PlaneMetricPtr
boost::shared_ptr< class Data > DataPtr
boost::shared_ptr< class StringProperty > StringPropertyPtr
PatientModelServicePtr mPatientModelService
virtual QString getType() const
virtual QWidget * createWidget()
virtual QString getType() const
void reportWarning(QString msg)
static Vector3DPropertyPtr initialize(const QString &uid, QString name, QString help, Vector3D value, DoubleRange range, int decimals, QDomNode root=QDomNode())
virtual QString getType() const
boost::shared_ptr< class PatientModelService > PatientModelServicePtr
virtual QWidget * createWidget()
void addWidgets(QBoxLayout *layout)
boost::shared_ptr< class MetricReferenceArgumentList > MetricReferenceArgumentListPtr
boost::shared_ptr< class DistanceMetric > DistanceMetricPtr
virtual DataMetricPtr getData() const
boost::shared_ptr< class RegionOfInterestMetric > RegionOfInterestMetricPtr
void changed()
emit when the underlying data value is changed: The user interface will be updated.
cxLogicManager_EXPORT SpaceProviderPtr spaceProvider()
static StringPropertyPtr initialize(const QString &uid, QString name, QString help, QString value, QStringList range, QDomNode root=QDomNode())
virtual QString getType() const
DonutMetricWrapper(ViewServicePtr viewService, PatientModelServicePtr patientModelService, DonutMetricPtr data)
boost::shared_ptr< class DoubleProperty > DoublePropertyPtr
Eigen::Vector3d Vector3D
Vector3D is a representation of a point or vector in 3D.
boost::shared_ptr< class StringListProperty > StringListPropertyPtr
virtual QWidget * createWidget()
MetricBase(ViewServicePtr viewService, PatientModelServicePtr patientModelService)
boost::shared_ptr< class Vector3DProperty > Vector3DPropertyPtr
cxLogicManager_EXPORT ViewServicePtr viewService()
virtual DataMetricPtr getData() const
cxLogicManager_EXPORT PatientModelServicePtr patientService()
virtual ~PointMetricWrapper()
virtual QString getArguments() const
static DoublePropertyPtr initialize(const QString &uid, QString name, QString help, double value, DoubleRange range, int decimals, QDomNode root=QDomNode())
virtual QString getType() const
AngleMetricWrapper(ViewServicePtr viewService, PatientModelServicePtr patientModelService, AngleMetricPtr data)
virtual QWidget * createWidget()
boost::shared_ptr< class StringPropertySelectData > StringPropertySelectDataPtr
virtual QWidget * createWidget()
static ColorPropertyPtr initialize(const QString &uid, QString name, QString help, QColor value, QDomNode root=QDomNode())
virtual QString getArguments() const
virtual ~AngleMetricWrapper()
boost::shared_ptr< class BoolProperty > BoolPropertyPtr
QWidget * newWidget(QString objectName)
virtual QString getValue() const
virtual QWidget * createWidget()
boost::shared_ptr< class CustomMetric > CustomMetricPtr
DistanceMetricWrapper(ViewServicePtr viewService, PatientModelServicePtr patientModelService, DistanceMetricPtr data)
PointMetricWrapper(ViewServicePtr viewService, PatientModelServicePtr patientModelService, PointMetricPtr data)
virtual DataMetricPtr getData() const
boost::shared_ptr< class PointMetric > PointMetricPtr