X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=inline;f=vv%2FvvSlicer.cxx;h=d05ae4fe69513879de10543932ff89db2fde18b0;hb=b1f5d6c99d0263700df2ddb2c6d1bf348709cd92;hp=c9b50a7973ac827fa396b8ec59e16a976247ffc9;hpb=3d059f81bab4d113bdd5e87bc15a266381ee7182;p=clitk.git diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx index c9b50a7..d05ae4f 100644 --- a/vv/vvSlicer.cxx +++ b/vv/vvSlicer.cxx @@ -91,6 +91,9 @@ vvSlicer::vvSlicer() mScale = 1; mVFLog = 0; mVFWidth = 1; + mVFColor[0] = 0; + mVFColor[1] = 1; + mVFColor[2] = 0; std::string text = "F1 = sagital; F2 = coronal; F3 = axial\n"; text += "F5 = horizontal flip; F6 = vertical flip\n\n"; @@ -264,6 +267,22 @@ bool vvSlicer::GetCursorVisibility() //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +void vvSlicer::SetCornerAnnotationVisibility(bool s) +{ + ca->SetVisibility(s); +} +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +bool vvSlicer::GetCornerAnnotationVisibility() +{ + return ca->GetVisibility(); +} +//------------------------------------------------------------------------------ + + //------------------------------------------------------------------------------ vvSlicer::~vvSlicer() { @@ -428,11 +447,20 @@ void vvSlicer::SetVF(vvImage::Pointer vf) mGlyphFilter->SetVectorModeToUseVector(); mGlyphFilter->SetColorModeToColorByVector(); + if (!mVFColorLUT) + mVFColorLUT = vtkSmartPointer::New(); + + double mVFColorHSV[3]; + vtkMath::RGBToHSV(mVFColor, mVFColorHSV); + mVFColorLUT->SetHueRange(mVFColorHSV[0], mVFColorHSV[0]); + mVFColorLUT->SetSaturationRange(mVFColorHSV[1],mVFColorHSV[1]); + mVFColorLUT->SetValueRange(mVFColorHSV[2], mVFColorHSV[2]); + if (!mVFMapper) mVFMapper = vtkSmartPointer::New(); - //mVFMapper->SetInputConnection(mGlyphFilter->GetOutputPort()); mVFMapper->SetInput(mGlyphFilter->GetOutput()); mVFMapper->ImmediateModeRenderingOn(); + mVFMapper->SetLookupTable(mVFColorLUT); if (!mVFActor) mVFActor = vtkSmartPointer::New(); @@ -887,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()); } @@ -909,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()); } //---------------------------------------------------------------------------- @@ -930,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()); } //---------------------------------------------------------------------------- @@ -1202,6 +1232,14 @@ double vvSlicer::GetScalarComponentAsDouble(vtkImageData *image, int X, double Y ix = lrint(X); iy = lrint(Y); iz = lrint(Z); + if (ix < image->GetWholeExtent()[0] || + ix > image->GetWholeExtent()[1] || + iy < image->GetWholeExtent()[2] || + iy > image->GetWholeExtent()[3] || + iz < image->GetWholeExtent()[4] || + iz > image->GetWholeExtent()[5] ) + return sqrt(-1.); + image->SetUpdateExtent(ix, ix, iy, iy, iz, iz); image->Update(); return image->GetScalarComponentAsDouble(ix, iy, iz, component); @@ -1391,7 +1429,19 @@ void vvSlicer::PrintSelf(ostream& os, vtkIndent indent) } //---------------------------------------------------------------------------- - - - +//---------------------------------------------------------------------------- +void vvSlicer::SetVFColor(double r, double g, double b) +{ + double mVFColorHSV[3]; + mVFColor[0] = r; + mVFColor[1] = g; + mVFColor[2] = b; + + vtkMath::RGBToHSV(mVFColor, mVFColorHSV); + mVFColorLUT->SetHueRange(mVFColorHSV[0], mVFColorHSV[0]); + mVFColorLUT->SetSaturationRange(mVFColorHSV[1],mVFColorHSV[1]); + mVFColorLUT->SetValueRange(mVFColorHSV[2], mVFColorHSV[2]); + + this->Render(); +}