From: Eduardo DAVILA Date: Thu, 30 Jun 2016 00:50:06 +0000 (+0200) Subject: #2982 creaMaracasVisu Feature New Normal - ShowNPoints_model X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=creaMaracasVisu.git;a=commitdiff_plain;h=3ffc04fea9ffbe065dd0141b2d213353e874b284 #2982 creaMaracasVisu Feature New Normal - ShowNPoints_model --- diff --git a/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.cxx b/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.cxx index e1f6392..0c59a4c 100644 --- a/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.cxx +++ b/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.cxx @@ -74,7 +74,7 @@ void ManualContourModel_Box::bbUserSetDefaultValues() // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX // Here we initialize the input 'In' to 0 bbSetInputType(1); - bbSetInputOpenClose(true); + bbSetInputOpenClose(false); bbSetInputNbPoints(100); } diff --git a/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.h b/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.h index 0786994..9e34c0a 100644 --- a/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.h +++ b/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.h @@ -41,8 +41,8 @@ BBTK_BEGIN_DESCRIBE_BLACK_BOX(ManualContourModel_Box,bbtk::AtomicBlackBox); BBTK_CATEGORY("empty"); BBTK_INPUT(ManualContourModel_Box,Type,"(1 default) 1=spline, 2=rectangle, 3=circle, 4=bullEye, 6=Line, 7=points, 8=rotationTool, 10=polugon, 12=Spline3D",int,""); - BBTK_INPUT(ManualContourModel_Box,OpenClose,"(true default) true=open, fals=close",bool,""); - BBTK_INPUT(ManualContourModel_Box,NbPoints,"Number of points int the spline",int,""); + BBTK_INPUT(ManualContourModel_Box,OpenClose,"(false default) false=open, true=close",bool,""); + BBTK_INPUT(ManualContourModel_Box,NbPoints,"(100 default) Number of points int the spline",int,""); BBTK_INPUT(ManualContourModel_Box,LstControlPointsX,"List of control points",std::vector,""); BBTK_INPUT(ManualContourModel_Box,LstControlPointsY,"List of control points",std::vector,""); BBTK_INPUT(ManualContourModel_Box,LstControlPointsZ,"List of control points",std::vector,""); diff --git a/bbtk/src/bbmaracasvisuAxeVolume.cxx b/bbtk/src/bbmaracasvisuAxeVolume.cxx index 79e5ac0..5cb228e 100644 --- a/bbtk/src/bbmaracasvisuAxeVolume.cxx +++ b/bbtk/src/bbmaracasvisuAxeVolume.cxx @@ -25,16 +25,47 @@ #include "bbmaracasvisuAxeVolume.h" #include "bbcreaMaracasVisuPackage.h" + namespace bbcreaMaracasVisu { + BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,AxeVolume) BBTK_BLACK_BOX_IMPLEMENTATION(AxeVolume,bbtk::AtomicBlackBox); -void AxeVolume::Process() + +int AxeVolume::GetTypeFormat( std::string formatStr , vtkImageData* image ) { + int outputformat = VTK_UNSIGNED_CHAR; + if (formatStr=="SAME") + { + if (image!=NULL) outputformat = image->GetScalarType(); + } + else if (formatStr=="VTK_BIT") outputformat = VTK_BIT; // 1 + else if (formatStr=="VTK_CHAR") outputformat = VTK_CHAR; // 2 + else if (formatStr=="VTK_SIGNED_CHAR") outputformat = VTK_SIGNED_CHAR; // 15 + else if (formatStr=="VTK_UNSIGNED_CHAR") outputformat = VTK_UNSIGNED_CHAR; // 3 + else if (formatStr=="VTK_SHORT") outputformat = VTK_SHORT; // 4 + else if (formatStr=="VTK_UNSIGNED_SHORT") outputformat = VTK_UNSIGNED_SHORT; // 5 + else if (formatStr=="VTK_INT") outputformat = VTK_INT; // 6 + else if (formatStr=="VTK_UNSIGNED_INT") outputformat = VTK_UNSIGNED_INT; // 7 + else if (formatStr=="VTK_LONG") outputformat = VTK_LONG; // 8 + else if (formatStr=="VTK_UNSIGNED_LONG") outputformat = VTK_UNSIGNED_LONG; // 9 + else if (formatStr=="VTK_FLOAT") outputformat = VTK_FLOAT; // 10 + else if (formatStr=="VTK_DOUBLE") outputformat = VTK_DOUBLE; // 11 + else if (formatStr=="MET_CHAR") outputformat = VTK_CHAR; // 2 + else if (formatStr=="MET_UCHAR") outputformat = VTK_UNSIGNED_CHAR; // 3 + else if (formatStr=="MET_SHORT") outputformat = VTK_SHORT; // 4 + else if (formatStr=="MET_USHORT") outputformat = VTK_UNSIGNED_SHORT; // 5 + else if (formatStr=="MET_SHORT") outputformat = VTK_SHORT; // 4 + else if (formatStr=="MET_FLOAT") outputformat = VTK_FLOAT; // 10 + else if (formatStr=="MET_DOUBLE") outputformat = VTK_DOUBLE; // 11 + + return outputformat; +} - printf("EED AxeVolume::Process start \n"); +void AxeVolume::Process() +{ if ( mimage!=NULL ) { mimage->Delete(); @@ -53,23 +84,17 @@ void AxeVolume::Process() invSpc[1] = 1/spc[1]; invSpc[2] = 1/spc[2]; + int outputformat = GetTypeFormat( bbGetInputOutputFormat() , bbGetInputIn() ); + mimage = vtkImageData::New(); mimage->SetSpacing(bbGetInputIn()->GetSpacing()); mimage->SetDimensions(bbGetInputIn()->GetDimensions()); mimage->SetExtent(bbGetInputIn()->GetExtent()); mimage->SetOrigin(bbGetInputIn()->GetOrigin()); - //mimage->SetDimensions(sizeX,sizeY,sizeZ); - //mimage->SetOrigin(0,0,0); - //mimage->SetExtent( 0 , sizeX-1 , 0 , sizeY-1 , 0, sizeZ-1 ); - //mimage->SetWholeExtent( 0 , sizeX-1 , 0 , sizeY-1 , 0, sizeZ-1 ); - mimage->SetScalarTypeToUnsignedShort(); - //mimage->SetSpacing(spc); + mimage->SetScalarType( outputformat ); mimage->AllocateScalars(); - - - int i,j,k; - int sizeLstPointR = bbGetInputlstPointR().size(); + int sizeLstPointR = bbGetInputlstPointR().size(); int iAxe,sizeAxe = bbGetInputlstPointX().size(); double rx,ry,rz; double r,rr; @@ -78,7 +103,6 @@ void AxeVolume::Process() double px,py,pz; double px1,py1,pz1; double px2,py2,pz2; - // Clean image p = (unsigned short*)mimage->GetScalarPointer (0, 0, 0); for ( i=0 ; i=0) && (i=0) && (j=0) && (kGetScalarPointer (i, j, k); - if (*p==0) + if ( (i>=0) && (i=0) && (j=0) && (kGetScalarPointer (i, j, k); +// if (*p==0) + if ( mimage->GetScalarComponentAsDouble(i,j,k,0)==0 ) { rz = k - pz; rz = rz*rz; if ( rx + ry + rz <= rr ) { - *p=255; +// *p=255; + mimage->SetScalarComponentFromDouble (i,j,k,0, bbGetInputValue() ); } } // *p==0 - } // inside point + } // if inside point } //for k } //for j } //for i } // for iAxe bbSetOutputOut( mimage ); - - printf("EED AxeVolume::Process end \n"); - } @@ -148,6 +173,8 @@ void AxeVolume::Process() void AxeVolume::bbUserSetDefaultValues() { mimage=NULL; + bbSetInputOutputFormat("SAME"); + bbSetInputValue(255); } //----------------------------------------------------------------- diff --git a/bbtk/src/bbmaracasvisuAxeVolume.h b/bbtk/src/bbmaracasvisuAxeVolume.h index e420365..ca670c6 100644 --- a/bbtk/src/bbmaracasvisuAxeVolume.h +++ b/bbtk/src/bbmaracasvisuAxeVolume.h @@ -43,10 +43,17 @@ class /*BBTK_EXPORT*/ AxeVolume BBTK_DECLARE_INPUT( lstPointY , std::vector ); BBTK_DECLARE_INPUT( lstPointZ , std::vector ); BBTK_DECLARE_INPUT( lstPointR , std::vector ); + BBTK_DECLARE_INPUT( OutputFormat , std::string ); + BBTK_DECLARE_INPUT( Value , double ); + + BBTK_DECLARE_OUTPUT(Out,vtkImageData *); BBTK_PROCESS(Process); void Process(); + int GetTypeFormat( std::string formatStr , vtkImageData* image ); + + private: vtkImageData *mimage; }; @@ -61,6 +68,10 @@ BBTK_BEGIN_DESCRIBE_BLACK_BOX(AxeVolume,bbtk::AtomicBlackBox); BBTK_INPUT(AxeVolume,lstPointY,"List of Y values", std::vector ,""); BBTK_INPUT(AxeVolume,lstPointZ,"List of Z values", std::vector ,""); BBTK_INPUT(AxeVolume,lstPointR,"List of Radius", std::vector ,""); + + BBTK_INPUT(AxeVolume,OutputFormat,"Image output format: SAME (default), VTK_BIT, VTK_CHAR, VTK_SIGNED_CHAR, VTK_UNSIGNED_CHAR, VTK_SHORT, VTK_UNSIGNED_SHORT, VTK_INT, VTK_UNSIGNED_INT, VTK_LONG, VTK_UNSIGNED_LONG, VTK_FLOAT, VTK_DOUBLE",std::string,""); + BBTK_INPUT(AxeVolume,Value,"(255 default) Gray level in the output image", double ,""); + BBTK_OUTPUT(AxeVolume,Out,"Result image",vtkImageData*,""); BBTK_END_DESCRIBE_BLACK_BOX(AxeVolume); } diff --git a/bbtk/src/bbmaracasvisuImageChangeInformation.cxx b/bbtk/src/bbmaracasvisuImageChangeInformation.cxx index ed61f76..2c0e510 100644 --- a/bbtk/src/bbmaracasvisuImageChangeInformation.cxx +++ b/bbtk/src/bbmaracasvisuImageChangeInformation.cxx @@ -48,7 +48,8 @@ void ImageChangeInformation::Process() origin[2]=0.0; img->SetOrigin(origin); mchange->SetInput( img ); - mchange->SetExtentTranslation( -ext[0], -ext[2], -ext[4] ); +//EED 2016 15 06 +// mchange->SetExtentTranslation( -ext[0], -ext[2], -ext[4] ); mchange->SetOutputOrigin (0, 0, 0); mchange->SetOutputExtentStart(0,0,0); if (bbGetInputNewSpacing().size()==3) diff --git a/bbtk/src/bbmaracasvisuShowNPoints.cxx b/bbtk/src/bbmaracasvisuShowNPoints.cxx index c0edbf2..488a3a4 100644 --- a/bbtk/src/bbmaracasvisuShowNPoints.cxx +++ b/bbtk/src/bbmaracasvisuShowNPoints.cxx @@ -36,10 +36,325 @@ namespace bbcreaMaracasVisu { +//---------------------------------------------------------------------- +ModelShowNPoints::ModelShowNPoints() +{ +} +//---------------------------------------------------------------------- + +ModelShowNPoints::~ModelShowNPoints() +{ +} + +//------------------------------------------------------------------------ +void ModelShowNPoints::SetRadio(double radio) +{ + mradio = radio; +} + + +//------------------------------------------------------------------------ +double ModelShowNPoints::GetRadio() +{ + return mradio; +} + + +//------------------------------------------------------------------------ +std::vector ModelShowNPoints::GetLstPointsX() +{ + return lstPointsX; +} + +//------------------------------------------------------------------------ +std::vector ModelShowNPoints::GetLstPointsY() +{ + return lstPointsY; +} + +//------------------------------------------------------------------------ +std::vector ModelShowNPoints::GetLstPointsZ() +{ + return lstPointsZ; +} + +//------------------------------------------------------------------------ +std::vector ModelShowNPoints::GetLstLabels() +{ + return lstLabels; +} + +//------------------------------------------------------------------------ +void ModelShowNPoints::SetReferencePoint(std::vector ppoint) +{ + mReferencePoint = ppoint; +} + +//------------------------------------------------------------------------ +std::vector ModelShowNPoints::GetReferencePoint() +{ + return mReferencePoint; +} + +//------------------------------------------------------------------------ +void ModelShowNPoints::SetImage(vtkImageData *image) +{ + this->mimage=image; +} + + +//------------------------------------------------------------------------ +std::string ModelShowNPoints::CleanSpaces(std::string ss) +{ + int i; + while( (i=ss.find(32))>=0 ) + { + ss.replace(i,1,"_"); + } + return ss; +} + +//------------------------------------------------------------------------ +void ModelShowNPoints::GetIdPoint(int id, int *x, int *y, int *z) +{ + *x=lstPointsX[id]; + *y=lstPointsY[id]; + *z=lstPointsZ[id]; +} + +//------------------------------------------------------------------------ +std::string ModelShowNPoints::GetIdLabel(int id) +{ + return lstLabels[id]; +} + +//------------------------------------------------------------------------ +vtkImageData *ModelShowNPoints::GetImage() +{ + return mimage; +} + +//------------------------------------------------------------------------ +void ModelShowNPoints::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 ); +} + +//------------------------------------------------------------------------ +double ModelShowNPoints::Distance(double dX0, double dY0, double dZ0, double dX1, double dY1, double dZ1)//CFT +{ + return sqrt((dX1 - dX0)*(dX1 - dX0) + (dY1 - dY0)*(dY1 - dY0) + (dZ1 - dZ0)*(dZ1 - dZ0)); +} + +//------------------------------------------------------------------------ +int ModelShowNPoints::InsertPoint(int x, int y, int z, std::string label) +{ + if(lstPointsX.size()>1) + { + std::vector dTotal; + int pos = 1; + int a,b,res; + + //Calcule distance for each pair of points + for(int i = 0; i<(int)lstPointsX.size()-1 ; i++) + { + a = Distance(x, y, z, lstPointsX[i], lstPointsY[i], lstPointsZ[i]); + b = Distance(x, y, z, lstPointsX[i+1], lstPointsY[i+1], lstPointsZ[i+1]); + res = a + b; + dTotal.push_back (res); + } + //Gets the smallest distance + int smallTMP = dTotal[0]; + for (int j = 0; j < (int) dTotal.size(); j++) + { + if(dTotal[j]::iterator it; + //Insert the point in the list of points + it = lstPointsX.begin(); + lstPointsX.insert( it+pos, x ); + it = lstPointsY.begin(); + lstPointsY.insert( it+pos, y ); + it = lstPointsZ.begin(); + lstPointsZ.insert( it+pos, z ); + + std::string strLabel = CleanSpaces( label ); + + std::vector::iterator itS; + itS = lstLabels.begin(); + //Insert Label in list of labels + lstLabels.insert( itS+pos, strLabel ); + return pos; + } else { + return -1; + }// if size lst X + +} + + +//------------------------------------------------------------------------ +void ModelShowNPoints::SavePoints(std::string filename) +{ + std::string tmpLabel; + FILE *ff; + ff = fopen( filename.c_str() , "w+" ); + if (ff!=NULL) + { + int i , size = (int) (lstPointsX.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("ModelShowNPoints::SavePoints ...Error... creating file"); + } //ff +} + +//------------------------------------------------------------------------ +int ModelShowNPoints::ReadPoints(std::string filename) +{ + int i,size; + char chartmp[256]; + FILE *ff; + ff = fopen( filename.c_str() , "r+" ); + if (ff!=NULL) + { + 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 ); + } + fclose(ff); + } else { // else ff + printf("ModelShowNPoints::LoadPoints ...Error... reading file"); + } //ff + return size; +} + +//------------------------------------------------------------------------ +int ModelShowNPoints::GetNearestPoint() +{ + int id=-1; + int i, size=(int)(lstPointsX.size()); + double radioMin=10000000; + for ( i=0 ; iGetSpacing(spc); + for ( i=0 ; i=0) + { + std::string strLabel = CleanSpaces( label ); + lstLabels[id] = strLabel; + } + return id; +} + +//---------------------------------------------------------------------- +void ModelShowNPoints::ErasePoint(int id) +{ + lstPointsX.erase( lstPointsX.begin()+id ); + lstPointsY.erase( lstPointsY.begin()+id ); + lstPointsZ.erase( lstPointsZ.begin()+id ); + lstLabels.erase( lstLabels.begin()+id ); +} + + + +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- //---------------------------------------------------------------------- WidgetShowNPoints::WidgetShowNPoints(wxWindow *parent, bbcreaMaracasVisu::ShowNPoints *box) : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) { + mmodelShowNPoints = new ModelShowNPoints(); mbbShowNPoints = box; this->renderer = NULL; wxPanel *panel = this; @@ -51,7 +366,7 @@ namespace bbcreaMaracasVisu askPointLabel = new wxStaticText(panel, -1, _T("Point label :")); // JPR textCtrl = new wxTextCtrl(panel, -1); wxButton *btnAddPoint = new wxButton( panel, -1, _T("Add Point")); - wxButton *btnInsertPoint = new wxButton( panel, -1, _T("Insert Point"));//CFT + wxButton *btnInsertPoint = new wxButton( panel, -1, _T("Insert Point"));//CFT 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")); @@ -110,11 +425,11 @@ namespace bbcreaMaracasVisu 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); + 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); @@ -128,38 +443,33 @@ namespace bbcreaMaracasVisu 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(); - } + 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; + } // bbGetInputType 2 + + if (sizer!=NULL) + { + panel->SetSizer(sizer); + panel->SetAutoLayout(true); + panel->Layout(); + } // if sizer } //------------------------------------------------------------------------ @@ -168,47 +478,30 @@ 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() +ModelShowNPoints* WidgetShowNPoints::GetModelShowNPoints() { - return lstPointsY; + return mmodelShowNPoints; } -//------------------------------------------------------------------------ -std::vector WidgetShowNPoints::GetLstPointsZ() -{ - return lstPointsZ; -} //------------------------------------------------------------------------ - std::vector WidgetShowNPoints::GetLstLabels() +void WidgetShowNPoints::SetRadio(double radio) { - return lstLabels; + GetModelShowNPoints()->SetRadio(radio); + //NTU: For Slider + sdrRadio->SetValue(radio); } //------------------------------------------------------------------------ -void WidgetShowNPoints::SetPoint(std::vector ppoint) +void WidgetShowNPoints::SetColour(std::vector colour) { - mpoint = ppoint; + this->mcolour = colour; } //------------------------------------------------------------------------ -void WidgetShowNPoints::SetColour(std::vector colour) +void WidgetShowNPoints::SetImage(vtkImageData* image) { - this->mcolour = colour; + GetModelShowNPoints()->SetImage(image); } //------------------------------------------------------------------------ @@ -219,90 +512,66 @@ void WidgetShowNPoints::SetOpacity(double opacity) sdrOpacity->SetValue(this->mopacity*100.0); } -//------------------------------------------------------------------------ -void WidgetShowNPoints::SetImage(vtkImageData *image) -{ - this->mimage=image; -} //------------------------------------------------------------------------ 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::RefreshPoint(int id) { - int x = lstPointsX[id]; - int y = lstPointsY[id]; - int z = lstPointsZ[id]; - double spc[3]; - mimage->GetSpacing(spc); - + +//EED 2016/06/17 +// mimage->GetSpacing(spc); +// int x = lstPointsX[id]; +// int y = lstPointsY[id]; +// int z = lstPointsZ[id]; + int x,y,z; + GetModelShowNPoints()->GetIdPoint(id,&x,&y,&z); + GetModelShowNPoints()->GetImage()->GetSpacing(spc); + std::string label = GetModelShowNPoints()->GetIdLabel(id); + double radio = GetModelShowNPoints()->GetRadio(); + 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 ); + lstSourceSphere[id]->SetRadius( radio ); + + lstActorsText[id]->SetInput( label.c_str() ); + lstActorsText[id]->SetPosition( radio+spc[0]*x , spc[1]*y , spc[2]*z ); } - - + //------------------------------------------------------------------------ -void WidgetShowNPoints::AddPoint(int x, int y, int z, std::string label) +void WidgetShowNPoints::RefreshPoints() { - lstPointsX.push_back( x ); - lstPointsY.push_back( y ); - lstPointsZ.push_back( z ); - - std::string strLabel = CleanSpaces( label ); - - lstLabels.push_back( strLabel ); + int id,size=lstActorsSphere.size(); + for (id=0;idGetRenderWindow()->Render(); +} +//------------------------------------------------------------------------ +void WidgetShowNPoints::AddVtkPoint() +{ // Sphere - vtkSphereSource *vtksphere = vtkSphereSource::New(); + vtkSphereSource *vtksphere = vtkSphereSource::New(); vtksphere->SetThetaResolution (20); vtksphere->SetPhiResolution (20); - vtksphere->SetRadius( mradio ); - + vtksphere->SetRadius( 1 ); //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); @@ -310,71 +579,33 @@ void WidgetShowNPoints::AddPoint(int x, int y, int z, std::string label) 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() ); +// textActor->SetInput( strLabel.c_str() ); renderer->AddActor( textActor ); lstActorsText.push_back(textActor); - - RefreshPoint(lstPointsX.size()-1); } + //------------------------------------------------------------------------ -double WidgetShowNPoints::Distance(double dX0, double dY0, double dZ0, double dX1, double dY1, double dZ1)//CFT +void WidgetShowNPoints::AddPoint(int x, int y, int z, std::string label) { - return sqrt((dX1 - dX0)*(dX1 - dX0) + (dY1 - dY0)*(dY1 - dY0) + (dZ1 - dZ0)*(dZ1 - dZ0)); + GetModelShowNPoints()->AddPoint(x,y,z, label ); + AddVtkPoint(); + RefreshPoint(lstActorsSphere.size()-1); } + + //------------------------------------------------------------------------ void WidgetShowNPoints::InsertPoint(int x, int y, int z, std::string label)//CFT { - std::cout<<"WidgetShowNPoints::InsertPoint begin "<1) - { - std::vector dTotal; - int pos = 1; - int a,b,res; - - //Calcule distance for each pair of points - for(int i = 0; i::iterator it; - //Insert the point in the list of points - it = lstPointsX.begin(); - lstPointsX.insert( it+pos, x ); - it = lstPointsY.begin(); - lstPointsY.insert( it+pos, y ); - it = lstPointsZ.begin(); - lstPointsZ.insert( it+pos, z ); - - std::string strLabel = CleanSpaces( label ); - - std::vector::iterator itS; - itS = lstLabels.begin(); - //Insert Label in list of labels - lstLabels.insert( itS+pos, strLabel ); +//-- + if ( GetModelShowNPoints()->InsertPoint(x,y,z,label) != -1 ) + { +/* // Sphere vtkSphereSource *vtksphere = vtkSphereSource::New(); vtksphere->SetThetaResolution (20); @@ -410,76 +641,71 @@ void WidgetShowNPoints::InsertPoint(int x, int y, int z, std::string label)//CFT std::vector::iterator itTA; itTA = lstActorsText.begin(); lstActorsText.insert( itTA+pos , textActor); +*/ - RefreshPoint(pos); - }//end if - std::cout<<"WidgetShowNPoints::InsertPoint end"<renderer==NULL) + { 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 + + std::vector point = GetModelShowNPoints()->GetReferencePoint(); + if (point.size()==3) + { + AddPoint(point[0],point[1],point[2], (const char*) ( textCtrl->GetValue().mb_str() ) ); + SetOutputBox(); + renderer->GetRenderWindow()->Render(); + } else {//mpoint.size + printf("creaMaracasVisu::ShowNPoints (not match point) \n"); + } } //------------------------------------------------------------------------ void WidgetShowNPoints::OnInsertPoint (wxCommandEvent& event)//CFT -{ - std::cout<<"WidgetShowNPoints::OnInsertPoint begin"<renderer==NULL) + { return; } - - if (this->renderer!=NULL){ - if (mpoint.size()==3){ - InsertPoint(mpoint[0],mpoint[1],mpoint[2], (const char*) ( textCtrl->GetValue().mb_str() ) ); - SetOutputBox(); - } else {//mpoint.size - printf("creaMaracasVisu::ShowNPoints (not match point) \n"); - } - } // renderer - std::cout<<"WidgetShowNPoints::OnInsertPoint end"< point = GetModelShowNPoints()->GetReferencePoint(); + if (point.size()==3) + { + InsertPoint(point[0],point[1],point[2], (const char*) ( textCtrl->GetValue().mb_str() ) ); + SetOutputBox(); + } else {//mpoint.size + printf("creaMaracasVisu::ShowNPoints (not match point) \n"); + } } //------------------------------------------------------------------------ void WidgetShowNPoints::SetOutputBox() { - renderer->GetRenderWindow()->Render(); +//EED renderer->GetRenderWindow()->Render(); wxString strTmp; - strTmp.Printf(_T("Nbr of points: %d"), (int)(lstPointsX.size()) ); + strTmp.Printf(_T("Nbr of points: %d"), GetModelShowNPoints()->GetLstPointsSize() ); txtNrPoints->SetLabel( strTmp ); - //--BBTK - mbbShowNPoints->bbSetOutputlstPointsX( lstPointsX ); - mbbShowNPoints->bbSetOutputlstPointsY( lstPointsY ); - mbbShowNPoints->bbSetOutputlstPointsZ( lstPointsZ ); - mbbShowNPoints->bbSetOutputlstLabels( lstLabels ); - + mbbShowNPoints->bbSetOutputlstPointsX( GetModelShowNPoints()->GetLstPointsX() ); + mbbShowNPoints->bbSetOutputlstPointsY( GetModelShowNPoints()->GetLstPointsY() ); + mbbShowNPoints->bbSetOutputlstPointsZ( GetModelShowNPoints()->GetLstPointsZ() ); + mbbShowNPoints->bbSetOutputlstLabels( GetModelShowNPoints()->GetLstLabels() ); mbbShowNPoints->bbSignalOutputModification(); - -//EED 07/07/2014 -// 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) { @@ -493,44 +719,18 @@ void WidgetShowNPoints::OnInsertPoint (wxCommandEvent& event)//CFT //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 + std::string filename= (const char*) ( FD->GetPath().mb_str() ); + GetModelShowNPoints()->SavePoints( filename ); } // dialog box } + //------------------------------------------------------------------------ void WidgetShowNPoints::OnLoadPoints(wxCommandEvent& event) { @@ -541,168 +741,74 @@ void WidgetShowNPoints::OnInsertPoint (wxCommandEvent& event)//CFT _T("(*.xls)|*.xls"), wxOPEN | wxFILE_MUST_EXIST, wxDefaultPosition); + int i; //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) + + std::string filename= (const char*) ( FD->GetPath().mb_str() ); + int numberPointsRead = GetModelShowNPoints()->ReadPoints( filename ); + 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 + AddVtkPoint(); + }// for + SetOutputBox(); + RefreshPoints(); } // 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 ; iGetNearestPoint(); if((id==-1) && (mbbShowNPoints->bbGetInputType()==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]; + GetModelShowNPoints()->SetPointId_mReferencePoint(id); 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] ); - */ + renderer->GetRenderWindow()->Render(); } // 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 ; iRenamePoint( (const char*) ( textCtrl->GetValue().mb_str() ) ); if (id>=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() ); + lstActorsText[id]->SetInput( (const char*) ( textCtrl->GetValue().mb_str() ) ); SetOutputBox(); + renderer->GetRenderWindow()->Render(); } } //------------------------------------------------------------------------ void WidgetShowNPoints::ErasePoint(int id) { - if (this->renderer!=NULL){ - if (id>=0){ + 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[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(); - + GetModelShowNPoints()->ErasePoint(id); } // if id } // if renderer } @@ -710,13 +816,17 @@ void WidgetShowNPoints::OnInsertPoint (wxCommandEvent& event)//CFT //------------------------------------------------------------------------ void WidgetShowNPoints::OnErasePoint(wxCommandEvent& event) { - ErasePoint( IdInsidePoint() ); + ErasePoint( GetModelShowNPoints()->IdInsidePoint() ); + SetOutputBox(); + renderer->GetRenderWindow()->Render(); } //------------------------------------------------------------------------ void WidgetShowNPoints::OnEraseLastPoint(wxCommandEvent& event) { ErasePoint(lstActorsSphere.size()-1); + SetOutputBox(); + renderer->GetRenderWindow()->Render(); } //------------------------------------------------------------------------ @@ -727,6 +837,8 @@ void WidgetShowNPoints::OnDeleteAllPoints(wxCommandEvent& event) { ErasePoint(id); } + SetOutputBox(); + renderer->GetRenderWindow()->Render(); } //NTU: Method for updating points opacity and Radio @@ -735,31 +847,65 @@ void WidgetShowNPoints::OnDeleteAllPoints(wxCommandEvent& event) void WidgetShowNPoints::UpdatePoints(wxCommandEvent &event) { //Difference in Radio for text placement - int difradio = sdrRadio->GetValue() - this->mradio; - + double radio=GetModelShowNPoints()->GetRadio(); this->mopacity = sdrOpacity->GetValue()/100.0; - this->mradio = sdrRadio->GetValue(); - + GetModelShowNPoints()->SetRadio( sdrRadio->GetValue() ) ; + radio = sdrRadio->GetValue(); //NTU refresh the inputs mbbShowNPoints->bbSetInputOpacity(this->mopacity); - mbbShowNPoints->bbSetInputRadio(this->mradio); + mbbShowNPoints->bbSetInputRadio( radio ); + // EED + RefreshPoints(); +} - 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]); +//------------------------------------------------------------------------ +void WidgetShowNPoints::SetReferencePoint(std::vector point) +{ + GetModelShowNPoints()->SetReferencePoint(point); +} + +//------------------------------------------------------------------------ +void WidgetShowNPoints::SetInitLstPoints( std::vector initLstPointsX, std::vector initLstPointsY, std::vector initLstPointsZ, std::vector initLstLabels ) +{ + if (this->renderer==NULL) + { + return; } - //NTU: For updating -//EED SetOutputBox(); - renderer->GetRenderWindow()->Render(); + int i,sizeX,sizeY,sizeZ,sizeLabels; + sizeX=(int)initLstPointsX.size(); + sizeY=(int)initLstPointsY.size(); + sizeZ=(int)initLstPointsZ.size(); + sizeLabels=(int)initLstLabels.size(); + + int x,y,z; + std::string label; + if ( (sizeX==sizeY) && (sizeX==sizeZ) ) + { + + for (i=0;iGetRenderWindow()->Render(); + + } // if size } + + + BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,ShowNPoints) BBTK_BLACK_BOX_IMPLEMENTATION(ShowNPoints,bbtk::WxBlackBox); @@ -769,17 +915,22 @@ 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 (firsttime==true) + { + firsttime=false; + mwxwidget->SetInitLstPoints( bbGetInputInitLstPointsX() , bbGetInputInitLstPointsY() , bbGetInputInitLstPointsZ() , bbGetInputInitLstLabels() ); + } + bbSetOutputlstPointsX( mwxwidget->GetModelShowNPoints()->GetLstPointsX() ); + bbSetOutputlstPointsY( mwxwidget->GetModelShowNPoints()->GetLstPointsY() ); + bbSetOutputlstPointsZ( mwxwidget->GetModelShowNPoints()->GetLstPointsZ() ); + bbSetOutputlstLabels( mwxwidget->GetModelShowNPoints()->GetLstLabels() ); } // mwxwidget } @@ -793,6 +944,7 @@ void ShowNPoints::CreateWidget(wxWindow* parent) //----------------------------------------------------------------- void ShowNPoints::bbUserSetDefaultValues() { + firsttime = true; mwxwidget = NULL; bbSetInputRadio(10); diff --git a/bbtk/src/bbmaracasvisuShowNPoints.h b/bbtk/src/bbmaracasvisuShowNPoints.h index 5879aed..df37ddb 100644 --- a/bbtk/src/bbmaracasvisuShowNPoints.h +++ b/bbtk/src/bbmaracasvisuShowNPoints.h @@ -38,6 +38,50 @@ namespace bbcreaMaracasVisu { + class ModelShowNPoints + { + public: + ModelShowNPoints(); + ~ModelShowNPoints(); + std::vector GetLstPointsX(); + std::vector GetLstPointsY(); + std::vector GetLstPointsZ(); + void GetIdPoint(int id, int *x, int *y, int *z); + std::string GetIdLabel(int id); + std::vector GetLstLabels(); + void AddPoint(int x, int y, int z, std::string label); + double Distance(double dX0, double dY0, double dZ0, double dX1, double dY1, double dZ1); + int InsertPoint(int x, int y, int z, std::string label); + void SavePoints(std::string filename); + int ReadPoints(std::string filename); + int GetNearestPoint(); + + int GetLstPointsSize(); + void SetPointId_mReferencePoint(int id); + int IdInsidePoint(); + + void SetReferencePoint(std::vector ppoint); + std::vector GetReferencePoint(); + void SetImage(vtkImageData *image); + std::string CleanSpaces(std::string ss); + vtkImageData* GetImage(); + void SetRadio(double radio); + double GetRadio(); + int RenamePoint(std::string label); + void ErasePoint(int id); + + private: + std::vector lstPointsX; + std::vector lstPointsY; + std::vector lstPointsZ; + std::vector lstLabels; + std::vector mReferencePoint; + double mradio; + vtkImageData *mimage; + + }; + + class ShowNPoints; //-------------------------------------------------------------------------- @@ -47,7 +91,7 @@ namespace bbcreaMaracasVisu WidgetShowNPoints( wxWindow *parent, ShowNPoints *box); ~WidgetShowNPoints(); void OnAddPoint(wxCommandEvent &event); - void OnInsertPoint (wxCommandEvent& event);//CFT + void OnInsertPoint (wxCommandEvent& event);//CFT void OnSetPoint(wxCommandEvent& event); void OnRenamePoint(wxCommandEvent& event); void OnErasePoint(wxCommandEvent& event); @@ -59,35 +103,29 @@ namespace bbcreaMaracasVisu void RefreshPoint(int id); - void SetPoint(std::vector ppoint); void SetColour(std::vector colour); void SetOpacity(double opacity); void SetRadio(double radio); void SetImage(vtkImageData *image); void SetRenderer(vtkRenderer *renderer); - std::vector GetLstPointsX(); - std::vector GetLstPointsY(); - std::vector GetLstPointsZ(); - std::vector GetLstLabels(); + void SetReferencePoint(std::vector point); void AddPoint(int x, int y, int z, std::string label); - void InsertPoint(int x, int y, int z, std::string label);//CFT - double Distance(double dX0, double dY0, double dZ0, double dX1, double dY1, double dZ1);//CFT + void InsertPoint(int x, int y, int z, std::string label);//CFT - private: + ModelShowNPoints* GetModelShowNPoints(); + void RefreshPoints(); + void AddVtkPoint(); + void SetInitLstPoints( std::vector initLstPointsX, std::vector initLstPointsY, std::vector initLstPointsZ, std::vector initLstLabels ); - std::string CleanSpaces(std::string ss); - int GetNearestPoint(); - int IdInsidePoint(); - void ErasePoint(int id); - void SetOutputBox(); + + private: + void ErasePoint(int id); + void SetOutputBox(); ShowNPoints *mbbShowNPoints; vtkRenderer *renderer; - std::vector lstPointsX; - std::vector lstPointsY; - std::vector lstPointsZ; - std::vector lstLabels; + std::vector lstActorsSphere;//NTU changed from prop3D to Actor std::vector lstActorsText; @@ -95,17 +133,16 @@ namespace bbcreaMaracasVisu std::vector lstSourceSphere; - std::vector mpoint; - vtkImageData *mimage; - std::vector mcolour; - double mopacity; - double mradio; - wxStaticText *askPointLabel; - wxTextCtrl *textCtrl; - wxStaticText *txtNrPoints; - wxSlider *sdrOpacity; - wxSlider *sdrRadio; + std::vector mcolour; + double mopacity; + wxStaticText *askPointLabel; + wxTextCtrl *textCtrl; + wxStaticText *txtNrPoints; + wxSlider *sdrOpacity; + wxSlider *sdrRadio; + ModelShowNPoints *mmodelShowNPoints; + }; class /*BBTK_EXPORT*/ ShowNPoints @@ -119,7 +156,12 @@ class /*BBTK_EXPORT*/ ShowNPoints BBTK_DECLARE_INPUT(Colour, std::vector ); BBTK_DECLARE_INPUT(Opacity, double ); BBTK_DECLARE_INPUT(Radio, double ); + BBTK_DECLARE_INPUT(InitLstPointsX, std::vector ); + BBTK_DECLARE_INPUT(InitLstPointsY, std::vector ); + BBTK_DECLARE_INPUT(InitLstPointsZ, std::vector ); + BBTK_DECLARE_INPUT(InitLstLabels, std::vector ); BBTK_DECLARE_INPUT(Type, int ); + BBTK_DECLARE_OUTPUT( lstPointsX, std::vector ); BBTK_DECLARE_OUTPUT( lstPointsY, std::vector ); BBTK_DECLARE_OUTPUT( lstPointsZ, std::vector ); @@ -131,6 +173,7 @@ class /*BBTK_EXPORT*/ ShowNPoints private: WidgetShowNPoints *mwxwidget; + bool firsttime; }; BBTK_BEGIN_DESCRIBE_BLACK_BOX(ShowNPoints,bbtk::WxBlackBox); @@ -138,17 +181,24 @@ BBTK_BEGIN_DESCRIBE_BLACK_BOX(ShowNPoints,bbtk::WxBlackBox); BBTK_AUTHOR("Eduardo DAVILA"); BBTK_DESCRIPTION("widget that shows N moints in 3D (vtkActors)"); BBTK_CATEGORY("widgetVtk"); + BBTK_INPUT(ShowNPoints,In,"One Point",std::vector,""); BBTK_INPUT(ShowNPoints,Renderer,"Renderer",vtkRenderer*,""); BBTK_INPUT(ShowNPoints,Image,"vktkImageData",vtkImageData*,""); BBTK_INPUT(ShowNPoints,Colour,"Colour of the actor",std::vector,"colour"); BBTK_INPUT(ShowNPoints,Opacity,"Opacity of the actor 0..1 (default 1)",double,""); BBTK_INPUT(ShowNPoints,Radio,"Radio of the spheres 1..50 (default 10)",double,""); + BBTK_INPUT(ShowNPoints,InitLstPointsX,"Initial lst of points X",std::vector,""); + BBTK_INPUT(ShowNPoints,InitLstPointsY,"Initial lst of points Y",std::vector,""); + BBTK_INPUT(ShowNPoints,InitLstPointsZ,"Initial lst of points Z",std::vector,""); + BBTK_INPUT(ShowNPoints,InitLstLabels,"Initial lst of labels",std::vector,""); BBTK_INPUT(ShowNPoints,Type,"Type of the widget. 0(default): N-points, 1:Just one point",int,""); + BBTK_OUTPUT(ShowNPoints , lstPointsX , " list of points X ", std::vector ,""); BBTK_OUTPUT(ShowNPoints , lstPointsY , " list of points Y ", std::vector ,""); BBTK_OUTPUT(ShowNPoints , lstPointsZ , " list of points Z ", std::vector ,""); BBTK_OUTPUT(ShowNPoints , lstLabels , " list of labels ", std::vector ,""); + BBTK_END_DESCRIBE_BLACK_BOX(ShowNPoints); } // EO namespace bbcreaMaracasVisu