]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualContourModel.cpp
#3474 Refresh optimization DrawAxisTree3D Box
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualContour / manualContourModel.cpp
index 947e614bd77f90dfe4d3c581249f885ee699b8c5..d5100a044ba3b880aa5d436f334bb74b12b982aa 100644 (file)
@@ -34,53 +34,43 @@ manualContourModel::manualContourModel()
     _cntSplineX = vtkKochanekSpline::New( );
     _cntSplineY = vtkKochanekSpline::New( );
     _cntSplineZ = vtkKochanekSpline::New( );
-
        this->SetCloseContour(true);
-
     _cntSplineX->SetDefaultTension( 0 );
        _cntSplineX->SetDefaultBias( 0 );
        _cntSplineX->SetDefaultContinuity( 0 );
-
     _cntSplineY->SetDefaultTension( 0 );
        _cntSplineY->SetDefaultBias( 0 );
        _cntSplineY->SetDefaultContinuity( 0 );
-
     _cntSplineZ->SetDefaultTension( 0 );
        _cntSplineZ->SetDefaultBias( 0 );
        _cntSplineZ->SetDefaultContinuity( 0 );
-
 //JSTG 25-02-08 -------------------------------------------------------------------------------------------------
-
        // this parameter is reset in the  VIRTUAL manualContourBaseControler::Configure
-       _sizePointsContour      = 100;                  //JSTG 25-02-08 The change in the inisialization of these variable is critical.
-
+       _sizePointsContour      = 500;                  //JSTG 25-02-08 The change in the inisialization of these variable is critical.
        _delta_JSTG                     = 0.0;
 //---------------------------------------------------------------------------------------------------------------
-
 //CMRU 17-08-09 -------------------------------------------------------------------------------------------------
        _realSize                       = 0.0;
-       _label                          = "";
 //---------------------------------------------------------------------------------------------------------------
-
 }
 
 // ----------------------------------------------------------------------------
 manualContourModel::~manualContourModel()
 {
        int i,size=_lstPoints.size();
-       for (i=0;i<size; i++){
+       for (i=0;i<size; i++)
+       {
                delete _lstPoints[i];
-       }
+       } // for i
        _lstPoints.clear();
-
        _cntSplineX->RemoveAllPoints();
        _cntSplineY->RemoveAllPoints();
        _cntSplineZ->RemoveAllPoints();
-
        _cntSplineX->Delete();
        _cntSplineY->Delete();
        _cntSplineZ->Delete();
 }
+
 // ----------------------------------------------------------------------------
 int manualContourModel::AddPoint(double x,double y,double z)
 {
@@ -88,7 +78,6 @@ int manualContourModel::AddPoint(double x,double y,double z)
    mp->SetPoint(x,y,z);
    AddManualPoint(mp);
    //UpdateSpline();
-
    return _lstPoints.size()-1;
 }
 // ----------------------------------------------------------------------------
@@ -187,6 +176,7 @@ void manualContourModel::DeleteAllPoints()
 
 void manualContourModel::MovePoint(int i,double dx,double dy,double dz)
 {
+printf("EED manualContourModel::MovePoint %p \n", this);
        manualPoint *mp=_lstPoints[i];
        double x=mp->GetX()+dx;
        double y=mp->GetY()+dy;
@@ -337,7 +327,8 @@ void manualContourModel::UpdateSpline() // virtual
                _delta_JSTG = (double) (np) / double (_sizePointsContour - 1);  //Without the -1 the curve is not close
        } else {
 //             _delta_JSTG = (double) (np-1) / double (_sizePointsContour );  //Without the -1 the curve is not close
-               _delta_JSTG = (double) (np) / double (_sizePointsContour-1 );  //Without the -1 the curve is not close
+//EED 9/7/2016                 _delta_JSTG = (double) (np) / double (_sizePointsContour-1 );  //Without the -1 the curve is not close
+               _delta_JSTG = (double) (np-1) / double (_sizePointsContour-1 );  //Without the -1 the curve is not close
        }
 //-----------------------------------------------------------------------------------------------------------
 }
