GRASS GIS 8 Programmer's Manual  8.2.2dev(2023)-3d2c704037
gs_util.c File Reference

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

#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <grass/gis.h>
#include <grass/ogsf.h>
Include dependency graph for gs_util.c:

Go to the source code of this file.

Functions

double GS_geodistance (double *from, double *to, const char *units)
 Calculate distance between 2 coordinates. More...
 
float GS_distance (float *from, float *to)
 Calculate distance. More...
 
float GS_P2distance (float *from, float *to)
 Calculate distance in plane. More...
 
void GS_v3eq (float *v1, float *v2)
 Copy vector values. More...
 
void GS_v3add (float *v1, float *v2)
 Sum vectors. More...
 
void GS_v3sub (float *v1, float *v2)
 Subtract vectors. More...
 
void GS_v3mult (float *v1, float k)
 Multiple vectors. More...
 
int GS_v3norm (float *v1)
 Change v1 so that it is a unit vector (2D) More...
 
int GS_v2norm (float *v1)
 Change v1 so that it is a unit vector (3D) More...
 
int GS_dv3norm (double *dv1)
 Changes v1 so that it is a unit vector. More...
 
int GS_v3normalize (float *v1, float *v2)
 Change v2 so that v1v2 is a unit vector. More...
 
int GS_v3dir (float *v1, float *v2, float *v3)
 Get a normalized direction from v1 to v2, store in v3. More...
 
void GS_v2dir (float *v1, float *v2, float *v3)
 Get a normalized direction from v1 to v2, store in v3 (2D) More...
 
void GS_v3cross (float *v1, float *v2, float *v3)
 Get the cross product v3 = v1 cross v2. More...
 
void GS_v3mag (float *v1, float *mag)
 Magnitude of vector. More...
 
int GS_coordpair_repeats (float *p1, float *p2, int nhist)
 ADD. More...
 

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, GMSL/University of Illinois
Doxygenized by Martin Landa <landa.martin gmail.com> (May 2008)

Definition in file gs_util.c.

Function Documentation

◆ GS_coordpair_repeats()

int GS_coordpair_repeats ( float *  p1,
float *  p2,
int  nhist 
)

ADD.

Initialize by calling with a number nhist to represent number of previous entrys to check, then call with zero as nhist

Parameters
p1first point
p2second point
nhist?
Returns
-1 on error
-2
1
9

Definition at line 443 of file gs_util.c.

References NULL.

◆ GS_distance()

float GS_distance ( float *  from,
float *  to 
)

Calculate distance.

Parameters
from'from' point (X,Y,Z)
to'to' point (X,Y,Z)
Returns
distance

Definition at line 141 of file gs_util.c.

References x, X, Y, and Z.

Referenced by GS_look_here(), gs_setlos_enterdata(), gsd_zup_twist(), and gv_line_length().

◆ GS_dv3norm()

int GS_dv3norm ( double *  dv1)

Changes v1 so that it is a unit vector.

Parameters
dv1vector
Returns
0 if magnitude of dv1 is zero
1 if magnitude of dv1 > 0

Definition at line 295 of file gs_util.c.

References X, Y, and Z.

◆ GS_geodistance()

double GS_geodistance ( double *  from,
double *  to,
const char *  units 
)

Calculate distance between 2 coordinates.

Units is one of:

  • "meters",
  • "miles",
  • "kilometers",
  • "feet",
  • "yards",
  • "nmiles" (nautical miles),
  • "rods",
  • "inches",
  • "centimeters",
  • "millimeters",
  • "micron",
  • "nanometers",
  • "cubits",
  • "hands",
  • "furlongs",
  • "chains"

Default is meters.

Parameters
fromstarting point
toending point
unitsmap units
Returns
distance between two geographic coordinates in current projection

Definition at line 55 of file gs_util.c.

References Gs_distance().

◆ GS_P2distance()

float GS_P2distance ( float *  from,
float *  to 
)

Calculate distance in plane.

Parameters
from'from' point (X,Y)
to'to' point (X,Y)
Returns
distance

Definition at line 160 of file gs_util.c.

References x, X, and Y.

