Loading...
Searching...
No Matches
gsd_surf.c File Reference

OGSF library - loading and manipulating surfaces. More...

`#include <stdlib.h>`
`#include <grass/gis.h>`
`#include <grass/glocale.h>`
`#include <grass/ogsf.h>`
`#include "gsget.h"`
`#include "rowcol.h"`
Include dependency graph for gsd_surf.c:

Go to the source code of this file.

## Macros

#define | DEBUG_ARROW (0)
#define | SET_SCOLOR(sf)
| MACROS for use in gsd_ortho_wall ONLY !!!

## Functions

int | gsd_surf (geosurf *surf)
| ADD.
int | gsd_surf_map_old (geosurf *surf)
| ADD.
int | gsd_surf_const (geosurf *surf, float k)
| Using tmesh - not confident with qstrips portability.
int | gsd_surf_func (geosurf *gs, int(*user_func)(void))
| Define user function.
int | gsd_triangulated_wall (int npts1, int npts2, geosurf *surf1, geosurf *surf2, Point3 *points1, Point3 *points2, float *norm)
| ADD.
void | gsd_setfc (int mode)
| ADD.
int | gsd_getfc (void)
| ADD.
int | gsd_ortho_wall (int np, int ns, geosurf **gsurfs, Point3 **points, float *norm)
| ADD.
int | gsd_wall (float *bgn, float *end, float *norm)
| ADD.
int | gsd_norm_arrows (geosurf *surf)
| ADD.
int | gsd_surf_map (geosurf *surf)
| Draw surface using triangle fan instead of strip.

## Detailed Description

OGSF library - loading and manipulating surfaces.

GRASS OpenGL gsurf OGSF Library

(C) 1999-2008 by the GRASS Development Team

This program is free software under the GNU General Public License (>=v2). Read the file COPYING that comes with GRASS for details.

Author
  Bill Brown USACERL (October 1993)
  Doxygenized by Martin Landa <landa.martin gmail.com> (May 2008)

Definition in file gsd_surf.c.

## Macro Definition Documentation

## DEBUG_ARROW

#define DEBUG_ARROW (0)

Definition at line 42 of file gsd_surf.c.

Referenced by gsd_norm_arrows().

## SET_SCOLOR

#define SET_SCOLOR | ( |  | sf | ) |

Value:
if (check_color[sf]) { \
tx = points[sf][i][X] - gsurfs[sf]->x_trans; \
ty = points[sf][i][Y] - gsurfs[sf]->y_trans; \
offset = XY2OFF(gsurfs[sf], tx, ty); \
colors[sf] = gs_mapcolor(cobuf[sf], coloratt[sf], offset); \
}
gs_mapcolor
int gs_mapcolor(typbuff *cobuff, gsurf_att *coloratt, int offset)
Call this one when you already know att_src is MAP_ATT.
Definition gs.c:968
XY2OFF
#define XY2OFF(gs, px, py)
Definition rowcol.h:24
X
#define X(j)
Y
#define Y(j)

MACROS for use in gsd_ortho_wall ONLY !!!

Definition at line 47 of file gsd_surf.c.

Referenced by gsd_ortho_wall().

## Function Documentation

## gsd_getfc()

int gsd_getfc | ( | void |  | ) |

ADD.

Returns

Definition at line 1217 of file gsd_surf.c.

Referenced by GS_get_fencecolor(), and GS_transp_is_set().

## gsd_norm_arrows()

int gsd_norm_arrows | ( | geosurf * | surf | ) |

ADD.

Need to do Zexag scale of normal for arrow direction, drawing routine unexags z for arrow

Parameters

  surf | surface (geosurf)

Returns

Definition at line 1805 of file gsd_surf.c.

References BM_get(), DEBUG_ARROW, FNORM, G_debug(), GET_MAPATT, GS_check_cancel(), gs_get_att_typbuff(), GS_get_scale(), GS_global_exag(), gs_mapcolor(), gs_update_curmask(), gsd_3darrow(), gsd_arrow(), gsd_colormode(), gsd_do_scale(), gsd_popmatrix(), gsd_pushmatrix(), gsd_translate(), VCOLS, VROWS, X, and Y.

Referenced by gsd_surf().

## gsd_ortho_wall()

int gsd_ortho_wall | ( | int | np,
|  | int | ns,
|  | geosurf ** | gsurfs,
|  | Point3 ** | points,
|  | float * | norm )

ADD.

Parameters

  np |
  ns |
  gsurfs |
  points |
  norm |

Returns

Definition at line 1323 of file gsd_surf.c.

References G_debug(), GS_check_cancel(), gs_get_att_typbuff(), GS_set_draw(), gsd_bgntmesh(), gsd_blend(), gsd_colormode(), gsd_do_scale(), gsd_endtmesh(), gsd_litvert_func(), gsd_popmatrix(), gsd_pushmatrix(), gsd_zwritemask(), segs_intersect(), SET_SCOLOR, X, and Y.

Referenced by gsd_wall().

## gsd_setfc()

void gsd_setfc | ( | int | mode | ) |

ADD.

Parameters

  mode |

Definition at line 1205 of file gsd_surf.c.

Referenced by GS_set_fencecolor().

## gsd_surf()

int gsd_surf | ( | geosurf * | surf | ) |

ADD.

