axisExtractor02 Class Reference

#include <axisExtractor02.h>

List of all members.

Public Member Functions

void PrintSelf (ostream &os, vtkIndent indent)
virtual void SetInput (vtkImageData *input)
vtkImageData * GetInput ()
vtkPolyData * GetOutput ()
void SetParam (double value)
double GetParam ()
void SetParam2 (double value)
double GetParam2 ()
void SetParam3 (double value)
double GetParam3 ()
void SetMaxant (int value)
int GetMaxant ()
void SetMinant (int value)
int GetMinant ()
void SetPoint (double value[3])
vtkImageData * GetVolumen ()
void distanciaejes (vtkPolyData *eje1, vtkPolyData *eje2)
void blanquear (vtkImageData *data)
void copiar (vtkImageData *data, vtkImageData *data2)

Static Public Member Functions

static axisExtractor02New ()

Protected Member Functions

 axisExtractor02 ()
 ~axisExtractor02 ()
void Execute ()

Private Member Functions

 axisExtractor02 (const axisExtractor02 &)
void operator= (const axisExtractor02 &)
void realtoreal (double a[3], double b[3])
void realtoreal2 (double a[3], double b[3])
void realtoindex (double a[3], int b[3])
void indextoreal (int a[3], double b[3])
void indextoreal (double a[3], double b[3])
double distanciaejepunto (double point[3], double point2[3], double point3[3])
double proporcioejepunto (double point[3], double point2[3], double point3[3])
void searc (int i, int j, int k, vtkImageData *data, vtkImageData *data2, unsigned char label, unsigned long vector[50][4])
void searcb (int i, int j, int k, vtkImageData *data, vtkImageData *data2, unsigned char label, unsigned long vector[50][4])
unsigned char find_components (vtkImageData *data, vtkImageData *data2, unsigned char label, unsigned long vector[50][4])
unsigned char find_componentsb (vtkImageData *data, vtkImageData *data2, unsigned char label, unsigned long vector[50][4])
int proporcion (vtkImageData *data)
bool border (vtkImageData *data, int p1[3])
void optim (vtkImageData *data, vtkImageData *data2)
void costominimo (vtkImageData *data, vtkImageData *data2)
void costominimo2 (vtkImageData *data, vtkImageData *data3, int p1[3], int p2[3], int p3[3])
void invertir (vtkImageData *data)
void redondear (vtkImageData *data)
void redondear2 (vtkImageData *data)
void redondear3 (vtkImageData *data)
double distancia (double a[3], double b[3])
double distancia (int a[3], int b[3])
void blanquear3 (vtkImageData *data)
void blanquear2 (vtkImageData *data)
void cilindro (vtkImageData *data, double vector[3])
void modelo (vtkImageData *data, unsigned char cantidad, unsigned long vector[50][4], int candit[10][3], double radioactual, double minis[10])
void comparacion (vtkImageData *data, vtkImageData *data2, unsigned long minis[4])
void copiar2 (vtkImageData *data, vtkImageData *data2)
double angulo (double a[3], double b[3])
double angulo (double i1, double j1, double k1, double i2, double j2, double k2)
int envolumen (int a[3], vtkImageData *datae)
int mincandit (int candit[10][3], int cantidad, double puntoanterior[3])
int maxareacandit (unsigned long vector[50][4], int cantidad)
unsigned long totalarea (unsigned long vector[50][4], unsigned long vectorb[50][4], int cantidad, int cantidadb)
unsigned long conecarea (unsigned long vector[50][4], int cantidad)
int bruled (int candit[10][3], int cantidad, vtkImageData *data4)
double correction (int candit[10][3], int cantidad, vtkImageData *data, int indicecorregido[3], double puntocorregido[3], int indiceanterior[3], double radioanterior, int indicepre[3], double radiopre)
double correction2 (int candit[10][3], int cantidad, vtkImageData *data, int indicecorregido[3], double puntocorregido[3], int indiceanterior[3], double radioanterior)
void avanzar ()
void todo ()
void paso ()
void rama ()
void segmento ()

Private Attributes

int extprin0 [6]
double espprin [3]
int extprin [6]
vtkImageEuclideanDistance * distance
vtkExtractVOI * extrac
vtkImageSeedConnectivity * connect
vtkImageResample * resample
vtkImageData * data1
vtkImageData * data2
vtkImageData * data3
vtkImageData * data4
vtkImageData * data6
int flagg
int flagg2
vtkPoints * points
vtkCellArray * lineas
int buenos
std::deque< double > m_Stack0
std::deque< double > m_Stack1
std::deque< double > m_Stack2
std::deque< double > m_Stack3
std::deque< double > m_Stack4
std::deque< double > m_Stack5
std::deque< double > m_Stack6
std::deque< double > m_Stack7
std::deque< double > m_Stack8
std::deque< int > m_Stack
std::deque< double > m_Stackr
std::deque< double > m_Stackra
std::deque< double > m_Stackrp
double puntoanteriorr [3]
unsigned short max
unsigned long cantt
double sum
double sumc
double sums
double sumk
double kurt
double slew
double des
double prom
unsigned short min
double kurt1
double slew1
unsigned short max2
unsigned long cant
double sumi
double sumii
double kurt2
double slew2
double des2
double inerciaii
double centi
unsigned short min2
unsigned short max3
unsigned long cant2
double sumi2
double sumii2
double kurt3
double slew3
double des3
double inerciaii2
double centi2
unsigned short min3
float tmin
float tmax
unsigned int hist [2000]
int maxant
int minant
double totalMean
double variance
double maxVariance
double zerothCumuMoment
double firstCumuMoment
double variance2
double maxVariance2
double zerothCumuMoment2
double firstCumuMoment2
double variance3
double maxVariance3
double zerothCumuMoment3
double firstCumuMoment3
double firstCumuMomentb
double firstCumuMomentb2
double firstCumuMomentb3
double kurtt
double slewt
int thresholdPoint
int thresholdPoint1
int thresholdPoint2
double w [3]
double V [3][3]
int ejemin
double w2 [3]
double V2 [3][3]
int ejemin2
double wi [3]
double Vi [3][3]
int ejemini
double centx
double centy
double centz
double centx2
double centy2
double centz2
double centix
double centiy
double centiz
double A [3][3]
double A2 [3][3]
double Ai [3][3]
double wp [3]
double Vp [3][3]
int ejeminp
double w2p [3]
double V2p [3][3]
int ejemin2p
double centxp
double centyp
double centzp
double centx2p
double centy2p
double centz2p
double centixp
double centiyp
double centizp
double costo
double costop
double Ap [3][3]
double A2p [3][3]
int candit [10][3]
double minis [10]
double inerciar
double inerciarp
double inerciari
double inerciary
double inerciarz
double inerciariy
double inerciariz
double inerciarpy
double inerciarpz
double inercia2r
double inercia2rp
double mejor [3]
int visited [10][3]
double visitedrad [10]
int frama
int fseg
double mejordst
double mejorrad
int mejorcant
double param
double param2
double param3
double param4
FILE * stream

Detailed Description

Definition at line 35 of file axisExtractor02.h.


Constructor & Destructor Documentation

axisExtractor02::axisExtractor02 (  )  [protected]

Definition at line 198 of file axisExtractor02.cxx.

References connect, data1, data2, data3, data4, data6, distance, extrac, New(), param, param2, param3, and param4.

00198                                  {
00199 
00200 
00201         this->NumberOfRequiredInputs = 1;
00202         this->param=1;
00203         this->param2=1;
00204         this->param3=0.5;
00205         this->param4=0;
00206         
00207         /*this->resample= vtkImageResample::New();
00208         this->resample->SetDimensionality (3);*/
00209 
00210         this->data4=vtkImageData::New();        
00211 
00212         this->data1=vtkImageData::New();
00213         this->data2=vtkImageData::New();
00214         this->data3=vtkImageData::New();
00215         this->data6=vtkImageData::New();
00216                 
00217         this->extrac = vtkExtractVOI::New();
00218 //      this->extrac->SetInput(resample->GetOutput());
00219         this->extrac->SetSampleRate(1, 1, 1);
00220         
00221         this->connect = vtkImageSeedConnectivity::New();
00222         this->connect->SetInput(this->data1);
00223         this->connect->SetInputConnectValue(255);
00224         this->connect->SetOutputConnectedValue(255);
00225         this->connect->SetOutputUnconnectedValue(0);
00226 
00227         this->distance= vtkImageEuclideanDistance::New();
00228         this->distance->SetInput(this->connect->GetOutput());
00229         this->distance->InitializeOn();
00230         this->distance->ConsiderAnisotropyOff();
00231                         
00232 
00233 }

Here is the call graph for this function:

axisExtractor02::~axisExtractor02 (  )  [inline, protected]

Definition at line 84 of file axisExtractor02.h.

00084 {};

axisExtractor02::axisExtractor02 ( const axisExtractor02  )  [private]

Member Function Documentation

double axisExtractor02::angulo ( double  i1,
double  j1,
double  k1,
double  i2,
double  j2,
double  k2 
) [private]

Definition at line 2832 of file axisExtractor02.cxx.

02833 {
02834         double m1=sqrt((i1*i1)+(j1*j1)+(k1*k1));
02835         double m2=sqrt((i2*i2)+(j2*j2)+(k2*k2));
02836         double res=(acos(((i1*i2)+(j1*j2)+(k1*k2))/(m1*m2))*180)/3.1415;
02837 
02838         if(res<0){
02839                 res=-res;
02840         }
02841 
02842         if(res>=0 && res<90){
02843                 res=res;
02844         }
02845         else if(res>=90 && res<180){
02846                 res=180-res;
02847         }
02848         else if(res>=180 && res<270){
02849                 res=res-180;
02850         }
02851         else{
02852                 res=360-res;
02853         }
02854         
02855         return res;
02856 }

double axisExtractor02::angulo ( double  a[3],
double  b[3] 
) [private]

Definition at line 2802 of file axisExtractor02.cxx.

Referenced by avanzar().

02803 {
02804         double m1=sqrt((a[0]*a[0])+(a[1]*a[1])+(a[2]*a[2]));
02805         double m2=sqrt((b[0]*b[0])+(b[1]*b[1])+(b[2]*b[2]));
02806         double res=(acos(((a[0]*b[0])+(a[1]*b[1])+(a[2]*b[2]))/(m1*m2))*180)/3.1415;
02807 
02808         if(res<0){
02809                 res=-res;
02810         }
02811 
02812         if(res>=0 && res<90){
02813                 res=res;
02814         }
02815         else if(res>=90 && res<180){
02816                 res=180-res;
02817         }
02818         else if(res>=180 && res<270){
02819                 res=res-180;
02820         }
02821         else{
02822                 res=360-res;
02823         }
02824         
02825         return res;
02826 }

Here is the caller graph for this function:

void axisExtractor02::avanzar (  )  [private]

Definition at line 3181 of file axisExtractor02.cxx.

References angulo(), blanquear(), bruled(), buenos, candit, cant, cant2, centi, centi2, cilindro(), comparacion(), conecarea(), connect, copiar(), correction(), correction2(), costominimo(), data1, data2, data3, data4, data6, distance, ejemini, ejeminp, envolumen(), extrac, find_components(), find_componentsb(), flagg, flagg2, frama, fseg, indextoreal(), lineas, m_Stack, m_Stack0, m_Stack1, m_Stack2, m_Stack3, m_Stack4, m_Stack5, m_Stack6, m_Stack7, m_Stack8, m_Stackr, m_Stackra, m_Stackrp, maxant, maxareacandit(), mejor, mejorcant, mejordst, mejorrad, minant, mincandit(), minis, modelo(), New(), optim(), points, realtoindex(), realtoreal2(), redondear(), redondear2(), redondear3(), stream, totalarea(), Vi, visited, visitedrad, and Vp.

Referenced by paso(), rama(), segmento(), and todo().

