2 * Copyright (C) 2009 Andy Spencer <spenceal@rose-hulman.edu>
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 #ifndef __GIS_PRIMITIVES_H__
19 #define __GIS_PRIMITIVES_H__
24 typedef struct _GisProjection GisProjection;
25 typedef struct _GisPoint GisPoint;
27 struct _GisProjection {
35 struct { gdouble lat, lon, elev; };
39 struct { gdouble x, y, z; };
43 struct { gdouble px, py, pz; };
47 struct { gdouble nx, ny, nz; };
51 struct { gdouble cx, cy, xz; };
57 #define GIS_PRIMITIVE(primitive) ((GisPrimitive*)primitive)
58 #define GIS_TRIANGLE (triangle ) ((GisTriangle *)triangel )
59 #define GIS_QUAD (quad ) ((GisQuad *)quad )
60 #define GIS_CALLBACK (callback ) ((GisCallback *)callback )
62 typedef struct _GisPrimitive GisPrimitive;
63 typedef struct _GisTriangle GisTriangle;
64 typedef struct _GisQuad GisQuad;
65 typedef struct _GisCallback GisCallback;
67 typedef gpointer (*GisCallbackFunc)(GisCallback *callback, gpointer user_data);
69 struct _GisPrimitive {
85 GisCallbackFunc callback;
89 /* Support functions */
90 GisPoint *gis_point_new();
91 void gis_point_set_lle(GisPoint *point, gdouble lat, gdouble lon, gdouble elev);
92 void gis_point_set_xyz(GisPoint *point, gdouble x, gdouble y, gdouble z);
93 void gis_point_set_coords(GisPoint *point, gdouble x, gdouble y);
94 void gis_point_project(GisPoint *point, GisProjection *proj);
95 GisPoint *gis_point_ref(GisPoint *point);
96 void gis_point_unref(GisPoint *point);
98 GisTriangle *gis_triangle_new(GisPoint *a, GisPoint *b, GisPoint *c, guint tex);
99 void gis_triangle_free(GisTriangle *tri);
101 GisQuad *gis_quad_new(GisPoint *a, GisPoint *b, GisPoint *c, GisPoint *d, guint tex);
102 void gis_quad_free(GisQuad *quad);
104 GisCallback *gis_callback_new(GisCallbackFunc callback, gpointer user_data);
105 void gis_callback_free(GisCallback *cb);