ec0aafe4ec1cc57919302ace5e4e6a3bf8a2e777
[blender.git] / extern / ode / dist / include / ode / geom.h
1 /*************************************************************************
2  *                                                                       *
3  * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
4  * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
5  *                                                                       *
6  * This library is free software; you can redistribute it and/or         *
7  * modify it under the terms of EITHER:                                  *
8  *   (1) The GNU Lesser General Public License as published by the Free  *
9  *       Software Foundation; either version 2.1 of the License, or (at  *
10  *       your option) any later version. The text of the GNU Lesser      *
11  *       General Public License is included with this library in the     *
12  *       file LICENSE.TXT.                                               *
13  *   (2) The BSD-style license that is included with this library in     *
14  *       the file LICENSE-BSD.TXT.                                       *
15  *                                                                       *
16  * This library is distributed in the hope that it will be useful,       *
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
19  * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
20  *                                                                       *
21  *************************************************************************/
22
23 #ifndef _ODE_GEOM_H_
24 #define _ODE_GEOM_H_
25
26 #include <ode/common.h>
27 #include <ode/space.h>
28 #include <ode/contact.h>
29
30 #if defined SHARED_GEOM_H_INCLUDED_FROM_DEFINING_FILE
31 #define GLOBAL_SHAREDLIB_SPEC SHAREDLIBEXPORT
32 #else 
33 #define GLOBAL_SHAREDLIB_SPEC SHAREDLIBIMPORT
34 #endif
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 /* ************************************************************************ */
41 /* utility functions */
42
43 void dClosestLineSegmentPoints (const dVector3 a1, const dVector3 a2,
44                                 const dVector3 b1, const dVector3 b2,
45                                 dVector3 cp1, dVector3 cp2);
46
47 int dBoxTouchesBox (const dVector3 _p1, const dMatrix3 R1,
48                     const dVector3 side1, const dVector3 _p2,
49                     const dMatrix3 R2, const dVector3 side2);
50
51 void dInfiniteAABB (dGeomID geom, dReal aabb[6]);
52 void dCloseODE();
53
54 /* ************************************************************************ */
55 /* standard classes */
56
57 /* class numbers */
58 extern GLOBAL_SHAREDLIB_SPEC int dSphereClass;
59 extern GLOBAL_SHAREDLIB_SPEC int dBoxClass;
60 extern GLOBAL_SHAREDLIB_SPEC int dCCylinderClass;
61 extern GLOBAL_SHAREDLIB_SPEC int dPlaneClass;
62 extern GLOBAL_SHAREDLIB_SPEC int dGeomGroupClass;
63 extern GLOBAL_SHAREDLIB_SPEC int dGeomTransformClass;
64
65 /* constructors */
66 dGeomID dCreateSphere (dSpaceID space, dReal radius);
67 dGeomID dCreateBox (dSpaceID space, dReal lx, dReal ly, dReal lz);
68 dGeomID dCreatePlane (dSpaceID space, dReal a, dReal b, dReal c, dReal d);
69 dGeomID dCreateCCylinder (dSpaceID space, dReal radius, dReal length);
70 dGeomID dCreateGeomGroup (dSpaceID space);
71
72 /* set geometry parameters */
73 void dGeomSphereSetRadius (dGeomID sphere, dReal radius);
74 void dGeomBoxSetLengths (dGeomID box, dReal lx, dReal ly, dReal lz);
75 void dGeomPlaneSetParams (dGeomID plane, dReal a, dReal b, dReal c, dReal d);
76 void dGeomCCylinderSetParams (dGeomID ccylinder, dReal radius, dReal length);
77
78 /* get geometry parameters */
79 int   dGeomGetClass (dGeomID);
80 dReal dGeomSphereGetRadius (dGeomID sphere);
81 void  dGeomBoxGetLengths (dGeomID box, dVector3 result);
82 void  dGeomPlaneGetParams (dGeomID plane, dVector4 result);
83 void  dGeomCCylinderGetParams (dGeomID ccylinder,
84                                dReal *radius, dReal *length);
85
86 /* general functions */
87 void dGeomSetData (dGeomID, void *);
88 void *dGeomGetData (dGeomID);
89 void dGeomSetBody (dGeomID, dBodyID);
90 dBodyID dGeomGetBody (dGeomID);
91 void dGeomSetPosition (dGeomID, dReal x, dReal y, dReal z);
92 void dGeomSetRotation (dGeomID, const dMatrix3 R);
93 const dReal * dGeomGetPosition (dGeomID);
94 const dReal * dGeomGetRotation (dGeomID);
95 void dGeomDestroy (dGeomID);
96 void dGeomGetAABB (dGeomID, dReal aabb[6]);
97 dReal *dGeomGetSpaceAABB (dGeomID);
98
99 /* ************************************************************************ */
100 /* geometry group functions */
101
102 void dGeomGroupAdd (dGeomID group, dGeomID x);
103 void dGeomGroupRemove (dGeomID group, dGeomID x);
104 int dGeomGroupGetNumGeoms (dGeomID group);
105 dGeomID dGeomGroupGetGeom (dGeomID group, int i);
106
107 /* ************************************************************************ */
108 /* transformed geometry functions */
109
110 dGeomID dCreateGeomTransform (dSpaceID space);
111 void dGeomTransformSetGeom (dGeomID g, dGeomID obj);
112 dGeomID dGeomTransformGetGeom (dGeomID g);
113 void dGeomTransformSetCleanup (dGeomID g, int mode);
114 int dGeomTransformGetCleanup (dGeomID g);
115 void dGeomTransformSetInfo (dGeomID g, int mode);
116 int dGeomTransformGetInfo (dGeomID g);
117
118 /* ************************************************************************ */
119 /* general collision */
120
121 int dCollide (dGeomID o1, dGeomID o2, int flags, dContactGeom *contact,
122               int skip);
123
124 /* ************************************************************************ */
125 /* custom classes */
126
127 typedef void dGetAABBFn (dGeomID, dReal aabb[6]);
128 typedef int dColliderFn (dGeomID o1, dGeomID o2,
129                          int flags, dContactGeom *contact, int skip);
130 typedef dColliderFn * dGetColliderFnFn (int num);
131 typedef void dGeomDtorFn (dGeomID o);
132 typedef int dAABBTestFn (dGeomID o1, dGeomID o2, dReal aabb[6]);
133
134 typedef struct dGeomClass {
135   int bytes;
136   dGetColliderFnFn *collider;
137   dGetAABBFn *aabb;
138   dAABBTestFn *aabb_test;
139   dGeomDtorFn *dtor;
140 } dGeomClass;
141
142 int dCreateGeomClass (const dGeomClass *classptr);
143 void * dGeomGetClassData (dGeomID);
144 dGeomID dCreateGeom (int classnum);
145
146 /* ************************************************************************ */
147
148 #ifdef __cplusplus
149 }
150 #endif
151
152 #endif