From 7b91efa7e6d921f24cb999200d3169a24388f78d Mon Sep 17 00:00:00 2001 From: Eduardo DAVILA Date: Mon, 10 May 2021 17:55:19 +0200 Subject: [PATCH] Redistribution SIN --- ...bcreaMaracasVisuManualContourModel_Box.cxx | 169 +++++++++++++++--- .../bbcreaMaracasVisuManualContourModel_Box.h | 1 + 2 files changed, 145 insertions(+), 25 deletions(-) diff --git a/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.cxx b/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.cxx index 0d9bffe..c8db827 100644 --- a/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.cxx +++ b/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.cxx @@ -204,8 +204,8 @@ void ManualContourModel_Box::PutPointsInContour(std::vector *lstTmpX, { iGeneral = iGeneral + (*lstOutIndexs)[iContour-1]; SizeContour = (*lstOutIndexs)[iContour]; + iGeneralPlusSize = iGeneral + SizeContour; } // for iContour - iGeneralPlusSize = iGeneral + SizeContour; if(SizeContour==(*lstTmpX).size() ) { @@ -250,27 +250,144 @@ double ManualContourModel_Box::SizeContour( std::vector *lstX, return dist; } + void ManualContourModel_Box::Redistribution_SIN( double alpha, double beta, - std::vector *lstInX, - std::vector *lstInY, - std::vector *lstInZ, - std::vector *lstOutX, - std::vector *lstOutY, - std::vector *lstOutZ ) + std::vector *lstC1X, + std::vector *lstC1Y, + std::vector *lstC1Z, + double sizeOfContour, + std::vector *lstC2X, + std::vector *lstC2Y, + std::vector *lstC2Z ) { - int i,sizeLstInX=(*lstInX).size(); - (*lstOutX).clear(); - (*lstOutY).clear(); - (*lstOutZ).clear(); - for ( i=0 ; i lstRstX; + std::vector lstRstY; + std::vector lstRstZ; + int ii,iGeneral; + double iiByDelta; + int size,iGeneralPlusSize; + double Alpha,Beta,t,tt, PI=3.14159265; + double TwoPI=2*PI; + double dist=sizeOfContour; + double dist2,distSeg,delta; + double dd,dx,dy,dz; + int i,k; + int firstK; + double tmpX,tmpY,tmpZ; + iGeneral=0; +// for (iLstIndexOut=0; iLstIndexOut2) + { +// dist=0; +// for ( i=iGeneral ; i1) { tt=tt-1; } + if (tt<0) { tt=tt+1; } + iiByDelta = tt * dist; +//} else { +// iiByDelta = ii*delta; +//} + +// dx = (*lstOutX)[k+1]-(*lstOutX)[k]; +// dy = (*lstOutY)[k+1]-(*lstOutY)[k]; +// dz = (*lstOutZ)[k+1]-(*lstOutZ)[k]; + dx = (*lstC1X)[k+1]-(*lstC1X)[k]; + dy = (*lstC1Y)[k+1]-(*lstC1Y)[k]; + dz = (*lstC1Z)[k+1]-(*lstC1Z)[k]; + distSeg = sqrt( dx*dx + dy*dy + dz*dz ); + if ( dist2+distSeg >= iiByDelta ) + { + if (distSeg==0) + { + dd = 0; + } else { + dd=(iiByDelta-dist2)/distSeg; + }// if distSeg == 0 + lstRstX.push_back( (*lstC1X)[k] + dd*dx ); + lstRstY.push_back( (*lstC1Y)[k] + dd*dy ); + lstRstZ.push_back( (*lstC1Z)[k] + dd*dz ); + if (ii==0) { firstK=k; } + k = iGeneralPlusSize-1; + } else { + if ( k==iGeneral+size-2 ) + { + dd = 1; + lstRstX.push_back( (*lstC1X)[k] + dd*dx ); + lstRstY.push_back( (*lstC1Y)[k] + dd*dy ); + lstRstZ.push_back( (*lstC1Z)[k] + dd*dz ); + } + }// if dist2 + dist2 = dist2+distSeg; + } // for k + } //for i + + + if (lstRstX.size()!=size) + { + printf("EED Warnning! ManualContourModel_Box::Redistribution_SIN >> This list is not coherent iLstIndexOut=%d lstRstX.size()=%d size=%d\n",iLstIndexOut, lstRstX.size(), size); + tmpX = lstRstX[iGeneral]; + tmpY = lstRstY[iGeneral]; + tmpZ = lstRstZ[iGeneral]; + lstRstX.push_back( tmpX ); + lstRstY.push_back( tmpY ); + lstRstZ.push_back( tmpZ ); + } + for (i=iGeneral; i2 +// iGeneral=iGeneral+size; +// }// for iLstIndexOut +printf("EED ManualContourModel_Box::Redistribution_SIN End \n"); } + void ManualContourModel_Box::CopyContour2InContour1( std::vector *lstInX, std::vector *lstInY, @@ -306,10 +423,10 @@ double ManualContourModel_Box::IntegralDistanceTwoContours(std::vector * int iSize = (*lstTmpAX).size(); for ( i=0 ; i *lstInX, std::vector *lstInY, std::vector *lstInZ, @@ -913,8 +1029,11 @@ void ManualContourModel_Box::Process() ShiftValues( &lstOutX, &lstOutY, &lstOutZ, &lstIndexsOut ); // Step 3.3. SIN Normalice points around contours // RedistributionPoints_SIN_iContour(-1, &lstOutX,&lstOutY,&lstOutZ,&lstIndexsOut,-1,-1); -// RedistributionPointsAllContours_SIN( &lstOutX,&lstOutY,&lstOutZ,&lstIndexsOut); -// ShiftValues( &lstOutX, &lstOutY, &lstOutZ, &lstIndexsOut ); + +if (bbGetInputParam()[0]==1) +{ + RedistributionPointsAllContours_SIN( &lstOutX,&lstOutY,&lstOutZ,&lstIndexsOut); +} // Step 3.4 Transpose the vectors lstInX.clear(); lstInY.clear(); diff --git a/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.h b/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.h index 683ee71..c8a0676 100644 --- a/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.h +++ b/bbtk/src/bbcreaMaracasVisuManualContourModel_Box.h @@ -83,6 +83,7 @@ void Redistribution_SIN( double alpha, std::vector *lstC1X, std::vector *lstC1Y, std::vector *lstC1Z, + double sizeOfContour, std::vector *lstC2X, std::vector *lstC2Y, std::vector *lstC2Z ); -- 2.45.1