medResliceViewer::medResliceViewer(medAbstractView * view,QWidget * parent): medAbstractView(parent) { int * imageDims; vtkImageView3D * view3d; if (!view) return; inputData = static_cast<medAbstractLayeredView*>(view)->layerData(0); view3d = static_cast<medVtkViewBackend*>(view->backend())->view3D; vtkViewData = vtkSmartPointer<vtkImageData>::New(); vtkViewData->DeepCopy(view3d->GetInput()); imageDims = vtkViewData->GetDimensions(); viewBody = new QWidget(parent); for (int i = 0; i < 3; i++) { riw[i] = vtkSmartPointer<vtkResliceImageViewer>::New(); frames[i] = new QVTKFrame(viewBody); views[i] = frames[i]->getView(); views[i]->setSizePolicy ( QSizePolicy::Minimum, QSizePolicy::Minimum ); if (i==0) frames[i]->setStyleSheet("* {border : 1px solid #FF0000;}"); else if (i==1) frames[i]->setStyleSheet("* {border : 1px solid #00FF00;}"); else if (i==2) frames[i]->setStyleSheet("* {border : 1px solid #0000FF;}"); views[i]->installEventFilter(this); } frames[3] = new QVTKFrame(viewBody); views[3] = frames[3]->getView(); views[3]->setSizePolicy ( QSizePolicy::Minimum, QSizePolicy::Minimum ); QGridLayout * gridLayout = new QGridLayout(parent); gridLayout->addWidget(frames[2],0,0); gridLayout->addWidget(frames[3],0,1); gridLayout->addWidget(frames[1],1,0); gridLayout->addWidget(frames[0],1,1); gridLayout->setColumnStretch ( 0, 0 ); gridLayout->setColumnStretch ( 1, 0 ); gridLayout->setRowStretch ( 0, 0 ); gridLayout->setRowStretch ( 1, 0 ); viewBody->setLayout(gridLayout); views[0]->SetRenderWindow(riw[0]->GetRenderWindow()); riw[0]->SetupInteractor(views[0]->GetRenderWindow()->GetInteractor()); views[1]->SetRenderWindow(riw[1]->GetRenderWindow()); riw[1]->SetupInteractor(views[1]->GetRenderWindow()->GetInteractor()); views[2]->SetRenderWindow(riw[2]->GetRenderWindow()); riw[2]->SetupInteractor(views[2]->GetRenderWindow()->GetInteractor()); for (int i = 0; i < 3; i++) { // make them all share the same reslice cursor object. vtkResliceCursorLineRepresentation *rep = vtkResliceCursorLineRepresentation::SafeDownCast( riw[i]->GetResliceCursorWidget()->GetRepresentation()); riw[i]->SetResliceCursor(riw[2]->GetResliceCursor()); rep->GetResliceCursorActor()->GetCursorAlgorithm()->SetReslicePlaneNormal(i); riw[i]->SetInput(vtkViewData); riw[i]->SetSliceOrientation(i); riw[i]->SetResliceModeToOblique(); } vtkViewData->GetSpacing(outputSpacing); vtkSmartPointer<vtkCellPicker> picker = vtkSmartPointer<vtkCellPicker>::New(); picker->SetTolerance(0.005); vtkSmartPointer<vtkProperty> ipwProp = vtkSmartPointer<vtkProperty>::New(); vtkSmartPointer< vtkRenderer > ren = vtkSmartPointer< vtkRenderer >::New(); views[3]->GetRenderWindow()->AddRenderer(ren); vtkRenderWindowInteractor *iren = views[3]->GetInteractor(); for (int i = 0; i < 3; i++) { planeWidget[i] = vtkSmartPointer<vtkImagePlaneWidget>::New(); planeWidget[i]->SetInteractor( iren ); planeWidget[i]->SetPicker(picker); planeWidget[i]->RestrictPlaneToVolumeOn(); double color[3] = {0, 0, 0}; color[i] = 1; planeWidget[i]->GetPlaneProperty()->SetColor(color); color[0] /= 4.0; color[1] /= 4.0; color[2] /= 4.0; riw[i]->GetRenderer()->SetBackground( 0,0,0 ); planeWidget[i]->SetTexturePlaneProperty(ipwProp); planeWidget[i]->TextureInterpolateOff(); planeWidget[i]->SetResliceInterpolateToLinear(); planeWidget[i]->SetInput(vtkViewData); planeWidget[i]->SetPlaneOrientation(i); planeWidget[i]->SetSliceIndex(imageDims[i]/2); planeWidget[i]->DisplayTextOn(); planeWidget[i]->SetDefaultRenderer(ren); planeWidget[i]->On(); planeWidget[i]->InteractionOn(); } vtkSmartPointer<medResliceCursorCallback> cbk = vtkSmartPointer<medResliceCursorCallback>::New(); cbk->reformatViewer = this; for (int i = 0; i < 3; i++) { riw[i]->GetResliceCursorWidget()->AddObserver(vtkResliceCursorWidget::ResliceAxesChangedEvent, cbk); riw[i]->GetResliceCursorWidget()->AddObserver(vtkResliceCursorWidget::WindowLevelEvent, cbk); riw[i]->GetResliceCursorWidget()->AddObserver(vtkResliceCursorWidget::ResliceThicknessChangedEvent, cbk); riw[i]->GetResliceCursorWidget()->AddObserver(vtkResliceCursorWidget::ResetCursorEvent, cbk); riw[i]->GetInteractorStyle()->AddObserver(vtkCommand::WindowLevelEvent, cbk); riw[i]->GetInteractorStyle()->AddObserver(vtkCommand::MouseMoveEvent, cbk); // Make them all share the same color map. riw[i]->SetLookupTable(riw[2]->GetLookupTable()); riw[i]->SetColorLevel(view3d->GetColorLevel()); riw[i]->SetColorWindow(view3d->GetColorWindow()); planeWidget[i]->GetColorMap()->SetLookupTable(riw[2]->GetLookupTable()); planeWidget[i]->SetColorMap(riw[i]->GetResliceCursorWidget()->GetResliceCursorRepresentation()->GetColorMap()); } resetViews(); applyRadiologicalConvention(); updatePlaneNormals(); planeWidget[0]->GetCurrentRenderer()->ResetCamera(); planeWidget[0]->GetCurrentRenderer()->GetActiveCamera()->Azimuth(180); planeWidget[0]->GetCurrentRenderer()->GetActiveCamera()->Roll(180); views[0]->show(); views[1]->show(); views[2]->show(); selectedView = 2; this->initialiseNavigators(); }
void medResliceViewer::reset() { resetViews(); }
void medReformatViewer::reset() { resetViews(); }