diff options
author | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
---|---|---|
committer | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
commit | 40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch) | |
tree | 4464880c571602d54f6ae114729bf62a89518057 /pkg/utilities/nttools/gtedit/gtdelete.x | |
download | iraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz |
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'pkg/utilities/nttools/gtedit/gtdelete.x')
-rw-r--r-- | pkg/utilities/nttools/gtedit/gtdelete.x | 360 |
1 files changed, 360 insertions, 0 deletions
diff --git a/pkg/utilities/nttools/gtedit/gtdelete.x b/pkg/utilities/nttools/gtedit/gtdelete.x new file mode 100644 index 00000000..c09f6a96 --- /dev/null +++ b/pkg/utilities/nttools/gtedit/gtdelete.x @@ -0,0 +1,360 @@ +include <mach.h> +include <gset.h> +include <gio.h> + +define MSIZE 2.0 + +# GT_DELPT -- Mark a point as deleted + +procedure gt_delpt (gd, wx, wy, x, y, npix, deleted, undelete) + +pointer gd # Graphics descriptor +real wx # Cursor position +real wy # "" +real x[ARB] # Plotted data +real y[ARB] # Plotted data +int npix # # of pixels +int deleted[ARB] # Array of delete indicators +int undelete # Undelete flag + +int row, i +real r2min, r2, x0, y0 + +begin + # Search for the nearest point which has not been deleted + + row = 0 + r2min = MAX_REAL + + # Transform world cursor coordintes to NDC + call gctran (gd, wx, wy, wx, wy, 1, 0) + do i = 1 , npix { + if ((deleted[i] == YES && undelete == NO) || + (deleted[i] == NO && undelete == YES)) + next + + call gctran (gd, x[i], y[i], x0, y0, 1, 0) + if (x[i] < INDEFR && y[i] < INDEFR) + r2 = (wx - x0) ** 2 + (wy - y0) ** 2 + else + r2 = MAX_REAL + + if (r2 < r2min) { + r2min = r2 + row = i + } + } + + if (row != 0) { + # Mark row as being deleted + if (undelete == NO) { + # Plot X over point + call gscur (gd, x[row], y[row]) + call gseti (gd, G_PMLTYPE, GL_SOLID) + call gmark (gd, x[row], y[row], GM_CROSS, MSIZE, MSIZE) + deleted[row] = YES + } else { + deleted[row] = NO + call gscur (gd, x[row], y[row]) + call gseti (gd, G_PMLTYPE, GL_CLEAR) + call gmark (gd, x[row], y[row], GM_CROSS, MSIZE, MSIZE) + } + + } + +end + +# GT_DYGT -- Delete all point > input Y + +procedure gt_dygt (gd, wy, x, y, npix, deleted, undelete) + +pointer gd # Graphics descriptor +real wy # Cursor position +real x[ARB] # Plotted data +real y[ARB] # Plotted data +int npix # # of pixels +int deleted[ARB] # Array of delete indicators +int undelete + +int i + +begin + # Search for points with Y values > than the critical value + + do i = 1 , npix { + if ((deleted[i] == YES && undelete == NO) || + (deleted[i] == NO && undelete == YES)) + next + + if (y[i] > wy) { + if (undelete == NO) { + # Plot X over point + call gseti (gd, G_PMLTYPE, GL_SOLID) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + deleted[i] = YES + } else { + deleted[i] = NO + call gseti (gd, G_PMLTYPE, GL_CLEAR) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } + } + } +end + +# GT_DYLT -- Delete all point < input Y + +procedure gt_dylt (gd, wy, x, y, npix, deleted, undelete) + +pointer gd # Graphics descriptor +real wy # Cursor position +real x[ARB] # Plotted data +real y[ARB] # Plotted data +int npix # # of pixels +int deleted[ARB] # Array of delete indicators +int undelete + +int i + +begin + # Search for points with Y values > than the critical value + + do i = 1 , npix { + if ((deleted[i] == YES && undelete == NO) || + (deleted[i] == NO && undelete == YES)) + next + + if (y[i] < wy) { + if (undelete == NO) { + deleted[i] = YES + # Plot X over point + call gseti (gd, G_PMLTYPE, GL_SOLID) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } else { + deleted[i] = NO + call gseti (gd, G_PMLTYPE, GL_CLEAR) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } + } + } +end + +# GT_DXGT -- Delete all point > input X + +procedure gt_dxgt (gd, wx, x, y, npix, deleted, undelete) + +pointer gd # Graphics descriptor +real wx # Cursor position +real x[ARB] # Plotted data +real y[ARB] # Plotted data +int npix # # of pixels +int deleted[ARB] # Array of delete indicators +int undelete + +int i + +begin + # Search for points with X values > than the critical value + + do i = 1 , npix { + if ((deleted[i] == YES && undelete == NO) || + (deleted[i] == NO && undelete == YES)) + next + + if (x[i] > wx) { + if (undelete == NO) { + deleted[i] = YES + # Plot X over point + call gseti (gd, G_PMLTYPE, GL_SOLID) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } else { + deleted[i] = NO + call gseti (gd, G_PMLTYPE, GL_CLEAR) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } + } + } +end + +# GT_DXLT -- Delete all point > input Y + +procedure gt_dxlt (gd, wx, x, y, npix, deleted, undelete) + +pointer gd # Graphics descriptor +real wx # Cursor position +real x[ARB] # Plotted data +real y[ARB] # Plotted data +int npix # # of pixels +int deleted[ARB] # Array of delete indicators +int undelete + +int i + +begin + # Search for points with X values < than the critical value + + do i = 1 , npix { + if ((deleted[i] == YES && undelete == NO) || + (deleted[i] == NO && undelete == YES)) + next + + if (x[i] < wx) { + if (undelete == NO) { + deleted[i] = YES + # Plot X over point + call gseti (gd, G_PMLTYPE, GL_SOLID) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } else { + deleted[i] = NO + call gseti (gd, G_PMLTYPE, GL_CLEAR) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } + } + } +end + +# GT_DBOX -- Delete all point in a box + +procedure gt_dbox (gd, npix, deleted, undelete, x, y, x1, y1, x2, y2) + +pointer gd # Graphics descriptor +int npix # # of pixels +int deleted[ARB] # Array of delete indicators +int undelete +real x[ARB] # Plotted data +real y[ARB] # Plotted data +real x1, y1, x2, y2 # Corners of the box + +int i +real temp + +begin + # Make sure the points are in the correct order + if (y2 < y1) { + temp = y1 + y1 = y2 + y2 = temp + } + if (x2 < x1) { + temp = x1 + x1 = x2 + x2 = temp + } + # Search for points within the box + do i = 1 , npix { + if ((deleted[i] == YES && undelete == NO) || + (deleted[i] == NO && undelete == YES)) + next + + if (x[i] <= x2 && x[i] >= x1) { + if (y[i] <= y2 && y[i] >= y1) { + if (undelete == NO) { + deleted[i] = YES + # Plot X over point + call gseti (gd, G_PMLTYPE, GL_SOLID) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } else { + deleted[i] = NO + call gseti (gd, G_PMLTYPE, GL_CLEAR) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } + } + } + } +end + +# GT_DSEG -- Delete all point on one side of a line segment + +procedure gt_dseg (gd, npix, deleted, undelete, x, y, x1, y1, x2, y2, x0, y0) + +pointer gd # Graphics descriptor +int npix # # of pixels +int deleted[ARB] # Array of delete indicators +int undelete +real x[ARB] # Plotted data +real y[ARB] # Plotted data +real x1, y1, x2, y2 # Corners of the box +real x0, y0, slope, inter, temp + +int i, lessthan + +begin + # Make sure the points are in the correct order + if (y2 < y1) { + temp = y1 + y1 = y2 + y2 = temp + } + if (x2 < x1) { + temp = x1 + x1 = x2 + x2 = temp + } + + # Calculate slope and intercept + slope = (y2 - y1) / (x2 - x1) + inter = (x2 * y1 - x1 * y2) / (x2 - x1) + + # Which side should we delete the lines from? + temp = x0 * slope + inter + if (temp <= y0) + lessthan = NO + else + lessthan = YES + + # Search for points with X values between x1 and x2 + do i = 1 , npix { + if ((deleted[i] == YES && undelete == NO) || + (deleted[i] == NO && undelete == YES)) + next + + if (x[i] <= x2 && x[i] >= x1) { + # Now which side of the line does this point fall on + temp = x[i] * slope + inter + if (y[i] < temp && lessthan == YES) { + if (undelete == NO) { + deleted[i] = YES + # Plot X over point + call gseti (gd, G_PMLTYPE, GL_SOLID) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } else { + deleted[i] = NO + call gseti (gd, G_PMLTYPE, GL_CLEAR) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } + } else if (y[i] > temp && lessthan == NO) { + if (undelete == NO) { + deleted[i] = YES + # Plot X over point + call gseti (gd, G_PMLTYPE, GL_SOLID) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } else { + deleted[i] = NO + call gseti (gd, G_PMLTYPE, GL_CLEAR) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } + } + } + } +end + +# GT_PDEL -- Overplot crosses on those points which have been marked for zap. + +procedure gt_pdel (gd, x, y, deleted, npix) + +pointer gd +real x[ARB] +real y[ARB] +int deleted[ARB] +int npix + +int i + +begin + do i = 1, npix { + if (deleted[i] == YES) { + # Plot X over point + call gseti (gd, G_PMLTYPE, GL_SOLID) + call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE) + } + } +end |