Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/pure-cfg/src/lib/diderot.c
ViewVC logotype

Diff of /branches/pure-cfg/src/lib/diderot.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 565, Thu Feb 24 18:34:48 2011 UTC revision 566, Thu Feb 24 19:29:51 2011 UTC
# Line 8  Line 8 
8   * All rights reserved.   * All rights reserved.
9   */   */
10    
11  #include "diderot.h"  #include "Diderot/diderot.h"
12  #include <teem/nrrd.h>  #include <teem/nrrd.h>
13    
 /* load image data from Nrrd files */  
 Status_t Diderot_LoadImage1D (Diderot_string_t name, Diderot_image1D_t *img);  
 Status_t Diderot_LoadImage2D (Diderot_string_t name, Diderot_image2D_t *img);  
 Status_t Diderot_LoadImage3D (Diderot_string_t name, Diderot_image3D_t *img)  
 {  
     Nrrd *nin = loadNrrdFile (name);  
   
     img->dim = 3;  
     img->size[0] = nin->axis[0].size;  
     img->size[1] = nin->axis[1].size;  
     img->size[2] = nin->axis[2].size;  
     img->data = nin->data;  
   
     loadTransformMatrix (nin, transformMatrix);  
     InvertM (transformMatrix, inverseMatrix);  
   
 }  
   
 /* functions to get input-parameter values */  
 extern Status_t Diderot_InputString (const char *, const char **, bool);  
 extern Status_t Diderot_InputReal (const char *, Diderot_real_t *, bool);  
 extern Status_t Diderot_InputVec3 (const char *, Diderot_vec3_t *v);  
   
