Main Page   Data Structures   File List   Data Fields   Globals  

Sadie_Tools.c

Go to the documentation of this file.
00001 /*
00002 ##########################################
00003 # Sadie_Tools.c -
00004 #   Set of routines for linking SADIE tools routines to tcl/tk.
00005 #
00006 # RCS: $Id: Sadie_Tools.c,v 2.3 1999/02/11 14:33:03 conner Exp $ 
00007 # 
00008 # Digital Image Analysis Lab
00009 # Dept. of Electrical and Computer Engineering
00010 # University of Arizona
00011 ##########################################
00012 */
00013 
00014 #include <tcl.h>
00015 #include <tk.h>
00016 #include <stdio.h>
00017 #include <string.h>
00018 #include "sadie.h"
00019 
00020 
00021 /* RCS Indentification information */
00022 static char rcsid[] = "$Id: Sadie_Tools.c,v 2.3 1999/02/11 14:33:03 conner Exp $";
00023 
00024 
00025 
00026 /*-------------------------------------------------------------*/
00027 /* Global Sadie variables that must be set from within Tcl/Tk  */
00028 /*-------------------------------------------------------------*/
00029 extern  short   nlev;
00030 extern  short   csize;
00031 extern  double  weight;
00032 extern  double  *count;
00033 extern  PIXEL   gain;
00034 extern  PIXEL   bias;
00035 extern  PIXEL   gmin;
00036 extern  PIXEL   gmax;
00037 extern  PIXEL   thresh;
00038 extern  PIXEL   gbrk[2][4];
00039 extern  PIXEL   *table;
00040 /* -------------------------------------------------------------------------- */
00041 
00042 
00043 
00044 /*-Copyright Information------------------------------------------------------*/
00045 /* Copyright (c) 1999 by the University of Arizona Digital Image Analysis Lab */
00046 /*----------------------------------------------------------------------------*/
00047 /*-General Information--------------------------------------------------------*/
00048 /*                                                                            */
00049 /*   This procedure provides an interface to the SADIE function               */
00050 /*   DESTRIPE from Tcl/Tk.  It expects a tcl global array                     */
00051 /*   with these indices to exist:                                             */
00052 /*      array(inimg,addr)         --  SADIE image address                     */
00053 /*      array(option)             --  int                                     */
00054 /*      array(reference)          --  int                                     */
00055 /*      array(period)             --  int                                     */
00056 /*      array(detector)           --  int                                     */
00057 /*      array(number)             --  int                                     */
00058 /*      array(outname)            --  char*                                   */
00059 /*                                                                            */
00060 /*----------------------------------------------------------------------------*/
00061 /*-Interface Information------------------------------------------------------*/
00062 int Sadie_Tools_DestripeCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00063 {
00064     Tcl_Obj* tclobj=NULL;
00065     Tcl_Obj* tclarrayname = NULL;
00066     Tcl_Obj* tclindexname = NULL;
00067     char msg[SLEN];
00068     char* array=NULL;
00069     char* tempstr=NULL;
00070     int strlen;
00071     int inimgaddr;
00072     IMAGE *inimg=NULL;
00073     int outimgaddr;
00074     IMAGE *outimg=NULL;
00075     char *outname=NULL;
00076     int option, reference, period, detector, number;
00077 
00078     if( argc != 2 ) {
00079         Tcl_AppendResult(interp,"wrong # args: should be \"",
00080         argv[0], " arrayname\"", (char *) NULL);
00081         return TCL_ERROR;
00082     }
00083     array=argv[1];
00084             
00085 
00086     /* Read input image array(inimg,addr) */
00087     tclarrayname = Tcl_NewStringObj(array,-1);
00088     tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00089     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00090         tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00091         if (strlen <= 0) return TCL_ERROR;
00092         sscanf(tempstr,"%x",&inimgaddr);
00093         inimg = (IMAGE *) inimgaddr;
00094     } else {
00095         return TCL_ERROR;
00096     }
00097     Tcl_DecrRefCount(tclarrayname);
00098     Tcl_DecrRefCount(tclindexname);
00099                 
00100 
00101     /* Read the input integer array(option) */
00102     tclarrayname = Tcl_NewStringObj(array,-1);
00103     tclindexname = Tcl_NewStringObj("option",-1);
00104     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00105         if (Tcl_GetIntFromObj(interp,tclobj,&option) == TCL_ERROR) return TCL_ERROR;
00106     } else {
00107         return TCL_ERROR;
00108     }
00109     Tcl_DecrRefCount(tclarrayname);
00110     Tcl_DecrRefCount(tclindexname);
00111                 
00112 
00113     /* Read the input integer array(reference) */
00114     tclarrayname = Tcl_NewStringObj(array,-1);
00115     tclindexname = Tcl_NewStringObj("reference",-1);
00116     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00117         if (Tcl_GetIntFromObj(interp,tclobj,&reference) == TCL_ERROR) return TCL_ERROR;
00118     } else {
00119         return TCL_ERROR;
00120     }
00121     Tcl_DecrRefCount(tclarrayname);
00122     Tcl_DecrRefCount(tclindexname);
00123                 
00124 
00125     /* Read the input integer array(period) */
00126     tclarrayname = Tcl_NewStringObj(array,-1);
00127     tclindexname = Tcl_NewStringObj("period",-1);
00128     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00129         if (Tcl_GetIntFromObj(interp,tclobj,&period) == TCL_ERROR) return TCL_ERROR;
00130     } else {
00131         return TCL_ERROR;
00132     }
00133     Tcl_DecrRefCount(tclarrayname);
00134     Tcl_DecrRefCount(tclindexname);
00135                 
00136 
00137     /* Read the input integer array(detector) */
00138     tclarrayname = Tcl_NewStringObj(array,-1);
00139     tclindexname = Tcl_NewStringObj("detector",-1);
00140     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00141         if (Tcl_GetIntFromObj(interp,tclobj,&detector) == TCL_ERROR) return TCL_ERROR;
00142     } else {
00143         return TCL_ERROR;
00144     }
00145     Tcl_DecrRefCount(tclarrayname);
00146     Tcl_DecrRefCount(tclindexname);
00147                 
00148 
00149     /* Read the input integer array(number) */
00150     tclarrayname = Tcl_NewStringObj(array,-1);
00151     tclindexname = Tcl_NewStringObj("number",-1);
00152     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00153         if (Tcl_GetIntFromObj(interp,tclobj,&number) == TCL_ERROR) return TCL_ERROR;
00154     } else {
00155         return TCL_ERROR;
00156     }
00157     Tcl_DecrRefCount(tclarrayname);
00158     Tcl_DecrRefCount(tclindexname);
00159                 
00160 
00161     /* Read the output image 1 name */
00162     tclarrayname = Tcl_NewStringObj(array,-1);
00163     tclindexname = Tcl_NewStringObj("outname",-1);
00164     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00165         outname = Tcl_GetStringFromObj(tclobj,&strlen);
00166         if (strlen <= 0) return TCL_ERROR;
00167     } else {
00168         return TCL_ERROR;
00169     }
00170     Tcl_DecrRefCount(tclarrayname);
00171     Tcl_DecrRefCount(tclindexname);
00172                 
00173 
00174     DESTRIPE(inimg,option,reference,period,detector,number,&outimg);
00175             
00176 
00177     if (CHECKIMG(outimg))  sprintf(outimg->text, "%s", outname);
00178     outimgaddr = (int) outimg;
00179                 
00180 
00181     sprintf(msg, "%x", outimgaddr);
00182     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00183             
00184     return TCL_OK;
00185 }
00186 
00187 
00188 
00189 
00190 
00191 
00192 /*-Copyright Information------------------------------------------------------*/
00193 /* Copyright (c) 1999 by the University of Arizona Digital Image Analysis Lab */
00194 /*----------------------------------------------------------------------------*/
00195 /*-General Information--------------------------------------------------------*/
00196 /*                                                                            */
00197 /*   This procedure provides an interface to the SADIE function               */
00198 /*   CONTOUR from Tcl/Tk.  It expects a tcl global array                      */
00199 /*   with these indices to exist:                                             */
00200 /*      array(inimg,addr)         --  SADIE image address                     */
00201 /*      array(number)             --  int                                     */
00202 /*      array(width)              --  double                                  */
00203 /*      array(outname)            --  char*                                   */
00204 /*                                                                            */
00205 /*----------------------------------------------------------------------------*/
00206 /*-Interface Information------------------------------------------------------*/
00207 int Sadie_Tools_ContMapCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00208 {
00209     Tcl_Obj* tclobj=NULL;
00210     Tcl_Obj* tclarrayname = NULL;
00211     Tcl_Obj* tclindexname = NULL;
00212     char msg[SLEN];
00213     char* array=NULL;
00214     char* tempstr=NULL;
00215     int strlen;
00216     int inimgaddr;
00217     IMAGE *inimg=NULL;
00218     int outimgaddr;
00219     IMAGE *outimg=NULL;
00220     char *outname=NULL;
00221     int number;
00222     double width;
00223 
00224     if( argc != 2 ) {
00225         Tcl_AppendResult(interp,"wrong # args: should be \"",
00226         argv[0], " arrayname\"", (char *) NULL);
00227         return TCL_ERROR;
00228     }
00229     array=argv[1];
00230             
00231 
00232     /* Read input image array(inimg,addr) */
00233     tclarrayname = Tcl_NewStringObj(array,-1);
00234     tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00235     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00236         tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00237         if (strlen <= 0) return TCL_ERROR;
00238         sscanf(tempstr,"%x",&inimgaddr);
00239         inimg = (IMAGE *) inimgaddr;
00240     } else {
00241         return TCL_ERROR;
00242     }
00243     Tcl_DecrRefCount(tclarrayname);
00244     Tcl_DecrRefCount(tclindexname);
00245                 
00246 
00247     /* Read the input integer array(number) */
00248     tclarrayname = Tcl_NewStringObj(array,-1);
00249     tclindexname = Tcl_NewStringObj("number",-1);
00250     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00251         if (Tcl_GetIntFromObj(interp,tclobj,&number) == TCL_ERROR) return TCL_ERROR;
00252     } else {
00253         return TCL_ERROR;
00254     }
00255     Tcl_DecrRefCount(tclarrayname);
00256     Tcl_DecrRefCount(tclindexname);
00257                 
00258 
00259     /* Read the input double array(width) */
00260     tclarrayname = Tcl_NewStringObj(array,-1);
00261     tclindexname = Tcl_NewStringObj("width",-1);
00262     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00263         if (Tcl_GetDoubleFromObj(interp,tclobj,&width) == TCL_ERROR) return TCL_ERROR;
00264     } else {
00265         return TCL_ERROR;
00266     }
00267     Tcl_DecrRefCount(tclarrayname);
00268     Tcl_DecrRefCount(tclindexname);
00269                 
00270 
00271     /* Read the output image 1 name */
00272     tclarrayname = Tcl_NewStringObj(array,-1);
00273     tclindexname = Tcl_NewStringObj("outname",-1);
00274     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00275         outname = Tcl_GetStringFromObj(tclobj,&strlen);
00276         if (strlen <= 0) return TCL_ERROR;
00277     } else {
00278         return TCL_ERROR;
00279     }
00280     Tcl_DecrRefCount(tclarrayname);
00281     Tcl_DecrRefCount(tclindexname);
00282                 
00283 
00284     CONTOUR(inimg,number,width,&outimg);
00285             
00286 
00287     if (CHECKIMG(outimg))  sprintf(outimg->text, "%s", outname);
00288     outimgaddr = (int) outimg;
00289                 
00290 
00291     sprintf(msg, "%x", outimgaddr);
00292     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00293             
00294     return TCL_OK;
00295 }
00296 
00297 
00298 
00299 
00300 
00301 
00302 /*-Copyright Information------------------------------------------------------*/
00303 /* Copyright (c) 1999 by the University of Arizona Digital Image Analysis Lab */
00304 /*----------------------------------------------------------------------------*/
00305 /*-General Information--------------------------------------------------------*/
00306 /*                                                                            */
00307 /*   This procedure provides an interface to the SADIE function               */
00308 /*   RELIEF from Tcl/Tk.  It expects a tcl global array                       */
00309 /*   with these indices to exist:                                             */
00310 /*      array(inimg,addr)         --  SADIE image address                     */
00311 /*      array(phi)                --  double                                  */
00312 /*      array(theta)              --  double                                  */
00313 /*      array(dist)               --  double                                  */
00314 /*      array(outname)            --  char*                                   */
00315 /*                                                                            */
00316 /*----------------------------------------------------------------------------*/
00317 /*-Interface Information------------------------------------------------------*/
00318 int Sadie_Tools_ReliefCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00319 {
00320     Tcl_Obj* tclobj=NULL;
00321     Tcl_Obj* tclarrayname = NULL;
00322     Tcl_Obj* tclindexname = NULL;
00323     char msg[SLEN];
00324     char* array=NULL;
00325     char* tempstr=NULL;
00326     int strlen;
00327     int inimgaddr;
00328     IMAGE *inimg=NULL;
00329     int outimgaddr;
00330     IMAGE *outimg=NULL;
00331     char *outname=NULL;
00332     double phi, theta, dist;
00333 
00334     if( argc != 2 ) {
00335         Tcl_AppendResult(interp,"wrong # args: should be \"",
00336         argv[0], " arrayname\"", (char *) NULL);
00337         return TCL_ERROR;
00338     }
00339     array=argv[1];
00340             
00341 
00342     /* Read input image array(inimg,addr) */
00343     tclarrayname = Tcl_NewStringObj(array,-1);
00344     tclindexname = Tcl_NewStringObj("inimg,addr",-1);
00345     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00346         tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00347         if (strlen <= 0) return TCL_ERROR;
00348         sscanf(tempstr,"%x",&inimgaddr);
00349         inimg = (IMAGE *) inimgaddr;
00350     } else {
00351         return TCL_ERROR;
00352     }
00353     Tcl_DecrRefCount(tclarrayname);
00354     Tcl_DecrRefCount(tclindexname);
00355                 
00356 
00357     /* Read the input double array(phi) */
00358     tclarrayname = Tcl_NewStringObj(array,-1);
00359     tclindexname = Tcl_NewStringObj("phi",-1);
00360     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00361         if (Tcl_GetDoubleFromObj(interp,tclobj,&phi) == TCL_ERROR) return TCL_ERROR;
00362     } else {
00363         return TCL_ERROR;
00364     }
00365     Tcl_DecrRefCount(tclarrayname);
00366     Tcl_DecrRefCount(tclindexname);
00367                 
00368 
00369     /* Read the input double array(theta) */
00370     tclarrayname = Tcl_NewStringObj(array,-1);
00371     tclindexname = Tcl_NewStringObj("theta",-1);
00372     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00373         if (Tcl_GetDoubleFromObj(interp,tclobj,&theta) == TCL_ERROR) return TCL_ERROR;
00374     } else {
00375         return TCL_ERROR;
00376     }
00377     Tcl_DecrRefCount(tclarrayname);
00378     Tcl_DecrRefCount(tclindexname);
00379                 
00380 
00381     /* Read the input double array(dist) */
00382     tclarrayname = Tcl_NewStringObj(array,-1);
00383     tclindexname = Tcl_NewStringObj("dist",-1);
00384     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00385         if (Tcl_GetDoubleFromObj(interp,tclobj,&dist) == TCL_ERROR) return TCL_ERROR;
00386     } else {
00387         return TCL_ERROR;
00388     }
00389     Tcl_DecrRefCount(tclarrayname);
00390     Tcl_DecrRefCount(tclindexname);
00391                 
00392 
00393     /* Read the output image 1 name */
00394     tclarrayname = Tcl_NewStringObj(array,-1);
00395     tclindexname = Tcl_NewStringObj("outname",-1);
00396     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00397         outname = Tcl_GetStringFromObj(tclobj,&strlen);
00398         if (strlen <= 0) return TCL_ERROR;
00399     } else {
00400         return TCL_ERROR;
00401     }
00402     Tcl_DecrRefCount(tclarrayname);
00403     Tcl_DecrRefCount(tclindexname);
00404                 
00405 
00406     /* Convert to radians */
00407     phi = (phi * (PI/180.0));
00408     theta = (theta * (PI/180.0));
00409 
00410 
00411     RELIEF(inimg,phi,theta,dist,&outimg);
00412             
00413 
00414     if (CHECKIMG(outimg))  sprintf(outimg->text, "%s", outname);
00415     outimgaddr = (int) outimg;
00416                 
00417 
00418     sprintf(msg, "%x", outimgaddr);
00419     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00420             
00421     return TCL_OK;
00422 }
00423 
00424 
00425 
00426 
00427 
00428 
00429 /*-Copyright Information------------------------------------------------------*/
00430 /* Copyright (c) 1999 by the University of Arizona Digital Image Analysis Lab */
00431 /*----------------------------------------------------------------------------*/
00432 /*-General Information--------------------------------------------------------*/
00433 /*                                                                            */
00434 /*   This procedure provides an interface to the SADIE function               */
00435 /*   SCATTER from Tcl/Tk.  It expects a tcl global array                      */
00436 /*   with these indices to exist:                                             */
00437 /*      array(inimg,addr1)        --  SADIE image address                     */
00438 /*      array(inimg,addr2)        --  SADIE image address                     */
00439 /*      array(band1)              --  int                                     */
00440 /*      array(band2)              --  int                                     */
00441 /*      array(incr)               --  int                                     */
00442 /*      array(res)                --  int                                     */
00443 /*      array(outname)            --  char*                                   */
00444 /*                                                                            */
00445 /*----------------------------------------------------------------------------*/
00446 /*-Interface Information------------------------------------------------------*/
00447 int Sadie_Tools_ScatterCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00448 {
00449     Tcl_Obj* tclobj=NULL;
00450     Tcl_Obj* tclarrayname = NULL;
00451     Tcl_Obj* tclindexname = NULL;
00452     char msg[SLEN];
00453     char* array=NULL;
00454     char* tempstr=NULL;
00455     int strlen;
00456     int inimgaddr1, inimgaddr2;
00457     IMAGE *inimg1=NULL, *inimg2=NULL;
00458     int outimgaddr;
00459     IMAGE *outimg=NULL;
00460     char *outname=NULL;
00461     int band1, band2, incr, res;
00462 
00463     if( argc != 2 ) {
00464         Tcl_AppendResult(interp,"wrong # args: should be \"",
00465         argv[0], " arrayname\"", (char *) NULL);
00466         return TCL_ERROR;
00467     }
00468     array=argv[1];
00469             
00470 
00471     /* Read input image array(inimg,addr1) */
00472     tclarrayname = Tcl_NewStringObj(array,-1);
00473     tclindexname = Tcl_NewStringObj("inimg,addr1",-1);
00474     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00475         tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00476         if (strlen <= 0) return TCL_ERROR;
00477         sscanf(tempstr,"%x",&inimgaddr1);
00478         inimg1 = (IMAGE *) inimgaddr1;
00479     } else {
00480         return TCL_ERROR;
00481     }
00482     Tcl_DecrRefCount(tclarrayname);
00483     Tcl_DecrRefCount(tclindexname);
00484                 
00485 
00486     /* Read input image array(inimg,addr2) */
00487     tclarrayname = Tcl_NewStringObj(array,-1);
00488     tclindexname = Tcl_NewStringObj("inimg,addr2",-1);
00489     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00490         tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00491         if (strlen <= 0) return TCL_ERROR;
00492         sscanf(tempstr,"%x",&inimgaddr2);
00493         inimg2 = (IMAGE *) inimgaddr2;
00494     } else {
00495         return TCL_ERROR;
00496     }
00497     Tcl_DecrRefCount(tclarrayname);
00498     Tcl_DecrRefCount(tclindexname);
00499                 
00500 
00501     /* Read the input integer array(band1) */
00502     tclarrayname = Tcl_NewStringObj(array,-1);
00503     tclindexname = Tcl_NewStringObj("band1",-1);
00504     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00505         if (Tcl_GetIntFromObj(interp,tclobj,&band1) == TCL_ERROR) return TCL_ERROR;
00506     } else {
00507         return TCL_ERROR;
00508     }
00509     Tcl_DecrRefCount(tclarrayname);
00510     Tcl_DecrRefCount(tclindexname);
00511                 
00512 
00513     /* Read the input integer array(band2) */
00514     tclarrayname = Tcl_NewStringObj(array,-1);
00515     tclindexname = Tcl_NewStringObj("band2",-1);
00516     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00517         if (Tcl_GetIntFromObj(interp,tclobj,&band2) == TCL_ERROR) return TCL_ERROR;
00518     } else {
00519         return TCL_ERROR;
00520     }
00521     Tcl_DecrRefCount(tclarrayname);
00522     Tcl_DecrRefCount(tclindexname);
00523                 
00524 
00525     /* Read the input integer array(incr) */
00526     tclarrayname = Tcl_NewStringObj(array,-1);
00527     tclindexname = Tcl_NewStringObj("incr",-1);
00528     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00529         if (Tcl_GetIntFromObj(interp,tclobj,&incr) == TCL_ERROR) return TCL_ERROR;
00530     } else {
00531         return TCL_ERROR;
00532     }
00533     Tcl_DecrRefCount(tclarrayname);
00534     Tcl_DecrRefCount(tclindexname);
00535                 
00536 
00537     /* Read the input integer array(res) */
00538     tclarrayname = Tcl_NewStringObj(array,-1);
00539     tclindexname = Tcl_NewStringObj("res",-1);
00540     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00541         if (Tcl_GetIntFromObj(interp,tclobj,&res) == TCL_ERROR) return TCL_ERROR;
00542     } else {
00543         return TCL_ERROR;
00544     }
00545     Tcl_DecrRefCount(tclarrayname);
00546     Tcl_DecrRefCount(tclindexname);
00547                 
00548 
00549     /* Read the output image 1 name */
00550     tclarrayname = Tcl_NewStringObj(array,-1);
00551     tclindexname = Tcl_NewStringObj("outname",-1);
00552     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00553         outname = Tcl_GetStringFromObj(tclobj,&strlen);
00554         if (strlen <= 0) return TCL_ERROR;
00555     } else {
00556         return TCL_ERROR;
00557     }
00558     Tcl_DecrRefCount(tclarrayname);
00559     Tcl_DecrRefCount(tclindexname);
00560 
00561 
00562     band1--;
00563     band2--;
00564                 
00565 
00566     SCATTER(inimg1,inimg2,band1,band2,incr,res,&outimg);
00567             
00568 
00569     if (CHECKIMG(outimg))  sprintf(outimg->text, "%s", outname);
00570     outimgaddr = (int) outimg;
00571                 
00572 
00573     sprintf(msg, "%x", outimgaddr);
00574     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00575             
00576     return TCL_OK;
00577 }
00578 
00579 
00580 
00581 
00582 
00583 
00584 /*-Copyright Information------------------------------------------------------*/
00585 /* Copyright (c) 1999 by the University of Arizona Digital Image Analysis Lab */
00586 /*----------------------------------------------------------------------------*/
00587 /*-General Information--------------------------------------------------------*/
00588 /*                                                                            */
00589 /*   This procedure provides an interface to the SADIE function               */
00590 /*   RMSDIFF from Tcl/Tk.  It expects a tcl global array                      */
00591 /*   with these indices to exist:                                             */
00592 /*      array(inimg,addr1)        --  SADIE image address                     */
00593 /*      array(inimg,addr2)        --  SADIE image address                     */
00594 /*                                                                            */
00595 /*----------------------------------------------------------------------------*/
00596 /*-Interface Information------------------------------------------------------*/
00597 int Sadie_Tools_RMSCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00598 {
00599     Tcl_Obj* tclobj=NULL;
00600     Tcl_Obj* tclarrayname = NULL;
00601     Tcl_Obj* tclindexname = NULL;
00602     char msg[SLEN];
00603     char* array=NULL;
00604     char* tempstr=NULL;
00605     int strlen;
00606     int inimgaddr1, inimgaddr2;
00607     IMAGE *inimg1=NULL, *inimg2=NULL;
00608     double diff;
00609 
00610     if( argc != 2 ) {
00611         Tcl_AppendResult(interp,"wrong # args: should be \"",
00612         argv[0], " arrayname\"", (char *) NULL);
00613         return TCL_ERROR;
00614     }
00615     array=argv[1];
00616             
00617 
00618     /* Read input image array(inimg,addr1) */
00619     tclarrayname = Tcl_NewStringObj(array,-1);
00620     tclindexname = Tcl_NewStringObj("inimg,addr1",-1);
00621     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00622         tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00623         if (strlen <= 0) return TCL_ERROR;
00624         sscanf(tempstr,"%x",&inimgaddr1);
00625         inimg1 = (IMAGE *) inimgaddr1;
00626     } else {
00627         return TCL_ERROR;
00628     }
00629     Tcl_DecrRefCount(tclarrayname);
00630     Tcl_DecrRefCount(tclindexname);
00631                 
00632 
00633     /* Read input image array(inimg,addr2) */
00634     tclarrayname = Tcl_NewStringObj(array,-1);
00635     tclindexname = Tcl_NewStringObj("inimg,addr2",-1);
00636     if (tclobj = Tcl_ObjGetVar2(interp,  tclarrayname , tclindexname , TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00637         tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00638         if (strlen <= 0) return TCL_ERROR;
00639         sscanf(tempstr,"%x",&inimgaddr2);
00640         inimg2 = (IMAGE *) inimgaddr2;
00641     } else {
00642         return TCL_ERROR;
00643     }
00644     Tcl_DecrRefCount(tclarrayname);
00645     Tcl_DecrRefCount(tclindexname);
00646                 
00647 
00648     RMSDIFF(inimg1,inimg2,&diff);
00649             
00650 
00651     sprintf(msg, "%f",diff);
00652     Tcl_SetResult(interp, msg, TCL_VOLATILE);
00653             
00654     return TCL_OK;
00655 }
00656 
00657 
00658 
00659 
00660 
00661 
00662 /*-Copyright Information------------------------------------------------------*/
00663 /* Copyright (c) 1999 by the University of Arizona Digital Image Analysis Lab */
00664 /*----------------------------------------------------------------------------*/
00665 /*-General Information--------------------------------------------------------*/
00666 /*                                                                            */
00667 /*   This procedure initializes the all of the procedures                     */
00668 /*   in this file by registering them with Tcl.                               */
00669 /*                                                                            */
00670 /*----------------------------------------------------------------------------*/
00671 /*-Interface Information------------------------------------------------------*/
00672 int Sadie_Tools_Init(Tcl_Interp *interp)
00673 {
00674     Tcl_CreateCommand(interp, "Sadie_Tools_Destripe", Sadie_Tools_DestripeCmd,(ClientData) NULL, NULL);
00675     Tcl_CreateCommand(interp, "Sadie_Tools_ContMap", Sadie_Tools_ContMapCmd,(ClientData) NULL, NULL);
00676     Tcl_CreateCommand(interp, "Sadie_Tools_Relief", Sadie_Tools_ReliefCmd,(ClientData) NULL, NULL);
00677     Tcl_CreateCommand(interp, "Sadie_Tools_Scatter", Sadie_Tools_ScatterCmd,(ClientData) NULL, NULL);
00678     Tcl_CreateCommand(interp, "Sadie_Tools_RMS", Sadie_Tools_RMSCmd,(ClientData) NULL, NULL);
00679     return TCL_OK;
00680 }
00681 

Generated on Wed Apr 9 08:56:13 2003 for TREES by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002