#include "bbmaracasvisuShowNPoints.h" #include "bbcreaMaracasVisuPackage.h" #include "vtkProperty.h" #include "vtkSphereSource.h" #include "vtkPolyDataMapper.h" #include "vtkRenderWindow.h" namespace bbcreaMaracasVisu { //---------------------------------------------------------------------- WidgetShowNPoints::WidgetShowNPoints(wxWindow *parent, vtkRenderer *renderer, ShowNPoints *box) : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) { mbbShowNPoints = box; this->renderer = renderer; wxPanel *panel = this; wxSizer *sizer = NULL; // Widget interface wxButton *btnAddPoint = new wxButton( panel, -1, _T("Add Point")); wxButton *btnEraseLstPoint = new wxButton( panel, -1, _T("Erase Last point")); wxButton *btnDeleteAllPoints= new wxButton( panel, -1, _T("Delete all points")); wxFlexGridSizer *sizer1 = new wxFlexGridSizer(1); // sizer1->Add(new wxStaticText(panel,-1,_T(" "))); Connect(btnAddPoint->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnAddPoint); Connect(btnEraseLstPoint->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnErasePoint); Connect(btnDeleteAllPoints->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnDeleteAllPoints); sizer1->Add(btnAddPoint); sizer1->Add(btnEraseLstPoint); sizer1->Add(btnDeleteAllPoints); sizer = sizer1; panel -> SetSizer(sizer); panel -> SetAutoLayout(true); panel -> Layout(); } //------------------------------------------------------------------------ WidgetShowNPoints::~WidgetShowNPoints() { } void WidgetShowNPoints::SetRadio(double radio) { mradio=radio; } //------------------------------------------------------------------------ std::vector WidgetShowNPoints::GetLstPointsX() { return lstPointsX; } //------------------------------------------------------------------------ std::vector WidgetShowNPoints::GetLstPointsY() { return lstPointsY; } //------------------------------------------------------------------------ std::vector WidgetShowNPoints::GetLstPointsZ() { return lstPointsZ; } //------------------------------------------------------------------------ void WidgetShowNPoints::SetPoint(std::vector ppoint) { mpoint = ppoint; } //------------------------------------------------------------------------ void WidgetShowNPoints::SetColour(std::vector colour) { this->mcolour = colour; } //------------------------------------------------------------------------ void WidgetShowNPoints::SetOpacity(double opacity) { this->mopacity=opacity; } //------------------------------------------------------------------------ void WidgetShowNPoints::SetImage(vtkImageData *image) { this->mimage=image; } //------------------------------------------------------------------------ void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event) { // printf("EED %p WidgetShowNPoints::OnAddPoint %d,%d,%d \n", this,mpoint[0],mpoint[1],mpoint[2] ); 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 ); lstActors.push_back(sphereActor); renderer->AddActor( sphereActor ); renderer->GetRenderWindow()->Render(); //--BBTK mbbShowNPoints->bbSignalOutputModification(std::string("Point")); } } //------------------------------------------------------------------------ void WidgetShowNPoints::OnErasePoint(wxCommandEvent& event) { int id = lstActors.size()-1; if (id>=0){ renderer->RemoveActor( lstActors[id] ); lstActors.erase( lstActors.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("Point")); } } //------------------------------------------------------------------------ void WidgetShowNPoints::OnDeleteAllPoints(wxCommandEvent& event) { int i,size=lstActors.size(); for (i=0;iRemoveActor( lstActors[i] ); } lstActors.clear(); lstPointsX.clear(); lstPointsY.clear(); lstPointsZ.clear(); renderer->GetRenderWindow()->Render(); //--BBTK mbbShowNPoints->bbSignalOutputModification(std::string("Point")); } BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,ShowNPoints) BBTK_BLACK_BOX_IMPLEMENTATION(ShowNPoints,bbtk::WxBlackBox); void ShowNPoints::Process() { mwxwidget->SetPoint( bbGetInputIn() ); mwxwidget->SetImage( bbGetInputImage() ); mwxwidget->SetColour( bbGetInputColour() ); mwxwidget->SetOpacity( bbGetInputOpacity() ); mwxwidget->SetRadio( bbGetInputRadio() ); bbSetOutputlstPointsX( mwxwidget->GetLstPointsX() ); bbSetOutputlstPointsY( mwxwidget->GetLstPointsY() ); bbSetOutputlstPointsZ( mwxwidget->GetLstPointsZ() ); } void ShowNPoints::CreateWidget(wxWindow* parent) { mwxwidget = new WidgetShowNPoints( parent , bbGetInputRenderer(), this); mwxwidget->SetPoint( bbGetInputIn() ); if (bbGetInputImage()==NULL) { printf("Missing Image (ShowNPoints) \n"); } bbSetOutputWidget( mwxwidget ); Process(); } void ShowNPoints::bbUserConstructor() { std::vector colour; colour.push_back(1.0); colour.push_back(0.0); colour.push_back(0.0); bbSetInputColour(colour); bbSetInputOpacity(1); bbSetInputImage(NULL); bbSetInputRadio(0.5); } void ShowNPoints::bbUserCopyConstructor(bbtk::BlackBox::Pointer) { } void ShowNPoints::bbUserDestructor() { } } // EO namespace bbcreaMaracasVisu