00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00036 #ifdef _USE_VTK_
00037 #include "bbvtkImagePlanes.h"
00038 #include "bbvtkPackage.h"
00039 #include "vtkCellPicker.h"
00040 #include "vtkProperty.h"
00041
00042 #include "bbstdCast.h"
00043 namespace bbstd
00044 {
00045
00046 BBTK_BLACK_BOX_TEMPLATE2_IMPLEMENTATION(Cast,
00047 bbtk::AtomicBlackBox);
00048
00049
00050 }
00051 using namespace bbstd;
00052 namespace bbvtk
00053 {
00054
00055
00056 typedef vtkImagePlaneWidget* I;
00057 typedef vtkInteractorObserver* O;
00058
00059 BBTK_ADD_TEMPLATE2_BLACK_BOX_TO_PACKAGE(vtk,Cast,I,O);
00060
00061 }
00062
00063 namespace bbvtk
00064 {
00065
00066
00067 BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,ImagePlanes)
00068 BBTK_BLACK_BOX_IMPLEMENTATION(ImagePlanes,bbtk::AtomicBlackBox);
00069
00070 void ImagePlanes::bbUserConstructor()
00071 {
00072 planeWidgetX = planeWidgetY = planeWidgetZ = 0;
00073 bbSetInputIn(0);
00074 std::vector<double> vect;
00075 vect.push_back(512);
00076 vect.push_back(256);
00077 bbSetInputWindowLevel (vect);
00078 }
00079
00080 void ImagePlanes::bbUserCopyConstructor()
00081 {
00082 planeWidgetX = planeWidgetY = planeWidgetZ = 0;
00083 }
00084
00085 void ImagePlanes::Init()
00086 {
00087 if (planeWidgetX != 0) return;
00088
00089
00090 vtkCellPicker* picker = vtkCellPicker::New();
00091 picker->SetTolerance(0.005);
00092
00093
00094 planeWidgetX = vtkImagePlaneWidget::New();
00095 planeWidgetX->DisplayTextOn();
00096 planeWidgetX->SetPicker(picker);
00097 planeWidgetX->SetKeyPressActivationValue('x');
00098 vtkProperty* prop1 = planeWidgetX->GetPlaneProperty();
00099 prop1->SetColor(1, 0, 0);
00100
00101 planeWidgetY = vtkImagePlaneWidget::New();
00102 planeWidgetY->DisplayTextOn();
00103 planeWidgetY->SetPicker(picker);
00104 planeWidgetY->SetKeyPressActivationValue('y');
00105 vtkProperty* prop2 = planeWidgetY->GetPlaneProperty();
00106 prop2->SetColor(1, 1, 0);
00107 planeWidgetY->SetLookupTable(planeWidgetX->GetLookupTable());
00108
00109 planeWidgetZ = vtkImagePlaneWidget::New();
00110 planeWidgetZ->DisplayTextOn();
00111 planeWidgetZ->SetPicker(picker);
00112 planeWidgetZ->SetKeyPressActivationValue('z');
00113 vtkProperty* prop3 = planeWidgetZ->GetPlaneProperty();
00114 prop3->SetColor(0, 0, 1);
00115 planeWidgetZ->SetLookupTable(planeWidgetX->GetLookupTable());
00116
00117 bbSetOutputPlaneX(planeWidgetX);
00118 bbSetOutputPlaneY(planeWidgetY);
00119 bbSetOutputPlaneZ(planeWidgetZ);
00120
00121 picker->UnRegister(NULL);
00122 }
00123
00124
00125 void ImagePlanes::bbUserDestructor()
00126 {
00127
00128 if (planeWidgetX) planeWidgetX->UnRegister(NULL);
00129 if (planeWidgetY) planeWidgetY->UnRegister(NULL);
00130 if (planeWidgetZ) planeWidgetZ->UnRegister(NULL);
00131
00132 }
00133
00134
00135 void ImagePlanes::Process()
00136 {
00137 if (bbGetInputIn()!=0)
00138 {
00139 Init();
00140
00141 int xMin, xMax, yMin, yMax, zMin, zMax;
00142 bbGetInputIn()->GetExtent(xMin, xMax, yMin, yMax, zMin, zMax);
00143
00144 planeWidgetX->SetInput(bbGetInputIn());
00145 planeWidgetX->SetPlaneOrientationToXAxes();
00146 planeWidgetX->SetSlicePosition((xMax+xMin)/2.);
00147
00148 planeWidgetY->SetInput(bbGetInputIn());
00149 planeWidgetY->SetPlaneOrientationToYAxes();
00150 planeWidgetY->SetSlicePosition((yMax+yMin)/2.);
00151
00152 planeWidgetZ->SetInput(bbGetInputIn());
00153 planeWidgetZ->SetPlaneOrientationToZAxes();
00154 planeWidgetZ->SetSlicePosition((zMax+zMin)/2.);
00155
00156
00157
00158 planeWidgetZ->SetWindowLevel(bbGetInputWindowLevel()[0],bbGetInputWindowLevel()[1]);
00159 }
00160 }
00161 }
00162
00163 #endif // _USE_VTK_
00164