03182 {
03183         
03184         double puntoactual[3];
03185         double puntocorregido[3];       
03186         double puntoanterior[3];        
03187         double puntosiguiente[3];
03188         //double puntointer[3];
03189         double puntopre[3];
03190 
03191         int indiceactual[3];
03192         int indiceanterior[3];
03193         int indicecorregido[3];
03194         //int indiceinter[3];
03195         int indicepre[3];
03196         double radioactual;
03197         double dirant[3];
03198                 
03199         unsigned char cantidad;
03200         unsigned char cantidadb;
03201 
03202         unsigned long vector[50][4];
03203         unsigned long vectorb[50][4];
03204 
03205         int vectortemp[3];
03206         double tempc;
03207         
03208         int extint[6];
03209         
03210         int extintreal[6];
03211                 
03212         int indexp;
03213         
03214         double provvc[3];
03215         
03216         int radiotrabajo;
03217         
03218         int flag =0;
03219         int flag2 =0;
03220         int flag3 =0;
03221         int flag4 =0;
03222         int flag5 =0;
03223         int flag6 =0;
03224         int flag7 =0;
03225         int flag8 =0;
03226         int flag9 =0;
03227         int flag10 =0;
03228         int flag11 =0;
03229         int flag12 =0;
03230         int flag13 =0;
03231         int flag14 =0;
03232         int flag15 =0;
03233         int flag16 =0;
03234         int flag17 =0;
03235         int flag18 =0;
03236         int flag19 =0;
03237         int flag20 =0;
03238         int flag21 =0;
03239         int flag22 =0;
03240 
03241         int i, j;
03242         
03243         double radiotrabajof;
03244 
03245         double proprad=2;
03246         
03247         double radiopred;
03248         double radioanterior;
03249         double radioprinc;
03250 
03251         int burned;
03252         
03253         int indant;
03254         double canditreal[3];
03255         int indmaxarea;
03256         unsigned long totalsurf;
03257         unsigned long conecsurf;
03258 
03259         indmaxarea=0;
03260         unsigned long caf[4];
03261 
03262         double rel1;
03263         double rel2;
03264         double rel3;
03265         double rel4;
03266         double rel5;
03267         double rel6;
03268 
03269         if(!m_Stack0.empty()){
03270 
03271         
03272         /*      indexp=m_Stack.top();
03273 
03274                 puntoactual[0]=m_Stack0.top();
03275                 puntoactual[1]=m_Stack1.top();
03276                 puntoactual[2]=m_Stack2.top();
03277 
03278                 puntoanterior[0]=m_Stack3.top();
03279                 puntoanterior[1]=m_Stack4.top();
03280                 puntoanterior[2]=m_Stack5.top();
03281 
03282                 puntopre[0]=m_Stack6.top();
03283                 puntopre[1]=m_Stack7.top();
03284                 puntopre[2]=m_Stack8.top();
03285 
03286                 
03287 
03288                 radiopred=m_Stackr.top();
03289                 radioanterior=m_Stackra.top();
03290                 radioprinc=m_Stackrp.top();*/
03291 
03292                 indexp=m_Stack.front();
03293 
03294                 puntoactual[0]=m_Stack0.front();
03295                 puntoactual[1]=m_Stack1.front();
03296                 puntoactual[2]=m_Stack2.front();
03297 
03298                 puntoanterior[0]=m_Stack3.front();
03299                 puntoanterior[1]=m_Stack4.front();
03300                 puntoanterior[2]=m_Stack5.front();
03301 
03302                 puntopre[0]=m_Stack6.front();
03303                 puntopre[1]=m_Stack7.front();
03304                 puntopre[2]=m_Stack8.front();
03305 
03306                 radiopred=m_Stackr.front();
03307                 radioanterior=m_Stackra.front();
03308                 radioprinc=m_Stackrp.front();
03309                                 
03310                 radiotrabajo= (int) (proprad*radiopred);
03311                 radiotrabajof=proprad*radiopred;
03312 
03313                 if(radiotrabajof-radiotrabajo>0.5){
03314                         radiotrabajo=radiotrabajo+1;
03315                 }
03316 
03317 // EED 15 Mai 2007 .NET 
03318 //              radiotrabajo=max(minant,radiotrabajo);
03319                 if (minant>radiotrabajo)
03320                 {
03321                         radiotrabajo=minant;
03322                 }
03323 
03324                 /*m_Stack0.pop();
03325                 m_Stack1.pop();
03326                 m_Stack2.pop();
03327                 m_Stack3.pop();
03328                 m_Stack4.pop();
03329                 m_Stack5.pop();
03330                 m_Stack6.pop();
03331                 m_Stack7.pop();
03332                 m_Stack8.pop();
03333                 
03334                 m_Stack.pop();
03335                 m_Stackr.pop();
03336                 m_Stackra.pop();
03337                 m_Stackrp.pop();*/
03338 
03339                 m_Stack0.pop_front();
03340                 m_Stack1.pop_front();
03341                 m_Stack2.pop_front();
03342                 m_Stack3.pop_front();
03343                 m_Stack4.pop_front();
03344                 m_Stack5.pop_front();
03345                 m_Stack6.pop_front();
03346                 m_Stack7.pop_front();
03347                 m_Stack8.pop_front();
03348                 
03349                 m_Stack.pop_front();
03350                 m_Stackr.pop_front();
03351                 m_Stackra.pop_front();
03352                 m_Stackrp.pop_front();
03353 
03354                 dirant[0]=puntoanterior[0]-puntoactual[0];
03355                 dirant[1]=puntoanterior[1]-puntoactual[1];
03356                 dirant[2]=puntoanterior[2]-puntoactual[2];
03357 
03358                 
03359                 realtoindex(puntoactual, indiceactual);
03360                 realtoindex(puntoanterior, indiceanterior);
03361                 realtoindex(puntopre, indicepre);
03362 
03363                 radioactual=radiopred;
03364                 
03365                 if(radiotrabajo<=maxant){
03366                         
03367                         extint[0]=indiceactual[0]-radiotrabajo;
03368                         extint[1]=indiceactual[0]+radiotrabajo;
03369                         extint[2]=indiceactual[1]-radiotrabajo;
03370                         extint[3]=indiceactual[1]+radiotrabajo;
03371                         extint[4]=indiceactual[2]-radiotrabajo;
03372                         extint[5]=indiceactual[2]+radiotrabajo;
03373 
03374                         extrac->SetVOI(extint);
03375                         extrac->UpdateWholeExtent();
03376                         extrac->Update();
03377                         extrac->GetOutput()->GetExtent(extintreal);
03378 
03379                         if(extint[0]!=extintreal[0] || extint[1]!=extintreal[1] || extint[2]!=extintreal[2] || extint[3]!=extintreal[3] || extint[4]!=extintreal[4] || extint[5]!=extintreal[5]){
03380                                 fprintf(stream, "salio\t");
03381                                 flag4 =1;       
03382                         }
03383                         else{
03384                                 
03385                                 data1->Delete();
03386                                 data1=vtkImageData::New();
03387                                 data1->SetScalarTypeToUnsignedChar();
03388                                 data1->SetExtent(extrac->GetOutput()->GetExtent());
03389                                 data1->SetSpacing(extrac->GetOutput()->GetSpacing());
03390 
03391                                 cilindro(data1, dirant );
03392                                 
03393                                 optim(extrac->GetOutput(), data1 );
03394 
03395                                 connect->SetInput(data1);
03396                                 connect->RemoveAllSeeds();
03397                                 connect->AddSeed(indiceactual[0],indiceactual[1],indiceactual[2]);
03398                                 connect->UpdateWholeExtent();
03399                                 connect->Update();
03400                                                         
03401                                 data2->Delete();
03402                                 data2=vtkImageData::New();
03403                                 data2->SetScalarTypeToUnsignedChar();
03404                                 data2->SetExtent(connect->GetOutput()->GetExtent());
03405                                 data2->SetSpacing(connect->GetOutput()->GetSpacing());
03406 
03407                                 blanquear(data2);
03408                                 
03409                                 cantidad=find_components(connect->GetOutput(), data2, 0, vector);
03410 
03411                                 data3->Delete();
03412                                 data3=vtkImageData::New();
03413                                 data3->SetScalarTypeToUnsignedChar();
03414                                 data3->SetExtent(connect->GetOutput()->GetExtent());
03415                                 data3->SetSpacing(connect->GetOutput()->GetSpacing());
03416                                 
03417                                 blanquear(data3);
03418 
03419                                 cantidadb=find_componentsb(connect->GetOutput(), data3, 0, vectorb);
03420 
03421                                 redondear3(connect->GetOutput());
03422 
03423                                 distance->Update();
03424 
03425                                 redondear2(distance->GetOutput());
03426 
03427                                 redondear(connect->GetOutput());
03428                         
03429                                 costominimo(distance->GetOutput(), data2);
03430                                 
03431                                 
03432                                 if(buenos==0){
03433                                         radioactual=correction2(candit, cantidad, distance->GetOutput(),  indicecorregido,  puntocorregido, indiceanterior, radioanterior);
03434                                 }
03435                                 else{
03436                                         radioactual=correction(candit, cantidad, distance->GetOutput(),  indicecorregido,  puntocorregido, indiceanterior, radioanterior, indicepre, radioprinc);
03437                                 }
03438 
03439 
03440                                 //inpeq(extrac->GetOutput(), indicecorregido, radioactual);
03441                                                                 
03442                                 indant=mincandit(candit, cantidad, puntoanterior);
03443 
03444                                 indmaxarea=maxareacandit(vector, cantidad);
03445                                 totalsurf=totalarea(vector, vectorb, cantidad, cantidadb);
03446                                 conecsurf=conecarea(vector, cantidad);
03447                                 
03448                                 indextoreal(candit[indant], canditreal);
03449 
03450                                 burned=bruled(candit, cantidad, data4);
03451                                                                 
03452                                 data6->Delete();
03453                                 data6=vtkImageData::New();
03454                                 data6->SetScalarTypeToUnsignedChar();
03455                                 data6->SetExtent(extrac->GetOutput()->GetExtent());
03456                                 data6->SetSpacing(extrac->GetOutput()->GetSpacing());
03457 
03458                                 modelo(data6, cantidad,  vector, candit, radioactual, minis);
03459                                 comparacion(connect->GetOutput(), data6, caf);
03460 
03461                                 rel1=((double)caf[0]+(double)caf[1])/((double)caf[0]+(double)caf[1]+(double)caf[2]+(double)caf[3]);
03462                                 rel2=((double)caf[1])/((double)caf[1]+(double)caf[3]);
03463                                 rel3=((double)caf[1])/((double)caf[1]+(double)caf[2]);
03464                                 rel4=(double)conecsurf/(double)totalsurf;
03465                                 rel5=(double)vector[indmaxarea][0]/(double)totalsurf;
03466                                 rel6=(double)cant/((double)cant+(double)cant2);
03467                                                                                 
03468                                         
03469                                 if(rel1<0.5 || rel2<0.5 || rel3<0.5 || (rel1<0.75 && rel2<0.75) || (rel2<0.75 && rel3<0.75)|| (rel1<0.75 && rel3<0.75)){
03470                                         flag5=1;
03471                                 }                                                                       
03472                                 
03473                                 if(indicecorregido[0]!=indiceactual[0] || indicecorregido[1]!=indiceactual[1] || indicecorregido[2]!=indiceactual[2]){
03474                                         flag7=1;
03475                                 }
03476 
03477                                 if(burned>=cantidad ){
03478                                         flag15=1;
03479                                 }
03480 
03481                                 if(burned==0 ){
03482                                         flag16=1;
03483                                 }
03484 
03485                                 if(cantidad<2 ){
03486                                         flag17=1;
03487                                 }
03488 
03489                                 if(flag7==1 && flagg>4){
03490                                         flag7=0;
03491                                 }
03492 
03493                                 if(buenos==0){
03494                                         flag19=1;
03495                                 }
03496 
03497                                 if(mejordst!=0){
03498                                         flag18=1;
03499                                 }
03500 
03501                                 if(flag7==1 && flag18==1){
03502                                         for(i=0;i<flagg;i++){
03503                                                 if(visited[i][0]==indiceactual[0] && visited[i][1]==indiceactual[1] && visited[i][2]==indiceactual[2] && visitedrad[i]==radiopred){
03504                                                         flag2=1;
03505                                                 }
03506                                         }
03507                                 }
03508                                 
03509                                 if((flag19==1 && flagg2<5) || (flag19==1 && flagg2<10 && ( rel4>0.25 || rel5>0.13 || rel6>0.4 || flag17==1  || flag15==1 || flag5==1) ) || (flagg2<10 && ( ((rel4>0.25 || rel5>0.25 || rel6>0.4) && cantidad<3) || flag17==1  || flag15==1 || flag5==1) )){
03510                                                 flag8=1;
03511                                 }
03512 
03513                                 if(centi<centi2){
03514                                         flag3=1;
03515                                 }
03516 
03517                                 if(angulo(dirant[0], dirant[1], dirant[2], canditreal[0]-puntoactual[0], canditreal[1]-puntoactual[1], canditreal[2]-puntoactual[2] )>65){
03518                                         flag11=1;
03519                                 }
03520 
03521                                 if(angulo(Vp[0][ejeminp], Vp[1][ejeminp], Vp[2][ejeminp], Vi[0][ejemini], Vi[1][ejemini], Vi[2][ejemini] )>60){
03522                                         flag6=1;
03523                                 }
03524 
03525                                 if((flag3==1 || flag5==1 || (flag16==1 && flag11==1 && flag19==0)  ) && (flag7==0 && flag8==0)){
03526                                         flag9=1;
03527                                         //fprintf(stream, "malo\t");
03528                                 }
03529 
03530                                 if(flag3==1 || flag5==1 || (flag16==1 && flag11==1 && flag19==0)  ){
03531                                         flag20=1;
03532                                 }
03533                         
03534                                 if((mejordst<radioactual || (mejordst==radioactual && mejorrad>radiopred) || (mejordst==radioactual && mejorrad<=radiopred && mejorcant<cantidad )) && flag17==0 && flag20==0 && flag4==0 && flag12==0 && flag15==0 ){
03535                                         mejordst=radioactual;
03536                                         mejor[0]=puntoactual[0];
03537                                         mejor[1]=puntoactual[1];
03538                                         mejor[2]=puntoactual[2];
03539                                         mejorrad=radiopred;
03540                                         mejorcant=cantidad;
03541                                 }
03542                         }
03543                 }
03544                 else{
03545                         fprintf(stream, "grande\t");
03546                         flag12 =1;      
03547                 }
03548 
03549                 if(mejordst!=0){
03550                         flag18=1;
03551                 }
03552 
03553                 if(flagg>4){
03554                         flag13=1;
03555                 }
03556 
03557                 if(flagg2>4){
03558                         flag14=1;
03559                 }
03560 
03561                 if( flag9==1 || flag4==1 || flag12==1 || ((cantidad<2 || burned==cantidad) && (flag7==0 && flag8==0)) ){
03562                         frama=1;
03563                 }
03564                 else{
03565                         frama=0;
03566                 }
03567 
03568                 if( cantidad>2 && (flag7==0 && flag8==0) ){
03569                         fseg=1;
03570                 }
03571                 else{
03572                         fseg=0;
03573                 }
03574                 
03575                 if((flag7==0 && flag8==0 && (mejordst>radioactual || (mejordst==radioactual && mejorrad<radiopred)) && flag19==0) || flag2==1){
03576                         
03577                         flagg=10;
03578                         flagg2=10;
03579                         mejordst=0;
03580                         
03581                         fprintf(stream, "mejor\t");
03582                                                                                                                         
03583                         m_Stack0.push_front(mejor[0]);
03584                         m_Stack1.push_front(mejor[1]);
03585                         m_Stack2.push_front(mejor[2]);
03586                         m_Stack3.push_front(puntoanterior[0]);
03587                         m_Stack4.push_front(puntoanterior[1]);
03588                         m_Stack5.push_front(puntoanterior[2]);
03589                         m_Stack6.push_front(puntopre[0]);
03590                         m_Stack7.push_front(puntopre[1]);
03591                         m_Stack8.push_front(puntopre[2]);
03592                         m_Stack.push_front(indexp);
03593                         m_Stackr.push_front(mejorrad);
03594                         m_Stackra.push_front(radioanterior);
03595                         m_Stackrp.push_front(radioprinc);
03596 
03597                         mejorrad=0;
03598                         mejorcant=0;
03599 
03600                 }
03601                 
03602                 else if((flag17==1 || flag9==1 || flag4==1 || flag12==1 || flag15==1) && flag18==1){
03603                         flagg=10;
03604                         flagg2=10;
03605                         mejordst=0;
03606                         
03607                         fprintf(stream, "descorrigio\t");
03608                                                                                                                         
03609                         m_Stack0.push_front(mejor[0]);
03610                         m_Stack1.push_front(mejor[1]);
03611                         m_Stack2.push_front(mejor[2]);
03612                         m_Stack3.push_front(puntoanterior[0]);
03613                         m_Stack4.push_front(puntoanterior[1]);
03614                         m_Stack5.push_front(puntoanterior[2]);
03615                         m_Stack6.push_front(puntopre[0]);
03616                         m_Stack7.push_front(puntopre[1]);
03617                         m_Stack8.push_front(puntopre[2]);
03618                         m_Stack.push_front(indexp);
03619                         m_Stackr.push_front(mejorrad);
03620                         m_Stackra.push_front(radioanterior);
03621                         m_Stackrp.push_front(radioprinc);
03622 
03623                         mejorrad=0;
03624                         mejorcant=0;
03625 
03626                 }
03627 
03628                 else if(flag12==0 && flag4==0 && flag9==0){
03629                         if(flag7==0 && flag8==0){
03630 
03631                                 if(flag17==0 && flag15==0){
03632                                         flagg=0;
03633                                         flagg2=0;
03634                                         mejordst=0;
03635                                         mejorrad=0;
03636                                         mejorcant=0;
03637 
03638                                         fprintf(stream, "inserto\t");
03639                                 
03640                                         if(flag19==0){
03641                                                 /*costominimo2(distance->GetOutput(), connect->GetOutput(), indiceactual, candit[indant], indiceinter);
03642                                                 indextoreal(indiceinter, puntointer);
03643                                                 realtoreal2(puntointer, provvc);
03644                                                 points->InsertPoint(buenos,provvc);
03645 
03646                                                 lineas->InsertNextCell(2);
03647                                                 lineas->InsertCellPoint(indexp);
03648                                                 lineas->InsertCellPoint(buenos);
03649                                                 
03650                                                 buenos++;
03651 
03652                                                 realtoreal2(puntoactual, provvc);
03653                                                 points->InsertPoint(buenos,provvc);
03654                         
03655                                                 lineas->InsertNextCell(2);
03656                                                 lineas->InsertCellPoint(buenos-1);
03657                                                 lineas->InsertCellPoint(buenos);
03658                                                 
03659                                                 buenos++;*/
03660 
03661                                                 realtoreal2(puntoactual, provvc);
03662                                                 points->InsertPoint(buenos,provvc);
03663                         
03664                                                 lineas->InsertNextCell(2);
03665                                                 lineas->InsertCellPoint(indexp);
03666                                                 lineas->InsertCellPoint(buenos);
03667 
03668                                                 buenos++;
03669                                         
03670                                         }
03671                                         else{
03672                                                 realtoreal2(puntoactual, provvc);
03673                                                 points->InsertPoint(buenos,provvc);
03674                                                                                 
03675                                                 buenos++;
03676                                         }
03677 
03678                                         
03679                                 }
03680                                 else{
03681                                         flagg=0;
03682                                         flagg2=0;
03683                                         mejordst=0;
03684                                         mejorrad=0;
03685                                         mejorcant=0;
03686                                         fprintf(stream, "para\t");
03687                                 }
03688                         }
03689                         else if(flag7==0 && flag8==1){
03690                                 flagg2++;
03691                                 
03692                                 fprintf(stream, "agrando\t");
03693 
03694                                 m_Stack0.push_front(puntoactual[0]);
03695                                 m_Stack1.push_front(puntoactual[1]);
03696                                 m_Stack2.push_front(puntoactual[2]);
03697                                 m_Stack3.push_front(puntoanterior[0]);
03698                                 m_Stack4.push_front(puntoanterior[1]);
03699                                 m_Stack5.push_front(puntoanterior[2]);
03700                                 m_Stack6.push_front(puntopre[0]);
03701                                 m_Stack7.push_front(puntopre[1]);
03702                                 m_Stack8.push_front(puntopre[2]);
03703 
03704                                 m_Stack.push_front(indexp);
03705                                 m_Stackr.push_front(((double)radiotrabajo+1)/2);
03706                                 m_Stackra.push_front(radioanterior);
03707                                 m_Stackrp.push_front(radioprinc);
03708                 
03709                         }
03710                         else if(flag7==1 && flag8==1){
03711                                 visited[flagg][0]=indiceactual[0];
03712                                 visited[flagg][1]=indiceactual[1];
03713                                 visited[flagg][2]=indiceactual[2];
03714                                 visitedrad[flagg]=radiopred;
03715                                 flagg++;
03716                                 flagg2++;
03717                                 
03718                                 fprintf(stream, "agrando y corrigiendo\t");
03719 
03720                                 m_Stack0.push_front(puntocorregido[0]);
03721                                 m_Stack1.push_front(puntocorregido[1]);
03722                                 m_Stack2.push_front(puntocorregido[2]);
03723                                 m_Stack3.push_front(puntoanterior[0]);
03724                                 m_Stack4.push_front(puntoanterior[1]);
03725                                 m_Stack5.push_front(puntoanterior[2]);
03726                                 m_Stack6.push_front(puntopre[0]);
03727                                 m_Stack7.push_front(puntopre[1]);
03728                                 m_Stack8.push_front(puntopre[2]);
03729 
03730                                 m_Stack.push_front(indexp);
03731                                 m_Stackr.push_front(((double)radiotrabajo+1)/2);
03732                                 m_Stackra.push_front(radioanterior);
03733                                 m_Stackrp.push_front(radioprinc);
03734                         }
03735                         else{
03736                                 visited[flagg][0]=indiceactual[0];
03737                                 visited[flagg][1]=indiceactual[1];
03738                                 visited[flagg][2]=indiceactual[2];
03739                                 visitedrad[flagg]=radiopred;
03740                                 flagg++;
03741                                 
03742                                 if(flag19==1){
03743                                         flagg=10;
03744                                 }
03745 
03746                                 fprintf(stream, "corrigio\t");
03747                                                                                                                         
03748                                 m_Stack0.push_front(puntocorregido[0]);
03749                                 m_Stack1.push_front(puntocorregido[1]);
03750                                 m_Stack2.push_front(puntocorregido[2]);
03751                                 m_Stack3.push_front(puntoanterior[0]);
03752                                 m_Stack4.push_front(puntoanterior[1]);
03753                                 m_Stack5.push_front(puntoanterior[2]);
03754 
03755                                 m_Stack6.push_front(puntopre[0]);
03756                                 m_Stack7.push_front(puntopre[1]);
03757                                 m_Stack8.push_front(puntopre[2]);
03758 
03759                                 m_Stack.push_front(indexp);
03760                                 m_Stackr.push_front(radiopred);
03761                                 m_Stackra.push_front(radioanterior);
03762                                 m_Stackrp.push_front(radioprinc);
03763 
03764                                 
03765                         }
03766                                 
03767                         if(flag7==0 && flag8==0){
03768                                         
03769                                 if(flag17==0 && flag15==0){
03770                                 
03771                                         for(i=0;i<cantidad && i<10;i++){
03772                                                 for(j=i;j<cantidad && i<10;j++){
03773                                                         if(minis[j]>minis[i]){
03774                                                                 vectortemp[0]=candit[i][0];
03775                                                                 vectortemp[1]=candit[i][1];
03776                                                                 vectortemp[2]=candit[i][2];
03777                                                                 tempc=minis[i];
03778                                                                 
03779                                                                 candit[i][0]=candit[j][0];
03780                                                                 candit[i][1]=candit[j][1];
03781                                                                 candit[i][2]=candit[j][2];
03782                                                                 minis[i]=minis[j];
03783                                                                 
03784                                                                 candit[j][0]=vectortemp[0];
03785                                                                 candit[j][1]=vectortemp[1];
03786                                                                 candit[j][2]=vectortemp[2];
03787                                                                 minis[j]=tempc;
03788                                                         }
03789                                                 }
03790                                         }
03791                                         
03792         
03793                                         if(flag16==1){
03794                                                 for(i=0;i<cantidad && i<10;i++){
03795                                                         if(i!=indant || buenos<2){
03796                                                                 indextoreal(candit[i], puntosiguiente);
03797                                                                                 
03798                                                                 m_Stack0.push_front(puntosiguiente[0]);
03799                                                                 m_Stack1.push_front(puntosiguiente[1]);
03800                                                                 m_Stack2.push_front(puntosiguiente[2]);
03801                                                                 m_Stack3.push_front(puntoactual[0]);
03802                                                                 m_Stack4.push_front(puntoactual[1]);
03803                                                                 m_Stack5.push_front(puntoactual[2]);
03804                                                                 
03805                                                                 m_Stack6.push_front(puntosiguiente[0]);
03806                                                                 m_Stack7.push_front(puntosiguiente[1]);
03807                                                                 m_Stack8.push_front(puntosiguiente[2]);
03808                                 
03809                                                                 double prov1a=sqrt(minis[i]);
03810                                                                 
03811                                                                 m_Stack.push_front(buenos-1);
03812                                                                 m_Stackr.push_front(prov1a);
03813                                                                 m_Stackra.push_front(radioactual);
03814                                                                 m_Stackrp.push_front(prov1a);
03815                                                                 
03816                                                         }
03817                                                 }
03818                                         }
03819                                         else{
03820                                                 for(i=0;i<cantidad && i<10;i++){
03821                                                         indextoreal(candit[i], puntosiguiente);
03822                                 
03823                                                         if(envolumen(candit[i], data4)==0){
03824                                                                 m_Stack0.push_front(puntosiguiente[0]);
03825                                                                 m_Stack1.push_front(puntosiguiente[1]);
03826                                                                 m_Stack2.push_front(puntosiguiente[2]);
03827                                                                 m_Stack3.push_front(puntoactual[0]);
03828                                                                 m_Stack4.push_front(puntoactual[1]);
03829                                                                 m_Stack5.push_front(puntoactual[2]);
03830                                                                 
03831                                                                 m_Stack6.push_front(puntosiguiente[0]);
03832                                                                 m_Stack7.push_front(puntosiguiente[1]);
03833                                                                 m_Stack8.push_front(puntosiguiente[2]);
03834                                                         
03835                                                                 double prov1b=sqrt(minis[i]);
03836                                                                 
03837                                                                 m_Stack.push_front(buenos-1);
03838                                                                 m_Stackr.push_front(prov1b);
03839                                                                 m_Stackra.push_front(radioactual);
03840                                                                 m_Stackrp.push_front(prov1b);
03841                                                         }
03842                                                 }
03843                                         }
03844                                 
03845                                         copiar(connect->GetOutput(),  data4 );
03846                                         //copiar2(distance->GetOutput(),  data5 );
03847                                 }                                               
03848                         }
03849                 }
03850                 else{
03851                 //      fprintf(stream, "algo");
03852                         mejordst=0;
03853                         mejorrad=0;
03854                         mejorcant=0;
03855                         flagg=0;
03856                         flagg2=0;
03857                                 
03858                 }
03859 
03860                 
03861                 
03862                 
03863                 /*
03864                 printf("wi[0]: %f\n", wi[0]);
03865                 printf("wi[1]: %f\n", wi[1]);
03866                 printf("wi[2]: %f\n", wi[2]);
03867                 
03868                 printf("inerciari: %f\n", inerciari);
03869                 printf("inerciariy: %f\n", inerciariy);
03870                 printf("inerciariz: %f\n", inerciariz);
03871 
03872                 printf("ri1: %f\n", inerciari/inerciariy);
03873                 printf("ri2: %f\n", inerciariy/inerciariz);
03874                 printf("ri3: %f\n", inerciari/inerciariz);
03875 
03876                 printf("inerciarp: %f\n", inerciarp);
03877                 printf("inerciarpy: %f\n", inerciarpy);
03878                 printf("inerciarpz: %f\n", inerciarpz);
03879 
03880                 printf("rp1: %f\n", inerciarp/inerciarpy);
03881                 printf("rp2: %f\n", inerciarpy/inerciarpz);
03882                 printf("rp3: %f\n", inerciarp/inerciarpz);
03883 
03884                 printf("angulo: %f\n",angulo(dirant[0], dirant[1], dirant[2], canditreal[0]-puntoactual[0], canditreal[1]-puntoactual[1], canditreal[2]-puntoactual[2] ));
03885                 printf("angulo2: %f\n", angulo(Vp[0][ejeminp], Vp[1][ejeminp], Vp[2][ejeminp], Vi[0][ejemini], Vi[1][ejemini], Vi[2][ejemini]));
03886 
03887                 printf("centi: %f\n", centi);
03888                 printf("centi2: %f\n", centi2);
03889                 */
03890                 
03891 
03892 
03893                 fprintf(stream, "%d\t", indexp);
03894                 fprintf(stream, "%d\t", buenos);
03895                 fprintf(stream, "%d\t", radiotrabajo);
03896                 fprintf(stream, "%f\t", radioactual);
03897                 fprintf(stream, "%f\t", radiopred);
03898                 fprintf(stream, "%f\t", radioanterior);
03899                 fprintf(stream, "%f\t", mejordst);
03900                 fprintf(stream, "%f\t", mejorrad);      
03901                 fprintf(stream, "%d\t", mejorcant);     
03902                 
03903         
03904                 /*
03905                 fprintf(stream, "%d\t", cant);
03906                 fprintf(stream, "%d\t", cant2);
03907                 fprintf(stream, "%f\t", (double)cant/((double)cant+(double)cant2));
03908                 */      
03909                 
03910                 fprintf(stream, "%d\t", flag2);
03911                 fprintf(stream, "%d\t", flag3);
03912                 fprintf(stream, "%d\t", flag4);
03913                 fprintf(stream, "%d\t", flag5);
03914                 fprintf(stream, "%d\t", flag6);
03915                 fprintf(stream, "%d\t", flag7);
03916                 fprintf(stream, "%d\t", flag8);
03917                 fprintf(stream, "%d\t", flag9);
03918                 fprintf(stream, "%d\t", flag10);
03919                 fprintf(stream, "%d\t", flag11);
03920                 fprintf(stream, "%d\t", flag12);
03921                 fprintf(stream, "%d\t", flag13);
03922                 fprintf(stream, "%d\t", flag14);
03923                 fprintf(stream, "%d\t", flag15);
03924                 fprintf(stream, "%d\t", flag16);
03925                 fprintf(stream, "%d\t", flag17);
03926                 fprintf(stream, "%d\t", flag18);
03927                 fprintf(stream, "%d\t", flag19);
03928                 fprintf(stream, "%d\t", flag20);
03929                 fprintf(stream, "%d\t", flagg);
03930                 fprintf(stream, "%d\t", flagg2);
03931                 fprintf(stream, "%d\t", cantidad);
03932                 fprintf(stream, "%d\t", cantidadb);
03933                 fprintf(stream, "%d\t", burned);
03934 
03935         
03936                 /*
03937                 fprintf(stream, "caf[0] %d\t", caf[0]);
03938                 fprintf(stream, "caf[1] %d\t", caf[1]);
03939                 fprintf(stream, "caf[2] %d\t", caf[2]);
03940                 fprintf(stream, "caf[3] %d\t", caf[3]);
03941                 fprintf(stream, "REL%f\t", ((double)caf[0]+(double)caf[1])/((double)caf[0]+(double)caf[1]+(double)caf[2]+(double)caf[3]));
03942                 fprintf(stream, "REL2%f\t", ((double)caf[1])/((double)caf[3]+(double)caf[1]));
03943                 fprintf(stream, "REL3%f\t", ((double)caf[1])/((double)caf[1]+(double)caf[2]));
03944 
03945                 fprintf(stream, "maxareacandit%d\t", vector[indmaxarea][0]);
03946                 fprintf(stream, "totalsurf%d\t", totalsurf);
03947                 fprintf(stream, "conecsurf%d\t", conecsurf);
03948                 fprintf(stream, "ratio%f\t", (double)conecsurf/(double)totalsurf);
03949                 fprintf(stream, "ratio2%f\t", (double)vector[indmaxarea][0]/(double)totalsurf);
03950                 */
03951                         
03952 
03953                 fprintf(stream, "[%f, %f, %f]\t", puntoactual[0], puntoactual[1], puntoactual[2]);
03954                 fprintf(stream, "[%f, %f, %f]\t", puntoanterior[0], puntoanterior[1], puntoanterior[2]);
03955                 fprintf(stream, "[%f, %f, %f]\t", puntopre[0], puntopre[1], puntopre[2]);
03956                 fprintf(stream, "[%f, %f, %f]\t", mejor[0], mejor[1], mejor[2]);
03957 
03958                 fprintf(stream, "\n");
03959 
03960         }
03961         
03962 }

Here is the call graph for this function:

Here is the caller graph for this function:

void axisExtractor02::blanquear ( vtkImageData *  data  ) 

Definition at line 2449 of file axisExtractor02.cxx.

Referenced by avanzar(), and Execute().

02450 {
02451         int ext[6];
02452         int i, j, k;
02453         
02454         data->GetExtent(ext);
02455 
02456         unsigned char *ptr;
02457 
02458         for(i=ext[0];i<=ext[1];i++){
02459                 for(j=ext[2];j<=ext[3];j++){
02460                         for(k=ext[4];k<=ext[5];k++){
02461                                 ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
02462                                 *ptr=0;
02463                         }
02464                 }
02465         }
02466 }

Here is the caller graph for this function:

