1 #include "vvImageContour.h"
2 #include <vtkImageActor.h>
4 #include <vtkRenderer.h>
5 #include <vtkMarchingSquares.h>
6 #include <vtkImageClip.h>
7 #include <vtkImageData.h>
8 #include <vtkPolyDataMapper.h>
9 #include <vtkProperty.h>
11 //------------------------------------------------------------------------------
12 vvImageContour::vvImageContour() {
16 //------------------------------------------------------------------------------
19 //------------------------------------------------------------------------------
20 vvImageContour::~vvImageContour() {
21 for (unsigned int i = 0; i < mSlicer->GetImage()->GetVTKImages().size(); i++) {
22 mSlicer->GetRenderer()->RemoveActor(mSquaresActorList[i]);
24 mSquaresActorList.clear();
28 //------------------------------------------------------------------------------
31 //------------------------------------------------------------------------------
32 void vvImageContour::setSlicer(vvSlicer * slicer) {
35 for (unsigned int numImage = 0; numImage < mSlicer->GetImage()->GetVTKImages().size(); numImage++) {
36 vtkImageClip * mClipper = vtkImageClip::New();
37 vtkMarchingSquares * mSquares = vtkMarchingSquares::New();
38 vtkPolyDataMapper * mSquaresMapper = vtkPolyDataMapper::New();
39 vtkActor * mSquaresActor = vtkActor::New();
41 mClipper->SetInput(mSlicer->GetImage()->GetVTKImages()[numImage]);
42 mSquares->SetInput(mClipper->GetOutput());
43 mSquaresMapper->SetInput(mSquares->GetOutput());
44 mSquaresMapper->ScalarVisibilityOff();
45 mSquaresActor->SetMapper(mSquaresMapper);
46 mSquaresActor->GetProperty()->SetColor(1.0,0,0);
47 mSquaresActor->SetPickable(0);
48 mSquaresActor->VisibilityOff();
49 mSlicer->GetRenderer()->AddActor(mSquaresActor);
51 mSquaresActorList.push_back(mSquaresActor);
52 mSquaresList.push_back(mSquares);
53 mClipperList.push_back(mClipper);
56 //------------------------------------------------------------------------------
59 //------------------------------------------------------------------------------
60 void vvImageContour::setColor(double r, double g, double b) {
61 for(unsigned int i=0; i<mSquaresActorList.size(); i++) {
62 mSquaresActorList[i]->GetProperty()->SetColor(r,g,b);
65 //------------------------------------------------------------------------------
68 //------------------------------------------------------------------------------
69 void vvImageContour::hideActors() {
71 mSlice = mSlicer->GetSlice();
72 for(unsigned int i=0; i<mSquaresActorList.size(); i++) {
73 mSquaresActorList[i]->VisibilityOff();
76 //------------------------------------------------------------------------------
79 //------------------------------------------------------------------------------
80 void vvImageContour::showActors() {
82 mSlice = mSlicer->GetSlice();
83 mTSlice = mSlicer->GetTSlice();
84 // for(unsigned int i=0; i<mSquaresActorList.size(); i++) {
85 mSquaresActorList[mTSlice]->VisibilityOn();
89 //------------------------------------------------------------------------------
92 //------------------------------------------------------------------------------
93 void vvImageContour::update(double value) {
97 // how to not update if not visible ?
99 mSlice = mSlicer->GetSlice();
100 // Only change actor visibility if tslice change
101 if (mTSlice != mSlicer->GetTSlice()) {
103 mSquaresActorList[mTSlice]->VisibilityOff();
104 mTSlice = mSlicer->GetTSlice();
105 mSquaresActorList[mTSlice]->VisibilityOn();
108 vtkMarchingSquares * mSquares = mSquaresList[mTSlice];
109 vtkImageClip * mClipper = mClipperList[mTSlice];
110 vtkActor * mSquaresActor = mSquaresActorList[mTSlice];
113 mSquares->SetValue(0,value);
115 int* extent = mSlicer->GetImageActor()->GetDisplayExtent();
116 mClipper->SetOutputWholeExtent(extent[0],extent[1],extent[2],
117 extent[3],extent[4],extent[5]);
119 for (i = 0; i < 6;i = i+2) {
120 if (extent[i] == extent[i+1]) {
128 if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[0] > mSlice)
130 mSquaresActor->SetPosition(1,0,0);
134 mSquaresActor->SetPosition(-1,0,0);
138 if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[1] > mSlice)
140 mSquaresActor->SetPosition(0,1,0);
144 mSquaresActor->SetPosition(0,-1,0);
148 if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[2] > mSlice)
150 mSquaresActor->SetPosition(0,0,1);
154 mSquaresActor->SetPosition(0,0,-1);
160 //------------------------------------------------------------------------------