Referenced by gv_line_length(), and seg_intersect_vregion().

◆ GS_v2dir()

void GS_v2dir ( float *  v1,
float *  v2,
float *  v3 
)

Get a normalized direction from v1 to v2, store in v3 (2D)

Parameters
v1first vector
v2second vector
[out]v3output vector
Returns
0 if magnitude of dx is zero
1 if magnitude of dx > 0

Definition at line 385 of file gs_util.c.

References X, and Y.

◆ GS_v2norm()

int GS_v2norm ( float *  v1)

Change v1 so that it is a unit vector (3D)

Parameters
[in,out]v1vector
Returns
0 if magnitude of v1 is zero
1 if magnitude of v1 > 0

Definition at line 271 of file gs_util.c.

References X, and Y.

◆ GS_v3add()

void GS_v3add ( float *  v1,
float *  v2 
)

Sum vectors.

v1 += v2

Parameters
[in,out]v1first vector
v2second vector

Definition at line 195 of file gs_util.c.

References X, Y, and Z.

Referenced by GS_moveto(), and gs_setlos_enterdata().

◆ GS_v3cross()

void GS_v3cross ( float *  v1,
float *  v2,
float *  v3 
)

Get the cross product v3 = v1 cross v2.

Parameters
v1first vector
v2second vector
[out]v3output vector

Definition at line 406 of file gs_util.c.

References X, Y, and Z.

◆ GS_v3dir()

int GS_v3dir ( float *  v1,
float *  v2,
float *  v3 
)

Get a normalized direction from v1 to v2, store in v3.

Parameters
v1first vector
v2second vector
[out]v3output vector
Returns
0 if magnitude of dx is zero
1 if magnitude of dx > 0

Definition at line 353 of file gs_util.c.

References X, Y, and Z.

Referenced by GS_get_modelposition(), GS_get_viewdir(), GS_look_here(), gs_setlos_enterdata(), and gsd_get_zup().

◆ GS_v3eq()

void GS_v3eq ( float *  v1,
float *  v2 
)

Copy vector values.

v1 = v2

Parameters
[out]v1first vector
v2second vector

Definition at line 178 of file gs_util.c.

References X, Y, and Z.

Referenced by gpd_obj(), GS_get_focus(), GS_get_from(), GS_get_from_real(), GS_get_to(), GS_moveto(), Gs_save_3dview(), GS_set_focus(), gsd_check_focus(), gsd_zup_twist(), and gsdrape_get_allsegments().

◆ GS_v3mag()

void GS_v3mag ( float *  v1,
float *  mag 
)

Magnitude of vector.

Parameters
v1vector
[out]magmagnitude value

Definition at line 421 of file gs_util.c.

References X, Y, and Z.

◆ GS_v3mult()

void GS_v3mult ( float *  v1,
float  k 
)

Multiple vectors.

v1 *= k

Parameters
[in,out]v1vector
kmultiplicator

Definition at line 229 of file gs_util.c.

References X, Y, and Z.

Referenced by GS_look_here(), Gs_save_3dview(), gs_setlos_enterdata(), and gsd_check_focus().

◆ GS_v3norm()

int GS_v3norm ( float *  v1)

Change v1 so that it is a unit vector (2D)

Parameters
[in,out]v1vector
Returns
0 if magnitude of v1 is zero
1 if magnitude of v1 > 0

Definition at line 246 of file gs_util.c.

References X, Y, and Z.

◆ GS_v3normalize()

int GS_v3normalize ( float *  v1,
float *  v2 
)

Change v2 so that v1v2 is a unit vector.

Parameters
v1first vector
v2[in,out]second vector
Returns
0 if magnitude of dx is zero
1 if magnitude of dx > 0

Definition at line 322 of file gs_util.c.

References X, Y, and Z.

Referenced by GS_moveto(), and gsd_check_focus().

◆ GS_v3sub()

void GS_v3sub ( float *  v1,
float *  v2 
)

Subtract vectors.

v1 -= v2

Parameters
[in,out]v1first vector
v2second vector

Definition at line 212 of file gs_util.c.

References X, Y, and Z.

Referenced by GS_moveto().