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

OGSF library - setting and manipulating keyframes animation (lower level functions). More...

`#include <stdlib.h>`
`#include <math.h>`
`#include <grass/gis.h>`
`#include <grass/glocale.h>`
`#include <grass/ogsf.h>`
Include dependency graph for gk.c:

Go to the source code of this file.

## Functions

Keylist * | gk_copy_key (Keylist *k)
| Copy keyframes.
unsigned long | gk_get_mask_sofar (float time, Keylist *keys)
| Get mask value.
int | gk_viable_keys_for_mask (unsigned long mask, Keylist *keys, Keylist **keyret)
| ADD.
void | gk_follow_frames (Viewnode *view, int numsteps, Keylist *keys, int step, int onestep, int render, unsigned long mode)
| Checks key masks.
void | gk_free_key (Keylist *ok)
| Free keyframe list.
Viewnode * | gk_make_framesfromkeys (Keylist *keys, int keysteps, int newsteps, int loop, float t)
| Generate viewnode from keyframes.
double | get_key_neighbors (int nvk, double time, double range, int loop, Keylist *karray[], Keylist **km1, Keylist **kp1, Keylist **kp2, Keylist **km2, double *dt1, double *dt2)
| Find interval containing time.
double | lin_interp (float dt, float val1, float val2)
| Linear interpolation.
double | get_2key_neighbors (int nvk, float time, float range, int loop, Keylist *karray[], Keylist **km1, Keylist **kp1)
| Finds interval containing time, putting left (or equal) key at km1, right at kp1.
Viewnode * | gk_make_linear_framesfromkeys (Keylist *keys, int keysteps, int newsteps, int loop)
| Generate viewnode from keyframe list (linear interpolation).
void | correct_twist (Keylist *k)
| Correct twist value.
int | gk_draw_path (Viewnode *views, int steps, Keylist *keys)
| Draw path.

## Detailed Description

OGSF library - setting and manipulating keyframes animation (lower level functions).

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 gk.c.

## Function Documentation

## correct_twist()

void correct_twist | ( | Keylist * | k | ) |

Correct twist value.

Parameters

  k | keyframe list

Definition at line 711 of file gk.c.

References NULL, and t.

Referenced by gk_make_framesfromkeys(), and gk_make_linear_framesfromkeys().

## get_2key_neighbors()

double get_2key_neighbors | ( | int | nvk,
|  | float | time,
|  | float | range,
|  | int | loop,
|  | Keylist * | karray[],
|  | Keylist ** | km1,
|  | Keylist ** | kp1 )

Finds interval containing time, putting left (or equal) key at km1, right at kp1.

Parameters

  nvk |
  time |
  range |
  loop |
  karray |
  km1 |
  km2 |

Returns
  interval value

Definition at line 564 of file gk.c.

References NULL.

Referenced by gk_make_linear_framesfromkeys().

## get_key_neighbors()

double get_key_neighbors | ( | int | nvk,
|  | double | time,
|  | double | range,
|  | int | loop,
|  | Keylist * | karray[],
|  | Keylist ** | km1,
|  | Keylist ** | kp1,
|  | Keylist ** | kp2,
|  | Keylist ** | km2,
|  | double * | dt1,
|  | double * | dt2 )

Find interval containing time.

Changed June 94 to handle masks - now need to have called get_viable_keys for appropriate mask first to build the ARRAY of viable keyframes.

Putting left (or equal) key at km1, right at kp1, 2nd to right at kp2, and second to left at km2. dt1 is given the length of the current + left intervals dt2 is given the length of the current + right intervals

Parameters

  nvk |
  time |
  range |
  loop |
  karray |
  km1 |
  kp1 |
  kp2 |
  km2 |
  dt1 |
  dt2 |

Returns
  the length of the current interval
  0 on error

Definition at line 462 of file gk.c.

References NULL.

Referenced by gk_make_framesfromkeys().

## gk_copy_key()

Keylist * gk_copy_key | ( | Keylist * | k | ) |

Copy keyframes.

Parameters

  k | source keyframes

Returns
  pointer to Keylist struct (target)

Definition at line 45 of file gk.c.

References NULL.

## gk_draw_path()

int gk_draw_path | ( | Viewnode * | views,
|  | int | steps,
|  | Keylist * | keys )

Draw path.

Parameters

  views | Viewnode struct
  steps | step value
  keys | keyframe list

Returns
  0 on failure
  1 on success

Definition at line 749 of file gk.c.

