1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <gki.h>
include "gkt.h"
# Nspp particulars.
define BASELW 8 # base width of line
# GKT_POLYMARKER -- Draw a polymarker. The polymarker is defined by the array
# of points P, consisting of successive (x,y) coordinate pairs.
procedure gkt_polymarker (p, npts)
short p[ARB] # points defining line
int npts # number of points, i.e., (x,y) pairs
pointer pm
int i, len_p
int x, y, oldx, oldy
include "gkt.com"
begin
if (npts <= 0)
return
len_p = npts * 2
# Keep track of the number of drawing instructions since the last frame
# clear.
g_ndraw = g_ndraw + 1
# Update polymarker attributes if necessary.
pm = GKT_PMAP(g_kt)
if (GKT_TYPE(g_kt) != PM_LTYPE(pm)) {
call gkt_linetype (PM_LTYPE(pm))
GKT_TYPE(g_kt) = PM_LTYPE(pm)
}
if (GKT_WIDTH(g_kt) != PM_WIDTH(pm)) {
if (GKI_UNPACKREAL(PM_WIDTH(pm)) < 1.5)
call optn (*"inten", *"low")
else
call optn (*"inten", *"high")
GKT_WIDTH(g_kt) = PM_WIDTH(pm)
}
if (GKT_COLOR(g_kt) != PM_COLOR(pm)) {
call gkt_color (PM_COLOR(pm))
GKT_COLOR(g_kt) = PM_COLOR(pm)
}
# Get to start of marker.
call frstpt (real(x)/GKI_MAXNDC, real(y)/GKI_MAXNDC)
oldx = 0; oldy = 0
# Draw the polymarker.
for (i=1; i <= len_p; i=i+2) {
x = p[i]; y = p[i+1]
if (x != oldx && y != oldy)
call point (real(x)/GKI_MAXNDC, real(y)/GKI_MAXNDC)
oldx = x; oldy = y
}
end
|