14  /* Transformation matrix operations */  /* Transformation matrix operations */
15    
16  STATIC_INLINE Diderot_real_t DetM3x3 (  STATIC_INLINE Diderot_real_t DetM3x3 (
# Line 49  Line 26 
26            - (a)*(h)*(f));            - (a)*(h)*(f));
27  }  }
28    
29  Diderot_real_t DetM4x4 (Diderot_Mat4x4_t m)  static Diderot_real_t DetM4x4 (Diderot_Mat4x4_t m)
30  {  {
31          return  (m[ 0] * DetM3x3(m[ 5], m[ 6], m[ 7],  #define M(i)    m[(i)>>2].r[(i)&3]
32                                   m[ 9], m[10], m[11],          return  (M( 0) * DetM3x3(M( 5), M( 6), M( 7),
33                                   m[13], m[14], m[15])                                   M( 9), M(10), M(11),
34                 - m[ 1] * DetM3x3(m[ 4], m[ 6], m[ 7],                                   M(13), M(14), M(15))
35                                   m[ 8], m[10], m[11],                 - M( 1) * DetM3x3(M( 4), M( 6), M( 7),
36                                   m[12], m[14], m[15])                                   M( 8), M(10), M(11),
37                 + m[ 2] * DetM3x3(m[ 4], m[ 5], m[ 7],                                   M(12), M(14), M(15))
38                                   m[ 8], m[ 9], m[11],                 + M( 2) * DetM3x3(M( 4), M( 5), M( 7),
39                                   m[12], m[13], m[15])                                   M( 8), M( 9), M(11),
40                 - m[ 3] * DetM3x3(m[ 4], m[ 5], m[ 6],                                   M(12), M(13), M(15))
41                                   m[ 8], m[ 9], m[10],                 - M( 3) * DetM3x3(M( 4), M( 5), M( 6),
42                                   m[12], m[13], m[14]));                                   M( 8), M( 9), M(10),
43                                     M(12), M(13), M(14)));
44    #undef M
45    
46  }  }
47    
# Line 70  Line 49 
49   *  \param m the matrix to invert   *  \param m the matrix to invert
50   *  \param i the inverted matrix   *  \param i the inverted matrix
51   */   */
52  void InvertM4x4 (Diderot_Mat4x4_t i, Diderot_Mat4x4_t m)  static void InvertM4x4 (Diderot_Mat4x4_t i, Diderot_Mat4x4_t m)
53  {  {
54          Diderot_real_t scale = 1.0 / DetM4x4(m);          Diderot_real_t scale = 1.0 / DetM4x4(m);
55    
56          i[0] = DetM3x3(m[5],m[ 6],m[ 7],  #define M(i)    m[(i)>>2].r[(i)&3]
57                         m[ 9],m[10],m[11],  #define I(j)    i[(j)>>2].r[(j)&3]
58                         m[13],m[14],m[15]) * scale;          I( 0) = DetM3x3(M( 5),M( 6),M( 7),
59                           M( 9),M(10),M(11),
60          i[ 1] = -DetM3x3(m[ 1],m[ 2],m[ 3],                         M(13),M(14),M(15)) * scale;
61                           m[ 9],m[10],m[11],  
62                           m[13],m[14],m[15]) * scale;          I( 1) = -DetM3x3(M( 1),M( 2),M( 3),
63                             M( 9),M(10),M(11),
64          i[ 2] =  DetM3x3(m[ 1],m[ 2],m[ 3],                           M(13),M(14),M(15)) * scale;
65                           m[ 5],m[ 6],m[ 7],  
66                           m[13],m[14],m[15]) * scale;          I( 2) =  DetM3x3(M( 1),M( 2),M( 3),
67                             M( 5),M( 6),M( 7),
68          i[ 3] = -DetM3x3(m[ 1],m[ 2],m[ 3],                           M(13),M(14),M(15)) * scale;
69                           m[ 5],m[ 6],m[ 7],  
70                           m[ 9],m[10],m[11]) * scale;          I( 3) = -DetM3x3(M( 1),M( 2),M( 3),
71                             M( 5),M( 6),M( 7),
72          i[ 4] = -DetM3x3(m[ 4],m[ 6],m[ 7],                           M( 9),M(10),M(11)) * scale;
73                           m[ 8],m[10],m[11],  
74                           m[12],m[14],m[15]) * scale;          I( 4) = -DetM3x3(M( 4),M( 6),M( 7),
75                             M( 8),M(10),M(11),
76          i[ 5] =  DetM3x3(m[ 0],m[ 2],m[ 3],                           M(12),M(14),M(15)) * scale;
77                           m[ 8],m[10],m[11],  
78                           m[12],m[14],m[15]) * scale;          I( 5) =  DetM3x3(M( 0),M( 2),M( 3),
79                             M( 8),M(10),M(11),
80          i[ 6] = -DetM3x3(m[ 0],m[ 2],m[ 3],                           M(12),M(14),M(15)) * scale;
81                           m[ 4],m[ 6],m[ 7],  
82                           m[12],m[14],m[15]) * scale;          I( 6) = -DetM3x3(M( 0),M( 2),M( 3),
83                             M( 4),M( 6),M( 7),
84          i[ 7] =  DetM3x3(m[ 0],m[ 2],m[ 3],                           M(12),M(14),M(15)) * scale;
85                           m[ 4],m[ 6],m[ 7],  
86                           m[ 8],m[10],m[11]) * scale;          I( 7) =  DetM3x3(M( 0),M( 2),M( 3),
87                             M( 4),M( 6),M( 7),
88          i[ 8] =  DetM3x3(m[ 4],m[ 5],m[ 7],                           M( 8),M(10),M(11)) * scale;
89                           m[ 8],m[ 9],m[11],  
90                           m[12],m[13],m[15]) * scale;          I( 8) =  DetM3x3(M( 4),M( 5),M( 7),
91                             M( 8),M( 9),M(11),
92          i[ 9] = -DetM3x3(m[ 0],m[ 1],m[ 3],                           M(12),M(13),M(15)) * scale;
93                           m[ 8],m[ 9],m[11],  
94                           m[12],m[13],m[15]) * scale;          I( 9) = -DetM3x3(M( 0),M( 1),M( 3),
95                             M( 8),M( 9),M(11),
96          i[10] =  DetM3x3(m[ 0],m[ 1],m[ 3],                           M(12),M(13),M(15)) * scale;
97                           m[ 4],m[ 5],m[ 7],  
98                           m[12],m[13],m[15]) * scale;          I(10) =  DetM3x3(M( 0),M( 1),M( 3),
99                             M( 4),M( 5),M( 7),
100          i[11] = -DetM3x3(m[ 0],m[ 1],m[ 3],                           M(12),M(13),M(15)) * scale;
101                           m[ 4],m[ 5],m[ 7],  
102                           m[ 8],m[ 9],m[11]) * scale;          I(11) = -DetM3x3(M( 0),M( 1),M( 3),
103                             M( 4),M( 5),M( 7),
104          i[12] = -DetM3x3(m[ 4],m[ 5],m[ 6],                           M( 8),M( 9),M(11)) * scale;
105                           m[ 8],m[ 9],m[10],  
106                           m[12],m[13],m[14]) * scale;          I(12) = -DetM3x3(M( 4),M( 5),M( 6),
107                             M( 8),M( 9),M(10),
108          i[13] =  DetM3x3(m[ 0],m[ 1],m[ 2],                           M(12),M(13),M(14)) * scale;
109                           m[ 8],m[ 9],m[10],  
110                           m[12],m[13],m[14]) * scale;          I(13) =  DetM3x3(M( 0),M( 1),M( 2),
111                             M( 8),M( 9),M(10),
112          i[14] = -DetM3x3(m[ 0],m[ 1],m[ 2],                           M(12),M(13),M(14)) * scale;
113                           m[ 4],m[ 5],m[ 6],  
114                           m[12],m[13],m[14]) * scale;          I(14) = -DetM3x3(M( 0),M( 1),M( 2),
115                             M( 4),M( 5),M( 6),
116          i[15] =  DetM3x3(m[ 0],m[ 1],m[ 2],                           M(12),M(13),M(14)) * scale;
117                           m[ 4],m[ 5],m[ 6],  
118                           m[ 8],m[ 9],m[10]) * scale;          I(15) =  DetM3x3(M( 0),M( 1),M( 2),
119                             M( 4),M( 5),M( 6),
120                             M( 8),M( 9),M(10)) * scale;
121    #undef M
122    #undef I
123  }  }
124    
125  /*! \brief compute the inverse transpose of \arg m, storing the result in \arg i.  /*! \brief compute the inverse transpose of \arg m, storing the result in \arg i.
126   *  \param m the matrix to invert   *  \param m the matrix to invert
127   *  \param i the inverted matrix   *  \param i the inverted matrix
128   */   */
129  void InvertTransposeM4x4 (Matrix4x4_t i, Matrix4x4_t m)  static void InvertTransposeM4x4 (Diderot_Mat4x4_t i, Diderot_Mat4x4_t m)
130  {  {
131          Diderot_real_t scale = 1.0 / DetM4x4(m);          Diderot_real_t scale = 1.0 / DetM4x4(m);
132    
133          i[0] = DetM3x3(m[5],m[ 6],m[ 7],  #define M(i)    m[(i)>>2].r[(i)&3]
134                         m[ 9],m[10],m[11],  #define I(j)    i[(j)>>2].r[(j)&3]
135                         m[13],m[14],m[15]) * scale;          I( 0) = DetM3x3(M( 5),M( 6),M( 7),
136                           M( 9),M(10),M(11),
137          i[ 4] = -DetM3x3(m[ 1],m[ 2],m[ 3],                         M(13),M(14),M(15)) * scale;
138                           m[ 9],m[10],m[11],  
139                           m[13],m[14],m[15]) * scale;          I( 4) = -DetM3x3(M( 1),M( 2),M( 3),
140                             M( 9),M(10),M(11),
141          i[ 8] =  DetM3x3(m[ 1],m[ 2],m[ 3],                           M(13),M(14),M(15)) * scale;
142                           m[ 5],m[ 6],m[ 7],  
143                           m[13],m[14],m[15]) * scale;          I( 8) =  DetM3x3(M( 1),M( 2),M( 3),
144                             M( 5),M( 6),M( 7),
145          i[12] = -DetM3x3(m[ 1],m[ 2],m[ 3],                           M(13),M(14),M(15)) * scale;
146                           m[ 5],m[ 6],m[ 7],  
147                           m[ 9],m[10],m[11]) * scale;          I(12) = -DetM3x3(M( 1),M( 2),M( 3),
148                             M( 5),M( 6),M( 7),
149          i[ 1] = -DetM3x3(m[ 4],m[ 6],m[ 7],                           M( 9),M(10),M(11)) * scale;
150                           m[ 8],m[10],m[11],  
151                           m[12],m[14],m[15]) * scale;          I( 1) = -DetM3x3(M( 4),M( 6),M( 7),
152                             M( 8),M(10),M(11),
153          i[ 5] =  DetM3x3(m[ 0],m[ 2],m[ 3],                           M(12),M(14),M(15)) * scale;
154                           m[ 8],m[10],m[11],  
155                           m[12],m[14],m[15]) * scale;          I( 5) =  DetM3x3(M( 0),M( 2),M( 3),
156                             M( 8),M(10),M(11),
157          i[ 9] = -DetM3x3(m[ 0],m[ 2],m[ 3],                           M(12),M(14),M(15)) * scale;
158                           m[ 4],m[ 6],m[ 7],  
159                           m[12],m[14],m[15]) * scale;          I( 9) = -DetM3x3(M( 0),M( 2),M( 3),
160                             M( 4),M( 6),M( 7),
161          i[ 7] =  DetM3x3(m[ 0],m[ 2],m[ 3],                           M(12),M(14),M(15)) * scale;
162                           m[ 4],m[ 6],m[ 7],  
163                           m[ 8],m[10],m[11]) * scale;          I( 7) =  DetM3x3(M( 0),M( 2),M( 3),
164                             M( 4),M( 6),M( 7),
165          i[ 2] =  DetM3x3(m[ 4],m[ 5],m[ 7],                           M( 8),M(10),M(11)) * scale;
166                           m[ 8],m[ 9],m[11],  
167                           m[12],m[13],m[15]) * scale;          I( 2) =  DetM3x3(M( 4),M( 5),M( 7),
168                             M( 8),M( 9),M(11),
169          i[ 6] = -DetM3x3(m[ 0],m[ 1],m[ 3],                           M(12),M(13),M(15)) * scale;
170                           m[ 8],m[ 9],m[11],  
171                           m[12],m[13],m[15]) * scale;          I( 6) = -DetM3x3(M( 0),M( 1),M( 3),
172                             M( 8),M( 9),M(11),
173          i[10] =  DetM3x3(m[ 0],m[ 1],m[ 3],                           M(12),M(13),M(15)) * scale;
174                           m[ 4],m[ 5],m[ 7],  
175                           m[12],m[13],m[15]) * scale;          I(10) =  DetM3x3(M( 0),M( 1),M( 3),
176                             M( 4),M( 5),M( 7),
177          i[14] = -DetM3x3(m[ 0],m[ 1],m[ 3],                           M(12),M(13),M(15)) * scale;
178                           m[ 4],m[ 5],m[ 7],  
179                           m[ 8],m[ 9],m[11]) * scale;          I(14) = -DetM3x3(M( 0),M( 1),M( 3),
180                             M( 4),M( 5),M( 7),
181          i[ 3] = -DetM3x3(m[ 4],m[ 5],m[ 6],                           M( 8),M( 9),M(11)) * scale;
182                           m[ 8],m[ 9],m[10],  
183                           m[12],m[13],m[14]) * scale;          I( 3) = -DetM3x3(M( 4),M( 5),M( 6),
184                             M( 8),M( 9),M(10),
185          i[ 7] =  DetM3x3(m[ 0],m[ 1],m[ 2],                           M(12),M(13),M(14)) * scale;
186                           m[ 8],m[ 9],m[10],  
187                           m[12],m[13],m[14]) * scale;          I( 7) =  DetM3x3(M( 0),M( 1),M( 2),
188                             M( 8),M( 9),M(10),
189          i[11] = -DetM3x3(m[ 0],m[ 1],m[ 2],                           M(12),M(13),M(14)) * scale;
190                           m[ 4],m[ 5],m[ 6],  
191                           m[12],m[13],m[14]) * scale;          I(11) = -DetM3x3(M( 0),M( 1),M( 2),
192                             M( 4),M( 5),M( 6),
193          i[15] =  DetM3x3(m[ 0],m[ 1],m[ 2],                           M(12),M(13),M(14)) * scale;
194                           m[ 4],m[ 5],m[ 6],  
195                           m[ 8],m[ 9],m[10]) * scale;          I(15) =  DetM3x3(M( 0),M( 1),M( 2),
196                             M( 4),M( 5),M( 6),
197                             M( 8),M( 9),M(10)) * scale;
198    
199    #undef M
200    #undef I
201    }
202    
203    /* load image data from Nrrd files */
204    //Status_t Diderot_LoadImage1D (Diderot_string_t name, Diderot_image1D_t *img);
205    //Status_t Diderot_LoadImage2D (Diderot_string_t name, Diderot_image2D_t *img);
206    
207    Status_t Diderot_LoadImage3D (Diderot_string_t name, Diderot_image3D_t **imgOut)
208    {
209        Nrrd *nin = loadNrrdFile (name);
210        Diderot_image3D_t *img = (Diderot_image3D_t *)malloc(sizeof(Diderot_image3D_t));
211    
212        img->dim = 3;
213        img->size[0] = nin->axis[0].size;
214        img->size[1] = nin->axis[1].size;
215        img->size[2] = nin->axis[2].size;
216        img->data = nin->data;
217    
218        loadTransformMatrix (nin, img->m);
219        InvertM4x4 (img->m, img->mInv);
220        InvertTransposeM4x4 (img->m, img->mInvT);
221    
222        *imgOut = img;
223        return DIDEROT_OK;
224    }
225    
226    /* functions to get input-parameter values */
227    Status_t Diderot_InputString (const char *name, const char **v, bool hasDflt)
228    {
229        return DIDEROT_OK;
230    }
231    
232    Status_t Diderot_Inputf (const char *name, float *v, bool hasDflt)
233    {
234        return DIDEROT_OK;
235    }
236    
237    Status_t Diderot_InputVec3f (const char *name, vec3f_t *v, bool hasDflt)
238    {
239        return DIDEROT_OK;
240  }  }

Legend:
Removed from v.565  
changed lines
  Added in v.566

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0