- CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
===========================================================================**/
+#include <QMessageBox>
+#include <QString>
+
#include "vvSlicer.h"
#include "vvImage.h"
#include "vvSlicerManagerCommand.h"
//------------------------------------------------------------------------------
vvSlicer::vvSlicer()
{
+ mFusionSequenceCode = -1;
this->UnInstallPipeline();
mImage = NULL;
mReducedExtent = new int[6];
mCurrentBeforeSlicingTransform[1]=y;
mCurrentBeforeSlicingTransform[2]=z;
mSlicingTransform->GetInverse()->TransformPoint(mCurrentBeforeSlicingTransform,mCurrent);
- SetTSlice(t);
+ if (t>=0) SetTSlice(t);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
-void vvSlicer::SetFusion(vvImage::Pointer fusion)
+void vvSlicer::SetFusion(vvImage::Pointer fusion, int fusionSequenceCode)
{
+ mFusionSequenceCode = fusionSequenceCode;
if (fusion->GetVTKImages().size()) {
mFusion = fusion;
//------------------------------------------------------------------------------
-void vvSlicer::SetTSlice(int t)
+void vvSlicer::SetTSlice(int t, bool updateLinkedImages)
{
+ if (!updateLinkedImages) {
+ mCurrentTSlice = t;
+ mImageReslice->SetInput( mImage->GetVTKImages()[mCurrentTSlice] );
+ // Update transform
+ mConcatenatedTransform->Identity();
+ mConcatenatedTransform->Concatenate(mImage->GetTransform()[mCurrentTSlice]);
+ mConcatenatedTransform->Concatenate(mSlicingTransform);
+ UpdateDisplayExtent();
+ return;
+ }
+
if (t < 0)
mCurrentTSlice = 0;
else if ((unsigned int)t >= mImage->GetVTKImages().size())
if (mVF->GetVTKImages().size() > (unsigned int)mCurrentTSlice)
mVOIFilter->SetInput(mVF->GetVTKImages()[mCurrentTSlice]);
}
-//also temporarilly disabled...
+ //update the overlay
if (mOverlay && mOverlayActor->GetVisibility()) {
if (mOverlay->GetVTKImages().size() > (unsigned int)t) {
mCurrentOverlayTSlice = t;
mConcatenatedOverlayTransform->Concatenate(mSlicingTransform);
}
}
-//temporarilly disabled for testing fusionSequence
- //if (mFusion && mFusionActor->GetVisibility()) {
- // if (mFusion->GetVTKImages().size() > (unsigned int)t) {
- // mCurrentFusionTSlice = t;
- // mFusionReslice->SetInput( mFusion->GetVTKImages()[mCurrentFusionTSlice]);
-
- // // Update fusion transform
- // mConcatenatedFusionTransform->Identity();
- // mConcatenatedFusionTransform->Concatenate(mFusion->GetTransform()[mCurrentFusionTSlice]);
- // mConcatenatedFusionTransform->Concatenate(mSlicingTransform);
- // }
- //}
+ //update the fusion ; except in case this is a fusionSequence, in which case both 'times' should be independent.
+ if (mFusion && mFusionActor->GetVisibility() && (mFusionSequenceCode<0)) {
+ if (mFusion->GetVTKImages().size() > (unsigned int)t) {
+ mCurrentFusionTSlice = t;
+ mFusionReslice->SetInput( mFusion->GetVTKImages()[mCurrentFusionTSlice]);
+
+ // Update fusion transform
+ mConcatenatedFusionTransform->Identity();
+ mConcatenatedFusionTransform->Concatenate(mFusion->GetTransform()[mCurrentFusionTSlice]);
+ mConcatenatedFusionTransform->Concatenate(mSlicingTransform);
+ }
+ }
if (mSurfaceCutActors.size() > 0)
for (std::vector<vvMeshActor*>::iterator i=mSurfaceCutActors.begin();
i!=mSurfaceCutActors.end(); i++)
//------------------------------------------------------------------------------
void vvSlicer::SetFusionSequenceTSlice(int t)
{
-//QMessageBox::information(NULL, "vvSlicer::SetFusionSequenceTSlice", "ENTER, t = " + QString::number(t) + ", currentFusionTSlice = " + QString::number(mCurrentFusionTSlice));
- //fusionSequence data is stored behind standard fusion data...
- if (mFusion && mFusionActor->GetVisibility()) {
+ if (mFusion && mFusionActor->GetVisibility() && (mFusionSequenceCode>=0)) {
if (mFusion->GetVTKImages().size() > (unsigned int)t) {
mCurrentFusionTSlice = t;
- mFusionReslice->SetInput( mFusion->GetVTKImages()[mCurrentFusionTSlice]);
-
+ mFusionReslice->SetInput( mFusion->GetVTKImages()[mCurrentFusionTSlice] );
// Update fusion transform
mConcatenatedFusionTransform->Identity();
- mConcatenatedFusionTransform->Concatenate(mFusion->GetTransform()[mCurrentFusionTSlice]);
+ mConcatenatedFusionTransform->Concatenate(mFusion->GetTransform()[mCurrentFusionTSlice]); //not really useful...
mConcatenatedFusionTransform->Concatenate(mSlicingTransform);
}
}
int t = mCurrentTSlice;
if(mOverlay)
t = std::max(t, mCurrentOverlayTSlice);
- //TODO temporarily desactivated...
- //if(mFusion)
- // t = std::max(t, mCurrentFusionTSlice);
+ if(mFusion&& (mFusionSequenceCode<0)) //ignore fusionSequence data: for these, the times are not to be related (this way)
+ t = std::max(t, mCurrentFusionTSlice);
return t;
}
//------------------------------------------------------------------------------
//----------------------------------------------------------------------------
void vvSlicer::SetDisplayMode(bool i)
{
- this->GetRenderer()->SetDraw(i);
- if (i)
- UpdateDisplayExtent();
+ this->GetRenderer()->SetDraw(i);
+ if (i) UpdateDisplayExtent();
}
//----------------------------------------------------------------------------
ix = lrint(X);
iy = lrint(Y);
iz = lrint(Z);
+
if (ix < image->GetWholeExtent()[0] ||
ix > image->GetWholeExtent()[1] ||
iy < image->GetWholeExtent()[2] ||