00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
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
00022 static char rcsid[] = "$Id: Sadie_Geometry.c,v 2.5 1999/02/01 21:44:15 gopalan Exp $";
00023
00024
00025
00026
00027
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
00045 double xpolyterms[6] = {0.0, 1.0, 0.0, 0.0, 0.0, 0.0};
00046 double ypolyterms[6] = {0.0, 0.0, 1.0, 0.0, 0.0, 0.0};
00047 int numpolyterms = 3;
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 int Sadie_Geometry_AvgSubCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00068 {
00069 Tcl_Obj* tclobj=NULL;
00070 char msg[SLEN];
00071 char* array=NULL;
00072 char* tempstr=NULL;
00073 int strlen;
00074 int inimgaddr;
00075 IMAGE* inimg=NULL;
00076 int outimgaddr;
00077 IMAGE* outimg=NULL;
00078 char* outname=NULL;
00079 int lines, pix, incrlines, incrpix;
00080
00081 if( argc != 2 ) {
00082 Tcl_AppendResult(interp,"wrong # args: should be \"",
00083 argv[0], " arrayname\"", (char *) NULL);
00084 return TCL_ERROR;
00085 }
00086 array=argv[1];
00087
00088
00089
00090 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00091 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00092 if (strlen <= 0) return TCL_ERROR;
00093 sscanf(tempstr,"%x",&inimgaddr);
00094 inimg = (IMAGE *) inimgaddr;
00095 } else {
00096 return TCL_ERROR;
00097 }
00098
00099
00100
00101 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("lines",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00102 if (Tcl_GetIntFromObj(interp,tclobj,&lines) == TCL_ERROR) return TCL_ERROR;
00103 } else {
00104 return TCL_ERROR;
00105 }
00106
00107
00108
00109 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("pix",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00110 if (Tcl_GetIntFromObj(interp,tclobj,&pix) == TCL_ERROR) return TCL_ERROR;
00111 } else {
00112 return TCL_ERROR;
00113 }
00114
00115
00116
00117 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("incrlines",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00118 if (Tcl_GetIntFromObj(interp,tclobj,&incrlines) == TCL_ERROR) return TCL_ERROR;
00119 } else {
00120 return TCL_ERROR;
00121 }
00122
00123
00124
00125 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("incrpix",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00126 if (Tcl_GetIntFromObj(interp,tclobj,&incrpix) == TCL_ERROR) return TCL_ERROR;
00127 } else {
00128 return TCL_ERROR;
00129 }
00130
00131
00132
00133 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("outname",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00134 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00135 if (strlen <= 0) return TCL_ERROR;
00136 } else {
00137 return TCL_ERROR;
00138 }
00139
00140
00141 RESAMPL(inimg,lines,pix,incrlines,incrpix,&outimg);
00142
00143
00144 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00145 outimgaddr = (int) outimg;
00146
00147
00148 sprintf(msg, "%x", outimgaddr);
00149 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00150
00151 return TCL_OK;
00152 }
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181 int Sadie_Geometry_WinSubCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00182 {
00183 Tcl_Obj* tclobj=NULL;
00184 char msg[SLEN];
00185 char* array=NULL;
00186 char* tempstr=NULL;
00187 int strlen;
00188 int inimgaddr;
00189 IMAGE* inimg=NULL;
00190 int outimgaddr;
00191 IMAGE* outimg=NULL;
00192 char* outname=NULL;
00193 int fromband, frompix, fromline, toband, topix, toline, incrband, incrpix, incrline;
00194
00195 if( argc != 2 ) {
00196 Tcl_AppendResult(interp,"wrong # args: should be \"",
00197 argv[0], " arrayname\"", (char *) NULL);
00198 return TCL_ERROR;
00199 }
00200 array=argv[1];
00201
00202
00203
00204 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00205 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00206 if (strlen <= 0) return TCL_ERROR;
00207 sscanf(tempstr,"%x",&inimgaddr);
00208 inimg = (IMAGE *) inimgaddr;
00209 } else {
00210 return TCL_ERROR;
00211 }
00212
00213
00214
00215 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("from,band",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00216 if (Tcl_GetIntFromObj(interp,tclobj,&fromband) == TCL_ERROR) return TCL_ERROR;
00217 } else {
00218 return TCL_ERROR;
00219 }
00220
00221
00222
00223 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("from,pix",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00224 if (Tcl_GetIntFromObj(interp,tclobj,&frompix) == TCL_ERROR) return TCL_ERROR;
00225 } else {
00226 return TCL_ERROR;
00227 }
00228
00229
00230
00231 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("from,line",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00232 if (Tcl_GetIntFromObj(interp,tclobj,&fromline) == TCL_ERROR) return TCL_ERROR;
00233 } else {
00234 return TCL_ERROR;
00235 }
00236
00237
00238
00239 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("to,band",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00240 if (Tcl_GetIntFromObj(interp,tclobj,&toband) == TCL_ERROR) return TCL_ERROR;
00241 } else {
00242 return TCL_ERROR;
00243 }
00244
00245
00246
00247 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("to,pix",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00248 if (Tcl_GetIntFromObj(interp,tclobj,&topix) == TCL_ERROR) return TCL_ERROR;
00249 } else {
00250 return TCL_ERROR;
00251 }
00252
00253
00254
00255 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("to,line",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00256 if (Tcl_GetIntFromObj(interp,tclobj,&toline) == TCL_ERROR) return TCL_ERROR;
00257 } else {
00258 return TCL_ERROR;
00259 }
00260
00261
00262
00263 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("incr,band",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00264 if (Tcl_GetIntFromObj(interp,tclobj,&incrband) == TCL_ERROR) return TCL_ERROR;
00265 } else {
00266 return TCL_ERROR;
00267 }
00268
00269
00270
00271 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("incr,pix",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00272 if (Tcl_GetIntFromObj(interp,tclobj,&incrpix) == TCL_ERROR) return TCL_ERROR;
00273 } else {
00274 return TCL_ERROR;
00275 }
00276
00277
00278
00279 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("incr,line",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00280 if (Tcl_GetIntFromObj(interp,tclobj,&incrline) == TCL_ERROR) return TCL_ERROR;
00281 } else {
00282 return TCL_ERROR;
00283 }
00284
00285
00286
00287 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("outname",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00288 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00289 if (strlen <= 0) return TCL_ERROR;
00290 } else {
00291 return TCL_ERROR;
00292 }
00293
00294
00295 SUBSAMPL(inimg,fromband-1,fromline-1,frompix-1,incrband,incrline,incrpix,((toband-fromband)+1),((toline-fromline)+1),((topix-frompix)+1),&outimg);
00296
00297
00298 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00299 outimgaddr = (int) outimg;
00300
00301
00302 sprintf(msg, "%x", outimgaddr);
00303 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00304
00305 return TCL_OK;
00306 }
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329 int Sadie_Geometry_ScaleCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00330 {
00331 Tcl_Obj* tclobj=NULL;
00332 char msg[SLEN];
00333 char* array=NULL;
00334 char* tempstr=NULL;
00335 int strlen;
00336 int inimgaddr;
00337 IMAGE* inimg=NULL;
00338 int outimgaddr;
00339 IMAGE* outimg=NULL;
00340 char* outname=NULL;
00341 double lines, pix, option;
00342
00343 if( argc != 2 ) {
00344 Tcl_AppendResult(interp,"wrong # args: should be \"",
00345 argv[0], " arrayname\"", (char *) NULL);
00346 return TCL_ERROR;
00347 }
00348 array=argv[1];
00349
00350
00351
00352 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00353 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00354 if (strlen <= 0) return TCL_ERROR;
00355 sscanf(tempstr,"%x",&inimgaddr);
00356 inimg = (IMAGE *) inimgaddr;
00357 } else {
00358 return TCL_ERROR;
00359 }
00360
00361
00362
00363 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("lines",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00364 if (Tcl_GetDoubleFromObj(interp,tclobj,&lines) == TCL_ERROR) return TCL_ERROR;
00365 } else {
00366 return TCL_ERROR;
00367 }
00368
00369
00370
00371 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("pix",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00372 if (Tcl_GetDoubleFromObj(interp,tclobj,&pix) == TCL_ERROR) return TCL_ERROR;
00373 } else {
00374 return TCL_ERROR;
00375 }
00376
00377
00378
00379 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("option",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00380 if (Tcl_GetDoubleFromObj(interp,tclobj,&option) == TCL_ERROR) return TCL_ERROR;
00381 } else {
00382 return TCL_ERROR;
00383 }
00384
00385
00386
00387 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("outname",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00388 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00389 if (strlen <= 0) return TCL_ERROR;
00390 } else {
00391 return TCL_ERROR;
00392 }
00393
00394
00395 EXPAND(inimg,lines,pix,option,&outimg);
00396
00397
00398 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00399 outimgaddr = (int) outimg;
00400
00401
00402 sprintf(msg, "%x", outimgaddr);
00403 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00404
00405 return TCL_OK;
00406 }
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429 int Sadie_Geometry_RotateCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00430 {
00431 Tcl_Obj* tclobj=NULL;
00432 char msg[SLEN];
00433 char* array=NULL;
00434 char* tempstr=NULL;
00435 int strlen;
00436 int inimgaddr;
00437 IMAGE* inimg=NULL;
00438 int outimgaddr;
00439 IMAGE* outimg=NULL;
00440 char* outname=NULL;
00441 double angle, option;
00442 PIXEL graylevel;
00443 double tempdouble;
00444
00445 if( argc != 2 ) {
00446 Tcl_AppendResult(interp,"wrong # args: should be \"",
00447 argv[0], " arrayname\"", (char *) NULL);
00448 return TCL_ERROR;
00449 }
00450 array=argv[1];
00451
00452
00453
00454 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00455 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00456 if (strlen <= 0) return TCL_ERROR;
00457 sscanf(tempstr,"%x",&inimgaddr);
00458 inimg = (IMAGE *) inimgaddr;
00459 } else {
00460 return TCL_ERROR;
00461 }
00462
00463
00464
00465 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("angle",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00466 if (Tcl_GetDoubleFromObj(interp,tclobj,&angle) == TCL_ERROR) return TCL_ERROR;
00467 } else {
00468 return TCL_ERROR;
00469 }
00470
00471
00472
00473 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("option",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00474 if (Tcl_GetDoubleFromObj(interp,tclobj,&option) == TCL_ERROR) return TCL_ERROR;
00475 } else {
00476 return TCL_ERROR;
00477 }
00478
00479
00480
00481 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("graylevel",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00482 if (Tcl_GetDoubleFromObj(interp,tclobj,&tempdouble) == TCL_ERROR) return TCL_ERROR;
00483 graylevel = (PIXEL)tempdouble;
00484 } else {
00485 return TCL_ERROR;
00486 }
00487
00488
00489
00490 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("outname",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00491 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00492 if (strlen <= 0) return TCL_ERROR;
00493 } else {
00494 return TCL_ERROR;
00495 }
00496
00497
00498 ROTATE(inimg,angle,graylevel,option,&outimg);
00499
00500
00501 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00502 outimgaddr = (int) outimg;
00503
00504
00505 sprintf(msg, "%x", outimgaddr);
00506 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00507
00508 return TCL_OK;
00509 }
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530 int Sadie_Geometry_MirrorCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00531 {
00532 Tcl_Obj* tclobj=NULL;
00533 char msg[SLEN];
00534 char* array=NULL;
00535 char* tempstr=NULL;
00536 int strlen;
00537 int inimgaddr;
00538 IMAGE* inimg=NULL;
00539 int outimgaddr;
00540 IMAGE* outimg=NULL;
00541 char* outname=NULL;
00542 int option;
00543
00544 if( argc != 2 ) {
00545 Tcl_AppendResult(interp,"wrong # args: should be \"",
00546 argv[0], " arrayname\"", (char *) NULL);
00547 return TCL_ERROR;
00548 }
00549 array=argv[1];
00550
00551
00552
00553 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00554 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00555 if (strlen <= 0) return TCL_ERROR;
00556 sscanf(tempstr,"%x",&inimgaddr);
00557 inimg = (IMAGE *) inimgaddr;
00558 } else {
00559 return TCL_ERROR;
00560 }
00561
00562
00563
00564 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("option",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00565 if (Tcl_GetIntFromObj(interp,tclobj,&option) == TCL_ERROR) return TCL_ERROR;
00566 } else {
00567 return TCL_ERROR;
00568 }
00569
00570
00571
00572 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("outname",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00573 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00574 if (strlen <= 0) return TCL_ERROR;
00575 } else {
00576 return TCL_ERROR;
00577 }
00578
00579
00580 TRNSFORM(inimg,option,&outimg);
00581
00582
00583 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00584 outimgaddr = (int) outimg;
00585
00586
00587 sprintf(msg, "%x", outimgaddr);
00588 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00589
00590 return TCL_OK;
00591 }
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615 int Sadie_Geometry_ContPtsCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00616 {
00617 char* tclvar;
00618 int npts, nterms;
00619 double transx[6], transy[6], refx[6], refy[6];
00620 char index[50], *var=NULL;
00621 int i;
00622
00623 if( argc != 2 ) {
00624 Tcl_AppendResult(interp,"wrong # args: should be \"",
00625 argv[0], " arrayname\"", (char *) NULL);
00626 return TCL_ERROR;
00627 }
00628 var=argv[1];
00629
00630 if (!(tclvar = Tcl_GetVar2(interp, var, "pointcount", TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))) {
00631 return TCL_ERROR;
00632 }
00633 if( Tcl_GetInt (interp, tclvar, &npts) != TCL_OK ) {
00634 return TCL_ERROR;
00635 }
00636
00637 if (!(tclvar = Tcl_GetVar2(interp, var, "termcount", TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))) {
00638 return TCL_ERROR;
00639 }
00640 if( Tcl_GetInt (interp, tclvar, &nterms) != TCL_OK ) {
00641 return TCL_ERROR;
00642 }
00643
00644 for (i=0; i<6; i++) {
00645
00646 sprintf(index,"trans,x,%d",i+1);
00647 if (!(tclvar = Tcl_GetVar2(interp, var, index, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))) {
00648 return TCL_ERROR;
00649 }
00650 if ( Tcl_GetDouble(interp,tclvar,&transx[i]) != TCL_OK ) {
00651 return TCL_ERROR;
00652 }
00653
00654
00655 sprintf(index,"trans,y,%d",i+1);
00656 if (!(tclvar = Tcl_GetVar2(interp, var, index, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))) {
00657 return TCL_ERROR;
00658 }
00659 if( Tcl_GetDouble (interp, tclvar, &transy[i]) != TCL_OK ) {
00660 return TCL_ERROR;
00661 }
00662
00663
00664 sprintf(index,"ref,x,%d",i+1);
00665 if (!(tclvar = Tcl_GetVar2(interp, var, index, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))) {
00666 return TCL_ERROR;
00667 }
00668 if( Tcl_GetDouble (interp, tclvar, &refx[i]) != TCL_OK ) {
00669 return TCL_ERROR;
00670 }
00671
00672
00673 sprintf(index,"ref,y,%d",i+1);
00674 if (!(tclvar = Tcl_GetVar2(interp, var, index, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG))) {
00675 return TCL_ERROR;
00676 }
00677 if( Tcl_GetDouble (interp, tclvar, &refy[i]) != TCL_OK ) {
00678 return TCL_ERROR;
00679 }
00680
00681 }
00682
00683
00684 GEOMCOEF ((double *)transx, (double *)transy, (double *)refx, (double *)refy,
00685 (short)npts, (short)nterms, (double *)xpolyterms, (double *)ypolyterms);
00686 numpolyterms = nterms;
00687
00688 return TCL_OK;
00689 }
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713 int Sadie_Geometry_GeomWarpCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00714 {
00715 Tcl_Obj* tclobj=NULL;
00716 char msg[SLEN];
00717 char* array=NULL;
00718 char* tempstr=NULL;
00719 int strlen;
00720 int inimgaddr;
00721 IMAGE* inimg=NULL;
00722 int outimgaddr;
00723 IMAGE* outimg=NULL;
00724 char* outname=NULL;
00725 int lines, pix;
00726 double option;
00727 PIXEL graylevel;
00728 double tempdouble;
00729
00730 if( argc != 2 ) {
00731 Tcl_AppendResult(interp,"wrong # args: should be \"",
00732 argv[0], " arrayname\"", (char *) NULL);
00733 return TCL_ERROR;
00734 }
00735 array=argv[1];
00736
00737
00738
00739 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00740 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00741 if (strlen <= 0) return TCL_ERROR;
00742 sscanf(tempstr,"%x",&inimgaddr);
00743 inimg = (IMAGE *) inimgaddr;
00744 } else {
00745 return TCL_ERROR;
00746 }
00747
00748
00749
00750 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("lines",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00751 if (Tcl_GetIntFromObj(interp,tclobj,&lines) == TCL_ERROR) return TCL_ERROR;
00752 } else {
00753 return TCL_ERROR;
00754 }
00755
00756
00757
00758 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("pix",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00759 if (Tcl_GetIntFromObj(interp,tclobj,&pix) == TCL_ERROR) return TCL_ERROR;
00760 } else {
00761 return TCL_ERROR;
00762 }
00763
00764
00765
00766 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("option",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00767 if (Tcl_GetDoubleFromObj(interp,tclobj,&option) == TCL_ERROR) return TCL_ERROR;
00768 } else {
00769 return TCL_ERROR;
00770 }
00771
00772
00773
00774 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("graylevel",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00775 if (Tcl_GetDoubleFromObj(interp,tclobj,&tempdouble) == TCL_ERROR) return TCL_ERROR;
00776 graylevel = (PIXEL)tempdouble;
00777 } else {
00778 return TCL_ERROR;
00779 }
00780
00781
00782
00783 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("outname",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00784 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00785 if (strlen <= 0) return TCL_ERROR;
00786 } else {
00787 return TCL_ERROR;
00788 }
00789
00790
00791 GEOMWARP(inimg,inimg->nbnd,(short)lines,(short)pix,(double *)xpolyterms,(double *)ypolyterms,(short)numpolyterms,option,graylevel,&outimg);
00792
00793
00794 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00795 outimgaddr = (int) outimg;
00796
00797
00798 sprintf(msg, "%x", outimgaddr);
00799 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00800
00801 return TCL_OK;
00802 }
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825 int Sadie_Geometry_HMosaicCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00826 {
00827 Tcl_Obj* tclobj=NULL;
00828 char msg[SLEN];
00829 char* array=NULL;
00830 char* tempstr=NULL;
00831 int strlen;
00832 int inimgaddr1, inimgaddr2;
00833 IMAGE *inimg1=NULL, *inimg2=NULL;
00834 int outimgaddr;
00835 IMAGE* outimg=NULL;
00836 char* outname=NULL;
00837 int offset;
00838 PIXEL fill;
00839 double tempdouble;
00840
00841 if( argc != 2 ) {
00842 Tcl_AppendResult(interp,"wrong # args: should be \"",
00843 argv[0], " arrayname\"", (char *) NULL);
00844 return TCL_ERROR;
00845 }
00846 array=argv[1];
00847
00848
00849
00850 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr1",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00851 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00852 if (strlen <= 0) return TCL_ERROR;
00853 sscanf(tempstr,"%x",&inimgaddr1);
00854 inimg1 = (IMAGE *) inimgaddr1;
00855 } else {
00856 return TCL_ERROR;
00857 }
00858
00859
00860
00861 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr2",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00862 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00863 if (strlen <= 0) return TCL_ERROR;
00864 sscanf(tempstr,"%x",&inimgaddr2);
00865 inimg2 = (IMAGE *) inimgaddr2;
00866 } else {
00867 return TCL_ERROR;
00868 }
00869
00870
00871
00872 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("offset",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00873 if (Tcl_GetIntFromObj(interp,tclobj,&offset) == TCL_ERROR) return TCL_ERROR;
00874 } else {
00875 return TCL_ERROR;
00876 }
00877
00878
00879
00880 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("fill",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00881 if (Tcl_GetDoubleFromObj(interp,tclobj,&tempdouble) == TCL_ERROR) return TCL_ERROR;
00882 fill = (PIXEL)tempdouble;
00883 } else {
00884 return TCL_ERROR;
00885 }
00886
00887
00888
00889 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("outname",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00890 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00891 if (strlen <= 0) return TCL_ERROR;
00892 } else {
00893 return TCL_ERROR;
00894 }
00895
00896
00897 HMOSAIC(inimg1,inimg2,offset,fill,&outimg);
00898
00899
00900 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
00901 outimgaddr = (int) outimg;
00902
00903
00904 sprintf(msg, "%x", outimgaddr);
00905 Tcl_SetResult(interp, msg, TCL_VOLATILE);
00906
00907 return TCL_OK;
00908 }
00909
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923
00924
00925
00926
00927
00928
00929
00930
00931 int Sadie_Geometry_VMosaicCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
00932 {
00933 Tcl_Obj* tclobj=NULL;
00934 char msg[SLEN];
00935 char* array=NULL;
00936 char* tempstr=NULL;
00937 int strlen;
00938 int inimgaddr1, inimgaddr2;
00939 IMAGE *inimg1=NULL, *inimg2=NULL;
00940 int outimgaddr;
00941 IMAGE* outimg=NULL;
00942 char* outname=NULL;
00943 int offset;
00944 PIXEL fill;
00945 double tempdouble;
00946
00947 if( argc != 2 ) {
00948 Tcl_AppendResult(interp,"wrong # args: should be \"",
00949 argv[0], " arrayname\"", (char *) NULL);
00950 return TCL_ERROR;
00951 }
00952 array=argv[1];
00953
00954
00955
00956 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr1",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00957 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00958 if (strlen <= 0) return TCL_ERROR;
00959 sscanf(tempstr,"%x",&inimgaddr1);
00960 inimg1 = (IMAGE *) inimgaddr1;
00961 } else {
00962 return TCL_ERROR;
00963 }
00964
00965
00966
00967 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr2",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00968 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
00969 if (strlen <= 0) return TCL_ERROR;
00970 sscanf(tempstr,"%x",&inimgaddr2);
00971 inimg2 = (IMAGE *) inimgaddr2;
00972 } else {
00973 return TCL_ERROR;
00974 }
00975
00976
00977
00978 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("offset",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00979 if (Tcl_GetIntFromObj(interp,tclobj,&offset) == TCL_ERROR) return TCL_ERROR;
00980 } else {
00981 return TCL_ERROR;
00982 }
00983
00984
00985
00986 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("fill",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00987 if (Tcl_GetDoubleFromObj(interp,tclobj,&tempdouble) == TCL_ERROR) return TCL_ERROR;
00988 fill = (PIXEL)tempdouble;
00989 } else {
00990 return TCL_ERROR;
00991 }
00992
00993
00994
00995 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("outname",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
00996 outname = Tcl_GetStringFromObj(tclobj,&strlen);
00997 if (strlen <= 0) return TCL_ERROR;
00998 } else {
00999 return TCL_ERROR;
01000 }
01001
01002
01003 VMOSAIC(inimg1,inimg2,offset,fill,&outimg);
01004
01005
01006 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
01007 outimgaddr = (int) outimg;
01008
01009
01010 sprintf(msg, "%x", outimgaddr);
01011 Tcl_SetResult(interp, msg, TCL_VOLATILE);
01012
01013 return TCL_OK;
01014 }
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025
01026
01027
01028
01029
01030
01031
01032
01033
01034
01035
01036 int Sadie_Geometry_GenMosaicCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
01037 {
01038 Tcl_Obj* tclobj=NULL;
01039 char msg[SLEN];
01040 char* array=NULL;
01041 char* tempstr=NULL;
01042 int strlen;
01043 int inimgaddr[2];
01044 IMAGE* inimg[2];
01045 int outimgaddr;
01046 IMAGE* outimg=NULL;
01047 char* outname=NULL;
01048 short offsetlines[2], offsetpix[2];
01049 int lines, pix, tempint;
01050 PIXEL fill;
01051 double tempdouble;
01052
01053 if( argc != 2 ) {
01054 Tcl_AppendResult(interp,"wrong # args: should be \"",
01055 argv[0], " arrayname\"", (char *) NULL);
01056 return TCL_ERROR;
01057 }
01058 array=argv[1];
01059
01060
01061
01062 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr1",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01063 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01064 if (strlen <= 0) return TCL_ERROR;
01065 sscanf(tempstr,"%x",&inimgaddr[0]);
01066 inimg[0] = (IMAGE *) inimgaddr[0];
01067 } else {
01068 return TCL_ERROR;
01069 }
01070
01071
01072
01073 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr2",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01074 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01075 if (strlen <= 0) return TCL_ERROR;
01076 sscanf(tempstr,"%x",&inimgaddr[1]);
01077 inimg[1] = (IMAGE *) inimgaddr[1];
01078 } else {
01079 return TCL_ERROR;
01080 }
01081
01082
01083
01084 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("lines",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01085 if (Tcl_GetIntFromObj(interp,tclobj,&lines) == TCL_ERROR) return TCL_ERROR;
01086 } else {
01087 return TCL_ERROR;
01088 }
01089
01090
01091
01092 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("pix",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01093 if (Tcl_GetIntFromObj(interp,tclobj,&pix) == TCL_ERROR) return TCL_ERROR;
01094 } else {
01095 return TCL_ERROR;
01096 }
01097
01098
01099
01100 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("offset1,lines",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01101 if (Tcl_GetIntFromObj(interp,tclobj,&tempint) == TCL_ERROR) return TCL_ERROR;
01102 offsetlines[0] = (short) tempint;
01103 } else {
01104 return TCL_ERROR;
01105 }
01106
01107
01108
01109 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("offset2,lines",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01110 if (Tcl_GetIntFromObj(interp,tclobj,&tempint) == TCL_ERROR) return TCL_ERROR;
01111 offsetlines[1] = (short)tempint;
01112 } else {
01113 return TCL_ERROR;
01114 }
01115
01116
01117
01118 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("offset1,pix",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01119 if (Tcl_GetIntFromObj(interp,tclobj,&tempint) == TCL_ERROR) return TCL_ERROR;
01120 offsetpix[0] = (short) tempint;
01121 } else {
01122 return TCL_ERROR;
01123 }
01124
01125
01126
01127 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("offset2,pix",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01128 if (Tcl_GetIntFromObj(interp,tclobj,&tempint) == TCL_ERROR) return TCL_ERROR;
01129 offsetpix[1] = (short) tempint;
01130 } else {
01131 return TCL_ERROR;
01132 }
01133
01134
01135
01136 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("fill",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01137 if (Tcl_GetDoubleFromObj(interp,tclobj,&tempdouble) == TCL_ERROR) return TCL_ERROR;
01138 fill = (PIXEL)tempdouble;
01139 } else {
01140 return TCL_ERROR;
01141 }
01142
01143
01144
01145 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("outname",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01146 outname = Tcl_GetStringFromObj(tclobj,&strlen);
01147 if (strlen <= 0) return TCL_ERROR;
01148 } else {
01149 return TCL_ERROR;
01150 }
01151
01152
01153 MOSAIC(inimg,2,lines,pix,offsetlines,offsetpix,fill,&outimg);
01154
01155
01156 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
01157 outimgaddr = (int) outimg;
01158
01159
01160 sprintf(msg, "%x", outimgaddr);
01161 Tcl_SetResult(interp, msg, TCL_VOLATILE);
01162
01163 return TCL_OK;
01164 }
01165
01166
01167
01168
01169
01170
01171
01172
01173
01174
01175
01176
01177
01178
01179
01180
01181
01182
01183
01184
01185
01186
01187 int Sadie_Geometry_InsertCmd(ClientData client_data, Tcl_Interp* interp, int argc, char *argv[])
01188 {
01189 Tcl_Obj* tclobj=NULL;
01190 char msg[SLEN];
01191 char* array=NULL;
01192 char* tempstr=NULL;
01193 int strlen;
01194 int inimgaddr1, inimgaddr2;
01195 IMAGE *inimg1=NULL, *inimg2=NULL;
01196 int outimgaddr;
01197 IMAGE* outimg=NULL;
01198 char* outname=NULL;
01199 int offsetlines, offsetpix;
01200
01201 if( argc != 2 ) {
01202 Tcl_AppendResult(interp,"wrong # args: should be \"",
01203 argv[0], " arrayname\"", (char *) NULL);
01204 return TCL_ERROR;
01205 }
01206 array=argv[1];
01207
01208
01209
01210 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr1",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01211 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01212 if (strlen <= 0) return TCL_ERROR;
01213 sscanf(tempstr,"%x",&inimgaddr1);
01214 inimg1 = (IMAGE *) inimgaddr1;
01215 } else {
01216 return TCL_ERROR;
01217 }
01218
01219
01220
01221 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("inimg,addr2",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01222 tempstr = Tcl_GetStringFromObj(tclobj,&strlen);
01223 if (strlen <= 0) return TCL_ERROR;
01224 sscanf(tempstr,"%x",&inimgaddr2);
01225 inimg2 = (IMAGE *) inimgaddr2;
01226 } else {
01227 return TCL_ERROR;
01228 }
01229
01230
01231
01232 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("offset,lines",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01233 if (Tcl_GetIntFromObj(interp,tclobj,&offsetlines) == TCL_ERROR) return TCL_ERROR;
01234 } else {
01235 return TCL_ERROR;
01236 }
01237
01238
01239
01240 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("offset,pix",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01241 if (Tcl_GetIntFromObj(interp,tclobj,&offsetpix) == TCL_ERROR) return TCL_ERROR;
01242 } else {
01243 return TCL_ERROR;
01244 }
01245
01246
01247
01248 if (tclobj = Tcl_ObjGetVar2(interp, Tcl_NewStringObj(array,-1), Tcl_NewStringObj("outname",-1), TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG)) {
01249 outname = Tcl_GetStringFromObj(tclobj,&strlen);
01250 if (strlen <= 0) return TCL_ERROR;
01251 } else {
01252 return TCL_ERROR;
01253 }
01254
01255
01256 INSERT(inimg1,inimg2,offsetlines,offsetpix,&outimg);
01257
01258
01259 if (CHECKIMG(outimg)) sprintf(outimg->text, "%s", outname);
01260 outimgaddr = (int) outimg;
01261
01262
01263 sprintf(msg, "%x", outimgaddr);
01264 Tcl_SetResult(interp, msg, TCL_VOLATILE);
01265
01266 return TCL_OK;
01267 }
01268
01269
01270
01271
01272
01273
01274
01275
01276
01277
01278
01279
01280
01281
01282
01283
01284
01285 int Sadie_Geometry_Init(Tcl_Interp *interp)
01286 {
01287 Tcl_CreateCommand(interp, "Sadie_Geometry_AvgSub", Sadie_Geometry_AvgSubCmd,(ClientData) NULL, NULL);
01288 Tcl_CreateCommand(interp, "Sadie_Geometry_WinSub", Sadie_Geometry_WinSubCmd,(ClientData) NULL, NULL);
01289 Tcl_CreateCommand(interp, "Sadie_Geometry_Scale", Sadie_Geometry_ScaleCmd,(ClientData) NULL, NULL);
01290 Tcl_CreateCommand(interp, "Sadie_Geometry_Rotate", Sadie_Geometry_RotateCmd,(ClientData) NULL, NULL);
01291 Tcl_CreateCommand(interp, "Sadie_Geometry_Mirror", Sadie_Geometry_MirrorCmd,(ClientData) NULL, NULL);
01292 Tcl_CreateCommand(interp, "Sadie_Geometry_ContPts", Sadie_Geometry_ContPtsCmd,(ClientData) NULL, NULL);
01293 Tcl_CreateCommand(interp, "Sadie_Geometry_GeomWarp", Sadie_Geometry_GeomWarpCmd,(ClientData) NULL, NULL);
01294 Tcl_CreateCommand(interp, "Sadie_Geometry_HMosaic", Sadie_Geometry_HMosaicCmd,(ClientData) NULL, NULL);
01295 Tcl_CreateCommand(interp, "Sadie_Geometry_VMosaic", Sadie_Geometry_VMosaicCmd,(ClientData) NULL, NULL);
01296 Tcl_CreateCommand(interp, "Sadie_Geometry_GenMosaic", Sadie_Geometry_GenMosaicCmd,(ClientData) NULL, NULL);
01297 Tcl_CreateCommand(interp, "Sadie_Geometry_Insert", Sadie_Geometry_InsertCmd,(ClientData) NULL, NULL);
01298
01299 return TCL_OK;
01300 }