_refLineControl = NULL;
_refLineModel = NULL;
_refLineView = NULL;
+ _thresholdActor = NULL;
+ _actorPresent = false;
// set up default notebook style
// m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
m_mgr.SetManagedWindow(this);
_creatingContoursActive = false;
_theViewPanel = NULL;
-// _modelManager = NULL;
- _instantPanel = NULL;
-// _buttonsBar = NULL;
-// _gridPanel = NULL;
-// _drawToolsPanel = NULL;
-// _operationsToolsPanel = NULL;
-// _autoFormsPanel = NULL;
-// _standardToolsPanel = NULL;
-// _editionToolsPanel = NULL;
-// _listViewPanel = NULL;
-// _sceneManager = NULL;
-// _actualInstant = NULL;
+ _instantPanel = NULL;
_refLineControl = NULL;
_refLineModel = NULL;
_refLineView = NULL;
+ _thresholdActor = NULL;
+ _actorPresent = false;
// set up default notebook style
m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
m_notebook_theme = 0;
//wxContour_ActionCommandsID a;
- _numberOfVariablesStatistics = 6+1;
+ _numberOfVariablesStatistics = 7;
+ _datadir = datadir;
- _performingOperation = new PerformingOperation();
-//JCP 17 - 10 - 2008
-
- inredo = 0;
- inundo = 0;
-
-#if defined(__GNUC__)
- std::string str_home(getenv("HOME"));
-#elif defined(_WIN32)
- std::string str_home(getenv("USERPROFILE"));
-#endif
- std::string strCreaContourDataTmp = str_home + "/.creaContourDataTemp/";
-// std::string command("mkdir "+strCreaContourDataTmp);
-// system( command.c_str() );
-
- kernelManager = new KernelManagerContour( images , datadir+"/data/" , strCreaContourDataTmp );
- //kernelManager->setVectImages(images);
- //kernelManager->initializeEnvironment();
-
- //vtkImageData* selectedimage = kernelManager->getVectImages()[0];
-//-------------------------------------------------------------
+ inredo = 0;
+ inundo = 0;
- /*frame = new wxContourMainFrame(_builder->getImSourceEnv(), _builder->getImSectionEnv(), _builder->getAxesEnv(), _builder->getContourEnv(),NULL, wxID_ANY, wxT("ROI Application Sample"), wxPoint(50,50), wxSize(800, 600));
- frame->Show(TRUE);*/
+ _pannew = interfMainPanel::getInstance(this,datadir+"/data/Icons");//, eventHandler);
+ _performingOperation = new PerformingOperation();
- //Creating the evtHandler of the panels
- //wxContourEventHandler * eventHandler = new wxContourEventHandler();
+ if(images.size() > 0)
+ {
+ this->setVectImages(images);
+ }
+
+}
- //Creating the window that will show the panels
+void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
- //Getting the parent for the panels ( using aui )
- wxAuiNotebook * notebook = this->createNotebook();
+ #if defined(__GNUC__)
+ std::string str_home(getenv("HOME"));
+ #elif defined(_WIN32)
+ std::string str_home(getenv("USERPROFILE"));
+ #endif
+ std::string strCreaContourDataTmp = str_home + "/.creaContourDataTemp/";
- //JCP 17 - 11 - 08
- //wxInstantChooserPanel * instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true);
- //JCP 17 - 11 - 08
std::vector<std::string> conceptNameVect;
std::vector<int> conceptSizeVect;
-
+ notebook = this->createNotebook();
- _instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" );
- _theViewPanel = new wxContourViewPanel( kernelManager->getSourceImage(), notebook );
+ kernelManager = new KernelManagerContour( images , _datadir+"/data/" , strCreaContourDataTmp );
- kernelManager->getConceptsInformation(conceptNameVect, conceptSizeVect);
+ _instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" );
+ _theViewPanel = new wxContourViewPanel( kernelManager->getSourceImage(), notebook );
+
+//-------------------------------------------------------------
+ kernelManager->getConceptsInformation(conceptNameVect, conceptSizeVect);
_instantPanel->addConcepts(conceptNameVect, conceptSizeVect);
//*******************changeInstant();
_theViewPanel->setVerticalConcept( "Axe Depth", data->getMinValue(), data->getMaxValue(), data->getMinShowedValue(), data->getMaxShowedValue(), data->getActualValue() );
- //eventHandler->setModelManager( kernelManager->getOutlineModelManager() );
- //eventHandler->setViewPanel( _theViewPanel );
- //_theViewPanel->initializeScenceManager();
- //eventHandler->setInstantChooserPanel( _instantPanel );
-
- //bool successConfiuration = eventHandler->configureEventsHandling();
-
- //successConfiuration &= this->configurePanels( notebook );
- this->configurePanels( notebook );
+ this->configurePanels( );
- interfMainPanel* pannew = interfMainPanel::getInstance(parent,datadir+"/data/Icons");//, eventHandler);
-
-//JCP 17 -10 - 2008
-
-
- }
+}
wxContourMainFrame* wxContourMainFrame :: getInstance(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector<vtkImageData*> images, long style,std::string datadir ){
return instance;
}
- std::vector<vtkImageData*> wxContourMainFrame ::getVectImages(){
+ std::vector<vtkImageData*> wxContourMainFrame ::getVectImages()
+ {
return kernelManager->getVectImages();
}
- wxContourMainFrame* wxContourMainFrame :: getInstance(){
- return instance;
-
+
+ wxContourMainFrame* wxContourMainFrame :: getInstance()
+ {
+ return instance;
+ }
+
+ void wxContourMainFrame :: resetInstance()
+ {
+ instance->Destroy();
}
wxContourMainFrame :: ~wxContourMainFrame()
{
- m_mgr.UnInit();
- //El problema al cerrar la aplicacion puede estar asociado
- //a que wxAUINotebook esta en la aplicacion
- //principal (wxContourGUIExample)tambien
-//EED???? delete _theViewPanel;
-//EED???? delete _instantPanel;
-//EED???? delete _buttonsBar;
-//EED???? delete _actualInstant;
-//EED???? delete _sceneManager;
+
+ _pannew->Close();
+ interfMainPanel::resetInstance();
+ delete kernelManager;
+ instance = NULL;
+ //_pannew->Destroy();
+ //delete _pannew;
+
+ m_mgr.UnInit();
+ //delete m_mgr;
+
+ //El problema al cerrar la aplicacion puede estar asociado
+ //a que wxAUINotebook esta en la aplicacion
+ //principal (wxContourGUIExample)tambien
+ //EED???? delete _theViewPanel;
+ //EED???? delete _instantPanel;
+ //EED???? delete _buttonsBar;
+ //EED???? delete _actualInstant;
+ //EED???? delete _sceneManager;
}
//------------------------------------------------------------------------------------------------------------
// Creational and initialization methods
//------------------------------------------------------------------------------------------------------------
- bool wxContourMainFrame :: configurePanels(wxAuiNotebook* theNoteBook)
+ bool wxContourMainFrame :: configurePanels( )
{
bool configured = _theViewPanel!=NULL;
configured &= _theViewPanel!=NULL;
if( _theViewPanel!=NULL )
{
- theNoteBook->AddPage( _theViewPanel, wxT(" View ") );
+ notebook->AddPage( _theViewPanel, wxT(" View ") );
m_mgr.Update();
}
if( configured )
{
- theNoteBook->AddPage( _instantPanel, wxT("Instant Page") );
+ notebook->AddPage( _instantPanel, wxT("Instant Page") );
m_mgr.Update();
}
- m_mgr.AddPane(theNoteBook, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false));
+ m_mgr.AddPane(notebook, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false));
m_mgr.Update();
-/* configured &= _buttonsBar!=NULL;
- if( _buttonsBar!=NULL )
- {
- m_mgr.AddPane(_buttonsBar, wxAuiPaneInfo().
- Name(wxT("TB")).Caption(wxT("Buttons Bar")).
- ToolbarPane().Top().
- LeftDockable( ).RightDockable( false ).CloseButton(false));
- m_mgr.Update();
- }*/
- //CreateStatusBar();
-
+
SetMinSize(wxSize(300,300));
m_mgr.Update();
return configured;
}
- void wxContourMainFrame :: setNotebook( wxAuiNotebook * noteBook )
- {
+ bool wxContourMainFrame::addNewPanel(wxPanel* panel)
+ {
+ bool configured = panel!=NULL;
+ configured &= panel!=NULL;
+
+ if( configured )
+ {
+ notebook->AddPage( panel, wxT(" Viewer "), true );
+ m_mgr.Update();
+ }
+ return configured;
}
//------------------------------------------------------------------------------------------------------------
return _instantPanel->getIfConceptCheckedAt( name, pos );
}
-void wxContourMainFrame::changeInstant(){
+void wxContourMainFrame::changeInstant()
+{
std::vector<int> instantVect;
_instantPanel->getInstant( instantVect );
// Instant * theInstant = new Instant ( &instantVect );
kernelManager->setInstant(instantVect);
//_modelManager->setInstant( _actualInstant );
+ updateActor();
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);
_theViewPanel->setImageSlice(z);
}
}
-void wxContourMainFrame::updateInstantAxes(){
+
+void wxContourMainFrame::updateInstantAxes()
+{
+}
+
+void wxContourMainFrame :: updateActor()
+{
+ if (_actorPresent)
+ {
+ int minMax[2];
+ _pannew->onThresholdInstantChange(minMax);
+
+ int z = _theViewPanel->GetZ();
+
+ vtkImageData * img = getImageData();
+ vtkImageReslice *imageReslice = vtkImageReslice::New();
+
+ imageReslice->SetInput( img );
+ imageReslice->SetInformationInput(img);
+ imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);
+ imageReslice->SetResliceAxesOrigin(0,0,z);
+ imageReslice->SetOutputDimensionality(2);
+ imageReslice->SetInterpolationModeToLinear();
+
+ img = imageReslice->GetOutput();
+ img->Update();
+ img->UpdateInformation();
+
+//EED??? wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
+
+ double range[2];
+ img->GetScalarRange(range);
+
+ int min = floor (range[0]);
+ int max = ceil (range[1]);
+
+ //Lookup Table
+ vtkLookupTable *lookup = vtkLookupTable::New();
+ lookup->SetNumberOfTableValues(max+1);
+ lookup->SetTableRange(range);
+ lookup->SetAlphaRange(0, 1);
+ lookup->SetValueRange(0, 1);
+ lookup->SetSaturationRange(0, 0);
+ lookup->SetRampToLinear( );
+
+ //Assign a fake color for the upper image, and set the white as transparent
+ int i;
+ int minVal = minMax[0];
+ int maxVal = minMax[1];
+
+ for(i = min; i <= max; i++)
+ {
+ if( i >= minVal && i <= maxVal )
+ {
+ lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+ }
+ else if( i >= min && i < minVal )
+ {
+ lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else if( i > maxVal && i < max )
+ {
+ lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else
+ {
+ lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ }
+
+ lookup->Build( );
+
+ vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( );
+ mapperImage->SetLookupTable( lookup );
+ mapperImage->SetInput( img );
+ //mapperImage->SetOutputFormatToRGBA( );
+
+ _thresholdActor->SetInput( mapperImage->GetOutput() );
+ printf("EED wxContourMainFrame::updateActor %d \n" , z);
+ _thresholdActor->SetPosition( 0,0, 900-1 );
+ }
}
void wxContourMainFrame::onChangeDeep(int val){
typedef unsigned short OutputPixelType2;
typedef itk::Image< OutputPixelType2, Dimension > OutputImageType2;
- //Definición del thresholder
+ //DefiniciÛn del thresholder
typedef itk::BinaryThresholdImageFilter<
InternalImageType,
OutputImageType > ThresholdingFilterType;
- //Definición del primer filtro de conversión de pixeles
+ //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
+ //DefiniciÛn del segundo tipo de conversiÛn de pixeles
typedef itk::CastImageFilter<
OutputImageType2, InternalImageType > CastFilterType2;
- //Tercer tipo de conversión
+ //Tercer tipo de conversiÛn
typedef itk::RescaleIntensityImageFilter<
InternalImageType,
OutputImageType > CastFilterType3;
- //Cuarto tipo de conversión
+ //Cuarto tipo de conversiÛn
typedef itk::RescaleIntensityImageFilter<
OutputImageType,
OutputImageType > CastFilterType4;
thresholder->SetOutsideValue( 255 );
thresholder->SetInsideValue( 0 );
- //Definción de conexiónes entre VTK e ITK y el writer
+ //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;
InternalImageType,
InternalImageType > ZeroCrossingFilterType;
ZeroCrossingFilterType::Pointer zeroCrossing =
- ZeroCrossingFilterType::New();
+ 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->SetMaximumRMSError( 0.02 );
- int it=atoi( iter );
+ 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->SetInput( fastMarching->GetOutput() );
geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() );
zeroCrossing->SetInput( geodesicActiveContour->GetOutput() );
smoothing->SetConductanceParameter( 9.0 );
- const double sigma = atof( sigm );
+ 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 );
seedPosition[0] = x;
seedPosition[1] = y;
- const double initialDistance = atof( distanc );
+ const double initialDistance = atof( crea::wx2std(distanc).c_str() );
NodeType node;
seeds->Initialize();
seeds->InsertElement( 0, node );
- fastMarching->SetTrialPoints( seeds );
+ fastMarching->SetTrialPoints( seeds );
fastMarching->SetSpeedConstant( 1.0 );
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;
}
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;
}
vecX.push_back(vecXo.back());
std::cout<<" x Siguiente "<<vecXo.back();
vecXo.pop_back();
- vecZ.push_back( -900 );
+ vecZ.push_back( 900 );
}
while(!vecYo.empty())
{
// 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] );
}
} // if addedModel
} // if sizeCtrPt
}
-
int wxContourMainFrame::GetImageDataSizeZ(){
return _theViewPanel->GetImageDataSizeZ();
}
//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 );
+ viewer2D->GetInteractorStyleBaseView()->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 );
+ viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
+ _refLineControl->CreateNewManualContour();
+ _refLineControl->SetActive(true);
+ _refLineView->RefreshContour();
+
+ RefreshInterface();
+ }
}
}
+void wxContourMainFrame::refLineChangeWidth(int width)
+{
+ _refLineView->SetWidthLine(width);
+ _refLineView->RefreshContour();
+
+ RefreshInterface();
+}
+
+
void wxContourMainFrame::onMirror()
{
//AD:02-09
//_refName = "";
}
-void wxContourMainFrame::showAxis(bool show){
+void wxContourMainFrame::onThreshold(int minVal, int maxVal)
+{
+ if (!_actorPresent)
+ {
+ int z = _theViewPanel->GetZ();
+
+ vtkImageData * img = getImageData();
+ vtkImageReslice *imageReslice = vtkImageReslice::New();
+
+ imageReslice->SetInput( img );
+ imageReslice->SetInformationInput(img);
+ imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);
+ imageReslice->SetResliceAxesOrigin(0,0,z);
+ imageReslice->SetOutputDimensionality(2);
+ imageReslice->SetInterpolationModeToLinear();
+
+ img = imageReslice->GetOutput();
+ img->Update();
+ img->UpdateInformation();
+
+ wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
+
+ double range[2];
+ img->GetScalarRange(range);
+
+ int min = floor (range[0]);
+ int max = ceil (range[1]);
+
+ //Lookup Table
+ vtkLookupTable *lookup = vtkLookupTable::New();
+ lookup->SetNumberOfTableValues(max+1);
+ lookup->SetTableRange(range);
+ lookup->SetAlphaRange(0, 1);
+ lookup->SetValueRange(0, 1);
+ lookup->SetSaturationRange(0, 0);
+ lookup->SetRampToLinear( );
+
+ //Assign a fake color for the upper image, and set the white as transparent
+ int i;
+ for(i = min; i <= max; i++)
+ {
+ if( i >= minVal && i <= maxVal )
+ {
+ lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+ }
+ else if( i >= min && i < minVal )
+ {
+ lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else if( i > maxVal && i < max )
+ {
+ lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else
+ {
+ lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ }
+
+ lookup->Build( );
+
+ vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( );
+ mapperImage->SetLookupTable( lookup );
+ mapperImage->SetInput( img );
+ //mapperImage->SetOutputFormatToRGBA( );
+
+ if (_thresholdActor==NULL)
+ {
+ _thresholdActor = vtkImageActor::New( );
+ _thresholdActor->SetOpacity( 0.6 );
+ _thresholdActor->InterpolateOn( );
+ }
+printf("EED wxContourMainFrame::onThreshold \n");
+ _thresholdActor->SetPosition( 0,0, z+1 );
+ _thresholdActor->SetInput( mapperImage->GetOutput() );
+
+ baseView->GetRenderer()->AddActor( _thresholdActor );
+ _actorPresent = true;
+ }
+
+ RefreshInterface();
+/*
+ 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();
+*/
+
+}
+
+void wxContourMainFrame::onThresholdChange(int minVal, int maxVal)
+{
+ if (_actorPresent)
+ {
+ int z = _theViewPanel->GetZ();
+
+ vtkImageData * img = getImageData();
+ vtkImageReslice *imageReslice = vtkImageReslice::New();
+
+ imageReslice->SetInput( img );
+ imageReslice->SetInformationInput(img);
+ imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);
+ imageReslice->SetResliceAxesOrigin(0,0,z);
+ imageReslice->SetOutputDimensionality(2);
+ imageReslice->SetInterpolationModeToLinear();
+
+ img = imageReslice->GetOutput();
+ img->Update();
+ img->UpdateInformation();
+
+//EED?? wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
+
+ double range[2];
+ img->GetScalarRange(range);
+
+ int min = floor (range[0]);
+ int max = ceil (range[1]);
+
+ //Lookup Table
+ vtkLookupTable *lookup = vtkLookupTable::New();
+ lookup->SetNumberOfTableValues(max+1);
+ lookup->SetTableRange(range);
+ lookup->SetAlphaRange(0, 1);
+ lookup->SetValueRange(0, 1);
+ lookup->SetSaturationRange(0, 0);
+ lookup->SetRampToLinear( );
+
+ //Assign a fake color for the upper image, and set the white as transparent
+ int i;
+ for(i = min; i <= max; i++)
+ {
+ if( i >= minVal && i <= maxVal )
+ {
+ lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+ }
+ else if( i >= min && i < minVal )
+ {
+ lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else if( i > maxVal && i < max )
+ {
+ lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ else
+ {
+ lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+ }
+ }
+
+ lookup->Build( );
+
+ vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( );
+ mapperImage->SetLookupTable( lookup );
+ mapperImage->SetInput( img );
+ //mapperImage->SetOutputFormatToRGBA( );
+
+ _thresholdActor->SetInput( mapperImage->GetOutput() );
+printf("EED wxContourMainFrame::onThresholdChange \n");
+ _thresholdActor->SetPosition( 0,0, z+1 );
+
+ }
+
+ RefreshInterface();
+}
+
+void wxContourMainFrame::onThresholdInterpolation(bool interpolate)
+{
+ if (_thresholdActor!=NULL)
+ {
+ if (interpolate)
+ {
+ _thresholdActor->InterpolateOn( );
+ }
+
+ else
+ {
+ _thresholdActor->InterpolateOff( );
+ }
+
+ RefreshInterface();
+ }
+}
+
+void wxContourMainFrame::onThresholdChangeOpacity (int opacity)
+{
+ if (_actorPresent)
+ {
+ _thresholdActor->SetOpacity(opacity*0.1);
+ }
+
+ RefreshInterface();
+}
+
+void wxContourMainFrame::onThresholdRemove()
+{
+ if (_actorPresent)
+ {
+ wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
+ baseView->GetRenderer()->RemoveActor( _thresholdActor );
+ _actorPresent = false;
+ }
+
+ RefreshInterface();
+}
+
+void wxContourMainFrame::showAxis(bool show)
+{
_theViewPanel->SetVisibleAxis(show);
_theViewPanel->Refresh();
}
void wxContourMainFrame::onBrigthnessColorWindowLevel(int colorwindow,int windowlevel){
_theViewPanel->onBrigthnessColorWindowLevel(colorwindow, windowlevel);
-
RefreshInterface();
}
void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename, int typeContourGroup){
SaveValuesXYZ( directory , namefile, typeContourGroup );
- SaveImageResult( directory , namefile, typeContourGroup);
+
+ vtkImageData* mask, *value;
+ this->getMaskValue(mask, value, typeContourGroup);
+ this->SaveImageResult( directory , namefile, mask, value);
FILE *pFile=fopen(filename.c_str(),"w+");
delete contourextractdata;
}
-void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, int typeContourGroup)
-{
+void wxContourMainFrame::getMaskValue(vtkImageData* mask,vtkImageData* value,int typeContourGroup){
wxBusyCursor wait;
ContourExtractData *contourextractdata = new ContourExtractData( true );
//int typeContourGroup = this->_radiolstboxContourGroup->GetSelection();
}
contourextractdata->SetLstManualContourModel( lstManConModTmp );
-
-
-// for (ii=0 ; ii<sizeLstContourThings ; ii++)
-// {
-// ContourThing **contourthing = lstContourThings[ii];
-// lstManConMod.push_back( (*contourthing)->getModel() );
-// }
-// contourextractdata->SetLstManualContourModel( lstManConMod );
-
contourextractdata->CalculateImageResult(); // with actual Z
} // for iContourGroup
} // for z
+ value = contourextractdata->GetVtkImageValueResult();
+ mask = contourextractdata->GetVtkImageMaskResult();
+ delete contourextractdata;
+}
+
+void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, vtkImageData* mask,vtkImageData* value)
+{
+
std::string temp = directory + "/" + namefile + "-Value.mhd";
wxString filename = crea::std2wx(temp);
// Image Value
vtkMetaImageWriter *writerValueImage = vtkMetaImageWriter::New( );
- writerValueImage->SetInput( contourextractdata->GetVtkImageValueResult() );
+ writerValueImage->SetInput( value );
writerValueImage->SetFileName( (const char *)filename.mb_str() );
writerValueImage->SetFileDimensionality( 3 );
writerValueImage->Write( );
filename.append(_T("-Mask.mhd"));*/
vtkMetaImageWriter *writerMaskImage = vtkMetaImageWriter::New( );
- writerMaskImage->SetInput( contourextractdata->GetVtkImageMaskResult() );
+ writerMaskImage->SetInput( mask );
writerMaskImage->SetFileName( (const char *)filename.mb_str() );
writerMaskImage->SetFileDimensionality( 3 );
writerMaskImage->Write( );
interfMainPanel::getInstance()->setStringInfoPanel( _T("") );
- delete contourextractdata;
+
}
+
+
void wxContourMainFrame::onChangeInstantInstantPanel(std::string name,int value, int minshow, int maxshow){
if( name.compare( _theViewPanel->getVerticalConceptName() ) == 0){
_theViewPanel->setActualVertical( value);
}else{
onSave();
}
-}
\ No newline at end of file
+}
+void wxContourMainFrame::ShowToolsPanel(bool show){
+ _pannew->Show(show);
+}
+