void axisExtractor02::blanquear2 ( vtkImageData *  data  )  [private]

Definition at line 2494 of file axisExtractor02.cxx.

Referenced by cilindro().

02495 {
02496         int ext[6];
02497         int centro[3];
02498         int i, j, k;
02499         
02500         data->GetExtent(ext);
02501 
02502         centro[0]=(ext[1]+ext[0])/2;
02503         centro[1]=(ext[3]+ext[2])/2;
02504         centro[2]=(ext[5]+ext[4])/2;
02505 
02506         unsigned char *ptr;
02507 
02508         for(i=ext[0];i<=ext[1];i++){
02509                 for(j=ext[2];j<=ext[3];j++){
02510                         for(k=ext[4];k<=ext[5];k++){
02511                                 ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
02512                                 if(i==centro[0] && j==centro[1] && k==centro[2]){
02513                                         *ptr=255;
02514                                 }
02515                                 else{
02516                                         *ptr=0;
02517                                 }
02518                         }
02519                 }
02520         }
02521 }

Here is the caller graph for this function:

void axisExtractor02::blanquear3 ( vtkImageData *  data  )  [private]

Definition at line 2471 of file axisExtractor02.cxx.

02472 {
02473         int ext[6];
02474         int i, j, k;
02475         
02476         data->GetExtent(ext);
02477 
02478         double *ptr;
02479 
02480         for(i=ext[0];i<=ext[1];i++){
02481                 for(j=ext[2];j<=ext[3];j++){
02482                         for(k=ext[4];k<=ext[5];k++){
02483                                 ptr=(double *)  data->GetScalarPointer(i,j,k);
02484                                 *ptr=0;
02485                         }
02486                 }
02487         }
02488 }

bool axisExtractor02::border ( vtkImageData *  data,
int  p1[3] 
) [private]

Definition at line 858 of file axisExtractor02.cxx.

Referenced by optim().

00859 {
00860         int ext[6];
00861         int i, j, k;
00862         short val;
00863         int total1, total2;
00864         int centro[3];
00865 
00866 
00867         int p2[3];
00868         
00869         data->GetExtent(ext);
00870 
00871         centro[0]=(ext[1]+ext[0])/2;
00872         centro[1]=(ext[3]+ext[2])/2;
00873         centro[2]=(ext[5]+ext[4])/2;
00874 
00875         unsigned char *ptr;
00876 
00877         ptr=(unsigned char *)   data->GetScalarPointer(p1);
00878         
00879         val=*ptr;
00880 
00881         bool res=false;
00882         total1=0;
00883         total2=0;
00884 
00885         for(i=-1;i<=1;i++){
00886                 for(j=-1;j<=1;j++){
00887                         for(k=-1;k<=1;k++){
00888                                 p2[0]=p1[0]+i;
00889                                 p2[1]=p1[1]+j;
00890                                 p2[2]=p1[2]+k;
00891                                 if(ext[0]<=p2[0] && ext[1]>=p2[0] && ext[2]<=p2[1] && ext[3]>=p2[1] && ext[4]<=p2[2] && ext[5]>=p2[2] ){
00892                                         ptr=(unsigned char *)   data->GetScalarPointer(p2);
00893                                         if(*ptr!=val){
00894                                                 total1++;
00895                                         }
00896                                         else{
00897                                                 total2++;
00898                                         }                                               
00899                                 }
00900                         }
00901                 }
00902         }
00903 
00904         if(total1>0){
00905                 res=true;
00906         }
00907         /*if(p1[0]==centro[0] && p1[1]==centro[1] && p1[2]==centro[2]){
00908                 res=false;
00909         }*/
00910                         
00911         return res;
00912 }

Here is the caller graph for this function:

int axisExtractor02::bruled ( int  candit[10][3],
int  cantidad,
vtkImageData *  data4 
) [private]

Definition at line 2985 of file axisExtractor02.cxx.

References envolumen().

Referenced by avanzar().

02986 {
02987         int i;
02988         int burned;
02989         
02990         burned=0;
02991         for(i=0;i<cantidad && i<10;i++){
02992                 if(envolumen(candit[i], data4)!=0){
02993                         burned++;
02994                 }
02995         }
02996 
02997         return burned;
02998 }

Here is the call graph for this function:

Here is the caller graph for this function:

void axisExtractor02::cilindro ( vtkImageData *  data,
double  vector[3] 
) [private]

Definition at line 2527 of file axisExtractor02.cxx.

References blanquear2(), distanciaejepunto(), espprin, and indextoreal().

Referenced by avanzar().

02528 {
02529         int ext[6];
02530         int i, j, k, radio;
02531         int i2, j2, k2;
02532         int centro[3];
02533         int punto[3];   
02534         double centrof[3];
02535         double puntof[3];
02536         double radiof;
02537         double puntof2[3];
02538         
02539 
02540         data->GetExtent(ext);
02541 
02542         unsigned char *ptr;
02543 
02544         radio=(ext[1]-ext[0])/2;
02545         radiof=espprin[0]*(((double)ext[1]-(double)ext[0])/4);
02546         centro[0]=(ext[1]+ext[0])/2;
02547         centro[1]=(ext[3]+ext[2])/2;
02548         centro[2]=(ext[5]+ext[4])/2;
02549 
02550         indextoreal(centro, centrof );
02551         
02552         if(vector[0]==0 && vector[1]==0 && vector[2]==0){
02553                 blanquear2(data);
02554         }
02555         else{
02556                 puntof2[0]=centrof[0]+vector[0];
02557                 puntof2[1]=centrof[1]+vector[1];
02558                 puntof2[2]=centrof[2]+vector[2];
02559 
02560                 double tmpsqrt;
02561                 for(i=ext[0], i2=-radio;i<=ext[1];i++, i2++){
02562                         for(j=ext[2], j2=-radio;j<=ext[3];j++, j2++){
02563                                 for(k=ext[4], k2=-radio;k<=ext[5];k++, k2++){
02564                                         ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
02565                                         punto[0]=i;
02566                                         punto[1]=j;
02567                                         punto[2]=k;
02568                                         indextoreal(punto, puntof );
02569                                         tmpsqrt = (i2*i2)+(j2*j2)+(k2*k2);
02570                                         if( radio<sqrt(tmpsqrt) ){
02571                                                 *ptr=0;
02572                                                 
02573                                         }
02574                                         else if(radiof<distanciaejepunto(puntof, centrof, puntof2)){
02575                                                 *ptr=0;
02576                                         }
02577                                         else{
02578                                                 *ptr=255;
02579                                         }                                       
02580                                 }
02581                         }
02582                 }
02583         }
02584 }

Here is the call graph for this function:

Here is the caller graph for this function:

void axisExtractor02::comparacion ( vtkImageData *  data,
vtkImageData *  data2,
unsigned long  minis[4] 
) [private]

Definition at line 2686 of file axisExtractor02.cxx.

References distancia().

Referenced by avanzar().

02687 {
02688         int ext[6];
02689         int i, j, k;
02690         double radio;
02691         
02692         data->GetExtent(ext);
02693 
02694         unsigned char *ptr;
02695         unsigned char *ptr2;
02696 
02697         
02698         minis[0]=0;
02699         minis[1]=0;
02700         minis[2]=0;
02701         minis[3]=0;
02702 
02703         int centro[3];
02704         int punto[3];
02705         
02706         radio=((double)ext[1]-(double)ext[0])/2;
02707         
02708         centro[0]=(ext[1]+ext[0])/2;
02709         centro[1]=(ext[3]+ext[2])/2;
02710         centro[2]=(ext[5]+ext[4])/2;
02711         
02712         for(i=ext[0];i<=ext[1];i++){
02713                 for(j=ext[2];j<=ext[3];j++){
02714                         for(k=ext[4];k<=ext[5];k++){
02715                                 ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
02716                                 ptr2=(unsigned char *)  data2->GetScalarPointer(i,j,k);
02717 
02718                                 punto[0]=i;
02719                                 punto[1]=j;
02720                                 punto[2]=k;
02721                                 
02722                                 if( radio>distancia(punto, centro) ){
02723                                                                         
02724                                         if( *ptr==0 && *ptr2==0 ){
02725                                                 minis[0]++;                                             
02726                                         }
02727                                         else if( *ptr!=0 && *ptr2!=0 ){
02728                                                 minis[1]++;                                             
02729                                         }
02730                                         else if(*ptr==0 && *ptr2!=0){
02731                                                 minis[2]++;                                             
02732                                         }
02733                                         else{
02734                                                 minis[3]++;                                             
02735                                         }
02736                                 }
02737                         }
02738                 }
02739         }
02740 }

Here is the call graph for this function:

Here is the caller graph for this function:

unsigned long axisExtractor02::conecarea ( unsigned long  vector[50][4],
int  cantidad 
) [private]

Definition at line 2964 of file axisExtractor02.cxx.

Referenced by avanzar().

02965 {
02966         
02967         unsigned long area;
02968         int i;
02969         
02970         area=0;
02971 
02972         for(i=0;i<cantidad && i<10;i++){
02973                 area+=vector[i][0];
02974         }
02975 
02976         return area;
02977 }

Here is the caller graph for this function:

void axisExtractor02::copiar ( vtkImageData *  data,
vtkImageData *  data2 
)

Definition at line 2745 of file axisExtractor02.cxx.

Referenced by avanzar().

02746 {
02747         int ext[6];
02748         int i, j, k;
02749         
02750         data->GetExtent(ext);
02751 
02752         unsigned char *ptr, *ptr2;
02753 
02754         for(i=ext[0];i<=ext[1];i++){
02755                 for(j=ext[2];j<=ext[3];j++){
02756                         for(k=ext[4];k<=ext[5];k++){
02757                                 ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
02758                                 ptr2=(unsigned char *)  data2->GetScalarPointer(i,j,k);
02759                                 if(*ptr!=0 && *ptr2==0){
02760                                         *ptr2=*ptr;
02761                                 }
02762                         }
02763                 }
02764         }
02765 
02766         data2->Modified();
02767 }

Here is the caller graph for this function:

void axisExtractor02::copiar2 ( vtkImageData *  data,
vtkImageData *  data2 
) [private]

Definition at line 2773 of file axisExtractor02.cxx.

02774 {
02775         int ext[6];
02776         int i, j, k;
02777         
02778         data->GetExtent(ext);
02779 
02780         double *ptr, *ptr2;
02781 
02782         for(i=ext[0];i<=ext[1];i++){
02783                 for(j=ext[2];j<=ext[3];j++){
02784                         for(k=ext[4];k<=ext[5];k++){
02785                                 ptr=(double *)  data->GetScalarPointer(i,j,k);
02786                                 ptr2=(double *) data2->GetScalarPointer(i,j,k);
02787                                 if(*ptr!=0 && *ptr2==0){
02788                                         *ptr2=*ptr;
02789                                 }
02790                         }
02791                 }
02792         }
02793 
02794         data2->Modified();
02795 }

double axisExtractor02::correction ( int  candit[10][3],
int  cantidad,
vtkImageData *  data,
int  indicecorregido[3],
double  puntocorregido[3],
int  indiceanterior[3],
double  radioanterior,
int  indicepre[3],
double  radiopre 
) [private]

Definition at line 3004 of file axisExtractor02.cxx.

References distancia(), distanciaejepunto(), espprin, indextoreal(), and proporcioejepunto().

Referenced by avanzar().

03005 {
03006         
03007         
03008         int rap;
03009         int punto[3];
03010         double puntof[3];
03011         double puntof2[3];
03012         double centrof[3];
03013         double radiof;
03014         double maxcent;
03015         double mincent;
03016         double distcorr;
03017         double distcorr2;
03018         double distcorr3;
03019         double dist;
03020         double prop;
03021         double rest;
03022         double *ptr;
03023         int ext[6];
03024         int i, j, k, radio;
03025         int centro[3];
03026         
03027         data->GetExtent(ext);
03028         
03029         radio=(ext[1]-ext[0])/2;
03030         radiof=((double)ext[1]-(double)ext[0])/2;
03031         centro[0]=(ext[1]+ext[0])/2;
03032         centro[1]=(ext[3]+ext[2])/2;
03033         centro[2]=(ext[5]+ext[4])/2;
03034 
03035         indicecorregido[0]=centro[0];
03036         indicecorregido[1]=centro[1];
03037         indicecorregido[2]=centro[2];
03038         indextoreal(indicecorregido, puntocorregido);
03039         indextoreal(indiceanterior, centrof);
03040         indextoreal(indicepre, puntof2);
03041                 
03042         rap= (int)( (double)radio/2 );
03043         maxcent=0;
03044         mincent=64000;
03045 
03046         for(i=ext[0];i<=ext[1];i++){
03047                 for(j=ext[2];j<=ext[3];j++){
03048                         for(k=ext[4];k<=ext[5];k++){
03049                                 ptr=(double *)  data->GetScalarPointer(i,j,k);
03050                                 punto[0]=i;
03051                                 punto[1]=j;
03052                                 punto[2]=k;
03053                                 indextoreal(punto, puntof );
03054 
03055                                 distcorr3=distancia(indiceanterior, indicepre);
03056                                 distcorr2=distancia(punto, indicepre);
03057                                 distcorr=distancia(punto, indiceanterior);
03058 
03059                                 dist=distanciaejepunto(puntof, centrof, puntof2);
03060                                 prop=proporcioejepunto(puntof, centrof, puntof2);
03061 
03062                                 if(prop>=0 && prop<=1){
03063                                         rest=(radiopre-radioanterior)*prop+radioanterior;
03064                                         rest=rest*espprin[0];
03065                                 }
03066                                 else{
03067                                         rest=dist-1;
03068                                 }
03069                                                         
03070                                 if( radioanterior<distcorr && distcorr3>=distcorr && distcorr2<distcorr3 && distcorr+radio>distcorr3+1 && distcorr-radio<distcorr3-1 && rest>dist){
03071                                 //if( radioanterior<distcorr && distcorr3>=distcorr && distcorr2<distcorr3 && distcorr+radio>distcorr3+1 && distcorr-radio<distcorr3-1 && rest>dist){
03072                                 //if( radioanterior<distcorr && distcorr3>=distcorr && distcorr2<distcorr3 && distcorr+radio>distcorr3+1 && distcorr-radio<distcorr3-1 && distcorr2<=distcorr3-radioanterior){
03073                                         if( maxcent<*ptr){
03074                                                         mincent=distcorr;
03075                                                         maxcent=*ptr;
03076                                                         indicecorregido[0]=i;
03077                                                         indicecorregido[1]=j;
03078                                                         indicecorregido[2]=k;
03079                                                         indextoreal(indicecorregido, puntocorregido);
03080                                         }
03081                                         else if( maxcent==*ptr){
03082                                                 if( mincent>distcorr){
03083                                                         mincent=distcorr;
03084                                                         maxcent=*ptr;
03085                                                         indicecorregido[0]=i;
03086                                                         indicecorregido[1]=j;
03087                                                         indicecorregido[2]=k;
03088                                                         indextoreal(indicecorregido, puntocorregido);
03089                                                 }
03090                                         }
03091                                 }
03092                         }
03093                 }
03094         }
03095 
03096         ptr=(double *)  data->GetScalarPointer(centro[0],centro[1],centro[2]);
03097 
03098         return sqrt(*ptr);
03099 }

Here is the call graph for this function:

Here is the caller graph for this function:

double axisExtractor02::correction2 ( int  candit[10][3],
int  cantidad,
vtkImageData *  data,
int  indicecorregido[3],
double  puntocorregido[3],
int  indiceanterior[3],
double  radioanterior 
) [private]

Definition at line 3105 of file axisExtractor02.cxx.

References distancia(), and indextoreal().

Referenced by avanzar().

03106 {
03107         
03108         
03109         int rap;
03110         int punto[3];
03111         double maxcent;
03112         double mincent;
03113         double distcorr;
03114         double distcorr2;
03115         double *ptr;
03116         int ext[6];
03117         int i, j, k, radio;
03118         int centro[3];
03119         
03120         data->GetExtent(ext);
03121         
03122         radio=(ext[1]-ext[0])/2;
03123         centro[0]=(ext[1]+ext[0])/2;
03124         centro[1]=(ext[3]+ext[2])/2;
03125         centro[2]=(ext[5]+ext[4])/2;
03126 
03127         indicecorregido[0]=centro[0];
03128         indicecorregido[1]=centro[1];
03129         indicecorregido[2]=centro[2];
03130         indextoreal(indicecorregido, puntocorregido);
03131                 
03132         rap= (int)((double)radio/2);
03133         maxcent=0;
03134         mincent=64000;
03135 
03136         for(i=centro[0]-rap;i<=centro[0]+rap;i++){
03137                 for(j=centro[1]-rap;j<=centro[1]+rap;j++){
03138                         for(k=centro[2]-rap;k<=centro[2]+rap;k++){
03139                                 ptr=(double *)  data->GetScalarPointer(i,j,k);
03140                                 punto[0]=i;
03141                                 punto[1]=j;
03142                                 punto[2]=k;
03143 
03144                                 distcorr2=distancia(punto, centro);
03145                                 distcorr=distancia(punto, indiceanterior);
03146                                 
03147                                 if( rap>distcorr2 ){
03148                                         if( maxcent<*ptr){
03149                                                         mincent=distcorr;
03150                                                         maxcent=*ptr;
03151                                                         indicecorregido[0]=i;
03152                                                         indicecorregido[1]=j;
03153                                                         indicecorregido[2]=k;
03154                                                         indextoreal(indicecorregido, puntocorregido);
03155                                         }
03156                                         else if( maxcent==*ptr){
03157                                                 if( mincent>distcorr){
03158                                                         mincent=distcorr;
03159                                                         maxcent=*ptr;
03160                                                         indicecorregido[0]=i;
03161                                                         indicecorregido[1]=j;
03162                                                         indicecorregido[2]=k;
03163                                                         indextoreal(indicecorregido, puntocorregido);
03164                                                 }
03165                                                 
03166                                         }
03167                                 }
03168                                 
03169                         }
03170                 }
03171         }
03172 
03173         return sqrt(maxcent);
03174 }

Here is the call graph for this function:

Here is the caller graph for this function:

void axisExtractor02::costominimo ( vtkImageData *  data,
vtkImageData *  data2 
) [private]

Definition at line 2005 of file axisExtractor02.cxx.

References candit, and minis.

Referenced by avanzar().

02006 {
02007         int ext[6];
02008         int i, j, k, radio;
02009         int centro[3];
02010         
02011         
02012         data->GetExtent(ext);
02013 
02014         double *ptr;
02015         unsigned char *ptr2;
02016 
02017         int ind;
02018 
02019         radio=(ext[1]-ext[0])/2;
02020 
02021         centro[0]=(ext[1]+ext[0])/2;
02022         centro[1]=(ext[3]+ext[2])/2;
02023         centro[2]=(ext[5]+ext[4])/2;
02024         
02025 
02026         for(i=0;i<=10;i++){
02027                 minis[i]=0;
02028         }
02029 
02030         for(i=ext[0];i<=ext[1];i++){
02031                 for(j=ext[2];j<=ext[3];j++){
02032                         for(k=ext[4];k<=ext[5];k++){
02033                                 ptr=(double *)data->GetScalarPointer(i,j,k);
02034                                 ptr2=(unsigned char *)data2->GetScalarPointer(i,j,k);
02035 
02036                                 ind=(int)*ptr2;
02037 
02038                                 if(*ptr2!=0){   
02039                                         if(minis[ind-1]<=*ptr && *ptr!=0 && ind<11){
02040                                                 minis[ind-1]=*ptr;
02041                                                 candit[ind-1][0]=i;
02042                                                 candit[ind-1][1]=j;
02043                                                 candit[ind-1][2]=k;
02044                                         }
02045                                 }
02046                         }
02047                 }
02048         }
02049 }

Here is the caller graph for this function:

void axisExtractor02::costominimo2 ( vtkImageData *  data,
vtkImageData *  data3,
int  p1[3],
int  p2[3],
int  p3[3] 
) [private]

Definition at line 2056 of file axisExtractor02.cxx.

References data2, data4, data6, and New().

