aboutsummaryrefslogtreecommitdiff
path: root/noao/onedspec/splot/splabel.x
diff options
context:
space:
mode:
Diffstat (limited to 'noao/onedspec/splot/splabel.x')
-rw-r--r--noao/onedspec/splot/splabel.x112
1 files changed, 112 insertions, 0 deletions
diff --git a/noao/onedspec/splot/splabel.x b/noao/onedspec/splot/splabel.x
new file mode 100644
index 00000000..fcba2584
--- /dev/null
+++ b/noao/onedspec/splot/splabel.x
@@ -0,0 +1,112 @@
+include <gset.h>
+include <smw.h>
+
+define OPTIONS "|label|mabove|mbelow|"
+define LABEL 1 # Label at cursor position
+define MABOVE 2 # Tick mark plus label above spectrum
+define MBELOW 3 # Tick mark plus label below spectrum
+
+
+# SPLABEL -- Add a label.
+
+procedure splabel (option, sh, gp, x, y, label, format)
+
+char option[ARB] #I Label option
+pointer sh #I Spectrum object
+pointer gp #I Graphics object
+real x, y #I Label position
+char label[ARB] #I Label
+char format[ARB] #I Format
+
+int op, pix, color, markcolor, strdic(), gstati()
+real mx, my, x1, x2, y1, y2
+pointer sp, fmt, lab
+double shdr_wl()
+
+define TICK .03 # Tick size in NDC
+define GAP .02 # Gap size in NDC
+
+begin
+ call smark (sp)
+ call salloc (fmt, SZ_LINE, TY_CHAR)
+ call salloc (lab, SZ_LINE, TY_CHAR)
+
+ op = strdic (option, Memc[lab], SZ_LINE, OPTIONS)
+ if (op == 0) {
+ call sfree (sp)
+ return
+ }
+ call ggwind (gp, x1, x2, y1, y2)
+ if ((x < min (x1, x2)) || (x > max (x1, x2))) {
+ call sfree (sp)
+ return
+ }
+
+ # Set label position and draw tick mark.
+ switch (op) {
+ case LABEL:
+ call gctran (gp, x, y, mx, my, 1, 0)
+ call gctran (gp, mx, my, x1, y2, 0, 1)
+ markcolor = gstati (gp, G_TICKLABELCOLOR)
+ if (format[1] == EOS)
+ call strcpy ("h=c;v=c;s=1.0", Memc[fmt], SZ_LINE)
+ else
+ call strcpy (format, Memc[fmt], SZ_LINE)
+
+ case MABOVE:
+ pix = max (2, min (SN(sh)-3, int (shdr_wl (sh, double (x)))))
+ y1 = max (Memr[SY(sh)+pix-2], Memr[SY(sh)+pix-1],
+ Memr[SY(sh)+pix], Memr[SY(sh)+pix+1])
+ call gctran (gp, x, y1, mx, my, 1, 0)
+ call gctran (gp, mx, my + GAP, x1, y1, 0, 1)
+ call gctran (gp, mx, my + GAP + TICK, x1, y2, 0, 1)
+
+ color = gstati (gp, G_PLCOLOR)
+ markcolor = gstati (gp, G_TICKLABELCOLOR)
+ call gseti (gp, G_PLCOLOR, markcolor)
+ call gline (gp, x1, y1, x1, y2)
+ call gseti (gp, G_PLCOLOR, color)
+
+ call gctran (gp, mx, my + TICK + 2 * GAP, x1, y2, 0, 1)
+ if (format[1] == EOS)
+ call strcpy ("u=180;h=c;v=b;s=0.5", Memc[fmt], SZ_LINE)
+ else
+ call strcpy (format, Memc[fmt], SZ_LINE)
+
+ case MBELOW:
+ pix = max (2, min (SN(sh)-3, int (shdr_wl (sh, double (x)))))
+ y1 = min (Memr[SY(sh)+pix-2], Memr[SY(sh)+pix-1],
+ Memr[SY(sh)+pix], Memr[SY(sh)+pix+1])
+ call gctran (gp, x, y1, mx, my, 1, 0)
+ call gctran (gp, mx, my - GAP, x1, y1, 0, 1)
+ call gctran (gp, mx, my - GAP - TICK, x1, y2, 0, 1)
+
+ color = gstati (gp, G_PLCOLOR)
+ markcolor = gstati (gp, G_TICKLABELCOLOR)
+ call gseti (gp, G_PLCOLOR, markcolor)
+ call gline (gp, x1, y1, x1, y2)
+ call gseti (gp, G_PLCOLOR, color)
+
+ call gctran (gp, mx, my - TICK - 2 * GAP, x1, y2, 0, 1)
+ if (format[1] == EOS)
+ call strcpy ("u=0;h=c;v=t;s=0.5", Memc[fmt], SZ_LINE)
+ else
+ call strcpy (format, Memc[fmt], SZ_LINE)
+ }
+
+ # Draw the label.
+ if (label[1] != EOS) {
+ color = gstati (gp, G_TXCOLOR)
+ call gseti (gp, G_TXCOLOR, markcolor)
+ if (label[1] == '%') {
+ call sprintf (Memc[lab], SZ_LINE, label)
+ call pargr (x)
+ call gtext (gp, x1, y2, Memc[lab], Memc[fmt])
+ } else
+ call gtext (gp, x1, y2, label, Memc[fmt])
+ call gseti (gp, G_TXCOLOR, color)
+ }
+
+ call gflush (gp)
+ call sfree (sp)
+end