X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvSlicer.cxx;h=1c486bc786213e22bc1e7d82342dbf2a04ed8644;hb=119a42cb1444930c78314e862e590f54c2f7678d;hp=86824a2c7a0932e656273410ea093c6d0eda75c8;hpb=e34a7746ec0b9f82124e344edc79e348bb0278d2;p=clitk.git diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx index 86824a2..1c486bc 100644 --- a/vv/vvSlicer.cxx +++ b/vv/vvSlicer.cxx @@ -267,6 +267,22 @@ bool vvSlicer::GetCursorVisibility() //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +void vvSlicer::SetCornerAnnotationVisibility(bool s) +{ + ca->SetVisibility(s); +} +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +bool vvSlicer::GetCornerAnnotationVisibility() +{ + return ca->GetVisibility(); +} +//------------------------------------------------------------------------------ + + //------------------------------------------------------------------------------ vvSlicer::~vvSlicer() { @@ -899,19 +915,19 @@ void vvSlicer::UpdateDisplayExtent() //---------------------------------------------------------------------------- void vvSlicer::ComputeVFDisplayedExtent(int x1,int x2,int y1,int y2,int z1,int z2,int vfExtent[6]) { - vtkImageData* image=this->GetInput(); - vfExtent[0] = (( image->GetOrigin()[0] + x1*image->GetSpacing()[0] ) - mVF->GetOrigin()[0]) / - mVF->GetSpacing()[0]; - vfExtent[1] = (( image->GetOrigin()[0] + x2*image->GetSpacing()[0] ) - mVF->GetOrigin()[0]) / - mVF->GetSpacing()[0]; - vfExtent[2] = (( image->GetOrigin()[1] + y1*image->GetSpacing()[1] ) - mVF->GetOrigin()[1]) / - mVF->GetSpacing()[1]; - vfExtent[3] = (( image->GetOrigin()[1] + y2*image->GetSpacing()[1] ) - mVF->GetOrigin()[1]) / - mVF->GetSpacing()[1]; - vfExtent[4] = (( image->GetOrigin()[2] + z1*image->GetSpacing()[2] ) - mVF->GetOrigin()[2]) / - mVF->GetSpacing()[2]; - vfExtent[5] = (( image->GetOrigin()[2] + z2*image->GetSpacing()[2] ) - mVF->GetOrigin()[2]) / - mVF->GetSpacing()[2]; + double dVfExtent[6]; + vtkImageData* image = this->GetInput(); + dVfExtent[0] = image->GetOrigin()[0] + x1*image->GetSpacing()[0]; + dVfExtent[1] = image->GetOrigin()[0] + x2*image->GetSpacing()[0]; + dVfExtent[2] = image->GetOrigin()[1] + y1*image->GetSpacing()[1]; + dVfExtent[3] = image->GetOrigin()[1] + y2*image->GetSpacing()[1]; + dVfExtent[4] = image->GetOrigin()[2] + z1*image->GetSpacing()[2]; + dVfExtent[5] = image->GetOrigin()[2] + z2*image->GetSpacing()[2]; + + vtkImageData* vf = mVF->GetTransformedVTKImages()[0]; + vf->UpdateInformation(); + for(unsigned int i=0; i<6; i++) + vfExtent[i] = itk::Math::Round((dVfExtent[i]- vf->GetOrigin()[i/2]) / vf->GetSpacing()[i/2]); ClipDisplayedExtent(vfExtent,mVOIFilter->GetInput()->GetWholeExtent()); } @@ -921,19 +937,20 @@ void vvSlicer::ComputeVFDisplayedExtent(int x1,int x2,int y1,int y2,int z1,int z //---------------------------------------------------------------------------- void vvSlicer::ComputeOverlayDisplayedExtent(int x1,int x2,int y1,int y2,int z1,int z2,int overExtent[6]) { - vtkImageData* image=this->GetInput(); - overExtent[0] = (( image->GetOrigin()[0] + x1*image->GetSpacing()[0] ) - mOverlay->GetOrigin()[0]) / - mOverlay->GetSpacing()[0]; - overExtent[1] = (( image->GetOrigin()[0] + x2*image->GetSpacing()[0] ) - mOverlay->GetOrigin()[0]) / - mOverlay->GetSpacing()[0]; - overExtent[2] = (( image->GetOrigin()[1] + y1*image->GetSpacing()[1] ) - mOverlay->GetOrigin()[1]) / - mOverlay->GetSpacing()[1]; - overExtent[3] = (( image->GetOrigin()[1] + y2*image->GetSpacing()[1] ) - mOverlay->GetOrigin()[1]) / - mOverlay->GetSpacing()[1]; - overExtent[4] = (( image->GetOrigin()[2] + z1*image->GetSpacing()[2] ) - mOverlay->GetOrigin()[2]) / - mOverlay->GetSpacing()[2]; - overExtent[5] = (( image->GetOrigin()[2] + z2*image->GetSpacing()[2] ) - mOverlay->GetOrigin()[2]) / - mOverlay->GetSpacing()[2]; + double dOverExtent[6]; + vtkImageData* image = this->GetInput(); + dOverExtent[0] = image->GetOrigin()[0] + x1*image->GetSpacing()[0]; + dOverExtent[1] = image->GetOrigin()[0] + x2*image->GetSpacing()[0]; + dOverExtent[2] = image->GetOrigin()[1] + y1*image->GetSpacing()[1]; + dOverExtent[3] = image->GetOrigin()[1] + y2*image->GetSpacing()[1]; + dOverExtent[4] = image->GetOrigin()[2] + z1*image->GetSpacing()[2]; + dOverExtent[5] = image->GetOrigin()[2] + z2*image->GetSpacing()[2]; + + vtkImageData* overlay = mOverlay->GetTransformedVTKImages()[0]; + overlay->UpdateInformation(); + for(unsigned int i=0; i<6; i++) + overExtent[i] = itk::Math::Round((dOverExtent[i]- overlay->GetOrigin()[i/2]) / overlay->GetSpacing()[i/2]); + ClipDisplayedExtent(overExtent, mOverlayMapper->GetInput()->GetWholeExtent()); } //---------------------------------------------------------------------------- @@ -942,19 +959,20 @@ void vvSlicer::ComputeOverlayDisplayedExtent(int x1,int x2,int y1,int y2,int z1, //---------------------------------------------------------------------------- void vvSlicer::ComputeFusionDisplayedExtent(int x1,int x2,int y1,int y2,int z1,int z2,int fusExtent[6]) { - vtkImageData* image=this->GetInput(); - fusExtent[0] = (( image->GetOrigin()[0] + x1*image->GetSpacing()[0] ) - mFusion->GetOrigin()[0]) / - mFusion->GetSpacing()[0]; - fusExtent[1] = (( image->GetOrigin()[0] + x2*image->GetSpacing()[0] ) - mFusion->GetOrigin()[0]) / - mFusion->GetSpacing()[0]; - fusExtent[2] = (( image->GetOrigin()[1] + y1*image->GetSpacing()[1] ) - mFusion->GetOrigin()[1]) / - mFusion->GetSpacing()[1]; - fusExtent[3] = (( image->GetOrigin()[1] + y2*image->GetSpacing()[1] ) - mFusion->GetOrigin()[1]) / - mFusion->GetSpacing()[1]; - fusExtent[4] = (( image->GetOrigin()[2] + z1*image->GetSpacing()[2] ) - mFusion->GetOrigin()[2]) / - mFusion->GetSpacing()[2]; - fusExtent[5] = (( image->GetOrigin()[2] + z2*image->GetSpacing()[2] ) - mFusion->GetOrigin()[2]) / - mFusion->GetSpacing()[2]; + double dFusExtent[6]; + vtkImageData* image = this->GetInput(); + dFusExtent[0] = image->GetOrigin()[0] + x1*image->GetSpacing()[0]; + dFusExtent[1] = image->GetOrigin()[0] + x2*image->GetSpacing()[0]; + dFusExtent[2] = image->GetOrigin()[1] + y1*image->GetSpacing()[1]; + dFusExtent[3] = image->GetOrigin()[1] + y2*image->GetSpacing()[1]; + dFusExtent[4] = image->GetOrigin()[2] + z1*image->GetSpacing()[2]; + dFusExtent[5] = image->GetOrigin()[2] + z2*image->GetSpacing()[2]; + + vtkImageData* fusion = mFusion->GetTransformedVTKImages()[0]; + fusion->UpdateInformation(); + for(unsigned int i=0; i<6; i++) + fusExtent[i] = itk::Math::Round((dFusExtent[i]- fusion->GetOrigin()[i/2]) / fusion->GetSpacing()[i/2]); + ClipDisplayedExtent(fusExtent, mFusionMapper->GetInput()->GetWholeExtent()); } //---------------------------------------------------------------------------- @@ -1220,7 +1238,7 @@ double vvSlicer::GetScalarComponentAsDouble(vtkImageData *image, int X, double Y iy > image->GetWholeExtent()[3] || iz < image->GetWholeExtent()[4] || iz > image->GetWholeExtent()[5] ) - return sqrt(-1); + return sqrt(-1.); image->SetUpdateExtent(ix, ix, iy, iy, iz, iz); image->Update(); @@ -1247,32 +1265,13 @@ void vvSlicer::Render() 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 (pdmA->GetVisibility()) { - double x = mCursor[0]; - double y = mCursor[1]; - double z = mCursor[2]; - double xCursor = (x - this->GetInput()->GetOrigin()[0])/this->GetInput()->GetSpacing()[0]; - double yCursor = (y - this->GetInput()->GetOrigin()[1])/this->GetInput()->GetSpacing()[1]; - double zCursor = (z - this->GetInput()->GetOrigin()[2])/this->GetInput()->GetSpacing()[2]; - - if (xCursor >= this->GetImageActor()->GetDisplayExtent()[0] && - xCursor < this->GetImageActor()->GetDisplayExtent()[1]+1 && - yCursor >= this->GetImageActor()->GetDisplayExtent()[2] && - yCursor < this->GetImageActor()->GetDisplayExtent()[3]+1 && - zCursor >= this->GetImageActor()->GetDisplayExtent()[4] && - zCursor < this->GetImageActor()->GetDisplayExtent()[5]+1 ) { - vtkRenderer * renderer = this->Renderer; - - renderer->WorldToView(x,y,z); - renderer->ViewToNormalizedViewport(x,y,z); - renderer->NormalizedViewportToViewport(x,y); - renderer->ViewportToNormalizedDisplay(x,y); - renderer->NormalizedDisplayToDisplay(x,y); - crossCursor->SetFocalPoint(x,y,z); - } else - crossCursor->SetFocalPoint(-1,-1,z); - } + +// if (X < this->GetInput()->GetWholeExtent()[0]) X = this->GetInput()->GetWholeExtent()[0]; +// else if (X > this->GetInput()->GetWholeExtent()[1]) X = this->GetInput()->GetWholeExtent()[1]; +// if (Y < this->GetInput()->GetWholeExtent()[2]) Y = this->GetInput()->GetWholeExtent()[2]; +// else if (Y > this->GetInput()->GetWholeExtent()[3]) Y = this->GetInput()->GetWholeExtent()[3]; +// if (Z < this->GetInput()->GetWholeExtent()[4]) Z = this->GetInput()->GetWholeExtent()[4]; +// else if (Z > this->GetInput()->GetWholeExtent()[5]) Z = this->GetInput()->GetWholeExtent()[5]; if (X >= this->GetInput()->GetWholeExtent()[0] && X <= this->GetInput()->GetWholeExtent()[1] && @@ -1280,6 +1279,8 @@ void vvSlicer::Render() Y <= this->GetInput()->GetWholeExtent()[3] && Z >= this->GetInput()->GetWholeExtent()[4] && Z <= this->GetInput()->GetWholeExtent()[5]) { + + int ix, iy, iz; double value = this->GetScalarComponentAsDouble(this->GetInput(), X, Y, Z, ix, iy, iz); @@ -1302,6 +1303,34 @@ void vvSlicer::Render() } ca->SetText(1,worldPos.c_str()); } + + if (pdmA->GetVisibility()) { + double x = mCursor[0]; + double y = mCursor[1]; + double z = mCursor[2]; + double xCursor = (x - this->GetInput()->GetOrigin()[0])/this->GetInput()->GetSpacing()[0]; + double yCursor = (y - this->GetInput()->GetOrigin()[1])/this->GetInput()->GetSpacing()[1]; + double zCursor = (z - this->GetInput()->GetOrigin()[2])/this->GetInput()->GetSpacing()[2]; + + if (xCursor >= this->GetImageActor()->GetDisplayExtent()[0] && + xCursor < this->GetImageActor()->GetDisplayExtent()[1]+1 && + yCursor >= this->GetImageActor()->GetDisplayExtent()[2] && + yCursor < this->GetImageActor()->GetDisplayExtent()[3]+1 && + zCursor >= this->GetImageActor()->GetDisplayExtent()[4] && + zCursor < this->GetImageActor()->GetDisplayExtent()[5]+1 ) { + vtkRenderer * renderer = this->Renderer; + + renderer->WorldToView(x,y,z); + renderer->ViewToNormalizedViewport(x,y,z); + renderer->NormalizedViewportToViewport(x,y); + renderer->ViewportToNormalizedDisplay(x,y); + renderer->NormalizedDisplayToDisplay(x,y); + crossCursor->SetFocalPoint(x,y,z); + } else + crossCursor->SetFocalPoint(-1,-1,z); + } + + if (mOverlay && mOverlayActor->GetVisibility()) { mOverlayMapper->SetWindow(this->GetColorWindow()); mOverlayMapper->SetLevel(this->GetColorLevel()); @@ -1311,7 +1340,7 @@ void vvSlicer::Render() } if (mLandMapper) UpdateLandmarks(); - //this->Superclass::Render(); + this->GetRenderWindow()->Render(); } //---------------------------------------------------------------------------- @@ -1371,7 +1400,7 @@ void vvSlicer::SetSlice(int slice) this->UpdateDisplayExtent(); // Seems to work without this line - // this->Render(); + //this->Render(); } //----------------------------------------------------------------------------