+ manualPoint *mpA = _manContModel->GetManualPoint(0);
+ manualPoint *mpB = _manContModel->GetManualPoint(1);
+ _pts->GetPoint(0, ppA);
+ double dirVec[3];
+
+ // direction of the segment
+ dirVec[0] = mpB->GetX() - mpA->GetX();
+ dirVec[1] = mpB->GetY() - mpA->GetY();
+ dirVec[2] = mpB->GetZ() - mpA->GetZ();
+
+
+ // proj = mpA + k*dirVec
+ double num;
+ double den = 0.0 ;
+ num = dirVec[0]*( xx-mpA->GetX() );
+ num = num + dirVec[1]*( yy-mpA->GetY() );
+ num = num + dirVec[2]*( zz-mpA->GetZ() );
+ den=dirVec[0]*dirVec[0] + dirVec[1]*dirVec[1] + dirVec[2]*dirVec[2];
+ double k;
+ if (den!=0)
+ {
+ k=num/den;
+ } else {
+ k=99999999;
+ }
+ // projection of th point xx,yy,zz in segment mpA,mpB
+ double projX = mpA->GetX() + k*dirVec[0];
+ double projY = mpA->GetY() + k*dirVec[1];
+ double projZ = mpA->GetZ() + k*dirVec[2];
+
+ // distance [projX,projY,projZ] and (xx,yy,zz]
+ double d1= sqrt( (projX-xx)*(projX-xx) + (projY-yy)*(projY-yy) +(projZ-zz)*(projZ-zz) );
+ if (d1<=1)
+ {
+ result=true;
+ } // if d1
+ } else{
+ unsigned int i, nps,nps_t;
+ nps = _sizePointsContour;
+ if (this->_manContModel->IfCloseContour()==true)
+ {
+ nps_t = nps;
+ } else {
+ nps_t = nps-1;
+ } // if close
+ for( i = 0; i < nps_t; i++ )
+ {
+ _pts->GetPoint(i%nps, ppA);
+ _pts->GetPoint((i+1)%nps, ppB);
+ d1 = sqrt( (ppA[0]-xx)*(ppA[0]-xx) + (ppA[1]-yy)*(ppA[1]-yy) + (ppA[2]-zz)*(ppA[2]-zz));
+ d2 = sqrt( (ppB[0]-xx)*(ppB[0]-xx) + (ppB[1]-yy)*(ppB[1]-yy) + (ppB[2]-zz)*(ppB[2]-zz));
+ d3 = sqrt( (ppB[0]-ppA[0])*(ppB[0]-ppA[0]) + (ppB[1]-ppA[1])*(ppB[1]-ppA[1]) + (ppB[2]-ppA[2])*(ppB[2]-ppA[2]));
+ if ( ((d1+d2)>=d3) && ((d1+d2)<=d3*1.3) )
+ {
+ result=true;
+ i=nps;
+ } // if
+ } // for i
+ } // if GetSizeLstPoints()==2
+ } // if min max
+