02057 {
02058         int ext[6];
02059         int i, j, k, radio;
02060         int punto[3];
02061         int puntob[3];
02062         int punto2[3];
02063         int puntob2[3];         
02064         int puntomin[3];
02065         int puntobmin[3];
02066         
02067         double *ptr;
02068         double *ptr2; 
02069         unsigned char *ptr3; 
02070         unsigned char *ptr4; 
02071         double *ptr5; 
02072         unsigned char *ptr6; 
02073         double *ptr7; 
02074         double *ptr8;
02075 
02076         vtkImageData *data4;
02077                 
02078         data4=vtkImageData::New();
02079         data4->SetScalarTypeToUnsignedChar();
02080         data4->SetExtent(data->GetExtent());
02081         data4->SetSpacing(data->GetSpacing());
02082 
02083         vtkImageData *data6;
02084                 
02085         data6=vtkImageData::New();
02086         data6->SetScalarTypeToUnsignedChar();
02087         data6->SetExtent(data->GetExtent());
02088         data6->SetSpacing(data->GetSpacing());
02089         
02090 
02091         vtkImageData *data2;
02092 
02093         data2=vtkImageData::New();
02094         data2->SetScalarTypeToDouble();
02095         data2->SetExtent(data->GetExtent());
02096         data2->SetSpacing(data->GetSpacing());
02097 
02098         vtkImageData *data8;
02099 
02100         data8=vtkImageData::New();
02101         data8->SetScalarTypeToDouble();
02102         data8->SetExtent(data->GetExtent());
02103         data8->SetSpacing(data->GetSpacing());
02104 
02105         
02106         double mincst, mincstb;
02107         
02108         bool flag=true;
02109 
02110         double costoactual;
02111 
02112         data->GetExtent(ext);
02113 
02114         radio=(ext[1]-ext[0])/2;
02115 
02116         for(i=ext[0];i<=ext[1];i++){
02117                 for(j=ext[2];j<=ext[3];j++){
02118                         for(k=ext[4];k<=ext[5];k++){
02119                                 ptr2=(double *)data2->GetScalarPointer(i,j,k);
02120                                 ptr4=(unsigned char *)data4->GetScalarPointer(i,j,k);
02121                                 ptr6=(unsigned char *)data6->GetScalarPointer(i,j,k);
02122                                 ptr8=(double *)data8->GetScalarPointer(i,j,k);
02123                                 
02124                                 *ptr2 = 1000000000;
02125                                 *ptr4 = 0;
02126                                 *ptr6 = 0;
02127                                 *ptr8 = 1000000000;
02128                         }
02129                 }
02130         }
02131 
02132 
02133 
02134         punto[0]=p1[0];
02135         punto[1]=p1[1];
02136         punto[2]=p1[2];
02137         puntob[0]=p2[0];
02138         puntob[1]=p2[1];
02139         puntob[2]=p2[2];
02140         
02141         
02142         ptr2=(double *)data2->GetScalarPointer(p1[0],p1[1],p1[2]);
02143         *ptr2=0;
02144 
02145         ptr4=(unsigned char *)data4->GetScalarPointer(p1[0],p1[1],p1[2]);
02146         *ptr4=1;
02147 
02148         ptr8=(double *)data8->GetScalarPointer(p2[0],p2[1],p2[2]);
02149         *ptr8=0;
02150 
02151         ptr6=(unsigned char *)data6->GetScalarPointer(p2[0],p2[1],p2[2]);
02152         *ptr6=1;
02153 
02154         
02155 
02156 
02157                 
02158 
02159         while(flag){
02160                 
02161                 ptr5=(double *)data2->GetScalarPointer(punto[0],punto[1],punto[2]);
02162                 ptr7=(double *)data8->GetScalarPointer(puntob[0],puntob[1],puntob[2]);
02163                         
02164                         for(i=-1;i<=1;i++){
02165                                 for(j=-1;j<=1;j++){
02166                                         for(k=-1;k<=1;k++){
02167                                                 if(i!=0 || j!=0 || k!=0){
02168                                                         punto2[0]=punto[0]+i;
02169                                                         punto2[1]=punto[1]+j;
02170                                                         punto2[2]=punto[2]+k;
02171 
02172                                                         puntob2[0]=puntob[0]+i;
02173                                                         puntob2[1]=puntob[1]+j;
02174                                                         puntob2[2]=puntob[2]+k;
02175 
02176                                                         if(punto2[0]>=ext[0] && punto2[0]<=ext[1] && punto2[1]>=ext[2] && punto2[1]<=ext[3] && punto2[2]>=ext[4] &&  punto2[2]<=ext[5] ){
02177 
02178                                                                 ptr=(double *)data->GetScalarPointer(punto2[0],punto2[1],punto2[2]);
02179                                                                 ptr2=(double *)data2->GetScalarPointer(punto2[0],punto2[1],punto2[2]);
02180                                                                 ptr3=(unsigned char *)data3->GetScalarPointer(punto2[0],punto2[1],punto2[2]);
02181                                                                 ptr4=(unsigned char *)data4->GetScalarPointer(punto2[0],punto2[1],punto2[2]);
02182                                                                 
02183 
02184                                                                 if(*ptr3!=0 && *ptr4!=2){
02185                                                                         costoactual=*ptr5+(1/(*ptr));
02186                                                                         if(*ptr2>costoactual){
02187                                                                                 *ptr2=costoactual;                                                                      
02188                                                                                 *ptr4=1;
02189                                                                         }                                                                       
02190                                                                 }
02191                                                         }
02192 
02193                                                         if(puntob2[0]>=ext[0] && puntob2[0]<=ext[1] && puntob2[1]>=ext[2] && puntob2[1]<=ext[3] && puntob2[2]>=ext[4] &&  puntob2[2]<=ext[5] ){
02194 
02195                                                                 ptr=(double *)data->GetScalarPointer(puntob2[0],puntob2[1],puntob2[2]);
02196                                                                 ptr8=(double *)data8->GetScalarPointer(puntob2[0],puntob2[1],puntob2[2]);
02197                                                                 ptr3=(unsigned char *)data3->GetScalarPointer(puntob2[0],puntob2[1],puntob2[2]);
02198                                                                 ptr6=(unsigned char *)data6->GetScalarPointer(puntob2[0],puntob2[1],puntob2[2]);
02199 
02200                                                                 if(*ptr3!=0 && *ptr6!=2){
02201                                                                         costoactual=*ptr7+(1/(*ptr));
02202                                                                         if(*ptr8>costoactual){
02203                                                                                 *ptr8=costoactual;                                                                      
02204                                                                                 *ptr6=1;
02205                                                                         }                                                                       
02206                                                                 }
02207                                                         }
02208                                                 }
02209                                         }
02210                                 }
02211                         }
02212 
02213                         ptr4=(unsigned char *)data4->GetScalarPointer(punto[0],punto[1],punto[2]);
02214                         *ptr4=2;
02215 
02216                         ptr6=(unsigned char *)data6->GetScalarPointer(puntob[0],puntob[1],puntob[2]);
02217                         *ptr6=2;
02218 
02219                         mincst=1000000000;
02220                         mincstb=1000000000;
02221                         
02222                         for(i=ext[0];i<=ext[1];i++){
02223                                 for(j=ext[2];j<=ext[3];j++){
02224                                         for(k=ext[4];k<=ext[5];k++){
02225                                                 ptr2=(double *)data2->GetScalarPointer(i,j,k);
02226                                                 ptr8=(double *)data8->GetScalarPointer(i,j,k);
02227                                                 ptr4=(unsigned char *)data4->GetScalarPointer(i,j,k);
02228                                                 ptr6=(unsigned char *)data6->GetScalarPointer(i,j,k);
02229                                                         
02230                                                 if(*ptr4==1){
02231                                                         if(mincst>=*ptr2){
02232                                                                 mincst=*ptr2;
02233                                                                 puntomin[0]=i;
02234                                                                 puntomin[1]=j;
02235                                                                 puntomin[2]=k;
02236                                                         }
02237                                                 }
02238                                                 
02239                                                 if(*ptr6==1){
02240                                                         if(mincstb>=*ptr8){
02241                                                                 mincstb=*ptr8;
02242                                                                 puntobmin[0]=i;
02243                                                                 puntobmin[1]=j;
02244                                                                 puntobmin[2]=k;
02245                                                         }
02246                                                 }       
02247                                         }
02248                                 }
02249                         }
02250 
02251                         punto[0]=puntomin[0];
02252                         punto[1]=puntomin[1];
02253                         punto[2]=puntomin[2];
02254 
02255                         puntob[0]=puntobmin[0];
02256                         puntob[1]=puntobmin[1];
02257                         puntob[2]=puntobmin[2];
02258 
02259                         ptr4=(unsigned char *)data4->GetScalarPointer(puntob[0],puntob[1],puntob[2]);
02260                         ptr6=(unsigned char *)data6->GetScalarPointer(punto[0],punto[1],punto[2]);
02261                 
02262 
02263                         if(*ptr4==2){
02264                                 p3[0]=puntob[0];
02265                                 p3[1]=puntob[1];
02266                                 p3[2]=puntob[2];
02267                                 flag=false;
02268                         }
02269 
02270                         if(*ptr6==2){
02271                                 p3[0]=punto[0];
02272                                 p3[1]=punto[1];
02273                                 p3[2]=punto[2];
02274                                 flag=false;
02275                         }
02276                 }
02277 
02278                 data2->Delete();
02279                 data4->Delete();
02280                 data6->Delete();
02281                 data8->Delete();
02282 }

Here is the call graph for this function:

double axisExtractor02::distancia ( int  a[3],
int  b[3] 
) [private]

Definition at line 2436 of file axisExtractor02.cxx.

02437 {
02438         double tmpsqrt=((a[0]-b[0])*(a[0]-b[0]))+((a[1]-b[1])*(a[1]-b[1]))+((a[2]-b[2])*(a[2]-b[2]));
02439         return sqrt(tmpsqrt);
02440 }

double axisExtractor02::distancia ( double  a[3],
double  b[3] 
) [private]

Definition at line 2425 of file axisExtractor02.cxx.

Referenced by comparacion(), correction(), correction2(), mincandit(), and modelo().

02426 {
02427         double tmpsqrt=((a[0]-b[0])*(a[0]-b[0]))+((a[1]-b[1])*(a[1]-b[1]))+((a[2]-b[2])*(a[2]-b[2]));
02428         return sqrt(tmpsqrt);
02429 }

Here is the caller graph for this function:

double axisExtractor02::distanciaejepunto ( double  point[3],
double  point2[3],
double  point3[3] 
) [private]

Definition at line 569 of file axisExtractor02.cxx.

Referenced by cilindro(), correction(), and modelo().

00570 {
00571         
00572         
00573         double point4[3];
00574 
00575         double v[3], v2[3], v3[3];
00576 
00577         double x, dist=0,  y;
00578 
00579                 
00580         v[0]=point3[0]-point2[0];
00581         v[1]=point3[1]-point2[1];
00582         v[2]=point3[2]-point2[2];
00583 
00584         v3[0]=point[0]-point2[0];
00585         v3[1]=point[1]-point2[1];
00586         v3[2]=point[2]-point2[2];
00587                                         
00588         x=((v[0]*v3[0])+(v[1]*v3[1])+(v[2]*v3[2]))/((v[0]*v[0])+(v[1]*v[1])+(v[2]*v[2]));
00589                                         
00590                                         
00591         point4[0]=point2[0]+(x*v[0]);
00592         point4[1]=point2[1]+(x*v[1]);
00593         point4[2]=point2[2]+(x*v[2]);
00594 
00595         v2[0]=point4[0]-point[0];
00596         v2[1]=point4[1]-point[1];
00597         v2[2]=point4[2]-point[2];
00598 
00599         y=(v[0]*v2[0])+(v[1]*v2[1])+(v[2]*v2[2]);
00600 
00601         dist=sqrt((v2[0]*v2[0])+(v2[1]*v2[1])+(v2[2]*v2[2]));
00602                                         
00603         return dist;
00604         
00605 }

Here is the caller graph for this function:

void axisExtractor02::distanciaejes ( vtkPolyData *  eje1,
vtkPolyData *  eje2 
)

Definition at line 285 of file axisExtractor02.cxx.

References lineas, and min.

Referenced by wxSTLWidget_02::ExtractTree2_JF().

00286 {
00287         vtkIdType totalpuntos1=eje1->GetNumberOfPoints();
00288         vtkIdType totalpuntos2=eje2->GetNumberOfPoints();
00289         vtkIdType totallineas=eje2->GetNumberOfLines();
00290 
00291         vtkCell * lineas;
00292 
00293         int i, j;
00294 
00295         double point[3], point2[3], point3[3], point4[3];
00296 
00297         double v[3], v2[3];
00298 
00299         double x, dist, min, y;
00300         FILE *ff;
00301 
00302         ff=fopen("comparacion.txt","w");
00303 
00304         
00305 
00306         for(i=0;i<totalpuntos1;i++){
00307                 eje1->GetPoint(i, point);
00308                 min =5000;
00309                 for(j=0;j<totallineas;j++){
00310                         lineas=eje2->GetCell(j);
00311                                         
00312                                         lineas->GetPoints()->GetPoint(0, point3);
00313                                         lineas->GetPoints()->GetPoint(1, point2);
00314                                         v[0]=point3[0]-point2[0];
00315                                         v[1]=point3[1]-point2[1];
00316                                         v[2]=point3[2]-point2[2];
00317                                         
00318                                         x=((v[0]*point[0])+(v[1]*point[1])+(v[2]*point[2])-(v[0]*point2[0])-(v[1]*point2[1])-(v[2]*point2[2]))/((v[0]*v[0])+(v[1]*v[1])+(v[2]*v[2]));
00319                                         
00320                                         
00321                                         point4[0]=point2[0]+(x*v[0]);
00322                                         point4[1]=point2[1]+(x*v[1]);
00323                                         point4[2]=point2[2]+(x*v[2]);
00324 
00325                                         v2[0]=point4[0]-point[0];
00326                                         v2[1]=point4[1]-point[1];
00327                                         v2[2]=point4[2]-point[2];
00328 
00329                                         y=(v[0]*v2[0])+(v[1]*v2[1])+(v[2]*v2[2]);
00330 
00331                                         if(x>=0 && x<=1){
00332                                                 dist=sqrt(((point4[0]-point[0])*(point4[0]-point[0]))+((point4[1]-point[1])*(point4[1]-point[1]))+((point4[2]-point[2])*(point4[2]-point[2])));
00333                                                 if(dist<min){
00334                                                         min=dist;
00335 
00336 
00337                                                         /*printf("punto: %f %f %f\n", point[0], point[1], point[2]);
00338                                                         printf("punto2: %f %f %f\n", point2[0], point2[1], point2[2]);
00339                                                         printf("punto3: %f %f %f\n", point3[0], point3[1], point3[2]);
00340                                                         printf("punto4: %f %f %f\n", point4[0], point4[1], point4[2]);
00341                                                         printf("v: %f %f %f\n", v[0], v[1], v[2]);
00342                                                         printf("v2: %f %f %f\n", v2[0], v2[1], v2[2]);
00343                                                         printf("%f\n", min);
00344                                                         printf("%f\n", x);
00345                                                         printf("%f\n", y);*/
00346 
00347 
00348 
00349                                                 }
00350                                         }
00351                                 
00352                         /*}*/
00353                 }
00354                 if(min<5){
00355                         fprintf(ff,"%f\n", min);
00356                 }
00357 
00358                         
00359 
00360         }
00361 
00362         fclose(ff);
00363 
00364         
00365         
00366 }

Here is the caller graph for this function:

int axisExtractor02::envolumen ( int  a[3],
vtkImageData *  datae 
) [private]

Definition at line 2863 of file axisExtractor02.cxx.

Referenced by avanzar(), and bruled().

02864 {
02865         
02866         int res;
02867 
02868         unsigned short *ptr;
02869 
02870         ptr=(unsigned short *)  datae->GetScalarPointer(a);
02871 
02872         if(*ptr==0){
02873                 res=0;
02874         }
02875         else{
02876                 res=1;
02877         }
02878         
02879         return res;
02880 }

Here is the caller graph for this function:

void axisExtractor02::Execute (  )  [protected]

Definition at line 372 of file axisExtractor02.cxx.

References blanquear(), buenos, data4, espprin, extprin, extprin0, flagg, flagg2, frama, fseg, GetInput(), lineas, mejorcant, mejordst, mejorrad, New(), points, and todo().

00373 {
00374         flagg=0;
00375         flagg2=0;
00376         frama=0;
00377         fseg=0;
00378         mejordst=0;
00379         mejorrad=0;
00380         mejorcant=0;
00381         
00382         //double minspac;
00383 
00384         time_t start,end;
00385         double dif;
00386 //      FILE *ff;
00387         
00388         this->GetInput()->GetExtent(extprin0);
00389         this->GetInput()->GetExtent(extprin);
00390         this->GetInput()->GetSpacing(espprin);
00391 
00392 // EED
00393 //      stream  = fopen( "resultado.txt", "w" );
00394 //      fprintf(stream, "accion\tindexp\tbuenos\tradiotrabajo\tradioactual\tradiopred\tradioanterior\tmejordst\tmejorrad\tmejorcant\tflag2\tflag3\tflag4\tflag5\tflag6\tflag7\tflag8\tflag9\tflag10\tflag11\tflag12\tflag13\tflag14\tflag15\tflag16\tflag17\tflag18\tflag19\tflag20\tflagg\tflagg2\tcantidad\tcantidadb\tburned\tpuntoactual\tpuntoanterior\tpuntopre\tmejor\n");
00395 
00396         /*minspac=min(espprin[0],min(espprin[1],espprin[2]));
00397 
00398         this->resample->SetAxisOutputSpacing( 0, minspac);
00399         this->resample->SetAxisOutputSpacing( 1, minspac);
00400         this->resample->SetAxisOutputSpacing( 2, minspac);
00401         resample->Update();*/
00402         
00403 
00404         this->data4->SetScalarTypeToUnsignedChar();
00405         this->data4->SetExtent(this->GetInput()->GetExtent());
00406         this->data4->SetSpacing(this->GetInput()->GetSpacing());
00407 
00408         this->blanquear(this->data4);
00409 
00410         this->points = vtkPoints::New();
00411         this->buenos=0;
00412         this->lineas = vtkCellArray::New();
00413 
00414 
00415         time (&start);
00416         this->todo();
00417 
00418 // EED
00419 //      fclose( stream );
00420         
00421         ((vtkPolyData *)this->Outputs[0])->SetPoints (this->points);
00422         ((vtkPolyData *)this->Outputs[0])->SetLines(this->lineas);
00423         time (&end);
00424         dif = difftime (end,start);
00425 
00426 //      ff=fopen("time.txt","w");
00427 //      fprintf(ff,"%d \n",this->buenos);
00428 //      fprintf(ff,"%.2lf \n",dif);
00429 //      fprintf(ff,"%.2lf \n",(double)this->buenos/dif);
00430 //      fclose(ff);
00431         
00432 }

Here is the call graph for this function:

unsigned char axisExtractor02::find_components ( vtkImageData *  data,
vtkImageData *  data2,
unsigned char  label,
unsigned long  vector[50][4] 
) [private]

Definition at line 743 of file axisExtractor02.cxx.

References searc().

Referenced by avanzar().

00744 {
00745         int ext[6];
00746         int i, j, k, radio;
00747         int i2, j2, k2;
00748 
00749         data->GetExtent(ext);
00750         double *ff=  data->GetOrigin();
00751 
00752 
00753         unsigned char *ptr;
00754         unsigned char *ptr2;
00755 
00756         radio=(ext[1]-ext[0])/2;
00757 
00758         for(i=ext[0], i2=-radio;i<=ext[1];i++, i2++){
00759                         for(j=ext[2], j2=-radio;j<=ext[3];j++, j2++){
00760                                 for(k=ext[4], k2=-radio;k<=ext[5];k++, k2++){
00761                                         ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
00762                                         ptr2=(unsigned char *)  data2->GetScalarPointer(i,j,k);
00763 
00764                                         if(*ptr==255 && *ptr2==0 && (radio*radio)>=((i2*i2)+(j2*j2)+(k2*k2)) && ((radio-1)*(radio-1))<=((i2*i2)+(j2*j2)+(k2*k2))  ){
00765                                                 label=label+1;
00766                                                 vector[label-1][0]=0;
00767                                                 vector[label-1][1]=0;
00768                                                 vector[label-1][2]=0;
00769                                                 vector[label-1][3]=0;
00770                                                 searc(i, j, k, data, data2, label, vector);
00771                                                 
00772                                         }
00773                                 }
00774                         }
00775                 }
00776 
00777                 return label;
00778 }

Here is the call graph for this function:

Here is the caller graph for this function:

unsigned char axisExtractor02::find_componentsb ( vtkImageData *  data,
vtkImageData *  data2,
unsigned char  label,
unsigned long  vector[50][4] 
) [private]

Definition at line 784 of file axisExtractor02.cxx.

References searcb().

Referenced by avanzar().

00785 {
00786         int ext[6];
00787         int i, j, k, radio;
00788         int i2, j2, k2;
00789 
00790         data->GetExtent(ext);
00791 
00792         unsigned char *ptr;
00793         unsigned char *ptr2;
00794 
00795         radio=(ext[1]-ext[0])/2;
00796 
00797         for(i=ext[0], i2=-radio;i<=ext[1];i++, i2++){
00798                         for(j=ext[2], j2=-radio;j<=ext[3];j++, j2++){
00799                                 for(k=ext[4], k2=-radio;k<=ext[5];k++, k2++){
00800                                         ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
00801                                         ptr2=(unsigned char *)  data2->GetScalarPointer(i,j,k);
00802 
00803                                         if(*ptr==0 && *ptr2==0 && (radio*radio)>=((i2*i2)+(j2*j2)+(k2*k2)) && ((radio-1)*(radio-1))<=((i2*i2)+(j2*j2)+(k2*k2))  ){
00804                                                 label=label+1;
00805                                                 vector[label-1][0]=0;
00806                                                 vector[label-1][1]=0;
00807                                                 vector[label-1][2]=0;
00808                                                 vector[label-1][3]=0;
00809                                                 searcb(i, j, k, data, data2, label, vector);
00810                                                 
00811                                         }
00812                                 }
00813                         }
00814                 }
00815 
00816                 return label;
00817 }

Here is the call graph for this function:

Here is the caller graph for this function:

vtkImageData * axisExtractor02::GetInput (  ) 

Definition at line 440 of file axisExtractor02.cxx.

Referenced by Execute(), GetOutput(), SetInput(), and SetPoint().

00441 {
00442         if (this->NumberOfInputs < 1){
00443                 return NULL;
00444     }
00445   
00446         return (vtkImageData *)(this->Inputs[0]);
00447 }

Here is the caller graph for this function:

int axisExtractor02::GetMaxant (  ) 

Definition at line 89 of file axisExtractor02.cxx.

References maxant.

00090 {
00091         return this->maxant;
00092 }

int axisExtractor02::GetMinant (  ) 

Definition at line 105 of file axisExtractor02.cxx.

References minant.

00106 {
00107         return this->minant;
00108 }

vtkPolyData * axisExtractor02::GetOutput (  ) 

Definition at line 163 of file axisExtractor02.cxx.

References GetInput(), maxant, and New().

Referenced by wxEmptyPanelWidget::ConfigureVTK(), wxSTLWidget_02::ExtractTree2_JF(), and wxEmptyPanelWidget_2::ExtractTree2_JF().

00164 {
00165 
00166                 
00167 
00168         
00169         vtkTransform *transL1;
00170         vtkTransformPolyDataFilter *trans;
00171 
00172         transL1 = vtkTransform::New();
00173         trans = vtkTransformPolyDataFilter::New();
00174 
00175 // EED 30 Oct 2006
00176         double spa[3];
00177         this->GetInput()->GetSpacing (spa);
00178         transL1->Translate(-maxant*spa[0], -maxant*spa[1], -maxant*spa[2]);
00179 //      transL1->Translate(-maxant, -maxant, -maxant);
00180 
00181         
00182         trans->SetInput((vtkPolyData *)(this->Outputs[0]));
00183 
00184         trans->SetTransform (transL1);
00185 
00186         trans->Update();
00187 
00188         return trans->GetOutput();
00189 }

Here is the call graph for this function:

Here is the caller graph for this function:

double axisExtractor02::GetParam (  ) 

Definition at line 39 of file axisExtractor02.cxx.

References param.

00040 {
00041         return this->param;
00042 }

double axisExtractor02::GetParam2 (  ) 

Definition at line 56 of file axisExtractor02.cxx.

References param2.

00057 {
00058         return this->param2;
00059 }

double axisExtractor02::GetParam3 (  ) 

Definition at line 73 of file axisExtractor02.cxx.

References param3.

00074 {
00075         return this->param3;
00076 }

vtkImageData * axisExtractor02::GetVolumen (  ) 

Definition at line 142 of file axisExtractor02.cxx.

References data4, maxant, and New().

Referenced by wxEmptyPanelWidget::ConfigureVTK(), wxSTLWidget_02::ExtractTree2_JF(), wxEmptyPanelWidget_2::ExtractTree2_JF(), and wxSTLWidget_02::generateSTLSurfaces().

00143 {
00144 
00145         vtkImageTranslateExtent *trans;
00146 
00147         trans = vtkImageTranslateExtent::New();
00148 
00149         trans->SetInput(this->data4);
00150         
00151         trans->SetTranslation (maxant, maxant, maxant);
00152 
00153         trans->Update();
00154 
00155         return trans->GetOutput();
00156 }

Here is the call graph for this function:

Here is the caller graph for this function:

