]> Creatis software - creaMaracasVisu.git/blobdiff - bbtk/src/bbcreaMaracasVisuShowNPoints_Tools.cxx
#3504 Integer to double ShowNpoints
[creaMaracasVisu.git] / bbtk / src / bbcreaMaracasVisuShowNPoints_Tools.cxx
index 84435b2ab3567d5a051c55fe4173ebf72e38652e..254ad790f2df48bc73ee89c30dbf0f06aca01016 100644 (file)
@@ -32,107 +32,112 @@ void ShowNPoints_Tools::CreatePatch_3points()
 {
        //printf("PG ShowNPoints_Tools::CreatePatch_3points  Entered patch 3 points !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
        WidgetShowNPoints* wsp = bbGetInputWidgetShowNPoints();
-       wsp->StopAutoAddPoints();
-    wsp->StopTrackPoint();
-       if ( (wsp->GetLstModelShowNPointsSize()==1) &&
-         (wsp->GetModelShowNPoints()->GetLstPointsSize()==3) &&
-         (bbGetInputMesh()!=NULL ) )
-    {
-               std::vector<int> lstX = wsp->GetModelShowNPoints()->GetLstPointsX();
-               std::vector<int> lstY = wsp->GetModelShowNPoints()->GetLstPointsY();
-               std::vector<int> lstZ = wsp->GetModelShowNPoints()->GetLstPointsZ();
-               
-               double pA[3];
-        pA[0] = lstX[0];
-        pA[1] = lstY[0];
-        pA[2] = lstZ[0];
-        double pB[3];
-        pB[0] = lstX[1];
-        pB[1] = lstY[1];
-        pB[2] = lstZ[1];
-        double pC[3];
-        pC[0] = lstX[2];
-        pC[1] = lstY[2];
-        pC[2] = lstZ[2];
+       
+       std::vector<double> lstX = wsp->GetModelShowNPoints()->GetLstPointsX();
+       std::vector<double> lstY = wsp->GetModelShowNPoints()->GetLstPointsY();
+       std::vector<double> lstZ = wsp->GetModelShowNPoints()->GetLstPointsZ();
+       
+       double pA[3];
+    pA[0] = lstX[0];
+    pA[1] = lstY[0];
+    pA[2] = lstZ[0];
+    double pB[3];
+    pB[0] = lstX[1];
+    pB[1] = lstY[1];
+    pB[2] = lstZ[1];
+    double pC[3];
+    pC[0] = lstX[2];
+    pC[1] = lstY[2];
+    pC[2] = lstZ[2];
 
-               double v[3];
-               double u[3];
-               vtkMath::Subtract(pC,pA,v);
-               vtkMath::Subtract(pB,pA,u);
-               
-               /**point in AC closest to B.
-               *formula t=(V)dot(U)/(V)dot(V)
-               */
-               double t = vtkMath::Dot(v,u)/vtkMath::Dot(v,v);
-               /**nP found point
-               *formula A+t(C-A) -> A+tV
-               */
-               vtkMath::MultiplyScalar(v, t);
-               double nP[3];
-               vtkMath::Add(pA, v, nP);
-               
-               //calculate direction vector from found point to B
-               double dirVector[3];
-               vtkMath::Subtract(pB, nP, dirVector);
-               
-               double pointAdd[3];
-               double pointSub[3];
-               
-               //Add and subtract direction vector to A and C to find the 4 points to create the patch,
-               
-               std::vector<int> resListX;
-               std::vector<int> resListY;
-               std::vector<int> resListZ;
-               
-               vtkMath::Add(pA, dirVector, pointAdd);
-               vtkMath::Subtract(pA, dirVector, pointSub);
-               
-               resListX.push_back(pointSub[0]);
-               resListY.push_back(pointSub[1]);
-               resListZ.push_back(pointSub[2]);
+       double v[3];
+       double u[3];
+       vtkMath::Subtract(pC,pA,v);
+       vtkMath::Subtract(pB,pA,u);
+       
+       /**point in AC closest to B.
+       *formula t=(V)dot(U)/(V)dot(V)
+       */
+       double t = vtkMath::Dot(v,u)/vtkMath::Dot(v,v);
+       /**nP found point
+       *formula A+t(C-A) -> A+tV
+       */
+       vtkMath::MultiplyScalar(v, t);
+       double nP[3];
+       vtkMath::Add(pA, v, nP);
+       
+       //calculate direction vector from found point to B
+       double dirVector[3];
+       vtkMath::Subtract(pB, nP, dirVector);
+       
+       double pointAdd[3];
+       double pointSub[3];
+       
+       //Add and subtract direction vector to A and C to find the 4 points to create the patch,
+       
+       std::vector<double> resListX;
+       std::vector<double> resListY;
+       std::vector<double> resListZ;
+       
+       vtkMath::Add(pA, dirVector, pointAdd);
+       vtkMath::Subtract(pA, dirVector, pointSub);
+       
+       resListX.push_back(pointSub[0]);
+       resListY.push_back(pointSub[1]);
+       resListZ.push_back(pointSub[2]);
 
-               resListX.push_back(pointAdd[0]);
-               resListY.push_back(pointAdd[1]);
-               resListZ.push_back(pointAdd[2]);
-               
-               
-               vtkMath::Add(pC, dirVector, pointAdd);
-               vtkMath::Subtract(pC, dirVector, pointSub);
-               
-               resListX.push_back(pointAdd[0]);
-               resListY.push_back(pointAdd[1]);
-               resListZ.push_back(pointAdd[2]);
-               
-               resListX.push_back(pointSub[0]);
-               resListY.push_back(pointSub[1]);
-               resListZ.push_back(pointSub[2]);
-               //printf("PG ShowNPoints_Tools::CreatePatch_3points  Calls CreatePatch_Points !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
-               //Create patch given the previously calculated points (4 points)
-               CreatePatch_Points(resListX, resListY, resListZ);
-       }else{
-               //printf("PG ShowNPoints_Tools::CreatePatch_3points  Warning patch not apply. Need only one group of 3 points\n");
-       }
+       resListX.push_back(pointAdd[0]);
+       resListY.push_back(pointAdd[1]);
+       resListZ.push_back(pointAdd[2]);
+       
+       
+       vtkMath::Add(pC, dirVector, pointAdd);
+       vtkMath::Subtract(pC, dirVector, pointSub);
+       
+       resListX.push_back(pointAdd[0]);
+       resListY.push_back(pointAdd[1]);
+       resListZ.push_back(pointAdd[2]);
+       
+       resListX.push_back(pointSub[0]);
+       resListY.push_back(pointSub[1]);
+       resListZ.push_back(pointSub[2]);
+
+       //Create patch given the previously calculated points (4 points)
+       CreatePatch_Points(resListX, resListY, resListZ);
 }
 
 void ShowNPoints_Tools::CreatePatch_4points()
