X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvImageContour.cxx;h=173bde0e900e9f80b28cdf5c85bf87d906b8afb7;hb=5a7da4aedae5c204bc55c187717193e5950f9a44;hp=ab6d8202647e24485c156f51251e4dbbf4be6fc0;hpb=24573eaf1c3fe8568acab4974f4ed0c6b98952d5;p=clitk.git diff --git a/vv/vvImageContour.cxx b/vv/vvImageContour.cxx index ab6d820..173bde0 100644 --- a/vv/vvImageContour.cxx +++ b/vv/vvImageContour.cxx @@ -36,6 +36,7 @@ vvImageContour::vvImageContour() mDisplayModeIsPreserveMemory = true; SetPreserveMemoryModeEnabled(true); mPreviousOrientation = -1; + mDepth = 1.0; } //------------------------------------------------------------------------------ @@ -135,13 +136,11 @@ void vvImageContour::ShowActors() { //------------------------------------------------------------------------------ void vvImageContour::Update(double value) { - std::cout << "vvImageContour::Update " << value << std::endl; if (!mSlicer) return; if (mPreviousValue == value) { if (mPreviousSlice == mSlicer->GetSlice()) { if (mPreviousTSlice == mSlicer->GetTSlice()) { if (mPreviousOrientation == ComputeCurrentOrientation()) { - std::cout << "Nothing to do" << std::endl; return; // Nothing to do } } @@ -161,7 +160,7 @@ void vvImageContour::Update(double value) { UpdateWithFastCacheMode(); } - // mSlicer->Render(); //DS ---> REMOVE ?? + //mSlicer->Render(); //DS ---> REMOVE ?? mPreviousTSlice = mSlicer->GetTSlice(); mPreviousSlice = mSlicer->GetSlice(); @@ -174,7 +173,7 @@ void vvImageContour::Update(double value) { //------------------------------------------------------------------------------ void vvImageContour::UpdateWithPreserveMemoryMode() { // Only change actor visibility if tslice change - int mPreviousTslice = mTSlice; + mPreviousTslice = mTSlice; mTSlice = mSlicer->GetTSlice(); vtkMarchingSquares * mSquares = mSquaresList[mTSlice]; @@ -184,11 +183,12 @@ void vvImageContour::UpdateWithPreserveMemoryMode() { int orientation = ComputeCurrentOrientation(); UpdateActor(mSquaresActor, mapper, mSquares, mClipper, mValue, orientation, mSlice); - //mSquaresActorList[mTSlice]->VisibilityOn(); if (mPreviousTslice != mTSlice) { if (mPreviousTslice != -1) mSquaresActorList[mPreviousTslice]->VisibilityOff(); } + + mSlicer->Render(); } //------------------------------------------------------------------------------ @@ -268,6 +268,7 @@ void vvImageContour::CreateNewActor(int numImage) { clipper->SetInput(mHiddenImage->GetVTKImages()[0]); else clipper->SetInput(mSlicer->GetImage()->GetVTKImages()[numImage]); + squares->SetInput(clipper->GetOutput()); squaresMapper->SetInput(squares->GetOutput()); squaresMapper->ScalarVisibilityOff(); @@ -291,9 +292,7 @@ void vvImageContour::UpdateActor(vtkActor * actor, vtkMarchingSquares * squares, vtkImageClip * clipper, double threshold, int orientation, int slice) { - std::cout << "vvImageContour::UpdateActor" << std::endl; - - // Set parameter for the MarchigSquare + // Set parameter for the MarchigSquare squares->SetValue(0, threshold); // Get image extent @@ -313,15 +312,16 @@ void vvImageContour::UpdateActor(vtkActor * actor, s = s-mHiddenImage->GetFirstVTKImageData()->GetOrigin()[orientation]; // from corner second image s = s/mHiddenImage->GetFirstVTKImageData()->GetSpacing()[orientation]; // in voxel - if (s == floor(s)) { - extent2[orientation*2] = extent2[orientation*2+1] = (int)floor(s); - } else { - extent2[orientation*2] = (int)floor(s); - extent2[orientation*2+1] = extent2[orientation*2]; - } + // Rint to the closest slice + extent2[orientation*2+1] = extent2[orientation*2] = (int)lrint(s); // Do not display a contour if there is no contour on this slice - if (extent2[orientation*2+1] > extent3[orientation*2+1]) { + // DD(extent2[orientation*2+1]); + // DD(extent3[orientation*2+1]); + // DD(extent2[orientation*2]); + // DD(extent3[orientation*2]); + if ((extent2[orientation*2+1] > extent3[orientation*2+1]) || + (extent2[orientation*2] < extent3[orientation*2])) { actor->VisibilityOff(); return; } @@ -329,6 +329,7 @@ void vvImageContour::UpdateActor(vtkActor * actor, } else { extent2 = extent; + actor->VisibilityOn(); } clipper->SetOutputWholeExtent(extent2[0],extent2[1],extent2[2], @@ -338,48 +339,10 @@ void vvImageContour::UpdateActor(vtkActor * actor, // Move the actor to be visible double position[3] = {0, 0, 0}; - position[orientation] = -1; + position[orientation] = -mDepth; actor->SetPosition(position); -// switch (orientation) { -// case 0: -// actor->SetPosition(-1,0,0); -// /* -// // DD(mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[0]); -// if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[0] > slice) { -// actor->SetPosition(1,0,0); -// } else { -// actor->SetPosition(-1,0,0); -// }*/ -// break; -// case 1: -// actor->SetPosition(0,-1,0); -// /* -// // DD(mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[1]); -// if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[1] > slice) { -// actor->SetPosition(0,1,0); -// } else { -// actor->SetPosition(0,-1,0); -// } -// */ -// break; -// case 2: -// actor->SetPosition(0,0,-1); -// /* -// DD(mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[2]); -// if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[2] > slice) { -// DD("1"); -// actor->SetPosition(0,0,1); -// } else { -// DD("-1"); -// actor->SetPosition(0,0,-1); -// } -// */ -// break; -// } - mapper->Update(); - actor->VisibilityOn(); } //------------------------------------------------------------------------------