//#include "wxContour_ActionCommandsID.h"
//#include "OutlineModelBuilder.h"
//#include "wxContourEventHandler.h"
+#include <creaWx.h>
//----------------------------------------------------------------------------------------------------------------
// Class implementation
_theViewPanel = NULL;
// _modelManager = NULL;
_instantPanel = NULL;
- _buttonsBar = NULL;
- _gridPanel = NULL;
- _drawToolsPanel = NULL;
- _operationsToolsPanel = NULL;
- _autoFormsPanel = NULL;
- _standardToolsPanel = NULL;
- _editionToolsPanel = NULL;
- _listViewPanel = NULL;
- _sceneManager = NULL;
+// _buttonsBar = NULL;
+// _gridPanel = NULL;
+// _drawToolsPanel = NULL;
+// _operationsToolsPanel = NULL;
+ //_autoFormsPanel = NULL;
+// _standardToolsPanel = NULL;
+// _editionToolsPanel = NULL;
+// _listViewPanel = NULL;
+// _sceneManager = NULL;
//_actualInstant = NULL;
_numberOfVariablesStatistics = 6+1;
+ _refLineControl = NULL;
+ _refLineModel = NULL;
+ _refLineView = NULL;
+
// set up default notebook style
- m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
- m_notebook_theme = 0;
+// m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
+// m_notebook_theme = 0;
//wxContour_ActionCommandsID a;
}
-wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector<vtkImageData*> images, long style)
+ wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector<vtkImageData*> images, long style,std::string datadir)
: wxPanel(parent, id, pos, size, style)
{
m_mgr.SetManagedWindow(this);
_creatingContoursActive = false;
_theViewPanel = NULL;
-// _modelManager = NULL;
+
_instantPanel = NULL;
- _buttonsBar = NULL;
- _gridPanel = NULL;
- _drawToolsPanel = NULL;
- _operationsToolsPanel = NULL;
- _autoFormsPanel = NULL;
- _standardToolsPanel = NULL;
- _editionToolsPanel = NULL;
- _listViewPanel = NULL;
- _sceneManager = NULL;
- //_actualInstant = NULL;
+ _refLineControl = NULL;
+ _refLineModel = NULL;
+ _refLineView = NULL;
// set up default notebook style
m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
m_notebook_theme = 0;
//wxContour_ActionCommandsID a;
- _numberOfVariablesStatistics = 6+1;
-
+ _numberOfVariablesStatistics = 7;
- _performingOperation = new PerformingOperation();
-//JCP 17 - 10 - 2008
+ _datadir = datadir;
+
inredo = 0;
inundo = 0;
- kernelManager = new KernelManagerContour(images);
- //kernelManager->setVectImages(images);
- //kernelManager->initializeEnvironment();
-
- //vtkImageData* selectedimage = kernelManager->getVectImages()[0];
-
-//-------------------------------------------------------------
+ interfMainPanel* pannew = interfMainPanel::getInstance(parent,datadir+"/data/Icons");//, eventHandler);
+ _performingOperation = new PerformingOperation();
- /*frame = new wxContourMainFrame(_builder->getImSourceEnv(), _builder->getImSectionEnv(), _builder->getAxesEnv(), _builder->getContourEnv(),NULL, wxID_ANY, wxT("ROI Application Sample"), wxPoint(50,50), wxSize(800, 600));
- frame->Show(TRUE);*/
- //Creating the evtHandler of the panels
- //wxContourEventHandler * eventHandler = new wxContourEventHandler();
- //Creating the window that will show the panels
+ if(images.size() > 0){
+ this->setVectImages(images);
+ }
+
+}
- //Getting the parent for the panels ( using aui )
- wxAuiNotebook * notebook = this->createNotebook();
+void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
+
+ #if defined(__GNUC__)
+ std::string str_home(getenv("HOME"));
+ #elif defined(_WIN32)
+ std::string str_home(getenv("USERPROFILE"));
+ #endif
+ std::string strCreaContourDataTmp = str_home + "/.creaContourDataTemp/";
- //JCP 17 - 11 - 08
- //wxInstantChooserPanel * instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true);
- //JCP 17 - 11 - 08
std::vector<std::string> conceptNameVect;
std::vector<int> conceptSizeVect;
-
+ wxAuiNotebook * notebook = this->createNotebook();
- _instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" );
- _theViewPanel = new wxContourViewPanel( kernelManager->getSourceImage(), notebook );
+ kernelManager = new KernelManagerContour( images , _datadir+"/data/" , strCreaContourDataTmp );
- kernelManager->getConceptsInformation(conceptNameVect, conceptSizeVect);
+ _instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" );
+ _theViewPanel = new wxContourViewPanel( kernelManager->getSourceImage(), notebook );
+
+//-------------------------------------------------------------
+ kernelManager->getConceptsInformation(conceptNameVect, conceptSizeVect);
_instantPanel->addConcepts(conceptNameVect, conceptSizeVect);
//*******************changeInstant();
_theViewPanel->setVerticalConcept( "Axe Depth", data->getMinValue(), data->getMaxValue(), data->getMinShowedValue(), data->getMaxShowedValue(), data->getActualValue() );
- //eventHandler->setModelManager( kernelManager->getOutlineModelManager() );
- //eventHandler->setViewPanel( _theViewPanel );
- //_theViewPanel->initializeScenceManager();
- //eventHandler->setInstantChooserPanel( _instantPanel );
-
- //bool successConfiuration = eventHandler->configureEventsHandling();
-
- //successConfiuration &= this->configurePanels( notebook );
this->configurePanels( notebook );
- interfMainPanel* pannew = interfMainPanel::getInstance(parent);//, eventHandler);
-
-//JCP 17 -10 - 2008
-
-
- }
+}
- wxContourMainFrame* wxContourMainFrame :: getInstance(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector<vtkImageData*> images, long style ){
+ 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);
+ instance = new wxContourMainFrame(parent, id, title, pos, size, images, style,datadir);
}
return instance;
}
m_mgr.AddPane(theNoteBook, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false));
m_mgr.Update();
- configured &= _buttonsBar!=NULL;
+/* configured &= _buttonsBar!=NULL;
if( _buttonsBar!=NULL )
{
m_mgr.AddPane(_buttonsBar, wxAuiPaneInfo().
ToolbarPane().Top().
LeftDockable( ).RightDockable( false ).CloseButton(false));
m_mgr.Update();
- }
+ }*/
//CreateStatusBar();
SetMinSize(wxSize(300,300));
_instantPanel = theInstantChooserPanel;
}
- void wxContourMainFrame :: setButtonsBar( wxContour_ButtonsBar * theButtonsBar )
- {
- _buttonsBar = theButtonsBar;
- }
+// void wxContourMainFrame :: setButtonsBar( wxContour_ButtonsBar * theButtonsBar )
+// {
+// _buttonsBar = theButtonsBar;
+// }
- void wxContourMainFrame :: setGrid( wxContour_Grid * theGridPanel )
- {
- _gridPanel = theGridPanel;
- }
+// void wxContourMainFrame :: setGrid( wxContour_Grid * theGridPanel )
+// {
+// _gridPanel = theGridPanel;
+// }
- void wxContourMainFrame :: setDrawToolsPanel( wxContour_DrawToolsPanel * theDrawToolsPanel )
- {
- _drawToolsPanel = theDrawToolsPanel;
- }
+// void wxContourMainFrame :: setDrawToolsPanel( wxContour_DrawToolsPanel * theDrawToolsPanel )
+// {
+// _drawToolsPanel = theDrawToolsPanel;
+// }
- void wxContourMainFrame :: setOperationsToolsPanel( wxContour_OperationsToolsPanel * theOperationsToolsPanel )
- {
- _operationsToolsPanel = theOperationsToolsPanel;
- }
+// void wxContourMainFrame :: setOperationsToolsPanel( wxContour_OperationsToolsPanel * theOperationsToolsPanel )
+// {
+// _operationsToolsPanel = theOperationsToolsPanel;
+// }
- void wxContourMainFrame :: setAutomaticFormsPanel( wxContour_AutomaticFormsToolsPanel * theAutoFormsPanel )
- {
- _autoFormsPanel = theAutoFormsPanel;
- }
+// void wxContourMainFrame :: setAutomaticFormsPanel( wxContour_AutomaticFormsToolsPanel * theAutoFormsPanel )
+// {
+// _autoFormsPanel = theAutoFormsPanel;
+// }
- void wxContourMainFrame :: setStandardToolsPanel( wxContour_StandardToolsPanel * theStandardToolsPanel )
- {
- _standardToolsPanel= theStandardToolsPanel;
- }
+// void wxContourMainFrame :: setStandardToolsPanel( wxContour_StandardToolsPanel * theStandardToolsPanel )
+// {
+// _standardToolsPanel= theStandardToolsPanel;
+// }
- void wxContourMainFrame :: setEditionToolsPanel( wxContour_EdtionToolsPanel * theEditionToolsPanel )
- {
- _editionToolsPanel = theEditionToolsPanel;
- }
+// void wxContourMainFrame :: setEditionToolsPanel( wxContour_EdtionToolsPanel * theEditionToolsPanel )
+// {
+// _editionToolsPanel = theEditionToolsPanel;
+// }
- void wxContourMainFrame :: setListViewPanel( wxContour_ListViewPanel * theListViewPanel )
- {
- _listViewPanel = theListViewPanel;
- }
+// void wxContourMainFrame :: setListViewPanel( wxContour_ListViewPanel * theListViewPanel )
+// {
+// _listViewPanel = theListViewPanel;
+// }
//JCP 20-10-08 Undo redo implementation
createContour( 3 );
}
+
+void wxContourMainFrame::onCreateContourLine( ){
+ //JCP 20-10-08 Undo redo implementation
+ saveState();
+ //JCP 20-10-08 Undo redo implementation
+ createContour( 6 );
+}
+
//------------------------------------------------------------------------------------------------------------
void wxContourMainFrame :: onCreateContourBullEye(wxPanel* panel )
}
void wxContourMainFrame :: deleteContour( std::string theKeyName ){
- /*manualContourModel * cModel;
+ /*
+ manualContourModel * cModel;
manualViewBaseContour * cViewer;
manualContourBaseControler * cControler;
vtkImageData* img = kernelManager->getImageAtInstant(inst);
if(img!=NULL){
_theViewPanel->changeImage(img);
+ showAxis(false);
}else{
int z = _instantPanel->getConceptDataOf("Axe Depth")->getActualValue();
_theViewPanel->setImageSlice(z);
_performingOperation->setStartOperationInstantVector( tempVector );
_performingOperation->setKeyNamesOperationElems( currentSelection );
}
+
void wxContourMainFrame::onPaste(){
}
}
-void wxContourMainFrame :: createCopyContourOf ( std::string anExistingKName, std::vector<int> &instantNoTouchData, bool append ){
+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();
_theViewPanel->getSceneManager()->createCopyContourOf( anExistingKName, cloneName, manualModel , append );
}
+///AD: 03-09 Copy the object and apply the given transformation
+void wxContourMainFrame :: createMirrorContourOf ( std::string anExistingKName, std::vector<int> &instantNoTouchData, bool append )
+{
+ std::string cloneName = kernelManager->createCopyContourOf( anExistingKName, instantNoTouchData );
+ manualContourModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);
+
+ manualPoint * refPoint1 = _refLineModel->GetManualPoint(0);
+ manualPoint * refPoint2 = _refLineModel->GetManualPoint(1);
+
+ double pnt1X = refPoint1->GetX();
+ double pnt1Y = refPoint1->GetY();
+// double pnt1Z = refPoint1->GetZ();
+ double pnt2X = refPoint2->GetX();
+ double pnt2Y = refPoint2->GetY();
+// double pnt2Z = refPoint2->GetZ();
+
+ double angle = (atan2(pnt2Y - pnt1Y, pnt2X - pnt1X) * 180 / 3.1415926535897932384626433832795)+90;
+ vtkTransform *t = vtkTransform::New();
+
+ t->PostMultiply();
+ t->Identity();
+ t->Translate(-pnt1X, -pnt1Y, 0);
+ t->RotateZ(-angle);
+ t->Scale(-1,1,1);
+ t->RotateZ(angle);
+ t->Translate(pnt1X, pnt1Y, 0);
+ t->Update();
+
+ int i,size=manualModel->GetSizeLstPoints();
+ for (i=0;i<size;i++)
+ {
+ manualPoint * mp = manualModel->GetManualPoint(i);
+ float vecIn[3];
+ float vecOut[3];
+ vecIn[0]=mp->GetX();
+ vecIn[1]=mp->GetY();
+ vecIn[2]=mp->GetZ();
+ t->TransformPoint( vecIn, vecOut );
+ mp->SetPointX( vecOut[0] );
+ mp->SetPointY( vecOut[1] );
+ mp->SetPointZ( vecOut[2] );
+ }
+
+ _theViewPanel->getSceneManager()->createCopyContourOf( anExistingKName, cloneName, manualModel , append );
+}
+
void wxContourMainFrame ::loadState(std::string filename){
char tmp[255];
FILE *pFile=fopen(filename.c_str(),"r+");
if (dialog.ShowModal() == wxID_OK)
{
std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
+ kernelManager->setCurrentFileName(fileNameContourROI);
saveFileWithContours( fileNameContourROI );
}
}
return _theViewPanel->getImageData();
}
+void wxContourMainFrame::onSegmentationOneSliceITK(wxString distance, wxString sigma, wxString alfa, wxString beta, wxString propagation, wxString iterations, wxString inflation)
+{
+ //JCP 20-10-08 Undo redo implementation
+ saveState();
+ //JCP 20-10-08 Undo redo implementation
+
+ wxBusyCursor wait;
+ int x = _theViewPanel->GetX();
+ int y = _theViewPanel->GetY();
+ int z = _theViewPanel->GetZ();
+ SegmentationOneSliceITK( x,y,z,distance, sigma, alfa, beta, propagation, iterations, inflation);
+ 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;
+
+ //Tipo de pixeles de salida 2
+ typedef unsigned short OutputPixelType2;
+ typedef itk::Image< OutputPixelType2, Dimension > OutputImageType2;
+
+ //Definición del thresholder
+ typedef itk::BinaryThresholdImageFilter<
+ InternalImageType,
+ OutputImageType > ThresholdingFilterType;
+
+ //Definición del primer filtro de conversión de pixeles
+ typedef itk::CastImageFilter<
+ OutputImageType, OutputImageType2 > CastFilterType;
+
+ //Definición del segundo tipo de conversión de pixeles
+ typedef itk::CastImageFilter<
+ OutputImageType2, InternalImageType > CastFilterType2;
+
+ //Tercer tipo de conversión
+ typedef itk::RescaleIntensityImageFilter<
+ InternalImageType,
+ OutputImageType > CastFilterType3;
+
+ //Cuarto tipo de conversión
+ typedef itk::RescaleIntensityImageFilter<
+ OutputImageType,
+ OutputImageType > CastFilterType4;
+
+ ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();
+
+ thresholder->SetLowerThreshold( 0.0 );
+ thresholder->SetUpperThreshold( 128 );
+
+ thresholder->SetOutsideValue( 255 );
+ thresholder->SetInsideValue( 0 );
+
+ //Definción de conexiónes entre VTK e ITK y el writer
+ typedef itk::VTKImageToImageFilter<OutputImageType2> ConnectorType;
+ typedef itk::ImageToVTKImageFilter<OutputImageType> ConnectorType2;
+ typedef itk::ImageFileWriter< OutputImageType > WriterType;
+
+ ConnectorType::Pointer connector= ConnectorType::New();
+ ConnectorType2::Pointer connector2= ConnectorType2::New();
+
+
+ CastFilterType::Pointer filter=CastFilterType::New();
+ CastFilterType2::Pointer filter2=CastFilterType2::New();
+
+ connector->SetInput( imagedata );
+ filter2->SetInput(connector->GetOutput());
+
+ typedef itk::CurvatureAnisotropicDiffusionImageFilter<
+ InternalImageType,
+ InternalImageType > SmoothingFilterType;
+
+ SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();
+
+ typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<
+ InternalImageType,
+ InternalImageType > GradientFilterType;
+
+ typedef itk::SigmoidImageFilter<
+ InternalImageType,
+ InternalImageType > SigmoidFilterType;
+
+ GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New();
+
+ SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
+
+ sigmoid->SetOutputMinimum( 0.0 );
+ sigmoid->SetOutputMaximum( 255.0 );
+
+
+ typedef itk::FastMarchingImageFilter<
+ InternalImageType,
+ InternalImageType > FastMarchingFilterType;
+
+
+ FastMarchingFilterType::Pointer fastMarching = FastMarchingFilterType::New();
+
+ typedef itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType,
+ InternalImageType > GeodesicActiveContourFilterType;
+ GeodesicActiveContourFilterType::Pointer geodesicActiveContour =
+ GeodesicActiveContourFilterType::New();
+
+ typedef itk::ZeroCrossingImageFilter<
+ InternalImageType,
+ InternalImageType > ZeroCrossingFilterType;
+ZeroCrossingFilterType::Pointer zeroCrossing =
+ ZeroCrossingFilterType::New();
+
+const double propagationScaling = atof( prop );
+
+ geodesicActiveContour->SetPropagationScaling( propagationScaling );
+ geodesicActiveContour->SetCurvatureScaling( 1.0 );
+ geodesicActiveContour->SetAdvectionScaling( 1.0 );
+
+ geodesicActiveContour->SetMaximumRMSError( 0.02 );
+ int it=atoi( iter );
+ geodesicActiveContour->SetNumberOfIterations( it );
+
+ smoothing->SetInput( filter2->GetOutput() );
+ gradientMagnitude->SetInput( smoothing->GetOutput() );
+ sigmoid->SetInput( gradientMagnitude->GetOutput() );
+ fastMarching->SetInput( sigmoid->GetOutput() );
+ geodesicActiveContour->SetInput( fastMarching->GetOutput() );
+ geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() );
+
+ zeroCrossing->SetInput( geodesicActiveContour->GetOutput() );
+ //thresholder->SetInput( zeroCrossing->GetOutput() );
+ thresholder->SetInput( geodesicActiveContour->GetOutput() );
+ connector2->SetInput( thresholder->GetOutput() );
+
+
+ smoothing->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 );
+
+ sigmoid->SetAlpha( alpha );
+ sigmoid->SetBeta( beta );
+
+ typedef FastMarchingFilterType::NodeContainer NodeContainer;
+ typedef FastMarchingFilterType::NodeType NodeType;
+
+ NodeContainer::Pointer seeds = NodeContainer::New();
+
+ InternalImageType::IndexType seedPosition;
+ seedPosition[0] = x;
+ seedPosition[1] = y;
+
+ const double initialDistance = atof( distanc );
+
+ NodeType node;
+
+ const double seedValue = - initialDistance;
+
+ node.SetValue( seedValue );
+ node.SetIndex( seedPosition );
+
+ seeds->Initialize();
+ seeds->InsertElement( 0, node );
+
+ fastMarching->SetTrialPoints( seeds );
+
+ fastMarching->SetSpeedConstant( 1.0 );
+
+ fastMarching->SetOutputSize(
+ connector->GetOutput()->GetBufferedRegion().GetSize() );
+
+ fastMarching->SetStoppingValue( 800 );
+ try
+ {
+
+ connector2->Update();
+ vtkImageData *idata = connector2->GetOutput();
+
+ vtkMarchingContourFilter* cntVTK = vtkMarchingContourFilter::New( );
+
+ cntVTK->SetInput( idata );
+
+ cntVTK->SetNumberOfContours( 1 );
+ cntVTK->SetValue( 0, 255 );
+ cntVTK->Update( );
+ cntVTK->UpdateInformation();
+
+ vtkCleanPolyData* cpd = vtkCleanPolyData::New( );
+ cpd->SetInput( cntVTK->GetOutput( ) );
+ cpd->Update( );
+ cpd->UpdateInformation();
+
+ vtkPolyDataConnectivityFilter* conn = vtkPolyDataConnectivityFilter::New( );
+ conn->SetExtractionModeToLargestRegion( );
+ conn->SetInput( cpd->GetOutput( ) );
+ conn->Update( );
+ conn->UpdateInformation();
+
+ vtkStripper* vtkstripper = vtkStripper::New( );
+ vtkstripper->SetInput( conn->GetOutput() );
+ vtkstripper->Update();
+ vtkstripper->UpdateInformation();
+
+
+ vtkPolyData* polyDataResult = cntVTK->GetOutput();
+ 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();*/
+
+ cntVTK -> Delete();
+ cpd -> Delete();
+ conn -> Delete();
+
+
+//--Calculating control points
+
+ std::vector<double> vecX;
+ std::vector<double> vecY;
+ std::vector<double> vecXo;
+ std::vector<double> vecYo;
+ std::vector<double>::iterator vecXoi;
+ std::vector<double>::iterator vecYoi;
+ std::vector<double> vecZ;
+
+ std::vector<double> vecCtrlPointX;
+ std::vector<double> vecCtrlPointY;
+ std::vector<double> vecCtrlPointZ;
+
+
+ double *p;
+ double xAct=0;
+ double yAct=0;
+ int ii,size=polyDataResult->GetNumberOfPoints();
+ofstream myfile;
+myfile.open ("C:/Creatis/example2.txt");
+
+ size=polyDataResult->GetNumberOfPoints();
+ for (ii=0;ii<size;ii++)
+ {
+ if(ii==0)
+ {
+ xAct=x;
+ yAct=y;
+ }
+ p = polyDataResult->GetPoint(ii);
+ double x=p[0];
+ double y=p[1];
+ /*if(fabs(yAct-y)>20)
+ {
+ if((xAct-x)>1 || (xAct-x)<-1)
+ {
+ vecX.push_back( p[0] );
+ vecY.push_back( p[1] );
+ 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;
+ vecZ.push_back( -900 );
+ xAct=x;
+ yAct=y;
+ }
+ else
+ {
+ vecXo.push_back(p[0]);
+ vecYo.push_back(p[1]);
+ }
+
+ }
+ else*/ if(fabs(xAct-x)>11)
+ {
+ vecXo.push_back(p[0]);
+ vecYo.push_back(p[1]);
+ }
+ else
+ {
+ 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;
+ vecY.push_back( p[1] );
+ vecZ.push_back( -900 );
+ xAct=x;
+ yAct=y;
+ }
+
+
+ }
+
+ while(!vecXo.empty())
+ {
+ vecX.push_back(vecXo.back());
+ std::cout<<" x Siguiente "<<vecXo.back();
+ vecXo.pop_back();
+ vecZ.push_back( -900 );
+ }
+ while(!vecYo.empty())
+ {
+ vecY.push_back(vecYo.back());
+ vecYo.pop_back();
+ }
+ myfile.close();
+
+ /*for(int l=0;l<vecX.size();l++)
+ {
+ if(l==0)
+ {
+ vecXo.push_back(p[0]);
+ vecYo.push_back(p[1]);
+ }
+ else
+ {
+ if(vecXoi[l-1]==)
+ {
+ }
+ }
+
+ }*/
+
+ ExtractControlPoints2D *extractcontrolpoints2d = new ExtractControlPoints2D();
+
+ extractcontrolpoints2d->SetContour( &vecX , &vecY , &vecZ );
+
+int method=2;
+ if (method==0){
+ extractcontrolpoints2d->GetInitialControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
+ }
+ else if (method==1){
+ extractcontrolpoints2d->GetControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
+ }
+ else if (method==2){
+ extractcontrolpoints2d->SetSamplingControlPoints( 15 );
+ extractcontrolpoints2d->GetSamplingControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
+ }
+ //--Adding contour to the system
+
+ std::vector<int> actualInstantVector;
+ _instantPanel->getInstant( actualInstantVector );
+ actualInstantVector[1]=z;
+
+ int j,sizeCtrPt = vecCtrlPointX.size();
+
+ manualContourModel *manModelContour = kernelManager->factoryManualContourModel( typeofcontour );
+ manModelContour->SetNumberOfPointsSpline( ((sizeCtrPt/100)+1)*100 );
+ if (sizeCtrPt>=3){
+ for (j=0 ; j<sizeCtrPt ; j++)
+ {
+ manModelContour->AddPoint( vecCtrlPointX[j] , vecCtrlPointY[j] , vecCtrlPointZ[j] );
+ } // for
+ std::string theName;
+ //theName = _modelManager->createOutline( manModelContour, actualInstantVector );
+ theName = kernelManager->createOutline( manModelContour, actualInstantVector );
+ 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->configureViewControlTo(theName, manModelContour, spc, typeofcontour);
+ //_theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc, typeofcontour ) ;
+ } // if addedModel
+ } // if sizeCtrPt
+
+
+
+ WriterType::Pointer writer = WriterType::New();
+ CastFilterType3::Pointer caster = CastFilterType3::New();
+
+ caster->SetInput( gradientMagnitude->GetOutput() );
+ writer->SetInput( caster->GetOutput() );
+ writer->SetFileName("Gradient Magnitude.png");
+ caster->SetOutputMinimum( 0 );
+ caster->SetOutputMaximum( 255 );
+ writer->Update();
+
+ CastFilterType3::Pointer caster2 = CastFilterType3::New();
+ WriterType::Pointer writer2 = WriterType::New();
+
+ caster2->SetInput( sigmoid->GetOutput() );
+ writer2->SetInput( caster2->GetOutput() );
+ writer2->SetFileName("Sigmoid.png");
+ caster2->SetOutputMinimum( 0 );
+ caster2->SetOutputMaximum( 255 );
+ writer2->Update();
+
+ CastFilterType3::Pointer caster3 = CastFilterType3::New();
+ WriterType::Pointer writer3 = WriterType::New();
+
+ caster3->SetInput( fastMarching->GetOutput() );
+ writer3->SetInput( caster3->GetOutput() );
+ writer3->SetFileName("FastMarching.bmp");
+ caster3->SetOutputMinimum( 0 );
+ caster3->SetOutputMaximum( 255 );
+ writer3->Update();
+
+ CastFilterType3::Pointer caster4 = CastFilterType3::New();
+ WriterType::Pointer writer4 = WriterType::New();
+
+ caster4->SetInput( geodesicActiveContour->GetOutput() );
+ writer4->SetInput( caster4->GetOutput() );
+ writer4->SetFileName("GeodesicActiveContour.png");
+ caster4->SetOutputMinimum( 0 );
+ caster4->SetOutputMaximum( 255 );
+ writer4->Update();
+
+ CastFilterType3::Pointer caster5 = CastFilterType3::New();
+ WriterType::Pointer writer5 = WriterType::New();
+
+ caster5->SetInput( zeroCrossing->GetOutput() );
+ writer5->SetInput( caster5->GetOutput() );
+ writer5->SetFileName("ZeroCrossing.bmp");
+ caster5->SetOutputMinimum( 0 );
+ caster5->SetOutputMaximum( 255 );
+ writer5->Update();
+ }
+ catch( itk::ExceptionObject & excep )
+ {
+ std::cerr << "Exception caught !" << std::endl;
+ std::cerr << excep << std::endl;
+ }
+}
+
void wxContourMainFrame::onSegmentationOneSlice(int isovalue,int sampling,int method){
//JCP 20-10-08 Undo redo implementation
RefreshInterface();
}
+
void wxContourMainFrame::SegmentationOneSlice( int x, int y, int z, int isovalue, int sampling, int method )
{
int typeofcontour = 1;
{
id = polyDataResult->GetLines()->GetData()->GetValue(ii);
p = polyDataResult->GetPoint(id);
- double x=p[0];
- double y=p[1];
+// double x=p[0];
+// double y=p[1];
vecX.push_back( p[0] );
vecY.push_back( p[1] );
vecZ.push_back( -900 );
RefreshInterface();
}
+
+//Creates a reference line to be used as the axis of the mirroring
+void wxContourMainFrame::referenceLine()
+{
+ wxBusyCursor wait;
+ double spc[3];
+
+ vtkImageData *vtkimagedata = _theViewPanel->getImageData();
+ vtkimagedata->GetSpacing(spc);
+
+ wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView();
+
+ _refLineControl = new manualLineControler();
+ _refLineModel = new manualContourModelLine();
+ _refLineView = new manualViewLine();
+ _refLineView->SetModel( _refLineModel );
+ _refLineView->SetWxVtkBaseView( viewer2D );
+ _refLineView->SetRange( 2 );
+ _refLineView->SetZ( 1200 );
+
+ _refLineView->SetSpacing(spc);
+
+ _refLineView->SetColorNormalContour(0, 0, 1);
+ _refLineView->SetColorEditContour(0, 0.5, 0.5);
+ _refLineView->SetWidthLine(4);
+
+ _refLineControl->SetModelView( _refLineModel , _refLineView );
+ viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
+ _refLineModel->SetCloseContour(false);
+ _refLineControl->CreateNewManualContour();
+
+ double z = _refLineControl->GetZ();
+/*
+ _refLineControl->AddPoint(50,100,z);
+ _refLineControl->AddPoint(80,40,z);
+ _refLineControl->SetCompleteCreation(true);
+
+ _refLineModel->AddPoint(50,100,z);
+ _refLineModel->AddPoint(80,40,z);
+ _refLineModel->UpdateSpline();
+
+ _refLineView->UpdateViewPoint(0);
+ _refLineView->UpdateViewPoint(1);
+*/
+
+ _refLineControl->SetActive(true);
+ _refLineView->RefreshContour();
+}
+
+//Hides the referenceLine
+void wxContourMainFrame::refLineHide()
+{
+ if (_refLineControl!=NULL)
+ {
+ _refLineView->RemoveCompleteContourActor();
+ _refLineControl->SetEditable(false);
+ _refLineControl->SetActive(false);
+ }
+}
+
+//Shows the referenceLine
+void wxContourMainFrame::refLineShow()
+{
+ if (_refLineControl!=NULL)
+ {
+ wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView();
+
+ _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();
+ }
+}
+
+void wxContourMainFrame::onMirror()
+{
+ //AD:02-09
+ std::vector<std::string> currentSelection = _theViewPanel->getSelectedObjects();
+ std::vector<std::string> filterCurrentSelection;
+
+ std::vector<int> tempVector;
+ _instantPanel->getInstant( tempVector );
+ _performingOperation->reset();
+ _performingOperation->setStartCommand( COPY );
+ _performingOperation->setStartOperationInstantVector( tempVector );
+ _performingOperation->setKeyNamesOperationElems( currentSelection );
+
+ char theStartCommand = _performingOperation->getStartCommand();
+ if ( theStartCommand == COPY )
+ {
+ //JCP 20-10-08 Undo redo implementation
+ saveState();
+ //JCP 20-10-08 Undo redo implementation
+ std::vector<int> tempVector;
+ _instantPanel->getInstant( tempVector );
+ _performingOperation->setEndOperationInstantVector ( tempVector );
+ std::vector<std::string> elems = _performingOperation->getKeyNamesOperationElems();
+ int i,size = elems.size();
+ for( i=0; i<size; i++ )
+ {
+ createMirrorContourOf( elems[i], tempVector, i>0 );
+ }
+ }
+
+ //deleteContour( _refName );
+ //_refName = "";
+}
+
void wxContourMainFrame::showAxis(bool show){
_theViewPanel->SetVisibleAxis(show);
_theViewPanel->Refresh();
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,tmpString.c_str() );
+ fprintf(pFile,"-- \t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle );
}
fprintf(pFile,"\n" );
temp = temp + kernelManager->intToString(z) + "-cont" + kernelManager->intToString(iContourGroup);
temp = temp + ".txt";
- wxString filename;
+ // LG 14/01/09 : using crea
+ wxString filename = crea::std2wx(temp);
/*filename.Printf(_T("%s"),directory.c_str());
filename.append(_T("\\"));
filename.append(_T("%s"),namefile.c_str());
filename.append(_T("-cont"));
filename.append(_T("%d"),iContourGroup);
filename.append(_T(".txt"));*/
- filename.Printf(temp.c_str());
+ // filename.Printf(temp.c_str());
+
+
+
FILE *pFile=fopen((const char *)filename.mb_str(),"w+");
fprintf(pFile,"value \t x \t y \t z\n" );
int iLstValue,sizeLstValue=pLstValue.size();
std::string temp = directory + "/" + namefile + "-Value.mhd";
- wxString filename;
- filename.Printf(_T(temp.c_str()));
+ wxString filename = crea::std2wx(temp);
+ // LG
+ // filename.Printf(_T(temp.c_str()));
//filename.Printf(_T("%s\\%s-Value.mhd",directory.c_str(),namefile.c_str(),z);
/*filename.Printf(_T("%s"),directory.c_str());
filename.append(_T("\\"));
// filename.Printf("%s\\%s-Mask.mhd",directory.c_str(),namefile.c_str(),z);
temp = directory + "/" + namefile + "-Mask.mhd";
- filename.Printf(_T(temp.c_str()));
+ // LG 14/01/09 : using crea
+ filename = crea::std2wx(temp);
+ // filename.Printf(_T(temp.c_str()));
/*filename.Printf(_T("%s"),directory.c_str());
filename.append(_T("\\"));
wxDialog* dialog = new wxDialog(this, -1, wxString(_T("Snake")));
wxPanel* panel = new wxPanel(dialog,-1);
- wxStaticText* sttext = new wxStaticText(panel, -1, wxString(_T("Panel para snake")));
+ // wxStaticText* sttext = new wxStaticText(panel, -1, wxString(_T("Panel para snake")));
+ new wxStaticText(panel, -1, wxString(_T("Panel para snake")));
dialog->ShowModal();
} // if
}
+
+void wxContourMainFrame::saveFileWithContoursAutomatique(){
+ std::string filename = kernelManager->getCurrentFileName();
+ if(filename.compare("")!=0){
+ saveFileWithContours(filename);
+ }else{
+ onSave();
+ }
+}
\ No newline at end of file