Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals

dyimaxold.c

Go to the documentation of this file.
00001 /************************************************************************* 00002 * $Id: dyimaxold.c,v 1.1 2005/09/09 08:22:24 bellet Exp $ 00003 ************************************************************************** 00004 This software is governed by the CeCILL license under French law and 00005 abiding by the rules of distribution of free software. You can use, 00006 modify and/ or redistribute the software under the terms of the CeCILL 00007 license as circulated by CEA, CNRS and INRIA at the following URL 00008 "http://www.cecill.info". 00009 00010 As a counterpart to the access to the source code and rights to copy, 00011 modify and redistribute granted by the license, users are provided only 00012 with a limited warranty and the software's author, the holder of the 00013 economic rights, and the successive licensors have only limited 00014 liability. 00015 00016 In this respect, the user's attention is drawn to the risks associated 00017 with loading, using, modifying and/or developing or reproducing the 00018 software by the user in light of its specific status of free software, 00019 that may mean that it is complicated to manipulate, and that also 00020 therefore means that it is reserved for developers and experienced 00021 professionals having in-depth computer knowledge. Users are therefore 00022 encouraged to load and test the software's suitability as regards their 00023 requirements in conditions enabling the security of their systems and/or 00024 data to be ensured and, more generally, to use and operate it in the 00025 same conditions as regards security. 00026 00027 The fact that you are presently reading this means that you have had 00028 knowledge of the CeCILL license and that you accept its terms. 00029 00030 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de 00031 l'Image). All rights reserved. See License.txt for details. 00032 00033 Version 1.0 05/09/2005 00034 *************************************************************************/ 00035 00036 /************************************************************************* 00037 * 00038 * Description : Ancienne version, qui marchait partout sauf sous LINUX 00039 * conservée pour afficher sur des ecrans 8 bits 00040 * sans se compliquer la vie. 00041 * - Des que j'ai (re)trouve et adapté un code qui affiche sur ecrans 8/16/24/32 bits 00042 * je jette tout et je remplace JPRx - 00043 * 00044 **************************************************************************/ 00045 00046 #ifdef HAVE_X11 00047 00048 #include <string.h> // For memcpy 00049 #include <math.h> 00050 #include <stdio.h> 00051 #include <stdlib.h> 00052 #include "iderr.h" 00053 #include "idima.h" 00054 #include "idprint.h" 00055 00056 #include <X11/Xlib.h> 00057 #include <X11/Xutil.h> 00058 #include <X11/Xos.h> 00059 #include <X11/Xatom.h> 00060 00061 #define RGB24BITS_SW 4 00062 #define RGB24BITS_NW 5 00063 #define COLORS256_SW 2 00064 #define COLORS256_NW 3 00065 00066 static PPIMAGE_UCHAR eclate_24_8 (PPIMAGE_RGB); 00067 00068 static Display *disp; 00069 static Visual *vis; 00070 static int screen_num; 00071 static Window win; 00072 00073 static XImage *xim=NULL; 00074 static GC gc; 00075 static XGCValues val; 00076 static XColor xcol; 00077 static XEvent rep; 00078 static Colormap cm; 00079 static int lut[256]; 00080 static char **imm; 00081 static char * imm1; 00082 static int fdp[2]; 00083 static int fork_done=0; 00084 00085 static XVisualInfo vTemplate; 00086 static XVisualInfo *visualList; 00087 static int visualsMatched; 00088 static XSetWindowAttributes attributs; 00089 static unsigned long valuemask=0 /*,pixels[2048] */; 00090 static int num_visual; 00091 static PPIMAGE_UCHAR imUCHAR; 00092 static PPIMAGE_RGB imRGB; 00093 00094 /*void _IdImaDisplayColorOld(PPIMAGE_UCHAR , // pour eviter les warnings 00095 int , 00096 int , int , int , int , 00097 int , int , PSIGNAL_RGB); 00098 */ 00099 void _IdImaDisplayColorOld(PPIMAGE_UCHAR im, 00100 int display, // Displays in same window when even 00101 // and in newly created window when odd 00102 int x, int y, int nx, int ny, 00103 int ox, int oy, PSIGNAL_RGB pal) 00104 { 00105 int i,j,k,kkk=0; 00106 int lig,v; 00107 int FlagSameWindow=0; 00108 int default24; 00109 int incr; /* increment indice palette */ 00110 00111 if (!im) { 00112 IdErrPrintf("Pointeur image NULL !!\n"); 00113 return; 00114 } 00115 00116 FlagSameWindow=display&0x0001; 00117 00118 if(!FlagSameWindow) { /* si PAIR meme fenetre */ 00119 00120 if(!fork_done) { 00121 pipe(fdp); 00122 fork_done=1; 00123 fcntl(fdp[0],F_SETFL,O_NDELAY); 00124 00125 if(fork())return; 00126 00127 } else { 00128 switch(IdImaType(im)) { 00129 case IMA_UCHAR: 00130 for(i=0;i<IdImaDimY(im);i++) 00131 write(fdp[1],im[i],IdImaDimX(im)); 00132 return; 00133 00134 case IMA_RGB: 00135 for(i=0;i<IdImaDimY(im);i++) 00136 write(fdp[1],im[i],IdImaDimX(im)*3); 00137 return; 00138 } 00139 } 00140 00141 } else { /* si IMPAIR nouvelle fenetre */ 00142 00143 if (fork()) 00144 return; 00145 } 00146 00147 if(!(disp=XOpenDisplay(0))) { 00148 IdPrintf("Pb de display (XOpenDisplay)\n"); 00149 return; 00150 } 00151 screen_num=DefaultScreen(disp); 00152 00153 00154 switch(IdImaType(im)) 00155 { 00156 case IMA_UCHAR: 00157 00158 /**************************************************************************/ 00159 /* Affichage en 128 niveaux de gris ou en 128 couleurs garanties avec */ 00160 /* une palette passee en parametre */ 00161 /**************************************************************************/ 00162 00163 default24=0; 00164 00165 vis=DefaultVisual(disp,screen_num); 00166 00167 vTemplate.screen=screen_num; 00168 vTemplate.depth=24; 00169 visualList=XGetVisualInfo(disp,VisualScreenMask | VisualDepthMask, 00170 &vTemplate,&visualsMatched); 00171 for(i=0;i< visualsMatched;i++) { 00172 if(visualList[num_visual].visual == vis ) { 00173 default24=1; 00174 if(display ==0) display=4; 00175 if(display ==1) display=5; 00176 break; 00177 } 00178 00179 } 00180 00181 if(display ==0 || display ==1 ) { 00182 00183 imUCHAR=(PPIMAGE_UCHAR)im; 00184 vis=DefaultVisual(disp,screen_num); 00185 00186 win=XCreateSimpleWindow(disp,RootWindow(disp,screen_num), 00187 0,0,IdImaDimX(im),IdImaDimY(im),50/*4*/,WhitePixel(disp,screen_num), 00188 BlackPixel(disp,screen_num)); 00189 XClearWindow(disp,win); 00190 XStoreName(disp,win,IdGetFileName(im)); 00191 00192 xcol.flags=DoRed | DoGreen | DoBlue; 00193 if (!pal) { 00194 for(i=0;i<256;i+=2) { /* pas de palette -> 128 niveaux de gris */ 00195 00196 xcol.red =i<<8; 00197 xcol.green=i<<8; 00198 xcol.blue =i<<8; 00199 XAllocColor(disp,DefaultColormap(disp,screen_num),&xcol); 00200 00201 if (xcol.pixel<=255) { 00202 lut[i] =xcol.pixel; 00203 lut[i+1]=xcol.pixel; 00204 } 00205 } 00206 00207 } else { /* on traite la palette */ 00208 00209 if (IdSigDimX(pal)>128) // pour toute palette >128, on prend une 00210 // couleur sur 2 ... 00211 incr=2; 00212 else 00213 incr=1; 00214 00215 for(i=0;i<IdSigDimX(pal);i+=incr) { 00216 xcol.red =pal[i].r<<8; 00217 xcol.green=pal[i].g<<8; 00218 xcol.blue =pal[i].b<<8; 00219 XAllocColor(disp,DefaultColormap(disp,screen_num),&xcol); 00220 00221 if( xcol.pixel<=255) { 00222 lut[i]=xcol.pixel; 00223 lut[i+1]=xcol.pixel; 00224 } 00225 } 00226 } 00227 00228 imm= (char **)malloc(IdImaDimY(im)*sizeof(char *)); 00229 imm[0]=(char *) malloc(IdImaDimX(im)*IdImaDimY(im)*IdSizeOfType(im)); 00230 00231 for(i=0;i<IdImaDimY(im);i++) 00232 imm[i]=(char *)imm[0] + i * IdImaDimX(im) * IdSizeOfType(im); 00233 00234 for(i=0;i<IdImaDimY(im);i++)for(j=0;j<IdImaDimX(im);j++) { 00235 imm[i][j]=lut[imUCHAR[i][j]&0xff]; 00236 } 00237 00238 if (default24) 00239 xim=XCreateImage(disp,vis,24,ZPixmap,0,imm[0], 00240 IdImaDimX(im),IdImaDimY(im),8,IdImaDimX(im)); 00241 else 00242 xim=XCreateImage(disp,vis,8,ZPixmap,0,imm[0], 00243 IdImaDimX(im),IdImaDimY(im),8,IdImaDimX(im)); 00244 00245 } 00246 00247 /**************************************************************************/ 00248 /* Affichage en 256 niveaux de gris ou en 256 couleurs non garanties avec */ 00249 /* une palette passee en parametre */ 00250 /**************************************************************************/ 00251 00252 if(display ==2 || display ==3 ) /* cette partie n'a pas d'interet (pas pratique) */ 00253 /* laissee ici pour compatibilite avec des versions anterieures */ 00254 { 00255 00256 imUCHAR=(PPIMAGE_UCHAR)im; 00257 vis=DefaultVisual(disp,screen_num); 00258 win=XCreateSimpleWindow(disp,RootWindow(disp,screen_num), 00259 0,0,IdImaDimX(im),IdImaDimY(im),50/*4*/,WhitePixel(disp,screen_num), 00260 BlackPixel(disp,screen_num)); 00261 XClearWindow(disp,win); 00262 XStoreName(disp,win,IdGetFileName(im)); 00263 00264 xcol.flags=DoRed | DoGreen | DoBlue; 00265 if (!pal) 00266 { 00267 for(i=0;i<256;i+=1) { // on n'a pas passe de palette -> 256 niveaux 00268 // de gris 00269 xcol.red =i<<8; 00270 xcol.green=i<<8; 00271 xcol.blue =i<<8; 00272 XAllocColor(disp,DefaultColormap(disp,screen_num),&xcol); 00273 if( xcol.pixel<=255) { 00274 lut[i] =xcol.pixel; 00275 } 00276 } 00277 } else { // on traite la palette 00278 for(i=0;i<IdSigDimX(pal);i+=1) 00279 { 00280 xcol.red =pal[i].r<<8; 00281 xcol.green=pal[i].g<<8; 00282 xcol.blue =pal[i].b<<8; 00283 XAllocColor(disp,DefaultColormap(disp,screen_num),&xcol); 00284 if( xcol.pixel<=255 ) 00285 { 00286 lut[i]=xcol.pixel; 00287 } 00288 } 00289 } 00290 imm= (char **)malloc(IdImaDimY(im)*sizeof(char *)); 00291 imm[0]=(char *) malloc(IdImaDimX(im)*IdImaDimY(im)*IdSizeOfType(im)); 00292 for(i=0;i<IdImaDimY(im);i++) 00293 imm[i]=(char *)imm[0] + i * IdImaDimX(im) * IdSizeOfType(im); 00294 00295 for(i=0;i<IdImaDimY(im);i++)for(j=0;j<IdImaDimX(im);j++) 00296 { 00297 imm[i][j]=lut[imUCHAR[i][j]&0xff]; 00298 } 00299 00300 xim=XCreateImage(disp,vis,8,ZPixmap,0,imm[0], 00301 IdImaDimX(im),IdImaDimY(im),8,IdImaDimX(im)); 00302 00303 } 00304 00305 /**************************************************************************/ 00306 /* Affichage en 256 niveaux de gris garantis avec colormap reservee */ 00307 /* ou Affichage en 256 couleurs garantis en allouant une colormap conforme*/ 00308 /* a la palette passee en parametre */ 00309 /**************************************************************************/ 00310 00311 if( display == 4 || display == 5 ) 00312 { 00313 vTemplate.screen=screen_num; 00314 vTemplate.depth=8; 00315 visualList=XGetVisualInfo(disp, 00316 VisualScreenMask | 00317 VisualDepthMask | 00318 VisualRedMaskMask | 00319 VisualGreenMaskMask | 00320 VisualRedMaskMask, 00321 &vTemplate,&visualsMatched); 00322 00323 /* Recherche d'un visual type PSEUDO-COLOR */ 00324 num_visual=0; 00325 while ( visualList[num_visual].class != PseudoColor ){ 00326 num_visual++; 00327 if( num_visual >= visualsMatched ) { 00328 IdErrPrintf("Erreur impossible d'afficher en pseudocolor"); 00329 IdExit(1);}} 00330 00331 imUCHAR=(PPIMAGE_UCHAR)im; 00332 00333 cm = XCreateColormap(disp,RootWindow(disp,screen_num), 00334 visualList[num_visual].visual,AllocAll); 00335 if(!cm)IdErrPrintf("Erreur creation colormap \n"); 00336 attributs.colormap = cm; 00337 attributs.event_mask= ButtonPressMask | KeyPressMask | ExposureMask; 00338 attributs.background_pixel=BlackPixel(disp,screen_num); 00339 attributs.border_pixel=WhitePixel(disp,screen_num); 00340 vis=visualList[num_visual].visual; 00341 valuemask |= CWColormap; 00342 valuemask |= CWEventMask; 00343 valuemask |= CWBackPixel; 00344 valuemask |= CWBorderPixel; 00345 win=XCreateWindow(disp,RootWindow(disp,screen_num), 00346 0,0,IdImaDimX(imUCHAR),IdImaDimY(imUCHAR),50,vTemplate.depth, 00347 InputOutput,vis,valuemask,&attributs); 00348 if(!win) IdErrPrintf("Erreur creation fenetre \n"); 00349 XSetWindowColormap(disp,win,cm); 00350 XClearWindow(disp,win); 00351 XStoreName(disp,win,IdGetFileName(imUCHAR)); 00352 00353 xcol.flags=DoRed | DoGreen | DoBlue; 00354 if (!pal) { 00355 for(i=0;i<256;i+=1) { // on n'a pas passe de palette -> niveaux 00356 // de gris 00357 xcol.pixel=i; 00358 xcol.red =i<<8; 00359 xcol.green=i<<8; 00360 xcol.blue =i<<8; 00361 XStoreColor(disp,cm,&xcol); 00362 } 00363 } else { /* on traite la palette */ 00364 00365 for(i=0;i<IdSigDimX(pal);i+=1) { 00366 xcol.pixel=i; 00367 xcol.red =pal[i].r<<8; 00368 xcol.green=pal[i].g<<8; 00369 xcol.blue =pal[i].b<<8; 00370 XStoreColor(disp,cm,&xcol); 00371 } 00372 00373 } 00374 00375 imm1=(char *)malloc(IdImaDimX(imUCHAR)*IdImaDimY(imUCHAR)*IdSizeOfType(imUCHAR)); 00376 00377 for(i=0;i<IdImaDimY(imUCHAR);i++) 00378 memcpy(imm1+(i*IdImaDimX(imUCHAR)), imUCHAR[i], IdImaDimX(imUCHAR)); 00379 00380 00381 xim=XCreateImage(disp,vis,8,ZPixmap,0, imm1, 00382 IdImaDimX(imUCHAR),IdImaDimY(imUCHAR),8,IdImaDimX(imUCHAR)); 00383 } 00384 break; 00385 00386 00387 case IMA_RGB: 00388 00389 /**************************************************************************/ 00390 /* Affichage en d'une image RGB sur ecran 24 bits en TRUE-COLOR */ 00391 /**************************************************************************/ 00392 00393 vTemplate.depth=24; 00394 visualList=XGetVisualInfo(disp,VisualScreenMask | VisualDepthMask, 00395 &vTemplate,&visualsMatched); 00396 00397 if( visualsMatched == 0 ) { 00398 im=eclate_24_8((PPIMAGE_RGB)im); 00399 break; 00400 } else { 00401 while(visualList[num_visual].class != TrueColor ) { 00402 num_visual++; 00403 00404 if ( num_visual >= visualsMatched) { 00405 IdErrPrintf("Votre serveur ne permet pas d'afficher en TRUE_COLOR"); 00406 IdExit(1); 00407 } 00408 } 00409 } 00410 00411 imRGB=(PPIMAGE_RGB)im; 00412 00413 cm = XCreateColormap(disp,RootWindow(disp,screen_num), 00414 visualList[num_visual].visual,AllocNone); 00415 attributs.colormap = cm; 00416 attributs.event_mask= ButtonPressMask | KeyPressMask | ExposureMask; 00417 attributs.background_pixel=BlackPixel(disp,screen_num); 00418 attributs.border_pixel=WhitePixel(disp,screen_num); 00419 vis=visualList[num_visual].visual; 00420 valuemask |= CWColormap; 00421 valuemask |= CWEventMask; 00422 valuemask |= CWBackPixel; 00423 valuemask |= CWBorderPixel; 00424 win=XCreateWindow(disp,RootWindow(disp,screen_num), 00425 0,0,IdImaDimX(imRGB),IdImaDimY(imRGB),50,vTemplate.depth, 00426 InputOutput,visualList[num_visual].visual,valuemask,&attributs); 00427 if(!win) IdErrPrintf("Erreur creation fenetre \n"); 00428 XSetWindowColormap(disp,win,cm); 00429 XClearWindow(disp,win); 00430 XStoreName(disp,win,IdGetFileName(imRGB)); 00431 imm1=(char *)malloc(IdImaDimX(imRGB)*IdImaDimY(imRGB)*4); 00432 00433 for(i=0,k=0;i<IdImaDimY(imRGB);i++) 00434 for(j=0;j<IdImaDimX(imRGB);j++,k+=4) { 00435 imm1[k] =0; 00436 imm1[k+1]=imRGB[i][j].b; 00437 imm1[k+2]=imRGB[i][j].g; 00438 imm1[k+3]=imRGB[i][j].r; 00439 } 00440 xim=XCreateImage(disp,vis,24,ZPixmap,0,(char *)imm1, 00441 IdImaDimX(imRGB),IdImaDimY(imRGB),16,IdImaDimX(imRGB)*4); 00442 if(!xim) 00443 IdErrPrintf("erreur creation image\n"); 00444 00445 break; 00446 00447 default: 00448 00449 IdErrPrintf("type d'image (%d) non autorise a l'affichage\n", 00450 IdImaType(im)); 00451 IdExit(1); 00452 00453 break; 00454 } 00455 00456 /*************************************************************************/ 00457 /* Partie commune affichage des images xim */ 00458 /*************************************************************************/ 00459 00460 gc=XCreateGC(disp,win,(GCForeground|GCBackground),&val); 00461 00462 XMapWindow(disp,win); 00463 XSelectInput(disp,win,ButtonPressMask | KeyPressMask | ExposureMask); 00464 XPutImage(disp,win,gc,xim,0,0,0,0,IdImaDimX(im),IdImaDimY(im)); 00465 lig=0; 00466 while(1) 00467 { 00468 if( XEventsQueued(disp,QueuedAfterFlush) || display) 00469 { 00470 XNextEvent(disp,&rep); 00471 switch(rep.type) 00472 { 00473 case ButtonPress: 00474 if( rep.xbutton.button == 1) 00475 { 00476 XPutImage(disp,win,gc,xim,0,0,0, 00477 0,IdImaDimX(im),IdImaDimY(im)); 00478 XFreeGC(disp,gc); 00479 XCloseDisplay(disp); 00480 IdExit(0); } 00481 break; 00482 00483 case Expose: 00484 XPutImage(disp,win,gc,xim,0,0, 00485 0,0,IdImaDimX(im),IdImaDimY(im)); 00486 break; 00487 00488 case KeyPress: 00489 XPutImage(disp,win,gc,xim,0,0, 00490 0,0,IdImaDimX(im),IdImaDimY(im)); 00491 break; 00492 } 00493 } 00494 else 00495 { 00496 switch (IdImaType(im)) 00497 { 00498 case IMA_UCHAR: 00499 /*---------------*/ 00500 if( (v=read(fdp[0],im[lig],IdImaDimX(im))) != -1) 00501 { 00502 if(v) 00503 { 00504 for(j=0;j<IdImaDimX(im);j++) 00505 { 00506 imm[lig][j]=lut[im[lig][j]&0xff]; 00507 } 00508 lig++; 00509 } 00510 if(lig==IdImaDimY(im)) 00511 { 00512 lig=0; 00513 XPutImage(disp,win,gc,xim,0,0,0,0, 00514 IdImaDimX(im),IdImaDimY(im)); 00515 } 00516 } /* fin if v=read(fdp... */ 00517 00518 break; 00519 00520 case IMA_RGB: 00521 /*-------------*/ 00522 00523 if( (v=read(fdp[0],im[lig],IdImaDimX(im)*3)) != -1) 00524 { 00525 if(v) 00526 { 00527 for(j=0;j<IdImaDimX(im);j++,kkk+=4) 00528 { 00529 00530 imm1[kkk] =0; 00531 imm1[kkk+1]=imRGB[lig][j].b; 00532 imm1[kkk+2]=imRGB[lig][j].g; 00533 imm1[kkk+3]=imRGB[lig][j].r; 00534 } 00535 lig++; 00536 } 00537 if(lig==IdImaDimY(im)) 00538 { 00539 lig=0; 00540 kkk=0; 00541 00542 XPutImage(disp,win,gc,xim,0,0,0,0, 00543 IdImaDimX(im),IdImaDimY(im)); 00544 } 00545 } /* fin if v=read(fdp... */ 00546 00547 break; 00548 00549 } /* fin Switch */ 00550 00551 } 00552 } 00553 } 00554 00555 /* --------------------------------------------------------------------------*/ 00556 00557 static PPIMAGE_UCHAR eclate_24_8(PPIMAGE_RGB imInput) 00558 { 00559 PPIMAGE_UCHAR imDest; 00560 int i,j; 00561 00562 imDest=(PPIMAGE_UCHAR)IdImaAlloc(IdImaDimX(imInput)*3,IdImaDimY(imInput),IMA_UCHAR); 00563 for(i=0;i<IdImaDimY(imInput);i++)for(j=0;j<IdImaDimX(imInput);j++) 00564 { 00565 imDest[i][j]= imInput[i][j].r; 00566 imDest[i][j+IdImaDimX(imInput)]= imInput[i][j].g; 00567 imDest[i][j+2*IdImaDimX(imInput)]= imInput[i][j].b; 00568 } 00569 00570 /* Ecrire des fonctions ... */ 00571 00572 vis=DefaultVisual(disp,screen_num); 00573 win=XCreateSimpleWindow(disp,RootWindow(disp,screen_num), 00574 0,0,IdImaDimX(imDest),IdImaDimY(imDest),50,WhitePixel(disp,screen_num), 00575 BlackPixel(disp,screen_num)); 00576 XClearWindow(disp,win); 00577 XStoreName(disp,win,IdGetFileName(imDest)); 00578 00579 xcol.flags=DoRed | DoGreen | DoBlue; 00580 00581 for(i=0;i<256;i+=2) // on n'a pas passe de palette -> 128 niveaux 00582 // de gris 00583 { 00584 xcol.red =i<<8; 00585 xcol.green=i<<8; 00586 xcol.blue =i<<8; 00587 XAllocColor(disp,DefaultColormap(disp,screen_num),&xcol); 00588 if( xcol.pixel<=255 ) 00589 { 00590 lut[i] =xcol.pixel; 00591 lut[i+1]=xcol.pixel; 00592 } 00593 } 00594 00595 imm=(char **)malloc(IdImaDimY(imDest)*sizeof(char *)); 00596 imm[0]=(char *)malloc(IdImaDimX(imDest)*IdImaDimY(imDest)* 00597 IdSizeOfType(imDest)); 00598 for(i=0;i<IdImaDimY(imDest);i++) 00599 imm[i]=(char *)imm[0] + i * IdImaDimX(imDest) * IdSizeOfType(imDest); 00600 00601 for(i=0;i<IdImaDimY(imDest);i++)for(j=0;j<IdImaDimX(imDest);j++) 00602 { 00603 imm[i][j]=lut[imDest[i][j]&0xff]; 00604 } 00605 00606 xim=XCreateImage(disp,vis,8,ZPixmap,0,imm[0], 00607 IdImaDimX(imDest),IdImaDimY(imDest),8,IdImaDimX(imDest)); 00608 00609 return imDest; 00610 } 00611 #endif

Generated on Wed Oct 19 09:28:33 2005 for SIMRI3D by doxygen 1.3.7