GRASS 8 Programmer's Manual
8.6.0dev(2026)-56a9afeb9f
Loading...
Searching...
No Matches
graph_clse.c
Go to the documentation of this file.
1
/*
2
* Close down the graphics processing. This gets called only at driver
3
* termination time.
4
*/
5
6
#include <
grass/gis.h
>
7
#include "
driverlib.h
"
8
#include "
htmlmap.h
"
9
10
/* sreen dimensions defined in Graph_Set.c */
11
12
/* point in polygon test by Randolph Franklin */
13
/* http://www.ecse.rpi.edu/Homepages/wrf/ */
14
/* adapted for integer coordinates */
15
16
static
int
pnpoly(
int
npol
,
int
*
xp
,
int
*
yp
,
int
x,
int
y)
17
{
18
int
i,
j
, c = 0;
19
20
for
(i = 0,
j
=
npol
- 1; i <
npol
;
j
= i++) {
21
if
((((
yp
[i] <= y) && (y <
yp
[
j
])) || ((
yp
[
j
] <= y) && (y <
yp
[i]))) &&
22
(x < (
xp
[
j
] -
xp
[i]) * (y -
yp
[i]) / (
yp
[
j
] -
yp
[i]) +
xp
[i]))
23
c = !c;
24
}
25
return
c;
26
}
27
28
void
HTML_Graph_close
(
void
)
29
{
30
struct
MapPoly
*poly, *
test_poly
;
31
32
int
i;
33
int
inside
;
34
35
/*
36
* examine the list of polygons, if a polygon wholly exists inside of
37
* another polygon, then remove it.
38
*
39
*/
40
41
for
(poly =
html
.head; poly !=
NULL
; poly = poly->
next_poly
) {
42
43
for
(
test_poly
=
html
.head;
test_poly
!=
NULL
;
44
test_poly
=
test_poly
->next_poly) {
45
if
(poly ==
test_poly
) {
46
continue
;
/* don't check ourselves */
47
}
48
49
inside
= 1;
50
for
(i = 0; i < poly->
num_pts
&&
inside
; i++) {
51
inside
=
52
pnpoly(
test_poly
->num_pts,
test_poly
->x_pts,
53
test_poly
->y_pts, poly->
x_pts
[i], poly->
y_pts
[i]);
54
}
55
if
(
inside
) {
56
poly->
num_pts
= 0;
/* mark polygon as having no points */
57
break
;
58
}
59
}
60
}
61
62
/*
63
* write any beginning prologue appropriate for the map type
64
*/
65
66
switch
(
html
.type) {
67
68
case
APACHE
:
69
fprintf
(
html
.output,
"#base _base_\n#default _default_\n"
);
70
break
;
71
72
case
RAW
:
73
break
;
74
75
case
CLIENT
:
76
fprintf
(
html
.output,
"<MAP NAME=\"map\">\n"
);
77
break
;
78
}
79
80
/*
81
* write the polygons in a specific format
82
*/
83
84
for
(poly =
html
.head; poly !=
NULL
; poly = poly->
next_poly
) {
85
if
(poly->
num_pts
>= 3) {
86
87
switch
(
html
.type) {
88
89
case
APACHE
:
90
fprintf
(
html
.output,
"poly %s"
, poly->
url
);
91
for
(i = 0; i < poly->
num_pts
; i++) {
92
fprintf
(
html
.output,
" %d,%d"
, poly->
x_pts
[i],
93
poly->
y_pts
[i]);
94
}
95
fprintf
(
html
.output,
" %d,%d"
, poly->
x_pts
[0], poly->
y_pts
[0]);
96
fprintf
(
html
.output,
"\n"
);
97
break
;
98
99
case
RAW
:
100
fprintf
(
html
.output,
"%s"
, poly->
url
);
101
for
(i = 0; i < poly->
num_pts
; i++) {
102
fprintf
(
html
.output,
" %d %d"
, poly->
x_pts
[i],
103
poly->
y_pts
[i]);
104
}
105
fprintf
(
html
.output,
" %d %d"
, poly->
x_pts
[0], poly->
y_pts
[0]);
106
fprintf
(
html
.output,
"\n"
);
107
break
;
108
109
case
CLIENT
:
110
fprintf
(
html
.output,
111
"<AREA SHAPE=\"POLY\"\n HREF=\"%s\"\n ALT=\"%s\"\n "
112
"COORDS=\""
,
113
poly->
url
, poly->
url
);
114
for
(i = 0; i < poly->
num_pts
; i++) {
115
if
(i > 0)
116
fprintf
(
html
.output,
", "
);
117
/*
118
* don't add newlines, which confuses the weak-minded
119
* i.e., ms internet exploder :-(
120
* was: if (i % 8 == 0 && i != 0) fprintf(html.output,"\n
121
* ");
122
*/
123
fprintf
(
html
.output,
"%d,%d"
, poly->
x_pts
[i],
124
poly->
y_pts
[i]);
125
}
126
fprintf
(
html
.output,
", %d,%d"
, poly->
x_pts
[0], poly->
y_pts
[0]);
127
fprintf
(
html
.output,
"\">\n"
);
128
break
;
129
}
130
}
131
}
132
133
/* final stuff, if needed */
134
135
switch
(
html
.type) {
136
137
case
APACHE
:
138
break
;
139
140
case
RAW
:
141
break
;
142
143
case
CLIENT
:
144
fprintf
(
html
.output,
145
"<AREA SHAPE=\"RECT\" NOHREF COORDS=\"%d,%d %d,%d\">\n"
, 0, 0,
146
screen_width
,
screen_height
);
147
fprintf
(
html
.output,
"</MAP>\n"
);
148
break
;
149
}
150
151
/*
152
* close file
153
*/
154
155
fclose
(
html
.output);
156
}
NULL
#define NULL
Definition
ccmath.h:32
AMI_STREAM
Definition
ami_stream.h:153
screen_height
int screen_height
Definition
driver/init.c:30
screen_width
int screen_width
Definition
driver/init.c:29
driverlib.h
gis.h
HTML_Graph_close
void HTML_Graph_close(void)
Definition
graph_clse.c:28
html
struct html_state html
Definition
htmldriver/graph_set.c:24
htmlmap.h
RAW
#define RAW
Definition
htmlmap.h:15
APACHE
#define APACHE
Definition
htmlmap.h:12
CLIENT
#define CLIENT
Definition
htmlmap.h:14
MapPoly
Definition
htmlmap.h:17
MapPoly::y_pts
int * y_pts
Definition
htmlmap.h:21
MapPoly::num_pts
int num_pts
Definition
htmlmap.h:19
MapPoly::x_pts
int * x_pts
Definition
htmlmap.h:20
MapPoly::next_poly
struct MapPoly * next_poly
Definition
htmlmap.h:22
MapPoly::url
char * url
Definition
htmlmap.h:18
lib
htmldriver
graph_clse.c
Generated on Sat Apr 4 2026 17:44:25 for GRASS 8 Programmer's Manual by
1.9.8