if(images.size() > 0)
{
- _images = imgs;
- this->setVectImages(imgs);
+ this->setVectImages(images);
}
}
void wxContourMainFrame::setVectImages(std::vector<vtkImageData*> imgs)
{
+ _images = imgs;
+
#if defined(__GNUC__)
std::string str_home(getenv("HOME"));
#elif defined(_WIN32)
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];
+
+ if (staticContour==false)
+ {
+ 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;
+ manualContourModel *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()
+{
char tmp[255];
wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxOPEN );
if (dialog.ShowModal() == wxID_OK)
fscanf(pFile,"%s",tmp); // --CreaContour--
fscanf(pFile,"%s",tmp); // Version
- fscanf(pFile,"%s",tmp); // 1.0.1 || 1.0.0
+ fscanf(pFile,"%s",tmp); // 1.0.2 || 1.0.1 || 1.0.0
std::string version(tmp);
//AD:02-06-09
- if (version=="1.0.1")
+ if (version=="1.0.2")
{
- openContours(pFile,false);
+ openContours(pFile,2,false);
+ openContours(pFile,2,true); //Load StaticContours
+ }
+
+ //AD:02-06-09
+ else if (version=="1.0.1")
+ {
+ openContours(pFile,1,false); //Skips ImageDimensions and ImageSpacing
+ openContours(pFile,1,true); //Load StaticContours, skips ImageDimensions and ImageSpacing
}
//AD:02-06-09
else if (version=="1.0.0")
{
- openContours(pFile,true);
+ openContours(pFile,1,false); //Skips ImageDimensions and ImageSpacing
}
-// _theViewPanel->getSceneManager()->openFileWithContours(ff);
fclose(pFile);
}
int i,sizeLstNameThings;
fprintf(pFile,"--CreaContour--\n");
- fprintf(pFile,"Version %s\n", "1.0.1" );
-
- // Normal Contours
- lstNameThings = kernelManager->GetLstNameThings();
- sizeLstNameThings = lstNameThings.size();
- fprintf(pFile,"NumberOfContours %d\n", sizeLstNameThings );
-
+ fprintf(pFile,"Version %s\n", "1.0.2" );
+
vtkImageData *image = _images[0];
int dimRange[3];
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 );
+
for (i=0 ; i<sizeLstNameThings ; i++)
{
kernelManager->SaveThingName( pFile, 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 );
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 ){
+//AD:04-06-09
+void wxContourMainFrame::openContours( FILE *pFile, int version, bool staticContour )
+{
char tmp[255];
- fscanf(pFile,"%s",tmp); // NumberOfContours
- fscanf(pFile,"%s",tmp); // ##
- int numberOfContours = atoi(tmp);
-
- std::vector<int> instantVector;
- int typeContourModel;
- manualContourModel *manModelContour;
- int typeView;
-
+
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])
+
+ //Version==2
+ if (version==2)
{
- compatible = false;
+ 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;
+ int typeView;
if (compatible==true)
{
fscanf(pFile,"%s",tmp); // ##
typeView = atoi(tmp);
-
- // if (typeView==1)
- // {
- // }
-
-
std::string theName;
theName = kernelManager->createOutline( manModelContour, instantVector );
bool addedModel = theName.compare("") != 0;
_theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeView) ;
}
- if (staticContour==true)
+ if (staticContour) //StaticContours (will appear in all slices)
{
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);
+ 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 (dial->GetReturnCode() == wxID_OK)
+ {
+ 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 (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);
+ }
+ }
+
+ 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
}
}
_refLineModel->SetCloseContour(false);
_refLineControl->CreateNewManualContour();
-//EED?? double z = _refLineControl->GetZ();
+//AD: Inicializar el mirroring con una linea ya pintada
/*
- _refLineControl->AddPoint(50,100,z);
- _refLineControl->AddPoint(80,40,z);
+ double z = _refLineControl->GetZ();
+
+ 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;
+
+ _refLineControl->AddPoint(x,y1,z);
+ _refLineControl->AddPoint(x,y2,z);
_refLineControl->SetCompleteCreation(true);
- _refLineModel->AddPoint(50,100,z);
- _refLineModel->AddPoint(80,40,z);
+ _refLineModel->AddPoint(x,y1,z);
+ _refLineModel->AddPoint(x,y2,z);
_refLineModel->UpdateSpline();
_refLineView->UpdateViewPoint(0);