aboutsummaryrefslogtreecommitdiff
path: root/noao/digiphot/ptools/pexamine/ptdelete.x
diff options
context:
space:
mode:
Diffstat (limited to 'noao/digiphot/ptools/pexamine/ptdelete.x')
-rw-r--r--noao/digiphot/ptools/pexamine/ptdelete.x335
1 files changed, 335 insertions, 0 deletions
diff --git a/noao/digiphot/ptools/pexamine/ptdelete.x b/noao/digiphot/ptools/pexamine/ptdelete.x
new file mode 100644
index 00000000..f8a6581e
--- /dev/null
+++ b/noao/digiphot/ptools/pexamine/ptdelete.x
@@ -0,0 +1,335 @@
+include <gset.h>
+include <mach.h>
+include "pexamine.h"
+
+define MSIZE 2.0
+
+# PT_DELPT -- Mark/unmark the point nearest the cursor.
+
+procedure pt_delpt (gd, wx, wy, xpos, ypos, x, y, deleted, npix, undelete,
+ matchrad)
+
+pointer gd # pointer to the graphics stream
+real wx # X cursor position
+real wy # Y cursor position
+real xpos[ARB] # X coordinate array
+real ypos[ARB] # Y coordinate array
+real x[ARB] # X array of plotted data
+real y[ARB] # Y array of plotted data
+int deleted[ARB] # array of delete indicators
+int npix # number of pixels
+int undelete # undelete flag
+real matchrad # matching radius
+
+int i, row
+real r2min, r2, mr2, wx0, wy0, xpos0, ypos0
+
+begin
+ # Initialize.
+ row = 0
+ r2min = MAX_REAL
+
+ # Set matching radius for the image display or graph.
+ if (IS_INDEFR(matchrad)) {
+ mr2 = MAX_REAL
+ if (gd != NULL)
+ call gctran (gd, wx, wy, wx0, wy0, 1, 0)
+ else {
+ wx0 = wx
+ wy0 = wy
+ }
+ } else {
+ mr2 = matchrad ** 2
+ wx0 = wx
+ wy0 = wy
+ }
+
+ # Search for the point nearest the cursor.
+ do i = 1 , npix {
+
+ if (deleted[i] == PX_DELETE)
+ next
+
+ if ((deleted[i] == PX_MARK && undelete == NO) ||
+ (deleted[i] == PX_GOOD && undelete == YES))
+ next
+
+ if (! IS_INDEFR(xpos[i]) && ! IS_INDEFR(ypos[i])) {
+ if (IS_INDEFR(matchrad)) {
+ if (gd != NULL)
+ call gctran (gd, xpos[i], ypos[i], xpos0, ypos0, 1, 0)
+ else {
+ xpos0 = xpos[i]
+ ypos0 = ypos[i]
+ }
+ } else {
+ xpos0 = xpos[i]
+ ypos0 = ypos[i]
+ }
+ r2 = (wx0 - xpos0) ** 2 + (wy0 - ypos0) ** 2
+ } else
+ r2 = MAX_REAL
+ if (r2 >= r2min)
+ next
+
+ r2min = r2
+ row = i
+ }
+
+ # Return if point not found.
+ if ((row == 0) || (r2min > mr2))
+ return
+
+ # Delete the point.
+ if (undelete == NO) {
+ deleted[row] = PX_MARK
+ if (gd == NULL)
+ return
+ call gseti (gd, G_PMLTYPE, GL_SOLID)
+ call gmark (gd, x[row], y[row], GM_CROSS, MSIZE, MSIZE)
+ } else {
+ deleted[row] = PX_GOOD
+ if (gd == NULL)
+ return
+ call gseti (gd, G_PMLTYPE, GL_CLEAR)
+ call gmark (gd, x[row], y[row], GM_CROSS, MSIZE, MSIZE)
+ }
+end
+
+
+# PT_DYGTG -- Delete all points with Y > Y (cursor).
+
+procedure pt_dygtg (gd, wy, ypos, x, y, deleted, npix, undelete)
+
+pointer gd # pointer to graphics stream
+real wy # Y cursor position
+real ypos[ARB] # Y array of coordinate data
+real x[ARB] # X array of plotted data
+real y[ARB] # Y array of plotted data
+int deleted[ARB] # array of delete indicators
+int npix # number of pixels
+int undelete # the delete or undelete flag
+
+int i
+
+begin
+ do i = 1 , npix {
+ if (ypos[i] <= wy)
+ next
+ if ((deleted[i] == PX_GOOD) && (undelete == NO)) {
+ deleted[i] = PX_MARK
+ if (gd == NULL)
+ next
+ call gseti (gd, G_PMLTYPE, GL_SOLID)
+ call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE)
+ } else if ((deleted[i] == PX_MARK) && (undelete == YES)) {
+ deleted[i] = PX_GOOD
+ if (gd == NULL)
+ next
+ call gseti (gd, G_PMLTYPE, GL_CLEAR)
+ call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE)
+ }
+ }
+end
+
+
+# PT_DYLTG -- Delete all points with Y < Y (cursor).
+
+procedure pt_dyltg (gd, wy, ypos, x, y, deleted, npix, undelete)
+
+pointer gd # pointer to graphics stream
+real wy # Y cursor position
+real ypos[ARB] # Y array of coordinate data
+real x[ARB] # X array of plotted data
+real y[ARB] # Y array of plotted data
+int deleted[ARB] # array of delete indicators
+int npix # number of pixels
+int undelete # the delete or undelete flag
+
+int i
+
+begin
+ do i = 1 , npix {
+ if (ypos[i] >= wy)
+ next
+ if ((deleted[i] == PX_GOOD) && (undelete == NO)) {
+ deleted[i] = PX_MARK
+ if (gd == NULL)
+ next
+ call gseti (gd, G_PMLTYPE, GL_SOLID)
+ call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE)
+ } else if ((deleted[i] == PX_MARK) && (undelete == YES)) {
+ deleted[i] = PX_GOOD
+ if (gd == NULL)
+ next
+ call gseti (gd, G_PMLTYPE, GL_CLEAR)
+ call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE)
+ }
+ }
+end
+
+
+# PT_DXGTG -- Mark delete for all points with X > X (cursor)
+
+procedure pt_dxgtg (gd, wx, xpos, x, y, deleted, npix, undelete)
+
+pointer gd # pointer to graphics stream
+real wx # X cursor position
+real xpos[ARB] # X coordinate array
+real x[ARB] # X array of plotted data
+real y[ARB] # Y array of plotted data
+int deleted[ARB] # array of delete indicators
+int npix # number of pixels
+int undelete # the delete or undelete flag
+
+int i
+
+begin
+ do i = 1 , npix {
+ if (xpos[i] <= wx)
+ next
+ if ((deleted[i] == PX_GOOD) && (undelete == NO)) {
+ deleted[i] = PX_MARK
+ if (gd == NULL)
+ next
+ call gseti (gd, G_PMLTYPE, GL_SOLID)
+ call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE)
+ } else if ((deleted[i] == PX_MARK) && (undelete == YES)) {
+ deleted[i] = PX_GOOD
+ if (gd == NULL)
+ next
+ call gseti (gd, G_PMLTYPE, GL_CLEAR)
+ call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE)
+ }
+ }
+end
+
+
+# PT_DXLTG -- Mark delete for all points with X < X (cursor).
+
+procedure pt_dxltg (gd, wx, xpos, x, y, deleted, npix, undelete)
+
+pointer gd # pointer to graphics stream
+real wx # X cursor position
+real xpos[ARB] # X coordinate array
+real x[ARB] # X array of plotted data
+real y[ARB] # Y array of plotted data
+int deleted[ARB] # array of delete indicators
+int npix # number of pixels
+int undelete # the delete or undelete flag
+
+int i
+
+begin
+ do i = 1 , npix {
+ if (xpos[i] >= wx)
+ next
+ if ((deleted[i] == PX_GOOD) && (undelete == NO)) {
+ deleted[i] = PX_MARK
+ if (gd == NULL)
+ next
+ call gseti (gd, G_PMLTYPE, GL_SOLID)
+ call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE)
+ } else if ((deleted[i] == PX_MARK) && (undelete == YES)) {
+ deleted[i] = PX_GOOD
+ if (gd == NULL)
+ next
+ call gseti (gd, G_PMLTYPE, GL_CLEAR)
+ call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE)
+ }
+ }
+end
+
+
+# PT_DBOXG -- Delete all points inside a box
+
+procedure pt_dboxg (gd, xpos, ypos, x, y, deleted, npix, x1, y1, x2, y2,
+ undelete)
+
+pointer gd # pointer to the graphics stream
+real xpos[ARB] # x coordinate array
+real ypos[ARB] # y coordinate array
+real x[ARB] # x array of plotted data
+real y[ARB] # y array of plotted data
+int deleted[ARB] # array of deletion indicators
+int npix # number of pixels
+real x1, y1, x2, y2 # corners of the box
+int undelete # delete or undelete points
+
+int i
+real temp
+
+begin
+ # Make sure the points are in the correct order.
+ if (x2 < x1) {
+ temp = x1
+ x1 = x2
+ x2 = temp
+ }
+ if (y2 < y1) {
+ temp = y1
+ y1 = y2
+ y2 = temp
+ }
+
+ # Search for points within the box and delete.
+ do i = 1 , npix {
+ if (xpos[i] < x1 || xpos[i] > x2 || ypos[i] < y1 || ypos[i] > y2)
+ next
+ if ((deleted[i] == PX_GOOD) && (undelete == NO)) {
+ deleted[i] = PX_MARK
+ if (gd == NULL)
+ next
+ call gseti (gd, G_PMLTYPE, GL_SOLID)
+ call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE)
+ } else if ((deleted[i] == PX_MARK) && (undelete == YES)) {
+ deleted[i] = PX_GOOD
+ if (gd == NULL)
+ next
+ call gseti (gd, G_PMLTYPE, GL_CLEAR)
+ call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE)
+ }
+ }
+end
+
+
+# PT_MDELETE -- Overplot crosses on those points which have been marked for
+# deletion.
+
+procedure pt_mdelete (gd, x, y, deleted, npix)
+
+pointer gd # pointer to the graphics stream
+real x[ARB] # the array plotted along the x axis
+real y[ARB] # the array plotted along the y axis
+int deleted[ARB] # the array of deletion indices
+int npix # the number of pixels
+
+int i
+
+begin
+ do i = 1, npix {
+ if (deleted[i] != PX_MARK)
+ next
+ call gseti (gd, G_PMLTYPE, GL_SOLID)
+ call gmark (gd, x[i], y[i], GM_CROSS, MSIZE, MSIZE)
+ }
+end
+
+
+# PT_UPDATE -- Actually delete points currently marked for deletion.
+
+procedure pt_update (deleted, npix)
+
+int deleted[ARB] # array of deletions indices
+int npix # the number of pixels
+
+int i
+
+begin
+ # Add the marked points to the deletions array.
+ do i = 1, npix {
+ if (deleted[i] != PX_MARK)
+ next
+ deleted[i] = PX_DELETE
+ }
+end