]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualViewContour.cpp
Bug #1679
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualContour / manualViewContour.cpp
index 4fee4987fa2750e887e9c64ec022169e0a53f931..636641c78ffe096da1eabe20925661bb61d06bbe 100644 (file)
@@ -6,9 +6,15 @@
 
 manualViewContour::manualViewContour()
 {
-       _id_viewPoint_for_text  =       0;
-       _mesureScale            =       1;
-       _initialConoturModel = new manualContourModel();
+       _id_viewPoint_for_text  = 0;
+       _mesureScale                    = 1;
+       _initialConoturModel    = new manualContourModel();
+       
+       _minX                                   = 99999;
+       _minY                                   = 99999;
+       _maxX                                   = -99999;
+       _maxY                                   = -99999;
+       
 }
 // ----------------------------------------------------------------------------
 manualViewContour::~manualViewContour()
@@ -63,6 +69,7 @@ void manualViewContour::RefreshContour() // virtual
 //JSTG 25-02-08 --------------------
        //double t,delta, x,y,z;
        double x,y,z;
+       double xx,yy,zz;
 //----------------------------------
 
        _manContModel->UpdateSpline();
@@ -71,7 +78,13 @@ void manualViewContour::RefreshContour() // virtual
     nps = _manContModel->GetNumberOfPointsSpline();
        //delta=( double ) ( np  ) / ( double ) ( nps-1  );             //JSTG 25-02-08
 
-
+       //EED 27 Juin 2012
+    //Boundaring box   
+       _minX=99999;
+       _minY=99999;
+       _maxX=-99999;
+       _maxY=-99999;
+       
        if ( _pts!=NULL )
        {
                if (np>=2  )
@@ -85,8 +98,18 @@ void manualViewContour::RefreshContour() // virtual
 //--------------------------------------------------------------
        // EED 27 sep 2006
        //                      _pts->SetPoint(i, x,y,z );
-                               _pts->SetPoint(i, x*_spc[0], y*_spc[1], z*_spc[2] );
-
+                               xx=x*_spc[0];
+                               yy=y*_spc[1];
+                               zz=z*_spc[2];
+                               _pts->SetPoint(i,xx,yy,zz );
+
+                //EED 27 Juin 2012
+                               //Boundaring box
+                               if (xx < _minX) { _minX = xx; }
+                               if (yy < _minY) { _minY = yy; }
+                               if (xx > _maxX) { _maxX = xx; }
+                               if (yy > _maxY) { _maxY = yy; }
+                               
                        }// for
                }
                else
@@ -174,7 +197,8 @@ void manualViewContour::RefreshText()  // virtual
 }
 
 // ----------------------------------------------------------------------------
-bool manualViewContour::ifTouchContour(int x,int y,int z){
+bool manualViewContour::ifTouchContour(int x,int y,int z)
+{
        bool result=false;
        double xx=x;
        double yy=y;
@@ -189,31 +213,35 @@ bool manualViewContour::ifTouchContour(int x,int y,int z){
        yy = yy * _spc[1];
        zz = zz * _spc[2];
 
-    unsigned int i, nps,nps_t;
-    nps          = _sizePointsContour;
+       if ( (xx>=_minX) &&  (yy>=_minY) && (xx<=_maxX) && (yy<=_maxY)) {  // inside the boundaring box
        
-       if (this->_manContModel->IfCloseContour()==true)
-       {
-               nps_t = nps;
-       } else {
+               unsigned int i, nps,nps_t;
+               nps       = _sizePointsContour;
+       
+               if (this->_manContModel->IfCloseContour()==true)
+               {
+                       nps_t = nps;
+               } else {
                nps_t = nps-1;
-       }
-
-       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 close
 
+printf("EED  Warning manualViewContour::ifTouchContour \n");
 
-               if (  ((d1+d2)>=d3) &&  ((d1+d2)<=d3*1.3) ) 
+               for( i = 0; i < nps_t; i++ ) 
                {
-                       result=true;
-                       i=nps;
-               }
-       }
+                       _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 min max
        return result;
 }