@@ -364,7 +355,7 @@ void manualContourModel::GetSpline_i_Point(int i, double *x, double *y, double *
 //JSTG 25-02-08 ---------------------------------------------------------------
 void manualContourModel::GetSpline_t_Point(double t, double *x, double *y, double *z)
 {
-               if (_lstPoints.size()==0)
+       if (_lstPoints.size()==0)
        {
                *x      = 0;
                *y      = 0;
@@ -387,8 +378,6 @@ void manualContourModel::GetSpline_t_Point(double t, double *x, double *y, doubl
 }
 
 // ----------------------------------------------------------------------------
-
-
 /*void manualContourModel::GetSplinePoint(double t, double &x, double &y, double &z)
 {
        if (_lstPoints.size()==0)
@@ -412,32 +401,30 @@ void manualContourModel::GetSpline_t_Point(double t, double *x, double *y, doubl
                z       = _cntSplineZ->Evaluate(t);
        }
 }*/
+
 // ----------------------------------------------------------------------------
-double manualContourModel::GetPathSize()
+double manualContourModel::GetPathSize(double *spc)
 {
        double result = 0;
        double x1,y1,z1;
        double x2,y2,z2;
-
 // JSTG 25-02-08 -----------------------------
        //double t,delta;
        //int i,np,nps;
        int i;
 //--------------------------------------------
-
        if (_lstPoints.size()==2)
        {
-               x1=_lstPoints[0]->GetX();
-               y1=_lstPoints[0]->GetY();
-               z1=_lstPoints[0]->GetZ();
-               x2=_lstPoints[1]->GetX();
-               y2=_lstPoints[1]->GetY();
-               z2=_lstPoints[1]->GetZ();
+               x1 = spc[0] * _lstPoints[0]->GetX();
+               y1 = spc[1] * _lstPoints[0]->GetY();
+               z1 = spc[2] * _lstPoints[0]->GetZ();
+               x2 = spc[0] * _lstPoints[1]->GetX();
+               y2 = spc[1] * _lstPoints[1]->GetY();
+               z2 = spc[2] * _lstPoints[1]->GetZ();
                result = sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) + (z2-z1)*(z2-z1) );
        }
        if (_lstPoints.size()>2)
        {
-
 // JSTG 25-02-08 ------------------------------------------
                //np  = _lstPoints.size( );
                //nps = 200;
@@ -445,13 +432,18 @@ double manualContourModel::GetPathSize()
                UpdateSpline();
                //GetSplinePoint(0,x1,y1,z1);
                GetSpline_i_Point(0,&x1,&y1,&z1);
-
+               x1 = spc[0] * x1; 
+               y1 = spc[1] * y1; 
+               z1 = spc[2] * z1; 
                //for( i = 1; i < nps; i++ )
                for( i = 1; i < GetNumberOfPointsSpline(); i++ )
                {
                        //t = delta * (double)i;
                        //GetSplinePoint(t,x2,y2,z2);
                        GetSpline_i_Point(i,&x2,&y2,&z2);
+                       x2 = spc[0] * x2; 
+                       y2 = spc[1] * y2; 
+                       z2 = spc[2] * z2; 
 //---------------------------------------------------------
                        result=result + sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) + (z2-z1)*(z2-z1) );
                        x1=x2;
@@ -459,11 +451,11 @@ double manualContourModel::GetPathSize()
                        z1=z2;
                }// for
        }
-
        return result;
 }
+
 // ----------------------------------------------------------------------------