References GS_background_color(), GS_default_draw_color(), GS_get_from(), GS_get_longdim(), gsd_bgnline(), gsd_color_func(), gsd_colormode(), gsd_endline(), gsd_linewidth(), gsd_vert_func(), gsd_x(), gsd_zwritemask(), and NULL.

Referenced by gk_follow_frames(), GK_set_tension(), and GK_show_path().

## gk_follow_frames()

void gk_follow_frames | ( | Viewnode * | view,
|  | int | numsteps,
|  | Keylist * | keys,
|  | int | step,
|  | int | onestep,
|  | int | render,
|  | unsigned long | mode )

Checks key masks.

Because if they're masked up until the current position, pre-existing (or current) field should be used.

Parameters

  view | pointer to Viewmode struct
  numsteps | number of steps
  keys | list of keyframes
  step | step value
  onestep |
  render |
  mode |

Definition at line 141 of file gk.c.

References G_debug(), gk_draw_path(), gk_get_mask_sofar(), GP_alldraw_site(), GS_alldraw_cplane_fences(), GS_alldraw_surf(), GS_alldraw_wire(), GS_background_color(), GS_clear(), GS_done_draw(), GS_draw_all_list(), GS_get_from(), GS_get_viewdir(), GS_getlight_position(), GS_moveto(), GS_ready_draw(), GS_set_draw(), GS_set_fov(), GS_set_twist(), GS_set_viewdir(), GS_setlight_position(), GV_alldraw_vect(), GVL_alldraw_vol(), X, x, and Y.

Referenced by GK_do_framestep().

## gk_free_key()

void gk_free_key | ( | Keylist * | ok | ) |

Free keyframe list.

Parameters

  ok | pointer to Keylist struct

Definition at line 271 of file gk.c.

References G_free().

Referenced by GK_clear_keys().

## gk_get_mask_sofar()

unsigned long gk_get_mask_sofar | ( | float | time,
|  | Keylist * | keys )

Get mask value.

Get begin & end pos, AND all masks in keys <= pos

Time must be between 0.0 & 1.0

Parameters

  time | timestamp
  keys | list of keyframes

Returns
  mask value

Definition at line 79 of file gk.c.

Referenced by gk_follow_frames().

## gk_make_framesfromkeys()

Viewnode * gk_make_framesfromkeys | ( | Keylist * | keys,
|  | int | keysteps,
|  | int | newsteps,
|  | int | loop,
|  | float | t )

Generate viewnode from keyframes.

Here we use a cardinal cubic spline

Parameters

  keys | list of keyframes
  keysteps | keyframe step
  newsteps | new step value
  loop | loop indicator
  t |

Returns
  pointer to Viewnode
  NULL on failure

Definition at line 301 of file gk.c.

References correct_twist(), G_free(), G_warning(), get_key_neighbors(), gk_viable_keys_for_mask(), lin_interp(), NULL, t, and x.

Referenced by GK_update_frames().

## gk_make_linear_framesfromkeys()

Viewnode * gk_make_linear_framesfromkeys | ( | Keylist * | keys,
|  | int | keysteps,
|  | int | newsteps,
|  | int | loop )

Generate viewnode from keyframe list (linear interpolation).

Here we use linear interpolation. Loop variable isn't used, but left in for use in possible "linear interp with smoothing" version.

Parameters

  keys | keyframe list
  keysteps | step value
  newsteps | new step value
  loop | loop indicator

Returns
  pointer to viewnode struct
  NULL on failure

Definition at line 611 of file gk.c.

References correct_twist(), G_free(), G_warning(), get_2key_neighbors(), gk_viable_keys_for_mask(), lin_interp(), and NULL.

Referenced by GK_update_frames().

## gk_viable_keys_for_mask()

int gk_viable_keys_for_mask | ( | unsigned long | mask,
|  | Keylist * | keys,
|  | Keylist ** | keyret )

ADD.

Parameters

  | mask | mask value
  | keys | list of keyframes
  [out] | keyret | output list of keyframes

Returns
  number of output keyframes

Definition at line 113 of file gk.c.

Referenced by gk_make_framesfromkeys(), and gk_make_linear_framesfromkeys().

## lin_interp()

double lin_interp | ( | float | dt,
|  | float | val1,
|  | float | val2 )

Linear interpolation.

Parameters

  dt | coefficient
  val2 | value 2
  val1 | value 1

Returns
  val1 + dt * (val2 - val1)

Definition at line 545 of file gk.c.

Referenced by gk_make_framesfromkeys(), and gk_make_linear_framesfromkeys().