]> 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 c5b00f74e1b9fb1555731980bda32993cd7d6e26..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()
@@ -55,17 +61,15 @@ void manualViewContour::Open(FILE *pFile)
 {
 }
 
-
-
 // ----------------------------------------------------------------------------
 void manualViewContour::RefreshContour() // virtual
 {
-
        int i,np,nps;
 
 //JSTG 25-02-08 --------------------
        //double t,delta, x,y,z;
        double x,y,z;
+       double xx,yy,zz;
 //----------------------------------
 
        _manContModel->UpdateSpline();
@@ -74,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  )
@@ -88,9 +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
@@ -108,28 +127,43 @@ void manualViewContour::RefreshText()  // virtual
                int size = GetNumberOfPoints();
                char text[50];
                char resultText[50];
-               strcpy(resultText," ");
+               strcpy(resultText, "000");
+
+//CMRU 19-08-09 ----------------------------------
+               std::string label;
+               label = _manContModel->GetLabel();
+// ------------------------------------
+
                if (size==2)
                {
                        strcpy(resultText,"L= ");
-                       gcvt ( _mesureScale * this->_manContModel->GetPathSize() , 5, text );
+                       gcvt ( _mesureScale * this->_manContModel->GetPathSize(), 5, text );
                        strcat(resultText,text);
+
+//CMRU 19-08-09 ----------------------------------
+                       strcat(resultText," ");
+                       strcat(resultText,label.c_str());
+//------------------------------------------------
                }
                if (size>2)
                {
                        if (_manContModel->IfCloseContour()==true)
                        {
                                strcpy(resultText,"P= ");
-                               gcvt ( _mesureScale * this->_manContModel->GetPathSize() , 5, text );
+                               gcvt ( _mesureScale * this->_manContModel->GetPathSize(), 5, text );
                                strcat(resultText,text);
-                               gcvt ( _mesureScale * _mesureScale * this->_manContModel->GetPathArea() , 5, text );
+                               gcvt ( _mesureScale * _mesureScale * this->_manContModel->GetPathArea(), 5, text );
                                strcat(resultText,"   A= ");
                                strcat(resultText,text);
+                               strcat(resultText," ");
                        } else {
                                strcpy(resultText,"L= ");
-                               gcvt (  _mesureScale * this->_manContModel->GetPathSize() , 5, text );
+                               gcvt (  _mesureScale * this->_manContModel->GetPathSize(), 5, text );
                                strcat(resultText,text);
                        }
+//CMRU 19-08-09 ----------------------------------
+                       strcat(resultText,label.c_str());
+//------------------------------------------------
                }
 
                _textActor->SetInput(resultText);
@@ -145,9 +179,13 @@ void manualViewContour::RefreshText()  // virtual
                                }
                        }
 
-                       int id = _id_viewPoint_for_text;
-                       double px = _manContModel->GetManualPoint(id)->GetX();
-                       double py = _manContModel->GetManualPoint(id)->GetY();
+                       if (_id_viewPoint_for_text>=size) 
+                       {
+                               _id_viewPoint_for_text=0;
+                       }
+                       
+                       double px = _manContModel->GetManualPoint(_id_viewPoint_for_text)->GetX();
+                       double py = _manContModel->GetManualPoint(_id_viewPoint_for_text)->GetY();
 
                        //EED 27 sep 2006
                        px=px*_spc[0];
@@ -155,12 +193,12 @@ void manualViewContour::RefreshText()  // virtual
 
                        _textActor->SetPosition(px+GetRange()+1,py);
                }
-
        }
 }
 
 // ----------------------------------------------------------------------------
-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;
@@ -168,40 +206,42 @@ bool manualViewContour::ifTouchContour(int x,int y,int z){
        double ppA[3];
        double ppB[3];
        double d1,d2,d3;
-       TransfromeCoordViewWorld(xx,yy,zz);
+       TransfromCoordViewWorld(xx,yy,zz);
 
 //EED 27 sep 2006
        xx = xx * _spc[0];
        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 {
-               nps_t = nps-1;
-       }
-
+               unsigned int i, nps,nps_t;
+               nps       = _sizePointsContour;
        
-       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 (this->_manContModel->IfCloseContour()==true)
+               {
+                       nps_t = nps;
+               } else {
+               nps_t = nps-1;
+               } // 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;
 }
 
@@ -234,7 +274,7 @@ void manualViewContour::InitMove(int x, int y, int z)
        double XX=x;
        double YY=y;
        double ZZ=z;
-       TransfromeCoordViewWorld(XX,YY,ZZ);
+       TransfromCoordViewWorld(XX,YY,ZZ);
 
        int i, manualPointsSZ = _manContModel->GetSizeLstPoints();
        for ( i=0; i<manualPointsSZ; i++ )
@@ -252,7 +292,7 @@ void manualViewContour::MoveContour(int x, int y, int z)
        double YY=y;
        double ZZ=z;
 
-       TransfromeCoordViewWorld(XX,YY,ZZ);
+       TransfromCoordViewWorld(XX,YY,ZZ);
 
        int i, manualPointsSZ = _manContModel->GetSizeLstPoints();
        for ( i=0; i<manualPointsSZ; i++ )