void axisExtractor02::indextoreal ( double  a[3],
double  b[3] 
) [private]

Definition at line 550 of file axisExtractor02.cxx.

References espprin.

00551 {       
00552         double minspac;
00553 
00554 // EED 15 Mai 2007 .NET 
00555 //      minspac=min(espprin[0],min(espprin[1],espprin[2]));
00556 
00557         minspac=espprin[0];
00558         if (espprin[1]<minspac) { minspac=espprin[1]; }
00559         if (espprin[2]<minspac) { minspac=espprin[2]; }
00560 
00561         b[0]=(a[0])*minspac;
00562         b[1]=(a[1])*minspac;
00563         b[2]=a[2]*minspac;
00564 }

void axisExtractor02::indextoreal ( int  a[3],
double  b[3] 
) [private]

Definition at line 532 of file axisExtractor02.cxx.

References espprin.

Referenced by avanzar(), cilindro(), correction(), correction2(), mincandit(), and modelo().

00533 {       
00534         double minspac;
00535 
00536 // EED 15 Mai 2007 .NET 
00537 //      minspac=min(espprin[0],min(espprin[1],espprin[2]));
00538         minspac=espprin[0];
00539         if (espprin[1]<minspac) { minspac=espprin[1]; }
00540         if (espprin[2]<minspac) { minspac=espprin[2]; }
00541         
00542         b[0]=(a[0])*minspac;
00543         b[1]=(a[1])*minspac;
00544         b[2]=a[2]*minspac;
00545 }

Here is the caller graph for this function:

void axisExtractor02::invertir ( vtkImageData *  data  )  [private]

Definition at line 2289 of file axisExtractor02.cxx.

02290 {
02291         int ext[6];
02292         int i, j, k, radio;
02293         int i2, j2, k2;
02294 
02295         data->GetExtent(ext);
02296 
02297         unsigned char *ptr;
02298 
02299         radio=(ext[1]-ext[0])/2;
02300 
02301         double tmpsqrt;
02302 
02303         for(i=ext[0], i2=-radio;i<=ext[1];i++, i2++){
02304                 for(j=ext[2], j2=-radio;j<=ext[3];j++, j2++){
02305                         for(k=ext[4], k2=-radio;k<=ext[5];k++, k2++){
02306                                 ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
02307                                 tmpsqrt=(i2*i2)+(j2*j2)+(k2*k2);                
02308                                 if( radio<sqrt(tmpsqrt) ){
02309                                         if(*ptr==0){
02310                                                 *ptr=255;
02311                                         }
02312                                         else{
02313                                                 *ptr=0;
02314                                         }
02315                                 }
02316                         }
02317                 }
02318         }
02319 }

int axisExtractor02::maxareacandit ( unsigned long  vector[50][4],
int  cantidad 
) [private]

Definition at line 2915 of file axisExtractor02.cxx.

References max.

Referenced by avanzar().

02916 {
02917         
02918         unsigned long max;
02919         int i;
02920         int indmax=0;
02921         
02922 
02923         max=0;
02924 
02925         for(i=0;i<cantidad && i<10;i++){
02926                 if(max<vector[i][0]){
02927                         max=vector[i][0];
02928                         indmax=i;
02929                 }
02930         }
02931 
02932         return indmax;
02933 
02934 }

Here is the caller graph for this function:

int axisExtractor02::mincandit ( int  candit[10][3],
int  cantidad,
double  puntoanterior[3] 
) [private]

Definition at line 2886 of file axisExtractor02.cxx.

References distancia(), and indextoreal().

Referenced by avanzar().

02887 {
02888         double distentpu;
02889         double distmientrp;
02890         int     inminenpu=0;
02891 
02892         double canditreal[3];
02893         int i;
02894         
02895 
02896         distmientrp=64000;
02897         inminenpu=0;
02898 
02899         for(i=0;i<cantidad && i<10;i++){
02900                 indextoreal(candit[i], canditreal);
02901                 distentpu=distancia(canditreal, puntoanterior);
02902                 if(distentpu<distmientrp){
02903                         distmientrp=distentpu;
02904                         inminenpu=i;
02905                 }
02906         }
02907 
02908         return inminenpu;
02909 
02910 }

Here is the call graph for this function:

Here is the caller graph for this function:

void axisExtractor02::modelo ( vtkImageData *  data,
unsigned char  cantidad,
unsigned long  vector[50][4],
int  candit[10][3],
double  radioactual,
double  minis[10] 
) [private]

Definition at line 2591 of file axisExtractor02.cxx.

References distancia(), distanciaejepunto(), espprin, indextoreal(), and proporcioejepunto().

Referenced by avanzar().

02592 {
02593         int ext[6];
02594         int i, j, k, radio, radio2;
02595         int i2, j2, k2;
02596         int t;
02597         int centro[3];
02598         int punto[3];
02599         int punto2[3];
02600         double centrof[3];
02601         double puntof[3];
02602         double radiof;
02603         double puntof2[3];
02604 
02605         double dist, prop, rest;
02606         
02607 
02608         data->GetExtent(ext);
02609 
02610         unsigned char *ptr;
02611 
02612         radio=(ext[1]-ext[0])/2;
02613         radio2=(int)radioactual;
02614         
02615         centro[0]=(ext[1]+ext[0])/2;
02616         centro[1]=(ext[3]+ext[2])/2;
02617         centro[2]=(ext[5]+ext[4])/2;
02618 
02619         indextoreal(centro, centrof );
02620         
02621         double tmpsqrt;
02622 
02623         for(i=ext[0];i<=ext[1];i++){
02624                 for(j=ext[2];j<=ext[3];j++){
02625                         for(k=ext[4];k<=ext[5];k++){
02626                                 ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
02627                                 punto[0]=i;
02628                                 punto[1]=j;
02629                                 punto[2]=k;
02630                                 
02631                                 if( radioactual<distancia(punto, centro) ){
02632                                         *ptr=0;                                         
02633                                 }
02634                                 else{
02635                                         *ptr=255;
02636                                         
02637                                 }
02638                         }
02639                 }
02640         }
02641 
02642         for(t=0;t<cantidad;t++){
02643                 radiof=sqrt(minis[t]);
02644 
02645                 punto2[0]=candit[t][0];
02646                 punto2[1]=candit[t][1];
02647                 punto2[2]=candit[t][2];
02648 
02649                 indextoreal(punto2, puntof2 );
02650         
02651 
02652                 for(i=ext[0], i2=-radio;i<=ext[1];i++, i2++){
02653                         for(j=ext[2], j2=-radio;j<=ext[3];j++, j2++){
02654                                 for(k=ext[4], k2=-radio;k<=ext[5];k++, k2++){
02655                                         ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
02656                                         punto[0]=i;
02657                                         punto[1]=j;
02658                                         punto[2]=k;
02659                                         indextoreal(punto, puntof );
02660 
02661                                         dist=distanciaejepunto(puntof, centrof, puntof2);
02662                                         prop=proporcioejepunto(puntof, centrof, puntof2);
02663 
02664                                         if(prop>=0 && prop<=1){
02665                                                 rest=(radiof-radioactual)*prop+radioactual;
02666                                                 rest=rest+0.25;
02667                                                 rest=rest*espprin[0];
02668                                         }
02669                                         else{
02670                                                 rest=dist-1;
02671                                         }
02672                                         tmpsqrt = (i2*i2)+(j2*j2)+(k2*k2);
02673                                         if( radio>sqrt(tmpsqrt) && rest>dist){
02674                                                 *ptr=255;
02675                                         }                                       
02676                                 }
02677                         }
02678                 }
02679         }
02680 }

Here is the call graph for this function:

Here is the caller graph for this function:

static axisExtractor02* axisExtractor02::New (  )  [static]
void axisExtractor02::operator= ( const axisExtractor02  )  [private]
void axisExtractor02::optim ( vtkImageData *  data,
vtkImageData *  data2 
) [private]

Definition at line 920 of file axisExtractor02.cxx.

References A, A2, A2p, Ai, Ap, border(), cant, cant2, centi, centi2, centix, centiy, centiz, centx, centx2, centx2p, centxp, centy, centy2, centy2p, centyp, centz, centz2, centz2p, centzp, costo, costop, des2, des3, ejemin, ejemin2, ejemin2p, ejemini, ejeminp, inercia2r, inercia2rp, inerciaii, inerciaii2, inerciar, inerciari, inerciariy, inerciariz, inerciarp, inerciarpy, inerciarpz, inerciary, inerciarz, max, max2, max3, min, min2, min3, param, param2, param3, param4, sumi, sumi2, sumii, sumii2, V, V2, V2p, Vi, Vp, w, w2, w2p, wi, and wp.

Referenced by avanzar().