-double manualContourModel::GetPathArea()
+double manualContourModel::GetPathArea(double *spc)
 {
        double result = 555;
        if ((_lstPoints.size()>=3) && IfCloseContour()==true )
@@ -476,7 +468,6 @@ double manualContourModel::GetPathArea()
                double x2,y2,z2;
                bool okArea=true;
                int i, j;
-
                // This uses Green's theorem:
                // A = 1/2 * sum( xiyi+1 - xi+1yi); pO == pN
                // A < 0 -> A = |A| (a negative value could raise because points are
@@ -498,9 +489,13 @@ double manualContourModel::GetPathArea()
                        GetSpline_i_Point(i,&x1,&y1,&z1);
                        GetSpline_i_Point(j,&x2,&y2,&z2);
 //----------------------------------------------------------------
-                       area +=
-                                       (x1 * y2 ) -
-                                       ( x2 * y1 );
+                       x1=spc[0]*x1;
+                       y1=spc[1]*y1;
+                       z1=spc[2]*z1;
+                       x2=spc[0]*x2;
+                       y2=spc[1]*y2;
+                       z2=spc[2]*z2;
+                       area += (x1 * y2 ) - ( x2 * y1 );
                        if (z1!=z2)
                        {
                                okArea=false;
@@ -543,7 +538,6 @@ double manualContourModel::GetPathArea()
 // p[x,y,z]   :  data in
 // rp[x,y,z]  :  data out  result point
 // rn[x,y,z]  :  data out   result normal
-
 void manualContourModel::GetNearestPointAndNormal(double *p, double *rp,  double *rn)
 {
        double  distMin=999999999;
@@ -589,12 +583,11 @@ void manualContourModel::GetNearestPointAndNormal(double *p, double *rp,  double
                                rn[0] = x2-x1;
                                rn[1] = y2-y1;
                                rn[2] = z2-z1;
-                       }
-                       x2=x1;
-                       y2=y1;
-                       z2=z1;
+                       } // if
+                       x2 = x1;
+                       y2 = y1;
+                       z2 = z1;
                }// for
-
 // JSTG 25-02-08 ------------------------------------------
                //if (tback==0)
                if (iback==0)
@@ -603,24 +596,22 @@ void manualContourModel::GetNearestPointAndNormal(double *p, double *rp,  double
                        //GetSplinePoint(t,x1,y1,z1);
                        GetSpline_i_Point(i,&x1,&y1,&z1);
 //----------------------------------------------------------
-                       rn[0]=rp[0]-x1;
-                       rn[1]=rp[1]-y1;
-                       rn[2]=rp[2]-z1;
-               }
-       }
-       else
-       {
+                       rn[0] = rp[0]-x1;
+                       rn[1] = rp[1]-y1;
+                       rn[2] = rp[2]-z1;
+               } // if iback 
+       } else {
                rp[0] = 0;
                rp[1] = 0;
                rp[2] = 0;
                rn[0] = -1;
                rn[1] = 0;
                rn[2] = 0;
-       }
+       } // if np
 }
 
 // ----------------------------------------------------------------------------
-manualContourModel * manualContourModel :: Clone() // virtual
+manualContourModel * manualContourModel::Clone() // virtual
 {
        manualContourModel * clone = new manualContourModel();
        CopyAttributesTo(clone);
@@ -680,9 +671,11 @@ void manualContourModel::SaveData(FILE *ff)
 {
        std::string etiqueta = GetLabel();
        if(etiqueta.empty())
+       {
                fprintf(ff,"Label: NO_LABEL\n");
-       else
+       } else {
                fprintf(ff,"Label: %s\n",etiqueta.c_str());
+       } // if etiqueta
        fprintf(ff,"Real_Size: %f\n",GetRealSize());
 }
 
@@ -695,8 +688,9 @@ void manualContourModel::OpenData(FILE *ff)
        std::cout<<tmp<<std::endl;
        //if(strcmp(tmp != "NO_LABEL") // JPR
        if(strcmp(tmp,"NO_LABEL") != 0)
+       {
                SetLabel(tmp);
-
+       }
        fscanf(ff,"%s",tmp); // Real_size
        fscanf(ff,"%s",tmp);// #
 
@@ -757,11 +751,6 @@ void manualContourModel::Transform_Ax_Plus_B (double Ax, double Bx, double Ay, d
 
 
 //CMRU 17-08-09----------------------------------------------------------------------------
-void manualContourModel::SetLabel(std::string newLabel)
-{
-       _label = newLabel;
-}
-
 void manualContourModel::SetRealSize(double newRealSize) 
 {
        _realSize = newRealSize;
@@ -772,8 +761,4 @@ double manualContourModel::GetRealSize()
        return _realSize;
 }
 
-std::string manualContourModel::GetLabel()
-{
-       return _label;
-}
 //----------------------------------------------------------------------------