+ 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] = {lstX[0],lstY[0],lstZ[0]};
+ double pB[3] = {lstX[1],lstY[1],lstZ[1]};
+ double pC[3] = {lstX[2],lstY[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]);
+
+ 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");
+ }