X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2FContour%2FAutoControlPoints.cxx;h=88a8a7a1fde85658b6692c414cf5e4f7b73ed8da;hb=f9901e756bb82bd333310b47607875331616bb29;hp=21f8f545d8f73966c4372827ae7d6e8d9580d7dc;hpb=3fdde2fc9525d85df4fcdd49dab89ab19266cf84;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/Contour/AutoControlPoints.cxx b/lib/maracasVisuLib/src/interface/wxWindows/Contour/AutoControlPoints.cxx index 21f8f54..88a8a7a 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/Contour/AutoControlPoints.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/Contour/AutoControlPoints.cxx @@ -1,3 +1,28 @@ +/*# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sant�) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ */ + #include "AutoControlPoints.h" //------------------------------------------------------------------------------------------------------------------------------------------ //CLASS: AutoControlPoints ----------------------------------------------------------------------------------------------------------------- @@ -234,17 +259,26 @@ void AutoControlPoints::CirclePoints(double cx, double cy, double r, double grad _chargecontrolpointsY.push_back(y); _chargecontrolpointsZ.push_back(z); } - _pathsize = _mContourModel->GetPathSize(); -//printf("\nPATH SIZE = %f",_pathsize); - std::ofstream file1; - file1.open( "4_SplinePoints.txt" ); +// EED 2017-05-30 +// _pathsize = _mContourModel->GetPathSize( ); + double spc[3]; + spc[0]=1; + spc[1]=1; + spc[2]=1; + _pathsize = _mContourModel->GetPathSize( spc ); - for(int i = 0; i < numspline; i++){ - file1<<"X= "<<_chargecontrolpointsX[i] << "\tY= "<<_chargecontrolpointsY[i] << "\tZ= "<<_chargecontrolpointsZ[i]<size(); j++) + for(j=0; j<(int)(InX->size()); j++) { jj = (j+1)%(InX->size()); m2 = Slope((*InX)[j],(*InY)[j],(*InX)[jj],(*InY)[jj]);//Slope of the vector between the adjacent points @@ -433,7 +467,7 @@ JCP 26-09-2008*/ tempDD.push_back(_interbewteencircleDist[i]); // fprintf(fdata,"\n%f %f %f",_interbewteencircleDist[j],_interbewteencircleX[j],_interbewteencircleY[j]); } - for(i=_interbewteencirclePos[0]; i<_intercircleX.size(); i++) + for(i=_interbewteencirclePos[0]; i<(int)(_intercircleX.size()); i++) { tempXX.push_back(_intercircleX[i]); tempYY.push_back(_intercircleY[i]); @@ -452,15 +486,15 @@ JCP 26-09-2008*/ //DELETE!! - std::ofstream file1; - file1.open( "1_Intersection.txt" ); - - for(int i = 0; i < _intercircleX.size(); i++){ - file1<<"X= "<<_intercircleX[i] << "\tY= "<<_intercircleY[i] << "\tDist= "<<_intercircleDist[i]<*InX, std::vecto vecX->set_var(_chargecontrolpointsX[i]); vecY->set_var(_chargecontrolpointsY[i]); - for(j=0; jsize(); j++) + for(j=0; j<(int)(InX->size()); j++) { jj = (j+1)%(InX->size()); m2 = Slope((*InX)[j],(*InY)[j],(*InX)[jj],(*InY)[jj]); @@ -737,7 +774,7 @@ void AutoControlPoints::IntersectionPoints() printf("\n\n There is an invalid intersection: Must see AutoControlPoints::IntersectionPoints() method"); } JCP 30-08-09 */ - for(i=0; i<_intervectorX.size(); i++){ + for(i=0; i<(int)(_intervectorX.size()); i++){ min = 9999; posj = -1; for(j=0; j<_intervectorX[i].getsize_vec(); j++) { @@ -760,7 +797,7 @@ JCP 30-08-09 */ { //TYPE: LE PLUS PRES VOISIN dist = sqrt( pow( _intervectorX[i].get_vec(j)-_interpointsX[i-1],2 ) + pow( _intervectorY[i].get_vec(j)-_interpointsY[i-1],2 ) ); - //TYPE: LE PLUS PRES DANS LA MÊME DROITE + //TYPE: LE PLUS PRES DANS LA M�ME DROITE //dist = sqrt(pow(_intervectorX[i].get_vec(j)-_intervectorX[i].get_var(),2)+pow(_intervectorY[i].get_vec(j)-_intervectorY[i].get_var(),2)); if( dist < min ) @@ -814,14 +851,14 @@ void AutoControlPoints::ErrorBetweenContours() // FILE *fd; // fd = fopen("C:/bbtk_JS/data/interErrorData.txt","w"); - for(i=0; i<_interpointsX.size(); i++) + for(i=0; i<(int)(_interpointsX.size()); i++) { _errorvector.push_back( (sqrt( pow( _interpointsX[i]-_intervectorX[i].get_var(),2 ) + pow( _interpointsY[i]-_intervectorY[i].get_var(),2 ) )/_pathsize)*100 ); // fprintf(fd,"\n%d %f",i,_errorvector[i]); } // fclose(fd); double max = -1; - for(i=0; i<_errorvector.size(); i++) + for(i=0; i<(int)(_errorvector.size()); i++) { if(_interpointsX[i] != -1) { @@ -847,19 +884,19 @@ void AutoControlPoints::AddControlPoint(bool activate) { if(_errorpos != -1) { - double xmax = _interpointsX[_errorpos]; - double ymax = _interpointsY[_errorpos]; - double xx = _intervectorX[_errorpos].get_var(); - double yy = _intervectorY[_errorpos].get_var(); + double xmax = _interpointsX[(int)_errorpos]; + double ymax = _interpointsY[(int)_errorpos]; + double xx = _intervectorX[(int)_errorpos].get_var(); + double yy = _intervectorY[(int)_errorpos].get_var(); printf("\n XMAX = %f, YMAX = %f, XX = %f, YY = %f",xmax,ymax,xx,yy); int i,ii,j,posA=-1,posB=-1; bool findA=false, findB=false; //CASE A - for(i=_errorpos; findA!=true; i++) + for(i=(int)_errorpos; findA!=true; i++) { ii = i%_errorvector.size(); - for(j=0; j<_controlpointsX.size(); j++) + for(j=0; j<(int)(_controlpointsX.size()); j++) { if( ((float)_controlpointsX[j]-1.5<=(float)_intervectorX[ii].get_var()) && ((float)_intervectorX[ii].get_var()<=(float)_controlpointsX[j]+1.5) && ((float)_controlpointsY[j]-1.5<=(float)_intervectorY[ii].get_var()) && ((float)_intervectorY[ii].get_var()<=(float)_controlpointsY[j]+1.5) ) @@ -870,13 +907,13 @@ printf("\n XMAX = %f, YMAX = %f, XX = %f, YY = %f",xmax,ymax,xx,yy); } } //CASE B - for(i=_errorpos; findB!=true; i--) + for(i=(int)_errorpos; findB!=true; i--) { if(_errorpos==-1) { i = _errorvector.size(); } - for(j=0; j<_controlpointsX.size(); j++) + for(j=0; j<(int)(_controlpointsX.size()); j++) { if( ((float)_controlpointsX[j]-1.5<=(float)_intervectorX[i].get_var()) && ((float)_intervectorX[i].get_var()<=(float)_controlpointsX[j]+1.5) && ((float)_controlpointsY[j]-1.5<=(float)_intervectorY[i].get_var()) && ((float)_intervectorY[i].get_var()<=(float)_controlpointsY[j]+1.5) ) @@ -893,7 +930,7 @@ printf("\n XMAX = %f, YMAX = %f, XX = %f, YY = %f",xmax,ymax,xx,yy); if(posA tempX; std::vector tempY; std::vector tempZ; - for(i=0; i<_controlpointsX.size(); i++) + for(i=0; i<(int)(_controlpointsX.size()); i++) { if(i == id) { @@ -952,7 +989,7 @@ void AutoControlPoints::InterBetweenControl( ) // FILE *fd; // fd = fopen("C:/bbtk_JS/data/InterBetweenControl.txt","w"); - for(i=0; i<_chargecontrolpointsX.size()-1; i++) + for(i=0; i<(int)(_chargecontrolpointsX.size())-1; i++) { ii = (i+1)%(_chargecontrolpointsX.size()); m1 = Slope(_chargecontrolpointsX[i],_chargecontrolpointsY[i],_chargecontrolpointsX[ii],_chargecontrolpointsY[ii]); @@ -965,7 +1002,7 @@ void AutoControlPoints::InterBetweenControl( ) vecX->set_var(_chargecontrolpointsX[i]); vecY->set_var(_chargecontrolpointsY[i]); - for(j=0; j<_chargecontrolpointsX.size(); j++) + for(j=0; j<(int)(_chargecontrolpointsX.size()); j++) { jj = (j+1)%(_chargecontrolpointsX.size()); m2 = Slope(_chargecontrolpointsX[j],_chargecontrolpointsY[j],_chargecontrolpointsX[jj],_chargecontrolpointsY[jj]); @@ -1021,7 +1058,7 @@ void AutoControlPoints::fixBetweenControl() float vecx,vecy,varx,vary; // FILE *fd; // fd = fopen("C:/bbtk_JS/data/InterBetweenControlFix.txt","w"); - for(i=0; i<_intervecXX.size(); i++) + for(i=0; i<(int)(_intervecXX.size()); i++) { Vector *vx = new Vector(); Vector *vy = new Vector(); @@ -1063,7 +1100,7 @@ void AutoControlPoints::PossibleIntersections( std::vector*InX, std::vec tempX.clear(); tempY.clear(); int i,j,k; - //double dist1,dist2; + //double dist1,dist2; // JPRx //EED 22 Sep 2008 // FILE *fd; /* @@ -1119,7 +1156,7 @@ void AutoControlPoints::PossibleIntersections( std::vector*InX, std::vec if(_intervectorX.size() != 0) { // fd = fopen("C:/bbtk_JS/data/InterPossibleIntersections.txt","w"); - for(i=0; i<_intervectorX.size(); i++) + for(i=0; i<(int)(_intervectorX.size()); i++) { // fprintf(fd,"\n Para X = %f, Y = %f",_intervectorX[i].get_var(),_intervectorY[i].get_var()); if(_intervectorX[i].getsize_vec() > 1) @@ -1136,7 +1173,7 @@ void AutoControlPoints::PossibleIntersections( std::vector*InX, std::vec ity = arrY.begin(); itxx = arrX.begin()+1; ityy = arrY.begin()+1; - for(j=0; j _intervectorX[i].get_var()) && (*ity < _intervectorY[i].get_var()) && @@ -1225,7 +1262,7 @@ void AutoControlPoints::PossibleIntersections( std::vector*InX, std::vec _intervectorX[i].resetVec(); _intervectorY[i].resetVec(); //printf("\n _intervector(%d) Size = %d",i,_intervectorX[i].getsize_vec()); - for(k=0; k x_int = %f, y_int = %f",arrX[k],arrY[k]); @@ -1247,10 +1284,10 @@ void AutoControlPoints::ControlInContour(std::vector*InX, std::vectorsize()) && (find!=true); j++) + for(j=0; (j<(int)(InX->size())) && (find!=true); j++) { if( ((*InX)[j]-range<=_controlpointsX[i]) && (_controlpointsX[i]<=(*InX)[j]+range) && ((*InY)[j]-range<=_controlpointsY[i]) && (_controlpointsY[i]<=(*InY)[j]+range) ) { @@ -1275,13 +1312,11 @@ void AutoControlPoints::NearMaxError2Control() nearp = distA; _posn = _posA; - } - else - { + } else { nearp = distB; _posn = _posB; - } - } + } // if dist + } // if interpointsX } //----------------------------------------------------------------------------------------------------------------------------------------- void AutoControlPoints::MoveControlPointInContour(std::vector*InX, std::vector*InY, std::vector*InZ) @@ -1301,7 +1336,7 @@ for(i=0; i<_controlpointsX.size(); i++) PossibleIntersections(InX,InY,InZ); IntersectionPoints(); ErrorBetweenContours(); - //double promIn = vf->promVector(&_errorvector,false); + //double promIn = vf->promVector(&_errorvector,false); // JPRx std::vector tempX; std::vector tempY; @@ -1317,21 +1352,19 @@ for(i=0; i<_controlpointsX.size(); i++) _controlpointsY.clear(); _controlpointsZ.clear(); - for(i=0; i prom; i++) { prom = promactual; - for(i=0; i*InX, std:: tempY.clear(); vf->copyVector(&_controlpointsX,&tempX); vf->copyVector(&_controlpointsY,&tempY); - int i,j,pos = 0; + int i,j /*,pos = 0*/ ; // JPRx double prom1=0,promactual1=1; - double prom2=0,promactual2=1; + //double prom2=0,promactual2=1; // JPRx int h = 0; int hh = 1; if(_contIncontpos[h]>_contIncontpos[hh]) @@ -1432,7 +1463,7 @@ double AutoControlPoints::MoveAndAverage(int dir, std::vector*InX, std:: ity = _controlpointsY.begin(); for(i=_contIncontpos[h],j=_contIncontpos[h]; (i>_contIncontpos[hh]) && (promactual1>prom1); i--) { - if(j == InX->size()) + if(j == (int)(InX->size())) { j = 0; } @@ -1468,8 +1499,8 @@ double AutoControlPoints::MoveAndAverage(int dir, std::vector*InX, std:: ErrorBetweenContours(); promactual1 = vf->promVector(&_errorvector,false); j--; - } - } + } // if j + }// for i delete vf; } return 99999; @@ -1503,7 +1534,7 @@ printf("\n"); _controlpointsZ.clear(); vf->copyVector(&_minmaxlocalX,&_controlpointsX); vf->copyVector(&_minmaxlocalY,&_controlpointsY); - for(int i=0; i<_minmaxlocalX.size(); i++) + for(int i=0; i<(int)(_minmaxlocalX.size()); i++) { _controlpointsZ.push_back( (*InZ)[0] ); } @@ -1547,10 +1578,11 @@ printf("\n"); int inicontrolpoints = cpX.size(); double inipercentage = (inicontrolpoints*100)/InX->size(); int h=0; + if(inicontrolpoints<10) { int points = (int)((inipercentage*3*InX->size())/100); - for (int i=0; isize(); i++, h++) + for (int i=0; i<(int)(InX->size()); i++, h++) { if( h == points ) { @@ -1558,13 +1590,14 @@ printf("\n"); _controlpointsY.push_back( (*InY)[i] ); _controlpointsZ.push_back( (*InZ)[i] ); h = 0; - } - } - } + } // if h + } // for i + } // if initontrolpoints + if(inicontrolpoints>=10) { int points = (int)((inipercentage*2*InX->size())/100); - for (int i=0; isize(); i++, h++) + for (int i=0; i<(int)(InX->size()); i++, h++) { if( h == points ) { @@ -1572,9 +1605,9 @@ printf("\n"); _controlpointsY.push_back( (*InY)[i] ); _controlpointsZ.push_back( (*InZ)[i] ); h = 0; - } - } - } + } // if h + } // for int i + } // if inicontrolpoints } /* fixBetweenPoints(5.0); @@ -1621,7 +1654,7 @@ void AutoControlPoints::GetInitialNewPoints(std::vector*InX, std::vector _controlpointsZ.clear(); vf->copyVector(&_minmaxlocalX,&_controlpointsX); vf->copyVector(&_minmaxlocalY,&_controlpointsY); - for(int i=0; i<_minmaxlocalX.size(); i++) + for(int i=0; i<(int)(_minmaxlocalX.size()); i++) { _controlpointsZ.push_back( (*InZ)[0] ); } @@ -1681,7 +1714,6 @@ void AutoControlPoints::CalculeControlPoints(std::vector*InX, std::vecto //----------------------------------------------------------------------------------------------------------------------------------------- void AutoControlPoints::CalculeInitialControlPoints(std::vector*InX, std::vector*InY, std::vector*InZ) { - _controlpointsX.clear(); _controlpointsY.clear(); _controlpointsZ.clear();