#include "NameWrapper.h"
#include "wx/artprov.h"
#include "ConceptDataWrap.h"
-
-#include <manualContour.h>
-//#include "ImageSourceThing.h"
-//#include "wxContour_ActionCommandsID.h"
-//#include "OutlineModelBuilder.h"
-//#include "wxContourEventHandler.h"
#include <creaWx.h>
//----------------------------------------------------------------------------------------------------------------
_refLineControl = NULL;
_refLineModel = NULL;
_refLineView = NULL;
+ _imageReslicer = NULL;
+ _thresholdTable = NULL;
+ _thresholdMapper = NULL;
+ _thresholdActor = NULL;
+ _actorPresent = false;
// set up default notebook style
// m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
_refLineControl = NULL;
_refLineModel = NULL;
_refLineView = NULL;
+ _imageReslicer = NULL;
+ _thresholdTable = NULL;
+ _thresholdMapper = NULL;
+ _thresholdActor = NULL;
+ _actorPresent = false;
// set up default notebook style
m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
void wxContourMainFrame :: resetInstance()
{
- delete instance;
- instance = NULL;
+ instance->Destroy();
}
wxContourMainFrame :: ~wxContourMainFrame()
_pannew->Close();
interfMainPanel::resetInstance();
+ delete kernelManager;
+ instance = NULL;
//_pannew->Destroy();
//delete _pannew;
kernelManager->setInstant(instantVect);
//_modelManager->setInstant( _actualInstant );
+ onThresholdChange();
updateInstantOutlines();
updateInstantImageData();
updateInstantAxes();
-
-
}
-void wxContourMainFrame :: updateInstantOutlines(){
-
+
+
+void wxContourMainFrame :: updateInstantOutlines()
+{
_theViewPanel->removeSceneContours();
_theViewPanel->addNameWrapperToScene();
return kernelManager->getNameWrapping(i);
}
-void wxContourMainFrame::updateInstantImageData(){
+void wxContourMainFrame::updateInstantImageData()
+{
std::vector<int> inst;
_instantPanel->getInstant(inst);
}
}
-void wxContourMainFrame::updateInstantAxes(){
+void wxContourMainFrame::updateInstantAxes()
+{
}
+
void wxContourMainFrame::onChangeDeep(int val){
_instantPanel->setConceptValue( "Axe Depth", (int)val );
changeInstant();
saveFileWithContours( fileNameContourROI );
}
}
-void wxContourMainFrame::saveFileWithContours( std::string filename ){
+void wxContourMainFrame::saveFileWithContours( std::string filename )
+{
FILE *pFile=fopen(filename.c_str(),"w+");
std::vector< std::string > lstNameThings;
void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString distanc, wxString sigm, wxString alf, wxString bet, wxString prop, wxString iter, wxString inflation)
{
-
int typeofcontour = 1;
//Image Data
vtkImageData *imagedata = getImageData();
//Tipo de pixeles a utilizar internamente en ITK
- typedef float InternalPixelType;
- const unsigned int Dimension = 2;
- typedef itk::Image< InternalPixelType, Dimension > InternalImageType;
+ typedef float InternalPixelType;
+ const unsigned int Dimension = 2;
+ typedef itk::Image< InternalPixelType, Dimension > InternalImageType;
- //Tipo de pixeles de salida 1
- typedef unsigned char OutputPixelType;
- typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
+ //Tipo de pixeles de salida 1
+ typedef unsigned char OutputPixelType;
+ typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
- //Tipo de pixeles de salida 2
- typedef unsigned short OutputPixelType2;
- typedef itk::Image< OutputPixelType2, Dimension > OutputImageType2;
+ //Tipo de pixeles de salida 2
+ typedef unsigned short OutputPixelType2;
+ typedef itk::Image< OutputPixelType2, Dimension > OutputImageType2;
- //Definición del thresholder
- typedef itk::BinaryThresholdImageFilter<
- InternalImageType,
- OutputImageType > ThresholdingFilterType;
-
- //Definición del primer filtro de conversión de pixeles
- typedef itk::CastImageFilter<
- OutputImageType, OutputImageType2 > CastFilterType;
+ //DefiniciÛn del thresholder
+ typedef itk::BinaryThresholdImageFilter<
+ InternalImageType,
+ OutputImageType > ThresholdingFilterType;
+
+ //DefiniciÛn del primer filtro de conversiÛn de pixeles
+ typedef itk::CastImageFilter<
+ OutputImageType, OutputImageType2 > CastFilterType;
- //Definición del segundo tipo de conversión de pixeles
- typedef itk::CastImageFilter<
- OutputImageType2, InternalImageType > CastFilterType2;
+ //DefiniciÛn del segundo tipo de conversiÛn de pixeles
+ typedef itk::CastImageFilter<
+ OutputImageType2, InternalImageType > CastFilterType2;
- //Tercer tipo de conversión
- typedef itk::RescaleIntensityImageFilter<
- InternalImageType,
- OutputImageType > CastFilterType3;
+ //Tercer tipo de conversiÛn
+ typedef itk::RescaleIntensityImageFilter<
+ InternalImageType,
+ OutputImageType > CastFilterType3;
- //Cuarto tipo de conversión
- typedef itk::RescaleIntensityImageFilter<
- OutputImageType,
- OutputImageType > CastFilterType4;
+ //Cuarto tipo de conversiÛn
+ typedef itk::RescaleIntensityImageFilter<
+ OutputImageType,
+ OutputImageType > CastFilterType4;
- ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();
-
- thresholder->SetLowerThreshold( 0.0 );
- thresholder->SetUpperThreshold( 128 );
+ ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();
+
+ thresholder->SetLowerThreshold( 0.0 );
+ thresholder->SetUpperThreshold( 128 );
- thresholder->SetOutsideValue( 255 );
- thresholder->SetInsideValue( 0 );
+ thresholder->SetOutsideValue( 255 );
+ thresholder->SetInsideValue( 0 );
- //Definción de conexiónes entre VTK e ITK y el writer
- typedef itk::VTKImageToImageFilter<OutputImageType2> ConnectorType;
- typedef itk::ImageToVTKImageFilter<OutputImageType> ConnectorType2;
- typedef itk::ImageFileWriter< OutputImageType > WriterType;
+ //DefinciÛn de conexiÛnes entre VTK e ITK y el writer
+ typedef itk::VTKImageToImageFilter<OutputImageType2> ConnectorType;
+ typedef itk::ImageToVTKImageFilter<OutputImageType> ConnectorType2;
+ typedef itk::ImageFileWriter< OutputImageType > WriterType;
- ConnectorType::Pointer connector= ConnectorType::New();
- ConnectorType2::Pointer connector2= ConnectorType2::New();
-
+ ConnectorType::Pointer connector= ConnectorType::New();
+ ConnectorType2::Pointer connector2= ConnectorType2::New();
+
- CastFilterType::Pointer filter=CastFilterType::New();
- CastFilterType2::Pointer filter2=CastFilterType2::New();
+ CastFilterType::Pointer filter=CastFilterType::New();
+ CastFilterType2::Pointer filter2=CastFilterType2::New();
- connector->SetInput( imagedata );
- filter2->SetInput(connector->GetOutput());
+ connector->SetInput( imagedata );
+ filter2->SetInput(connector->GetOutput());
- typedef itk::CurvatureAnisotropicDiffusionImageFilter<
- InternalImageType,
- InternalImageType > SmoothingFilterType;
+ typedef itk::CurvatureAnisotropicDiffusionImageFilter<
+ InternalImageType,
+ InternalImageType > SmoothingFilterType;
- SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();
+ SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();
- typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<
- InternalImageType,
- InternalImageType > GradientFilterType;
+ typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<
+ InternalImageType,
+ InternalImageType > GradientFilterType;
- typedef itk::SigmoidImageFilter<
- InternalImageType,
- InternalImageType > SigmoidFilterType;
+ typedef itk::SigmoidImageFilter<
+ InternalImageType,
+ InternalImageType > SigmoidFilterType;
- GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New();
+ GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New();
- SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
+ SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
- sigmoid->SetOutputMinimum( 0.0 );
- sigmoid->SetOutputMaximum( 255.0 );
+ sigmoid->SetOutputMinimum( 0.0 );
+ sigmoid->SetOutputMaximum( 255.0 );
- typedef itk::FastMarchingImageFilter<
- InternalImageType,
- InternalImageType > FastMarchingFilterType;
+ typedef itk::FastMarchingImageFilter<
+ InternalImageType,
+ InternalImageType > FastMarchingFilterType;
- FastMarchingFilterType::Pointer fastMarching = FastMarchingFilterType::New();
+ FastMarchingFilterType::Pointer fastMarching = FastMarchingFilterType::New();
- typedef itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType,
- InternalImageType > GeodesicActiveContourFilterType;
- GeodesicActiveContourFilterType::Pointer geodesicActiveContour =
- GeodesicActiveContourFilterType::New();
+ typedef itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType,
+ InternalImageType > GeodesicActiveContourFilterType;
+ GeodesicActiveContourFilterType::Pointer geodesicActiveContour =
+ GeodesicActiveContourFilterType::New();
- typedef itk::ZeroCrossingImageFilter<
- InternalImageType,
- InternalImageType > ZeroCrossingFilterType;
-ZeroCrossingFilterType::Pointer zeroCrossing =
- ZeroCrossingFilterType::New();
+ typedef itk::ZeroCrossingImageFilter<
+ InternalImageType,
+ InternalImageType > ZeroCrossingFilterType;
+ ZeroCrossingFilterType::Pointer zeroCrossing =
+ ZeroCrossingFilterType::New();
-const double propagationScaling = atof( prop );
+ const double propagationScaling = atof( crea::wx2std(prop).c_str() );
- geodesicActiveContour->SetPropagationScaling( propagationScaling );
- geodesicActiveContour->SetCurvatureScaling( 1.0 );
- geodesicActiveContour->SetAdvectionScaling( 1.0 );
+ geodesicActiveContour->SetPropagationScaling( propagationScaling );
+ geodesicActiveContour->SetCurvatureScaling( 1.0 );
+ geodesicActiveContour->SetAdvectionScaling( 1.0 );
- geodesicActiveContour->SetMaximumRMSError( 0.02 );
- int it=atoi( iter );
- geodesicActiveContour->SetNumberOfIterations( it );
+ geodesicActiveContour->SetMaximumRMSError( 0.02 );
+ int it=atoi( crea::wx2std(iter).c_str() );
+ geodesicActiveContour->SetNumberOfIterations( it );
- smoothing->SetInput( filter2->GetOutput() );
- gradientMagnitude->SetInput( smoothing->GetOutput() );
- sigmoid->SetInput( gradientMagnitude->GetOutput() );
- fastMarching->SetInput( sigmoid->GetOutput() );
- geodesicActiveContour->SetInput( fastMarching->GetOutput() );
- geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() );
-
- zeroCrossing->SetInput( geodesicActiveContour->GetOutput() );
- //thresholder->SetInput( zeroCrossing->GetOutput() );
- thresholder->SetInput( geodesicActiveContour->GetOutput() );
- connector2->SetInput( thresholder->GetOutput() );
-
+ smoothing->SetInput( filter2->GetOutput() );
+ gradientMagnitude->SetInput( smoothing->GetOutput() );
+ sigmoid->SetInput( gradientMagnitude->GetOutput() );
+ fastMarching->SetInput( sigmoid->GetOutput() );
+ geodesicActiveContour->SetInput( fastMarching->GetOutput() );
+ geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() );
+
+ zeroCrossing->SetInput( geodesicActiveContour->GetOutput() );
+ //thresholder->SetInput( zeroCrossing->GetOutput() );
+ thresholder->SetInput( geodesicActiveContour->GetOutput() );
+ connector2->SetInput( thresholder->GetOutput() );
+
- smoothing->SetTimeStep( 0.125 );
- smoothing->SetNumberOfIterations( 5 );
- smoothing->SetConductanceParameter( 9.0 );
+ smoothing->SetTimeStep( 0.125 );
+ smoothing->SetNumberOfIterations( 5 );
+ smoothing->SetConductanceParameter( 9.0 );
- const double sigma = atof( sigm );
- gradientMagnitude->SetSigma( sigma );
+ const double sigma = atof( crea::wx2std(sigm).c_str() );
+ gradientMagnitude->SetSigma( sigma );
- const double alpha = atof( alf );
- const double beta = atof( bet );
+ const double alpha = atof( crea::wx2std(alf).c_str() );
+ const double beta = atof( crea::wx2std(bet).c_str() );
- sigmoid->SetAlpha( alpha );
- sigmoid->SetBeta( beta );
-
- typedef FastMarchingFilterType::NodeContainer NodeContainer;
- typedef FastMarchingFilterType::NodeType NodeType;
+ sigmoid->SetAlpha( alpha );
+ sigmoid->SetBeta( beta );
+
+ typedef FastMarchingFilterType::NodeContainer NodeContainer;
+ typedef FastMarchingFilterType::NodeType NodeType;
- NodeContainer::Pointer seeds = NodeContainer::New();
+ NodeContainer::Pointer seeds = NodeContainer::New();
- InternalImageType::IndexType seedPosition;
- seedPosition[0] = x;
- seedPosition[1] = y;
+ InternalImageType::IndexType seedPosition;
+ seedPosition[0] = x;
+ seedPosition[1] = y;
- const double initialDistance = atof( distanc );
+ const double initialDistance = atof( crea::wx2std(distanc).c_str() );
- NodeType node;
+ NodeType node;
- const double seedValue = - initialDistance;
+ const double seedValue = - initialDistance;
- node.SetValue( seedValue );
- node.SetIndex( seedPosition );
-
- seeds->Initialize();
- seeds->InsertElement( 0, node );
-
- fastMarching->SetTrialPoints( seeds );
-
- fastMarching->SetSpeedConstant( 1.0 );
-
- fastMarching->SetOutputSize(
- connector->GetOutput()->GetBufferedRegion().GetSize() );
-
- fastMarching->SetStoppingValue( 800 );
- try
+ node.SetValue( seedValue );
+ node.SetIndex( seedPosition );
+
+ seeds->Initialize();
+ seeds->InsertElement( 0, node );
+
+ fastMarching->SetTrialPoints( seeds );
+
+ fastMarching->SetSpeedConstant( 1.0 );
+
+ fastMarching->SetOutputSize(
+ connector->GetOutput()->GetBufferedRegion().GetSize() );
+
+ fastMarching->SetStoppingValue( 800 );
+ try
{
connector2->Update();
vtkPolyData* polyDataResult = cntVTK->GetOutput();
- std::cout<<"Points "<<polyDataResult->GetNumberOfPoints()<<std::endl;
+ //std::cout<<"Points "<<polyDataResult->GetNumberOfPoints()<<std::endl;
polyDataResult->Update( );
polyDataResult->UpdateInformation();
-//EED
- /*
-ofstream myfile;
-myfile.open ("C:/Creatis/example.txt");
-myfile << "\n";
-polyDataResult->Print(myfile);
-myfile << "-------------------------------------\n";
-polyDataResult->GetLines()->Print(myfile);
-myfile.close();*/
+ //EED
+ /*
+ ofstream myfile;
+ myfile.open ("C:/Creatis/example.txt");
+ myfile << "\n";
+ polyDataResult->Print(myfile);
+ myfile << "-------------------------------------\n";
+ polyDataResult->GetLines()->Print(myfile);
+ myfile.close();*/
cntVTK -> Delete();
cpd -> Delete();
conn -> Delete();
-//--Calculating control points
+ //--Calculating control points
std::vector<double> vecX;
std::vector<double> vecY;
double xAct=0;
double yAct=0;
int ii,size=polyDataResult->GetNumberOfPoints();
-ofstream myfile;
-myfile.open ("C:/Creatis/example2.txt");
+ ofstream myfile;
+ myfile.open ("C:/Creatis/example2.txt");
size=polyDataResult->GetNumberOfPoints();
for (ii=0;ii<size;ii++)
std::cout<<" x Anterior "<<xAct<<" x actual "<<x<<std::endl;
std::cout<<" y Anterior "<<yAct<<" y actual "<<y<<std::endl;
std::cout<<" x "<<p[0]<<" y "<<p[1]<<std::endl;
- vecZ.push_back( -900 );
+ vecZ.push_back( 900 );
xAct=x;
yAct=y;
}
{
vecX.push_back( p[0] );
myfile <<p[0]<<","<<p[1]<<"\n";
- std::cout<<" x Anterior "<<xAct<<" x actual "<<x<<std::endl;
- std::cout<<" y Anterior "<<yAct<<" y actual "<<y<<std::endl;
- std::cout<<" x "<<p[0]<<" y "<<p[1]<<std::endl;
+ //std::cout<<" x Anterior "<<xAct<<" x actual "<<x<<std::endl;
+ //std::cout<<" y Anterior "<<yAct<<" y actual "<<y<<std::endl;
+ //std::cout<<" x "<<p[0]<<" y "<<p[1]<<std::endl;
vecY.push_back( p[1] );
- vecZ.push_back( -900 );
+ vecZ.push_back( 900 );
xAct=x;
yAct=y;
}
while(!vecXo.empty())
{
vecX.push_back(vecXo.back());
- std::cout<<" x Siguiente "<<vecXo.back();
+ //std::cout<<" x Siguiente "<<vecXo.back();
vecXo.pop_back();
- vecZ.push_back( -900 );
+ vecZ.push_back( 900 );
}
while(!vecYo.empty())
{
extractcontrolpoints2d->SetContour( &vecX , &vecY , &vecZ );
-int method=2;
+ int method=2;
if (method==0){
extractcontrolpoints2d->GetInitialControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
}
// double y=p[1];
vecX.push_back( p[0] );
vecY.push_back( p[1] );
- vecZ.push_back( -900 );
+ vecZ.push_back( 900 );
// vecZ.push_back( p[2] );
}
//Creates a reference line to be used as the axis of the mirroring
void wxContourMainFrame::referenceLine()
{
- wxBusyCursor wait;
- double spc[3];
+ if (_refLineControl==NULL)
+ {
+ wxBusyCursor wait;
+ double spc[3];
- vtkImageData *vtkimagedata = _theViewPanel->getImageData();
- vtkimagedata->GetSpacing(spc);
+ vtkImageData *vtkimagedata = _theViewPanel->getImageData();
+ vtkimagedata->GetSpacing(spc);
- wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView();
+ wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView();
- _refLineControl = new manualLineControler();
- _refLineModel = new manualContourModelLine();
- _refLineView = new manualViewLine();
- _refLineView->SetModel( _refLineModel );
- _refLineView->SetWxVtkBaseView( viewer2D );
- _refLineView->SetRange( 2 );
- _refLineView->SetZ( 1200 );
+ _refLineControl = new manualLineControler();
+ _refLineModel = new manualContourModelLine();
+ _refLineView = new manualViewLine();
+ _refLineView->SetModel( _refLineModel );
+ _refLineView->SetWxVtkBaseView( viewer2D );
+ _refLineView->SetRange( 2 );
+ _refLineView->SetZ( 1200 );
- _refLineView->SetSpacing(spc);
+ _refLineView->SetSpacing(spc);
- _refLineView->SetColorNormalContour(0, 0, 1);
- _refLineView->SetColorEditContour(0, 0.5, 0.5);
- _refLineView->SetWidthLine(4);
+ _refLineView->SetColorNormalContour(0, 0, 1);
+ _refLineView->SetColorEditContour(0, 0.5, 0.5);
+ _refLineView->SetWidthLine(4);
- _refLineControl->SetModelView( _refLineModel , _refLineView );
- viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
- _refLineModel->SetCloseContour(false);
- _refLineControl->CreateNewManualContour();
+ _refLineControl->SetModelView( _refLineModel , _refLineView );
+ vtkInteractorStyleBaseView* style = (vtkInteractorStyleBaseView*)viewer2D->GetInteractorStyleBaseView();
+ style->AddInteractorStyleMaracas( _refLineControl );
+ _refLineModel->SetCloseContour(false);
+ _refLineControl->CreateNewManualContour();
- double z = _refLineControl->GetZ();
-/*
- _refLineControl->AddPoint(50,100,z);
- _refLineControl->AddPoint(80,40,z);
- _refLineControl->SetCompleteCreation(true);
+//EED?? double z = _refLineControl->GetZ();
+ /*
+ _refLineControl->AddPoint(50,100,z);
+ _refLineControl->AddPoint(80,40,z);
+ _refLineControl->SetCompleteCreation(true);
- _refLineModel->AddPoint(50,100,z);
- _refLineModel->AddPoint(80,40,z);
- _refLineModel->UpdateSpline();
+ _refLineModel->AddPoint(50,100,z);
+ _refLineModel->AddPoint(80,40,z);
+ _refLineModel->UpdateSpline();
- _refLineView->UpdateViewPoint(0);
- _refLineView->UpdateViewPoint(1);
-*/
+ _refLineView->UpdateViewPoint(0);
+ _refLineView->UpdateViewPoint(1);
+ */
- _refLineControl->SetActive(true);
- _refLineView->RefreshContour();
+ _refLineControl->SetActive(true);
+ _refLineView->RefreshContour();
+ }
}
//Hides the referenceLine
{
if (_refLineControl!=NULL)
{
- _refLineView->RemoveCompleteContourActor();
- _refLineControl->SetEditable(false);
- _refLineControl->SetActive(false);
+ if (_refLineControl->GetActive())
+ {
+ _refLineView->RemoveCompleteContourActor();
+ _refLineControl->SetEditable(false);
+ _refLineControl->SetActive(false);
+
+ RefreshInterface();
+ }
}
}
{
if (_refLineControl!=NULL)
{
- wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView();
+ if (_refLineControl->GetActive()==false)
+ {
+ wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView();
- _refLineView->SetModel( _refLineModel );
- _refLineView->SetWxVtkBaseView( viewer2D );
- _refLineView->SetRange( 2 );
- _refLineView->SetZ( 1200 );
+ _refLineView->SetModel( _refLineModel );
+ _refLineView->SetWxVtkBaseView( viewer2D );
+ _refLineView->SetRange( 2 );
+ _refLineView->SetZ( 1200 );
- _refLineControl->SetModelView( _refLineModel , _refLineView );
- viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
- _refLineControl->CreateNewManualContour();
- _refLineControl->SetActive(true);
- _refLineView->RefreshContour();
+ _refLineControl->SetModelView( _refLineModel , _refLineView );
+ vtkInteractorStyleBaseView* style = (vtkInteractorStyleBaseView*)viewer2D->GetInteractorStyleBaseView();
+ style->AddInteractorStyleMaracas( _refLineControl );
+ _refLineControl->CreateNewManualContour();
+ _refLineControl->SetActive(true);
+ _refLineView->RefreshContour();
+
+ RefreshInterface();
+ }
}
}
//_refName = "";
}
-void wxContourMainFrame::onThreshold(int minVal, int maxVal)
+void wxContourMainFrame::onThreshold()
{
-
- vtkImageData * img = _theViewPanel->getImageData();
-
+ int z = _theViewPanel->GetZ();
double range[2];
+
+ vtkImageData * img = getImageData();
img->GetScalarRange(range);
- //vtkImageData * fakeImage = new vtkImageData();
+ int minTot = floor (range[0]);
+ int maxTot = ceil (range[1]);
+
+ double minMax[2];
+ _pannew->onThresholdInstantChange(minMax);
+ int minVal = floor (minMax[0]);
+ int maxVal = floor (minMax[1]);
+
+ if (!_actorPresent)
+ {
+ if (_imageReslicer==NULL)
+ {
+ _imageReslicer = vtkImageReslice::New();
+ _imageReslicer->SetInput( img );
+ _imageReslicer->SetInformationInput(img);
+ _imageReslicer->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);
+ _imageReslicer->SetOutputDimensionality(2);
+ _imageReslicer->SetInterpolationModeToLinear();
+ }
- //Lookup Table
- vtkLookupTable *lookup = vtkLookupTable::New();
- lookup->SetNumberOfTableValues(range[1]+1);
- lookup->SetTableRange(range);
- lookup->SetAlphaRange(0, 1);
- lookup->SetValueRange(0, 1);
- lookup->SetSaturationRange(0, 0);
- lookup->SetRampToLinear( );
+ _imageReslicer->SetResliceAxesOrigin(0,0,z);
+ img = _imageReslicer->GetOutput();
+ img->Update();
+ img->UpdateInformation();
+ wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
- //Assign a fake color for the upper image, and set the white as transparent
- for(int i = range[0]; i < range[1]; i++)
- {
- if( i >= minVal && i <= maxVal )
+ if (_thresholdTable==NULL)
{
- lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+ //Lookup Table
+ _thresholdTable = vtkLookupTable::New();
+ _thresholdTable->SetNumberOfTableValues(maxTot+1);
+ _thresholdTable->SetTableRange(range);
+ _thresholdTable->SetAlphaRange(0, 1);
+ _thresholdTable->SetValueRange(0, 1);
+ _thresholdTable->SetSaturationRange(0, 0);
+ _thresholdTable->SetRampToLinear( );
}
- else if( i >= range[0] && i < minVal )
+
+ //Assign a fake color for the upper image, and set the white as transparent
+ int i;
+ for(i = minTot; i <= maxTot; i++)
{
- lookup->SetTableValue(i, 0.0, 0.0, 0.0, 0); //transparent
+ if( i >= minVal && i <= maxVal )
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+ }
+ else if( i >= minTot && i < minVal )
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else if( i > maxVal && i < maxTot )
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
}
- else if( i > maxVal && i < range[1] )
+ _thresholdTable->Build( );
+
+ if (_thresholdMapper==NULL)
{
- lookup->SetTableValue(i, 0.0, 0.0, 0.0, 0); //transparent
+ _thresholdMapper = vtkImageMapToColors::New( );
}
- }
- lookup->Build( );
+ _thresholdMapper->SetLookupTable( _thresholdTable );
+ _thresholdMapper->SetInput( img );
- vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( );
- mapperImage->SetLookupTable( lookup );
- mapperImage->SetInput( img );
- //mapperImage->SetOutputFormatToRGBA( );
+ if (_thresholdActor==NULL)
+ {
+ _thresholdActor = vtkImageActor::New( );
+ _thresholdActor->SetOpacity( 0.6 );
+ _thresholdActor->InterpolateOn( );
+ _thresholdActor->SetPosition( 0,0, 900-1 );
+ }
+
+ _thresholdActor->SetInput( _thresholdMapper->GetOutput() );
- vtkImageActor * upperImageActor = vtkImageActor::New( );
- upperImageActor->SetInput( mapperImage->GetOutput() );
- upperImageActor->SetOpacity( 1 );
+ baseView->GetRenderer()->AddActor( _thresholdActor );
+ _actorPresent = true;
+ }
- vtkImageViewer2* viewer = vtkImageViewer2::New();
- viewer->SetInput( upperImageActor->GetInput() );
- viewer->SetColorLevel((range[1]-range[0])/2);
- viewer->SetColorWindow(range[1]);
- viewer->GetRenderer()->AddActor( upperImageActor );
- viewer->Render();
+ else
+ {
+ _imageReslicer->SetResliceAxesOrigin(0,0,z);
+ img = _imageReslicer->GetOutput();
+ img->Update();
+ img->UpdateInformation();
+
+ //Assign a fake color for the upper image, and set the white as transparent
+ int i;
+ for(i = minTot; i <= maxTot; i++)
+ {
+ if( i >= minVal && i <= maxVal )
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+ }
+ else if( i >= minTot && i < minVal )
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else if( i > maxVal && i < maxTot )
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else
+ {
+ _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ }
- RefreshInterface();
+ _thresholdTable->Build( );
+ _thresholdMapper->SetLookupTable( _thresholdTable );
+ _thresholdMapper->SetInput( img );
+ _thresholdActor->SetInput( _thresholdMapper->GetOutput() );
+ }
+ /*
+ vtkImageViewer2* viewer = vtkImageViewer2::New();
+ viewer->SetInput( upperImageActor->GetInput() );
+ viewer->SetColorLevel((range[1]-range[0])/2);
+ viewer->SetColorWindow(range[1]);
+ viewer->GetRenderer()->AddActor( upperImageActor );
+ viewer->Render();
+ */
+ _theViewPanel->RefreshInterface();
}
+void wxContourMainFrame::onThresholdChange()
+{
+ if (_actorPresent)
+ {
+ onThreshold();
+ }
+}
+
+void wxContourMainFrame::onThresholdInterpolation(bool interpolate)
+{
+ if (_thresholdActor!=NULL)
+ {
+ if (interpolate)
+ {
+ _thresholdActor->InterpolateOn( );
+ }
+
+ else
+ {
+ _thresholdActor->InterpolateOff( );
+ }
+
+ _theViewPanel->RefreshInterface();
+ }
+}
+
+void wxContourMainFrame::onThresholdChangeOpacity (int opacity)
+{
+ if (_actorPresent)
+ {
+ _thresholdActor->SetOpacity(opacity*0.1);
+ }
+
+ _theViewPanel->RefreshInterface();
+}
+
+void wxContourMainFrame::onThresholdRemove()
+{
+ if (_actorPresent)
+ {
+ wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
+ baseView->GetRenderer()->RemoveActor( _thresholdActor );
+ _actorPresent = false;
+ }
+
+ _theViewPanel->RefreshInterface();
+}
+
void wxContourMainFrame::showAxis(bool show)
{
_theViewPanel->SetVisibleAxis(show);
void wxContourMainFrame::onBrigthnessColorWindowLevel(int colorwindow,int windowlevel){
_theViewPanel->onBrigthnessColorWindowLevel(colorwindow, windowlevel);
-
RefreshInterface();
}
}else{
onSave();
}
-}
\ No newline at end of file
+}
+void wxContourMainFrame::ShowToolsPanel(bool show){
+ _pannew->Show(show);
+}
+