X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvSlicer.cxx;h=4c5fcfb44f6fbc08f336ea85a83f904d26f69327;hb=c99295881254fc9245d4ee2a4cf940cf87ca2d7f;hp=0e3b3bf1fe9b870ba1b2be414a1b07d11ddc9282;hpb=bdee540d89920d23994cd848a020cf1081f0976b;p=clitk.git diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx index 0e3b3bf..4c5fcfb 100644 --- a/vv/vvSlicer.cxx +++ b/vv/vvSlicer.cxx @@ -75,8 +75,8 @@ #include #include #include -#include #if VTK_MAJOR_VERSION >= 6 || (VTK_MAJOR_VERSION >= 5 && VTK_MINOR_VERSION >= 10) +# include # include # include #endif @@ -384,7 +384,7 @@ void vvSlicer::SetImage(vvImage::Pointer image) mImageReslice->GetOutput()->SetUpdateExtent(extent); mImageReslice->GetOutput()->Update(); #else - mImageReslice->SetUpdateExtent(extent); + //mImageReslice->SetUpdateExtent(extent); mImageReslice->Update(); #endif @@ -417,6 +417,7 @@ void vvSlicer::SetOverlay(vvImage::Pointer overlay) mOverlayReslice->SetResliceTransform(mConcatenatedOverlayTransform); #if VTK_MAJOR_VERSION <= 5 mOverlayReslice->SetInput(0, mOverlay->GetFirstVTKImageData()); + mImageReslice->UpdateInformation(); #else mOverlayReslice->SetInputData(0, mOverlay->GetFirstVTKImageData()); #endif @@ -483,6 +484,7 @@ void vvSlicer::SetFusion(vvImage::Pointer fusion, int fusionSequenceCode) mFusionReslice->SetResliceTransform(mConcatenatedFusionTransform); #if VTK_MAJOR_VERSION <= 5 mFusionReslice->SetInput(0, mFusion->GetFirstVTKImageData()); + mFusionReslice->UpdateInformation(); #else mFusionReslice->SetInputData(0, mFusion->GetFirstVTKImageData()); #endif @@ -669,12 +671,24 @@ void vvSlicer::SetLandmarks(vvLandmarks* landmarks) mLandClipper->SetClipFunction(mClipBox); mLandClipper->InsideOutOn(); #if VTK_MAJOR_VERSION <= 5 - mLandClipper->SetInput(mLandmarks->GetOutput()); + mLandmarkTransform = vtkSmartPointer::New(); + mLandmarkTransform->SetInput(mLandmarks->GetOutput()); + mConcatenatedTransform->Identity(); + mConcatenatedTransform->Concatenate(mImage->GetTransform()[0]); + mConcatenatedTransform->Concatenate(mSlicingTransform); + mLandmarkTransform->SetTransform(mConcatenatedTransform->GetInverse()); + mLandClipper->SetInput(mLandmarkTransform->GetOutput()); mLandGlyph->SetSource(mCross->GetOutput()); mLandGlyph->SetInput(mLandClipper->GetOutput()); #else - mLandClipper->SetInputData(mLandmarks->GetOutput()); + mLandmarkTransform = vtkSmartPointer::New(); + mLandmarkTransform->SetInputData(mLandmarks->GetOutput()); + mConcatenatedTransform->Identity(); + mConcatenatedTransform->Concatenate(mImage->GetTransform()[0]); + mConcatenatedTransform->Concatenate(mSlicingTransform); + mLandmarkTransform->SetTransform(mConcatenatedTransform->GetInverse()); + mLandClipper->SetInputConnection(mLandmarkTransform->GetOutputPort()); mLandGlyph->SetSourceConnection(mCross->GetOutputPort()); mLandGlyph->SetInputConnection(mLandClipper->GetOutputPort()); @@ -697,7 +711,6 @@ void vvSlicer::SetLandmarks(vvLandmarks* landmarks) mLandActor->SetPickable(0); mLandActor->SetVisibility(true); this->UpdateDisplayExtent(); - this->GetRenderer()->AddActor(mLandActor); } } //------------------------------------------------------------------------------ @@ -903,9 +916,9 @@ int vvSlicer::GetTSlice() int vvSlicer::GetMaxCurrentTSlice() { int t = mCurrentTSlice; - if(mOverlay) + if(mOverlay && mOverlayActor->GetVisibility()) t = std::max(t, mCurrentOverlayTSlice); - if(mFusion&& (mFusionSequenceCode<0)) //ignore fusionSequence data: for these, the times are not to be related (this way) + if(mFusion&& (mFusionSequenceCode<0) && mFusionActor->GetVisibility()) //ignore fusionSequence data: for these, the times are not to be related (this way) t = std::max(t, mCurrentFusionTSlice); return t; } @@ -1037,6 +1050,9 @@ void vvSlicer::AdjustResliceToSliceOrientation(vtkImageReslice *reslice) reslice->SetOutputOrigin(origin); reslice->SetOutputSpacing(spacing); reslice->UpdateInformation(); +#if VTK_MAJOR_VERSION <= 5 + reslice->GetOutput()->UpdateInformation(); +#endif } //------------------------------------------------------------------------------ @@ -1174,7 +1190,7 @@ void vvSlicer::UpdateDisplayExtent() this->ConvertImageToImageDisplayExtent(input, w_ext, mVF->GetVTKImages()[0], vfExtent); bool out = ClipDisplayedExtent(vfExtent, mVOIFilter->GetInput()->GetWholeExtent()); #else - //this->UpdateInformation(); + mVOIFilter->Update(); this->ConvertImageToImageDisplayExtent(mImageReslice->GetOutputInformation(0), w_ext, mVF->GetVTKImages()[0], vfExtent); bool out = ClipDisplayedExtent(vfExtent, mVOIFilter->GetInputInformation()->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())); #endif @@ -1549,11 +1565,15 @@ void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max, vtkImag if(iLocalExtents[i*2 ]>iLocalExtents[i*2+1]) std::swap(iLocalExtents[i*2], iLocalExtents[i*2+1]); - if(iLocalExtents[i*2]< mImageReslice->GetInputInformation()->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[2*i]) - iLocalExtents[i*2] = mImageReslice->GetInputInformation()->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[2*i]; +#if VTK_MAJOR_VERSION > 5 + for(int j=0;j<2; j++) { + if(iLocalExtents[i*2+j]< mImageReslice->GetInputInformation()->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[2*i]) + iLocalExtents[i*2+j] = mImageReslice->GetInputInformation()->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[2*i]; - if(iLocalExtents[i*2+1]> mImageReslice->GetInputInformation()->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[2*i+1]) - iLocalExtents[i*2+1] = mImageReslice->GetInputInformation()->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[2*i+1]; + if(iLocalExtents[i*2+j]> mImageReslice->GetInputInformation()->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[2*i+1]) + iLocalExtents[i*2+j] = mImageReslice->GetInputInformation()->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[2*i+1]; + } +#endif } vtkSmartPointer voiFilter = vtkSmartPointer::New(); @@ -1600,17 +1620,16 @@ double vvSlicer::GetScalarComponentAsDouble(vtkImageData *image, double X, doubl image->SetUpdateExtent(ix, ix, iy, iy, iz, iz); image->Update(); #else - if (ix < image->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[0] || - ix > image->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[1] || - iy < image->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[2] || - iy > image->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[3] || - iz < image->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[4] || - iz > image->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[5] ) + if (ix < mImageReslice->GetOutputInformation(0)->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[0] || + ix > mImageReslice->GetOutputInformation(0)->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[1] || + iy < mImageReslice->GetOutputInformation(0)->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[2] || + iy > mImageReslice->GetOutputInformation(0)->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[3] || + iz < mImageReslice->GetOutputInformation(0)->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[4] || + iz > mImageReslice->GetOutputInformation(0)->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())[5] ) return std::numeric_limits::quiet_NaN(); //image->SetUpdateExtent(ix, ix, iy, iy, iz, iz); //image->Update(); #endif - return image->GetScalarComponentAsDouble(ix, iy, iz, component); } //---------------------------------------------------------------------------- @@ -1632,54 +1651,34 @@ void vvSlicer::Render() if (ca->GetVisibility()) { std::stringstream worldPos(" "); - double pt[3]; - mConcatenatedTransform->TransformPoint(mCurrent, pt); - double X = (pt[0] - mImage->GetVTKImages()[mCurrentTSlice]->GetOrigin()[0])/mImage->GetVTKImages()[mCurrentTSlice]->GetSpacing()[0]; - double Y = (pt[1] - mImage->GetVTKImages()[mCurrentTSlice]->GetOrigin()[1])/mImage->GetVTKImages()[mCurrentTSlice]->GetSpacing()[1]; - double Z = (pt[2] - mImage->GetVTKImages()[mCurrentTSlice]->GetOrigin()[2])/mImage->GetVTKImages()[mCurrentTSlice]->GetSpacing()[2]; + double X = (mCurrent[0] - this->GetInput()->GetOrigin()[0])/this->GetInput()->GetSpacing()[0]; + double Y = (mCurrent[1] - this->GetInput()->GetOrigin()[1])/this->GetInput()->GetSpacing()[1]; + double Z = (mCurrent[2] - this->GetInput()->GetOrigin()[2])/this->GetInput()->GetSpacing()[2]; #if VTK_MAJOR_VERSION <= 5 - if (X >= mImage->GetVTKImages()[mCurrentTSlice]->GetWholeExtent()[0]-0.5 && - X <= mImage->GetVTKImages()[mCurrentTSlice]->GetWholeExtent()[1]+0.5 && - Y >= mImage->GetVTKImages()[mCurrentTSlice]->GetWholeExtent()[2]-0.5 && - Y <= mImage->GetVTKImages()[mCurrentTSlice]->GetWholeExtent()[3]+0.5 && - Z >= mImage->GetVTKImages()[mCurrentTSlice]->GetWholeExtent()[4]-0.5 && - Z <= mImage->GetVTKImages()[mCurrentTSlice]->GetWholeExtent()[5]+0.5) { - - - int ix, iy, iz; - double value = this->GetScalarComponentAsDouble(mImage->GetVTKImages()[mCurrentTSlice], X, Y, Z, ix, iy, iz); - - if(ImageActor->GetVisibility()) - worldPos << "data value : " << value << std::endl; - - worldPos << "mm : " << lrint(mCurrentBeforeSlicingTransform[0]) << ' ' - << lrint(mCurrentBeforeSlicingTransform[1]) << ' ' - << lrint(mCurrentBeforeSlicingTransform[2]) << ' ' - << mCurrentTSlice - << std::endl; - worldPos << "pixel : " << ix << ' ' - << iy << ' ' - << iz << ' ' - << mCurrentTSlice - << std::endl; - } + if (X >= this->GetInput()->GetWholeExtent()[0]-0.5 && + X <= this->GetInput()->GetWholeExtent()[1]+0.5 && + Y >= this->GetInput()->GetWholeExtent()[2]-0.5 && + Y <= this->GetInput()->GetWholeExtent()[3]+0.5 && + Z >= this->GetInput()->GetWholeExtent()[4]-0.5 && + Z <= this->GetInput()->GetWholeExtent()[5]+0.5) { #else - if (X >= mImage->GetVTKImages()[mCurrentTSlice]->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[0]-0.5 && - X <= mImage->GetVTKImages()[mCurrentTSlice]->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[1]+0.5 && - Y >= mImage->GetVTKImages()[mCurrentTSlice]->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[2]-0.5 && - Y <= mImage->GetVTKImages()[mCurrentTSlice]->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[3]+0.5 && - Z >= mImage->GetVTKImages()[mCurrentTSlice]->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[4]-0.5 && - Z <= mImage->GetVTKImages()[mCurrentTSlice]->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[5]+0.5) { - + int extentImageReslice[6]; + this->GetRegisterExtent(extentImageReslice); + if (X >= extentImageReslice[0]-0.5 && + X <= extentImageReslice[1]+0.5 && + Y >= extentImageReslice[2]-0.5 && + Y <= extentImageReslice[3]+0.5 && + Z >= extentImageReslice[4]-0.5 && + Z <= extentImageReslice[5]+0.5) { +#endif int ix, iy, iz; - double value = this->GetScalarComponentAsDouble(mImage->GetVTKImages()[mCurrentTSlice], X, Y, Z, ix, iy, iz); + double value = this->GetScalarComponentAsDouble(this->GetInput(), X, Y, Z, ix, iy, iz); if(ImageActor->GetVisibility()) worldPos << "data value : " << value << std::endl; - - worldPos << "mm : " << lrint(mCurrentBeforeSlicingTransform[0]) << ' ' - << lrint(mCurrentBeforeSlicingTransform[1]) << ' ' - << lrint(mCurrentBeforeSlicingTransform[2]) << ' ' + worldPos << "mm : " << lrint(mCurrent[0]) << ' ' + << lrint(mCurrent[1]) << ' ' + << lrint(mCurrent[2]) << ' ' << mCurrentTSlice << std::endl; worldPos << "pixel : " << ix << ' ' @@ -1689,7 +1688,6 @@ void vvSlicer::Render() << std::endl; } -#endif ca->SetText(1,worldPos.str().c_str()); std::stringstream slicePos; @@ -1798,7 +1796,7 @@ void vvSlicer::UpdateCursorPosition() //---------------------------------------------------------------------------- void vvSlicer::RemoveLandmarks() { - vtkPolyData *pd = static_cast(mLandClipper->GetInput()); + vtkPolyData *pd = static_cast(mLandmarks->GetOutput()); if (pd->GetPoints()) { //First remove all captions: @@ -1824,12 +1822,12 @@ void vvSlicer::DisplayLandmarks() mClipBox->SetBounds(bounds); - vtkPolyData *pd = static_cast(mLandClipper->GetInput()); + vtkPolyData *pd = static_cast(mLandmarks->GetOutput()); if (pd->GetPoints()) { + this->GetRenderer()->AddActor(mLandActor); //mLandGlyph->SetRange(0,1); //mLandGlyph->Modified(); //mLandGlyph->Update(); - mClipBox->Modified(); mLandClipper->Update(); mLandMapper->Update();