BuildGLTree.cpp 1.69 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
#include "mex.h"
#include "GLTree.cpp"
/* the gateway function */
//la chiamata deve essere ptr=BuildGLtree(p)

void mexFunction( int nlhs, mxArray *plhs[1],
                  int nrhs, const mxArray *prhs[1])
{
 
 //dichiarazioni variabili   
 double       *p;

 int N,i;
 GLTREE* ptr;
 
  
 
  if(nrhs!=1) 
    mexErrMsgTxt("One Input required.");

  
    if( !mxIsDouble(prhs[0]))
 { mexErrMsgTxt("Input must be double arrays ");
         } 


    
    
       N=mxGetN(prhs[0]);//dimensione dei punti

      if(N!=3) 
    mexErrMsgTxt("Only 3D input required.");
     
     
     N=mxGetM(prhs[0]);//dimensione dell'array
    
        
      
       p = mxGetPr(prhs[0]);//puntatore all'array dei punti
       
      Coord3D* pstruct=new Coord3D[N]; 
       
      //copying the point array to GLTree data structure
      for (i=0;i<N;i++)
      {
          pstruct[i].x=p[i];
          pstruct[i].y=p[i+N];
          pstruct[i].z=p[i+2*N];
//       mexPrintf(" %4.4f   %4.4f   %4.4f\n",p[i],p[i+N],p[i+N+N]);
      }
       
     ptr = new GLTREE(pstruct,N);//chiamata al costruttore
//       ptr=&Tree;//creo il puntatore all'albero
//      mexPrintf("puntatore= %4.4x\n",ptr);//stampa il puntatore
      
        
        
     //return the program a pointer to the created tree
     plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL);//crea il puntatore all'output
     double* ptrtree = mxGetPr(plhs[0]);//rendi double* GLTREE* 
     ptrtree[0]=(long) ptr;//copia il puntatore 
     
     
     
     //trying to remake it a tree pointer
     // verifico se la conversione riporta al puntatore originario
     //ptr=(GLTREE*)(long(ptrtree[0]));
    // mexPrintf("puntatore= %4.4x\n",ptr);
     delete [] pstruct;
}