+{
+       WidgetShowNPoints* wsp = bbGetInputWidgetShowNPoints();
+            
+       std::vector<double> lstX = wsp->GetModelShowNPoints()->GetLstPointsX();
+       std::vector<double> lstY = wsp->GetModelShowNPoints()->GetLstPointsY();
+       std::vector<double> lstZ = wsp->GetModelShowNPoints()->GetLstPointsZ();
+       CreatePatch_Points(lstX, lstY, lstZ);
+}
+
+void ShowNPoints_Tools::InitCreatePatch_Points()
 {
        WidgetShowNPoints* wsp = bbGetInputWidgetShowNPoints();
        wsp->StopAutoAddPoints();
     wsp->StopTrackPoint();
-       if ( (wsp->GetLstModelShowNPointsSize()==1) &&
-         (wsp->GetModelShowNPoints()->GetLstPointsSize()==4) &&
-         (bbGetInputMesh()!=NULL ) )
-    {               
-               std::vector<int> lstX = wsp->GetModelShowNPoints()->GetLstPointsX();
-               std::vector<int> lstY = wsp->GetModelShowNPoints()->GetLstPointsY();
-               std::vector<int> lstZ = wsp->GetModelShowNPoints()->GetLstPointsZ();
-               CreatePatch_Points(lstX, lstY, lstZ);
-    }else{
-               printf("PG ShowNPoints_Tools::CreatePatch_4points  Warning patch not apply. Need only one group of 4 points\n");
+       if((wsp->GetLstModelShowNPointsSize()==1) && (bbGetInputMesh()!=NULL )){
+               if(wsp->GetModelShowNPoints()->GetLstPointsSize()==4){
+                       CreatePatch_4points();
+               }
+               else if(wsp->GetModelShowNPoints()->GetLstPointsSize()==3){
+                       CreatePatch_3points();
+               }
+               else{
+                       printf("PG ShowNPoints_Tools::CreatePatch_Npoints  Warning patch not apply. Number of points is invalid. Group should have 3 or 4 points\n");
+               }
+       }
+       else{
+               printf("PG ShowNPoints_Tools::CreatePatch_Npoints  Warning patch not apply. groups or mesh invalid. Need 1 group of 3 or 4 points, and a mesh\n");
        }
 }
 
-void ShowNPoints_Tools::CreatePatch_Points(std::vector<int> lstX, std::vector<int> lstY, std::vector<int> lstZ)
+void ShowNPoints_Tools::CreatePatch_Points(std::vector<double> lstX, std::vector<double> lstY, std::vector<double> lstZ)
 {
     WidgetShowNPoints* wsp = bbGetInputWidgetShowNPoints();
     std::vector<long int>   lstIdNormalSurface;
@@ -347,7 +352,6 @@ void ShowNPoints_Tools::MovePatchCenter()
                modPoint.push_back(centerPoint[2] + direction * normal[2]);
 
                wsp->SetCollectionPoint(1, 1, modPoint);
-               wsp->GetViewShowNPoints()->RefreshPoints();
         
         // --- Finish ---
         wsp->SetOutputBox();
@@ -421,13 +425,9 @@ void ShowNPoints_Tools::Process()
         {
             bbGetInputWidgetShowNPoints()->OnResetCollections_();
         } // if Type
-        if (bbGetInputType()==190)
-        {
-            CreatePatch_3points();
-        } // if Type
         if (bbGetInputType()==200)
         {
-            CreatePatch_4points();
+            InitCreatePatch_Points();
         } // if Type
         if (bbGetInputType()==210)
         {