X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=bbtk%2Fsrc%2FbbmaracasvisuShowNPoints.cxx;h=2ec8ea03501cc3e7f736d1b29fe1130383d0033a;hb=d0c09a70008646305df0937f47fd7d5930636a67;hp=bd4ec4272aff02d3718599324a21cd8f685c3dd3;hpb=27d15cfe24e890ed45ec17537f123d144d4432cd;p=creaMaracasVisu.git diff --git a/bbtk/src/bbmaracasvisuShowNPoints.cxx b/bbtk/src/bbmaracasvisuShowNPoints.cxx index bd4ec42..2ec8ea0 100644 --- a/bbtk/src/bbmaracasvisuShowNPoints.cxx +++ b/bbtk/src/bbmaracasvisuShowNPoints.cxx @@ -10,72 +10,102 @@ 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 *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(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(textCtrl); - sizer1->Add(btnAddPoint); - sizer1->Add(btnRenamePoint); - sizer1->Add(btnErasePoint); - sizer1->Add(btnEraseLastPoint); - sizer1->Add(btnDeleteAllPoints); - sizer1->Add(txtNrPoints); - sizer1->Add(txOpacity); - sizer1->Add(sdrOpacity); - sizer1->Add(txRadio); - sizer1->Add(sdrRadio); - sizer1->Add(btnSavePoints); - sizer1->Add(btnLoadPoints); - - sizer = sizer1; - panel -> SetSizer(sizer); - panel -> SetAutoLayout(true); - panel -> Layout(); + mbbShowNPoints = box; + this->renderer = NULL; + wxPanel *panel = this; + wxSizer *sizer = NULL; -} + 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; + } + 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 (sizer!=NULL) + { + panel->SetSizer(sizer); + panel->SetAutoLayout(true); + panel->Layout(); + } +} //------------------------------------------------------------------------ WidgetShowNPoints::~WidgetShowNPoints() @@ -113,9 +143,6 @@ std::vector WidgetShowNPoints::GetLstPointsZ() return lstLabels; } - - - //------------------------------------------------------------------------ void WidgetShowNPoints::SetPoint(std::vector ppoint) { @@ -133,7 +160,7 @@ void WidgetShowNPoints::SetOpacity(double opacity) { this->mopacity=opacity; //NTU: For Slider - sdrOpacity->SetValue(this->mopacity*100.0); + sdrOpacity->SetValue(this->mopacity/100.0); } //------------------------------------------------------------------------ @@ -148,6 +175,7 @@ void WidgetShowNPoints::SetRenderer(vtkRenderer *renderer) this->renderer = renderer; } +//------------------------------------------------------------------------ std::string WidgetShowNPoints::CleanSpaces(std::string ss) { @@ -159,6 +187,26 @@ std::string WidgetShowNPoints::CleanSpaces(std::string ss) return ss; } + +//------------------------------------------------------------------------ + +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) { @@ -185,6 +233,8 @@ void WidgetShowNPoints::AddPoint(int x, int y, int z, std::string label) 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); @@ -195,6 +245,7 @@ void WidgetShowNPoints::AddPoint(int x, int y, int z, std::string label) 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){ @@ -206,18 +257,26 @@ void WidgetShowNPoints::AddPoint(int x, int y, int z, std::string label) // 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() ) ); @@ -227,8 +286,7 @@ void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event) } // renderer } - - //------------------------------------------------------------------------ +//------------------------------------------------------------------------ void WidgetShowNPoints::SetOutputBox() { renderer->GetRenderWindow()->Render(); @@ -247,17 +305,16 @@ void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event) 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); + _T("Save points .."), + _T(""), + _T(""), + _T("(*.xls)|*.xls"), + wxSAVE | wxOVERWRITE_PROMPT, + wxDefaultPosition); //EED int result_FD = FD->ShowModal(); @@ -283,26 +340,25 @@ void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event) y=lstPointsY[i]; z=lstPointsZ[i]; value= mimage->GetScalarComponentAsDouble(x,y,z,0); - fprintf(ff,"%d\t %d\t %d\t %f\t %s\n", x , y , z , value , lstLabels[i].c_str()); + 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); + _T("Load points .."), + _T(""), + _T(""), + _T("(*.xls)|*.xls"), + wxOPEN | wxFILE_MUST_EXIST, + wxDefaultPosition); //EED int result_FD = FD->ShowModal(); @@ -326,7 +382,7 @@ void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event) int x,y,z; for (i=0; iShowModal(); + return -1; + }else{ + + for ( i=0 ; ibbGetInputType()==1)) + { + id=0; + AddPoint(0,0,0,""); + } + + + 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()); @@ -367,10 +484,10 @@ void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event) } } - //------------------------------------------------------------------------ +//------------------------------------------------------------------------ void WidgetShowNPoints::OnRenamePoint(wxCommandEvent& event) { - int id=GetNearestPoint(); + int id=IdInsidePoint(); if (id>=0) { std::string strLabel = CleanSpaces( (const char*) ( textCtrl->GetValue().mb_str() ) ); @@ -380,7 +497,7 @@ void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event) } } - //------------------------------------------------------------------------ +//------------------------------------------------------------------------ void WidgetShowNPoints::ErasePoint(int id) { if (this->renderer!=NULL){ @@ -405,19 +522,18 @@ void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event) } // if renderer } - //------------------------------------------------------------------------ +//------------------------------------------------------------------------ void WidgetShowNPoints::OnErasePoint(wxCommandEvent& event) { - ErasePoint( GetNearestPoint() ); + ErasePoint( IdInsidePoint() ); } - //------------------------------------------------------------------------ +//------------------------------------------------------------------------ void WidgetShowNPoints::OnEraseLastPoint(wxCommandEvent& event) { ErasePoint(lstActorsSphere.size()-1); } - //------------------------------------------------------------------------ void WidgetShowNPoints::OnDeleteAllPoints(wxCommandEvent& event) { @@ -426,7 +542,6 @@ void WidgetShowNPoints::OnDeleteAllPoints(wxCommandEvent& event) { ErasePoint(id); } - } //NTU: Method for updating points opacity and Radio @@ -457,14 +572,13 @@ void WidgetShowNPoints::UpdatePoints(wxCommandEvent &event) SetOutputBox(); } - - BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,ShowNPoints) BBTK_BLACK_BOX_IMPLEMENTATION(ShowNPoints,bbtk::WxBlackBox); void ShowNPoints::Process() { - if (mwxwidget!=NULL){ + if (mwxwidget!=NULL) + { mwxwidget->SetRenderer( bbGetInputRenderer() ); mwxwidget->SetPoint( bbGetInputIn() ); mwxwidget->SetImage( bbGetInputImage() ); @@ -479,18 +593,10 @@ void ShowNPoints::Process() } // 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() @@ -507,22 +613,21 @@ void ShowNPoints::bbUserSetDefaultValues() bbSetInputColour(colour); bbSetInputImage(NULL); + bbSetInputType(0); bbSetInputRenderer(NULL); } - //----------------------------------------------------------------- +//----------------------------------------------------------------- void ShowNPoints::bbUserInitializeProcessing() { } - //----------------------------------------------------------------- +//----------------------------------------------------------------- void ShowNPoints::bbUserFinalizeProcessing() { } - //----------------------------------------------------------------- +//----------------------------------------------------------------- } // EO namespace bbcreaMaracasVisu - -