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";
//------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
+void vvSlicer::SetCornerAnnotationVisibility(bool s)
+{
+ ca->SetVisibility(s);
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+bool vvSlicer::GetCornerAnnotationVisibility()
+{
+ return ca->GetVisibility();
+}
+//------------------------------------------------------------------------------
+
+
//------------------------------------------------------------------------------
vvSlicer::~vvSlicer()
{
mGlyphFilter->SetVectorModeToUseVector();
mGlyphFilter->SetColorModeToColorByVector();
+ if (!mVFColorLUT)
+ mVFColorLUT = vtkSmartPointer<vtkLookupTable>::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<vtkPolyDataMapper>::New();
- //mVFMapper->SetInputConnection(mGlyphFilter->GetOutputPort());
mVFMapper->SetInput(mGlyphFilter->GetOutput());
mVFMapper->ImmediateModeRenderingOn();
+ mVFMapper->SetLookupTable(mVFColorLUT);
if (!mVFActor)
mVFActor = vtkSmartPointer<vtkActor>::New();
//----------------------------------------------------------------------------
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];
+ vtkImageData* image = this->GetInput();
+ vfExtent[0] = image->GetOrigin()[0] + x1*image->GetSpacing()[0];
+ vfExtent[1] = image->GetOrigin()[0] + x2*image->GetSpacing()[0];
+ vfExtent[2] = image->GetOrigin()[1] + y1*image->GetSpacing()[1];
+ vfExtent[3] = image->GetOrigin()[1] + y2*image->GetSpacing()[1];
+ vfExtent[4] = image->GetOrigin()[2] + z1*image->GetSpacing()[2];
+ vfExtent[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] = (vfExtent[i]- vf->GetOrigin()[i/2]) / vf->GetSpacing()[i/2];
ClipDisplayedExtent(vfExtent,mVOIFilter->GetInput()->GetWholeExtent());
}
//----------------------------------------------------------------------------
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];
+ vtkImageData* image = this->GetInput();
+ overExtent[0] = image->GetOrigin()[0] + x1*image->GetSpacing()[0];
+ overExtent[1] = image->GetOrigin()[0] + x2*image->GetSpacing()[0];
+ overExtent[2] = image->GetOrigin()[1] + y1*image->GetSpacing()[1];
+ overExtent[3] = image->GetOrigin()[1] + y2*image->GetSpacing()[1];
+ overExtent[4] = image->GetOrigin()[2] + z1*image->GetSpacing()[2];
+ overExtent[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] = (overExtent[i]- overlay->GetOrigin()[i/2]) / overlay->GetSpacing()[i/2];
+
ClipDisplayedExtent(overExtent, mOverlayMapper->GetInput()->GetWholeExtent());
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
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];
+ vtkImageData* image = this->GetInput();
+ fusExtent[0] = image->GetOrigin()[0] + x1*image->GetSpacing()[0];
+ fusExtent[1] = image->GetOrigin()[0] + x2*image->GetSpacing()[0];
+ fusExtent[2] = image->GetOrigin()[1] + y1*image->GetSpacing()[1];
+ fusExtent[3] = image->GetOrigin()[1] + y2*image->GetSpacing()[1];
+ fusExtent[4] = image->GetOrigin()[2] + z1*image->GetSpacing()[2];
+ fusExtent[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] = (fusExtent[i]- fusion->GetOrigin()[i/2]) / fusion->GetSpacing()[i/2];
+
ClipDisplayedExtent(fusExtent, mFusionMapper->GetInput()->GetWholeExtent());
}
//----------------------------------------------------------------------------
}
//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+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()
{
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;
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;
}
//----------------------------------------------------------------------------
-
-
-
+//----------------------------------------------------------------------------
+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();
+}