#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>
+#include <string>
+using namespace std;
+
//----------------------------------------------------------------------------------------------------------------
// Class implementation
//----------------------------------------------------------------------------------------------------------------
: wxPanel(parent, id, pos, size, style)
{
m_mgr.SetManagedWindow(this);
+ _contourGroup = 1;
_creatingContoursActive = false;
_theViewPanel = NULL;
// _modelManager = NULL;
_refLineControl = NULL;
_refLineModel = NULL;
_refLineView = 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;
+
+ _contourextractdata = NULL;
+ _viewMaskImage = NULL;
+ _viewMaskImagePanel = NULL;
+ _viewThresholdImage = NULL;
+ _viewThresholdImagePanel = NULL;
}
: wxPanel(parent, id, pos, size, style)
{
m_mgr.SetManagedWindow(this);
+ _contourGroup = 1;
_creatingContoursActive = false;
_theViewPanel = NULL;
_refLineControl = NULL;
_refLineModel = NULL;
_refLineView = NULL;
+// _actorPresent = false;
+ _viewMaskImage = NULL;
+ _viewMaskImagePanel = NULL;
+ _viewThresholdImage = NULL;
+ _viewThresholdImagePanel = NULL;
// set up default notebook style
m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
{
this->setVectImages(images);
}
-
+
+ _contourextractdata = NULL;
}
-void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
+void wxContourMainFrame::setVectImages(std::vector<vtkImageData*> imgs)
+{
+
+ _images = 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 :: getInstance(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector<vtkImageData*> images, long style,std::string datadir ){
+ 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 )
+ {
if(instance == NULL){
instance = new wxContourMainFrame(parent, id, title, pos, size, images, style,datadir);
}
void wxContourMainFrame :: resetInstance()
{
- delete instance;
- instance = NULL;
+ instance->Destroy();
}
wxContourMainFrame :: ~wxContourMainFrame()
{
-
+ delete _contourextractdata;
+ deleteAllContours();
_pannew->Close();
interfMainPanel::resetInstance();
+ delete kernelManager;
+ instance = NULL;
//_pannew->Destroy();
//delete _pannew;
createContour( 6 );
}
+// RaC 09-09 --------------------------------------
+void wxContourMainFrame::onCreateContourPoints( ){
+ //JCP 20-10-08 Undo redo implementation
+ saveState();
+ //JCP 20-10-08 Undo redo implementation
+ createContour( 7 );
+}
+// RaC 09-09 --------------------------------------
+
+// RaC 10-09 --------------------------------------
+void wxContourMainFrame::onCreateContourPolygon( ){
+ //JCP 20-10-08 Undo redo implementation
+ saveState();
+ //JCP 20-10-08 Undo redo implementation
+ createContour( 10 );
+}
+// RaC 10-09 --------------------------------------
+
//------------------------------------------------------------------------------------------------------------
void wxContourMainFrame :: onCreateContourBullEye(wxPanel* panel )
{
- //Creating the manualContourModel and including in the model
- manualContourModel * manModelContour = factoryManualContourModel(panel );
+ //Creating the manualBaseModel and including in the model
+ manualBaseModel * manModelContour = factoryManualContourModel(panel );
std::vector<int> instantVector;
_instantPanel->getInstant( instantVector );
void wxContourMainFrame :: createContour( int typeContour )
{
//Creating the manualContourModel and including in the model
- manualContourModel * manModelContour = kernelManager->factoryManualContourModel(typeContour);
-
+ manualBaseModel * manModelContour = kernelManager->factoryManualContourModel(typeContour);
std::vector<int> instantVector;
_instantPanel->getInstant( instantVector );
}
}
-manualContourModel * wxContourMainFrame::factoryManualContourModel(wxPanel* panel){
+manualBaseModel * wxContourMainFrame::factoryManualContourModel(wxPanel* panel){
manualContourModelBullEye *manModelContourBullEye = new manualContourModelBullEye();
- manualContourModel *manModelContour=NULL;
+ manualBaseModel *manModelContour=NULL;
manModelContour = manModelContourBullEye;
if (panel!=NULL){
int iCrown,sizeCrowns,iSector,sizeSectors;
//cViewer = conwrapviewControl->getViewer();
//_theViewPanel->getSceneManager()->removeWrap( theKeyName );
//cControler* conwrapviewControl->getControler();
-//EED Borrame
-//FILE *ff = fopen("c:/temp/wxVtkBaseView_SceneManagerStadistics.txt","a+");
-//fprintf(ff,"EED wxContourEventHandler::deleteContours() \n" );
-//fprintf(ff," %s %p\n",keyNamesVector[i].c_str(), cControler );
-//fclose(ff);
// delete cModel;
// delete cViewer;
// delete cControler;
_instantPanel->setConceptValue(name, value);
}
+
ConceptDataWrap* wxContourMainFrame::getLastConceptData(){
return _instantPanel->getLastConceptData();
}
+
+
bool wxContourMainFrame::getIfConceptCheckedAt( std::string name, int pos ){
return _instantPanel->getIfConceptCheckedAt( name, pos );
}
+
+
+void wxContourMainFrame::ShowResultImages(int typeContourGroup, int selection, int minZ, int maxZ)
+{
+ vtkImageData * mask;
+ vtkImageData * value;
+ this->getMaskValue(&mask, &value, typeContourGroup, selection, minZ, maxZ);
+
+ std::vector<int> nTypeView;
+ nTypeView.push_back(5);
+ nTypeView.push_back(1);
+ nTypeView.push_back(2);
+ nTypeView.push_back(0);
+
+ wxFrame *frame = new wxFrame(this, -1,_T("Result image extracted.."),wxDefaultPosition,wxSize(600,600), wxDEFAULT_FRAME_STYLE|wxSTAY_ON_TOP);
+ wxAuiManager *m_mgr_noteBookViewerResult = new wxAuiManager();
+ m_mgr_noteBookViewerResult->SetManagedWindow(frame);
+
+ wxAuiNotebook* noteBookViewerResult = new wxAuiNotebook(frame, -1, wxPoint(600, 600), wxSize(430,200), m_notebook_style);
+ m_mgr_noteBookViewerResult->AddPane(noteBookViewerResult, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false));
+
+ wxPanel *panelViewer1 = new wxMaracas_N_ViewersWidget(noteBookViewerResult, value,&nTypeView);
+ wxPanel *panelViewer2 = new wxMaracas_N_ViewersWidget(noteBookViewerResult, mask,&nTypeView);
+
+
+ noteBookViewerResult->AddPage( panelViewer1, wxT("Image result") );
+ noteBookViewerResult->AddPage( panelViewer2, wxT("Mask result") );
+ m_mgr_noteBookViewerResult->Update();
+ frame->Show();
+}
+
+
+
+
void wxContourMainFrame::changeInstant()
{
std::vector<int> instantVect;
_instantPanel->getInstant( instantVect );
-// Instant * theInstant = new Instant ( &instantVect );
-
- //Setting the actual instant
- //_actualInstant = theInstant;
+ int actualSlice = instantVect[1];
kernelManager->setInstant(instantVect);
- //_modelManager->setInstant( _actualInstant );
-
+
+ // Refresh Mask image
+ if(_viewMaskImage!=NULL){
+ _viewMaskImage->SetZ(actualSlice);
+ if (_viewMaskImagePanel->IsVisible()==true)
+ {
+ vtkImageData *mask, *value;
+ getMaskValue(&mask,&value, _contourGroup , 0, -1, -1);
+ _viewMaskImage->onThreshold();
+ }
+ }
+
+ // Refresh Threshold image
+ if(_viewThresholdImage!=NULL){
+ _viewThresholdImage->SetZ(actualSlice);
+ if (_viewThresholdImagePanel->IsVisible()==true){
+ _viewThresholdImage->onThreshold();
+ }
+ }
+
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();
void wxContourMainFrame :: createCopyContourOf ( std::string anExistingKName, std::vector<int> &instantNoTouchData, bool append )
{
std::string cloneName = kernelManager->createCopyContourOf( anExistingKName, instantNoTouchData );
- manualContourModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
+ manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
_theViewPanel->getSceneManager()->createCopyContourOf( anExistingKName, cloneName, manualModel , append );
}
void wxContourMainFrame :: createMirrorContourOf ( std::string anExistingKName, std::vector<int> &instantNoTouchData, bool append )
{
std::string cloneName = kernelManager->createCopyContourOf( anExistingKName, instantNoTouchData );
- manualContourModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);
+ manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);
manualPoint * refPoint1 = _refLineModel->GetManualPoint(0);
manualPoint * refPoint2 = _refLineModel->GetManualPoint(1);
fscanf(pFile,"%s",tmp); // --CreaContour--
fscanf(pFile,"%s",tmp); // Version
- fscanf(pFile,"%s",tmp); // 1.0.1
- std::string version(tmp);
+ fscanf(pFile,"%s",tmp); // 1.0.2 || 1.0.1 || 1.0.0
deleteAllContours();
- openContours(pFile,false);
- if (version!="1.0.0"){
- openContours(pFile,true);
- }
+ loadContours(pFile, false);
+ loadContours(pFile, true);
fclose(pFile);
+}
+
+void wxContourMainFrame ::loadContours( FILE *pFile, bool staticContour )
+{
+ char tmp[255];
+
+ fscanf(pFile,"%s",tmp); // ImageDimensions
+ fscanf(pFile,"%s",tmp); // X
+ fscanf(pFile,"%s",tmp); // Y
+ fscanf(pFile,"%s",tmp); // Z
+
+ fscanf(pFile,"%s",tmp); // ImageSpacing
+ fscanf(pFile,"%s",tmp); // X
+ fscanf(pFile,"%s",tmp); // Y
+ fscanf(pFile,"%s",tmp); // Z
- //_theViewPanel->getSceneManager()->removeSceneContours();
- //changeInstant();
+ fscanf(pFile,"%s",tmp); // NumberOfContours
+ fscanf(pFile,"%s",tmp); // ##
+ int numberOfContours = atoi(tmp);
+ std::vector<int> instantVector;
+ int typeContourModel;
+ manualBaseModel *manModelContour;
+ int typeView;
+
+ 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); // TypeView
+ fscanf(pFile,"%s",tmp); // ##
+ typeView = atoi(tmp);
+
+ 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
}
-void wxContourMainFrame::onLoad(){
+void wxContourMainFrame::onLoad()
+{
+ std::string fileNameContourROI = GetFileLocation();
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+ if(GetFileLocation().empty())
+ {
+//------------------------------------------------------------------------------------------------------------
+ wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxOPEN );
+ if (dialog.ShowModal() == wxID_OK)
+ {
+ fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
+ }
+ }
+
+ onLoadContours(fileNameContourROI);
+}
+
+void wxContourMainFrame::onLoadContours(std::string fileNameContourROI){
char tmp[255];
- wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxOPEN );
- if (dialog.ShowModal() == wxID_OK)
+ char tmpD[255];
+
+ FILE *pFile =fopen(fileNameContourROI.c_str(),"r+");
+
+
+//CMRU 03-09-09- ----------------------------------------------------------------------------------------------
+ if(pFile != NULL)
{
- std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
- FILE *pFile=fopen(fileNameContourROI.c_str(),"r+");
+//------------------------------------------------------------------------------------------------------------
+ fileNameContourROI.append("data");
+ FILE *pFileData=fopen(fileNameContourROI.c_str(),"r+");
+ if(pFileData != NULL)
+ {
+ fscanf(pFileData,"%s",tmpD); // --CreaContour--
+ fscanf(pFileData,"%s",tmpD); // Version
+ fscanf(pFileData,"%s",tmpD); // 1.0.2 || 1.0.1 || 1.0.0
+
+ fscanf(pFileData,"%s",tmpD); // onePixelSize
+ fscanf(pFileData,"%s",tmpD); // #
+ _onePixelSize = atof(tmpD);
+ fscanf(pFileData,"%s",tmpD); // NumberOfContours
+ fscanf(pFileData,"%s",tmpD); // #
+ }
fscanf(pFile,"%s",tmp); // --CreaContour--
fscanf(pFile,"%s",tmp); // Version
- fscanf(pFile,"%s",tmp); // 1.0.1
+ fscanf(pFile,"%s",tmp); // 1.0.2 || 1.0.1 || 1.0.0
std::string version(tmp);
-
- openContours(pFile,false);
- if (version!="1.0.0"){
- openContours(pFile,true);
+
+ //AD:02-06-09
+ if (version=="1.0.2")
+ {
+ openContours(pFile,pFileData,2,false);
+ openContours(pFile,pFileData,2,true); //Load StaticContours
+ }
+
+ //AD:02-06-09
+ else if (version=="1.0.1")
+ {
+ openContours(pFile,pFileData,1,false); //Skips ImageDimensions and ImageSpacing
+ openContours(pFile,pFileData,1,true); //Load StaticContours, skips ImageDimensions and ImageSpacing
+ }
+
+ //AD:02-06-09
+ else if (version=="1.0.0")
+ {
+ openContours(pFile,pFileData,1,false); //Skips ImageDimensions and ImageSpacing
}
-// _theViewPanel->getSceneManager()->openFileWithContours(ff);
fclose(pFile);
+
+ if(pFileData != NULL)
+ {
+ fclose(pFileData);
+ }
}
_theViewPanel->getSceneManager()->removeSceneContours();
changeInstant();
+
}
-void wxContourMainFrame::onSave(){
- wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE );
+
+void wxContourMainFrame::onImport(){
+ std::string filename, filenamecontours;
+ wxFileDialog dialog(NULL, _T("Choose a XML Osirix File"), _T(""), _T(""), _T("*.xml"), wxOPEN );
+
if (dialog.ShowModal() == wxID_OK)
{
- std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
+ filename = dialog.GetPath().mb_str();
+ filenamecontours = kernelManager->parseOsirixFile(filename);
+
+ if(filenamecontours.compare("") != 0){
+ onLoadContours(filenamecontours);
+ }
+
+ }
+}
+void wxContourMainFrame::onTest(){
+ std::string filename, filenamecontours;
+ wxFileDialog dialog(NULL, _T("Choose a File"), _T(""), _T(""), _T("*.*"), wxOPEN );
+
+ if (dialog.ShowModal() == wxID_OK)
+ {
+ filename = dialog.GetPath().mb_str();
+ std::cout << "This is the filename: " << filename << std::endl;
+ }
+}
+
+
+//AD: 29-05-09
+void wxContourMainFrame::onSave(){
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+ if(GetFileLocation().empty())
+ {
+//------------------------------------------------------------------------------------------------------------
+ wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE );
+ if (dialog.ShowModal() == wxID_OK)
+ {
+ std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
+ kernelManager->setCurrentFileName(fileNameContourROI);
+ saveFileWithContours( fileNameContourROI );
+ }
+ }
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+ else
+ {
+ std::cout<<"Nombre del archivo: "<<GetFileLocation()<<std::endl;
+ std::string fileNameContourROI = GetFileLocation();
+ std::cout<<"Nombre del archivo: "<<fileNameContourROI<<std::endl;
kernelManager->setCurrentFileName(fileNameContourROI);
- saveFileWithContours( fileNameContourROI );
+ saveFileWithContours( fileNameContourROI);
}
+//------------------------------------------------------------------------------------------------------------
}
-void wxContourMainFrame::saveFileWithContours( std::string filename ){
+
+//AD: 29-05-09
+void wxContourMainFrame::saveFileWithContours( std::string filename )
+{
FILE *pFile=fopen(filename.c_str(),"w+");
+
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+ filename.append("data");
+ std::cout<<"Nombre del archivo: "<<filename<<std::endl;
+ FILE *pFileData=fopen(filename.c_str(),"w+");
+//------------------------------------------------------------------------------------------------------------
+
std::vector< std::string > lstNameThings;
int i,sizeLstNameThings;
fprintf(pFile,"--CreaContour--\n");
- fprintf(pFile,"Version %s\n", "1.0.1" );
+ fprintf(pFile,"Version %s\n", "1.0.2" );
+
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+ fprintf(pFileData,"--CreaContour--\n");
+ fprintf(pFileData,"Version %s\n", "1.0.2" );
+ fprintf(pFileData,"OnePixelSize %f\n", _onePixelSize);
+
+//------------------------------------------------------------------------------------------------------------
+
+ 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] );
// Normal Contours
+
lstNameThings = kernelManager->GetLstNameThings();
sizeLstNameThings = lstNameThings.size();
fprintf(pFile,"NumberOfContours %d\n", sizeLstNameThings );
+
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+ fprintf(pFileData,"NumberOfContours %d\n", sizeLstNameThings );
+//------------------------------------------------------------------------------------------------------------
+
for (i=0 ; i<sizeLstNameThings ; i++)
{
- kernelManager->SaveThingName( pFile, lstNameThings[i] );
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+ manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(lstNameThings[i]);
+ double sizeInPixel = manualModel ->GetPathSize();
+ double realContourSize = sizeInPixel*_onePixelSize;
+ manualModel ->SetRealSize(realContourSize);
+//------------------------------------------------------------------------------------------------------------
+
+ //int size= kernelManager->GetLstNameThings().size();
+
+ kernelManager->SaveThingName( pFile, pFileData, lstNameThings[i] );
_theViewPanel->getSceneManager()->SaveThingName( pFile, lstNameThings[i] );
}// for i
- //-- Contours Statics
+ //-- Static Contours
+
+ fprintf(pFile,"ImageDimensions %d %d %d\n", dimRange[0], dimRange[1], dimRange[2] );
+
+ fprintf(pFile,"ImageSpacing %f %f %f\n", spaRange[0], spaRange[1], spaRange[2] );
+
lstNameThings = kernelManager->GetLstNameThingsStatic();
sizeLstNameThings = lstNameThings.size();
fprintf(pFile,"NumberOfContoursStatic %d\n", sizeLstNameThings );
+
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+ fprintf(pFileData,"NumberOfContoursStatic %d\n", sizeLstNameThings );
+//------------------------------------------------------------------------------------------------------------
+
for (i=0 ; i<sizeLstNameThings ; i++)
{
- kernelManager->SaveThingName( pFile, lstNameThings[i] );
+ kernelManager->SaveThingName( pFile, pFileData, lstNameThings[i] );
_theViewPanel->getSceneManager()->SaveThingName( pFile, lstNameThings[i] );
}// for i
fclose(pFile);
+ fclose(pFileData);
}
-void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){
+//AD:04-06-09
+void wxContourMainFrame::openContours( FILE *pFile, FILE *pFileData, int version, bool staticContour )
+{
char tmp[255];
+
+ vtkImageData *image = _images[0];
+ int imageDim[3];
+ double imageSpac[3];
+ int tempDim[3];
+ double tempSpac[3];
+
+ bool compatible = true;
+
+ //Version==2
+ if (version==2)
+ {
+ image->GetDimensions(imageDim);
+ image->GetSpacing(imageSpac);
+
+ 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);
+
+ //Compare Spacing and Dims in X and Y (Necessary in Z?) - Just for Version 2
+ if (imageDim[0]!=tempDim[0] || imageDim[1]!=tempDim[1] || imageSpac[0]!=tempSpac[0] || imageSpac[1]!=tempSpac[1])
+ {
+ compatible = false;
+ }
+ }
+
fscanf(pFile,"%s",tmp); // NumberOfContours
fscanf(pFile,"%s",tmp); // ##
int numberOfContours = atoi(tmp);
std::vector<int> instantVector;
int typeContourModel;
- manualContourModel *manModelContour;
+ manualBaseModel *manModelContour;
int typeView;
- int i;
- for (i=0;i<numberOfContours;i++)
+ if (compatible==true)
{
- 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); // TypeView
- fscanf(pFile,"%s",tmp); // ##
- typeView = atoi(tmp);
+ 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);
+ if(pFileData != NULL)
+ {
+ manModelContour->OpenData(pFileData);
+ }
+ fscanf(pFile,"%s",tmp); // TypeView
+ fscanf(pFile,"%s",tmp); // ##
+ typeView = atoi(tmp);
-// 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) //StaticContours (will appear in all slices)
+ {
+ Instant instant(&instantVector);
+ kernelManager->changeContourOfManager( theName , &instant );
+ }
+ }// for numberOfContours
+ }
- 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) ;
- }
+ else if (compatible==false)
+ {
+ wxDialog* dial = new wxDialog (this,-1,_T("Tools"),wxDefaultPosition, wxSize(260,160));
+ wxSizer* buttonsSizer = dial->CreateSeparatedButtonSizer(wxOK|wxCANCEL);
+ wxBoxSizer *dialSizer = new wxBoxSizer(wxVERTICAL);
+
+ wxString lstOptOperation[2];
+ lstOptOperation[0]=_T("By Dimension");
+ lstOptOperation[1]=_T("By Spacing");
+ wxRadioBox * radioOpts = new wxRadioBox(dial, -1, _T("Type of Transformation"), wxDefaultPosition, wxSize(270,45), 2 , lstOptOperation, 2, wxRA_SPECIFY_COLS);
+
+ dialSizer->Add( new wxStaticText(dial,-1,_T("The image resolution is not compatible with the ")) , 0, wxGROW );
+ dialSizer->Add( new wxStaticText(dial,-1,_T("selected Roi file. Do you want to tranform it?")) , 0, wxGROW );
+ dialSizer->Add( new wxStaticText(dial,-1,_T(" ")) , 0, wxGROW );
+ dialSizer->Add(radioOpts,0,wxGROW);
+ dialSizer->Add( new wxStaticText(dial,-1,_T(" ")) , 0, wxGROW );
+ dialSizer->Add(buttonsSizer,0,wxGROW);
+ dial->SetSizer(dialSizer, true);
+ dial->Layout();
+ dial->ShowModal();
+
+ int typeOfTransformation = -1;
+ bool transform = false;
- if (staticContour==true)
+ if (dial->GetReturnCode() == wxID_OK)
{
- Instant instant(&instantVector);
- kernelManager->changeContourOfManager( theName , &instant );
+ typeOfTransformation = radioOpts->GetSelection();
+ transform = 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);
+ if(pFileData != NULL)
+ {
+ manModelContour->OpenData(pFileData);
+ }
+ if (transform==true)
+ {
+ if (typeOfTransformation==0)
+ {
+ double transX, transY;
+ transX = (double) imageDim[0]/tempDim[0];
+ transY = (double) imageDim[1]/tempDim[1];
+ manModelContour->Transform_Ax_Plus_B(transX,0,transY,0);
+ }
+ else if (typeOfTransformation==1)
+ {
+ double transX, transY;
+ transX = (double) tempSpac[0]/imageSpac[0];
+ transY = (double) tempSpac[1]/imageSpac[1];
+ manModelContour->Transform_Ax_Plus_B(transX,0,transY,0);
+ }
+ }
- }// for numberOfContours
+ fscanf(pFile,"%s",tmp); // TypeView
+ fscanf(pFile,"%s",tmp); // ##
+ typeView = atoi(tmp);
+ 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) //StaticContours (will appear in all slices)
+ {
+ Instant instant(&instantVector);
+ kernelManager->changeContourOfManager( theName , &instant );
+ }
+ }// for numberOfContours
+ }
}
void wxContourMainFrame::RefreshInterface(){
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;
-
- //Tipo de pixeles de salida 1
- typedef unsigned char OutputPixelType;
- typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
+ typedef float InternalPixelType;
+ const unsigned int Dimension = 2;
+ typedef itk::Image< InternalPixelType, Dimension > InternalImageType;
- //Tipo de pixeles de salida 2
- typedef unsigned short OutputPixelType2;
- typedef itk::Image< OutputPixelType2, Dimension > OutputImageType2;
+ //Tipo de pixeles de salida 1
+ typedef unsigned char OutputPixelType;
+ typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
- //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;
+ //Tipo de pixeles de salida 2
+ typedef unsigned short OutputPixelType2;
+ typedef itk::Image< OutputPixelType2, Dimension > OutputImageType2;
- //Definición del segundo tipo de conversión de pixeles
- typedef itk::CastImageFilter<
- OutputImageType2, InternalImageType > CastFilterType2;
+ //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;
- //Tercer tipo de conversión
- typedef itk::RescaleIntensityImageFilter<
- InternalImageType,
- OutputImageType > CastFilterType3;
+ //DefiniciÛn del segundo tipo de conversiÛn de pixeles
+ typedef itk::CastImageFilter<
+ OutputImageType2, InternalImageType > CastFilterType2;
- //Cuarto tipo de conversión
- typedef itk::RescaleIntensityImageFilter<
- OutputImageType,
- OutputImageType > CastFilterType4;
+ //Tercer tipo de conversiÛn
+ typedef itk::RescaleIntensityImageFilter<
+ InternalImageType,
+ OutputImageType > CastFilterType3;
- ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();
-
- thresholder->SetLowerThreshold( 0.0 );
- thresholder->SetUpperThreshold( 128 );
+ //Cuarto tipo de conversiÛn
+ typedef itk::RescaleIntensityImageFilter<
+ OutputImageType,
+ OutputImageType > CastFilterType4;
- thresholder->SetOutsideValue( 255 );
- thresholder->SetInsideValue( 0 );
+ ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();
+
+ thresholder->SetLowerThreshold( 0.0 );
+ thresholder->SetUpperThreshold( 128 );
- //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;
+ thresholder->SetOutsideValue( 255 );
+ thresholder->SetInsideValue( 0 );
- ConnectorType::Pointer connector= ConnectorType::New();
- ConnectorType2::Pointer connector2= ConnectorType2::New();
-
+ //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;
- CastFilterType::Pointer filter=CastFilterType::New();
- CastFilterType2::Pointer filter2=CastFilterType2::New();
+ ConnectorType::Pointer connector= ConnectorType::New();
+ ConnectorType2::Pointer connector2= ConnectorType2::New();
+
- connector->SetInput( imagedata );
- filter2->SetInput(connector->GetOutput());
+ CastFilterType::Pointer filter=CastFilterType::New();
+ CastFilterType2::Pointer filter2=CastFilterType2::New();
- typedef itk::CurvatureAnisotropicDiffusionImageFilter<
- InternalImageType,
- InternalImageType > SmoothingFilterType;
+ connector->SetInput( imagedata );
+ filter2->SetInput(connector->GetOutput());
- SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();
+ typedef itk::CurvatureAnisotropicDiffusionImageFilter<
+ InternalImageType,
+ InternalImageType > SmoothingFilterType;
- typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<
- InternalImageType,
- InternalImageType > GradientFilterType;
+ SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();
- typedef itk::SigmoidImageFilter<
- InternalImageType,
- InternalImageType > SigmoidFilterType;
+ typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<
+ InternalImageType,
+ InternalImageType > GradientFilterType;
- GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New();
+ typedef itk::SigmoidImageFilter<
+ InternalImageType,
+ InternalImageType > SigmoidFilterType;
- SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
+ GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New();
- sigmoid->SetOutputMinimum( 0.0 );
- sigmoid->SetOutputMaximum( 255.0 );
+ SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
+ 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();
- typedef itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType,
- InternalImageType > GeodesicActiveContourFilterType;
- GeodesicActiveContourFilterType::Pointer geodesicActiveContour =
- GeodesicActiveContourFilterType::New();
+ FastMarchingFilterType::Pointer fastMarching = FastMarchingFilterType::New();
- typedef itk::ZeroCrossingImageFilter<
- InternalImageType,
- InternalImageType > ZeroCrossingFilterType;
-ZeroCrossingFilterType::Pointer zeroCrossing =
- ZeroCrossingFilterType::New();
+ typedef itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType,
+ InternalImageType > GeodesicActiveContourFilterType;
+ GeodesicActiveContourFilterType::Pointer geodesicActiveContour =
+ GeodesicActiveContourFilterType::New();
-const double propagationScaling = atof( prop );
+ typedef itk::ZeroCrossingImageFilter<
+ InternalImageType,
+ InternalImageType > ZeroCrossingFilterType;
+ ZeroCrossingFilterType::Pointer zeroCrossing =
+ ZeroCrossingFilterType::New();
- geodesicActiveContour->SetPropagationScaling( propagationScaling );
- geodesicActiveContour->SetCurvatureScaling( 1.0 );
- geodesicActiveContour->SetAdvectionScaling( 1.0 );
+ const double propagationScaling = atof( crea::wx2std(prop).c_str() );
- geodesicActiveContour->SetMaximumRMSError( 0.02 );
- int it=atoi( iter );
- geodesicActiveContour->SetNumberOfIterations( it );
+ geodesicActiveContour->SetPropagationScaling( propagationScaling );
+ geodesicActiveContour->SetCurvatureScaling( 1.0 );
+ geodesicActiveContour->SetAdvectionScaling( 1.0 );
- 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() );
-
+ geodesicActiveContour->SetMaximumRMSError( 0.02 );
+ int it=atoi( crea::wx2std(iter).c_str() );
+ geodesicActiveContour->SetNumberOfIterations( it );
- smoothing->SetTimeStep( 0.125 );
- smoothing->SetNumberOfIterations( 5 );
- smoothing->SetConductanceParameter( 9.0 );
+ 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 );
- const double sigma = atof( sigm );
- gradientMagnitude->SetSigma( sigma );
- const double alpha = atof( alf );
- const double beta = atof( bet );
+ const double sigma = atof( crea::wx2std(sigm).c_str() );
+ gradientMagnitude->SetSigma( sigma );
- sigmoid->SetAlpha( alpha );
- sigmoid->SetBeta( beta );
-
- typedef FastMarchingFilterType::NodeContainer NodeContainer;
- typedef FastMarchingFilterType::NodeType NodeType;
+ const double alpha = atof( crea::wx2std(alf).c_str() );
+ const double beta = atof( crea::wx2std(bet).c_str() );
- NodeContainer::Pointer seeds = NodeContainer::New();
+ sigmoid->SetAlpha( alpha );
+ sigmoid->SetBeta( beta );
+
+ typedef FastMarchingFilterType::NodeContainer NodeContainer;
+ typedef FastMarchingFilterType::NodeType NodeType;
- InternalImageType::IndexType seedPosition;
- seedPosition[0] = x;
- seedPosition[1] = y;
+ NodeContainer::Pointer seeds = NodeContainer::New();
- const double initialDistance = atof( distanc );
+ InternalImageType::IndexType seedPosition;
+ seedPosition[0] = x;
+ seedPosition[1] = y;
- NodeType node;
+ const double initialDistance = atof( crea::wx2std(distanc).c_str() );
- const double seedValue = - initialDistance;
-
- node.SetValue( seedValue );
- node.SetIndex( seedPosition );
-
- seeds->Initialize();
- seeds->InsertElement( 0, node );
+ NodeType node;
- fastMarching->SetTrialPoints( seeds );
+ const double seedValue = - initialDistance;
- 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 );
}
int j,sizeCtrPt = vecCtrlPointX.size();
- manualContourModel *manModelContour = kernelManager->factoryManualContourModel( typeofcontour );
+ manualBaseModel *manModelContour = kernelManager->factoryManualContourModel( typeofcontour );
manModelContour->SetNumberOfPointsSpline( ((sizeCtrPt/100)+1)*100 );
if (sizeCtrPt>=3){
for (j=0 ; j<sizeCtrPt ; j++)
// 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] );
}
actualInstantVector[1]=z;
int j,sizeCtrPt = vecCtrlPointX.size();
- manualContourModel *manModelContour = kernelManager->factoryManualContourModel( typeofcontour );
+ manualBaseModel *manModelContour = kernelManager->factoryManualContourModel( typeofcontour );
manModelContour->SetNumberOfPointsSpline( ((sizeCtrPt/100)+1)*100 );
if (sizeCtrPt>=3){
for (j=0 ; j<sizeCtrPt ; j++)
//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);
+
+ wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView();
- vtkImageData *vtkimagedata = _theViewPanel->getImageData();
- vtkimagedata->GetSpacing(spc);
+ _refLineControl = new manualLineControler();
+ _refLineModel = new manualContourModelLine();
+ _refLineView = new manualViewLine();
+ _refLineView->SetModel( _refLineModel );
+ _refLineView->SetWxVtkBaseView( viewer2D );
+ _refLineView->SetRange( 2 );
+ _refLineView->SetZ( 1200 );
- wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView();
+ _refLineView->SetSpacing(spc);
- _refLineControl = new manualLineControler();
- _refLineModel = new manualContourModelLine();
- _refLineView = new manualViewLine();
- _refLineView->SetModel( _refLineModel );
- _refLineView->SetWxVtkBaseView( viewer2D );
- _refLineView->SetRange( 2 );
- _refLineView->SetZ( 1200 );
+ _refLineView->SetColorNormalContour(0, 0, 1);
+ _refLineView->SetColorEditContour(0, 0.5, 0.5);
+ _refLineView->SetWidthLine(4);
- _refLineView->SetSpacing(spc);
+ _refLineControl->SetModelView( _refLineModel , _refLineView );
+ vtkInteractorStyleBaseView* style = (vtkInteractorStyleBaseView*)viewer2D->GetInteractorStyleBaseView();
+ style->AddInteractorStyleMaracas( _refLineControl );
+ _refLineModel->SetCloseContour(false);
+ _refLineControl->CreateNewManualContour();
- _refLineView->SetColorNormalContour(0, 0, 1);
- _refLineView->SetColorEditContour(0, 0.5, 0.5);
- _refLineView->SetWidthLine(4);
+//AD: Inicializar el mirroring con una linea ya pintada
+ /*
+ double z = _refLineControl->GetZ();
- _refLineControl->SetModelView( _refLineModel , _refLineView );
- viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
- _refLineModel->SetCloseContour(false);
- _refLineControl->CreateNewManualContour();
+ int imageDim[3];
+ image->GetDimensions(imageDim);
+ double x = (double) imageDim[0]/2;
+ double y1 = (double) (imageDim[1]/2)+15;
+ double y2 = (double) (imageDim[1]/2)-15;
- double z = _refLineControl->GetZ();
-/*
- _refLineControl->AddPoint(50,100,z);
- _refLineControl->AddPoint(80,40,z);
- _refLineControl->SetCompleteCreation(true);
+ _refLineControl->AddPoint(x,y1,z);
+ _refLineControl->AddPoint(x,y2,z);
+ _refLineControl->SetCompleteCreation(true);
- _refLineModel->AddPoint(50,100,z);
- _refLineModel->AddPoint(80,40,z);
- _refLineModel->UpdateSpline();
+ _refLineModel->AddPoint(x,y1,z);
+ _refLineModel->AddPoint(x,y2,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)
-{
-
- vtkImageData * img = _theViewPanel->getImageData();
-
- double range[2];
- img->GetScalarRange(range);
-
- //vtkImageData * fakeImage = new vtkImageData();
-
- //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( );
-
-
-
- //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 )
- {
- lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1);
- }
- else if( i >= range[0] && i < minVal )
- {
- lookup->SetTableValue(i, 0.0, 0.0, 0.0, 0); //transparent
- }
- else if( i > maxVal && i < range[1] )
- {
- lookup->SetTableValue(i, 0.0, 0.0, 0.0, 0); //transparent
- }
- }
-
- lookup->Build( );
-
- vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( );
- mapperImage->SetLookupTable( lookup );
- mapperImage->SetInput( img );
- //mapperImage->SetOutputFormatToRGBA( );
-
- vtkImageActor * upperImageActor = vtkImageActor::New( );
- upperImageActor->SetInput( mapperImage->GetOutput() );
- upperImageActor->SetOpacity( 1 );
-
- 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();
-
- RefreshInterface();
-}
-
void wxContourMainFrame::showAxis(bool show)
{
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();
}
void wxContourMainFrame::onBrigthnessColorWindowLevel(int colorwindow,int windowlevel){
_theViewPanel->onBrigthnessColorWindowLevel(colorwindow, windowlevel);
-
RefreshInterface();
}
int typeofcontour = 1;
std::string theName;
- manualContourModel* manModelContour = kernelManager->GetPoints(z, type, &vecCtrlPointX,&vecCtrlPointY,&vecCtrlPointZ, theName,typeofcontour, tempVector);
+ manualBaseModel* manModelContour = kernelManager->GetPoints(z, type, &vecCtrlPointX,&vecCtrlPointY,&vecCtrlPointZ, theName,typeofcontour, tempVector);
if( manModelContour!=NULL ){
double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default
return kernelManager->getOutlinesNameAtInstant(tempVector);
}
-void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ){
- int maxContourGroup = 0;
- ContourExtractData *contourextractdata = new ContourExtractData();
+void wxContourMainFrame::SetScalarRange(int grayRangeMin, int grayRangeMax)
+{
+ _contourextractdata->SetScalarRange(grayRangeMin,grayRangeMax);
+}
+
+
+void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ,int grayRangeMin, int grayRangeMax)
+{
+//EED01Juillet2009 GenerateContourExtractData();
+
+ wxString tempString;
+ int maxContourGroup = 0;
- contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
+ _contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
- std::vector<manualContourModel*> lstManConMod;
- std::vector<manualContourModel*> lstManConModTmp;
- std::vector<manualContourModel*> lstManConModExp;
+ std::vector<manualBaseModel*> lstManConMod;
+ std::vector<manualBaseModel*> lstManConModTmp;
+ std::vector<manualBaseModel*> lstManConModExp;
std::vector<double> pLstValue;
std::vector<double> pLstValuePosX;
std::vector<double> pLstValuePosY;
std::vector<int> tempVector;
_instantPanel->getInstant( tempVector );
- vtkImageData *imagedata = _theViewPanel->getImageData();
- int sizeZ = _theViewPanel->GetImageDataSizeZ();
+//EED01Juillet2009 vtkImageData *imagedata = _theViewPanel->getImageData();
+// int sizeZ = _theViewPanel->GetImageDataSizeZ();
int z;
int ii,sizeLstContourThings;
double porcent;
wxString tmpString;
-
if (selection==0 ) // actual slice
{
- std::vector<int> tempVector;
- _instantPanel->getInstant( tempVector );
int actualSlice = tempVector[1];
minZ = actualSlice;
maxZ = actualSlice;
- }
- else if (selection==2 ) // All slices
- {
- minZ = 0;
- maxZ = sizeZ-1;
- }
- else if (selection==1 ) // slice range
- {
+ } else { // slice range
minZ = minimumZ;
maxZ = maximumZ;
}
totalZ = maxZ-minZ+1;
- contourextractdata->SetImage( imagedata);
+//EED01Juillet2009 _contourextractdata->SetImage( imagedata);
+ _contourextractdata->InitVolumeStatistics();
+
// For each slice..
for ( z=minZ ; z<=maxZ ; z++ )
{
//_staticTextInformation->SetLabel(tmpString);
//Extraction data from contours of each slice
- contourextractdata->SetZtoBeAnalys( z);
+ _contourextractdata->SetZtoBeAnalys(z);
tempVector[1]=z;
Instant instant(&tempVector);
ContourThing **contourthing = lstContourThings[ii];
lstManConMod.push_back( (*contourthing)->getModel() );
}
- lstManConModExp = kernelManager->ExploseEachModel( lstManConMod );
+ lstManConModExp = kernelManager->ExploseEachModel( lstManConMod );
- wxString tempString;
tempString.Printf(_T("%d - %d"),z, sizeLstContourThings);
interfMainPanel::getInstance()->setRowLabelInfoPanel(z, tempString);
//_grid->SetRowLabelValue(z, tempString );
int tmpIntA;
-
-
for( iContourGroup=0 ; iContourGroup<sizeContourGroup ; iContourGroup++ ){
lstManConModTmp.clear();
+
+
+
if (typeContourGroup==3) // contour separete
{
lstManConModTmp.push_back( lstManConModExp[iContourGroup]);
lstManConModTmp = lstManConModExp;
}
- contourextractdata->SetLstManualContourModel( lstManConModTmp );
+ _contourextractdata->SetLstManualContourModel( lstManConModTmp );
+ _contourextractdata->SetScalarRange(grayRangeMin,grayRangeMax);
pLstValue.clear();
pLstValuePosX.clear();
pLstValuePosY.clear();
pLstValuePosZ.clear();
- contourextractdata->GetValuesInsideCrown( &pLstValue,
+
+
+ int numberOfPixels;
+ _contourextractdata->GetValuesInsideCrown( &numberOfPixels,
+ &pLstValue,
&pLstValuePosX,
&pLstValuePosY,
&pLstValuePosZ);
+
+ resultSize=numberOfPixels;
// Statistics of each slice.
- contourextractdata->Statistics( &pLstValue,
- minimumZ,
- maximumZ,
+ _contourextractdata->Statistics( &pLstValue,
+ grayRangeMin,
+ grayRangeMax,
&resultGrayRangeCount,
&resultSize,
&resultMin,
&resultMax,
&resultAverage,
&resultStandardeviation);
-
+
if (interfMainPanel::getInstance()->getNumberColsInformationPanel()<_numberOfVariablesStatistics*(iContourGroup+1) )
{
interfMainPanel::getInstance()->appendColsInformationPanel(_numberOfVariablesStatistics);
tmpIntA=_numberOfVariablesStatistics*iContourGroup ;
- tempString.Printf(_T("%d"),resultSize);
+ tempString.Printf(_T("%d"),numberOfPixels);
+
interfMainPanel::getInstance()->setCellValueInfoPanel(z, tmpIntA, tempString);
tempString.Printf(_T("%d"),resultGrayRangeCount);
} // for iContourGroup
} // for z
+ // Print Volume Statistics
+
+
+ int vol_rCountRange;
+ int vol_rsize;
+ double vol_minValue;
+ double vol_maxValue;
+ double vol_average;
+ double vol_standardeviation;
+
+ if (selection!=0 ) // actual slice
+ {
+
+ _contourextractdata->GetVolumeStatistics(&vol_rCountRange, &vol_rsize,
+ &vol_minValue, &vol_maxValue,
+ &vol_average, &vol_standardeviation);
+
+ interfMainPanel::getInstance()->setRowLabelInfoPanel(maxZ+2, _T("Total:"));
+
+ tempString.Printf(_T("%d"),vol_rsize);
+ interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 0, tempString);
+
+ tempString.Printf(_T("%d"),vol_rCountRange);
+ interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 1, tempString);
+
+ tempString.Printf(_T("%f"),vol_minValue);
+ interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 2, tempString);
+
+ tempString.Printf(_T("%f"),vol_maxValue);
+ interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 3, tempString);
+
+ tempString.Printf(_T("%f"),vol_average);
+ interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 4, tempString);
+
+ tempString.Printf(_T("%f"),vol_standardeviation);
+ interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 5, tempString);
+ }
+ //-----------------------------------------
+
int iTitleGroup;
wxString tmpTitleString;
int tmpIntB;
interfMainPanel::getInstance()->setColLableInfoPanel( tmpIntB + 4, _T("Average") );
interfMainPanel::getInstance()->setColLableInfoPanel( tmpIntB + 5, _T("St.Dev.") );
interfMainPanel::getInstance()->setColLableInfoPanel( tmpIntB + 6, _T(" ") );
- }
-
+ }// for title
interfMainPanel::getInstance()->setStringInfoPanel( _T("") );
- 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, int selection, int minZ, int maxZ, bool XYZValues, bool contourImage, bool statistics)
+{
+ if (XYZValues)
+ {
+ SaveValuesXYZ( directory , namefile, typeContourGroup );
+ }
+ if (contourImage)
+ {
+ vtkImageData * mask;
+ vtkImageData * value;
+ this->getMaskValue(&mask, &value, typeContourGroup,selection,minZ,maxZ);
+ this->SaveImageResult( directory , namefile, mask, value);
+ }
- FILE *pFile=fopen(filename.c_str(),"w+");
-
- int sizeZ = _theViewPanel->GetImageDataSizeZ();
+ if (statistics)
+ {
+ std::ostringstream name;
+ name << filename << ".xls";
+
- wxString tmpString;
- int i,j,maxX,maxY=sizeZ;
- maxX= interfMainPanel::getInstance()->getNumberColsInformationPanel();//this->_grid->GetNumberCols();
+ FILE *pFile=fopen(name.str().c_str(),"w+");
- 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;
+
+// int sizeZ = _theViewPanel->GetImageDataSizeZ();
+// int maxY=sizeZ+2;
+
+ maxX= interfMainPanel::getInstance()->getNumberColsInformationPanel();//this->_grid->GetNumberCols();
+ // -- Title --
+ 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,"slice\t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle );
+ }
+ fprintf(pFile,"\n\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
+
+
+ if (selection==0 ) // actual slice
+ {
+ std::vector<int> tempVector;
+ _instantPanel->getInstant( tempVector );
+ int actualSlice = tempVector[1];
+ minZ = actualSlice;
+ maxZ = actualSlice;
+ }
+
+ // Stadistics...
+ for ( j=minZ; j<=maxZ ; 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);
+
+ // Total of stadistics.....
+ if (selection!=0)
+ {
+ fprintf(pFile,"\n Total:\t" );
+ for (i=0 ; i<maxX ; i++){
+ tmpString = interfMainPanel::getInstance()->getCellValue(maxZ+2, i);//_grid->GetCellValue( maxZ+2 , i );
+ fprintf(pFile,"%s\t" , (const char *)(tmpString.mb_str()) );
+ } // for i
+ fprintf(pFile,"\n" );
+ }
+
+ fclose(pFile);
+ }
}
+//AD: 29-05-09
void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefile,int typeContourGroup)
{
wxBusyCursor wait;
- ContourExtractData *contourextractdata = new ContourExtractData();
+//EED01Juillet2009 GenerateContourExtractData();
+
//int typeContourGroup = this->_radiolstboxContourGroup->GetSelection();
- contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
+ _contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
- std::vector<manualContourModel*> lstManConMod;
- std::vector<manualContourModel*> lstManConModTmp;
- std::vector<manualContourModel*> lstManConModExp;
+ std::vector<manualBaseModel*> lstManConMod;
+ std::vector<manualBaseModel*> lstManConModTmp;
+ std::vector<manualBaseModel*> lstManConModExp;
std::vector<double> pLstValue;
std::vector<double> pLstValuePosX;
std::vector<double> pLstValuePosY;
std::vector<int> tempVector;
_instantPanel->getInstant( tempVector );
- vtkImageData *imagedata = _theViewPanel->getSceneManager()->GetImageData();
+//EED01Juillet2009 vtkImageData *imagedata = _theViewPanel->getSceneManager()->GetImageData();
int sizeZ = _theViewPanel->getSceneManager()->GetImageDataSizeZ();
int z;
int ii,sizeLstContourThings;
maxZ = sizeZ;//_mbarrange->GetEnd();
totalZ = maxZ-minZ+1;
- contourextractdata->SetImage( imagedata);
+//EED01Juillet2009 _contourextractdata->SetImage( imagedata);
// For each slice..
for ( z=0 ; z<sizeZ ; z++)
//Extraction data from contours of each slice
- contourextractdata->SetZtoBeAnalys( z);
+ _contourextractdata->SetZtoBeAnalys( z);
tempVector[1]=z;
Instant instant(&tempVector);
lstManConModTmp = lstManConModExp;
}
- contourextractdata->SetLstManualContourModel( lstManConModTmp );
+ _contourextractdata->SetLstManualContourModel( lstManConModTmp );
pLstValue.clear();
pLstValuePosX.clear();
pLstValuePosY.clear();
pLstValuePosZ.clear();
- contourextractdata->GetValuesInsideCrown( &pLstValue,
+ int numberOfPixels;
+ _contourextractdata->GetValuesInsideCrown( &numberOfPixels,
+ &pLstValue,
&pLstValuePosX,
&pLstValuePosY,
&pLstValuePosZ);
} // for z
interfMainPanel::getInstance()->setStringInfoPanel(_T(""));
//_staticTextInformation->SetLabel( _T("") );
- delete contourextractdata;
+
}
-void wxContourMainFrame::getMaskValue(vtkImageData* mask,vtkImageData* value,int typeContourGroup){
+void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value,int typeContourGroup, int selection, int minZ, int maxZ){
wxBusyCursor wait;
- ContourExtractData *contourextractdata = new ContourExtractData( true );
+//EED01Juillet2009 GenerateContourExtractData();
+
//int typeContourGroup = this->_radiolstboxContourGroup->GetSelection();
if (typeContourGroup==3)
{
typeContourGroup=1;
}
- contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
+ _contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
- std::vector<manualContourModel*> lstManConMod;
- std::vector<manualContourModel*> lstManConModTmp;
- std::vector<manualContourModel*> lstManConModExp;
+ std::vector<manualBaseModel*> lstManConMod;
+ std::vector<manualBaseModel*> lstManConModTmp;
+ std::vector<manualBaseModel*> lstManConModExp;
std::vector<int> tempVector;
_instantPanel->getInstant( tempVector );
- vtkImageData *imagedata = _theViewPanel->getImageData();
- int sizeZ = _theViewPanel->GetImageDataSizeZ();
+ vtkImageData *imagedata = _theViewPanel->getImageData();
+ int ext[6];
+ imagedata->GetExtent(ext);
+ int sizeZimage = ext[5]-ext[4]+1;
int z;
int ii,sizeLstContourThings;
- int minZ,maxZ;
double totalZ;
double porcent;
wxString tmpString;
+
+
+ if (selection==0 ) // actual slice
+ {
+ int actualSlice = tempVector[1];
+ minZ = actualSlice;
+ maxZ = actualSlice;
+ }
+
+ totalZ = maxZ-minZ;
- minZ = 0;// _mbarrange->GetStart();
- maxZ = sizeZ;//_mbarrange->GetEnd();
- totalZ = maxZ-minZ+1;
-
- contourextractdata->SetImage( imagedata);
+//EED01Juillet2009 _contourextractdata->SetImage( imagedata);
+ // cleanning image before range
+ for (z=0; z<minZ; z++){
+ _contourextractdata->ResetImageResult(z);
+ }
+ // cleanning image after range
+ for (z=maxZ+1; z<sizeZimage; z++){
+ _contourextractdata->ResetImageResult(z);
+ }
+
+
// For each slice..
- for ( z=0 ; z<sizeZ ; z++)
+ for ( z=minZ ; z<=maxZ ; z++)
{
porcent = 100.0* (z-minZ)/totalZ;
interfMainPanel::getInstance()->setStringInfoPanel(tmpString);
//Extraction data from contours of each slice
- contourextractdata->SetZtoBeAnalys( z);
+ _contourextractdata->SetZtoBeAnalys( z);
tempVector[1]=z;
Instant instant(&tempVector);
lstManConModTmp = lstManConModExp;
}
- contourextractdata->SetLstManualContourModel( lstManConModTmp );
- contourextractdata->CalculateImageResult(); // with actual Z
+ _contourextractdata->SetLstManualContourModel( lstManConModTmp );
+ _contourextractdata->CalculateImageResult(); // with actual Z
} // for iContourGroup
} // for z
- value = contourextractdata->GetVtkImageValueResult();
- mask = contourextractdata->GetVtkImageMaskResult();
- delete contourextractdata;
+ (*value) = _contourextractdata->GetVtkImageValueResult();
+ (*mask) = _contourextractdata->GetVtkImageMaskResult();
+
}
void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, vtkImageData* mask,vtkImageData* value)
// Image Value
vtkMetaImageWriter *writerValueImage = vtkMetaImageWriter::New( );
writerValueImage->SetInput( value );
+ writerValueImage->SetInput( value );
writerValueImage->SetFileName( (const char *)filename.mb_str() );
writerValueImage->SetFileDimensionality( 3 );
+ writerValueImage->SetCompression(false);
writerValueImage->Write( );
// Image Mask
writerMaskImage->SetInput( mask );
writerMaskImage->SetFileName( (const char *)filename.mb_str() );
writerMaskImage->SetFileDimensionality( 3 );
+ writerValueImage->SetCompression(false);
writerMaskImage->Write( );
interfMainPanel::getInstance()->setStringInfoPanel( _T("") );
}else{
onSave();
}
-}
\ No newline at end of file
+}
+void wxContourMainFrame::ShowToolsPanel(bool show){
+ _pannew->Show(show);
+}
+
+
+
+void wxContourMainFrame::SetContourGroup(int contourGroup)
+{
+ _contourGroup = contourGroup;
+}
+
+
+wxPanel *wxContourMainFrame::getMaskImageViewPanel(wxWindow *parent)
+{
+
+ if (_viewMaskImagePanel==NULL)
+ {
+ _contourextractdata = new ContourExtractData(true);
+ _contourextractdata->SetImage( _theViewPanel->getImageData() );
+
+// double range[2];
+// _theViewPanel->getImageData()->GetScalarRange(range);
+ //int min = (int)floor (range[0]);
+ //int max = (int)ceil (range[1]);
+ int min = 254;
+ int max = 256;
+
+ _viewMaskImagePanel = new ThresholdImageViewPanel( parent, -1, -1 , 0);
+ _viewMaskImage = new ThresholdImageView();
+ _viewMaskImage->SetImage(_contourextractdata->GetVtkImageMaskResult() );
+ _viewMaskImage->SetminMaxValue( min, max);
+ _viewMaskImage->SetBaseColor( 0,0,1 );
+ _viewMaskImagePanel->SetThresholdImageView( _viewMaskImage );
+ _viewMaskImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() );
+
+ }
+ return _viewMaskImagePanel;
+}
+
+
+wxPanel *wxContourMainFrame::getColorLayerImageViewPanel(wxWindow *parent)
+{
+ if (_viewColorLayerImagePanel==NULL)
+ {
+ _viewColorLayerImagePanel = new wxPanel(parent, -1);
+/*EED Borrame
+ double range[2];
+ _theViewPanel->getImageData()->GetScalarRange(range);
+ int min = (int)floor (range[0]);
+ int max = (int)ceil (range[1]);
+ _viewColorLayerImagePanel = new ThresholdImageViewPanel( parent, min, max , 1);
+ _viewThresholdImage = new ThresholdImageView();
+ _viewThresholdImage->SetImage( _theViewPanel->getImageData() );
+ _viewThresholdImage->SetminMaxValue( min, max);
+ _viewThresholdImage->SetBaseColor( 1,0,0 );
+ _viewThresholdImagePanel->SetThresholdImageView( _viewThresholdImage );
+ _viewThresholdImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() );
+*/
+ }
+ return _viewColorLayerImagePanel;
+}
+
+
+wxPanel *wxContourMainFrame::getThresholdImageViewPanel(wxWindow *parent)
+{
+ if (_viewThresholdImagePanel==NULL)
+ {
+ double range[2];
+ _theViewPanel->getImageData()->GetScalarRange(range);
+ int min = (int)floor (range[0]);
+ int max = (int)ceil (range[1]);
+ _viewThresholdImagePanel = new ThresholdImageViewPanel( parent, min, max , 1);
+ _viewThresholdImage = new ThresholdImageView();
+ _viewThresholdImage->SetImage( _theViewPanel->getImageData() );
+ _viewThresholdImage->SetminMaxValue( min, max);
+ _viewThresholdImage->SetBaseColor( 1,0,0 );
+ _viewThresholdImagePanel->SetThresholdImageView( _viewThresholdImage );
+ _viewThresholdImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() );
+ }
+ return _viewThresholdImagePanel;
+}
+
+//CMRU 17-08-09-----------------------------------------------------------------------------------------------
+int wxContourMainFrame::getType ()
+{
+ int tipo = 0;
+ std::vector<std::string> currentSelection = _theViewPanel->getSelectedObjects();
+
+ if(!currentSelection.empty())
+ {
+ std::string cloneName = currentSelection [0];
+ manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);
+ tipo = manualModel-> GetTypeModel();
+ }
+ return tipo;
+}
+
+double wxContourMainFrame::getContourSizeInPixels()
+{
+ double contourSize = 0;
+
+ std::vector<std::string> currentSelection = _theViewPanel->getSelectedObjects(); if(!currentSelection.empty())
+ if(!currentSelection.empty())
+ {
+ std::string cloneName = currentSelection [0];
+
+ manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
+ contourSize = manualModel-> GetPathSize();
+ }
+ return contourSize;
+}
+manualBaseModel * wxContourMainFrame::getContour ()
+{
+ std::vector<std::string> currentSelection = _theViewPanel->getSelectedObjects();
+
+ if(!currentSelection.empty())
+ {
+ std::string cloneName = currentSelection [0];
+ manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
+ return manualModel;
+ }
+ return NULL;
+}
+void wxContourMainFrame::onPrintLabel (wxString label, manualBaseModel* manualModel)
+{
+ std::string labelAscii(label.ToAscii());
+ int pos = labelAscii.find(" ");
+
+ int j;
+
+ for (j=0 ; pos != string::npos;j++)
+ {
+ labelAscii.replace( pos, 1, "_" );
+ pos= labelAscii.find(" ");
+ }
+
+ manualModel -> SetLabel(labelAscii);
+}
+void wxContourMainFrame::onInsertCalculation(manualBaseModel* manualModel)
+{
+ double sizeInPixel = manualModel ->GetPathSize();
+ double onePixelRealSize = interfMainPanel::getInstance()->GetPixelValue();;
+ double realContourSize = sizeInPixel*onePixelRealSize;
+ manualModel ->SetRealSize(realContourSize);
+}
+
+double wxContourMainFrame::onePixelSize( double value)
+{
+ return _onePixelSize = value;
+}
+
+std::string wxContourMainFrame::GetFileLocation()
+{
+ return _fileLocation;
+}
+
+void wxContourMainFrame::SetFileLocation(std::string newFileLocation)
+{
+ _fileLocation = newFileLocation;
+ std::cout<<"GETFILELOCATION:"<<_fileLocation<<std::endl;
+}
+//------------------------------------------------------------------------------------------------------------