X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bbtk%2Fsrc%2FbbmaracasvisuShowNPoints.cxx;h=e57135756ccf3dd2da59a388773d3f8ff9d004e1;hb=2a1cde86bf45b8f9b11514a9b04d5834b10af209;hp=8f434b06db9d059a434f4e1b5dca63f9cd0b225f;hpb=262993876bc653f4da132e6531bec2b5ab951faa;p=creaMaracasVisu.git diff --git a/bbtk/src/bbmaracasvisuShowNPoints.cxx b/bbtk/src/bbmaracasvisuShowNPoints.cxx index 8f434b0..e571357 100644 --- a/bbtk/src/bbmaracasvisuShowNPoints.cxx +++ b/bbtk/src/bbmaracasvisuShowNPoints.cxx @@ -1,587 +1,147 @@ +/*# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sant�) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ */ + #include "bbmaracasvisuShowNPoints.h" #include "bbcreaMaracasVisuPackage.h" -#include "vtkProperty.h" -#include "vtkSphereSource.h" -#include "vtkPolyDataMapper.h" -#include "vtkRenderWindow.h" -#include "vtkTextActor3D.h" namespace bbcreaMaracasVisu { -//---------------------------------------------------------------------- - WidgetShowNPoints::WidgetShowNPoints(wxWindow *parent, bbcreaMaracasVisu::ShowNPoints *box) - : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) - { - mbbShowNPoints = box; - this->renderer = NULL; - wxPanel *panel = this; - wxSizer *sizer = NULL; - - // Widget interface - askPointLabel = new wxStaticText(panel, -1, _T("Point label :")); // JPR - textCtrl = new wxTextCtrl(panel, -1); - wxButton *btnAddPoint = new wxButton( panel, -1, _T("Add Point")); - wxButton *btnSetPositionPoint = new wxButton( panel, -1, _T("Set nearest point")); - wxButton *btnRenamePoint = new wxButton( panel, -1, _T("Rename point")); - wxButton *btnEraseLastPoint = new wxButton( panel, -1, _T("Erase Last point")); - wxButton *btnErasePoint = new wxButton( panel, -1, _T("Erase point")); - wxButton *btnDeleteAllPoints = new wxButton( panel, -1, _T("Delete all points")); - wxButton *btnSavePoints = new wxButton( panel, -1, _T("Save points")); - wxButton *btnLoadPoints = new wxButton( panel, -1, _T("Load points")); - txtNrPoints = new wxStaticText(panel,-1, _T(" ")); - - //NTU: Sliders for opacity and radio change - - wxStaticText* txOpacity = new wxStaticText(this, -1, wxString(_T(" Points Opacity "))); - sdrOpacity = new wxSlider(this, -1, 0, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_LABELS); - - wxStaticText* txRadio = new wxStaticText(this, -1, wxString(_T(" Points Radio "))); - sdrRadio = new wxSlider(this, -1, 0, 1, 50, wxDefaultPosition, wxDefaultSize, wxSL_LABELS); - - wxFlexGridSizer *sizer1 = new wxFlexGridSizer(1); -// sizer1->Add(new wxStaticText(panel,-1,_T(" "))); - - Connect(btnAddPoint->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnAddPoint); - Connect(btnSetPositionPoint->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnSetPoint); - Connect(btnRenamePoint->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnRenamePoint); - Connect(btnEraseLastPoint->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnEraseLastPoint); - Connect(btnErasePoint->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnErasePoint); - Connect(btnDeleteAllPoints->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnDeleteAllPoints); - Connect(btnSavePoints->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnSavePoints); - Connect(btnLoadPoints->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnLoadPoints); - - //NTU: Slider events - Connect(sdrOpacity->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints); - Connect(sdrRadio->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints); - - sizer1->Add(askPointLabel); // JPR - sizer1->Add(textCtrl); - sizer1->Add(btnAddPoint); - sizer1->Add(btnSetPositionPoint); - sizer1->Add(btnRenamePoint); - sizer1->Add(btnErasePoint); - sizer1->Add(btnEraseLastPoint); - sizer1->Add(btnDeleteAllPoints); - sizer1->Add(txtNrPoints); - sizer1->Add(txOpacity); - sizer1->Add(sdrOpacity,1,wxGROW ); - sizer1->Add(txRadio); - sizer1->Add(sdrRadio,1,wxGROW ); - sizer1->Add(btnSavePoints); - sizer1->Add(btnLoadPoints); - - sizer = sizer1; - panel ->SetSizer(sizer); - panel ->SetAutoLayout(true); - panel ->Layout(); -} //------------------------------------------------------------------------ -WidgetShowNPoints::~WidgetShowNPoints() -{ -} - -void WidgetShowNPoints::SetRadio(double radio) -{ - this->mradio=radio; - //NTU: For Slider - sdrRadio->SetValue(this->mradio); -} - //------------------------------------------------------------------------ -std::vector WidgetShowNPoints::GetLstPointsX() -{ - return lstPointsX; -} - //------------------------------------------------------------------------ -std::vector WidgetShowNPoints::GetLstPointsY() -{ - return lstPointsY; -} - //------------------------------------------------------------------------ -std::vector WidgetShowNPoints::GetLstPointsZ() +WidgetShowNPointsBox::WidgetShowNPointsBox(wxWindow *parent, bbcreaMaracasVisu::ShowNPoints *box, int type) + : WidgetShowNPoints( parent, type) { - return lstPointsZ; + mbbShowNPoints=box; } //------------------------------------------------------------------------ - std::vector WidgetShowNPoints::GetLstLabels() +WidgetShowNPointsBox::~WidgetShowNPointsBox() { - return lstLabels; } -//------------------------------------------------------------------------ -void WidgetShowNPoints::SetPoint(std::vector ppoint) -{ - mpoint = ppoint; -} //------------------------------------------------------------------------ -void WidgetShowNPoints::SetColour(std::vector colour) +void WidgetShowNPointsBox::UpdatePoints(wxCommandEvent &event) { - this->mcolour = colour; + WidgetShowNPoints::UpdatePoints(event); + //Difference in Radio for text placement +// double radio=GetModelShowNPoints()->GetRadio(); +// this->mopacity = sdrOpacity->GetValue()/100.0; +// GetModelShowNPoints()->SetRadio( sdrRadio->GetValue() ) ; +// radio = sdrRadio->GetValue(); + //NTU refresh the inputs + mbbShowNPoints->bbSetInputOpacity( GetOpacity() ); + mbbShowNPoints->bbSetInputRadio( GetRadio() ); + // EED +// RefreshPoints(); } -//------------------------------------------------------------------------ -void WidgetShowNPoints::SetOpacity(double opacity) -{ - this->mopacity=opacity; - //NTU: For Slider - sdrOpacity->SetValue(this->mopacity/100.0); -} //------------------------------------------------------------------------ -void WidgetShowNPoints::SetImage(vtkImageData *image) +void WidgetShowNPointsBox::SetOutputBox() { - this->mimage=image; -} + WidgetShowNPoints::SetOutputBox(); -//------------------------------------------------------------------------ -void WidgetShowNPoints::SetRenderer(vtkRenderer *renderer) -{ - this->renderer = renderer; -} +// wxString strTmp; +// strTmp.Printf(_T("Nbr of points: %d"), GetModelShowNPoints()->GetLstPointsSize() ); +// txtNrPoints->SetLabel( strTmp ); -//------------------------------------------------------------------------ - -std::string WidgetShowNPoints::CleanSpaces(std::string ss) -{ - int i; - while( (i=ss.find(32))>=0 ) - { - ss.replace(i,1,"_"); - } - return ss; + //--BBTK + mbbShowNPoints->bbSetOutputlstPointsX( GetModelShowNPoints()->GetLstPointsX() ); + mbbShowNPoints->bbSetOutputlstPointsY( GetModelShowNPoints()->GetLstPointsY() ); + mbbShowNPoints->bbSetOutputlstPointsZ( GetModelShowNPoints()->GetLstPointsZ() ); + mbbShowNPoints->bbSetOutputlstLabels( GetModelShowNPoints()->GetLstLabels() ); + mbbShowNPoints->bbSignalOutputModification(); } - -//------------------------------------------------------------------------ - -void WidgetShowNPoints::RefreshPoint(int id) -{ - int x = lstPointsX[id]; - int y = lstPointsY[id]; - int z = lstPointsZ[id]; - - double spc[3]; - mimage->GetSpacing(spc); - - lstActorsSphere[id]->SetPosition( spc[0]*x , spc[1]*y , spc[2]*z ); - lstActorsSphere[id]->GetProperty()->SetColor( mcolour[0] , mcolour[1] , mcolour[2] ); - lstActorsSphere[id]->GetProperty()->SetOpacity( mopacity ); - - lstActorsText[id]->SetPosition( mradio+spc[0]*x , spc[1]*y , spc[2]*z ); -} - - -//------------------------------------------------------------------------ -void WidgetShowNPoints::AddPoint(int x, int y, int z, std::string label) -{ - lstPointsX.push_back( x ); - lstPointsY.push_back( y ); - lstPointsZ.push_back( z ); - - std::string strLabel = CleanSpaces( label ); - - lstLabels.push_back( strLabel ); - - // Sphere - vtkSphereSource *vtksphere = vtkSphereSource::New(); - vtksphere->SetThetaResolution (20); - vtksphere->SetPhiResolution (20); - vtksphere->SetRadius( mradio ); - //NTU: For updating points - - lstSourceSphere.push_back(vtksphere); - - vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New(); - sphereMapper->SetInput( vtksphere->GetOutput() ); - vtkActor *sphereActor = vtkActor::New(); - sphereActor->SetMapper(sphereMapper); - sphereActor->SetOrigin(0, 0, 0); - - -/*EED Borrame - double spc[3]; - if(mimage==NULL){ - wxMessageDialog dialog(this, _T("Image Not Set"),_T("Image Not Set"),wxICON_ERROR); - dialog.ShowModal(); - return; - } - mimage->GetSpacing(spc); - sphereActor->SetPosition( spc[0]*x , spc[1]*y , spc[2]*z ); - sphereActor->GetProperty()->SetColor( mcolour[0] , mcolour[1] , mcolour[2] ); - sphereActor->GetProperty()->SetOpacity( mopacity ); -*/ - - lstActorsSphere.push_back(sphereActor); - if(renderer==NULL){ - wxMessageDialog dialog(this, _T("Renderer Not Set"),_T("Renderer Not Set"),wxICON_ERROR); - dialog.ShowModal(); - return; - } - renderer->AddActor( sphereActor ); - - // Actor - vtkTextActor3D *textActor = vtkTextActor3D::New(); -/* EED Borrame - textActor->SetPosition( mradio+spc[0]*x , spc[1]*y , spc[2]*z ); -*/ - textActor->SetInput( strLabel.c_str() ); - renderer->AddActor( textActor ); - lstActorsText.push_back(textActor); - - RefreshPoint(lstPointsX.size()-1); - - - SetOutputBox(); -} //------------------------------------------------------------------------ -void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event) -{ - if(mimage==NULL){ - wxMessageDialog dialog(this, _T("Image Not Set"),_T("Image Not Set"),wxICON_ERROR); - dialog.ShowModal(); - return; - } - - if (this->renderer!=NULL){ - if (mpoint.size()==3){ - AddPoint(mpoint[0],mpoint[1],mpoint[2], (const char*) ( textCtrl->GetValue().mb_str() ) ); - } else {//mpoint.size - printf("creaMaracasVisu::ShowNPoints (not match point) \n"); - } - } // renderer -} - //------------------------------------------------------------------------ - void WidgetShowNPoints::SetOutputBox() - { - renderer->GetRenderWindow()->Render(); - wxString strTmp; - strTmp.Printf(_T("Nbr of points: %d"), (int)(lstPointsX.size()) ); - txtNrPoints->SetLabel( strTmp ); - - //--BBTK - mbbShowNPoints->bbSetOutputlstPointsX( lstPointsX ); - mbbShowNPoints->bbSetOutputlstPointsY( lstPointsY ); - mbbShowNPoints->bbSetOutputlstPointsZ( lstPointsZ ); - mbbShowNPoints->bbSetOutputlstLabels( lstLabels ); - mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsX")); - mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsY")); - mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsZ")); - mbbShowNPoints->bbSignalOutputModification(std::string("lstLabels")); - } - //------------------------------------------------------------------------ - void WidgetShowNPoints::OnSavePoints(wxCommandEvent& event) - { - wxFileDialog* FD = new wxFileDialog( 0, - _T("Save points .."), - _T(""), - _T(""), - _T("(*.xls)|*.xls"), - wxSAVE | wxOVERWRITE_PROMPT, - wxDefaultPosition); - //EED - - int result_FD = FD->ShowModal(); - - // This line is need it by windows //EED - FD->SetReturnCode( result_FD ); - - if (FD->GetReturnCode()==wxID_OK) - { - FILE *ff; - std::string filename= (const char*) ( FD->GetPath().mb_str() ); - ff = fopen( filename.c_str() , "w+" ); - if (ff!=NULL) - { - int i , size = (int) (lstActorsSphere.size()); - fprintf(ff,"NumberOfPoints %d \n",size); - fprintf(ff," X\tY\tZ\tvalue\tLabel\n"); - int x, y, z; - double value; - for (i=0; iGetScalarComponentAsDouble(x,y,z,0); - fprintf(ff,"%d\t%d\t%d\t%f\t%s\n", x , y , z , value , lstLabels[i].c_str()); - } // for - fclose(ff); - } else { // else ff - printf("WidgetShowNPoints::OnSavePoints ...Error... creating file"); - } //ff - } // dialog box - } - //------------------------------------------------------------------------ - void WidgetShowNPoints::OnLoadPoints(wxCommandEvent& event) - { - wxFileDialog* FD = new wxFileDialog( 0, - _T("Load points .."), - _T(""), - _T(""), - _T("(*.xls)|*.xls"), - wxOPEN | wxFILE_MUST_EXIST, - wxDefaultPosition); - //EED - - int result_FD = FD->ShowModal(); - - // This line is need it by windows //EED - FD->SetReturnCode( result_FD ); - - if (FD->GetReturnCode()==wxID_OK) - { - FILE *ff; - std::string filename= (const char*) ( FD->GetPath().mb_str() ); - ff = fopen( filename.c_str() , "r+" ); - if (ff!=NULL) - { - int i,size; - char chartmp[256]; - fscanf(ff," %s %d",chartmp,&size); - fscanf(ff," %s %s %s %s %s",chartmp, chartmp,chartmp,chartmp,chartmp ); - - float value; - int x,y,z; - for (i=0; iShowModal(); - return -1; - }else{ - - for ( i=0 ; i=0) - { - printf("WidgetShowNPoints::OnSetPoint \n"); - lstPointsX[id] = mpoint[0]; - lstPointsY[id] = mpoint[1]; - lstPointsZ[id] = mpoint[2]; - RefreshPoint(id); - /*EED Borrame - this->lstActorsSphere[id]->SetPosition( spc[0]*mpoint[0]+difradio, spc[1]*mpoint[1], spc[2]* mpoint[2] ); - this->lstActorsText[id]->SetPosition( spc[0]*mpoint[0]+difradio, spc[1]*mpoint[1], spc[2]* mpoint[2] ); - */ - } // if id - SetOutputBox(); - } - - - //------------------------------------------------------------------------ - - int WidgetShowNPoints::IdInsidePoint() - { - int id=-1; - int i, size=(int)(lstActorsSphere.size()); - double spc[3]; - - if(mimage ==NULL){ - wxMessageDialog* diag = new wxMessageDialog(this, _T("Image not set"), _T("Image Not Set"), wxICON_ERROR); - diag->ShowModal(); - return -1; - }else{ - - mimage->GetSpacing(spc); - - for ( i=0 ; i=0) - { - std::string strLabel = CleanSpaces( (const char*) ( textCtrl->GetValue().mb_str() ) ); - lstLabels[id] = CleanSpaces( (const char*) (textCtrl->GetValue().mb_str()) ) ; - lstActorsText[id]->SetInput( lstLabels[id].c_str() ); - SetOutputBox(); - } - } - -//------------------------------------------------------------------------ - void WidgetShowNPoints::ErasePoint(int id) - { - if (this->renderer!=NULL){ - if (id>=0){ - renderer->RemoveActor( lstActorsSphere[id] ); - renderer->RemoveActor( lstActorsText[id] ); - lstActorsSphere[id]->Delete(); - lstActorsText[id]->Delete(); - lstSourceSphere[id]->Delete(); - lstActorsSphere.erase( lstActorsSphere.begin()+id ); - lstActorsText.erase( lstActorsText.begin()+id ); - lstSourceSphere.erase( lstSourceSphere.begin()+id ); - lstPointsX.erase( lstPointsX.begin()+id ); - lstPointsY.erase( lstPointsY.begin()+id ); - lstPointsZ.erase( lstPointsZ.begin()+id ); - lstLabels.erase( lstLabels.begin()+id ); - SetOutputBox(); - } // if id - } // if renderer - } - -//------------------------------------------------------------------------ - void WidgetShowNPoints::OnErasePoint(wxCommandEvent& event) - { - ErasePoint( IdInsidePoint() ); - } - -//------------------------------------------------------------------------ - void WidgetShowNPoints::OnEraseLastPoint(wxCommandEvent& event) - { - ErasePoint(lstActorsSphere.size()-1); - } - -//------------------------------------------------------------------------ -void WidgetShowNPoints::OnDeleteAllPoints(wxCommandEvent& event) -{ - int id,size=lstActorsSphere.size(); - for (id=size-1;id>=0;id--) - { - ErasePoint(id); - } -} - -//NTU: Method for updating points opacity and Radio - -//------------------------------------------------------------------------ -void WidgetShowNPoints::UpdatePoints(wxCommandEvent &event) -{ - //Difference in Radio for text placement - int difradio = sdrRadio->GetValue() - this->mradio; - - this->mopacity = sdrOpacity->GetValue()/100.0; - this->mradio = sdrRadio->GetValue(); - - //NTU refresh the inputs - mbbShowNPoints->bbSetInputOpacity(this->mopacity); - mbbShowNPoints->bbSetInputRadio(this->mradio); - - int size = (int) this->lstActorsSphere.size(); - int i; - for(i = 0; i < size; i ++) - { - this->lstSourceSphere[i]->SetRadius(mradio); - this->lstActorsSphere[i]->GetProperty()->SetOpacity(mopacity); - this->lstActorsText[i]->SetPosition(this->lstActorsText[i]->GetPosition()[0]+difradio,this->lstActorsText[i]->GetPosition()[1], this->lstActorsText[i]->GetPosition()[2]); - } - - //NTU: For updating - SetOutputBox(); -} BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,ShowNPoints) BBTK_BLACK_BOX_IMPLEMENTATION(ShowNPoints,bbtk::WxBlackBox); +//----------------------------------------------------------------- void ShowNPoints::Process() { if (mwxwidget!=NULL) { mwxwidget->SetRenderer( bbGetInputRenderer() ); - mwxwidget->SetPoint( bbGetInputIn() ); + mwxwidget->SetReferencePoint( bbGetInputIn() ); mwxwidget->SetImage( bbGetInputImage() ); mwxwidget->SetColour( bbGetInputColour() ); mwxwidget->SetOpacity( bbGetInputOpacity() ); mwxwidget->SetRadio( bbGetInputRadio() ); - bbSetOutputlstPointsX( mwxwidget->GetLstPointsX() ); - bbSetOutputlstPointsY( mwxwidget->GetLstPointsY() ); - bbSetOutputlstPointsZ( mwxwidget->GetLstPointsZ() ); - bbSetOutputlstLabels( mwxwidget->GetLstLabels() ); + if ( mwxwidget->GetModelShowNPoints()->GetFirstTime()==true ) + { + mwxwidget->GetModelShowNPoints()->SetFirstTime(false); + mwxwidget->SetInitLstPoints( bbGetInputInitLstPointsX() , bbGetInputInitLstPointsY() , bbGetInputInitLstPointsZ() , bbGetInputInitLstLabels() ); + } + + bbSetOutputlstPointsX( mwxwidget->GetModelShowNPoints()->GetLstPointsX() ); + bbSetOutputlstPointsY( mwxwidget->GetModelShowNPoints()->GetLstPointsY() ); + bbSetOutputlstPointsZ( mwxwidget->GetModelShowNPoints()->GetLstPointsZ() ); + bbSetOutputlstLabels( mwxwidget->GetModelShowNPoints()->GetLstLabels() ); + bbSetOutputWidgetShowNPoints( (WidgetShowNPoints*)mwxwidget ); } // mwxwidget } +//----------------------------------------------------------------- void ShowNPoints::CreateWidget(wxWindow* parent) { - mwxwidget = new WidgetShowNPoints( parent, this); - bbSetOutputWidget( mwxwidget ); + mwxwidget = new WidgetShowNPointsBox( parent, this, bbGetInputType() ); + bbSetOutputWidget( mwxwidget ); } +//----------------------------------------------------------------- void ShowNPoints::bbUserSetDefaultValues() { mwxwidget = NULL; - - bbSetInputRadio(1); + bbSetInputRadio(10); bbSetInputOpacity(1); - std::vector colour; colour.push_back(1.0); colour.push_back(0.0); colour.push_back(0.0); bbSetInputColour(colour); - bbSetInputImage(NULL); + bbSetInputType(0); bbSetInputRenderer(NULL); + bbSetOutputWidgetShowNPoints(NULL); } //-----------------------------------------------------------------