]> Creatis software - creaVtk.git/blobdiff - lib/creaVtk/creaVtkHeartAngles.cpp
2196 creaVtk Feature New Normal Completion of code HeartAngles 2013-12-04 11:20
[creaVtk.git] / lib / creaVtk / creaVtkHeartAngles.cpp
index a51007a904625425a8db7c04307f365aed092b2b..cceaa643963d809df8312c2a1a8e1cc48986a0de 100644 (file)
@@ -37,6 +37,16 @@ creaVtkHeartAngles::~creaVtkHeartAngles()
 {
 }
 
+vtkImageData* creaVtkHeartAngles::getAlphaImage ()
+{
+       return alphaImage;
+}
+
+vtkImageData* creaVtkHeartAngles::getBetaImage ()
+{
+       return betaImage;
+};
+
 double creaVtkHeartAngles::alpha (double P0a, double P0b,double P0c, double vx, double vy, double vz, double vxp, double vyp, double vzp)
 {
        double a=P0a,b=P0b,c=P0c;
@@ -44,7 +54,7 @@ double creaVtkHeartAngles::alpha (double P0a, double P0b,double P0c, double vx,
        double xp=vxp,yp=vyp,zp=vzp;
        double alpha;
 
-//Calcular el ángulo que forman las rectas, sabiendo sus vectores directores.
+       //Calcular el ángulo que forman las rectas, sabiendo sus vectores directores.
        double cosAlpha = ( ( (x-a)*(xp-a) )+( (y-b)*(yp-b) )+( (z-c)*(zp-c) ) )/sqrt((( (pow(x,2.0)-pow(a,2.0)) + (pow(y,2.0)-pow(b,2.0)) + (pow(z,2.0)-pow(c,2.0)) )*( (pow(xp,2.0)-pow(a,2.0)) + (pow(yp,2.0)-pow(b,2.0)) + (pow(zp,2.0)-pow(c,2.0)) ) ));
        
        alpha = (180 * acos(fabs(cosAlpha)))/M_PI;
@@ -64,7 +74,7 @@ double creaVtkHeartAngles::beta (double P0a, double P0b,double P0c, double P3x,
        double xp=P4x,yp=P4y,zp=P4z;
        double beta;
 
-//Calcular el ángulo que forman las rectas, sabiendo sus vectores directores.
+       //Calcular el ángulo que forman las rectas, sabiendo sus vectores directores.
        double cosBeta = ( ( (x-a)*(xp-a) )+( (y-b)*(yp-b) )+( (z-c)*(zp-c) ) )/sqrt((( (pow(x,2.0)-pow(a,2.0)) + (pow(y,2.0)-pow(b,2.0)) + (pow(z,2.0)-pow(c,2.0)) )*( (pow(xp,2.0)-pow(a,2.0)) + (pow(yp,2.0)-pow(b,2.0)) + (pow(zp,2.0)-pow(c,2.0)) ) ));
        
        beta = (180 * acos(fabs(cosBeta)))/M_PI;
@@ -161,13 +171,60 @@ double *creaVtkHeartAngles::intersectionPlaneLine(double plx1, double ply1, doub
        return puntoCorte;
 }
 
-//---------------------------------------------
-//Method template
-//---------------------------------------------
-/*
-void creaVtkHeartAngles::FunctionName(int& parameterA)
+void creaVtkHeartAngles::calculateImages (vtkImageData* image, double Px, double Py, double Pz, double Vx, double Vy, double Vz, double Nx, double Ny, double Nz, double p2x, double p2y, double p2z)
 {
-  parameterA = 2 * parameterA;
-  return;
+       alphaImage = image;
+  alphaImage->SetExtent( image->GetExtent() );
+  alphaImage->SetOrigin( image->GetOrigin() );
+  alphaImage->SetSpacing( image->GetSpacing() );
+  alphaImage->SetScalarTypeToUnsignedChar();
+  alphaImage->SetNumberOfScalarComponents( image->GetNumberOfScalarComponents() );
+  alphaImage->AllocateScalars();
+
+       betaImage = image;
+  betaImage->SetExtent( image->GetExtent() );
+  betaImage->SetOrigin( image->GetOrigin() );
+  betaImage->SetSpacing( image->GetSpacing() );
+  betaImage->SetScalarTypeToUnsignedChar();
+  betaImage->SetNumberOfScalarComponents( image->GetNumberOfScalarComponents() );
+  betaImage->AllocateScalars();
+
+       unsigned char* pPix;
+       pPix = (unsigned char*)image->GetScalarPointer();
+       double a;
+       double b;
+
+       for( int i = 0 ; i < image->GetExtent()[1] ; i++ )
+  {
+    for( int j = 0 ; j < image->GetExtent()[3] ; j++ )
+       {
+                       for( int k = 0 ; k < image->GetExtent()[5] ; k++ )
+               {
+                       unsigned char* pPix = (unsigned char *)image->GetScalarPointer( i , j , k );
+                       int p1 = pPix[0];
+                       int p2 = pPix[1];
+                       int p3 = pPix[2];
+                       
+                       double* vecProj;
+                       vecProj = vectorProjection (Px, Py, Pz,
+                                                                                                                                       Nx, Ny, Nz, 
+                                                                                                                                       p1, p2, p3);
+                       a = alpha (Px, Py, Pz, 
+                                                          p1, p2, p3, 
+                                                          vecProj[0], vecProj[1], vecProj[2]);
+
+                       b = beta  (Px, Py, Pz, 
+                                                          p2x, p2y, p2z, 
+                                                          vecProj[0], vecProj[1], vecProj[2]);
+                       
+                       unsigned char *zPtr1 = (unsigned char *) alphaImage->GetScalarPointer( i , j , k );
+                       *zPtr1 = a;
+                       unsigned char *zPtr2 = (unsigned char *) betaImage->GetScalarPointer( i , j , k );
+                       *zPtr2 = b; 
+                       }
+       } 
+  }
 }
-*/
+
+
+