37 #include "boost/bind.hpp"
38 #include "boost/function.hpp"
43 #include <vtkRenderWindow.h>
44 #include <vtkRenderer.h>
45 #include <vtkImageData.h>
117 view->getRenderer()->GetActiveCamera()->SetClippingRange(1, 2000);
118 if (!view->getRenderWindow()->GetStereoCapableWindow())
119 view->getRenderWindow()->StereoCapableWindowOn();
124 QString index = QString::number(startIndex);
125 QColor background =
settings()->
value(
"backgroundColor").value<QColor>();
126 mView->setBackgroundColor(background);
128 view->getRenderer()->GetActiveCamera()->SetParallelProjection(
false);
129 connect(
settings(), SIGNAL(valueChangedFor(QString)),
this, SLOT(settingsChangedSlot(QString)));
131 this->initializeMultiVolume3DRepProducer();
134 mLandmarkRep->setGraphicsSize(
settings()->value(
"View3D/sphereRadius").toDouble());
135 mLandmarkRep->setLabelSize(
settings()->value(
"View3D/labelSize").toDouble());
139 connect(mPickerRep.get(), SIGNAL(pointPicked(
Vector3D)),
this, SLOT(PickerRepPointPickedSlot(
Vector3D)));
140 connect(mPickerRep.get(), SIGNAL(dataPicked(QString)),
this, SLOT(PickerRepDataPickedSlot(QString)));
141 mPickerRep->setSphereRadius(
settings()->value(
"View3D/sphereRadius").toDouble());
142 mPickerRep->setEnabled(
false);
143 mView->addRep(mPickerRep);
144 connect(
mBackend->getToolManager().get(), SIGNAL(activeToolChanged(
const QString&)),
this, SLOT(activeToolChangedSlot()));
145 this->activeToolChangedSlot();
149 mPlaneTypeText->addText(QColor(Qt::green),
"3D",
Vector3D(0.98, 0.02, 0.0));
150 mView->addRep(mPlaneTypeText);
154 mDataNameText->addText(QColor(Qt::green),
"not initialized",
Vector3D(0.02, 0.02, 0.0));
155 mView->addRep(mDataNameText);
158 this->updateMetricNamesRep();
161 connect(
mBackend->getPatientService().get(), SIGNAL(activeImageChanged(
const QString&)),
this, SLOT(activeImageChangedSlot()));
162 this->toolsAvailableSlot();
165 this->settingsChangedSlot(
"View3D/annotationModel");
166 this->settingsChangedSlot(
"View3D/annotationModelSize");
167 mView->addRep(mAnnotationMarker);
171 connect(
settings(), SIGNAL(valueChangedFor(QString)),
this, SLOT(globalConfigurationFileChangedSlot(QString)));
174 this->setStereoEyeAngle(
settings()->value(
"View3D/eyeAngle").toDouble());
177 if(
settings()->value(
"View3D/depthPeeling").toBool())
178 this->setTranslucentRenderingToDepthPeeling(
settings()->value(
"View3D/depthPeeling").toBool());
188 mMultiVolume3DRepProducer->removeRepsFromView();
192 void ViewWrapper3D::initializeMultiVolume3DRepProducer()
195 reportError(
"Missing View in initializeMultiVolume3DRepProducer");
197 if (!mMultiVolume3DRepProducer)
200 connect(mMultiVolume3DRepProducer.get(), SIGNAL(imagesChanged()),
this, SLOT(updateView()));
201 mMultiVolume3DRepProducer->setView(mView);
204 mMultiVolume3DRepProducer->setMaxRenderSize(
settings()->value(
"View3D/maxRenderSize").toInt());
205 mMultiVolume3DRepProducer->setVisualizerType(
settings()->value(
"View3D/ImageRender3DVisualizer").toString());
208 void ViewWrapper3D::settingsChangedSlot(QString key)
210 if (key ==
"backgroundColor")
212 QColor background =
settings()->
value(
"backgroundColor").value<QColor>();
213 mView->setBackgroundColor(background);
215 if (( key==
"View3D/ImageRender3DVisualizer" )||( key==
"View3D/maxRenderSize" ))
217 this->initializeMultiVolume3DRepProducer();
219 if (key ==
"View/showDataText")
223 if ((key ==
"View3D/annotationModelSize" )||( key ==
"View3D/annotationModel"))
225 QString annotationFile =
settings()->
value(
"View3D/annotationModel").toString();
227 mAnnotationMarker->setSize(
settings()->value(
"View3D/annotationModelSize").toDouble());
229 if (key ==
"showManualTool")
231 this->toolsAvailableSlot();
233 if ((key ==
"View3D/sphereRadius" )
234 ||( key ==
"View3D/labelSize" )
235 ||( key ==
"View/showLabels")
236 ||( key ==
"View/showMetricNamesInCorner"))
238 for (RepMap::iterator iter = mDataReps.begin(); iter != mDataReps.end(); ++iter)
240 this->readDataRepSettings(iter->second);
243 this->updateMetricNamesRep();
245 this->toolsAvailableSlot();
246 mLandmarkRep->setGraphicsSize(
settings()->value(
"View3D/sphereRadius").toDouble());
247 mLandmarkRep->setLabelSize(
settings()->value(
"View3D/labelSize").toDouble());
249 if (key ==
"View3D/depthPeeling")
250 this->setTranslucentRenderingToDepthPeeling(
settings()->value(
"View3D/depthPeeling").toBool());
253 void ViewWrapper3D::updateMetricNamesRep()
255 bool enabled =
settings()->
value(
"View/showMetricNamesInCorner").value<
bool>();
262 mView->addRep(mMetricNames);
270 mView->removeRep(mMetricNames);
271 mMetricNames.reset();
275 void ViewWrapper3D::PickerRepPointPickedSlot(
Vector3D p_r)
281 void ViewWrapper3D::PickerRepDataPickedSlot(QString uid)
286 void ViewWrapper3D::appendToContextMenu(QMenu& contextMenu)
288 QAction* slicePlanesAction = NULL;
289 QAction* fillSlicePlanesAction = NULL;
290 if (mSlicePlanes3DRep)
292 slicePlanesAction =
new QAction(
"Show Slice Planes", &contextMenu);
293 slicePlanesAction->setCheckable(
true);
294 slicePlanesAction->setChecked(mSlicePlanes3DRep->getProxy()->getVisible());
295 connect(slicePlanesAction, SIGNAL(triggered(
bool)),
this, SLOT(showSlicePlanesActionSlot(
bool)));
297 fillSlicePlanesAction =
new QAction(
"Fill Slice Planes", &contextMenu);
298 fillSlicePlanesAction->setCheckable(
true);
299 fillSlicePlanesAction->setEnabled(mSlicePlanes3DRep->getProxy()->getVisible());
300 fillSlicePlanesAction->setChecked(mSlicePlanes3DRep->getProxy()->getDrawPlanes());
301 connect(fillSlicePlanesAction, SIGNAL(triggered(
bool)),
this, SLOT(fillSlicePlanesActionSlot(
bool)));
304 QAction* resetCameraAction =
new QAction(
"Reset Camera (r)", &contextMenu);
305 connect(resetCameraAction, SIGNAL(triggered()),
this, SLOT(resetCameraActionSlot()));
307 QAction* centerImageAction =
new QAction(
"Center to image", &contextMenu);
308 connect(centerImageAction, SIGNAL(triggered()),
this, SLOT(centerImageActionSlot()));
310 QAction* centerToolAction =
new QAction(
"Center to tool", &contextMenu);
311 connect(centerToolAction, SIGNAL(triggered()),
this, SLOT(centerToolActionSlot()));
313 QAction* showAxesAction =
new QAction(
"Show Coordinate Axes", &contextMenu);
314 showAxesAction->setCheckable(
true);
315 showAxesAction->setChecked(mShowAxes);
316 connect(showAxesAction, SIGNAL(triggered(
bool)),
this, SLOT(showAxesActionSlot(
bool)));
318 QAction* showManualTool =
new QAction(
"Show Manual Tool", &contextMenu);
319 showManualTool->setCheckable(
true);
320 showManualTool->setChecked(
settings()->value(
"showManualTool").toBool());
321 connect(showManualTool, SIGNAL(triggered(
bool)),
this, SLOT(showManualToolSlot(
bool)));
323 QAction* showOrientation =
new QAction(
"Show Orientation", &contextMenu);
324 showOrientation->setCheckable(
true);
325 showOrientation->setChecked(mAnnotationMarker->getVisible());
326 connect(showOrientation, SIGNAL(triggered(
bool)),
this, SLOT(showOrientationSlot(
bool)));
328 QAction* showToolPath =
new QAction(
"Show Tool Path", &contextMenu);
329 showToolPath->setCheckable(
true);
330 showToolPath->setChecked(
settings()->value(
"showToolPath").toBool());
331 connect(showToolPath, SIGNAL(triggered(
bool)),
this, SLOT(showToolPathSlot(
bool)));
333 QMenu* show3DSlicesMenu =
new QMenu(
"Show 3D slices");
336 QMenu* showSlicesMenu =
new QMenu(
"Slice Type", &contextMenu);
337 this->createSlicesActions(showSlicesMenu);
339 QAction* showRefTool =
new QAction(
"Show Reference Tool", &contextMenu);
340 showRefTool->setDisabled(
true);
341 showRefTool->setCheckable(
true);
345 showRefTool->setText(
"Show " + refTool->getName());
346 showRefTool->setEnabled(
true);
347 showRefTool->setChecked(RepContainer(mView->getReps()).findFirst<ToolRep3D>(refTool) ?
true :
false);
348 connect(showRefTool, SIGNAL(toggled(
bool)),
this, SLOT(showRefToolSlot(
bool)));
351 contextMenu.addSeparator();
352 contextMenu.addMenu(show3DSlicesMenu);
353 contextMenu.addMenu(showSlicesMenu);
354 contextMenu.addSeparator();
355 contextMenu.addAction(resetCameraAction);
356 contextMenu.addAction(centerImageAction);
357 contextMenu.addAction(centerToolAction);
358 contextMenu.addAction(showAxesAction);
359 contextMenu.addAction(showOrientation);
360 contextMenu.addSeparator();
361 contextMenu.addAction(showManualTool);
362 contextMenu.addAction(showRefTool);
364 contextMenu.addAction(showToolPath);
365 contextMenu.addSeparator();
366 if (slicePlanesAction)
367 contextMenu.addAction(slicePlanesAction);
368 if (fillSlicePlanesAction)
369 contextMenu.addAction(fillSlicePlanesAction);
372 void ViewWrapper3D::createSlicesActions(QWidget* parent)
375 this->createSlicesAction(PlaneTypeCollection(
ptAXIAL), parent);
376 this->createSlicesAction(PlaneTypeCollection(
ptCORONAL), parent);
377 this->createSlicesAction(PlaneTypeCollection(
ptSAGITTAL), parent);
378 this->createSlicesAction(PlaneTypeCollection(
ptANYPLANE), parent);
379 this->createSlicesAction(PlaneTypeCollection(
ptRADIALPLANE), parent);
380 this->createSlicesAction(PlaneTypeCollection(
ptSIDEPLANE), parent);
383 QAction* ViewWrapper3D::createSlicesAction(PlaneTypeCollection planes, QWidget* parent)
385 QString title = planes.toString();
386 QString active =
mGroupData->getSliceDefinitions().toString();
388 QAction* action =
new QAction(title, parent);
389 connect(action, SIGNAL(triggered()),
this, SLOT(showSlices()));
390 action->setData(title);
391 action->setCheckable(
true);
392 action->setChecked(active == title);
394 parent->addAction(action);
398 void ViewWrapper3D::showSlices()
400 QAction* action =
dynamic_cast<QAction*
>(sender());
406 if (!action->isChecked())
407 mGroupData->setSliceDefinitions(PlaneTypeCollection());
416 connect(group.get(), SIGNAL(initialized()),
this, SLOT(resetCameraActionSlot()));
417 connect(group.get(), SIGNAL(optionsChanged()),
this, SLOT(optionChangedSlot()));
418 mView->getRenderer()->SetActiveCamera(
mGroupData->getCamera3D()->getCamera());
421 this->setStereoEyeAngle(
settings()->value(
"View3D/eyeAngle").toDouble());
422 this->optionChangedSlot();
426 void ViewWrapper3D::showToolPathSlot(
bool checked)
432 if (activeRep3D->getTracer()->isRunning())
434 activeRep3D->getTracer()->stop();
435 activeRep3D->getTracer()->clear();
439 activeRep3D->getTracer()->start();
446 void ViewWrapper3D::showAxesActionSlot(
bool checked)
448 if (mShowAxes == checked)
454 for (
unsigned i=0; i<mAxis.size(); ++i)
455 mView->removeRep(mAxis[i]->mRep);
464 axis.reset(
new AxisConnector(CoordinateSystem(
csREF),
mBackend->getSpaceProvider()));
465 axis->mRep->setAxisLength(0.12);
466 axis->mRep->setShowAxesLabels(
true);
467 axis->mRep->setCaption(
"ref",
Vector3D(1, 0, 0));
468 axis->mRep->setFontSize(0.03);
469 mAxis.push_back(axis);
472 std::vector<DataPtr> data =
mGroupData->getData();
473 for (
unsigned i = 0; i < data.size(); ++i)
475 axis.reset(
new AxisConnector(CoordinateSystem(
csDATA, data[i]->getUid()),
mBackend->getSpaceProvider()));
476 axis->mRep->setAxisLength(0.08);
477 axis->mRep->setShowAxesLabels(
false);
478 axis->mRep->setCaption(data[i]->getName(),
Vector3D(1, 0, 0));
479 axis->mRep->setFontSize(0.03);
480 mAxis.push_back(axis);
485 TrackingService::ToolMap::iterator iter;
486 for (iter = tools.begin(); iter != tools.end(); ++iter)
490 axis.reset(
new AxisConnector(CoordinateSystem(
csTOOL, tool->getUid()),
mBackend->getSpaceProvider()));
491 axis->mRep->setAxisLength(0.08);
492 axis->mRep->setShowAxesLabels(
false);
493 axis->mRep->setCaption(
"t",
Vector3D(0.7, 1, 0.7));
494 axis->mRep->setFontSize(0.03);
495 axis->connectTo(tool);
498 mAxis.push_back(axis);
500 axis.reset(
new AxisConnector(CoordinateSystem(
csSENSOR, tool->getUid()),
mBackend->getSpaceProvider()));
501 axis->mRep->setAxisLength(0.05);
502 axis->mRep->setShowAxesLabels(
false);
503 axis->mRep->setCaption(
"s",
Vector3D(1, 1, 0));
504 axis->mRep->setFontSize(0.03);
505 axis->connectTo(tool);
506 axis->mergeWith(mToolListener);
507 mAxis.push_back(axis);
510 for (
unsigned i=0; i<mAxis.size(); ++i)
511 mView->addRep(mAxis[i]->mRep);
515 void ViewWrapper3D::showManualToolSlot(
bool visible)
520 void ViewWrapper3D::showOrientationSlot(
bool visible)
526 void ViewWrapper3D::resetCameraActionSlot()
528 mView->getRenderer()->ResetCamera();
530 this->setStereoEyeAngle(
settings()->value(
"View3D/eyeAngle").toDouble());
536 camera3D->setView(mView);
541 void ViewWrapper3D::centerImageActionSlot()
545 if (
mBackend->getPatientService()->getActiveImage())
546 nav->centerToData(
mBackend->getPatientService()->getActiveImage());
551 void ViewWrapper3D::centerToolActionSlot()
554 nav->centerToTooltip();
557 void ViewWrapper3D::showSlicePlanesActionSlot(
bool checked)
559 if (!mSlicePlanes3DRep)
561 mSlicePlanes3DRep->getProxy()->setVisible(checked);
565 void ViewWrapper3D::fillSlicePlanesActionSlot(
bool checked)
567 if (!mSlicePlanes3DRep)
569 mSlicePlanes3DRep->getProxy()->setDrawPlanes(checked);
578 this->addVolumeDataRep(data);
580 this->removeVolumeDataRep(uid);
582 this->updateSlices();
584 this->activeImageChangedSlot();
588 void ViewWrapper3D::addVolumeDataRep(
DataPtr data)
595 mMultiVolume3DRepProducer->addImage(image);
599 if (!mDataReps.count(data->getUid()))
601 RepPtr rep = this->createDataRep3D(data);
604 mDataReps[data->getUid()] = rep;
611 void ViewWrapper3D::removeVolumeDataRep(QString uid)
613 mMultiVolume3DRepProducer->removeImage(uid);
614 if (mDataReps.count(uid))
616 mView->removeRep(mDataReps[uid]);
617 mDataReps.erase(uid);
626 if (boost::dynamic_pointer_cast<Mesh>(data))
629 rep->setMesh(boost::dynamic_pointer_cast<Mesh>(data));
632 else if (boost::dynamic_pointer_cast<TrackedStream>(data))
634 TrackedStreamPtr trackedStream = boost::dynamic_pointer_cast<TrackedStream>(data);
635 return this->createTrackedStreamRep(trackedStream);
649 if(!trackedStream->hasVideo())
656 if(trackedStream->is3D())
660 QString visualizerType =
settings()->
value(
"View3D/ImageRender3DVisualizer").toString();
661 if(visualizerType ==
"vtkVolumeTextureMapper3D")
662 rep->setUseVolumeTextureMapper();
663 else if(visualizerType ==
"vtkGPUVolumeRayCastMapper")
664 rep->setUseGPUVolumeRayCastMapper();
667 reportError(QString(
"No visualizer found for string=%1").arg(visualizerType));
670 rep->setTrackedStream(trackedStream);
675 std::cout <<
"ViewWrapper3D::createDataRep3D. StreamRep2D not implemented yet" << std::endl;
684 if (boost::dynamic_pointer_cast<PointMetric>(data))
686 else if (boost::dynamic_pointer_cast<FrameMetric>(data))
688 else if (boost::dynamic_pointer_cast<ToolMetric>(data))
690 else if (boost::dynamic_pointer_cast<DistanceMetric>(data))
692 else if (boost::dynamic_pointer_cast<AngleMetric>(data))
694 else if (boost::dynamic_pointer_cast<PlaneMetric>(data))
696 else if (boost::dynamic_pointer_cast<DonutMetric>(data))
698 else if (boost::dynamic_pointer_cast<SphereMetric>(data))
703 this->readDataRepSettings(rep);
704 rep->setDataMetric(boost::dynamic_pointer_cast<DataMetric>(data));
712 void ViewWrapper3D::readDataRepSettings(
RepPtr rep)
718 val->setGraphicsSize(
settings()->value(
"View3D/sphereRadius").toDouble());
719 val->setShowLabel(
settings()->value(
"View/showLabels").toBool());
720 val->setLabelSize(
settings()->value(
"View3D/labelSize").toDouble());
721 val->setShowAnnotation(!
settings()->value(
"View/showMetricNamesInCorner").toBool());
724 void ViewWrapper3D::updateView()
727 bool show =
settings()->
value(
"View/showDataText").value<
bool>();
733 mDataNameText->setText(0, text);
734 mDataNameText->setFontSize(std::max(12, 22 - 2 * text.size()));
736 this->updateMetricNamesRep();
738 mAnnotationMarker->setVisible(
settings()->value(
"View/showOrientationAnnotation").value<bool>());
741 void ViewWrapper3D::activeImageChangedSlot()
749 if (!std::count(images.begin(), images.end(), image))
753 void ViewWrapper3D::showRefToolSlot(
bool checked)
758 ToolRep3DPtr refRep = RepContainer(mView->getReps()).findFirst<ToolRep3D>(refTool);
761 refRep =
ToolRep3D::New(
mBackend->getSpaceProvider(), refTool->getUid() +
"_rep3d_" + this->mView->getUid());
762 refRep->setTool(refTool);
766 mView->addRep(refRep);
769 mView->removeRep(refRep);
773 void ViewWrapper3D::updateSlices()
776 mView->removeRep(mSlices3DRep);
786 std::vector<PLANE_TYPE> planes =
mGroupData->getSliceDefinitions().get();
791 for (
unsigned i=0; i<planes.size(); ++i)
792 mSlices3DRep->addPlane(planes[i],
mBackend->getPatientService());
794 mSlices3DRep->setImages(images);
795 mSlices3DRep->setTool(
mBackend->getToolManager()->getActiveTool());
797 mView->addRep(mSlices3DRep);
805 void ViewWrapper3D::activeToolChangedSlot()
808 mPickerRep->setTool(activeTool);
810 mSlices3DRep->setTool(activeTool);
813 void ViewWrapper3D::toolsAvailableSlot()
815 std::vector<ToolRep3DPtr> reps = RepContainer::findReps<ToolRep3D>(mView->getReps());
818 TrackingService::ToolMap::iterator iter;
819 for (iter = tools.begin(); iter != tools.end(); ++iter)
825 ToolRep3DPtr toolRep = RepContainer(mView->getReps()).findFirst<ToolRep3D>(tool);
827 std::vector<ToolRep3DPtr>::iterator oldRep = std::find(reps.begin(), reps.end(), toolRep);
828 if (oldRep!=reps.end())
834 mView->removeRep(toolRep);
841 toolRep =
ToolRep3D::New(
mBackend->getSpaceProvider(), tool->getUid() +
"_rep3d_" + this->mView->getUid());
843 toolRep->getTracer()->start();
846 toolRep->setSphereRadius(
settings()->value(
"View3D/sphereRadius").toDouble());
847 toolRep->setSphereRadiusInNormalizedViewport(
true);
849 toolRep->setTool(tool);
850 toolRep->setOffsetPointVisibleAtZeroOffset(
true);
851 mView->addRep(toolRep);
855 for (
unsigned i=0; i<reps.size(); ++i)
857 mView->removeRep(reps[i]);
861 void ViewWrapper3D::optionChangedSlot()
863 ViewGroupData::Options options =
mGroupData->getOptions();
865 this->showLandmarks(options.mShowLandmarks);
866 this->showPointPickerProbe(options.mShowPointPickerProbe);
867 mPickerRep->setGlyph(options.mPickerGlyph);
869 this->updateSlices();
872 void ViewWrapper3D::showLandmarks(
bool on)
874 if (mLandmarkRep->isConnectedToView(mView) == on)
879 mView->addRep(mLandmarkRep);
883 mView->removeRep(mLandmarkRep);
887 void ViewWrapper3D::showPointPickerProbe(
bool on)
889 mPickerRep->setEnabled(on);
895 mSlicePlanes3DRep->setProxy(proxy);
896 mSlicePlanes3DRep->setDynamicLabelSize(
true);
898 mSlicePlanes3DRep->getProxy()->setVisible(show);
900 mView->addRep(mSlicePlanes3DRep);
909 mView->getRenderWindow()->SetStereoTypeToCrystalEyes();
912 mView->getRenderWindow()->SetStereoTypeToInterlaced();
915 mView->getRenderWindow()->SetStereoTypeToDresden();
918 mView->getRenderWindow()->SetStereoTypeToRedBlue();
923 void ViewWrapper3D::globalConfigurationFileChangedSlot(QString key)
925 if (key ==
"View3D/stereoType")
929 else if (key ==
"View3D/eyeAngle")
931 this->setStereoEyeAngle(
settings()->value(
"View3D/eyeAngle").toDouble());
935 void ViewWrapper3D::setStereoEyeAngle(
double angle)
937 mView->getRenderer()->GetActiveCamera()->SetEyeAngle(angle);
940 void ViewWrapper3D::setTranslucentRenderingToDepthPeeling(
bool setDepthPeeling)
947 vtkSmartPointer<vtkPolyDataMapper> mapper =
948 vtkSmartPointer<vtkPolyDataMapper>::New();
949 mapper->SetInputConnection(translucentGeometry->GetOutputPort());
950 vtkSmartPointer<vtkActor> actor =
951 vtkSmartPointer<vtkActor>::New();
952 actor->SetMapper(mapper);
953 actor->GetProperty()->SetOpacity(0.5);
954 actor->GetProperty()->SetColor(1, 0, 0);
958 mView->getRenderer()->AddActor(actor);
972 report(
"Set GPU depth peeling");
bool SetupEnvironmentForDepthPeeling(vtkSmartPointer< vtkRenderWindow > renderWindow, vtkSmartPointer< vtkRenderer > renderer, int maxNoOfPeels, double occlusionRatio)
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 TrackedStream > TrackedStreamPtr
virtual ViewPtr getView()
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="")
virtual void setSlicePlanesProxy(SlicePlanesProxyPtr proxy)
csREF
the data reference space (r)
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
static AngleMetricRepPtr New(const QString &uid="")
boost::shared_ptr< class DataMetricRep > DataMetricRepPtr
Class for display of an orientation annotation cube in 3D.
ViewWrapper3D(int startIndex, ViewPtr view, CoreServicesPtr backend)
boost::shared_ptr< class View > ViewPtr
boost::shared_ptr< class Navigation > NavigationPtr
static DataViewProperties create3D()
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)
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="")
vtkSmartPointer< vtkAppendPolyData > GenerateOverlappingBunchOfSpheres(int theta, int phi)
ViewGroupDataPtr mGroupData
static QString findConfigFilePath(QString fileName, QString pathRelativeToConfigRoot, QString alternativeAbsolutePath="")
static GeometricRepPtr New(const QString &uid="")
virtual void setViewGroup(ViewGroupDataPtr group)
Settings * settings()
Shortcut for accessing the settings instance.
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)
boost::shared_ptr< class CameraControl > CameraControlPtr
bool TurnOffDepthPeeling(vtkSmartPointer< vtkRenderWindow > renderWindow, vtkSmartPointer< vtkRenderer > renderer)
Turn off depth peeling.
QStringList getAllDataNames(DataViewProperties properties) const
static PointMetricRepPtr New(const QString &uid="")
static DisplayTextRepPtr New(const QString &uid="")
boost::shared_ptr< class CoreServices > CoreServicesPtr
boost::shared_ptr< class SpaceListener > SpaceListenerPtr
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
void connectContextMenu(ViewPtr view)
boost::shared_ptr< class Rep > RepPtr
static Slices3DRepPtr New(const QString &uid)
static DistanceMetricRepPtr New(const QString &uid="")
static SphereMetricRepPtr New(const QString &uid="")
ptSIDEPLANE
z-rotated 90* relative to anyplane (dual anyplane)
boost::shared_ptr< class GeometricRep > GeometricRepPtr
boost::shared_ptr< class Tool > ToolPtr