aboutsummaryrefslogtreecommitdiff
path: root/sys/gio/nsppkern/gktpl.x
blob: 7e7243cfa23ccd3d38615e9421471be554970de5 (plain) (blame)
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"

# GKT_POLYLINE -- Draw a polyline.  The polyline is defined by the array of
# points P, consisting of successive (x,y) coordinate pairs.  The first point
# is not plotted but rather defines the start of the polyline.  The remaining
# points define line segments to be drawn.

procedure gkt_polyline (p, npts)

short	p[ARB]			# points defining line
int	npts			# number of points, i.e., (x,y) pairs

pointer	pl
int	i, len_p
int	x,y
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 polyline attributes if necessary.
	pl = GKT_PLAP(g_kt)

	if (GKT_TYPE(g_kt) != PL_LTYPE(pl)) {
	    call gkt_linetype (PL_LTYPE(pl))
	    GKT_TYPE(g_kt) = PL_LTYPE(pl)
	}
	if (GKT_WIDTH(g_kt) != PL_WIDTH(pl)) {
	    if (GKI_UNPACKREAL(PL_WIDTH(pl)) < 1.5)
		call optn (*"inten", *"low")
	    else
		call optn (*"inten", *"high")
	    GKT_WIDTH(g_kt) = PL_WIDTH(pl)
	}
	if (GKT_COLOR(g_kt) != PL_COLOR(pl)) {
	    call gkt_color (PL_COLOR(pl))
	    GKT_COLOR(g_kt) = PL_COLOR(pl)
	}

	# Transform the first point from GKI coords to nspp coords and
	# move to the transformed point.

	x = p[1]
	y = p[2]
	call frstpt(real(x)/GKI_MAXNDC, real(y)/GKI_MAXNDC)

	# Draw the polyline.

	for (i=3;  i <= len_p;  i=i+2) {
	    x = p[i]
	    y = p[i+1]
	    call vector (real(x)/GKI_MAXNDC, real(y)/GKI_MAXNDC)
	}
end