00001
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #if HAVE_CONFIG_H
00028 #include <config.h>
00029 #endif
00030 #include <tcl.h>
00031 #include <tk.h>
00032 #include <stdio.h>
00033 #include <string.h>
00034 #include <math.h>
00035 #include <sadie.h>
00036 #include "tclsadie.h"
00037
00042 static const char atitle[] = DEFAULT_TCL_ARRAY_TITLE;
00043 static const char ixaddr[] = DEFAULT_IN_IMAGE_ADDR_INDEX;
00044 static const char ixname[] = DEFAULT_OUT_IMAGE_NAME_INDEX;
00078 int
00079 Sadie_Tools_DestripeCmd (ClientData client_data, Tcl_Interp *interp,
00080 int objc, Tcl_Obj * const objv[])
00081 {
00082 IMAGE *inimg = NULL;
00083 IMAGE *outimg = NULL;
00084 int option, reference, period, detector, number;
00085
00086 if (objc != 2)
00087 {
00088 Tcl_WrongNumArgs (interp, 1, objv, atitle);
00089 return TCL_ERROR;
00090 }
00091 if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00092 != TCL_OK)
00093 || (GetSadieIntFromObj2 (interp, objv[1], "option", &option)
00094 != TCL_OK)
00095 || (GetSadieIntFromObj2 (interp, objv[1], "reference", &reference)
00096 != TCL_OK)
00097 || (GetSadieIntFromObj2 (interp, objv[1], "period", &period)
00098 != TCL_OK)
00099 || (GetSadieIntFromObj2 (interp, objv[1], "detector", &detector)
00100 != TCL_OK)
00101 || (GetSadieIntFromObj2 (interp, objv[1], "number", &number)
00102 != TCL_OK))
00103 return TCL_ERROR;
00104 DESTRIPE (inimg, (short)option, (short)reference, (short)period,
00105 (short)detector, (short)number, &outimg);
00106 return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00107 }
00108
00126 int
00127 Sadie_Tools_ContMapCmd (ClientData client_data, Tcl_Interp *interp,
00128 int objc, Tcl_Obj * const objv[])
00129 {
00130 IMAGE *inimg = NULL;
00131 IMAGE *outimg = NULL;
00132 int number;
00133 double width;
00134
00135 if (objc != 2)
00136 {
00137 Tcl_WrongNumArgs (interp, 1, objv, atitle);
00138 return TCL_ERROR;
00139 }
00140 if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00141 != TCL_OK)
00142 || (GetSadieIntFromObj2 (interp, objv[1], "number", &number)
00143 != TCL_OK)
00144 || (GetSadieDoubleFromObj2 (interp, objv[1], "width", &width)
00145 != TCL_OK))
00146 return TCL_ERROR;
00147 CONTOUR (inimg, (short)number, width, &outimg);
00148 return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00149 }
00150
00172 int
00173 Sadie_Tools_ReliefCmd (ClientData client_data, Tcl_Interp *interp,
00174 int objc, Tcl_Obj * const objv[])
00175 {
00176 IMAGE *inimg = NULL;
00177 IMAGE *outimg = NULL;
00178 double phi, theta, dist;
00179
00180 if (objc != 2)
00181 {
00182 Tcl_WrongNumArgs (interp, 1, objv, atitle);
00183 return TCL_ERROR;
00184 }
00185 if ((GetSadieImageFromObj2 (interp, objv[1], ixaddr, &inimg)
00186 != TCL_OK)
00187 || (GetSadieDoubleFromObj2 (interp, objv[1], "phi", &phi)
00188 != TCL_OK)
00189 || (GetSadieDoubleFromObj2 (interp, objv[1], "theta", &theta)
00190 != TCL_OK)
00191 || (GetSadieDoubleFromObj2 (interp, objv[1], "dist", &dist)
00192 != TCL_OK))
00193 return TCL_ERROR;
00194 phi *= (PI / 180);
00195 theta *= (PI / 180);
00196 RELIEF (inimg, phi, theta, dist, &outimg);
00197 return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00198 }
00199
00220 int
00221 Sadie_Tools_ScatterCmd (ClientData client_data, Tcl_Interp *interp,
00222 int objc, Tcl_Obj * const objv[])
00223 {
00224 IMAGE *inimg1 = NULL;
00225 IMAGE *inimg2 = NULL;
00226 IMAGE *outimg = NULL;
00227 uint32_t band1, band2, incr, res;
00228
00229 if (objc != 2)
00230 {
00231 Tcl_WrongNumArgs (interp, 1, objv, atitle);
00232 return TCL_ERROR;
00233 }
00234 if ((GetSadieImageFromObj2 (interp, objv[1], "inimg,addr1", &inimg1)
00235 != TCL_OK)
00236 || (GetSadieImageFromObj2 (interp, objv[1], "inimg,addr2", &inimg2)
00237 != TCL_OK)
00238 || (GetSadieUintFromObj2 (interp, objv[1], "band1", &band1)
00239 != TCL_OK)
00240 || (GetSadieUintFromObj2 (interp, objv[1], "band2", &band2)
00241 != TCL_OK)
00242 || (GetSadieUintFromObj2 (interp, objv[1], "incr", &incr)
00243 != TCL_OK)
00244 || (GetSadieUintFromObj2 (interp, objv[1], "res", &res)
00245 != TCL_OK))
00246 return TCL_ERROR;
00247 SCATTER (inimg1, inimg2, --band1, --band2, incr, res, &outimg);
00248 return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00249 }
00250
00265 int
00266 Sadie_Tools_RMSCmd (ClientData client_data, Tcl_Interp *interp,
00267 int objc, Tcl_Obj * const objv[])
00268 {
00269 IMAGE *inimg1 = NULL;
00270 IMAGE *inimg2 = NULL;
00271 double diff;
00272
00273 if (objc != 2)
00274 {
00275 Tcl_WrongNumArgs (interp, 1, objv, atitle);
00276 return TCL_ERROR;
00277 }
00278 if ((GetSadieImageFromObj2 (interp, objv[1], "inimg,addr1", &inimg1)
00279 != TCL_OK)
00280 || (GetSadieImageFromObj2 (interp, objv[1], "inimg,addr2", &inimg2)
00281 != TCL_OK))
00282 return TCL_ERROR;
00283 RMSDIFF (inimg1, inimg2, &diff);
00284 Tcl_SetObjResult (interp, Tcl_NewDoubleObj (diff));
00285 return TCL_OK;
00286 }
00287
00294 int
00295 Sadie_Tools_Init (Tcl_Interp *interp)
00296 {
00297 Tcl_CreateObjCommand (interp, "Sadie_Tools_Destripe",
00298 Sadie_Tools_DestripeCmd, NULL, NULL);
00299 Tcl_CreateObjCommand (interp, "Sadie_Tools_ContMap",
00300 Sadie_Tools_ContMapCmd, NULL, NULL);
00301 Tcl_CreateObjCommand (interp, "Sadie_Tools_Relief",
00302 Sadie_Tools_ReliefCmd, NULL, NULL);
00303 Tcl_CreateObjCommand (interp, "Sadie_Tools_Scatter",
00304 Sadie_Tools_ScatterCmd, NULL, NULL);
00305 Tcl_CreateObjCommand (interp, "Sadie_Tools_RMS",
00306 Sadie_Tools_RMSCmd, NULL, NULL);
00307 return TCL_OK;
00308 }
00309