00921 {
00922         int ext[6];
00923         int i, j, k, radio;
00924         int centro[3];
00925 
00926         double w0, w1;
00927 
00928         double w0p, w1p;
00929 
00930         double inerciaxx, inerciayy, inerciazz, inerciaxy, inerciayz, inerciazx;
00931         double sumx, sumy, sumz;
00932         double sumxx, sumyy, sumzz, sumxy, sumyz, sumzx;
00933 
00934         double sumix, sumiy, sumiz;
00935         double sumixx, sumiyy, sumizz, sumixy, sumiyz, sumizx;
00936 
00937         double inerciaixx, inerciaiyy, inerciaizz, inerciaixy, inerciaiyz, inerciaizx;
00938 
00939         double inerciaxx2, inerciayy2, inerciazz2, inerciaxy2, inerciayz2, inerciazx2;
00940         double sumx2, sumy2, sumz2;
00941         double sumxx2, sumyy2, sumzz2, sumxy2, sumyz2, sumzx2;
00942 
00943         double sumix2, sumiy2, sumiz2;
00944         double sumixx2, sumiyy2, sumizz2, sumixy2, sumiyz2, sumizx2;
00945 
00946         //double sumixp, sumiyp, sumizp;
00947         //double sumix2p, sumiy2p, sumiz2p;
00948 
00949         double inerciaxxp, inerciayyp, inerciazzp, inerciaxyp, inerciayzp, inerciazxp;
00950         double sumxp, sumyp, sumzp;
00951         double sumxxp, sumyyp, sumzzp, sumxyp, sumyzp, sumzxp;
00952 
00953         double inerciaxx2p, inerciayy2p, inerciazz2p, inerciaxy2p, inerciayz2p, inerciazx2p;
00954         double sumx2p, sumy2p, sumz2p;
00955         double sumxx2p, sumyy2p, sumzz2p, sumxy2p, sumyz2p, sumzx2p;
00956 
00957         //double inerciaixx2p, inerciaiyy2p, inerciaizz2p, inerciaixy2p, inerciaiyz2p, inerciaizx2p;
00958         
00959         unsigned long cantp;
00960         double sumip;
00961         double sumiip;
00962         double inerciaiip;
00963         double centip;
00964         
00965         unsigned long cant2p;
00966         double sumi2p;
00967         double sumii2p;
00968         double inerciaii2p;
00969         double centi2p;
00970         
00971         int point[3];
00972 
00973         
00974         double sumitotal=0;
00975         double distcent=0;
00976 
00977         double im, jm, km, lm;
00978         
00979 
00980         max2=0;
00981         cant=0;
00982         sumi=0;
00983         sumii=0;
00984         des2=0;
00985         min2=3200;
00986         centi=0;
00987 
00988         max3=0;
00989         cant2=0;
00990         sumi2=0;
00991         sumii2=0;
00992         des3=0;
00993         min3=3200;
00994         centi2=0;
00995 
00996         sumx=0;
00997         sumy=0;
00998         sumz=0;
00999 
01000         sumxx=0;
01001         sumyy=0;
01002         sumzz=0;
01003 
01004         sumxy=0;
01005         sumyz=0;
01006         sumzx=0;
01007 
01008         sumix=0;
01009         sumiy=0;
01010         sumiz=0;
01011 
01012         sumixx=0;
01013         sumiyy=0;
01014         sumizz=0;
01015 
01016         sumixy=0;
01017         sumiyz=0;
01018         sumizx=0;
01019 
01020         sumx2=0;
01021         sumy2=0;
01022         sumz2=0;
01023 
01024         sumxx2=0;
01025         sumyy2=0;
01026         sumzz2=0;
01027 
01028         sumxy2=0;
01029         sumyz2=0;
01030         sumzx2=0;
01031 
01032         sumix2=0;
01033         sumiy2=0;
01034         sumiz2=0;
01035 
01036         sumixx2=0;
01037         sumiyy2=0;
01038         sumizz2=0;
01039 
01040         sumixy2=0;
01041         sumiyz2=0;
01042         sumizx2=0;
01043 
01044         max=0;
01045         min=3200;
01046                 
01047 
01048         data->GetExtent(ext);
01049 
01050         unsigned short *ptr;
01051         unsigned char *ptr2;
01052 
01053         radio=(ext[1]-ext[0])/2;
01054 
01055         centro[0]=(ext[1]+ext[0])/2;
01056         centro[1]=(ext[3]+ext[2])/2;
01057         centro[2]=(ext[5]+ext[4])/2;
01058         
01059         double tmpsqrt;
01060 
01061         for(i=ext[0];i<=ext[1];i++){
01062                 for(j=ext[2];j<=ext[3];j++){
01063                         for(k=ext[4];k<=ext[5];k++){
01064                                 tmpsqrt=((i-centro[0])*(i-centro[0]))+((j-centro[1])*(j-centro[1]))+((k-centro[2])*(k-centro[2]));
01065                                 if( radio>=sqrt( tmpsqrt) ){
01066                                         ptr=(unsigned short *)data->GetScalarPointer(i,j,k);
01067                                         if(*ptr>max){
01068                                                 max=*ptr;
01069                                                         
01070                                         }
01071                                         if(*ptr<min){
01072                                                 min=*ptr;
01073                                                         
01074                                         }
01075                                 }
01076                         }
01077                 }
01078         }
01079 
01080         for(i=ext[0];i<=ext[1];i++){
01081                 for(j=ext[2];j<=ext[3];j++){
01082                         for(k=ext[4];k<=ext[5];k++){
01083                                 tmpsqrt=((i-centro[0])*(i-centro[0]))+((j-centro[1])*(j-centro[1]))+((k-centro[2])*(k-centro[2]));
01084                                 if( radio>=sqrt(tmpsqrt) ){
01085                                         ptr=(unsigned short *)data->GetScalarPointer(i,j,k);
01086                                         ptr2=(unsigned char *)data2->GetScalarPointer(i,j,k);
01087                                         point[0]=i;
01088                                         point[1]=j;
01089                                         point[2]=k;
01090                                                 
01091                                         im=2*((((double)i-(double)ext[0])/((double)ext[1]-(double)ext[0]))-0.5);
01092                                         jm=2*((((double)j-(double)ext[2])/((double)ext[3]-(double)ext[2]))-0.5);
01093                                         km=2*((((double)k-(double)ext[4])/((double)ext[5]-(double)ext[4]))-0.5);
01094                                         lm=2*(((double)*ptr-(double)min)/((double)max-(double)min));
01095                                                         
01096                                         if(*ptr2!=0){
01097                                                 sumi+=lm;
01098                                                 sumii+=lm*lm;
01099                                                 cant+=1;
01100 
01101                                                 sumx+=im;
01102                                                 sumy+=jm;
01103                                                 sumz+=km;
01104 
01105                                                 sumxx+=im*im;
01106                                                 sumyy+=jm*jm;
01107                                                 sumzz+=km*km;
01108                                                 sumxy+=im*jm;
01109                                                 sumyz+=jm*km;
01110                                                 sumzx+=km*im;
01111 
01112                                                 sumix+=lm*im;
01113                                                 sumiy+=lm*jm;
01114                                                 sumiz+=lm*km;
01115 
01116                                                 sumixx+=lm*im*im;
01117                                                 sumiyy+=lm*jm*jm;
01118                                                 sumizz+=lm*km*km;
01119                                                 sumixy+=lm*im*jm;
01120                                                 sumiyz+=lm*jm*km;
01121                                                 sumizx+=lm*km*im;
01122                                         }
01123                                         else{
01124                                                 sumi2+=lm;
01125                                                 sumii2+=lm*lm;
01126                                                 cant2+=1;
01127                                         
01128                                                 sumx2+=im;
01129                                                 sumy2+=jm;
01130                                                 sumz2+=km;
01131 
01132                                                 sumxx2+=im*im;
01133                                                 sumyy2+=jm*jm;
01134                                                 sumzz2+=km*km;
01135                                                 sumxy2+=im*jm;
01136                                                 sumyz2+=jm*km;
01137                                                 sumzx2+=km*im;
01138 
01139                                                 sumix2+=lm*im;
01140                                                 sumiy2+=lm*jm;
01141                                                 sumiz2+=lm*km;
01142 
01143                                                 sumixx2+=lm*im*im;
01144                                                 sumiyy2+=lm*jm*jm;
01145                                                 sumizz2+=lm*km*km;
01146                                                 sumixy2+=lm*im*jm;
01147                                                 sumiyz2+=lm*jm*km;
01148                                                 sumizx2+=lm*km*im;
01149                                         }
01150                                 }
01151                         }
01152                 }
01153         }
01154 
01155         centi=(double)sumi/(double)cant;
01156         inerciaii= ((double)sumii/(double)cant)-(centi*centi);
01157                                                 
01158         centi2=(double)sumi2/(double)cant2;
01159         inerciaii2= ((double)sumii2/(double)cant2)-(centi2*centi2);
01160 
01161         centx=(double)sumx/(double)cant;
01162         centy=(double)sumy/(double)cant;
01163         centz=(double)sumz/(double)cant;
01164 
01165         centx2=(double)sumx2/(double)cant2;
01166         centy2=(double)sumy2/(double)cant2;
01167         centz2=(double)sumz2/(double)cant2;
01168         
01169         inerciaxx= ((double)sumxx/(double)cant)-centx*centx;
01170         inerciayy= ((double)sumyy/(double)cant)-centy*centy;
01171         inerciazz= ((double)sumzz/(double)cant)-centz*centz;
01172 
01173         inerciaxx2= ((double)sumxx2/(double)cant2)-centx2*centx2;
01174         inerciayy2= ((double)sumyy2/(double)cant2)-centy2*centy2;
01175         inerciazz2= ((double)sumzz2/(double)cant2)-centz2*centz2;
01176 
01177         inerciaxy= ((double)sumxy/(double)cant)-centx*centy;
01178         inerciayz= ((double)sumyz/(double)cant)-centy*centz;
01179         inerciazx= ((double)sumzx/(double)cant)-centz*centx;
01180 
01181         inerciaxy2= ((double)sumxy2/(double)cant2)-centx2*centy2;
01182         inerciayz2= ((double)sumyz2/(double)cant2)-centy2*centz2;
01183         inerciazx2= ((double)sumzx2/(double)cant2)-centz2*centx2;
01184 
01185 
01186         centix=((double)sumix+(double)sumix2)/((double)sumi+(double)sumi2);
01187         centiy=((double)sumiy+(double)sumiy2)/((double)sumi+(double)sumi2);
01188         centiz=((double)sumiz+(double)sumiz2)/((double)sumi+(double)sumi2);
01189                 
01190         inerciaixx= ( ((double)sumixx+(double)sumixx2) / ((double)sumi+(double)sumi2)  )-(centix*centix);
01191         inerciaiyy= ( ((double)sumiyy+(double)sumiyy2) / ((double)sumi+(double)sumi2)  )-(centiy*centiy);
01192         inerciaizz= ( ((double)sumizz+(double)sumizz2) / ((double)sumi+(double)sumi2)  )-(centiz*centiz);
01193 
01194 
01195         inerciaixy= ( ((double)sumixy+(double)sumixy2) / ((double)sumi+(double)sumi2)  )-(centix*centiy);
01196         inerciaiyz= ( ((double)sumiyz+(double)sumiyz2) / ((double)sumi+(double)sumi2)  )-(centiy*centiz);
01197         inerciaizx= ( ((double)sumizx+(double)sumizx2) / ((double)sumi+(double)sumi2)  )-(centiz*centix);
01198 
01199 
01200         A[0][0]=inerciaxx;
01201         A[1][1]=inerciayy;
01202         A[2][2]=inerciazz;
01203         A[0][1]=A[1][0]=inerciaxy;
01204         A[0][2]=A[2][0]=inerciazx;
01205         A[1][2]=A[2][1]=inerciayz;
01206 
01207         A2[0][0]=inerciaxx2;
01208         A2[1][1]=inerciayy2;
01209         A2[2][2]=inerciazz2;
01210         A2[0][1]=A2[1][0]=inerciaxy2;
01211         A2[0][2]=A2[2][0]=inerciazx2;
01212         A2[1][2]=A2[2][1]=inerciayz2;
01213 
01214         Ai[0][0]=inerciaixx;
01215         Ai[1][1]=inerciaiyy;
01216         Ai[2][2]=inerciaizz;
01217         Ai[0][1]=Ai[1][0]=inerciaixy;
01218         Ai[0][2]=Ai[2][0]=inerciaizx;
01219         Ai[1][2]=Ai[2][1]=inerciaiyz;
01220 
01221         vtkMath::Diagonalize3x3  (A, w, V);
01222         vtkMath::Diagonalize3x3  (A2, w2, V2);
01223         vtkMath::Diagonalize3x3  (Ai, wi, Vi);
01224 
01225         
01226         if(w[0]>w[1]){
01227                 if(w[0]>w[2]){
01228                         ejemin=0;
01229                         inerciar=w[1]+w[2];
01230                         if(w[1]>w[2]){
01231                                 inerciary=w[0]+w[2];
01232                                 inerciarz=w[0]+w[1];
01233                         }
01234                         else{
01235                                 inerciary=w[0]+w[1];
01236                                 inerciarz=w[0]+w[2];
01237                         }
01238                 }
01239                 else{
01240                         ejemin=2;
01241                         inerciar=w[0]+w[1];
01242                         if(w[1]>w[0]){
01243                                 inerciary=w[0]+w[2];
01244                                 inerciarz=w[1]+w[2];
01245                         }
01246                         else{
01247                                 inerciary=w[1]+w[2];
01248                                 inerciarz=w[0]+w[2];
01249                         }
01250                 }
01251         }
01252         else{
01253                 if(w[1]>w[2]){
01254                         ejemin=1;
01255                         inerciar=w[2]+w[0];
01256                         if(w[2]>w[0]){
01257                                 inerciary=w[1]+w[0];
01258                                 inerciarz=w[1]+w[2];
01259                         }
01260                         else{
01261                                 inerciary=w[1]+w[2];
01262                                 inerciarz=w[1]+w[0];
01263                         }
01264                 }
01265                 else{
01266                         ejemin=2;
01267                         inerciar=w[1]+w[0];
01268                         if(w[1]>w[0]){
01269                                 inerciary=w[0]+w[2];
01270                                 inerciarz=w[1]+w[2];
01271                         }
01272                         else{
01273                                 inerciary=w[1]+w[2];
01274                                 inerciarz=w[0]+w[2];
01275                         }
01276                 }
01277         }
01278 
01279 
01280         if(w2[0]>w2[1]){
01281                 if(w2[0]>w2[2]){
01282                         ejemin2=0;
01283                         inercia2r=w2[1]+w2[2];
01284                 }
01285                 else{
01286                         ejemin2=2;
01287                         inercia2r=w2[1]+w2[0];
01288                 }
01289         }
01290         else{
01291                 if(w2[1]>w2[2]){
01292                         ejemin2=1;
01293                         inercia2r=w2[2]+w2[0];
01294                 }
01295                 else{
01296                         ejemin2=2;
01297                         inercia2r=w2[1]+w2[0];
01298                 }
01299         }
01300 
01301 
01302         if(wi[0]>wi[1]){
01303                 if(wi[0]>wi[2]){
01304                         ejemini=0;
01305                         inerciari=wi[1]+wi[2];
01306                         if(wi[1]>wi[2]){
01307                                 inerciariy=wi[0]+wi[2];
01308                                 inerciariz=wi[0]+wi[1];
01309                         }
01310                         else{
01311                                 inerciariy=wi[0]+wi[1];
01312                                 inerciariz=wi[0]+wi[2];
01313                         }
01314                 }
01315                 else{
01316                         ejemini=2;
01317                         inerciari=wi[1]+wi[0];
01318                         if(wi[1]>wi[0]){
01319                                 inerciariy=wi[0]+wi[2];
01320                                 inerciariz=wi[1]+wi[2];
01321                         }
01322                         else{
01323                                 inerciariy=wi[1]+wi[2];
01324                                 inerciariz=wi[0]+wi[2];
01325                         }
01326 
01327                 }
01328         }
01329         else{
01330                 if(wi[1]>wi[2]){
01331                         ejemini=1;
01332                         inerciari=wi[2]+wi[0];
01333                         if(wi[2]>wi[0]){
01334                                 inerciariy=wi[1]+wi[0];
01335                                 inerciariz=wi[1]+wi[2];
01336                         }
01337                         else{
01338                                 inerciariy=wi[1]+wi[2];
01339                                 inerciariz=wi[1]+wi[0];
01340                         }
01341                 }
01342                 else{
01343                         ejemini=2;
01344                         inerciari=wi[1]+wi[0];
01345                         if(wi[1]>wi[0]){
01346                                 inerciariy=wi[0]+wi[2];
01347                                 inerciariz=wi[1]+wi[2];
01348                         }
01349                         else{
01350                                 inerciariy=wi[1]+wi[2];
01351                                 inerciariz=wi[0]+wi[2];
01352                         }
01353                 }
01354         }
01355 
01356                 
01357         /*
01358         for(i=ext[0];i<=ext[1];i++){
01359                 for(j=ext[2];j<=ext[3];j++){
01360                         for(k=ext[4];k<=ext[5];k++){
01361                                 if( radio>=sqrt(((i-centro[0])*(i-centro[0]))+((j-centro[1])*(j-centro[1]))+((k-centro[2])*(k-centro[2]))) ){
01362                                         ptr=(unsigned short *)data->GetScalarPointer(i,j,k);
01363                                         ptr2=(unsigned char *)data2->GetScalarPointer(i,j,k);
01364                                         
01365                                         
01366                                         im=2*((((double)i-(double)ext[0])/((double)ext[1]-(double)ext[0]))-0.5);
01367                                         jm=2*((((double)j-(double)ext[2])/((double)ext[3]-(double)ext[2]))-0.5);
01368                                         km=2*((((double)k-(double)ext[4])/((double)ext[5]-(double)ext[4]))-0.5);
01369 
01370                                         point1[0]=im;
01371                                         point1[1]=jm;
01372                                         point1[2]=km;
01373 
01374                                         point2[0]=centx+V[0][ejemin];
01375                                         point2[1]=centy+V[1][ejemin];
01376                                         point2[2]=centz+V[2][ejemin];
01377 
01378                                         point3[0]=centx-V[0][ejemin];
01379                                         point3[1]=centy-V[1][ejemin];
01380                                         point3[2]=centz-V[2][ejemin];
01381 
01382                                         //distcent=1+sqrt(centx*centx+centy*centy+centz*centz);
01383                                         distcent=1;
01384                                                 
01385                                         if(*ptr2==0){                           
01386                                                 
01387                                                 sumitotal+=(distcent-fabs(distanciaejepunto(point1, point2, point3)))*(distcent-fabs(distanciaejepunto(point1, point2, point3)));
01388                                                 
01389                                         }
01390                                 }
01391                         }
01392                 }
01393         }
01394 
01395         inercia2r=sumitotal/cant2;
01396         */
01397 
01398 
01399 
01400 
01401         /*printf("centx: %f\n", centx);
01402         printf("centy: %f\n", centy);
01403         printf("centz: %f\n", centz);
01404 
01405         printf("w[0]: %f\n", w[0]);
01406         printf("w[1]: %f\n", w[1]);
01407         printf("w[2]: %f\n", w[2]);
01408         printf("inerciar: %f\n", inerciar);
01409 
01410         printf("w[ejemin]: %f\n", w[ejemin]);
01411 
01412         printf("w[ejemin]/inerciar: %f\n", w[ejemin]/inerciar);
01413 
01414         printf("V[0][0]: %f\n", V[0][0]);
01415         printf("V[1][0]: %f\n", V[1][0]);
01416         printf("V[2][0]: %f\n", V[2][0]);
01417         
01418         printf("V[0][1]: %f\n", V[0][1]);
01419         printf("V[1][1]: %f\n", V[1][1]);
01420         printf("V[2][1]: %f\n", V[2][1]);
01421         
01422         printf("V[0][2]: %f\n", V[0][2]);
01423         printf("V[1][2]: %f\n", V[1][2]);
01424         printf("V[2][2]: %f\n", V[2][2]);*/
01425 
01426         w0=(double)cant/((double)cant+(double)cant2);
01427         w1=(double)cant2/((double)cant+(double)cant2);
01428 
01429         
01430         /*
01431         ut=w0*centi+w1*centi2;
01432         intervar=w0*inerciaii+w1*inerciaii2;
01433         */
01434 
01435         //w0=1;
01436         //w1=1;
01437 
01438         
01439 
01440         //costo=w0*inerciaii+w1*inerciaii2+param*inerciar;
01441         //costo=param*(w0*param3*inerciaii+w1*(1-param3)*inerciaii2)+(1-param)*(w0*param2*inerciar+w1*(1-param2)*inercia2r);
01442         costo=param*w0*inerciaii+w1*param2*inerciaii2+w0*param3*inerciar+w1*param4*inercia2r;
01443 
01444         int changes=4;
01445 
01446         int total=0;
01447         
01448         while(changes>3 && total<500){
01449                 changes=0;
01450                 total++;
01451                 for(i=ext[0];i<=ext[1];i++){
01452                         for(j=ext[2];j<=ext[3];j++){
01453                                 for(k=ext[4];k<=ext[5];k++){
01454                                         tmpsqrt = ((i-centro[0])*(i-centro[0]))+((j-centro[1])*(j-centro[1]))+((k-centro[2])*(k-centro[2]));
01455                                         if( radio>=sqrt(tmpsqrt) ){
01456                                                 ptr=(unsigned short *)data->GetScalarPointer(i,j,k);
01457                                                 ptr2=(unsigned char *)data2->GetScalarPointer(i,j,k);
01458                                                 point[0]=i;
01459                                                 point[1]=j;
01460                                                 point[2]=k;
01461 
01462                                                 im=2*((((double)i-(double)ext[0])/((double)ext[1]-(double)ext[0]))-0.5);
01463                                                 jm=2*((((double)j-(double)ext[2])/((double)ext[3]-(double)ext[2]))-0.5);
01464                                                 km=2*((((double)k-(double)ext[4])/((double)ext[5]-(double)ext[4]))-0.5);
01465                                                 lm=2*(((double)*ptr-(double)min)/((double)max-(double)min));
01466                                                 
01467                                                 if(border(data2, point)){
01468                                                         if(*ptr2!=0){
01469                                                                 
01470                                                                 sumip=sumi-lm;
01471                                                                 sumiip=sumii-lm*lm;
01472                                                         
01473                                                                 cantp=cant-1;
01474 
01475                                                                 sumi2p=sumi2+lm;
01476                                                                 sumii2p=sumii2+lm*lm;
01477                                                                 
01478                                                                 cant2p=cant2+1;
01479 
01480                                                                 sumxp=sumx-im;
01481                                                                 sumyp=sumy-jm;
01482                                                                 sumzp=sumz-km;
01483                                                                 sumxxp=sumxx-im*im;
01484                                                                 sumyyp=sumyy-jm*jm;
01485                                                                 sumzzp=sumzz-km*km;
01486                                                                 sumxyp=sumxy-im*jm;
01487                                                                 sumyzp=sumyz-jm*km;
01488                                                                 sumzxp=sumzx-km*im;
01489 
01490                                                                 sumx2p=sumx2+im;
01491                                                                 sumy2p=sumy2+jm;
01492                                                                 sumz2p=sumz2+km;
01493                                                                 sumxx2p=sumxx2+im*im;
01494                                                                 sumyy2p=sumyy2+jm*jm;
01495                                                                 sumzz2p=sumzz2+km*km;
01496                                                                 sumxy2p=sumxy2+im*jm;
01497                                                                 sumyz2p=sumyz2+jm*km;
01498                                                                 sumzx2p=sumzx2+km*im;
01499 
01500                                                                 centip=(double)sumip/(double)cantp;
01501                                                                 inerciaiip= ((double)sumiip/(double)cantp)-(centip*centip);
01502                                                                 
01503                                                                 centi2p=(double)sumi2p/(double)cant2p;
01504                                                                 inerciaii2p= ((double)sumii2p/(double)cant2p)-(centi2p*centi2p);
01505                                                                 
01506                                                                 centxp=(double)sumxp/(double)cantp;
01507                                                                 centyp=(double)sumyp/(double)cantp;
01508                                                                 centzp=(double)sumzp/(double)cantp;
01509 
01510                                                                 centx2p=(double)sumx2p/(double)cant2p;
01511                                                                 centy2p=(double)sumy2p/(double)cant2p;
01512                                                                 centz2p=(double)sumz2p/(double)cant2p;
01513                                                                                                                                 
01514                                                                 inerciaxxp= ((double)sumxxp/(double)cantp)-centxp*centxp;
01515                                                                 inerciayyp= ((double)sumyyp/(double)cantp)-centyp*centyp;
01516                                                                 inerciazzp= ((double)sumzzp/(double)cantp)-centzp*centzp;
01517 
01518                                                                 inerciaxx2p= ((double)sumxx2p/(double)cant2p)-centx2p*centx2p;
01519                                                                 inerciayy2p= ((double)sumyy2p/(double)cant2p)-centy2p*centy2p;
01520                                                                 inerciazz2p= ((double)sumzz2p/(double)cant2p)-centz2p*centz2p;
01521 
01522                                                                 inerciaxyp= ((double)sumxyp/(double)cantp)-centxp*centyp;
01523                                                                 inerciayzp= ((double)sumyzp/(double)cantp)-centyp*centzp;
01524                                                                 inerciazxp= ((double)sumzxp/(double)cantp)-centzp*centxp;
01525 
01526                                                                 inerciaxy2p= ((double)sumxy2p/(double)cant2p)-centx2p*centy2p;
01527                                                                 inerciayz2p= ((double)sumyz2p/(double)cant2p)-centy2p*centz2p;
01528                                                                 inerciazx2p= ((double)sumzx2p/(double)cant2p)-centz2p*centx2p;
01529 
01530                                                                 Ap[0][0]=inerciaxxp;
01531                                                                 Ap[1][1]=inerciayyp;
01532                                                                 Ap[2][2]=inerciazzp;
01533                                                                 Ap[0][1]=Ap[1][0]=inerciaxyp;
01534                                                                 Ap[0][2]=Ap[2][0]=inerciazxp;
01535                                                                 Ap[1][2]=Ap[2][1]=inerciayzp;
01536 
01537 
01538                                                                 A2p[0][0]=inerciaxx2p;
01539                                                                 A2p[1][1]=inerciayy2p;
01540                                                                 A2p[2][2]=inerciazz2p;
01541                                                                 A2p[0][1]=A2p[1][0]=inerciaxy2p;
01542                                                                 A2p[0][2]=A2p[2][0]=inerciazx2p;
01543                                                                 A2p[1][2]=A2p[2][1]=inerciayz2p;
01544 
01545                                                                 
01546 
01547                                                                 w0p=(double)cantp/((double)cantp+(double)cant2p);
01548                                                                 w1p=(double)cant2p/((double)cantp+(double)cant2p);
01549 
01550                                                                 //w0p=1;
01551                                                                 //w1p=1;
01552                                                                 
01553                                                                 vtkMath::Diagonalize3x3  (Ap, wp, Vp);
01554                                                                 vtkMath::Diagonalize3x3  (A2p, w2p, V2p);
01555 
01556                                                         
01557                                                                 if(wp[0]>wp[1]){
01558                                                                         if(wp[0]>wp[2]){
01559                                                                                 ejeminp=0;
01560                                                                                 inerciarp=wp[2]+wp[1];
01561                                                                                 if(wp[1]>wp[2]){
01562                                                                                         inerciarpy=wp[0]+wp[2];
01563                                                                                         inerciarpz=wp[0]+wp[1];
01564                                                                                 }
01565                                                                                 else{
01566                                                                                         inerciarpy=wp[0]+wp[1];
01567                                                                                         inerciarpz=wp[0]+wp[2];
01568                                                                                 }
01569                                                                         }
01570                                                                         else{
01571                                                                                 ejeminp=2;
01572                                                                                 inerciarp=wp[1]+wp[0];
01573                                                                                 if(wp[1]>wp[0]){
01574                                                                                         inerciarpy=wp[0]+wp[2];
01575                                                                                         inerciarpz=wp[1]+wp[2];
01576                                                                                 }
01577                                                                                 else{
01578                                                                                         inerciarpy=wp[1]+wp[2];
01579                                                                                         inerciarpz=wp[0]+wp[2];
01580                                                                                 }
01581                                                                         }
01582                                                                 }
01583                                                                 else{
01584                                                                         if(wp[1]>wp[2]){
01585                                                                                 ejeminp=1;
01586                                                                                 inerciarp=wp[2]+wp[0];
01587                                                                                 if(wp[2]>wp[0]){
01588                                                                                         inerciarpy=wp[1]+wp[0];
01589                                                                                         inerciarpz=wp[1]+wp[2];
01590                                                                                 }
01591                                                                                 else{
01592                                                                                         inerciarpy=wp[1]+wp[2];
01593                                                                                         inerciarpz=wp[1]+wp[0];
01594                                                                                 }
01595                                                                         }
01596                                                                         else{
01597                                                                                 ejeminp=2;
01598                                                                                 inerciarp=wp[1]+wp[0];
01599                                                                                 if(wp[1]>wp[0]){
01600                                                                                         inerciarpy=wp[0]+wp[2];
01601                                                                                         inerciarpz=wp[1]+wp[2];
01602                                                                                 }
01603                                                                                 else{
01604                                                                                         inerciarpy=wp[1]+wp[2];
01605                                                                                         inerciarpz=wp[0]+wp[2];
01606                                                                                 }
01607                                                                         }
01608                                                                 }
01609 
01610 
01611                                                                 if(w2p[0]>w2p[1]){
01612                                                                         if(w2p[0]>w2p[2]){
01613                                                                                 ejemin2p=0;
01614                                                                                 inercia2rp=w2p[2]+w2p[1];
01615                                                                         }
01616                                                                         else{
01617                                                                                 ejemin2p=2;
01618                                                                                 inercia2rp=w2p[1]+w2p[0];
01619                                                                         }
01620                                                                 }
01621                                                                 else{
01622                                                                         if(w2p[1]>w2p[2]){
01623                                                                                 ejemin2p=1;
01624                                                                                 inercia2rp=w2p[2]+w2p[0];
01625                                                                         }
01626                                                                         else{
01627                                                                                 ejemin2p=2;
01628                                                                                 inercia2rp=w2p[1]+w2p[0];
01629                                                                         }
01630                                                                 }
01631 
01632                                                         /*      point1[0]=im;
01633                                                                 point1[1]=jm;
01634                                                                 point1[2]=km;
01635 
01636                                                                 point2[0]=centxp+Vp[0][ejeminp];
01637                                                                 point2[1]=centyp+Vp[1][ejeminp];
01638                                                                 point2[2]=centzp+Vp[2][ejeminp];
01639 
01640                                                                 point3[0]=centxp-Vp[0][ejeminp];
01641                                                                 point3[1]=centyp-Vp[1][ejeminp];
01642                                                                 point3[2]=centzp-Vp[2][ejeminp];*/
01643 
01644                                                                 //distcent=1+sqrt(centx*centx+centy*centy+centz*centz);
01645                                                         /*      distcent=1;
01646 
01647                                                                 sumitotalp=sumitotal+(distcent-fabs(distanciaejepunto(point1, point2, point3)))*(distcent-fabs(distanciaejepunto(point1, point2, point3)));
01648                                                         
01649                                                                 inercia2rp=sumitotalp/cant2p;*/
01650 
01651                                                                 //costop=w0p*inerciaiip+w1p*inerciaii2p+param*inerciarp;
01652 
01653                                                                 //costop=param*(w0p*param3*inerciaiip+w1p*(1-param3)*inerciaii2p)+(1-param)*(w0p*param2*inerciarp+w1p*(1-param2)*inercia2rp);
01654                                                                 
01655                                                                 
01656                                                                 costop=param*w0p*inerciaiip+w1p*param2*inerciaii2p+w0p*param3*inerciarp+w1p*param4*inercia2rp;
01657 
01658                                                                 if(costop<costo  && centip>centi2p){
01659                                                                                                                                                 
01660                                                                         *ptr2=0;
01661                                                                         changes++;
01662 
01663                                                                         sumi=sumip;
01664                                                                         sumii=sumiip;
01665                                                                         cant=cantp;
01666 
01667                                                                         sumi2=sumi2p;
01668                                                                         sumii2=sumii2p;
01669                                                                         cant2=cant2p;
01670 
01671                                                                         sumx=sumxp;
01672                                                                         sumy=sumyp;
01673                                                                         sumz=sumzp;
01674                                                                         sumxx=sumxxp;
01675                                                                         sumyy=sumyyp;
01676                                                                         sumzz=sumzzp;
01677                                                                         sumxy=sumxyp;
01678                                                                         sumyz=sumyzp;
01679                                                                         sumzx=sumzxp;
01680 
01681                                                                         sumx2=sumx2p;
01682                                                                         sumy2=sumy2p;
01683                                                                         sumz2=sumz2p;
01684                                                                         sumxx2=sumxx2p;
01685                                                                         sumyy2=sumyy2p;
01686                                                                         sumzz2=sumzz2p;
01687                                                                         sumxy2=sumxy2p;
01688                                                                         sumyz2=sumyz2p;
01689                                                                         sumzx2=sumzx2p;
01690 
01691                                                                         centi=centip;
01692                                                                         inerciaii= inerciaiip;
01693                                                                         
01694                                                                         centi2=centi2p;
01695                                                                         inerciaii2p= inerciaii2p;
01696                                                                         
01697                                                                         centx=centxp;
01698                                                                         centy=centyp;
01699                                                                         centz=centzp;
01700 
01701                                                                         centx2=centx2p;
01702                                                                         centy2=centy2p;
01703                                                                         centz2=centz2p;
01704                                                                                                                                                 
01705                                                                         inerciaxx= inerciaxxp;
01706                                                                         inerciayy= inerciayyp;
01707                                                                         inerciazz= inerciazzp;
01708 
01709                                                                         inerciaxx2= inerciaxx2p;
01710                                                                         inerciayy2= inerciayy2p;
01711                                                                         inerciazz2= inerciazz2p;
01712 
01713                                                                         inerciaxy= inerciaxyp;
01714                                                                         inerciayz= inerciayzp;
01715                                                                         inerciazx= inerciazxp;
01716 
01717                                                                         inerciaxy2= inerciaxy2p;
01718                                                                         inerciayz2= inerciayz2p;
01719                                                                         inerciazx2= inerciazx2p;
01720 
01721                                                                 //      sumitotal=sumitotalp;
01722 
01723                                                                         costo=costop;
01724 
01725                                                                 }
01726                                                         }
01727                                                         else{
01728                                                                 sumip=sumi+lm;
01729                                                                 sumiip=sumii+lm*lm;
01730                                                         
01731                                                                 cantp=cant+1;
01732 
01733                                                                 sumi2p=sumi2-lm;
01734                                                                 sumii2p=sumii2-lm*lm;
01735                                                                 
01736                                                                 cant2p=cant2-1;
01737 
01738                                                                 sumxp=sumx+im;
01739                                                                 sumyp=sumy+jm;
01740                                                                 sumzp=sumz+km;
01741                                                                 sumxxp=sumxx+im*im;
01742                                                                 sumyyp=sumyy+jm*jm;
01743                                                                 sumzzp=sumzz+km*km;
01744                                                                 sumxyp=sumxy+im*jm;
01745                                                                 sumyzp=sumyz+jm*km;
01746                                                                 sumzxp=sumzx+km*im;
01747 
01748                                                                 sumx2p=sumx2-im;
01749                                                                 sumy2p=sumy2-jm;
01750                                                                 sumz2p=sumz2-km;
01751                                                                 sumxx2p=sumxx2-im*im;
01752                                                                 sumyy2p=sumyy2-jm*jm;
01753                                                                 sumzz2p=sumzz2-km*km;
01754                                                                 sumxy2p=sumxy2-im*jm;
01755                                                                 sumyz2p=sumyz2-jm*km;
01756                                                                 sumzx2p=sumzx2-km*im;
01757 
01758                                                                 centip=(double)sumip/(double)cantp;
01759                                                                 inerciaiip= ((double)sumiip/(double)cantp)-(centip*centip);
01760                                                                 
01761                                                                 centi2p=(double)sumi2p/(double)cant2p;
01762                                                                 inerciaii2p= ((double)sumii2p/(double)cant2p)-(centi2p*centi2p);
01763                                                                 
01764                                                                 centxp=(double)sumxp/(double)cantp;
01765                                                                 centyp=(double)sumyp/(double)cantp;
01766                                                                 centzp=(double)sumzp/(double)cantp;
01767 
01768                                                                 centx2p=(double)sumx2p/(double)cant2p;
01769                                                                 centy2p=(double)sumy2p/(double)cant2p;
01770                                                                 centz2p=(double)sumz2p/(double)cant2p;
01771                                                                 
01772                                                                 
01773                                                                 inerciaxxp= ((double)sumxxp/(double)cantp)-centxp*centxp;
01774                                                                 inerciayyp= ((double)sumyyp/(double)cantp)-centyp*centyp;
01775                                                                 inerciazzp= ((double)sumzzp/(double)cantp)-centzp*centzp;
01776 
01777                                                                 inerciaxx2p= ((double)sumxx2p/(double)cant2p)-centx2p*centx2p;
01778                                                                 inerciayy2p= ((double)sumyy2p/(double)cant2p)-centy2p*centy2p;
01779                                                                 inerciazz2p= ((double)sumzz2p/(double)cant2p)-centz2p*centz2p;
01780 
01781                                                                 inerciaxyp= ((double)sumxyp/(double)cantp)-centxp*centyp;
01782                                                                 inerciayzp= ((double)sumyzp/(double)cantp)-centyp*centzp;
01783                                                                 inerciazxp= ((double)sumzxp/(double)cantp)-centzp*centxp;
01784 
01785                                                                 inerciaxy2p= ((double)sumxy2p/(double)cant2p)-centx2p*centy2p;
01786                                                                 inerciayz2p= ((double)sumyz2p/(double)cant2p)-centy2p*centz2p;
01787                                                                 inerciazx2p= ((double)sumzx2p/(double)cant2p)-centz2p*centx2p;
01788 
01789                                                                 Ap[0][0]=inerciaxxp;
01790                                                                 Ap[1][1]=inerciayyp;
01791                                                                 Ap[2][2]=inerciazzp;
01792                                                                 Ap[0][1]=Ap[1][0]=inerciaxyp;
01793                                                                 Ap[0][2]=Ap[2][0]=inerciazxp;
01794                                                                 Ap[1][2]=Ap[2][1]=inerciayzp;
01795 
01796                                                                 A2p[0][0]=inerciaxx2p;
01797                                                                 A2p[1][1]=inerciayy2p;
01798                                                                 A2p[2][2]=inerciazz2p;
01799                                                                 A2p[0][1]=A2p[1][0]=inerciaxy2p;
01800                                                                 A2p[0][2]=A2p[2][0]=inerciazx2p;
01801                                                                 A2p[1][2]=A2p[2][1]=inerciayz2p;
01802 
01803                                                                 w0p=(double)cantp/((double)cantp+(double)cant2p);
01804                                                                 w1p=(double)cant2p/((double)cantp+(double)cant2p);
01805 
01806                                                                 //w0p=1;
01807                                                                 //w1p=1;
01808                                                                 
01809                                                                 vtkMath::Diagonalize3x3  (Ap, wp, Vp);
01810                                                                 vtkMath::Diagonalize3x3  (A2p, w2p, V2p);
01811                                                         
01812                                                                 if(wp[0]>wp[1]){
01813                                                                         if(wp[0]>wp[2]){
01814                                                                                 ejeminp=0;
01815                                                                                 inerciarp=wp[2]+wp[1];
01816                                                                                 if(wp[1]>wp[2]){
01817                                                                                         inerciarpy=wp[0]+wp[2];
01818                                                                                         inerciarpz=wp[0]+wp[1];
01819                                                                                 }
01820                                                                                 else{
01821                                                                                         inerciarpy=wp[0]+wp[1];
01822                                                                                         inerciarpz=wp[0]+wp[2];
01823                                                                                 }
01824                                                                         }
01825                                                                         else{
01826                                                                                 ejeminp=2;
01827                                                                                 inerciarp=wp[1]+wp[0];
01828                                                                                 if(wp[1]>wp[0]){
01829                                                                                         inerciarpy=wp[0]+wp[2];
01830                                                                                         inerciarpz=wp[1]+wp[2];
01831                                                                                 }
01832                                                                                 else{
01833                                                                                         inerciarpy=wp[1]+wp[2];
01834                                                                                         inerciarpz=wp[0]+wp[2];
01835                                                                                 }
01836                                                                         }
01837                                                                 }
01838                                                                 else{
01839                                                                         if(wp[1]>wp[2]){
01840                                                                                 ejeminp=1;
01841                                                                                 inerciarp=wp[2]+wp[0];
01842                                                                                 if(wp[2]>wp[0]){
01843                                                                                         inerciarpy=wp[1]+wp[0];
01844                                                                                         inerciarpz=wp[1]+wp[2];
01845                                                                                 }
01846                                                                                 else{
01847                                                                                         inerciarpy=wp[1]+wp[2];
01848                                                                                         inerciarpz=wp[1]+wp[0];
01849                                                                                 }
01850                                                                         }
01851                                                                         else{
01852                                                                                 ejeminp=2;
01853                                                                                 inerciarp=wp[1]+wp[0];
01854                                                                                 if(wp[1]>wp[0]){
01855                                                                                         inerciarpy=wp[0]+wp[2];
01856                                                                                         inerciarpz=wp[1]+wp[2];
01857                                                                                 }
01858                                                                                 else{
01859                                                                                         inerciarpy=wp[1]+wp[2];
01860                                                                                         inerciarpz=wp[0]+wp[2];
01861                                                                                 }
01862                                                                         }
01863                                                                 }
01864 
01865 
01866                                                                 if(w2p[0]>w2p[1]){
01867                                                                         if(w2p[0]>w2p[2]){
01868                                                                                 ejemin2p=0;
01869                                                                                 inercia2rp=w2p[2]+w2p[1];
01870                                                                         }
01871                                                                         else{
01872                                                                                 ejemin2p=2;
01873                                                                                 inercia2rp=w2p[1]+w2p[0];
01874                                                                         }
01875                                                                 }
01876                                                                 else{
01877                                                                         if(w2p[1]>w2p[2]){
01878                                                                                 ejemin2p=1;
01879                                                                                 inercia2rp=w2p[2]+w2p[0];
01880                                                                         }
01881                                                                         else{
01882                                                                                 ejemin2p=2;
01883                                                                                 inercia2rp=w2p[1]+w2p[0];
01884                                                                         }
01885                                                                 }
01886 
01887 
01888                                                         /*      point1[0]=im;
01889                                                                 point1[1]=jm;
01890                                                                 point1[2]=km;
01891 
01892                                                                 point2[0]=centxp+Vp[0][ejeminp];
01893                                                                 point2[1]=centyp+Vp[1][ejeminp];
01894                                                                 point2[2]=centzp+Vp[2][ejeminp];
01895 
01896                                                                 point3[0]=centxp-Vp[0][ejeminp];
01897                                                                 point3[1]=centyp-Vp[1][ejeminp];
01898                                                                 point3[2]=centzp-Vp[2][ejeminp];*/
01899 
01900                                                                 //distcent=1+sqrt(centx*centx+centy*centy+centz*centz);
01901                                                         /*      distcent=1;
01902                                                         
01903                                                                 sumitotalp=sumitotal-(distcent-fabs(distanciaejepunto(point1, point2, point3)))*(distcent-fabs(distanciaejepunto(point1, point2, point3)));
01904                                                                 
01905                                                                 inercia2rp=sumitotalp/cant2p;*/
01906 
01907 
01908                                                                 //costop=w0p*inerciaiip+w1p*inerciaii2p+param*inerciarp;
01909                                                                 //costop=param*(w0p*param3*inerciaiip+w1p*(1-param3)*inerciaii2p)+(1-param)*(w0p*param2*inerciarp+w1p*(1-param2)*inercia2rp);
01910                                                                 
01911                                                                 
01912                                                                 costop=param*w0p*inerciaiip+w1p*param2*inerciaii2p+w0p*param3*inerciarp+w1p*param4*inercia2rp;
01913 
01914                                                                 if(costop<costo && centip>centi2p){
01915                                                                                                                                                 
01916                                                                         *ptr2=255;
01917                                                                         changes++;
01918 
01919                                                                         sumi=sumip;
01920                                                                         sumii=sumiip;
01921                                                                         cant=cantp;
01922 
01923                                                                         sumi2=sumi2p;
01924                                                                         sumii2=sumii2p;
01925                                                                         cant2=cant2p;
01926 
01927                                                                         sumx=sumxp;
01928                                                                         sumy=sumyp;
01929                                                                         sumz=sumzp;
01930                                                                         sumxx=sumxxp;
01931                                                                         sumyy=sumyyp;
01932                                                                         sumzz=sumzzp;
01933                                                                         sumxy=sumxyp;
01934                                                                         sumyz=sumyzp;
01935                                                                         sumzx=sumzxp;
01936 
01937                                                                         sumx2=sumx2p;
01938                                                                         sumy2=sumy2p;
01939                                                                         sumz2=sumz2p;
01940                                                                         sumxx2=sumxx2p;
01941                                                                         sumyy2=sumyy2p;
01942                                                                         sumzz2=sumzz2p;
01943                                                                         sumxy2=sumxy2p;
01944                                                                         sumyz2=sumyz2p;
01945                                                                         sumzx2=sumzx2p;
01946 
01947                                                                         centi=centip;
01948                                                                         inerciaii= inerciaiip;
01949                                                                         
01950                                                                         centi2=centi2p;
01951                                                                         inerciaii2p= inerciaii2p;
01952                                                                         
01953                                                                         centx=centxp;
01954                                                                         centy=centyp;
01955                                                                         centz=centzp;
01956 
01957                                                                         centx2=centx2p;
01958                                                                         centy2=centy2p;
01959                                                                         centz2=centz2p;
01960                                                                                                                                                 
01961                                                                         inerciaxx= inerciaxxp;
01962                                                                         inerciayy= inerciayyp;
01963                                                                         inerciazz= inerciazzp;
01964 
01965                                                                         inerciaxx2= inerciaxx2p;
01966                                                                         inerciayy2= inerciayy2p;
01967                                                                         inerciazz2= inerciazz2p;
01968 
01969                                                                         inerciaxy= inerciaxyp;
01970                                                                         inerciayz= inerciayzp;
01971                                                                         inerciazx= inerciazxp;
01972 
01973                                                                         inerciaxy2= inerciaxy2p;
01974                                                                         inerciayz2= inerciayz2p;
01975                                                                         inerciazx2= inerciazx2p;
01976 
01977                                                                 //      sumitotal=sumitotalp;
01978 
01979                                                                         costo=costop;
01980 
01981                                                                 }
01982                                                                 
01983                                                         }
01984                                                 }
01985                                         }
01986                                 }
01987                         }
01988                 }
01989 
01990         //      printf("changes: %d\n", changes);
01991                 
01992 
01993         }
01994 
01995         //printf("total: %d\n", total);
01996 
01997                 
01998 }

