#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>
//----------------------------------------------------------------------------------------------------------------
if(images.size() > 0)
{
+ _images = images;
this->setVectImages(images);
}
}
-void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
+void wxContourMainFrame::setVectImages(std::vector<vtkImageData*> imgs)
+{
#if defined(__GNUC__)
std::string str_home(getenv("HOME"));
notebook = this->createNotebook();
- kernelManager = new KernelManagerContour( images , _datadir+"/data/" , strCreaContourDataTmp );
+ kernelManager = new KernelManagerContour( imgs , _datadir+"/data/" , strCreaContourDataTmp );
_instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" );
wxContourMainFrame :: ~wxContourMainFrame()
{
-
+ deleteAllContours();
_pannew->Close();
interfMainPanel::resetInstance();
delete kernelManager;
fscanf(pFile,"%s",tmp); // --CreaContour--
fscanf(pFile,"%s",tmp); // Version
- fscanf(pFile,"%s",tmp); // 1.0.1
+ fscanf(pFile,"%s",tmp); // 1.0.1 || 1.0.0
std::string version(tmp);
-
- openContours(pFile,false);
- if (version!="1.0.0"){
+
+ //AD:02-06-09
+ if (version=="1.0.1")
+ {
+ openContours(pFile,false);
+ }
+
+ //AD:02-06-09
+ else if (version=="1.0.0")
+ {
openContours(pFile,true);
}
// _theViewPanel->getSceneManager()->openFileWithContours(ff);
_theViewPanel->getSceneManager()->removeSceneContours();
changeInstant();
}
+
+//AD: 29-05-09
void wxContourMainFrame::onSave(){
wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE );
if (dialog.ShowModal() == wxID_OK)
saveFileWithContours( fileNameContourROI );
}
}
+
+//AD: 29-05-09
void wxContourMainFrame::saveFileWithContours( std::string filename )
{
lstNameThings = kernelManager->GetLstNameThings();
sizeLstNameThings = lstNameThings.size();
fprintf(pFile,"NumberOfContours %d\n", sizeLstNameThings );
+
+ vtkImageData *image = _images[0];
+
+ int dimRange[3];
+ image->GetDimensions(dimRange);
+
+ fprintf(pFile,"ImageDimensions %d %d %d\n", dimRange[0], dimRange[1], dimRange[2] );
+
+ double spaRange[3];
+ image->GetSpacing(spaRange);
+
+ fprintf(pFile,"ImageSpacing %f %f %f\n", spaRange[0], spaRange[1], spaRange[2] );
+
for (i=0 ; i<sizeLstNameThings ; i++)
{
kernelManager->SaveThingName( pFile, lstNameThings[i] );
fclose(pFile);
}
+//AD:02-06-09: TODO: Adjust spacing and dimensions to Rois comming from images with different specifications
void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){
char tmp[255];
fscanf(pFile,"%s",tmp); // NumberOfContours
manualContourModel *manModelContour;
int typeView;
- int i;
- for (i=0;i<numberOfContours;i++)
+ vtkImageData *image = _images[0];
+ int imageDim[3];
+ image->GetDimensions(imageDim);
+ double imageSpac[3];
+ image->GetSpacing(imageSpac);
+
+ int tempDim[3];
+ double tempSpac[3];
+
+ fscanf(pFile,"%s",tmp); // ImageDimensions
+ fscanf(pFile,"%s",tmp); // X
+ tempDim[0] = atoi(tmp);
+ fscanf(pFile,"%s",tmp); // Y
+ tempDim[1] = atoi(tmp);
+ fscanf(pFile,"%s",tmp); // Z
+ tempDim[2] = atoi(tmp);
+
+ fscanf(pFile,"%s",tmp); // ImageSpacing
+ fscanf(pFile,"%s",tmp); // X
+ tempSpac[0] = atof(tmp);
+ fscanf(pFile,"%s",tmp); // Y
+ tempSpac[1] = atof(tmp);
+ fscanf(pFile,"%s",tmp); // Z
+ tempSpac[2] = atof(tmp);
+
+ bool compatible = true;
+
+ //Compare Spacing and Dims in X and Y (Necessary in Z?)
+ if (imageDim[0]!=tempDim[0] || imageDim[1]!=tempDim[1] ||
+ imageSpac[0]!=tempSpac[0] || imageSpac[1]!=tempSpac[1])
{
- instantVector.clear();
- fscanf(pFile,"%s",tmp); // Instant
+ compatible = false;
+ }
- fscanf(pFile,"%s",tmp); // 1
- instantVector.push_back( atoi(tmp) );
- fscanf(pFile,"%s",tmp); // 2
- instantVector.push_back( atoi(tmp) );
- fscanf(pFile,"%s",tmp); // 3
- instantVector.push_back( atoi(tmp) );
- fscanf(pFile,"%s",tmp); // 4
- instantVector.push_back( atoi(tmp) );
- fscanf(pFile,"%s",tmp); // 5
- instantVector.push_back( atoi(tmp) );
- fscanf(pFile,"%s",tmp); // 6
- instantVector.push_back( atoi(tmp) );
+ if (compatible==true)
+ {
+ int i;
+ for (i=0;i<numberOfContours;i++)
+ {
+ instantVector.clear();
+ fscanf(pFile,"%s",tmp); // Instant
+ fscanf(pFile,"%s",tmp); // 1
+ instantVector.push_back( atoi(tmp) );
+ fscanf(pFile,"%s",tmp); // 2
+ instantVector.push_back( atoi(tmp) );
+ fscanf(pFile,"%s",tmp); // 3
+ instantVector.push_back( atoi(tmp) );
+ fscanf(pFile,"%s",tmp); // 4
+ instantVector.push_back( atoi(tmp) );
+ fscanf(pFile,"%s",tmp); // 5
+ instantVector.push_back( atoi(tmp) );
+ fscanf(pFile,"%s",tmp); // 6
+ instantVector.push_back( atoi(tmp) );
- fscanf(pFile,"%s",tmp); // TypeContourModel
- fscanf(pFile,"%s",tmp); // ##
- typeContourModel = atoi(tmp);
- manModelContour = kernelManager->factoryManualContourModel(typeContourModel);
- manModelContour->Open(pFile);
+ fscanf(pFile,"%s",tmp); // TypeContourModel
+ fscanf(pFile,"%s",tmp); // ##
+ typeContourModel = atoi(tmp);
- fscanf(pFile,"%s",tmp); // TypeView
- fscanf(pFile,"%s",tmp); // ##
- typeView = atoi(tmp);
+ manModelContour = kernelManager->factoryManualContourModel(typeContourModel);
+ manModelContour->Open(pFile);
+ fscanf(pFile,"%s",tmp); // TypeView
+ fscanf(pFile,"%s",tmp); // ##
+ typeView = atoi(tmp);
-// if (typeView==1)
-// {
-// }
+ // if (typeView==1)
+ // {
+ // }
- std::string theName;
- theName = kernelManager->createOutline( manModelContour, instantVector );
- bool addedModel = theName.compare("") != 0;
- if( addedModel )
- {
- double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default
- _theViewPanel->getSpacing(spc);
- //Adding the manualContourControler to interface objects structure
- //Adding the manualViewContour to interface objects structure
- //_theViewPanel->getSceneManager()->setControlActiveStateOfALL( false );//This call is being done here because if the ROI is created underneath the previously created ROIS will still be active.
- _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeView) ;
- }
- if (staticContour==true)
- {
- Instant instant(&instantVector);
- kernelManager->changeContourOfManager( theName , &instant );
- }
+ std::string theName;
+ theName = kernelManager->createOutline( manModelContour, instantVector );
+ bool addedModel = theName.compare("") != 0;
+ if( addedModel )
+ {
+ double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default
+ _theViewPanel->getSpacing(spc);
+ //Adding the manualContourControler to interface objects structure
+ //Adding the manualViewContour to interface objects structure
+ //_theViewPanel->getSceneManager()->setControlActiveStateOfALL( false );//This call is being done here because if the ROI is created underneath the previously created ROIS will still be active.
+ _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeView) ;
+ }
+
+ if (staticContour==true)
+ {
+ Instant instant(&instantVector);
+ kernelManager->changeContourOfManager( theName , &instant );
+ }
- }// for numberOfContours
+ }// for numberOfContours
+ }
+ else if (compatible==false)
+ {
+ wxMessageBox(_T("The actual image is not compatible with the selected Roi file"), _T("Error"), wxICON_ERROR | wxOK);
+ }
}
void wxContourMainFrame::RefreshInterface(){
_refLineView->SetWidthLine(4);
_refLineControl->SetModelView( _refLineModel , _refLineView );
- viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
+ vtkInteractorStyleBaseView* style = (vtkInteractorStyleBaseView*)viewer2D->GetInteractorStyleBaseView();
+ style->AddInteractorStyleMaracas( _refLineControl );
_refLineModel->SetCloseContour(false);
_refLineControl->CreateNewManualContour();
_refLineView->SetZ( 1200 );
_refLineControl->SetModelView( _refLineModel , _refLineView );
- viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
+ vtkInteractorStyleBaseView* style = (vtkInteractorStyleBaseView*)viewer2D->GetInteractorStyleBaseView();
+ style->AddInteractorStyleMaracas( _refLineControl );
_refLineControl->CreateNewManualContour();
_refLineControl->SetActive(true);
_refLineView->RefreshContour();
RefreshInterface();
}
-int wxContourMainFrame::getColorWindow(){
+
+int wxContourMainFrame::getColorWindow()
+{
+ /*
+ double range[2];
+ vtkImageData * img = getImageData();
+ img->GetScalarRange(range);
+
+ std::cout<<"Val 1: "<<range[0]<<" Val 2: "<<range[1]<<std::endl;
+
+ return (int)range[1];
+ */
return _theViewPanel->getColorWindow();
}
-int wxContourMainFrame::getWindowLevel(){
+
+int wxContourMainFrame::getWindowLevel()
+{
+ /*
+ double range[2];
+ vtkImageData * img = getImageData();
+ img->GetScalarRange(range);
+
+ std::cout<<"Val 1: "<<range[0]<<" Val 2: "<<range[1]<<std::endl;
+
+ return (int)range[1];
+ */
return _theViewPanel->getWindowLevel();
}
return kernelManager->getOutlinesNameAtInstant(tempVector);
}
-void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ){
+void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ)
+{
int maxContourGroup = 0;
ContourExtractData *contourextractdata = new ContourExtractData();
//_staticTextInformation->SetLabel(tmpString);
//Extraction data from contours of each slice
- contourextractdata->SetZtoBeAnalys( z);
+ contourextractdata->SetZtoBeAnalys(z);
tempVector[1]=z;
Instant instant(&tempVector);
delete contourextractdata;
}
-void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename, int typeContourGroup){
- SaveValuesXYZ( directory , namefile, typeContourGroup );
-
- vtkImageData* mask, *value;
- this->getMaskValue(mask, value, typeContourGroup);
- this->SaveImageResult( directory , namefile, mask, value);
+//AD: 29-05-09
+void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename,
+ int typeContourGroup, bool XYZValues, bool contourImage, bool statistics)
+{
+ if (XYZValues)
+ {
+ SaveValuesXYZ( directory , namefile, typeContourGroup );
+ }
+ if (contourImage)
+ {
+ vtkImageData * mask;
+ vtkImageData * value;
+ this->getMaskValue(&mask, &value, typeContourGroup);
+ this->SaveImageResult( directory , namefile, mask, value);
+ }
- FILE *pFile=fopen(filename.c_str(),"w+");
+ if (statistics)
+ {
+ std::ostringstream name;
+ name << filename << ".xls";
+
- int sizeZ = _theViewPanel->GetImageDataSizeZ();
+ FILE *pFile=fopen(name.str().c_str(),"w+");
- wxString tmpString;
- int i,j,maxX,maxY=sizeZ;
- maxX= interfMainPanel::getInstance()->getNumberColsInformationPanel();//this->_grid->GetNumberCols();
+ int sizeZ = _theViewPanel->GetImageDataSizeZ();
- int iTitle,sizeTitle = (maxX / _numberOfVariablesStatistics);
- for ( iTitle=0; iTitle<sizeTitle ; iTitle++)
- {
- // fprintf(pFile,"-- \t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle,tmpString.c_str() );
- fprintf(pFile,"-- \t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle );
- }
- fprintf(pFile,"\n" );
+ wxString tmpString;
+ int i,j,maxX,maxY=sizeZ;
+ maxX= interfMainPanel::getInstance()->getNumberColsInformationPanel();//this->_grid->GetNumberCols();
+ int iTitle,sizeTitle = (maxX / _numberOfVariablesStatistics);
+ for ( iTitle=0; iTitle<sizeTitle ; iTitle++)
+ {
+ // fprintf(pFile,"-- \t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle,tmpString.c_str() );
+ fprintf(pFile,"-- \t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle );
+ }
+ fprintf(pFile,"\n" );
- for ( j=0; j<maxY ; j++)
- {
- fprintf(pFile,"%d\t" , j );
- for (i=0 ; i<maxX ; i++){
- tmpString = interfMainPanel::getInstance()->getCellValue(j, i);//_grid->GetCellValue( j , i );
- fprintf(pFile,"%s\t" , (const char *)(tmpString.mb_str()) );
- } // for i
- fprintf(pFile,"\n" );
- } // for j
- fclose(pFile);
+ for ( j=0; j<maxY ; j++)
+ {
+ fprintf(pFile,"%d\t" , j );
+ for (i=0 ; i<maxX ; i++){
+ tmpString = interfMainPanel::getInstance()->getCellValue(j, i);//_grid->GetCellValue( j , i );
+ fprintf(pFile,"%s\t" , (const char *)(tmpString.mb_str()) );
+ } // for i
+ fprintf(pFile,"\n" );
+ } // for j
+
+ fclose(pFile);
+ }
}
+//AD: 29-05-09
void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefile,int typeContourGroup)
{
wxBusyCursor wait;
delete contourextractdata;
}
-void wxContourMainFrame::getMaskValue(vtkImageData* mask,vtkImageData* value,int typeContourGroup){
+void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value,int typeContourGroup){
wxBusyCursor wait;
ContourExtractData *contourextractdata = new ContourExtractData( true );
//int typeContourGroup = this->_radiolstboxContourGroup->GetSelection();
} // for iContourGroup
} // for z
- value = contourextractdata->GetVtkImageValueResult();
- mask = contourextractdata->GetVtkImageMaskResult();
+ (*value) = contourextractdata->GetVtkImageValueResult();
+ (*mask) = contourextractdata->GetVtkImageMaskResult();
delete contourextractdata;
}