X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvSlicer.cxx;h=86824a2c7a0932e656273410ea093c6d0eda75c8;hb=e34a7746ec0b9f82124e344edc79e348bb0278d2;hp=c070d60bb4b6c11d491a764bc2a7157a4d2598f1;hpb=8d91d8216bb84975264a9297c0768a96366b2f4b;p=clitk.git diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx index c070d60..86824a2 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"; @@ -428,11 +431,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(); @@ -743,8 +755,6 @@ void vvSlicer::UpdateDisplayExtent() mClipBox->SetBounds(bounds); UpdateLandmarks(); } - // DD(mLandActor->GetPosition()[2]); - // DD(Renderer->GetActiveCamera()->GetPosition()[2]); mLandActor->SetPosition(0,0,-1.5); /* if (Renderer->GetActiveCamera()->GetPosition()[2] > this->Slice) @@ -800,8 +810,6 @@ void vvSlicer::UpdateDisplayExtent() mClipBox->SetBounds(bounds); UpdateLandmarks(); } - // DD(mLandActor->GetPosition()[1]); - //DD(Renderer->GetActiveCamera()->GetPosition()[1]); if (Renderer->GetActiveCamera()->GetPosition()[1] > this->Slice) mLandActor->SetPosition(0,1.5,0); else @@ -854,8 +862,6 @@ void vvSlicer::UpdateDisplayExtent() mClipBox->SetBounds(bounds); UpdateLandmarks(); } - // DD(mLandActor->GetPosition()[1]); - // DD(Renderer->GetActiveCamera()->GetPosition()[1]); if (Renderer->GetActiveCamera()->GetPosition()[0] > this->Slice) mLandActor->SetPosition(1.5,0,0); else @@ -1062,14 +1068,7 @@ void vvSlicer::SetRenderWindow(int orientation, vtkRenderWindow * rw) //---------------------------------------------------------------------------- void vvSlicer::ResetCamera() { - if (this->GetInput()) { - double* input_bounds=this->GetInput()->GetBounds(); - double bmax=input_bounds[1]-input_bounds[0]; - if (bmax < input_bounds[3]-input_bounds[2]) bmax=input_bounds[3]-input_bounds[2]; - if (bmax < input_bounds[5]-input_bounds[4]) bmax=input_bounds[5]-input_bounds[4]; - this->GetRenderer()->ResetCamera(); - this->GetRenderer()->GetActiveCamera()->SetParallelScale(bmax/2); - } + this->GetRenderer()->ResetCamera(); } //---------------------------------------------------------------------------- @@ -1209,6 +1208,26 @@ void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max) } //---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +double vvSlicer::GetScalarComponentAsDouble(vtkImageData *image, int X, double Y, double Z, int &ix, int &iy, int &iz, int component) +{ + 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); +} +//---------------------------------------------------------------------------- + //---------------------------------------------------------------------------- void vvSlicer::Render() { @@ -1261,9 +1280,9 @@ void vvSlicer::Render() Y <= this->GetInput()->GetWholeExtent()[3] && Z >= this->GetInput()->GetWholeExtent()[4] && Z <= this->GetInput()->GetWholeExtent()[5]) { - int ix = lrint(X); - int iy = lrint(Y); - int iz = lrint(Z); + int ix, iy, iz; + double value = this->GetScalarComponentAsDouble(this->GetInput(), X, Y, Z, ix, iy, iz); + std::stringstream pixel1; std::stringstream pixel2; std::stringstream pixel3; @@ -1272,9 +1291,6 @@ void vvSlicer::Render() pixel2 << iy; pixel3 << iz; temps << mCurrentTSlice; - this->GetInput()->SetUpdateExtent(ix, ix, iy, iy, iz, iz); - this->GetInput()->Update(); - double value = this->GetInput()->GetScalarComponentAsDouble(ix, iy, iz, 0); std::stringstream val; val << value; @@ -1395,9 +1411,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(); +}