Here is the call graph for this function:

Here is the caller graph for this function:

void axisExtractor02::paso (  )  [private]

Definition at line 3981 of file axisExtractor02.cxx.

References avanzar(), buenos, and m_Stack0.

03982 {
03983 
03984         int i=0;
03985         int inicio=buenos;
03986 
03987         while( !m_Stack0.empty() && inicio==buenos && i<5000){
03988                 avanzar();
03989                 i++;
03990         }
03991 }

Here is the call graph for this function:

void axisExtractor02::PrintSelf ( ostream &  os,
vtkIndent  indent 
)

Definition at line 456 of file axisExtractor02.cxx.

00457 {
00458         this->Superclass::PrintSelf(os,indent);
00459 }

double axisExtractor02::proporcioejepunto ( double  point[3],
double  point2[3],
double  point3[3] 
) [private]

Definition at line 610 of file axisExtractor02.cxx.

Referenced by correction(), and modelo().

00611 {
00612         
00613         
00614         double v[3], v3[3];
00615 
00616         double x;
00617 
00618         v[0]=point3[0]-point2[0];
00619         v[1]=point3[1]-point2[1];
00620         v[2]=point3[2]-point2[2];
00621 
00622         v3[0]=point[0]-point2[0];
00623         v3[1]=point[1]-point2[1];
00624         v3[2]=point[2]-point2[2];
00625                                         
00626         x=((v[0]*v3[0])+(v[1]*v3[1])+(v[2]*v3[2]))/((v[0]*v[0])+(v[1]*v[1])+(v[2]*v[2]));
00627                                         
00628         return x;
00629                                 
00630                         
00631         
00632         
00633 }

Here is the caller graph for this function:

int axisExtractor02::proporcion ( vtkImageData *  data  )  [private]

Definition at line 824 of file axisExtractor02.cxx.

References max.

00825 {
00826         int ext[6];
00827         int i, j, k;
00828         int max=0;
00829         int total=0;
00830 
00831         data->GetExtent(ext);
00832 
00833         unsigned short *ptr;
00834         
00835         for(i=ext[0];i<=ext[1];i++){
00836                 for(j=ext[2];j<=ext[3];j++){
00837                         for(k=ext[4];k<=ext[5];k++){
00838                                 ptr=(unsigned short *)data->GetScalarPointer(i,j,k);
00839                                 if(*ptr!=0){
00840                                         max++;
00841                                 }
00842                                 total++;
00843                         }
00844                 }
00845         }
00846 
00847         return (max*100)/total;
00848 }

void axisExtractor02::rama (  )  [private]

Definition at line 3997 of file axisExtractor02.cxx.

References avanzar(), frama, and m_Stack0.

03998 {
03999 
04000         int i=0;
04001         frama=0;
04002         
04003         while( !m_Stack0.empty() && frama==0 && i<5000){
04004                 avanzar();
04005                 i++;
04006         }
04007 }

Here is the call graph for this function:

void axisExtractor02::realtoindex ( double  a[3],
int  b[3] 
) [private]

Definition at line 490 of file axisExtractor02.cxx.

References espprin.

Referenced by avanzar().

00491 {
00492         double c[3];
00493 
00494         double minspac;
00495 
00496 // EED 15 Mai 2007 .NET 
00497 //      minspac=min(espprin[0],min(espprin[1],espprin[2]));
00498 
00499         minspac=espprin[0];
00500         if (espprin[1]<minspac) { minspac=espprin[1]; }
00501         if (espprin[2]<minspac) { minspac=espprin[2]; }
00502 
00503 
00504         c[0]=(a[0]/minspac);
00505         c[1]=(a[1]/minspac);
00506         c[2]=(a[2]/minspac);
00507 
00508         b[0]=(int)(a[0]/minspac);
00509         b[1]=(int)(a[1]/minspac);
00510         b[2]=(int)(a[2]/minspac);
00511 
00512         if(c[0]-b[0]>0.5){
00513                 b[0]+=1;
00514         }
00515         if(c[1]-b[1]>0.5){
00516                 b[1]+=1;
00517         }
00518         if(c[2]-b[2]>0.5){
00519                 b[2]+=1;
00520         }
00521         
00522 
00523 }       

Here is the caller graph for this function:

void axisExtractor02::realtoreal ( double  a[3],
double  b[3] 
) [private]

Definition at line 465 of file axisExtractor02.cxx.

References espprin, and extprin.

00466 {
00467                 
00468         b[0]=a[0]+(espprin[0]*extprin[0]);
00469         b[1]=a[1]+(espprin[1]*extprin[2]);
00470         b[2]=a[2];
00471 
00472         
00473 
00474 }

void axisExtractor02::realtoreal2 ( double  a[3],
double  b[3] 
) [private]

Definition at line 479 of file axisExtractor02.cxx.

References espprin, and extprin.

Referenced by avanzar().

00480 {
00481                 
00482         b[0]=a[0]-(espprin[0]*extprin[0]);
00483         b[1]=a[1]-(espprin[1]*extprin[2]);
00484         b[2]=a[2];
00485 
00486 }

Here is the caller graph for this function:

void axisExtractor02::redondear ( vtkImageData *  data  )  [private]

Definition at line 2324 of file axisExtractor02.cxx.

Referenced by avanzar().

02325 {
02326         int ext[6];
02327         int i, j, k, radio;
02328         int i2, j2, k2;
02329 
02330         data->GetExtent(ext);
02331 
02332         unsigned char *ptr;
02333 
02334         radio=(ext[1]-ext[0])/2;
02335 
02336         double tmpsqrt;
02337 
02338         for(i=ext[0], i2=-radio;i<=ext[1];i++, i2++){
02339                 for(j=ext[2], j2=-radio;j<=ext[3];j++, j2++){
02340                         for(k=ext[4], k2=-radio;k<=ext[5];k++, k2++){
02341                                 ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
02342                                 tmpsqrt=(i2*i2)+(j2*j2)+(k2*k2);                        
02343                                 if( radio<sqrt(tmpsqrt) ){
02344                                         *ptr=0;
02345                                 }
02346                                 /*if( i2==0 && j2==0 && k2==0 ){
02347                                         *ptr=255;
02348                                 }*/
02349                         }
02350                 }
02351         }
02352 }

Here is the caller graph for this function:

void axisExtractor02::redondear2 ( vtkImageData *  data  )  [private]

Definition at line 2359 of file axisExtractor02.cxx.

Referenced by avanzar().

02360 {
02361         int ext[6];
02362         int i, j, k, radio;
02363         int i2, j2, k2;
02364 
02365         data->GetExtent(ext);
02366 
02367         double *ptr;
02368 
02369         radio=(ext[1]-ext[0])/2;
02370 
02371         double tmpsqrt;
02372 
02373         for(i=ext[0], i2=-radio;i<=ext[1];i++, i2++){
02374                 for(j=ext[2], j2=-radio;j<=ext[3];j++, j2++){
02375                         for(k=ext[4], k2=-radio;k<=ext[5];k++, k2++){
02376                                 ptr=(double *)  data->GetScalarPointer(i,j,k);
02377                                 tmpsqrt=(i2*i2)+(j2*j2)+(k2*k2);        
02378                                 if( radio<sqrt(tmpsqrt) ){
02379                                         *ptr=0;
02380                                         
02381                                 }
02382                                 
02383                         }
02384                 }
02385         }
02386 }

Here is the caller graph for this function:

void axisExtractor02::redondear3 ( vtkImageData *  data  )  [private]

Definition at line 2392 of file axisExtractor02.cxx.

Referenced by avanzar().

02393 {
02394         int ext[6];
02395         int i, j, k, radio;
02396         int i2, j2, k2;
02397 
02398         data->GetExtent(ext);
02399 
02400         unsigned char *ptr;
02401 
02402         radio=(ext[1]-ext[0])/2;
02403 
02404         double tmpsqrt;
02405 
02406         for(i=ext[0], i2=-radio;i<=ext[1];i++, i2++){
02407                 for(j=ext[2], j2=-radio;j<=ext[3];j++, j2++){
02408                         for(k=ext[4], k2=-radio;k<=ext[5];k++, k2++){
02409                                 ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
02410                                 tmpsqrt=(i2*i2)+(j2*j2)+(k2*k2);
02411                                 if( radio<sqrt(tmpsqrt) ){
02412                                         *ptr=255;
02413                                         
02414                                 }
02415                                 
02416                         }
02417                 }
02418         }
02419 }

Here is the caller graph for this function:

void axisExtractor02::searc ( int  i,
int  j,
int  k,
vtkImageData *  data,
vtkImageData *  data2,
unsigned char  label,
unsigned long  vector[50][4] 
) [private]

Definition at line 643 of file axisExtractor02.cxx.

Referenced by find_components().

00644 {
00645 
00646         unsigned char *ptr;
00647         unsigned char *ptr2;    
00648 
00649         int radio;
00650         
00651         int i2, j2, k2;
00652         int i3, j3, k3;
00653                 
00654         ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
00655         ptr2=(unsigned char *)  data2->GetScalarPointer(i,j,k);
00656 
00657         int ext[6];
00658 
00659         data->GetExtent(ext);
00660 
00661         radio=(ext[1]-ext[0])/2;
00662 
00663         i2=i-ext[0]-radio;
00664         j2=j-ext[2]-radio;
00665         k2=k-ext[4]-radio;
00666 
00667         *ptr2=label;
00668         vector[label-1][0]+=1;
00669         vector[label-1][1]+=i;
00670         vector[label-1][2]+=j;
00671         vector[label-1][3]+=k;
00672 
00673         for(i3=-1;i3<=1;i3++){
00674                         for(j3=-1;j3<=1;j3++){
00675                                 for(k3=-1;k3<=1;k3++){
00676                                         if(i+i3>=ext[0] && i+i3<=ext[1] && j+j3>=ext[2] && j+j3<=ext[3] && k+k3>=ext[4] &&  k+k3<=ext[5] ){
00677                                                 ptr=(unsigned char *)   data->GetScalarPointer(i+i3,j+j3,k+k3);
00678                                                 ptr2=(unsigned char *)  data2->GetScalarPointer(i+i3,j+j3,k+k3);
00679                                                 if(*ptr==255 && *ptr2==0 && (radio*radio)>=(((i2+i3)*(i2+i3))+((j2+j3)*(j2+j3))+((k2+k3)*(k2+k3))) && ((radio-1)*(radio-1))<=(((i2+i3)*(i2+i3))+((j2+j3)*(j2+j3))+((k2+k3)*(k2+k3)))){
00680                                                         searc(i+i3, j+j3, k+k3, data, data2, label, vector);
00681                                                 }
00682                                         }
00683                                 }
00684                         }
00685                 }
00686                 
00687 }

Here is the caller graph for this function:

void axisExtractor02::searcb ( int  i,
int  j,
int  k,
vtkImageData *  data,
vtkImageData *  data2,
unsigned char  label,
unsigned long  vector[50][4] 
) [private]

Definition at line 693 of file axisExtractor02.cxx.

Referenced by find_componentsb().

00694 {
00695 
00696         unsigned char *ptr;
00697         unsigned char *ptr2;    
00698 
00699         int radio;
00700 
00701         int i2, j2, k2;
00702         int i3, j3, k3;
00703                 
00704         ptr=(unsigned char *)   data->GetScalarPointer(i,j,k);
00705         ptr2=(unsigned char *)  data2->GetScalarPointer(i,j,k);
00706 
00707         int ext[6];
00708 
00709         data->GetExtent(ext);
00710 
00711         radio=(ext[1]-ext[0])/2;
00712 
00713         i2=i-ext[0]-radio;
00714         j2=j-ext[2]-radio;
00715         k2=k-ext[4]-radio;
00716 
00717         *ptr2=label;
00718         vector[label-1][0]+=1;
00719         vector[label-1][1]+=i;
00720         vector[label-1][2]+=j;
00721         vector[label-1][3]+=k;
00722 
00723         for(i3=-1;i3<=1;i3++){
00724                         for(j3=-1;j3<=1;j3++){
00725                                 for(k3=-1;k3<=1;k3++){
00726                                         if(i+i3>=ext[0] && i+i3<=ext[1] && j+j3>=ext[2] && j+j3<=ext[3] && k+k3>=ext[4] &&  k+k3<=ext[5] ){
00727                                                 ptr=(unsigned char *)   data->GetScalarPointer(i+i3,j+j3,k+k3);
00728                                                 ptr2=(unsigned char *)  data2->GetScalarPointer(i+i3,j+j3,k+k3);
00729                                                 if(*ptr==0 && *ptr2==0 && (radio*radio)>=(((i2+i3)*(i2+i3))+((j2+j3)*(j2+j3))+((k2+k3)*(k2+k3))) && ((radio-1)*(radio-1))<=(((i2+i3)*(i2+i3))+((j2+j3)*(j2+j3))+((k2+k3)*(k2+k3)))){
00730                                                         searcb(i+i3, j+j3, k+k3, data, data2, label, vector);
00731                                                 }
00732                                         }
00733                                 }
00734                         }
00735                 }
00736                 
00737 }

