21#include <grass/ogsf.h>
26#define FRINGE_FORE 0x000000
35float Nwest[] = {-0.8, 0.0, 0.6};
36float Ntop[] = {0.0, 0.0, 1.0};
71 bot = elev - ((surf->zrange / 4.) * surf->z_exag);
77 if (where[0] || where[1]) {
91 if (where[2] || where[3]) {
105 if (where[0] || where[2]) {
118 if (where[1] || where[3]) {
148 int row_shift, max_row_shift;
164 pt[
X] = col * (surf->x_mod * surf->xres);
165 pt[
Y] = ((surf->rows - 1) * surf->yres) -
166 ((row + side) * (surf->y_mod * surf->yres));
170 offset = (row * surf->y_mod * surf->cols) + (col * surf->x_mod);
174 while (!
GET_MAPATT(buff, offset, pt[Z]) && row_shift < max_row_shift) {
177 offset = ((row - row_shift) * surf->y_mod * surf->cols) +
180 offset = ((row + row_shift) * surf->y_mod * surf->cols) +
183 pt[Z] = pt[Z] * surf->z_exag;
186 for (col = 0; col < xcnt - 1; col++) {
188 pt[
X] = col * (surf->x_mod * surf->xres);
189 pt[
Y] = ((surf->rows - 1) * surf->yres) -
190 ((row + side) * (surf->y_mod * surf->yres));
195 offset = (row * surf->y_mod * surf->cols) + (col * surf->x_mod);
197 while (!
GET_MAPATT(buff, offset, pt[Z]) && row_shift < max_row_shift) {
200 offset = ((row - row_shift) * surf->y_mod * surf->cols) +
203 offset = ((row + row_shift) * surf->y_mod * surf->cols) +
206 pt[Z] = pt[Z] * surf->z_exag;
234 int row_shift, max_row_shift;
250 pt[
X] = col * (surf->x_mod * surf->xres);
251 pt[
Y] = ((surf->rows - 1) * surf->yres) -
252 ((row + side) * (surf->y_mod * surf->yres));
257 offset = (row * surf->y_mod * surf->cols) + (col * surf->x_mod);
259 while (!
GET_MAPATT(buff, offset, pt[Z]) && row_shift < max_row_shift) {
262 offset = ((row - row_shift) * surf->y_mod * surf->cols) +
265 offset = ((row + row_shift) * surf->y_mod * surf->cols) +
268 pt[Z] = pt[Z] * surf->z_exag;
271 for (col = 0; col < xcnt - 1; col++) {
273 pt[
X] = col * (surf->x_mod * surf->xres);
274 pt[
Y] = ((surf->rows - 1) * surf->yres) -
275 ((row + side) * (surf->y_mod * surf->yres));
276 offset = (row * surf->y_mod * surf->cols) + (col * surf->x_mod);
278 while (!
GET_MAPATT(buff, offset, pt[Z]) && row_shift < max_row_shift) {
281 offset = ((row - row_shift) * surf->y_mod * surf->cols) +
284 offset = ((row + row_shift) * surf->y_mod * surf->cols) +
287 pt[Z] = pt[Z] * surf->z_exag;
292 pt[
X] = col * (surf->x_mod * surf->xres);
293 pt[
Y] = ((surf->rows - 1) * surf->yres) -
294 ((row + side) * (surf->y_mod * surf->yres));
299 pt[
X] = col * (surf->x_mod * surf->xres);
300 pt[
Y] = ((surf->rows - 1) * surf->yres) -
301 ((row + side) * (surf->y_mod * surf->yres));
330 int col_shift, max_col_shift;
346 pt[
X] = col * (surf->x_mod * surf->xres);
348 ((surf->rows - 1) * surf->yres) - (row * (surf->y_mod * surf->yres));
353 offset = (row * surf->y_mod * surf->cols) + (col * surf->x_mod);
355 while (!
GET_MAPATT(buff, offset, pt[Z]) && col_shift < max_col_shift) {
358 offset = (row * surf->y_mod * surf->cols) +
359 ((col - col_shift) * surf->x_mod);
361 offset = (row * surf->y_mod * surf->cols) +
362 ((col + col_shift) * surf->x_mod);
364 pt[Z] = pt[Z] * surf->z_exag;
367 for (row = 0; row < ycnt - 1; row++) {
369 pt[
X] = col * (surf->x_mod * surf->xres);
370 pt[
Y] = ((surf->rows - 1) * surf->yres) -
371 (row * (surf->y_mod * surf->yres));
375 offset = (row * surf->y_mod * surf->cols) + (col * surf->x_mod);
377 while (!
GET_MAPATT(buff, offset, pt[Z]) && col_shift < max_col_shift) {
380 offset = (row * surf->y_mod * surf->cols) +
381 ((col - col_shift) * surf->x_mod);
383 offset = (row * surf->y_mod * surf->cols) +
384 ((col + col_shift) * surf->x_mod);
386 pt[Z] = pt[Z] * surf->z_exag;
414 int col_shift, max_col_shift;
429 pt[
X] = col * (surf->x_mod * surf->xres);
431 ((surf->rows - 1) * surf->yres) - (row * (surf->y_mod * surf->yres));
436 offset = (row * surf->y_mod * surf->cols) + (col * surf->x_mod);
438 while (!
GET_MAPATT(buff, offset, pt[Z]) && col_shift < max_col_shift) {
441 offset = (row * surf->y_mod * surf->cols) +
442 ((col - col_shift) * surf->x_mod);
444 offset = (row * surf->y_mod * surf->cols) +
445 ((col + col_shift) * surf->x_mod);
447 pt[Z] = pt[Z] * surf->z_exag;
450 for (row = 0; row < ycnt - 1; row++) {
452 pt[
X] = col * (surf->x_mod * surf->xres);
453 pt[
Y] = ((surf->rows - 1) * surf->yres) -
454 (row * (surf->y_mod * surf->yres));
455 offset = (row * surf->y_mod * surf->cols) + (col * surf->x_mod);
457 while (!
GET_MAPATT(buff, offset, pt[Z]) && col_shift < max_col_shift) {
460 offset = (row * surf->y_mod * surf->cols) +
461 ((col - col_shift) * surf->x_mod);
463 offset = (row * surf->y_mod * surf->cols) +
464 ((col + col_shift) * surf->x_mod);
466 pt[Z] = pt[Z] * surf->z_exag;
471 pt[
X] = col * (surf->x_mod * surf->xres);
473 ((surf->rows - 1) * surf->yres) - (row * (surf->y_mod * surf->yres));
478 pt[
X] = col * (surf->x_mod * surf->xres);
480 ((surf->rows - 1) * surf->yres) - (row * (surf->y_mod * surf->yres));
520 pt[
X] = surf->xmin + (col * (surf->x_mod * surf->xres));
521 pt[
Y] = surf->ymax - ((row + side) * (surf->y_mod * surf->yres));
527 pt[Z] = pt[Z] * surf->z_exag;
530 for (col = 0; col < xcnt - 1; col++) {
532 pt[
X] = surf->xmin + (col * (surf->x_mod * surf->xres));
533 pt[
Y] = surf->ymax - ((row + side) * (surf->y_mod * surf->yres));
534 offset = col * surf->x_mod;
536 pt[Z] = pt[Z] * surf->z_exag;
541 pt[
X] = surf->xmin + (col * (surf->x_mod * surf->xres));
542 pt[
Y] = surf->ymax - ((row + side) * (surf->y_mod * surf->yres));
void GS_set_draw(int where)
Sets which buffer to draw to.
void GS_done_draw(void)
Draw done, swap buffers.
typbuff * gs_get_att_typbuff(geosurf *gs, int desc, int to_write)
Get attribute data buffer.
void gsd_fringe_vert_poly(float bot, geosurf *surf, int col, int side)
Draw fringe outline in y direction.
void gsd_fringe_horiz_poly(float bot, geosurf *surf, int row, int side)
Draw fringe polygon in x direction.
void gsd_display_fringe(geosurf *surf, unsigned long clr, float elev, int where[4])
Display fridge.
void gsd_fringe_vert_line(float bot, geosurf *surf, int col, int side)
Draw fringe outline in y direction.
void gsd_fringe_horiz_line(float bot, geosurf *surf, int row, int side)
Draw fringe outline in x direction.
void gsd_fringe_horiz_line2(float bot, geosurf *surf, int row, int side)
ADD.
void gsd_pushmatrix(void)
Push the current matrix stack.
void gsd_zwritemask(unsigned long n)
Write out z-mask.
void gsd_vert_func(float *pt)
ADD.
void gsd_bgnqstrip(void)
ADD.
void gsd_colormode(int cm)
Set color mode.
void gsd_endqstrip(void)
ADD.
void gsd_popmatrix(void)
Pop the current matrix stack.
void gsd_flush(void)
Mostly for flushing drawing commands across a network.
void gsd_endline(void)
End line.
void gsd_bgnline(void)
Begin line.
void gsd_translate(float dx, float dy, float dz)
Multiply the current matrix by a translation matrix.
void gsd_color_func(unsigned int col)
Set current color.
void gsd_linewidth(short n)
Set width of rasterized lines.
void gsd_do_scale(int doexag)
Set current scale.
#define GET_MAPATT(buff, offset, att)