16 #include "boost/bind.hpp" 17 #include "boost/function.hpp" 22 #include <vtkRenderWindow.h> 23 #include <vtkRenderer.h> 24 #include <vtkImageData.h> 98 view->getRenderer()->GetActiveCamera()->SetClippingRange(0.1, 2000);
99 if (!view->getRenderWindow()->GetStereoCapableWindow())
100 view->getRenderWindow()->StereoCapableWindowOn();
105 QString index = QString::number(startIndex);
106 QColor background =
settings()->
value(
"backgroundColor").value<QColor>();
107 mView->setBackgroundColor(background);
109 view->getRenderer()->GetActiveCamera()->SetParallelProjection(
false);
112 this->initializeMultiVolume3DRepProducer();
115 mLandmarkRep->setGraphicsSize(
settings()->value(
"View3D/sphereRadius").toDouble());
116 mLandmarkRep->setLabelSize(
settings()->value(
"View3D/labelSize").toDouble());
120 connect(mPickerRep.get(), SIGNAL(pointPicked(
Vector3D)),
this, SLOT(pickerRepPointPickedSlot(
Vector3D)));
122 mPickerRep->setSphereRadius(
settings()->value(
"View3D/sphereRadius").toDouble());
123 mPickerRep->setEnabled(
false);
124 mView->addRep(mPickerRep);
125 connect(
mServices->tracking().get(), SIGNAL(activeToolChanged(
const QString&)),
this, SLOT(activeToolChangedSlot()));
126 this->activeToolChangedSlot();
131 this->updateMetricNamesRep();
135 this->toolsAvailableSlot();
140 mView->addRep(mAnnotationMarker);
147 this->setStereoEyeAngle(
settings()->value(
"View3D/eyeAngle").toDouble());
150 if(
settings()->value(
"View3D/depthPeeling").toBool())
151 this->setTranslucentRenderingToDepthPeeling(
settings()->value(
"View3D/depthPeeling").toBool());
161 mMultiVolume3DRepProducer->removeRepsFromView();
165 void ViewWrapper3D::initializeMultiVolume3DRepProducer()
168 reportError(
"Missing View in initializeMultiVolume3DRepProducer");
170 if (!mMultiVolume3DRepProducer)
173 connect(mMultiVolume3DRepProducer.get(), SIGNAL(imagesChanged()),
this, SLOT(updateView()));
174 mMultiVolume3DRepProducer->setView(mView);
177 mMultiVolume3DRepProducer->setMaxRenderSize(
settings()->value(
"View3D/maxRenderSize").toInt());
178 mMultiVolume3DRepProducer->setVisualizerType(
settings()->value(
"View3D/ImageRender3DVisualizer").
toString());
185 if (key ==
"View3D/stereoType")
189 if (key ==
"View3D/eyeAngle")
191 this->setStereoEyeAngle(
settings()->value(
"View3D/eyeAngle").toDouble());
193 if (key ==
"backgroundColor")
195 QColor background =
settings()->
value(
"backgroundColor").value<QColor>();
196 mView->setBackgroundColor(background);
198 if (( key==
"View3D/ImageRender3DVisualizer" )||( key==
"View3D/maxRenderSize" ))
200 this->initializeMultiVolume3DRepProducer();
202 if ((key ==
"View/showDataText")
203 || (key ==
"View/showOrientationAnnotation"))
207 if ((key ==
"View3D/annotationModelSize" )||( key ==
"View3D/annotationModel"))
209 QString annotationFile =
settings()->
value(
"View3D/annotationModel").toString();
211 mAnnotationMarker->setSize(
settings()->value(
"View3D/annotationModelSize").toDouble());
213 if (key ==
"View3D/showManualTool")
215 this->toolsAvailableSlot();
217 if ((key ==
"View3D/sphereRadius" )
218 ||( key ==
"View3D/labelSize" )
219 ||( key ==
"View/showLabels")
220 ||( key ==
"View/showMetricNamesInCorner"))
222 for (RepMap::iterator iter = mDataReps.begin(); iter != mDataReps.end(); ++iter)
224 this->readDataRepSettings(iter->second);
227 this->updateMetricNamesRep();
229 this->toolsAvailableSlot();
230 mLandmarkRep->setGraphicsSize(
settings()->value(
"View3D/sphereRadius").toDouble());
231 mLandmarkRep->setLabelSize(
settings()->value(
"View3D/labelSize").toDouble());
233 if (key ==
"View3D/depthPeeling")
234 this->setTranslucentRenderingToDepthPeeling(
settings()->value(
"View3D/depthPeeling").toBool());
237 void ViewWrapper3D::updateMetricNamesRep()
239 bool enabled =
settings()->
value(
"View/showMetricNamesInCorner").value<
bool>();
246 mView->addRep(mMetricNames);
254 mView->removeRep(mMetricNames);
255 mMetricNames.reset();
259 void ViewWrapper3D::pickerRepPointPickedSlot(
Vector3D p_r)
265 void ViewWrapper3D::pickerRepDataPickedSlot(QString uid)
270 void ViewWrapper3D::appendToContextMenu(QMenu& contextMenu)
272 QAction* slicePlanesAction = NULL;
273 QAction* fillSlicePlanesAction = NULL;
274 if (mSlicePlanes3DRep)
276 slicePlanesAction =
new QAction(
"Show Slice Planes", &contextMenu);
277 slicePlanesAction->setCheckable(
true);
278 slicePlanesAction->setChecked(mSlicePlanes3DRep->getProxy()->getVisible());
279 connect(slicePlanesAction, SIGNAL(triggered(
bool)),
this, SLOT(showSlicePlanesActionSlot(
bool)));
281 fillSlicePlanesAction =
new QAction(
"Fill Slice Planes", &contextMenu);
282 fillSlicePlanesAction->setCheckable(
true);
283 fillSlicePlanesAction->setEnabled(mSlicePlanes3DRep->getProxy()->getVisible());
284 fillSlicePlanesAction->setChecked(mSlicePlanes3DRep->getProxy()->getDrawPlanes());
285 connect(fillSlicePlanesAction, SIGNAL(triggered(
bool)),
this, SLOT(fillSlicePlanesActionSlot(
bool)));
288 QAction* resetCameraAction =
new QAction(
"Reset Camera (r)", &contextMenu);
289 connect(resetCameraAction, SIGNAL(triggered()),
this, SLOT(resetCameraActionSlot()));
291 QAction* centerImageAction =
new QAction(
"Center to image", &contextMenu);
292 connect(centerImageAction, SIGNAL(triggered()),
this, SLOT(centerImageActionSlot()));
294 QAction* centerToolAction =
new QAction(
"Center to tool", &contextMenu);
295 connect(centerToolAction, SIGNAL(triggered()),
this, SLOT(centerToolActionSlot()));
297 QAction* showAxesAction =
new QAction(
"Show Coordinate Axes", &contextMenu);
298 showAxesAction->setCheckable(
true);
299 showAxesAction->setChecked(mShowAxes);
300 connect(showAxesAction, SIGNAL(triggered(
bool)),
this, SLOT(showAxesActionSlot(
bool)));
302 QAction* showManualTool =
new QAction(
"Show Manual Tool 3D", &contextMenu);
303 showManualTool->setCheckable(
true);
304 showManualTool->setChecked(
settings()->value(
"View3D/showManualTool").toBool());
305 connect(showManualTool, SIGNAL(triggered(
bool)),
this, SLOT(showManualToolSlot(
bool)));
307 QAction* showOrientation =
new QAction(
"Show Orientation", &contextMenu);
308 showOrientation->setCheckable(
true);
309 showOrientation->setChecked(mAnnotationMarker->getVisible());
310 connect(showOrientation, SIGNAL(triggered(
bool)),
this, SLOT(showOrientationSlot(
bool)));
312 QAction* showToolPath =
new QAction(
"Show Tool Path", &contextMenu);
313 showToolPath->setCheckable(
true);
314 showToolPath->setChecked(
settings()->value(
"showToolPath").toBool());
315 connect(showToolPath, SIGNAL(triggered(
bool)),
this, SLOT(showToolPathSlot(
bool)));
317 QMenu* show3DSlicesMenu =
new QMenu(
"Show 3D slices");
320 QMenu* showSlicesMenu =
new QMenu(
"Slice Type", &contextMenu);
321 this->createSlicesActions(showSlicesMenu);
323 QAction* showRefTool =
new QAction(
"Show Reference Tool", &contextMenu);
324 showRefTool->setDisabled(
true);
325 showRefTool->setCheckable(
true);
329 showRefTool->setText(
"Show " + refTool->getName());
330 showRefTool->setEnabled(
true);
331 showRefTool->setChecked(
RepContainer(mView->getReps()).findFirst<ToolRep3D>(refTool) ?
true :
false);
332 connect(showRefTool, SIGNAL(toggled(
bool)),
this, SLOT(showRefToolSlot(
bool)));
335 contextMenu.addSeparator();
336 contextMenu.addMenu(show3DSlicesMenu);
337 contextMenu.addMenu(showSlicesMenu);
338 contextMenu.addSeparator();
339 contextMenu.addAction(resetCameraAction);
340 contextMenu.addAction(centerImageAction);
341 contextMenu.addAction(centerToolAction);
342 contextMenu.addAction(showAxesAction);
343 contextMenu.addAction(showOrientation);
344 contextMenu.addSeparator();
345 contextMenu.addAction(showManualTool);
346 contextMenu.addAction(showRefTool);
348 contextMenu.addAction(showToolPath);
349 contextMenu.addSeparator();
350 if (slicePlanesAction)
351 contextMenu.addAction(slicePlanesAction);
352 if (fillSlicePlanesAction)
353 contextMenu.addAction(fillSlicePlanesAction);
356 void ViewWrapper3D::createSlicesActions(QWidget* parent)
371 QString active =
mGroupData->getSliceDefinitions().toString();
373 QAction* action =
new QAction(title, parent);
374 connect(action, SIGNAL(triggered()),
this, SLOT(showSlices()));
375 action->setData(title);
376 action->setCheckable(
true);
377 action->setChecked(active == title);
379 parent->addAction(action);
383 void ViewWrapper3D::showSlices()
385 QAction* action =
dynamic_cast<QAction*
>(sender());
391 if (!action->isChecked())
403 mView->getRenderer()->SetActiveCamera(
mGroupData->getCamera3D()->getCamera());
406 this->setStereoEyeAngle(
settings()->value(
"View3D/eyeAngle").toDouble());
407 this->optionChangedSlot();
411 void ViewWrapper3D::showToolPathSlot(
bool checked)
419 activeRep3D->getTracer()->start();
423 activeRep3D->getTracer()->stop();
424 activeRep3D->getTracer()->clear();
431 void ViewWrapper3D::showAxesActionSlot(
bool checked)
433 if (mShowAxes == checked)
439 for (
unsigned i=0; i<mAxis.size(); ++i)
440 mView->removeRep(mAxis[i]->mRep);
450 axis->mRep->setAxisLength(0.12);
451 axis->mRep->setShowAxesLabels(
true);
452 axis->mRep->setCaption(
"ref",
Vector3D(1, 0, 0));
453 axis->mRep->setFontSize(0.03);
454 mAxis.push_back(axis);
457 std::vector<DataPtr> data =
mGroupData->getData();
458 for (
unsigned i = 0; i < data.size(); ++i)
461 axis->mRep->setAxisLength(0.08);
462 axis->mRep->setShowAxesLabels(
false);
463 axis->mRep->setCaption(data[i]->getName(),
Vector3D(1, 0, 0));
464 axis->mRep->setFontSize(0.03);
465 mAxis.push_back(axis);
470 TrackingService::ToolMap::iterator iter;
471 for (iter = tools.begin(); iter != tools.end(); ++iter)
476 axis->mRep->setAxisLength(0.08);
477 axis->mRep->setShowAxesLabels(
false);
478 axis->mRep->setCaption(
"t",
Vector3D(0.7, 1, 0.7));
479 axis->mRep->setFontSize(0.03);
480 axis->connectTo(tool);
483 mAxis.push_back(axis);
486 axis->mRep->setAxisLength(0.05);
487 axis->mRep->setShowAxesLabels(
false);
488 axis->mRep->setCaption(
"s",
Vector3D(1, 1, 0));
489 axis->mRep->setFontSize(0.03);
490 axis->connectTo(tool);
491 axis->mergeWith(mToolListener);
492 mAxis.push_back(axis);
495 for (
unsigned i=0; i<mAxis.size(); ++i)
496 mView->addRep(mAxis[i]->mRep);
500 void ViewWrapper3D::showManualToolSlot(
bool visible)
505 void ViewWrapper3D::showOrientationSlot(
bool visible)
511 void ViewWrapper3D::resetCameraActionSlot()
513 mView->getRenderer()->ResetCamera();
515 this->setStereoEyeAngle(
settings()->value(
"View3D/eyeAngle").toDouble());
521 camera3D->setView(mView);
526 void ViewWrapper3D::centerImageActionSlot()
532 void ViewWrapper3D::centerToolActionSlot()
535 nav->centerToTooltip();
538 void ViewWrapper3D::showSlicePlanesActionSlot(
bool checked)
540 if (!mSlicePlanes3DRep)
542 mSlicePlanes3DRep->getProxy()->setVisible(checked);
546 void ViewWrapper3D::fillSlicePlanesActionSlot(
bool checked)
548 if (!mSlicePlanes3DRep)
550 mSlicePlanes3DRep->getProxy()->setDrawPlanes(checked);
559 this->addVolumeDataRep(data);
561 this->removeVolumeDataRep(uid);
563 this->updateSlices();
568 void ViewWrapper3D::addVolumeDataRep(
DataPtr data)
575 mMultiVolume3DRepProducer->addImage(image);
579 if (!mDataReps.count(data->getUid()))
581 RepPtr rep = this->createDataRep3D(data);
584 mDataReps[data->getUid()] = rep;
591 void ViewWrapper3D::removeVolumeDataRep(QString uid)
593 mMultiVolume3DRepProducer->removeImage(uid);
594 if (mDataReps.count(uid))
596 mView->removeRep(mDataReps[uid]);
597 mDataReps.erase(uid);
606 if (boost::dynamic_pointer_cast<Mesh>(data))
609 rep->setMesh(boost::dynamic_pointer_cast<Mesh>(data));
612 else if (boost::dynamic_pointer_cast<TrackedStream>(data))
615 return this->createTrackedStreamRep(trackedStream);
629 if(!trackedStream->hasVideo())
636 if(trackedStream->is3D())
639 rep->setTrackedStream(trackedStream);
642 else if (trackedStream->is2D())
645 rep->setTrackedStream(trackedStream);
650 reportWarning(
"ViewWrapper3D::createDataRep3D. TrackedStream is not 2D or 3D");
659 if (boost::dynamic_pointer_cast<PointMetric>(data))
661 else if (boost::dynamic_pointer_cast<FrameMetric>(data))
663 else if (boost::dynamic_pointer_cast<ToolMetric>(data))
665 else if (boost::dynamic_pointer_cast<DistanceMetric>(data))
667 else if (boost::dynamic_pointer_cast<AngleMetric>(data))
669 else if (boost::dynamic_pointer_cast<PlaneMetric>(data))
671 else if (boost::dynamic_pointer_cast<DonutMetric>(data))
673 else if (boost::dynamic_pointer_cast<CustomMetric>(data))
675 else if (boost::dynamic_pointer_cast<SphereMetric>(data))
677 else if (boost::dynamic_pointer_cast<RegionOfInterestMetric>(data))
682 this->readDataRepSettings(rep);
683 rep->setDataMetric(boost::dynamic_pointer_cast<DataMetric>(data));
691 void ViewWrapper3D::readDataRepSettings(
RepPtr rep)
698 val->setShowLabel(
settings()->value(
"View/showLabels").toBool());
699 val->setLabelSize(
settings()->value(
"View3D/labelSize").toDouble());
700 val->setShowAnnotation(!
settings()->value(
"View/showMetricNamesInCorner").toBool());
713 void ViewWrapper3D::updateView()
720 this->updateMetricNamesRep();
722 mAnnotationMarker->setVisible(
settings()->value(
"View/showOrientationAnnotation").value<bool>());
727 manualToolRep->setTooltipPointColor(
settings()->value(
"View/toolTipPointColor").value<QColor>());
728 manualToolRep->setToolOffsetPointColor(
settings()->value(
"View/toolOffsetPointColor").value<QColor>());
729 manualToolRep->setToolOffsetLineColor(
settings()->value(
"View/toolOffsetLineColor").value<QColor>());
733 void ViewWrapper3D::activeImageChangedSlot(QString uid)
741 if (!std::count(images.begin(), images.end(), image))
745 void ViewWrapper3D::showRefToolSlot(
bool checked)
754 refRep->setTool(refTool);
758 mView->addRep(refRep);
761 mView->removeRep(refRep);
765 void ViewWrapper3D::updateSlices()
768 mView->removeRep(mSlices3DRep);
778 std::vector<PLANE_TYPE> planes =
mGroupData->getSliceDefinitions().get();
782 for (
unsigned i=0; i<planes.size(); ++i)
783 mSlices3DRep->addPlane(planes[i],
mServices->patient());
785 mSlices3DRep->setImages(images);
786 mSlices3DRep->setTool(
mServices->tracking()->getActiveTool());
787 mView->addRep(mSlices3DRep);
795 void ViewWrapper3D::activeToolChangedSlot()
798 mPickerRep->setTool(activeTool);
800 mSlices3DRep->setTool(activeTool);
803 void ViewWrapper3D::toolsAvailableSlot()
805 std::vector<ToolRep3DPtr> reps = RepContainer::findReps<ToolRep3D>(mView->getReps());
808 TrackingService::ToolMap::iterator iter;
809 for (iter = tools.begin(); iter != tools.end(); ++iter)
817 std::vector<ToolRep3DPtr>::iterator oldRep = std::find(reps.begin(), reps.end(), toolRep);
818 if (oldRep!=reps.end())
824 mView->removeRep(toolRep);
832 toolRep->getTracer()->start();
835 toolRep->setSphereRadius(
settings()->value(
"View3D/sphereRadius").toDouble());
836 toolRep->setSphereRadiusInNormalizedViewport(
true);
838 toolRep->setTool(tool);
839 toolRep->setOffsetPointVisibleAtZeroOffset(
true);
840 mView->addRep(toolRep);
844 for (
unsigned i=0; i<reps.size(); ++i)
846 mView->removeRep(reps[i]);
850 void ViewWrapper3D::optionChangedSlot()
858 this->updateSlices();
861 void ViewWrapper3D::showLandmarks(
bool on)
863 if (mLandmarkRep->isConnectedToView(mView) == on)
868 mView->addRep(mLandmarkRep);
872 mView->removeRep(mLandmarkRep);
876 void ViewWrapper3D::showPointPickerProbe(
bool on)
878 mPickerRep->setEnabled(on);
884 mSlicePlanes3DRep->setProxy(proxy);
885 mSlicePlanes3DRep->setDynamicLabelSize(
true);
887 mSlicePlanes3DRep->getProxy()->setVisible(show);
889 mView->addRep(mSlicePlanes3DRep);
898 mView->getRenderWindow()->SetStereoTypeToCrystalEyes();
901 mView->getRenderWindow()->SetStereoTypeToInterlaced();
904 mView->getRenderWindow()->SetStereoTypeToDresden();
907 mView->getRenderWindow()->SetStereoTypeToRedBlue();
912 void ViewWrapper3D::setStereoEyeAngle(
double angle)
914 mView->getRenderer()->GetActiveCamera()->SetEyeAngle(angle);
917 void ViewWrapper3D::setTranslucentRenderingToDepthPeeling(
bool setDepthPeeling)
921 bool isDPSupported =
true;
927 reportWarning(
"GPU do not support depth peeling. Rendering of translucent surfaces is not supported");
928 isDPSupported =
false;
934 report(
"Set GPU depth peeling");
938 reportWarning(
"Error setting depth peeling. The GPU or operating system might not support it.");
bool SetupEnvironmentForDepthPeeling(vtkSmartPointer< vtkRenderWindow > renderWindow, vtkSmartPointer< vtkRenderer > renderer, int maxNoOfPeels, double occlusionRatio)
virtual QString getDataDescription()
static DataViewProperties createSlice3D()
static LandmarkRepPtr New(PatientModelServicePtr dataManager, const QString &uid="")
virtual void dataViewPropertiesChangedSlot(QString uid)
boost::shared_ptr< class ViewGroupData > ViewGroupDataPtr
ptCORONAL
a slice seen from the front of the patient
void reportError(QString msg)
static DonutMetricRepPtr New(const QString &uid="")
static RepManager * getInstance()
get the only instance of this class
boost::shared_ptr< class SlicePlanesProxy > SlicePlanesProxyPtr
boost::shared_ptr< class Stream2DRep3D > Stream2DRep3DPtr
boost::shared_ptr< class CameraControl > CameraControlPtr
boost::shared_ptr< class TrackedStream > TrackedStreamPtr
boost::shared_ptr< class VisServices > VisServicesPtr
virtual ViewPtr getView()
std::string toString(T const &value)
converts any type to a string
csSENSOR
a tools sensor space (s)
void setStereoType(int type)
static SlicePlanes3DRepPtr New(const QString &uid="")
boost::shared_ptr< class Image > ImagePtr
Superclass for ViewWrappers.
boost::shared_ptr< REP > getCachedRep(QString uid="")
SharedOpenGLContextPtr mSharedOpenGLContext
virtual void setSlicePlanesProxy(SlicePlanesProxyPtr proxy)
csREF
the data reference space (r) using LPS (left-posterior-superior) coordinates.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant()) const
static PlaneMetricRepPtr New(const QString &uid="")
boost::shared_ptr< class StreamRep3D > StreamRep3DPtr
ptAXIAL
a slice seen from the top of the patient
Base class for all Data Metric reps.
static AngleMetricRepPtr New(const QString &uid="")
boost::shared_ptr< class DataMetricRep > DataMetricRepPtr
Class for display of an orientation annotation cube in 3D.
virtual void settingsChangedSlot(QString key)
A data set for video streams (2D/3D).
boost::shared_ptr< class View > ViewPtr
static DataViewProperties create3D()
static Stream2DRep3DPtr New(SpaceProviderPtr spaceProvider, const QString &uid="")
void setValue(const QString &key, const QVariant &value)
virtual void setViewGroup(ViewGroupDataPtr group)
boost::shared_ptr< class Data > DataPtr
static MetricNamesRepPtr New(const QString &uid="")
static QString findConfigFolder(QString pathRelativeToConfigRoot, QString alternativeAbsolutePath="")
void streamChanged(QString uid)
void settingsChangedSlot(QString key)
ptSAGITTAL
a slice seen from the side of the patient
static PlaneTypeCollection fromString(QString input, PlaneTypeCollection defVal=PlaneTypeCollection())
void reportWarning(QString msg)
static FrameMetricRepPtr New(const QString &uid="")
ptTOOLSIDEPLANE
z-rotated 90* relative to anyplane like side plane, but always kept oriented like the plane defined b...
ViewGroupDataPtr mGroupData
Identification of a Coordinate system.
static QString findConfigFilePath(QString fileName, QString pathRelativeToConfigRoot, QString alternativeAbsolutePath="")
virtual QString getViewDescription()
static GeometricRepPtr New(const QString &uid="")
virtual void setViewGroup(ViewGroupDataPtr group)
Settings * settings()
Shortcut for accessing the settings instance.
static Slices3DRepPtr New(SharedOpenGLContextPtr context, const QString &uid)
static RegionOfInterestMetricRepPtr New(const QString &uid="")
std::map< QString, ToolPtr > ToolMap
Eigen::Vector3d Vector3D
Vector3D is a representation of a point or vector in 3D.
boost::shared_ptr< class AxisConnector > AxisConnectorPtr
ptRADIALPLANE
y-rotated 90* relative to anyplane (bird's view)
bool TurnOffDepthPeeling(vtkSmartPointer< vtkRenderWindow > renderWindow, vtkSmartPointer< vtkRenderer > renderer)
Turn off depth peeling.
QStringList getAllDataNames(DataViewProperties properties) const
static PointMetricRepPtr New(const QString &uid="")
boost::shared_ptr< class SpaceListener > SpaceListenerPtr
virtual void updateView()
static StreamRep3DPtr New(SpaceProviderPtr spaceProvider, PatientModelServicePtr patientModelService, const QString &uid="")
static PickerRepPtr New(PatientModelServicePtr dataManager, const QString &uid="")
for creating new instances
DataViewPropertiesInteractorPtr mShow3DSlicesInteractor
boost::shared_ptr< class ToolRep3D > ToolRep3DPtr
ptANYPLANE
a plane aligned with the tool base plane
ViewWrapper3D(int startIndex, ViewPtr view, VisServicesPtr services)
boost::shared_ptr< class Navigation > NavigationPtr
bool IsDepthPeelingSupported(vtkSmartPointer< vtkRenderWindow > renderWindow, vtkSmartPointer< vtkRenderer > renderer, bool doItOffScreen)
void connectContextMenu(ViewPtr view)
bool mShowPointPickerProbe
boost::shared_ptr< class Rep > RepPtr
static DistanceMetricRepPtr New(const QString &uid="")
static SphereMetricRepPtr New(const QString &uid="")
void setGraphicsSize(double size)
ptSIDEPLANE
z-rotated 90* relative to anyplane (dual anyplane)
static CustomMetricRepPtr New(const QString &uid="")
void activeImageChanged(const QString &uId)
boost::shared_ptr< class GeometricRep > GeometricRepPtr
Namespace for all CustusX production code.
boost::shared_ptr< class Tool > ToolPtr