Parameters

  surf | surface (geosurf)

Returns
  -1 on error

Definition at line 80 of file gsd_surf.c.

References G_debug(), gs_calc_normals(), gs_get_att_src(), gsd_norm_arrows(), gsd_surf_const(), gsd_surf_func(), and gsd_surf_map().

Referenced by GS_draw_surf().

## gsd_surf_const()

int gsd_surf_const | ( | geosurf * | surf,
|  | float | k )

Using tmesh - not confident with qstrips portability.

Todo
  FIX: do_diff won't work right - needs normals - maybe calculate on the fly

Parameters

  surf | surface (geosurf)
  k |

Returns

Definition at line 729 of file gsd_surf.c.

References BM_get(), G_debug(), GS_check_cancel(), gs_get_att_typbuff(), GS_get_scale(), gs_mapcolor(), gs_update_curmask(), gsd_bgnpolygon(), gsd_bgntmesh(), gsd_blend(), gsd_checkpoint(), gsd_colormode(), gsd_do_scale(), gsd_endpolygon(), gsd_endtmesh(), gsd_getwindow(), gsd_litvert_func(), gsd_popmatrix(), gsd_pushmatrix(), gsd_translate(), gsd_zwritemask(), gsdiff_do_SD(), gsdiff_get_SDref(), NULL, VCOLS, VROWS, X, and Y.

Referenced by gsd_coarse_surf_map(), gsd_surf(), gsd_surf_map(), and gsd_surf_map_old().

## gsd_surf_func()

int gsd_surf_func | ( | geosurf * | gs,
|  | int(* | user_func )(void) )

Define user function.

Not yet supported

Parameters

  gs | surface (geosurf) [unused]
  user_func | user function [unused]

Returns
  1

Definition at line 1090 of file gsd_surf.c.

Referenced by gsd_surf().

## gsd_surf_map()

int gsd_surf_map | ( | geosurf * | surf | ) |

Draw surface using triangle fan instead of strip.

Optimized by getting rid of BM_get mask check - GET_MAPPATT does same and returns zero if masked

Only do in window check on Fan center(v0) to further optimize – this runs the risk of trimming points in view !!

Parameters

  surf | surface (geosurf)

Returns

Definition at line 2061 of file gsd_surf.c.

References FNORM, GET_MAPATT, GS_check_cancel(), gs_get_att_typbuff(), GS_get_scale(), GS_global_exag(), gs_mapcolor(), gs_update_curmask(), gsd_bgntfan(), gsd_blend(), gsd_checkpoint(), gsd_colormode(), gsd_do_scale(), gsd_endtfan(), gsd_getwindow(), gsd_litvert_func(), gsd_popmatrix(), gsd_pushmatrix(), gsd_set_material(), gsd_surf_const(), gsd_translate(), gsd_zwritemask(), SCALE_ATT, VCOLS, VROWS, X, and Y.

Referenced by gsd_surf().

## gsd_surf_map_old()

int gsd_surf_map_old | ( | geosurf * | surf | ) |

ADD.

Using tmesh - not confident with qstrips portability

Parameters

  surf | surface (geosurf)

Returns

Definition at line 139 of file gsd_surf.c.

References BM_get(), FNORM, G_debug(), GET_MAPATT, GS_check_cancel(), gs_get_att_typbuff(), GS_get_scale(), GS_global_exag(), gs_mapcolor(), gs_update_curmask(), GS_v3cross(), GS_v3eq(), GS_v3mag(), GS_v3sub(), gsd_bgntmesh(), gsd_blend(), gsd_checkpoint(), gsd_colormode(), gsd_do_scale(), gsd_endtmesh(), gsd_getwindow(), gsd_litvert_func(), gsd_popmatrix(), gsd_pushmatrix(), gsd_set_material(), gsd_surf_const(), gsd_translate(), gsd_zwritemask(), SCALE_ATT, show_colormode(), VCOLS, VROWS, X, and Y.

## gsd_triangulated_wall()

int gsd_triangulated_wall | ( | int | npts1,
|  | int | npts2,
|  | geosurf * | surf1,
|  | geosurf * | surf2,
|  | Point3 * | points1,
|  | Point3 * | points2,
|  | float * | norm )

ADD.

Parameters

  npts1 |
  npts2 |
  surf1 | first surface (geosurf)
  surf2 | second surface (geosurf)
  points1 |
  points2 |
  norm |

Returns
  1

Definition at line 1109 of file gsd_surf.c.

References gs_get_att_typbuff(), gs_mapcolor(), gsd_bgntmesh(), gsd_colormode(), gsd_do_scale(), gsd_endtmesh(), gsd_litvert_func(), gsd_popmatrix(), gsd_pushmatrix(), X, XY2OFF, and Y.

## gsd_wall()

int gsd_wall | ( | float * | bgn,
|  | float * | end,
|  | float * | norm )

ADD.

bgn,end should already be in world modeling coords, but have to be reverse-translated to apply to each surface

Parameters

  bgn,end | 2d line for cutting plane
  norm | indicates which way wall faces

Returns

Definition at line 1710 of file gsd_surf.c.

References err(), G_free(), G_warning(), gs_getall_surfaces(), GS_v3eq(), gsd_ortho_wall(), gsdrape_get_allsegments(), X, and Y.

Referenced by gsd_draw_cplane_fence().