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 *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"));
// sizer1->Add(new wxStaticText(panel,-1,_T(" ")));
Connect(btnAddPoint->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnAddPoint);
+ Connect(btnInsertPoint->GetId() , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WidgetShowNPoints::OnInsertPoint);//CFT
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);
sizer1->Add(askPointLabel); // JPR
sizer1->Add(textCtrl);
sizer1->Add(btnAddPoint);
+ sizer1->Add(btnInsertPoint);//CFT
sizer1->Add(btnSetPositionPoint);
sizer1->Add(btnRenamePoint);
sizer1->Add(btnErasePoint);
RefreshPoint(lstPointsX.size()-1);
}
+//------------------------------------------------------------------------
+double WidgetShowNPoints::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));
+}
+
+//------------------------------------------------------------------------
+void WidgetShowNPoints::InsertPoint(int x, int y, int z, std::string label)//CFT
+{
+ std::cout<<"WidgetShowNPoints::InsertPoint begin "<<std::endl;
+ std::vector<int> dTotal;
+ int pos = 0;
+ int a,b,res;
+ //Calcule distance for each pair of points
+ for(int i = 0; i<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 small = dTotal[0];
+ for (int j = 0; j < dTotal.size(); j++)
+ {
+ if(dTotal[j]<small)
+ {
+ small=dTotal[j];
+ pos = j+1;
+ }
+ }
+
+ std::vector<int>::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<std::string>::iterator itS;
+ itS = lstLabels.begin();
+ //Insert Label in list of labels
+ lstLabels.insert( itS+pos, strLabel );
+
+ // Sphere
+ vtkSphereSource *vtksphere = vtkSphereSource::New();
+ vtksphere->SetThetaResolution (20);
+ vtksphere->SetPhiResolution (20);
+ vtksphere->SetRadius( mradio );
+
+ //NTU: For updating points
+ std::vector<vtkSphereSource*>::iterator itSS;
+ itSS = lstSourceSphere.begin();
+ lstSourceSphere.insert( itSS+pos, vtksphere);
+
+ vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New();
+ sphereMapper->SetInput( vtksphere->GetOutput() );
+ vtkActor *sphereActor = vtkActor::New();
+ sphereActor->SetMapper(sphereMapper);
+ sphereActor->SetOrigin(0, 0, 0);
+
+ std::vector<vtkActor*>::iterator itAS;
+ itAS = lstActorsSphere.begin();
+ lstActorsSphere.insert( itAS+pos, 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();
+
+ textActor->SetInput( strLabel.c_str() );
+ renderer->AddActor( textActor );
+ std::vector<vtkTextActor3D*>::iterator itTA;
+ itTA = lstActorsText.begin();
+ lstActorsText.insert( itTA+pos , textActor);
+
+ RefreshPoint(pos);
+ std::cout<<"WidgetShowNPoints::InsertPoint end"<<std::endl;
+}
+
//------------------------------------------------------------------------
void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event)
{
} // renderer
}
+//------------------------------------------------------------------------
+void WidgetShowNPoints::OnInsertPoint (wxCommandEvent& event)//CFT
+{
+ std::cout<<"WidgetShowNPoints::OnInsertPoint begin"<<std::endl;
+ 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){
+ 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"<<std::endl;
+}
+
+
//------------------------------------------------------------------------
void WidgetShowNPoints::SetOutputBox()
{