X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bbtk%2Fsrc%2FbbmaracasvisuShowNPoints.cxx;h=b33daa47a187c337002ca084e8fcf6f5cf680a34;hb=64786ec38c5272e34bff52b0ade41b032d2387ea;hp=ef31b02838e5ad5a7c87e311998641c798337a7b;hpb=0639da4f50de993c0234f26f18ac0528e537017a;p=creaMaracasVisu.git diff --git a/bbtk/src/bbmaracasvisuShowNPoints.cxx b/bbtk/src/bbmaracasvisuShowNPoints.cxx index ef31b02..b33daa4 100644 --- a/bbtk/src/bbmaracasvisuShowNPoints.cxx +++ b/bbtk/src/bbmaracasvisuShowNPoints.cxx @@ -1,3 +1,28 @@ +/*# --------------------------------------------------------------------- +# +# 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" @@ -6,59 +31,145 @@ #include "vtkPolyDataMapper.h" #include "vtkRenderWindow.h" #include "vtkTextActor3D.h" +#include namespace bbcreaMaracasVisu { - //---------------------------------------------------------------------- - WidgetShowNPoints::WidgetShowNPoints(wxWindow *parent, bbcreaMaracasVisu::ShowNPoints *box) + 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 - textCtrl = new wxTextCtrl(panel, -1); - wxButton *btnAddPoint = new wxButton( panel, -1, _T("Add 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")); - - - wxFlexGridSizer *sizer1 = new wxFlexGridSizer(1); -// sizer1->Add(new wxStaticText(panel,-1,_T(" "))); + mbbShowNPoints = box; + this->renderer = NULL; + wxPanel *panel = this; + wxSizer *sizer = NULL; - Connect(btnAddPoint->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnAddPoint); - 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); - - sizer1->Add(textCtrl); - sizer1->Add(btnAddPoint); - sizer1->Add(btnErasePoint); - sizer1->Add(btnEraseLastPoint); - sizer1->Add(btnDeleteAllPoints); + if (mbbShowNPoints->bbGetInputType()==0) + { + // 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; + } - sizer = sizer1; - panel -> SetSizer(sizer); - panel -> SetAutoLayout(true); - panel -> Layout(); - + if (mbbShowNPoints->bbGetInputType()==1) + { + // Widget interface + wxButton *btnSetPositionPoint = new wxButton( panel, -1, _T("Set nearest point")); + 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); + Connect(btnSetPositionPoint->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnSetPoint); + Connect(sdrOpacity->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints); + Connect(sdrRadio->GetId() , wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &WidgetShowNPoints::UpdatePoints); + + sizer1->Add(btnSetPositionPoint); + sizer1->Add(txtNrPoints); + sizer1->Add(txOpacity); + sizer1->Add(sdrOpacity,1,wxGROW ); + sizer1->Add(txRadio); + sizer1->Add(sdrRadio,1,wxGROW ); + sizer = sizer1; + } + + if (mbbShowNPoints->bbGetInputType() == 2) { + askPointLabel = new wxStaticText(panel, -1, _T("\nPOINT CONTROLS:")); // JPR + + wxButton *btnAddPoint = new wxButton(panel, -1, _T(" Add Point ")); + wxButton *btnDeleteAllPoints = new wxButton(panel, -1, _T(" Delete All ")); + wxStaticText* spacer = new wxStaticText(panel, -1, _T("\n")); // JPR + textCtrl = new wxTextCtrl(panel, -1); + + wxFlexGridSizer *sizer1 = new wxFlexGridSizer(1); + + Connect(btnAddPoint->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnAddPoint); + Connect(btnDeleteAllPoints->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) & WidgetShowNPoints::OnDeleteAllPoints); + + sizer1->Add(askPointLabel); + sizer1->Add(btnAddPoint); + sizer1->Add(btnDeleteAllPoints); + sizer1->Add(spacer); + sizer1->Add(textCtrl); + + sdrOpacity = new wxSlider(); + sdrRadio = new wxSlider(); + + txtNrPoints = new wxStaticText(panel, -1, _T("\n\n\n")); + + sizer = sizer1; + } + if (sizer!=NULL) + { + panel->SetSizer(sizer); + panel->SetAutoLayout(true); + panel->Layout(); + } } - //------------------------------------------------------------------------ WidgetShowNPoints::~WidgetShowNPoints() { } +//------------------------------------------------------------------------ void WidgetShowNPoints::SetRadio(double radio) { - mradio=radio; + this->mradio=radio; + //NTU: For Slider + sdrRadio->SetValue(this->mradio); } //------------------------------------------------------------------------ @@ -79,8 +190,11 @@ std::vector WidgetShowNPoints::GetLstPointsZ() return lstPointsZ; } - - +//------------------------------------------------------------------------ + std::vector WidgetShowNPoints::GetLstLabels() +{ + return lstLabels; +} //------------------------------------------------------------------------ void WidgetShowNPoints::SetPoint(std::vector ppoint) @@ -98,6 +212,8 @@ void WidgetShowNPoints::SetColour(std::vector colour) void WidgetShowNPoints::SetOpacity(double opacity) { this->mopacity=opacity; + //NTU: For Slider + sdrOpacity->SetValue(this->mopacity*100.0); } //------------------------------------------------------------------------ @@ -112,175 +228,454 @@ void WidgetShowNPoints::SetRenderer(vtkRenderer *renderer) this->renderer = renderer; } +//------------------------------------------------------------------------ +std::string WidgetShowNPoints::CleanSpaces(std::string ss) +{ + int i; + while( (i=ss.find(32))>=0 ) + { + ss.replace(i,1,"_"); + } + return ss; +} + //------------------------------------------------------------------------ -void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event) + +void WidgetShowNPoints::RefreshPoint(int id) { - if (this->renderer!=NULL){ - if (mpoint.size()==3){ - lstPointsX.push_back( mpoint[0] ); - lstPointsY.push_back( mpoint[1] ); - lstPointsZ.push_back( mpoint[2] ); - - // Sphere - vtkSphereSource *vtksphere = vtkSphereSource::New(); - vtksphere->SetThetaResolution (20); - vtksphere->SetPhiResolution (20); - vtksphere->SetRadius( mradio ); - vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New(); - sphereMapper->SetInput( vtksphere->GetOutput() ); - vtkActor *sphereActor = vtkActor::New(); - sphereActor->SetMapper(sphereMapper); - sphereActor->SetOrigin(0, 0, 0); - double spc[3]; - mimage->GetSpacing(spc); - sphereActor->SetPosition( spc[0]*mpoint[0] , spc[1]*mpoint[1] , spc[2]*mpoint[2] ); - sphereActor->GetProperty()->SetColor( mcolour[0] , mcolour[1] , mcolour[2] ); - sphereActor->GetProperty()->SetOpacity( mopacity ); + 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 ); - lstActorsSphere.push_back(sphereActor); - renderer->AddActor( sphereActor ); - - // Actor - vtkTextActor3D *text = vtkTextActor3D::New(); - text->SetPosition( mradio+spc[0]*mpoint[0] , spc[1]*mpoint[1] , spc[2]*mpoint[2] ); - text->SetInput( (const char*) ( textCtrl->GetValue().mb_str() ) ); - renderer->AddActor( text ); - lstActorsText.push_back(text); - - renderer->GetRenderWindow()->Render(); + std::string strLabel = CleanSpaces( label ); - //--BBTK - mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsX")); - mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsY")); - mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsZ")); - + 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); +} + +//------------------------------------------------------------------------ +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() ) ); + SetOutputBox(); } 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(); + std::string tmpLabel; + + // 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); + if (lstLabels[i]!="") + { + tmpLabel=lstLabels[i]; + } else{ + tmpLabel="<_VOID_>"; + } + fprintf(ff,"%d\t%d\t%d\t%f\t%s\n", x , y , z , value , tmpLabel.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; i")==0) { strcpy(chartmp,""); } + AddPoint(x,y,z, chartmp ); + } + SetOutputBox(); + fclose(ff); + } else { // else ff + printf("WidgetShowNPoints::OnLoadPoints ...Error... reading file"); + } //ff + } // dialog box + + + } + +//------------------------------------------------------------------------ + + int WidgetShowNPoints::GetNearestPoint() + { + int id=-1; + int i, size=(int)(lstActorsSphere.size()); + double radioMin=10000000; + + if(mimage ==NULL){ + wxMessageDialog* diag = new wxMessageDialog(this, _T("Image not set"), _T("Image Not Set"), wxICON_ERROR); + diag->ShowModal(); + return -1; + }else{ + + for ( i=0 ; ibbGetInputType()==1)) + { + id=0; + AddPoint(0,0,0,""); + SetOutputBox(); + } + + + if (id>=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 (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 ); - renderer->GetRenderWindow()->Render(); - //--BBTK - mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsX")); - mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsY")); - mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsZ")); + lstLabels.erase( lstLabels.begin()+id ); + + SetOutputBox(); + } // if id } // if renderer } - - //------------------------------------------------------------------------ + +//------------------------------------------------------------------------ void WidgetShowNPoints::OnErasePoint(wxCommandEvent& event) { - int id=-1; - int i, size=(int)(lstActorsSphere.size()); - double spc[3]; - mimage->GetSpacing(spc); - - for ( i=0 ; irenderer!=NULL){ - for (i=0;iRemoveActor( lstActorsSphere[i] ); - renderer->RemoveActor( lstActorsText[i] ); - } - lstActorsSphere.clear(); - lstActorsText.clear(); - lstPointsX.clear(); - lstPointsY.clear(); - lstPointsZ.clear(); - renderer->GetRenderWindow()->Render(); - //--BBTK - mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsX")); - mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsY")); - mbbShowNPoints->bbSignalOutputModification(std::string("lstPointsZ")); - } // renderer + 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]->GetTextProperty()->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 +//EED SetOutputBox(); + renderer->GetRenderWindow()->Render(); +} 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->SetImage( bbGetInputImage() ); - mwxwidget->SetColour( bbGetInputColour() ); - mwxwidget->SetOpacity( bbGetInputOpacity() ); - mwxwidget->SetRadio( bbGetInputRadio() ); + if (mwxwidget!=NULL) + { + mwxwidget->SetRenderer( bbGetInputRenderer() ); + mwxwidget->SetPoint( 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() ); + } // mwxwidget } - +//----------------------------------------------------------------- void ShowNPoints::CreateWidget(wxWindow* parent) { - mwxwidget = new WidgetShowNPoints( parent , this); - mwxwidget->SetPoint( bbGetInputIn() ); - - if (bbGetInputImage()==NULL) - { - printf("Missing Image (ShowNPoints) \n"); - } - - bbSetOutputWidget( mwxwidget ); + mwxwidget = new WidgetShowNPoints( parent, this); + bbSetOutputWidget( mwxwidget ); } +//----------------------------------------------------------------- void ShowNPoints::bbUserSetDefaultValues() { mwxwidget = NULL; - bbSetInputRadio(0.5); + bbSetInputRadio(10); bbSetInputOpacity(1); - + std::vector colour; colour.push_back(1.0); colour.push_back(0.0); @@ -288,22 +683,21 @@ void ShowNPoints::bbUserSetDefaultValues() bbSetInputColour(colour); bbSetInputImage(NULL); + bbSetInputType(0); bbSetInputRenderer(NULL); } - - //----------------------------------------------------------------- + +//----------------------------------------------------------------- void ShowNPoints::bbUserInitializeProcessing() { } - - //----------------------------------------------------------------- + +//----------------------------------------------------------------- void ShowNPoints::bbUserFinalizeProcessing() { } - - //----------------------------------------------------------------- + +//----------------------------------------------------------------- } // EO namespace bbcreaMaracasVisu - -