Here is the caller graph for this function:

void axisExtractor02::segmento (  )  [private]

Definition at line 4013 of file axisExtractor02.cxx.

References avanzar(), frama, fseg, and m_Stack0.

04014 {
04015 
04016         int i=0;
04017         fseg=0;
04018         frama=0;
04019         
04020         while( !m_Stack0.empty() && frama==0 && fseg==0 && i<5000){
04021                 avanzar();
04022                 i++;
04023         }
04024 }

Here is the call graph for this function:

void axisExtractor02::SetInput ( vtkImageData *  input  )  [virtual]

Definition at line 238 of file axisExtractor02.cxx.

References extrac, GetInput(), maxant, and New().

Referenced by wxEmptyPanelWidget::ConfigureVTK(), wxSTLWidget_02::ExtractTree2_JF(), and wxEmptyPanelWidget_2::ExtractTree2_JF().

00239 {
00240 
00241         vtkImageConstantPad *pad;
00242         vtkImageTranslateExtent *trans;
00243 
00244         pad = vtkImageConstantPad::New();
00245         trans = vtkImageTranslateExtent::New();
00246 
00247         pad->SetInput(input);
00248         trans->SetInput(pad->GetOutput());
00249         
00250         
00251         pad->SetConstant(0);
00252 
00253         pad->SetInput(input);
00254 
00255         int ext[6];
00256 
00257         input->GetExtent(ext);
00258 
00259         ext[0]=ext[0]-maxant;
00260         ext[1]=ext[1]+maxant;
00261         ext[2]=ext[2]-maxant;
00262         ext[3]=ext[3]+maxant;
00263         ext[4]=ext[4]-maxant;
00264         ext[5]=ext[5]+maxant;
00265 
00266         pad->SetOutputWholeExtent(ext);
00267 
00268         trans->SetTranslation (maxant, maxant, maxant);
00269 
00270         trans->Update();
00271 
00272 
00273         //this->vtkProcessObject::SetNthInput(0, input);
00274         this->vtkProcessObject::SetNthInput(0, trans->GetOutput());
00275 
00276         //this->GetInput()->SetOrigin(0,0,0);
00277         //this->resample->SetInput(this->GetInput());
00278         this->extrac->SetInput(this->GetInput());
00279   
00280 }

Here is the call graph for this function:

Here is the caller graph for this function:

void axisExtractor02::SetMaxant ( int  value  ) 

Definition at line 81 of file axisExtractor02.cxx.

References maxant.

Referenced by wxEmptyPanelWidget::ConfigureVTK(), wxSTLWidget_02::ExtractTree2_JF(), and wxEmptyPanelWidget_2::ExtractTree2_JF().

00082 {
00083         this->maxant=value;
00084 }

Here is the caller graph for this function:

void axisExtractor02::SetMinant ( int  value  ) 

Definition at line 97 of file axisExtractor02.cxx.

References minant.

Referenced by wxEmptyPanelWidget::ConfigureVTK(), wxSTLWidget_02::ExtractTree2_JF(), and wxEmptyPanelWidget_2::ExtractTree2_JF().

00098 {
00099         this->minant=value;
00100 }

Here is the caller graph for this function:

void axisExtractor02::SetParam ( double  value  ) 

Definition at line 31 of file axisExtractor02.cxx.

References param.

Referenced by wxEmptyPanelWidget::ConfigureVTK(), wxSTLWidget_02::ExtractTree2_JF(), and wxEmptyPanelWidget_2::ExtractTree2_JF().

00032 {
00033         this->param=value;
00034 }

Here is the caller graph for this function:

void axisExtractor02::SetParam2 ( double  value  ) 

Definition at line 48 of file axisExtractor02.cxx.

References param2.

Referenced by wxEmptyPanelWidget::ConfigureVTK(), wxSTLWidget_02::ExtractTree2_JF(), and wxEmptyPanelWidget_2::ExtractTree2_JF().

00049 {
00050         this->param2=value;
00051 }

Here is the caller graph for this function:

void axisExtractor02::SetParam3 ( double  value  ) 

Definition at line 65 of file axisExtractor02.cxx.

References param3.

Referenced by wxEmptyPanelWidget::ConfigureVTK(), wxSTLWidget_02::ExtractTree2_JF(), and wxEmptyPanelWidget_2::ExtractTree2_JF().

00066 {
00067         this->param3=value;
00068 }

Here is the caller graph for this function:

void axisExtractor02::SetPoint ( double  value[3]  ) 

Definition at line 112 of file axisExtractor02.cxx.

References GetInput(), m_Stack, m_Stack0, m_Stack1, m_Stack2, m_Stack3, m_Stack4, m_Stack5, m_Stack6, m_Stack7, m_Stack8, m_Stackr, m_Stackra, m_Stackrp, and maxant.

Referenced by wxEmptyPanelWidget::ConfigureVTK(), wxSTLWidget_02::ExtractTree2_JF(), and wxEmptyPanelWidget_2::ExtractTree2_JF().

00113 {
00114 
00115 
00116         double spa[3];
00117 
00118         this->GetInput()->GetSpacing (spa);
00119 
00120         value[0]=value[0]+maxant*spa[0];
00121         value[1]=value[1]+maxant*spa[1];
00122         value[2]=value[2]+maxant*spa[2];
00123 
00124         this->m_Stack0.push_front(value[0]);
00125         this->m_Stack1.push_front(value[1]);
00126         this->m_Stack2.push_front(value[2]);
00127         this->m_Stack3.push_front(value[0]);
00128         this->m_Stack4.push_front(value[1]);
00129         this->m_Stack5.push_front(value[2]);
00130         this->m_Stack6.push_front(value[0]);
00131         this->m_Stack7.push_front(value[1]);
00132         this->m_Stack8.push_front(value[2]);
00133         this->m_Stack.push_front(0);
00134         this->m_Stackr.push_front(0);
00135         this->m_Stackra.push_front(0);
00136         this->m_Stackrp.push_front(0);
00137 }

Here is the call graph for this function:

Here is the caller graph for this function:

void axisExtractor02::todo (  )  [private]

Definition at line 3968 of file axisExtractor02.cxx.

References avanzar(), and m_Stack0.

Referenced by Execute().

03969 {
03970         int i=0;
03971 
03972         while( !m_Stack0.empty() && i<5000){
03973                 avanzar();
03974                 i++;
03975         }
03976 }

Here is the call graph for this function:

Here is the caller graph for this function:

unsigned long axisExtractor02::totalarea ( unsigned long  vector[50][4],
unsigned long  vectorb[50][4],
int  cantidad,
int  cantidadb 
) [private]

Definition at line 2940 of file axisExtractor02.cxx.

Referenced by avanzar().

02941 {
02942         
02943         unsigned long area;
02944         int i;
02945         
02946         area=0;
02947 
02948         for(i=0;i<cantidad && i<10;i++){
02949                 area+=vector[i][0];
02950         }
02951 
02952         for(i=0;i<cantidadb;i++){
02953                 area+=vectorb[i][0];
02954         }
02955 
02956         return area;
02957 }

Here is the caller graph for this function:


Member Data Documentation

double axisExtractor02::A[3][3] [private]

Definition at line 318 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::A2[3][3] [private]

Definition at line 319 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::A2p[3][3] [private]

Definition at line 338 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::Ai[3][3] [private]

Definition at line 320 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::Ap[3][3] [private]

Definition at line 337 of file axisExtractor02.h.

Referenced by optim().

int axisExtractor02::buenos [private]

Definition at line 209 of file axisExtractor02.h.

Referenced by avanzar(), Execute(), and paso().

int axisExtractor02::candit[10][3] [private]

Definition at line 340 of file axisExtractor02.h.

Referenced by avanzar(), and costominimo().

unsigned long axisExtractor02::cant [private]

Definition at line 263 of file axisExtractor02.h.

Referenced by avanzar(), and optim().

unsigned long axisExtractor02::cant2 [private]

Definition at line 274 of file axisExtractor02.h.

Referenced by avanzar(), and optim().

unsigned long axisExtractor02::cantt [private]

Definition at line 247 of file axisExtractor02.h.

double axisExtractor02::centi [private]

Definition at line 270 of file axisExtractor02.h.

Referenced by avanzar(), and optim().

double axisExtractor02::centi2 [private]

Definition at line 281 of file axisExtractor02.h.

Referenced by avanzar(), and optim().

double axisExtractor02::centix [private]

Definition at line 316 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centixp [private]

Definition at line 333 of file axisExtractor02.h.

double axisExtractor02::centiy [private]

Definition at line 316 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centiyp [private]

Definition at line 333 of file axisExtractor02.h.

double axisExtractor02::centiz [private]

Definition at line 316 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centizp [private]

Definition at line 333 of file axisExtractor02.h.

double axisExtractor02::centx [private]

Definition at line 313 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centx2 [private]

Definition at line 314 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centx2p [private]

Definition at line 331 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centxp [private]

Definition at line 330 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centy [private]

Definition at line 313 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centy2 [private]

Definition at line 314 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centy2p [private]

Definition at line 331 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centyp [private]

Definition at line 330 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centz [private]

Definition at line 313 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centz2 [private]

Definition at line 314 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centz2p [private]

Definition at line 331 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::centzp [private]

Definition at line 330 of file axisExtractor02.h.

Referenced by optim().

vtkImageSeedConnectivity* axisExtractor02::connect [private]

Definition at line 192 of file axisExtractor02.h.

Referenced by avanzar(), and axisExtractor02().

double axisExtractor02::costo [private]

Definition at line 335 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::costop [private]

Definition at line 335 of file axisExtractor02.h.

Referenced by optim().

vtkImageData* axisExtractor02::data1 [private]

Definition at line 196 of file axisExtractor02.h.

Referenced by avanzar(), and axisExtractor02().

vtkImageData* axisExtractor02::data2 [private]

Definition at line 197 of file axisExtractor02.h.

Referenced by avanzar(), axisExtractor02(), and costominimo2().

vtkImageData* axisExtractor02::data3 [private]

Definition at line 198 of file axisExtractor02.h.

Referenced by avanzar(), and axisExtractor02().

vtkImageData* axisExtractor02::data4 [private]

Definition at line 199 of file axisExtractor02.h.

Referenced by avanzar(), axisExtractor02(), costominimo2(), Execute(), and GetVolumen().

vtkImageData* axisExtractor02::data6 [private]

Definition at line 200 of file axisExtractor02.h.

Referenced by avanzar(), axisExtractor02(), and costominimo2().

double axisExtractor02::des [private]

Definition at line 254 of file axisExtractor02.h.

double axisExtractor02::des2 [private]

Definition at line 268 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::des3 [private]

Definition at line 279 of file axisExtractor02.h.

Referenced by optim().

vtkImageEuclideanDistance* axisExtractor02::distance [private]

Definition at line 190 of file axisExtractor02.h.

Referenced by avanzar(), and axisExtractor02().

int axisExtractor02::ejemin [private]

Definition at line 303 of file axisExtractor02.h.

Referenced by optim().

int axisExtractor02::ejemin2 [private]

Definition at line 307 of file axisExtractor02.h.

Referenced by optim().

Definition at line 328 of file axisExtractor02.h.

Referenced by optim().

int axisExtractor02::ejemini [private]

Definition at line 311 of file axisExtractor02.h.

Referenced by avanzar(), and optim().

int axisExtractor02::ejeminp [private]

Definition at line 324 of file axisExtractor02.h.

Referenced by avanzar(), and optim().

double axisExtractor02::espprin[3] [private]
int axisExtractor02::extprin[6] [private]

Definition at line 185 of file axisExtractor02.h.

Referenced by Execute(), realtoreal(), and realtoreal2().

int axisExtractor02::extprin0[6] [private]

Definition at line 183 of file axisExtractor02.h.

Referenced by Execute().

vtkExtractVOI* axisExtractor02::extrac [private]

Definition at line 191 of file axisExtractor02.h.

Referenced by avanzar(), axisExtractor02(), and SetInput().

Definition at line 291 of file axisExtractor02.h.

Definition at line 292 of file axisExtractor02.h.

Definition at line 293 of file axisExtractor02.h.

Definition at line 294 of file axisExtractor02.h.

Definition at line 294 of file axisExtractor02.h.

Definition at line 294 of file axisExtractor02.h.

int axisExtractor02::flagg [private]

Definition at line 204 of file axisExtractor02.h.

Referenced by avanzar(), and Execute().

int axisExtractor02::flagg2 [private]

Definition at line 205 of file axisExtractor02.h.

Referenced by avanzar(), and Execute().

int axisExtractor02::frama [private]

Definition at line 357 of file axisExtractor02.h.

Referenced by avanzar(), Execute(), rama(), and segmento().

int axisExtractor02::fseg [private]

Definition at line 358 of file axisExtractor02.h.

Referenced by avanzar(), Execute(), and segmento().

unsigned int axisExtractor02::hist[2000] [private]

Definition at line 286 of file axisExtractor02.h.

double axisExtractor02::inercia2r [private]

Definition at line 346 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::inercia2rp [private]

Definition at line 346 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::inerciaii [private]

Definition at line 269 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::inerciaii2 [private]

Definition at line 280 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::inerciar [private]

Definition at line 344 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::inerciari [private]

Definition at line 344 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::inerciariy [private]

Definition at line 344 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::inerciariz [private]

Definition at line 344 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::inerciarp [private]

Definition at line 344 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::inerciarpy [private]

Definition at line 344 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::inerciarpz [private]

Definition at line 344 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::inerciary [private]

Definition at line 344 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::inerciarz [private]

Definition at line 344 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::kurt [private]

Definition at line 252 of file axisExtractor02.h.

double axisExtractor02::kurt1 [private]

Definition at line 258 of file axisExtractor02.h.

double axisExtractor02::kurt2 [private]

Definition at line 266 of file axisExtractor02.h.

double axisExtractor02::kurt3 [private]

Definition at line 277 of file axisExtractor02.h.

double axisExtractor02::kurtt [private]

Definition at line 296 of file axisExtractor02.h.

vtkCellArray* axisExtractor02::lineas [private]

Definition at line 208 of file axisExtractor02.h.

Referenced by avanzar(), distanciaejes(), and Execute().

std::deque< int > axisExtractor02::m_Stack [private]

Definition at line 235 of file axisExtractor02.h.

Referenced by avanzar(), and SetPoint().

std::deque< double > axisExtractor02::m_Stack0 [private]

Definition at line 226 of file axisExtractor02.h.

Referenced by avanzar(), paso(), rama(), segmento(), SetPoint(), and todo().

std::deque< double > axisExtractor02::m_Stack1 [private]

Definition at line 227 of file axisExtractor02.h.

Referenced by avanzar(), and SetPoint().

std::deque< double > axisExtractor02::m_Stack2 [private]

Definition at line 228 of file axisExtractor02.h.

Referenced by avanzar(), and SetPoint().

std::deque< double > axisExtractor02::m_Stack3 [private]

Definition at line 229 of file axisExtractor02.h.

Referenced by avanzar(), and SetPoint().

std::deque< double > axisExtractor02::m_Stack4 [private]

Definition at line 230 of file axisExtractor02.h.

Referenced by avanzar(), and SetPoint().

std::deque< double > axisExtractor02::m_Stack5 [private]

Definition at line 231 of file axisExtractor02.h.

Referenced by avanzar(), and SetPoint().

std::deque< double > axisExtractor02::m_Stack6 [private]

Definition at line 232 of file axisExtractor02.h.

Referenced by avanzar(), and SetPoint().

std::deque< double > axisExtractor02::m_Stack7 [private]

Definition at line 233 of file axisExtractor02.h.

Referenced by avanzar(), and SetPoint().

std::deque< double > axisExtractor02::m_Stack8 [private]

Definition at line 234 of file axisExtractor02.h.

Referenced by avanzar(), and SetPoint().

std::deque< double > axisExtractor02::m_Stackr [private]

Definition at line 236 of file axisExtractor02.h.

Referenced by avanzar(), and SetPoint().

std::deque< double > axisExtractor02::m_Stackra [private]

Definition at line 237 of file axisExtractor02.h.

Referenced by avanzar(), and SetPoint().

std::deque< double > axisExtractor02::m_Stackrp [private]

Definition at line 238 of file axisExtractor02.h.

Referenced by avanzar(), and SetPoint().

unsigned short axisExtractor02::max [private]

Definition at line 246 of file axisExtractor02.h.

Referenced by maxareacandit(), optim(), and proporcion().

unsigned short axisExtractor02::max2 [private]

Definition at line 262 of file axisExtractor02.h.

Referenced by optim().

unsigned short axisExtractor02::max3 [private]

Definition at line 273 of file axisExtractor02.h.

Referenced by optim().

int axisExtractor02::maxant [private]

Definition at line 288 of file axisExtractor02.h.

Referenced by avanzar(), GetMaxant(), GetOutput(), GetVolumen(), SetInput(), SetMaxant(), and SetPoint().

double axisExtractor02::maxVariance [private]

Definition at line 291 of file axisExtractor02.h.

Definition at line 292 of file axisExtractor02.h.

Definition at line 293 of file axisExtractor02.h.

double axisExtractor02::mejor[3] [private]

Definition at line 348 of file axisExtractor02.h.

Referenced by avanzar().

Definition at line 363 of file axisExtractor02.h.

Referenced by avanzar(), and Execute().

double axisExtractor02::mejordst [private]

Definition at line 359 of file axisExtractor02.h.

Referenced by avanzar(), and Execute().

double axisExtractor02::mejorrad [private]

Definition at line 361 of file axisExtractor02.h.

Referenced by avanzar(), and Execute().

unsigned short axisExtractor02::min [private]

Definition at line 256 of file axisExtractor02.h.

Referenced by distanciaejes(), and optim().

unsigned short axisExtractor02::min2 [private]

Definition at line 271 of file axisExtractor02.h.

Referenced by optim().

unsigned short axisExtractor02::min3 [private]

Definition at line 282 of file axisExtractor02.h.

Referenced by optim().

int axisExtractor02::minant [private]

Definition at line 289 of file axisExtractor02.h.

Referenced by avanzar(), GetMinant(), and SetMinant().

double axisExtractor02::minis[10] [private]

Definition at line 342 of file axisExtractor02.h.

Referenced by avanzar(), and costominimo().

double axisExtractor02::param [private]

Definition at line 367 of file axisExtractor02.h.

Referenced by axisExtractor02(), GetParam(), optim(), and SetParam().

double axisExtractor02::param2 [private]

Definition at line 368 of file axisExtractor02.h.

Referenced by axisExtractor02(), GetParam2(), optim(), and SetParam2().

double axisExtractor02::param3 [private]

Definition at line 369 of file axisExtractor02.h.

Referenced by axisExtractor02(), GetParam3(), optim(), and SetParam3().

double axisExtractor02::param4 [private]

Definition at line 370 of file axisExtractor02.h.

Referenced by axisExtractor02(), and optim().

vtkPoints* axisExtractor02::points [private]

Definition at line 207 of file axisExtractor02.h.

Referenced by avanzar(), and Execute().

double axisExtractor02::prom [private]

Definition at line 255 of file axisExtractor02.h.

double axisExtractor02::puntoanteriorr[3] [private]

Definition at line 242 of file axisExtractor02.h.

vtkImageResample* axisExtractor02::resample [private]

Definition at line 193 of file axisExtractor02.h.

double axisExtractor02::slew [private]

Definition at line 253 of file axisExtractor02.h.

double axisExtractor02::slew1 [private]

Definition at line 259 of file axisExtractor02.h.

double axisExtractor02::slew2 [private]

Definition at line 267 of file axisExtractor02.h.

double axisExtractor02::slew3 [private]

Definition at line 278 of file axisExtractor02.h.

double axisExtractor02::slewt [private]

Definition at line 297 of file axisExtractor02.h.

FILE* axisExtractor02::stream [private]

Definition at line 372 of file axisExtractor02.h.

Referenced by avanzar().

double axisExtractor02::sum [private]

Definition at line 248 of file axisExtractor02.h.

double axisExtractor02::sumc [private]

Definition at line 249 of file axisExtractor02.h.

double axisExtractor02::sumi [private]

Definition at line 264 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::sumi2 [private]

Definition at line 275 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::sumii [private]

Definition at line 265 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::sumii2 [private]

Definition at line 276 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::sumk [private]

Definition at line 251 of file axisExtractor02.h.

double axisExtractor02::sums [private]

Definition at line 250 of file axisExtractor02.h.

Definition at line 299 of file axisExtractor02.h.

Definition at line 299 of file axisExtractor02.h.

Definition at line 299 of file axisExtractor02.h.

float axisExtractor02::tmax [private]

Definition at line 284 of file axisExtractor02.h.

float axisExtractor02::tmin [private]

Definition at line 284 of file axisExtractor02.h.

double axisExtractor02::totalMean [private]

Definition at line 290 of file axisExtractor02.h.

double axisExtractor02::V[3][3] [private]

Definition at line 302 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::V2[3][3] [private]

Definition at line 306 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::V2p[3][3] [private]

Definition at line 327 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::variance [private]

Definition at line 291 of file axisExtractor02.h.

double axisExtractor02::variance2 [private]

Definition at line 292 of file axisExtractor02.h.

double axisExtractor02::variance3 [private]

Definition at line 293 of file axisExtractor02.h.

double axisExtractor02::Vi[3][3] [private]

Definition at line 310 of file axisExtractor02.h.

Referenced by avanzar(), and optim().

int axisExtractor02::visited[10][3] [private]

Definition at line 353 of file axisExtractor02.h.

Referenced by avanzar().

double axisExtractor02::visitedrad[10] [private]

Definition at line 355 of file axisExtractor02.h.

Referenced by avanzar().

double axisExtractor02::Vp[3][3] [private]

Definition at line 323 of file axisExtractor02.h.

Referenced by avanzar(), and optim().

double axisExtractor02::w[3] [private]

Definition at line 301 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::w2[3] [private]

Definition at line 305 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::w2p[3] [private]

Definition at line 326 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::wi[3] [private]

Definition at line 309 of file axisExtractor02.h.

Referenced by optim().

double axisExtractor02::wp[3] [private]

Definition at line 322 of file axisExtractor02.h.

Referenced by optim().

Definition at line 291 of file axisExtractor02.h.

Definition at line 292 of file axisExtractor02.h.

Definition at line 293 of file axisExtractor02.h.


The documentation for this class was generated from the following files:

Generated on 18 Mar 2010 for creaMaracasVisu_lib by  doxygen 1.6.1