From fca74b0bf0a0833f5701e9c0de7b3bc15b2233dd Mon Sep 17 00:00:00 2001 From: dan miller Date: Fri, 19 Oct 2007 05:20:07 +0000 Subject: dont ask --- libraries/ode-0.9/docs/annotated.html | 30 - libraries/ode-0.9/docs/collision_8h-source.html | 417 ---- .../ode-0.9/docs/collision__space_8h-source.html | 81 - .../ode-0.9/docs/collision__trimesh_8h-source.html | 220 -- libraries/ode-0.9/docs/common_8h-source.html | 408 ---- .../ode-0.9/docs/compatibility_8h-source.html | 60 - libraries/ode-0.9/docs/config_8h-source.html | 196 -- libraries/ode-0.9/docs/contact_8h-source.html | 109 - libraries/ode-0.9/docs/doxygen.css | 358 --- libraries/ode-0.9/docs/doxygen.png | Bin 1281 -> 0 bytes libraries/ode-0.9/docs/drawstuff_8h-source.html | 166 -- libraries/ode-0.9/docs/error_8h-source.html | 83 - libraries/ode-0.9/docs/export-dif_8h-source.html | 52 - libraries/ode-0.9/docs/files.html | 44 - libraries/ode-0.9/docs/functions.html | 46 - libraries/ode-0.9/docs/functions_vars.html | 46 - libraries/ode-0.9/docs/group__bodies.html | 1827 --------------- libraries/ode-0.9/docs/group__collide.html | 2452 -------------------- libraries/ode-0.9/docs/group__collide__box.html | 182 -- libraries/ode-0.9/docs/group__collide__sphere.html | 199 -- libraries/ode-0.9/docs/group__disable.html | 563 ----- libraries/ode-0.9/docs/group__drawstuff.html | 668 ------ libraries/ode-0.9/docs/group__joints.html | 2127 ----------------- libraries/ode-0.9/docs/group__world.html | 697 ------ libraries/ode-0.9/docs/index.html | 27 - libraries/ode-0.9/docs/mass_8h-source.html | 137 -- libraries/ode-0.9/docs/matrix_8h-source.html | 214 -- libraries/ode-0.9/docs/memory_8h-source.html | 79 - libraries/ode-0.9/docs/misc_8h-source.html | 105 - libraries/ode-0.9/docs/modules.html | 32 - libraries/ode-0.9/docs/objects_8h-source.html | 563 ----- libraries/ode-0.9/docs/ode_8h-source.html | 67 - libraries/ode-0.9/docs/odecpp_8h-source.html | 732 ------ .../ode-0.9/docs/odecpp__collision_8h-source.html | 366 --- libraries/ode-0.9/docs/odemath_8h-source.html | 350 --- libraries/ode-0.9/docs/rotation_8h-source.html | 90 - libraries/ode-0.9/docs/structd_contact_geom.html | 70 - libraries/ode-0.9/docs/structds_functions.html | 59 - libraries/ode-0.9/docs/tab_b.gif | Bin 35 -> 0 bytes libraries/ode-0.9/docs/tab_l.gif | Bin 706 -> 0 bytes libraries/ode-0.9/docs/tab_r.gif | Bin 2585 -> 0 bytes libraries/ode-0.9/docs/tabs.css | 102 - libraries/ode-0.9/docs/timer_8h-source.html | 96 - libraries/ode-0.9/docs/version_8h-source.html | 49 - 44 files changed, 14169 deletions(-) delete mode 100644 libraries/ode-0.9/docs/annotated.html delete mode 100644 libraries/ode-0.9/docs/collision_8h-source.html delete mode 100644 libraries/ode-0.9/docs/collision__space_8h-source.html delete mode 100644 libraries/ode-0.9/docs/collision__trimesh_8h-source.html delete mode 100644 libraries/ode-0.9/docs/common_8h-source.html delete mode 100644 libraries/ode-0.9/docs/compatibility_8h-source.html delete mode 100644 libraries/ode-0.9/docs/config_8h-source.html delete mode 100644 libraries/ode-0.9/docs/contact_8h-source.html delete mode 100644 libraries/ode-0.9/docs/doxygen.css delete mode 100644 libraries/ode-0.9/docs/doxygen.png delete mode 100644 libraries/ode-0.9/docs/drawstuff_8h-source.html delete mode 100644 libraries/ode-0.9/docs/error_8h-source.html delete mode 100644 libraries/ode-0.9/docs/export-dif_8h-source.html delete mode 100644 libraries/ode-0.9/docs/files.html delete mode 100644 libraries/ode-0.9/docs/functions.html delete mode 100644 libraries/ode-0.9/docs/functions_vars.html delete mode 100644 libraries/ode-0.9/docs/group__bodies.html delete mode 100644 libraries/ode-0.9/docs/group__collide.html delete mode 100644 libraries/ode-0.9/docs/group__collide__box.html delete mode 100644 libraries/ode-0.9/docs/group__collide__sphere.html delete mode 100644 libraries/ode-0.9/docs/group__disable.html delete mode 100644 libraries/ode-0.9/docs/group__drawstuff.html delete mode 100644 libraries/ode-0.9/docs/group__joints.html delete mode 100644 libraries/ode-0.9/docs/group__world.html delete mode 100644 libraries/ode-0.9/docs/index.html delete mode 100644 libraries/ode-0.9/docs/mass_8h-source.html delete mode 100644 libraries/ode-0.9/docs/matrix_8h-source.html delete mode 100644 libraries/ode-0.9/docs/memory_8h-source.html delete mode 100644 libraries/ode-0.9/docs/misc_8h-source.html delete mode 100644 libraries/ode-0.9/docs/modules.html delete mode 100644 libraries/ode-0.9/docs/objects_8h-source.html delete mode 100644 libraries/ode-0.9/docs/ode_8h-source.html delete mode 100644 libraries/ode-0.9/docs/odecpp_8h-source.html delete mode 100644 libraries/ode-0.9/docs/odecpp__collision_8h-source.html delete mode 100644 libraries/ode-0.9/docs/odemath_8h-source.html delete mode 100644 libraries/ode-0.9/docs/rotation_8h-source.html delete mode 100644 libraries/ode-0.9/docs/structd_contact_geom.html delete mode 100644 libraries/ode-0.9/docs/structds_functions.html delete mode 100644 libraries/ode-0.9/docs/tab_b.gif delete mode 100644 libraries/ode-0.9/docs/tab_l.gif delete mode 100644 libraries/ode-0.9/docs/tab_r.gif delete mode 100644 libraries/ode-0.9/docs/tabs.css delete mode 100644 libraries/ode-0.9/docs/timer_8h-source.html delete mode 100644 libraries/ode-0.9/docs/version_8h-source.html (limited to 'libraries/ode-0.9/docs') diff --git a/libraries/ode-0.9/docs/annotated.html b/libraries/ode-0.9/docs/annotated.html deleted file mode 100644 index 3b3c2f6..0000000 --- a/libraries/ode-0.9/docs/annotated.html +++ /dev/null @@ -1,30 +0,0 @@ - -
-dContactGeom | Describe the contact point between two geoms |
dsFunctions | Set of functions to be used as callbacks by the simulation loop |
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001-2003 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef _ODE_COLLISION_H_ -00024 #define _ODE_COLLISION_H_ -00025 -00026 #include <ode/common.h> -00027 #include <ode/collision_space.h> -00028 #include <ode/contact.h> -00029 -00030 #ifdef __cplusplus -00031 extern "C" { -00032 #endif -00033 -00049 /* ************************************************************************ */ -00050 /* general functions */ -00051 -00065 ODE_API void dGeomDestroy (dGeomID geom); -00066 -00067 -00075 ODE_API void dGeomSetData (dGeomID geom, void* data); -00076 -00077 -00084 ODE_API void *dGeomGetData (dGeomID geom); -00085 -00086 -00105 ODE_API void dGeomSetBody (dGeomID geom, dBodyID body); -00106 -00107 -00114 ODE_API dBodyID dGeomGetBody (dGeomID geom); -00115 -00116 -00131 ODE_API void dGeomSetPosition (dGeomID geom, dReal x, dReal y, dReal z); -00132 -00133 -00146 ODE_API void dGeomSetRotation (dGeomID geom, const dMatrix3 R); -00147 -00148 -00162 ODE_API void dGeomSetQuaternion (dGeomID geom, const dQuaternion Q); -00163 -00164 -00181 ODE_API const dReal * dGeomGetPosition (dGeomID geom); -00182 -00183 -00191 ODE_API void dGeomCopyPosition (dGeomID geom, dVector3 pos); -00192 -00193 -00210 ODE_API const dReal * dGeomGetRotation (dGeomID geom); -00211 -00212 -00226 ODE_API void dGeomCopyRotation(dGeomID geom, dMatrix3 R); -00227 -00228 -00242 ODE_API void dGeomGetQuaternion (dGeomID geom, dQuaternion result); -00243 -00244 -00261 ODE_API void dGeomGetAABB (dGeomID geom, dReal aabb[6]); -00262 -00263 -00270 ODE_API int dGeomIsSpace (dGeomID geom); -00271 -00272 -00280 ODE_API dSpaceID dGeomGetSpace (dGeomID); -00281 -00282 -00307 ODE_API int dGeomGetClass (dGeomID geom); -00308 -00309 -00322 ODE_API void dGeomSetCategoryBits (dGeomID geom, unsigned long bits); -00323 -00324 -00337 ODE_API void dGeomSetCollideBits (dGeomID geom, unsigned long bits); -00338 -00339 -00348 ODE_API unsigned long dGeomGetCategoryBits (dGeomID); -00349 -00350 -00359 ODE_API unsigned long dGeomGetCollideBits (dGeomID); -00360 -00361 -00374 ODE_API void dGeomEnable (dGeomID geom); -00375 -00376 -00389 ODE_API void dGeomDisable (dGeomID geom); -00390 -00391 -00405 ODE_API int dGeomIsEnabled (dGeomID geom); -00406 -00407 /* ************************************************************************ */ -00408 /* geom offset from body */ -00409 -00425 ODE_API void dGeomSetOffsetPosition (dGeomID geom, dReal x, dReal y, dReal z); -00426 -00427 -00441 ODE_API void dGeomSetOffsetRotation (dGeomID geom, const dMatrix3 R); -00442 -00443 -00457 ODE_API void dGeomSetOffsetQuaternion (dGeomID geom, const dQuaternion Q); -00458 -00459 -00476 ODE_API void dGeomSetOffsetWorldPosition (dGeomID geom, dReal x, dReal y, dReal z); -00477 -00478 -00493 ODE_API void dGeomSetOffsetWorldRotation (dGeomID geom, const dMatrix3 R); -00494 -00495 -00510 ODE_API void dGeomSetOffsetWorldQuaternion (dGeomID geom, const dQuaternion); -00511 -00512 -00526 ODE_API void dGeomClearOffset(dGeomID geom); -00527 -00528 -00544 ODE_API int dGeomIsOffset(dGeomID geom); -00545 -00546 -00560 ODE_API const dReal * dGeomGetOffsetPosition (dGeomID geom); -00561 -00562 -00573 ODE_API void dGeomCopyOffsetPosition (dGeomID geom, dVector3 pos); -00574 -00575 -00590 ODE_API const dReal * dGeomGetOffsetRotation (dGeomID geom); -00591 -00592 -00604 ODE_API void dGeomCopyOffsetRotation (dGeomID geom, dMatrix3 R); -00605 -00606 -00617 ODE_API void dGeomGetOffsetQuaternion (dGeomID geom, dQuaternion result); -00618 -00619 -00620 /* ************************************************************************ */ -00621 /* collision detection */ -00622 -00623 /* -00624 * Just generate any contacts (disables any contact refining). -00625 */ -00626 #define CONTACTS_UNIMPORTANT 0x80000000 -00627 -00675 ODE_API int dCollide (dGeomID o1, dGeomID o2, int flags, dContactGeom *contact, -00676 int skip); -00677 -00705 ODE_API void dSpaceCollide (dSpaceID space, void *data, dNearCallback *callback); -00706 -00707 -00742 ODE_API void dSpaceCollide2 (dGeomID space1, dGeomID space2, void *data, dNearCallback *callback); -00743 -00744 -00745 /* ************************************************************************ */ -00746 /* standard classes */ -00747 -00748 /* the maximum number of user classes that are supported */ -00749 enum { -00750 dMaxUserClasses = 4 -00751 }; -00752 -00753 /* class numbers - each geometry object needs a unique number */ -00754 enum { -00755 dSphereClass = 0, -00756 dBoxClass, -00757 dCapsuleClass, -00758 dCylinderClass, -00759 dPlaneClass, -00760 dRayClass, -00761 dConvexClass, -00762 dGeomTransformClass, -00763 dTriMeshClass, -00764 dHeightfieldClass, -00765 -00766 dFirstSpaceClass, -00767 dSimpleSpaceClass = dFirstSpaceClass, -00768 dHashSpaceClass, -00769 dQuadTreeSpaceClass, -00770 dLastSpaceClass = dQuadTreeSpaceClass, -00771 -00772 dFirstUserClass, -00773 dLastUserClass = dFirstUserClass + dMaxUserClasses - 1, -00774 dGeomNumClasses -00775 }; -00776 -00777 -00797 ODE_API dGeomID dCreateSphere (dSpaceID space, dReal radius); -00798 -00799 -00809 ODE_API void dGeomSphereSetRadius (dGeomID sphere, dReal radius); -00810 -00811 -00820 ODE_API dReal dGeomSphereGetRadius (dGeomID sphere); -00821 -00822 -00837 ODE_API dReal dGeomSpherePointDepth (dGeomID sphere, dReal x, dReal y, dReal z); -00838 -00839 -00840 //--> Convex Functions -00841 ODE_API dGeomID dCreateConvex (dSpaceID space, -00842 dReal *_planes, -00843 unsigned int _planecount, -00844 dReal *_points, -00845 unsigned int _pointcount,unsigned int *_polygons); -00846 -00847 ODE_API void dGeomSetConvex (dGeomID g, -00848 dReal *_planes, -00849 unsigned int _count, -00850 dReal *_points, -00851 unsigned int _pointcount,unsigned int *_polygons); -00852 //<-- Convex Functions -00853 -00875 ODE_API dGeomID dCreateBox (dSpaceID space, dReal lx, dReal ly, dReal lz); -00876 -00877 -00889 ODE_API void dGeomBoxSetLengths (dGeomID box, dReal lx, dReal ly, dReal lz); -00890 -00891 -00901 ODE_API void dGeomBoxGetLengths (dGeomID box, dVector3 result); -00902 -00903 -00916 ODE_API dReal dGeomBoxPointDepth (dGeomID box, dReal x, dReal y, dReal z); -00917 -00918 -00919 ODE_API dGeomID dCreatePlane (dSpaceID space, dReal a, dReal b, dReal c, dReal d); -00920 ODE_API void dGeomPlaneSetParams (dGeomID plane, dReal a, dReal b, dReal c, dReal d); -00921 ODE_API void dGeomPlaneGetParams (dGeomID plane, dVector4 result); -00922 ODE_API dReal dGeomPlanePointDepth (dGeomID plane, dReal x, dReal y, dReal z); -00923 -00924 ODE_API dGeomID dCreateCapsule (dSpaceID space, dReal radius, dReal length); -00925 ODE_API void dGeomCapsuleSetParams (dGeomID ccylinder, dReal radius, dReal length); -00926 ODE_API void dGeomCapsuleGetParams (dGeomID ccylinder, dReal *radius, dReal *length); -00927 ODE_API dReal dGeomCapsulePointDepth (dGeomID ccylinder, dReal x, dReal y, dReal z); -00928 -00929 // For now we want to have a backwards compatible C-API, note: C++ API is not. -00930 #define dCreateCCylinder dCreateCapsule -00931 #define dGeomCCylinderSetParams dGeomCapsuleSetParams -00932 #define dGeomCCylinderGetParams dGeomCapsuleGetParams -00933 #define dGeomCCylinderPointDepth dGeomCapsulePointDepth -00934 #define dCCylinderClass dCapsuleClass -00935 -00936 ODE_API dGeomID dCreateCylinder (dSpaceID space, dReal radius, dReal length); -00937 ODE_API void dGeomCylinderSetParams (dGeomID cylinder, dReal radius, dReal length); -00938 ODE_API void dGeomCylinderGetParams (dGeomID cylinder, dReal *radius, dReal *length); -00939 -00940 ODE_API dGeomID dCreateRay (dSpaceID space, dReal length); -00941 ODE_API void dGeomRaySetLength (dGeomID ray, dReal length); -00942 ODE_API dReal dGeomRayGetLength (dGeomID ray); -00943 ODE_API void dGeomRaySet (dGeomID ray, dReal px, dReal py, dReal pz, -00944 dReal dx, dReal dy, dReal dz); -00945 ODE_API void dGeomRayGet (dGeomID ray, dVector3 start, dVector3 dir); -00946 -00947 /* -00948 * Set/get ray flags that influence ray collision detection. -00949 * These flags are currently only noticed by the trimesh collider, because -00950 * they can make a major differences there. -00951 */ -00952 ODE_API void dGeomRaySetParams (dGeomID g, int FirstContact, int BackfaceCull); -00953 ODE_API void dGeomRayGetParams (dGeomID g, int *FirstContact, int *BackfaceCull); -00954 ODE_API void dGeomRaySetClosestHit (dGeomID g, int closestHit); -00955 ODE_API int dGeomRayGetClosestHit (dGeomID g); -00956 -00957 #include "collision_trimesh.h" -00958 -00959 ODE_API dGeomID dCreateGeomTransform (dSpaceID space); -00960 ODE_API void dGeomTransformSetGeom (dGeomID g, dGeomID obj); -00961 ODE_API dGeomID dGeomTransformGetGeom (dGeomID g); -00962 ODE_API void dGeomTransformSetCleanup (dGeomID g, int mode); -00963 ODE_API int dGeomTransformGetCleanup (dGeomID g); -00964 ODE_API void dGeomTransformSetInfo (dGeomID g, int mode); -00965 ODE_API int dGeomTransformGetInfo (dGeomID g); -00966 -00967 -00968 /* ************************************************************************ */ -00969 /* heightfield functions */ -00970 -00971 -00972 // Data storage for heightfield data. -00973 struct dxHeightfieldData; -00974 typedef struct dxHeightfieldData* dHeightfieldDataID; -00975 -00976 -00994 typedef dReal dHeightfieldGetHeight( void* p_user_data, int x, int z ); -00995 -00996 -00997 -01017 ODE_API dGeomID dCreateHeightfield( dSpaceID space, -01018 dHeightfieldDataID data, int bPlaceable ); -01019 -01020 -01033 ODE_API dHeightfieldDataID dGeomHeightfieldDataCreate(); -01034 -01035 -01044 ODE_API void dGeomHeightfieldDataDestroy( dHeightfieldDataID d ); -01045 -01046 -01047 -01088 ODE_API void dGeomHeightfieldDataBuildCallback( dHeightfieldDataID d, -01089 void* pUserData, dHeightfieldGetHeight* pCallback, -01090 dReal width, dReal depth, int widthSamples, int depthSamples, -01091 dReal scale, dReal offset, dReal thickness, int bWrap ); -01092 -01136 ODE_API void dGeomHeightfieldDataBuildByte( dHeightfieldDataID d, -01137 const unsigned char* pHeightData, int bCopyHeightData, -01138 dReal width, dReal depth, int widthSamples, int depthSamples, -01139 dReal scale, dReal offset, dReal thickness, int bWrap ); -01140 -01184 ODE_API void dGeomHeightfieldDataBuildShort( dHeightfieldDataID d, -01185 const short* pHeightData, int bCopyHeightData, -01186 dReal width, dReal depth, int widthSamples, int depthSamples, -01187 dReal scale, dReal offset, dReal thickness, int bWrap ); -01188 -01234 ODE_API void dGeomHeightfieldDataBuildSingle( dHeightfieldDataID d, -01235 const float* pHeightData, int bCopyHeightData, -01236 dReal width, dReal depth, int widthSamples, int depthSamples, -01237 dReal scale, dReal offset, dReal thickness, int bWrap ); -01238 -01284 ODE_API void dGeomHeightfieldDataBuildDouble( dHeightfieldDataID d, -01285 const double* pHeightData, int bCopyHeightData, -01286 dReal width, dReal depth, int widthSamples, int depthSamples, -01287 dReal scale, dReal offset, dReal thickness, int bWrap ); -01288 -01306 ODE_API void dGeomHeightfieldDataSetBounds( dHeightfieldDataID d, -01307 dReal minHeight, dReal maxHeight ); -01308 -01309 -01320 ODE_API void dGeomHeightfieldSetHeightfieldData( dGeomID g, dHeightfieldDataID d ); -01321 -01322 -01332 ODE_API dHeightfieldDataID dGeomHeightfieldGetHeightfieldData( dGeomID g ); -01333 -01334 -01335 -01336 /* ************************************************************************ */ -01337 /* utility functions */ -01338 -01339 ODE_API void dClosestLineSegmentPoints (const dVector3 a1, const dVector3 a2, -01340 const dVector3 b1, const dVector3 b2, -01341 dVector3 cp1, dVector3 cp2); -01342 -01343 ODE_API int dBoxTouchesBox (const dVector3 _p1, const dMatrix3 R1, -01344 const dVector3 side1, const dVector3 _p2, -01345 const dMatrix3 R2, const dVector3 side2); -01346 -01347 // The meaning of flags parameter is the same as in dCollide() -01348 ODE_API int dBoxBox (const dVector3 p1, const dMatrix3 R1, -01349 const dVector3 side1, const dVector3 p2, -01350 const dMatrix3 R2, const dVector3 side2, -01351 dVector3 normal, dReal *depth, int *return_code, -01352 int flags, dContactGeom *contact, int skip); -01353 -01354 ODE_API void dInfiniteAABB (dGeomID geom, dReal aabb[6]); -01355 ODE_API void dInitODE(void); -01356 ODE_API void dCloseODE(void); -01357 -01358 /* ************************************************************************ */ -01359 /* custom classes */ -01360 -01361 typedef void dGetAABBFn (dGeomID, dReal aabb[6]); -01362 typedef int dColliderFn (dGeomID o1, dGeomID o2, -01363 int flags, dContactGeom *contact, int skip); -01364 typedef dColliderFn * dGetColliderFnFn (int num); -01365 typedef void dGeomDtorFn (dGeomID o); -01366 typedef int dAABBTestFn (dGeomID o1, dGeomID o2, dReal aabb[6]); -01367 -01368 typedef struct dGeomClass { -01369 int bytes; -01370 dGetColliderFnFn *collider; -01371 dGetAABBFn *aabb; -01372 dAABBTestFn *aabb_test; -01373 dGeomDtorFn *dtor; -01374 } dGeomClass; -01375 -01376 ODE_API int dCreateGeomClass (const dGeomClass *classptr); -01377 ODE_API void * dGeomGetClassData (dGeomID); -01378 ODE_API dGeomID dCreateGeom (int classnum); -01379 -01380 /* ************************************************************************ */ -01381 -01382 #ifdef __cplusplus -01383 } -01384 #endif -01385 -01386 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001-2003 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef _ODE_COLLISION_SPACE_H_ -00024 #define _ODE_COLLISION_SPACE_H_ -00025 -00026 #include <ode/common.h> -00027 -00028 #ifdef __cplusplus -00029 extern "C" { -00030 #endif -00031 -00032 struct dContactGeom; -00033 -00049 typedef void dNearCallback (void *data, dGeomID o1, dGeomID o2); -00050 -00051 -00052 ODE_API dSpaceID dSimpleSpaceCreate (dSpaceID space); -00053 ODE_API dSpaceID dHashSpaceCreate (dSpaceID space); -00054 ODE_API dSpaceID dQuadTreeSpaceCreate (dSpaceID space, dVector3 Center, dVector3 Extents, int Depth); -00055 -00056 ODE_API void dSpaceDestroy (dSpaceID); -00057 -00058 ODE_API void dHashSpaceSetLevels (dSpaceID space, int minlevel, int maxlevel); -00059 ODE_API void dHashSpaceGetLevels (dSpaceID space, int *minlevel, int *maxlevel); -00060 -00061 ODE_API void dSpaceSetCleanup (dSpaceID space, int mode); -00062 ODE_API int dSpaceGetCleanup (dSpaceID space); -00063 -00064 ODE_API void dSpaceAdd (dSpaceID, dGeomID); -00065 ODE_API void dSpaceRemove (dSpaceID, dGeomID); -00066 ODE_API int dSpaceQuery (dSpaceID, dGeomID); -00067 ODE_API void dSpaceClean (dSpaceID); -00068 ODE_API int dSpaceGetNumGeoms (dSpaceID); -00069 ODE_API dGeomID dSpaceGetGeom (dSpaceID, int i); -00070 -00071 -00072 #ifdef __cplusplus -00073 } -00074 #endif -00075 -00076 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001-2003 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 /* -00024 * TriMesh code by Erwin de Vries. -00025 * -00026 * Trimesh data. -00027 * This is where the actual vertexdata (pointers), and BV tree is stored. -00028 * Vertices should be single precision! -00029 * This should be more sophisticated, so that the user can easyly implement -00030 * another collision library, but this is a lot of work, and also costs some -00031 * performance because some data has to be copied. -00032 */ -00033 -00034 #ifndef _ODE_COLLISION_TRIMESH_H_ -00035 #define _ODE_COLLISION_TRIMESH_H_ -00036 -00037 #ifdef __cplusplus -00038 extern "C" { -00039 #endif -00040 -00041 /* -00042 * Data storage for triangle meshes. -00043 */ -00044 struct dxTriMeshData; -00045 typedef struct dxTriMeshData* dTriMeshDataID; -00046 -00047 /* -00048 * These dont make much sense now, but they will later when we add more -00049 * features. -00050 */ -00051 ODE_API dTriMeshDataID dGeomTriMeshDataCreate(void); -00052 ODE_API void dGeomTriMeshDataDestroy(dTriMeshDataID g); -00053 -00054 -00055 -00056 enum { TRIMESH_FACE_NORMALS }; -00057 ODE_API void dGeomTriMeshDataSet(dTriMeshDataID g, int data_id, void* in_data); -00058 ODE_API void* dGeomTriMeshDataGet(dTriMeshDataID g, int data_id); -00059 -00060 -00061 -00067 ODE_API void dGeomTriMeshSetLastTransform( dGeomID g, dMatrix4 last_trans ); -00068 ODE_API dReal* dGeomTriMeshGetLastTransform( dGeomID g ); -00069 -00070 /* -00071 * Build TriMesh data with single precision used in vertex data . -00072 */ -00073 ODE_API void dGeomTriMeshDataBuildSingle(dTriMeshDataID g, -00074 const void* Vertices, int VertexStride, int VertexCount, -00075 const void* Indices, int IndexCount, int TriStride); -00076 /* same again with a normals array (used as trimesh-trimesh optimization) */ -00077 ODE_API void dGeomTriMeshDataBuildSingle1(dTriMeshDataID g, -00078 const void* Vertices, int VertexStride, int VertexCount, -00079 const void* Indices, int IndexCount, int TriStride, -00080 const void* Normals); -00081 /* -00082 * Build TriMesh data with double pricision used in vertex data . -00083 */ -00084 ODE_API void dGeomTriMeshDataBuildDouble(dTriMeshDataID g, -00085 const void* Vertices, int VertexStride, int VertexCount, -00086 const void* Indices, int IndexCount, int TriStride); -00087 /* same again with a normals array (used as trimesh-trimesh optimization) */ -00088 ODE_API void dGeomTriMeshDataBuildDouble1(dTriMeshDataID g, -00089 const void* Vertices, int VertexStride, int VertexCount, -00090 const void* Indices, int IndexCount, int TriStride, -00091 const void* Normals); -00092 -00093 /* -00094 * Simple build. Single/double precision based on dSINGLE/dDOUBLE! -00095 */ -00096 ODE_API void dGeomTriMeshDataBuildSimple(dTriMeshDataID g, -00097 const dReal* Vertices, int VertexCount, -00098 const int* Indices, int IndexCount); -00099 /* same again with a normals array (used as trimesh-trimesh optimization) */ -00100 ODE_API void dGeomTriMeshDataBuildSimple1(dTriMeshDataID g, -00101 const dReal* Vertices, int VertexCount, -00102 const int* Indices, int IndexCount, -00103 const int* Normals); -00104 -00105 /* Preprocess the trimesh data to remove mark unnecessary edges and vertices */ -00106 ODE_API void dGeomTriMeshDataPreprocess(dTriMeshDataID g); -00107 /* Get and set the internal preprocessed trimesh data buffer, for loading and saving */ -00108 ODE_API void dGeomTriMeshDataGetBuffer(dTriMeshDataID g, unsigned char** buf, int* bufLen); -00109 ODE_API void dGeomTriMeshDataSetBuffer(dTriMeshDataID g, unsigned char* buf); -00110 -00111 -00112 /* -00113 * Per triangle callback. Allows the user to say if he wants a collision with -00114 * a particular triangle. -00115 */ -00116 typedef int dTriCallback(dGeomID TriMesh, dGeomID RefObject, int TriangleIndex); -00117 ODE_API void dGeomTriMeshSetCallback(dGeomID g, dTriCallback* Callback); -00118 ODE_API dTriCallback* dGeomTriMeshGetCallback(dGeomID g); -00119 -00120 /* -00121 * Per object callback. Allows the user to get the list of triangles in 1 -00122 * shot. Maybe we should remove this one. -00123 */ -00124 typedef void dTriArrayCallback(dGeomID TriMesh, dGeomID RefObject, const int* TriIndices, int TriCount); -00125 ODE_API void dGeomTriMeshSetArrayCallback(dGeomID g, dTriArrayCallback* ArrayCallback); -00126 ODE_API dTriArrayCallback* dGeomTriMeshGetArrayCallback(dGeomID g); -00127 -00128 /* -00129 * Ray callback. -00130 * Allows the user to say if a ray collides with a triangle on barycentric -00131 * coords. The user can for example sample a texture with alpha transparency -00132 * to determine if a collision should occur. -00133 */ -00134 typedef int dTriRayCallback(dGeomID TriMesh, dGeomID Ray, int TriangleIndex, dReal u, dReal v); -00135 ODE_API void dGeomTriMeshSetRayCallback(dGeomID g, dTriRayCallback* Callback); -00136 ODE_API dTriRayCallback* dGeomTriMeshGetRayCallback(dGeomID g); -00137 -00138 /* -00139 * Trimesh class -00140 * Construction. Callbacks are optional. -00141 */ -00142 ODE_API dGeomID dCreateTriMesh(dSpaceID space, dTriMeshDataID Data, dTriCallback* Callback, dTriArrayCallback* ArrayCallback, dTriRayCallback* RayCallback); -00143 -00144 ODE_API void dGeomTriMeshSetData(dGeomID g, dTriMeshDataID Data); -00145 ODE_API dTriMeshDataID dGeomTriMeshGetData(dGeomID g); -00146 -00147 -00148 // enable/disable/check temporal coherence -00149 ODE_API void dGeomTriMeshEnableTC(dGeomID g, int geomClass, int enable); -00150 ODE_API int dGeomTriMeshIsTCEnabled(dGeomID g, int geomClass); -00151 -00152 /* -00153 * Clears the internal temporal coherence caches. When a geom has its -00154 * collision checked with a trimesh once, data is stored inside the trimesh. -00155 * With large worlds with lots of seperate objects this list could get huge. -00156 * We should be able to do this automagically. -00157 */ -00158 ODE_API void dGeomTriMeshClearTCCache(dGeomID g); -00159 -00160 -00161 /* -00162 * returns the TriMeshDataID -00163 */ -00164 ODE_API dTriMeshDataID dGeomTriMeshGetTriMeshDataID(dGeomID g); -00165 -00166 /* -00167 * Gets a triangle. -00168 */ -00169 ODE_API void dGeomTriMeshGetTriangle(dGeomID g, int Index, dVector3* v0, dVector3* v1, dVector3* v2); -00170 -00171 /* -00172 * Gets the point on the requested triangle and the given barycentric -00173 * coordinates. -00174 */ -00175 ODE_API void dGeomTriMeshGetPoint(dGeomID g, int Index, dReal u, dReal v, dVector3 Out); -00176 -00177 /* -00178 -00179 This is how the strided data works: -00180 -00181 struct StridedVertex{ -00182 dVector3 Vertex; -00183 // Userdata -00184 }; -00185 int VertexStride = sizeof(StridedVertex); -00186 -00187 struct StridedTri{ -00188 int Indices[3]; -00189 // Userdata -00190 }; -00191 int TriStride = sizeof(StridedTri); -00192 -00193 */ -00194 -00195 -00196 ODE_API int dGeomTriMeshGetTriangleCount (dGeomID g); -00197 -00198 ODE_API void dGeomTriMeshDataUpdate(dTriMeshDataID g); -00199 -00200 #ifdef __cplusplus -00201 } -00202 #endif -00203 -00204 #endif /* _ODE_COLLISION_TRIMESH_H_ */ -00205 -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef _ODE_COMMON_H_ -00024 #define _ODE_COMMON_H_ -00025 #include <ode/config.h> -00026 #include <ode/error.h> -00027 #include <math.h> -00028 -00029 #ifdef __cplusplus -00030 extern "C" { -00031 #endif -00032 -00033 -00034 /* configuration stuff */ -00035 -00036 /* the efficient alignment. most platforms align data structures to some -00037 * number of bytes, but this is not always the most efficient alignment. -00038 * for example, many x86 compilers align to 4 bytes, but on a pentium it -00039 * is important to align doubles to 8 byte boundaries (for speed), and -00040 * the 4 floats in a SIMD register to 16 byte boundaries. many other -00041 * platforms have similar behavior. setting a larger alignment can waste -00042 * a (very) small amount of memory. NOTE: this number must be a power of -00043 * two. this is set to 16 by default. -00044 */ -00045 #define EFFICIENT_ALIGNMENT 16 -00046 -00047 -00048 /* constants */ -00049 -00050 /* pi and 1/sqrt(2) are defined here if necessary because they don't get -00051 * defined in <math.h> on some platforms (like MS-Windows) -00052 */ -00053 -00054 #ifndef M_PI -00055 #define M_PI REAL(3.1415926535897932384626433832795029) -00056 #endif -00057 #ifndef M_SQRT1_2 -00058 #define M_SQRT1_2 REAL(0.7071067811865475244008443621048490) -00059 #endif -00060 -00061 -00062 /* debugging: -00063 * IASSERT is an internal assertion, i.e. a consistency check. if it fails -00064 * we want to know where. -00065 * UASSERT is a user assertion, i.e. if it fails a nice error message -00066 * should be printed for the user. -00067 * AASSERT is an arguments assertion, i.e. if it fails "bad argument(s)" -00068 * is printed. -00069 * DEBUGMSG just prints out a message -00070 */ -00071 -00072 #ifndef dNODEBUG -00073 #ifdef __GNUC__ -00074 #define dIASSERT(a) if (!(a)) dDebug (d_ERR_IASSERT, \ -00075 "assertion \"" #a "\" failed in %s() [%s]",__FUNCTION__,__FILE__); -00076 #define dUASSERT(a,msg) if (!(a)) dDebug (d_ERR_UASSERT, \ -00077 msg " in %s()", __FUNCTION__); -00078 #define dDEBUGMSG(msg) dMessage (d_ERR_UASSERT, \ -00079 msg " in %s() File %s Line %d", __FUNCTION__, __FILE__,__LINE__); -00080 #else -00081 #define dIASSERT(a) if (!(a)) dDebug (d_ERR_IASSERT, \ -00082 "assertion \"" #a "\" failed in %s:%d",__FILE__,__LINE__); -00083 #define dUASSERT(a,msg) if (!(a)) dDebug (d_ERR_UASSERT, \ -00084 msg " (%s:%d)", __FILE__,__LINE__); -00085 #define dDEBUGMSG(msg) dMessage (d_ERR_UASSERT, \ -00086 msg " (%s:%d)", __FILE__,__LINE__); -00087 #endif -00088 #else -00089 #define dIASSERT(a) ; -00090 #define dUASSERT(a,msg) ; -00091 #define dDEBUGMSG(msg) ; -00092 #endif -00093 #define dAASSERT(a) dUASSERT(a,"Bad argument(s)") -00094 -00095 // Macro used to suppress unused variable warning -00096 #define dVARIABLEUSED(a) ((void)a) -00097 -00098 /* floating point data type, vector, matrix and quaternion types */ -00099 -00100 #if defined(dSINGLE) -00101 typedef float dReal; -00102 #ifdef dDOUBLE -00103 #error You can only #define dSINGLE or dDOUBLE, not both. -00104 #endif // dDOUBLE -00105 #elif defined(dDOUBLE) -00106 typedef double dReal; -00107 #else -00108 #error You must #define dSINGLE or dDOUBLE -00109 #endif -00110 -00111 // Detect if we've got both trimesh engines enabled. -00112 #if dTRIMESH_ENABLED -00113 #if dTRIMESH_OPCODE && dTRIMESH_GIMPACT -00114 #error You can only #define dTRIMESH_OPCODE or dTRIMESH_GIMPACT, not both. -00115 #endif -00116 #endif // dTRIMESH_ENABLED -00117 -00118 /* round an integer up to a multiple of 4, except that 0 and 1 are unmodified -00119 * (used to compute matrix leading dimensions) -00120 */ -00121 #define dPAD(a) (((a) > 1) ? ((((a)-1)|3)+1) : (a)) -00122 -00123 /* these types are mainly just used in headers */ -00124 typedef dReal dVector3[4]; -00125 typedef dReal dVector4[4]; -00126 typedef dReal dMatrix3[4*3]; -00127 typedef dReal dMatrix4[4*4]; -00128 typedef dReal dMatrix6[8*6]; -00129 typedef dReal dQuaternion[4]; -00130 -00131 -00132 /* precision dependent scalar math functions */ -00133 -00134 #if defined(dSINGLE) -00135 -00136 #define REAL(x) (x ## f) /* form a constant */ -00137 #define dRecip(x) ((1.0f/(x))) /* reciprocal */ -00138 #define dSqrt(x) (sqrtf(x)) /* square root */ -00139 #define dRecipSqrt(x) ((1.0f/sqrtf(x))) /* reciprocal square root */ -00140 #define dSin(x) (sinf(x)) /* sine */ -00141 #define dCos(x) (cosf(x)) /* cosine */ -00142 #define dFabs(x) (fabsf(x)) /* absolute value */ -00143 #define dAtan2(y,x) (atan2f(y,x)) /* arc tangent with 2 args */ -00144 #define dFMod(a,b) (fmodf(a,b)) /* modulo */ -00145 #define dFloor(x) floorf(x) /* floor */ -00146 -00147 #ifdef HAVE___ISNANF -00148 #define dIsNan(x) (__isnanf(x)) -00149 #elif defined(HAVE__ISNANF) -00150 #define dIsNan(x) (_isnanf(x)) -00151 #elif defined(HAVE_ISNANF) -00152 #define dIsNan(x) (isnanf(x)) -00153 #else -00154 /* -00155 fall back to _isnan which is the VC way, -00156 this may seem redundant since we already checked -00157 for _isnan before, but if isnan is detected by -00158 configure but is not found during compilation -00159 we should always make sure we check for __isnanf, -00160 _isnanf and isnanf in that order before falling -00161 back to a default -00162 */ -00163 #define dIsNan(x) (_isnan(x)) -00164 #endif -00165 -00166 #define dCopySign(a,b) ((dReal)copysignf(a,b)) -00167 -00168 #elif defined(dDOUBLE) -00169 -00170 #define REAL(x) (x) -00171 #define dRecip(x) (1.0/(x)) -00172 #define dSqrt(x) sqrt(x) -00173 #define dRecipSqrt(x) (1.0/sqrt(x)) -00174 #define dSin(x) sin(x) -00175 #define dCos(x) cos(x) -00176 #define dFabs(x) fabs(x) -00177 #define dAtan2(y,x) atan2((y),(x)) -00178 #define dFMod(a,b) (fmod((a),(b))) -00179 #define dFloor(x) floor(x) -00180 -00181 #ifdef HAVE___ISNAN -00182 #define dIsNan(x) (__isnan(x)) -00183 #elif defined(HAVE__ISNAN) -00184 #define dIsNan(x) (_isnan(x)) -00185 #elif defined(HAVE_ISNAN) -00186 #define dIsNan(x) (isnan(x)) -00187 #else -00188 #define dIsNan(x) (_isnan(x)) -00189 #endif -00190 -00191 #define dCopySign(a,b) (copysign((a),(b))) -00192 -00193 #else -00194 #error You must #define dSINGLE or dDOUBLE -00195 #endif -00196 -00197 -00198 /* utility */ -00199 -00200 -00201 /* round something up to be a multiple of the EFFICIENT_ALIGNMENT */ -00202 -00203 #define dEFFICIENT_SIZE(x) ((((x)-1)|(EFFICIENT_ALIGNMENT-1))+1) -00204 -00205 -00206 /* alloca aligned to the EFFICIENT_ALIGNMENT. note that this can waste -00207 * up to 15 bytes per allocation, depending on what alloca() returns. -00208 */ -00209 -00210 #define dALLOCA16(n) \ -00211 ((char*)dEFFICIENT_SIZE(((size_t)(alloca((n)+(EFFICIENT_ALIGNMENT-1)))))) -00212 -00213 -00214 // Use the error-checking memory allocation system. Because this system uses heap -00215 // (malloc) instead of stack (alloca), it is slower. However, it allows you to -00216 // simulate larger scenes, as well as handle out-of-memory errors in a somewhat -00217 // graceful manner -00218 -00219 // #define dUSE_MALLOC_FOR_ALLOCA -00220 -00221 #ifdef dUSE_MALLOC_FOR_ALLOCA -00222 enum { -00223 d_MEMORY_OK = 0, /* no memory errors */ -00224 d_MEMORY_OUT_OF_MEMORY /* malloc failed due to out of memory error */ -00225 }; -00226 -00227 #endif -00228 -00229 -00230 -00231 /* internal object types (all prefixed with `dx') */ -00232 -00233 struct dxWorld; /* dynamics world */ -00234 struct dxSpace; /* collision space */ -00235 struct dxBody; /* rigid body (dynamics object) */ -00236 struct dxGeom; /* geometry (collision object) */ -00237 struct dxJoint; -00238 struct dxJointNode; -00239 struct dxJointGroup; -00240 -00241 typedef struct dxWorld *dWorldID; -00242 typedef struct dxSpace *dSpaceID; -00243 typedef struct dxBody *dBodyID; -00244 typedef struct dxGeom *dGeomID; -00245 typedef struct dxJoint *dJointID; -00246 typedef struct dxJointGroup *dJointGroupID; -00247 -00248 -00249 /* error numbers */ -00250 -00251 enum { -00252 d_ERR_UNKNOWN = 0, /* unknown error */ -00253 d_ERR_IASSERT, /* internal assertion failed */ -00254 d_ERR_UASSERT, /* user assertion failed */ -00255 d_ERR_LCP /* user assertion failed */ -00256 }; -00257 -00258 -00259 /* joint type numbers */ -00260 -00261 enum { -00262 dJointTypeNone = 0, /* or "unknown" */ -00263 dJointTypeBall, -00264 dJointTypeHinge, -00265 dJointTypeSlider, -00266 dJointTypeContact, -00267 dJointTypeUniversal, -00268 dJointTypeHinge2, -00269 dJointTypeFixed, -00270 dJointTypeNull, -00271 dJointTypeAMotor, -00272 dJointTypeLMotor, -00273 dJointTypePlane2D, -00274 dJointTypePR -00275 }; -00276 -00277 -00278 /* an alternative way of setting joint parameters, using joint parameter -00279 * structures and member constants. we don't actually do this yet. -00280 */ -00281 -00282 /* -00283 typedef struct dLimot { -00284 int mode; -00285 dReal lostop, histop; -00286 dReal vel, fmax; -00287 dReal fudge_factor; -00288 dReal bounce, soft; -00289 dReal suspension_erp, suspension_cfm; -00290 } dLimot; -00291 -00292 enum { -00293 dLimotLoStop = 0x0001, -00294 dLimotHiStop = 0x0002, -00295 dLimotVel = 0x0004, -00296 dLimotFMax = 0x0008, -00297 dLimotFudgeFactor = 0x0010, -00298 dLimotBounce = 0x0020, -00299 dLimotSoft = 0x0040 -00300 }; -00301 */ -00302 -00303 -00304 /* standard joint parameter names. why are these here? - because we don't want -00305 * to include all the joint function definitions in joint.cpp. hmmmm. -00306 * MSVC complains if we call D_ALL_PARAM_NAMES_X with a blank second argument, -00307 * which is why we have the D_ALL_PARAM_NAMES macro as well. please copy and -00308 * paste between these two. -00309 */ -00310 -00311 #define D_ALL_PARAM_NAMES(start) \ -00312 /* parameters for limits and motors */ \ -00313 dParamLoStop = start, \ -00314 dParamHiStop, \ -00315 dParamVel, \ -00316 dParamFMax, \ -00317 dParamFudgeFactor, \ -00318 dParamBounce, \ -00319 dParamCFM, \ -00320 dParamStopERP, \ -00321 dParamStopCFM, \ -00322 /* parameters for suspension */ \ -00323 dParamSuspensionERP, \ -00324 dParamSuspensionCFM, \ -00325 dParamERP, \ -00326 -00327 #define D_ALL_PARAM_NAMES_X(start,x) \ -00328 /* parameters for limits and motors */ \ -00329 dParamLoStop ## x = start, \ -00330 dParamHiStop ## x, \ -00331 dParamVel ## x, \ -00332 dParamFMax ## x, \ -00333 dParamFudgeFactor ## x, \ -00334 dParamBounce ## x, \ -00335 dParamCFM ## x, \ -00336 dParamStopERP ## x, \ -00337 dParamStopCFM ## x, \ -00338 /* parameters for suspension */ \ -00339 dParamSuspensionERP ## x, \ -00340 dParamSuspensionCFM ## x, \ -00341 dParamERP ## x, -00342 -00343 enum { -00344 D_ALL_PARAM_NAMES(0) -00345 D_ALL_PARAM_NAMES_X(0x100,2) -00346 D_ALL_PARAM_NAMES_X(0x200,3) -00347 -00348 /* add a multiple of this constant to the basic parameter numbers to get -00349 * the parameters for the second, third etc axes. -00350 */ -00351 dParamGroup=0x100 -00352 }; -00353 -00354 -00355 /* angular motor mode numbers */ -00356 -00357 enum{ -00358 dAMotorUser = 0, -00359 dAMotorEuler = 1 -00360 }; -00361 -00362 -00363 /* joint force feedback information */ -00364 -00365 typedef struct dJointFeedback { -00366 dVector3 f1; /* force applied to body 1 */ -00367 dVector3 t1; /* torque applied to body 1 */ -00368 dVector3 f2; /* force applied to body 2 */ -00369 dVector3 t2; /* torque applied to body 2 */ -00370 } dJointFeedback; -00371 -00372 -00373 /* private functions that must be implemented by the collision library: -00374 * (1) indicate that a geom has moved, (2) get the next geom in a body list. -00375 * these functions are called whenever the position of geoms connected to a -00376 * body have changed, e.g. with dBodySetPosition(), dBodySetRotation(), or -00377 * when the ODE step function updates the body state. -00378 */ -00379 -00380 void dGeomMoved (dGeomID); -00381 dGeomID dGeomGetBodyNext (dGeomID); -00382 -00383 -00384 #ifdef __cplusplus -00385 } -00386 #endif -00387 -00388 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef _ODE_COMPATIBILITY_H_ -00024 #define _ODE_COMPATIBILITY_H_ -00025 -00026 /* -00027 * ODE's backward compatibility system ensures that as ODE's API -00028 * evolves, user code will not break. -00029 */ -00030 -00031 /* -00032 * These new rotation function names are more consistent with the -00033 * rest of the API. -00034 */ -00035 #define dQtoR(q,R) dRfromQ((R),(q)) -00036 #define dRtoQ(R,q) dQfromR((q),(R)) -00037 #define dWtoDQ(w,q,dq) dDQfromW((dq),(w),(q)) -00038 -00039 -00040 #endif -
00001 /* This file was autogenerated by Premake */ -00002 #ifndef _ODE_CONFIG_H_ -00003 #define _ODE_CONFIG_H_ -00004 -00005 -00006 /****************************************************************** -00007 * CONFIGURATON SETTINGS - you can change these, and then rebuild -00008 * ODE to modify the behavior of the library. -00009 * -00010 * dSINGLE/dDOUBLE - force ODE to use single-precision (float) -00011 * or double-precision (double) for numbers. -00012 * Only one should be defined. -00013 * -00014 * dTRIMESH_ENABLED - enable/disable trimesh support -00015 * dTRIMESH_OPCODE - use the OPCODE trimesh engine -00016 * dTRIMESH_GIMPACT - use the GIMPACT trimesh engine -00017 * Only one trimesh engine should be enabled. -00018 * -00019 * dUSE_MALLOC_FOR_ALLOCA (experimental)- -00020 * Use malloc() instead of alloca(). Slower, -00021 * but allows for larger systems and more -00022 * graceful out-of-memory handling. -00023 * -00024 * dTRIMESH_OPCODE_USE_NEW_TRIMESH_TRIMESH_COLLIDER (experimental)- -00025 * Use an alternative trimesh-trimesh collider -00026 * which should yield better results. -00027 * -00028 ******************************************************************/ -00029 -00030 #define dSINGLE -00031 /* #define dDOUBLE */ -00032 -00033 #define dTRIMESH_ENABLED 1 -00034 #define dTRIMESH_OPCODE 1 -00035 -00036 #define dTRIMESH_OPCODE_USE_NEW_TRIMESH_TRIMESH_COLLIDER 0 -00037 -00038 /* #define dUSE_MALLOC_FOR_ALLOCA */ -00039 -00040 -00041 /****************************************************************** -00042 * SYSTEM SETTINGS - you shouldn't need to change these. If you -00043 * run into an issue with these settings, please report it to -00044 * the ODE bug tracker at: -00045 * http://sf.net/tracker/?group_id=24884&atid=382799 -00046 ******************************************************************/ -00047 -00048 /* Try to identify the platform */ -00049 #if defined(_XENON) -00050 #define ODE_PLATFORM_XBOX360 -00051 #elif defined(SN_TARGET_PSP_HW) -00052 #define ODE_PLATFORM_PSP -00053 #elif defined(SN_TARGET_PS3) -00054 #define ODE_PLATFORM_PS3 -00055 #elif defined(_MSC_VER) || defined(__CYGWIN32__) || defined(__MINGW32__) -00056 #define ODE_PLATFORM_WINDOWS -00057 #elif defined(__linux__) -00058 #define ODE_PLATFORM_LINUX -00059 #elif defined(__APPLE__) && defined(__MACH__) -00060 #define ODE_PLATFORM_OSX -00061 #else -00062 #error "Need some help identifying the platform!" -00063 #endif -00064 -00065 /* Additional platform defines used in the code */ -00066 #if defined(ODE_PLATFORM_WINDOWS) && !defined(WIN32) -00067 #define WIN32 -00068 #endif -00069 -00070 #if defined(__CYGWIN32__) || defined(__MINGW32__) -00071 #define CYGWIN -00072 #endif -00073 -00074 #if defined(ODE_PLATFORM_OSX) -00075 #define macintosh -00076 #endif -00077 -00078 -00079 /* Define a DLL export symbol for those platforms that need it */ -00080 #if defined(ODE_PLATFORM_WINDOWS) -00081 #if defined(ODE_DLL) -00082 #define ODE_API __declspec(dllexport) -00083 #elif !defined(ODE_LIB) -00084 #define ODE_DLL_API __declspec(dllimport) -00085 #endif -00086 #endif -00087 -00088 #if !defined(ODE_API) -00089 #define ODE_API -00090 #endif -00091 -00092 -00093 /* Pull in the standard headers */ -00094 #include <stdio.h> -00095 #include <stdlib.h> -00096 #include <stdarg.h> -00097 #include <math.h> -00098 #include <string.h> -00099 #include <float.h> -00100 -00101 #if !defined(ODE_PLATFORM_PS3) -00102 #include <malloc.h> -00103 #endif -00104 -00105 #if !defined(ODE_PLATFORM_WINDOWS) -00106 #include <alloca.h> -00107 #endif -00108 -00109 -00110 /* Visual C does not define these functions */ -00111 #if defined(_MSC_VER) -00112 #define copysignf _copysign -00113 #define copysign _copysign -00114 #endif -00115 -00116 -00117 /* Define a value for infinity */ -00118 #if defined(HUGE_VALF) -00119 #define ODE_INFINITY4 HUGE_VALF -00120 #define ODE_INFINITY8 HUGE_VAL -00121 #elif defined(FLT_MAX) -00122 #define ODE_INFINITY4 FLT_MAX -00123 #define ODE_INFINITY8 DBL_MAX -00124 #else -00125 static union { unsigned char __c[4]; float __f; } __ode_huge_valf = {{0,0,0x80,0x7f}}; -00126 static union { unsigned char __c[8]; double __d; } __ode_huge_val = {{0,0,0,0,0,0,0xf0,0x7f}}; -00127 #define ODE_INFINITY4 (__ode_huge_valf.__f) -00128 #define ODE_INFINITY8 (__ode_huge_val.__d) -00129 #endif -00130 -00131 #ifdef dSINGLE -00132 #define dInfinity ODE_INFINITY4 -00133 #define dEpsilon FLT_EPSILON -00134 #else -00135 #define dInfinity ODE_INFINITY8 -00136 #define dEpsilon DBL_EPSILON -00137 #endif -00138 -00139 -00140 /* Well-defined common data types...need to define for 64 bit systems */ -00141 #if defined(_M_IA64) || defined(__ia64__) || defined(_M_AMD64) || defined(__x86_64__) -00142 #define X86_64_SYSTEM 1 -00143 typedef int int32; -00144 typedef unsigned int uint32; -00145 typedef short int16; -00146 typedef unsigned short uint16; -00147 typedef char int8; -00148 typedef unsigned char uint8; -00149 #else -00150 typedef int int32; -00151 typedef unsigned int uint32; -00152 typedef short int16; -00153 typedef unsigned short uint16; -00154 typedef char int8; -00155 typedef unsigned char uint8; -00156 #endif -00157 -00158 /* An integer type that can be safely cast to a pointer. This definition -00159 * should be safe even on 64-bit systems */ -00160 typedef size_t intP; -00161 -00162 -00163 /* The efficient alignment. most platforms align data structures to some -00164 * number of bytes, but this is not always the most efficient alignment. -00165 * for example, many x86 compilers align to 4 bytes, but on a pentium it is -00166 * important to align doubles to 8 byte boundaries (for speed), and the 4 -00167 * floats in a SIMD register to 16 byte boundaries. many other platforms have -00168 * similar behavior. setting a larger alignment can waste a (very) small -00169 * amount of memory. NOTE: this number must be a power of two. */ -00170 #define EFFICIENT_ALIGNMENT 16 -00171 -00172 -00173 /* Define this if your system supports anonymous memory maps (linux does) */ -00174 #define MMAP_ANONYMOUS -00175 -00176 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef _ODE_CONTACT_H_ -00024 #define _ODE_CONTACT_H_ -00025 -00026 #include <ode/common.h> -00027 -00028 #ifdef __cplusplus -00029 extern "C" { -00030 #endif -00031 -00032 -00033 enum { -00034 dContactMu2 = 0x001, -00035 dContactFDir1 = 0x002, -00036 dContactBounce = 0x004, -00037 dContactSoftERP = 0x008, -00038 dContactSoftCFM = 0x010, -00039 dContactMotion1 = 0x020, -00040 dContactMotion2 = 0x040, -00041 dContactSlip1 = 0x080, -00042 dContactSlip2 = 0x100, -00043 -00044 dContactApprox0 = 0x0000, -00045 dContactApprox1_1 = 0x1000, -00046 dContactApprox1_2 = 0x2000, -00047 dContactApprox1 = 0x3000 -00048 }; -00049 -00050 -00051 typedef struct dSurfaceParameters { -00052 /* must always be defined */ -00053 int mode; -00054 dReal mu; -00055 -00056 /* only defined if the corresponding flag is set in mode */ -00057 dReal mu2; -00058 dReal bounce; -00059 dReal bounce_vel; -00060 dReal soft_erp; -00061 dReal soft_cfm; -00062 dReal motion1,motion2; -00063 dReal slip1,slip2; -00064 } dSurfaceParameters; -00065 -00066 -00081 typedef struct dContactGeom { -00082 dVector3 pos; -00083 dVector3 normal; -00084 dReal depth; -00085 dGeomID g1,g2; -00086 int side1,side2; -00087 } dContactGeom; -00088 -00089 -00090 /* contact info used by contact joint */ -00091 -00092 typedef struct dContact { -00093 dSurfaceParameters surface; -00094 dContactGeom geom; -00095 dVector3 fdir1; -00096 } dContact; -00097 -00098 -00099 #ifdef __cplusplus -00100 } -00101 #endif -00102 -00103 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001-2003 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00041 #ifndef __DRAWSTUFF_H__ -00042 #define __DRAWSTUFF_H__ -00043 -00044 /* Define a DLL export symbol for those platforms that need it */ -00045 #if defined(ODE_PLATFORM_WINDOWS) -00046 #if defined(DS_DLL) -00047 #define DS_API __declspec(dllexport) -00048 #elif !defined(DS_LIB) -00049 #define DS_DLL_API __declspec(dllimport) -00050 #endif -00051 #endif -00052 -00053 #if !defined(DS_API) -00054 #define DS_API -00055 #endif -00056 -00057 #ifdef __cplusplus -00058 extern "C" { -00059 #endif -00060 -00061 -00062 #include <drawstuff/version.h> -00063 -00064 -00065 /* texture numbers */ -00066 #define DS_NONE 0 /* uses the current color instead of a texture */ -00067 #define DS_WOOD 1 -00068 -00069 -00075 typedef struct dsFunctions { -00076 int version; /* put DS_VERSION here */ -00077 /* version 1 data */ -00078 void (*start)(); /* called before sim loop starts */ -00079 void (*step) (int pause); /* called before every frame */ -00080 void (*command) (int cmd); /* called if a command key is pressed */ -00081 void (*stop)(); /* called after sim loop exits */ -00082 /* version 2 data */ -00083 char *path_to_textures; /* if nonzero, path to texture files */ -00084 } dsFunctions; -00085 -00086 -00095 DS_API void dsSimulationLoop (int argc, char **argv, -00096 int window_width, int window_height, -00097 struct dsFunctions *fn); -00098 -00105 DS_API void dsError (char *msg, ...); -00106 -00113 DS_API void dsDebug (char *msg, ...); -00114 -00120 DS_API void dsPrint (char *msg, ...); -00121 -00130 DS_API void dsSetViewpoint (float xyz[3], float hpr[3]); -00131 -00132 -00139 DS_API void dsGetViewpoint (float xyz[3], float hpr[3]); -00140 -00149 DS_API void dsStop(); -00150 -00156 DS_API double dsElapsedTime(); -00157 -00168 DS_API void dsSetTexture (int texture_number); -00169 -00177 DS_API void dsSetColor (float red, float green, float blue); -00178 -00185 DS_API void dsSetColorAlpha (float red, float green, float blue, float alpha); -00186 -00197 DS_API void dsDrawBox (const float pos[3], const float R[12], const float sides[3]); -00198 -00206 DS_API void dsDrawSphere (const float pos[3], const float R[12], float radius); -00207 -00218 DS_API void dsDrawTriangle (const float pos[3], const float R[12], -00219 const float *v0, const float *v1, const float *v2, int solid); -00220 -00225 DS_API void dsDrawCylinder (const float pos[3], const float R[12], -00226 float length, float radius); -00227 -00232 DS_API void dsDrawCapsule (const float pos[3], const float R[12], -00233 float length, float radius); -00234 -00239 DS_API void dsDrawLine (const float pos1[3], const float pos2[3]); -00240 -00245 DS_API void dsDrawConvex(const float pos[3], const float R[12], -00246 float *_planes, -00247 unsigned int _planecount, -00248 float *_points, -00249 unsigned int _pointcount, -00250 unsigned int *_polygons); -00251 -00252 /* these drawing functions are identical to the ones above, except they take -00253 * double arrays for `pos' and `R'. -00254 */ -00255 DS_API void dsDrawBoxD (const double pos[3], const double R[12], -00256 const double sides[3]); -00257 DS_API void dsDrawSphereD (const double pos[3], const double R[12], -00258 const float radius); -00259 DS_API void dsDrawTriangleD (const double pos[3], const double R[12], -00260 const double *v0, const double *v1, const double *v2, int solid); -00261 DS_API void dsDrawCylinderD (const double pos[3], const double R[12], -00262 float length, float radius); -00263 DS_API void dsDrawCapsuleD (const double pos[3], const double R[12], -00264 float length, float radius); -00265 DS_API void dsDrawLineD (const double pos1[3], const double pos2[3]); -00266 DS_API void dsDrawConvexD(const double pos[3], const double R[12], -00267 double *_planes, -00268 unsigned int _planecount, -00269 double *_points, -00270 unsigned int _pointcount, -00271 unsigned int *_polygons); -00272 -00280 DS_API void dsSetSphereQuality (int n); /* default = 1 */ -00281 DS_API void dsSetCapsuleQuality (int n); /* default = 3 */ -00282 -00283 // Backwards compatible API -00284 #define dsDrawCappedCylinder dsDrawCapsule -00285 #define dsDrawCappedCylinderD dsDrawCapsuleD -00286 #define dsSetCappedCylinderQuality dsSetCapsuleQuality -00287 -00288 /* closing bracket for extern "C" */ -00289 #ifdef __cplusplus -00290 } -00291 #endif -00292 -00293 #endif -00294 -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 /* this comes from the `reuse' library. copy any changes back to the source */ -00024 -00025 #ifndef _ODE_ERROR_H_ -00026 #define _ODE_ERROR_H_ -00027 -00028 #include <ode/config.h> -00029 -00030 #ifdef __cplusplus -00031 extern "C" { -00032 #endif -00033 -00034 /* all user defined error functions have this type. error and debug functions -00035 * should not return. -00036 */ -00037 typedef void dMessageFunction (int errnum, const char *msg, va_list ap); -00038 -00039 /* set a new error, debug or warning handler. if fn is 0, the default handlers -00040 * are used. -00041 */ -00042 ODE_API void dSetErrorHandler (dMessageFunction *fn); -00043 ODE_API void dSetDebugHandler (dMessageFunction *fn); -00044 ODE_API void dSetMessageHandler (dMessageFunction *fn); -00045 -00046 /* return the current error, debug or warning handler. if the return value is -00047 * 0, the default handlers are in place. -00048 */ -00049 ODE_API dMessageFunction *dGetErrorHandler(void); -00050 ODE_API dMessageFunction *dGetDebugHandler(void); -00051 ODE_API dMessageFunction *dGetMessageHandler(void); -00052 -00053 /* generate a fatal error, debug trap or a message. */ -00054 ODE_API void dError (int num, const char *msg, ...); -00055 ODE_API void dDebug (int num, const char *msg, ...); -00056 ODE_API void dMessage (int num, const char *msg, ...); -00057 -00058 -00059 #ifdef __cplusplus -00060 } -00061 #endif -00062 -00063 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef _ODE_EXPORT_DIF_ -00024 #define _ODE_EXPORT_DIF_ -00025 -00026 #include <ode/common.h> -00027 -00028 -00029 ODE_API void dWorldExportDIF (dWorldID w, FILE *file, const char *world_name); -00030 -00031 -00032 #endif -
collision.h [code] | |
collision_space.h [code] | |
collision_trimesh.h [code] | |
common.h [code] | |
compatibility.h [code] | |
config.h [code] | |
contact.h [code] | |
drawstuff.h [code] | |
error.h [code] | |
export-dif.h [code] | |
mass.h [code] | |
matrix.h [code] | |
memory.h [code] | |
misc.h [code] | |
objects.h [code] | |
ode.h [code] | |
odecpp.h [code] | |
odecpp_collision.h [code] | |
odemath.h [code] | |
rotation.h [code] | |
timer.h [code] | |
version.h [code] |
-
-
Functions | |
ODE_API dReal | dBodyGetAutoDisableLinearThreshold (dBodyID) |
Get auto disable linear average threshold. | |
ODE_API void | dBodySetAutoDisableLinearThreshold (dBodyID, dReal linear_average_threshold) |
Set auto disable linear average threshold. | |
ODE_API dReal | dBodyGetAutoDisableAngularThreshold (dBodyID) |
Get auto disable angular average threshold. | |
ODE_API void | dBodySetAutoDisableAngularThreshold (dBodyID, dReal angular_average_threshold) |
Set auto disable angular average threshold. | |
ODE_API int | dBodyGetAutoDisableAverageSamplesCount (dBodyID) |
Get auto disable average size (samples count). | |
ODE_API void | dBodySetAutoDisableAverageSamplesCount (dBodyID, unsigned int average_samples_count) |
Set auto disable average buffer size (average steps). | |
ODE_API int | dBodyGetAutoDisableSteps (dBodyID) |
Get auto steps a body must be thought of as idle to disable. | |
ODE_API void | dBodySetAutoDisableSteps (dBodyID, int steps) |
Set auto disable steps. | |
ODE_API dReal | dBodyGetAutoDisableTime (dBodyID) |
Get auto disable time. | |
ODE_API void | dBodySetAutoDisableTime (dBodyID, dReal time) |
Set auto disable time. | |
ODE_API int | dBodyGetAutoDisableFlag (dBodyID) |
Get auto disable flag. | |
ODE_API void | dBodySetAutoDisableFlag (dBodyID, int do_auto_disable) |
Set auto disable flag. | |
ODE_API void | dBodySetAutoDisableDefaults (dBodyID) |
Set auto disable defaults. | |
ODE_API dWorldID | dBodyGetWorld (dBodyID) |
Retrives the world attached to te given body. | |
ODE_API dBodyID | dBodyCreate (dWorldID) |
Create a body in given world. | |
ODE_API void | dBodyDestroy (dBodyID) |
Destroy a body. | |
ODE_API void | dBodySetData (dBodyID, void *data) |
Set the body's user-data pointer. | |
ODE_API void * | dBodyGetData (dBodyID) |
Get the body's user-data pointer. | |
ODE_API void | dBodySetPosition (dBodyID, dReal x, dReal y, dReal z) |
Set position of a body. | |
ODE_API void | dBodySetRotation (dBodyID, const dMatrix3 R) |
Set the orientation of a body. | |
ODE_API void | dBodySetQuaternion (dBodyID, const dQuaternion q) |
Set the orientation of a body. | |
-ODE_API void | dBodySetLinearVel (dBodyID, dReal x, dReal y, dReal z) |
Set the linear velocity of a body. | |
-ODE_API void | dBodySetAngularVel (dBodyID, dReal x, dReal y, dReal z) |
Set the angular velocity of a body. | |
ODE_API const dReal * | dBodyGetPosition (dBodyID) |
Get the position of a body. | |
ODE_API void | dBodyCopyPosition (dBodyID body, dVector3 pos) |
Copy the position of a body into a vector. | |
ODE_API const dReal * | dBodyGetRotation (dBodyID) |
Get the rotation of a body. | |
ODE_API void | dBodyCopyRotation (dBodyID, dMatrix3 R) |
Copy the rotation of a body. | |
ODE_API const dReal * | dBodyGetQuaternion (dBodyID) |
Get the rotation of a body. | |
ODE_API void | dBodyCopyQuaternion (dBodyID body, dQuaternion quat) |
Copy the orientation of a body into a quaternion. | |
-ODE_API const dReal * | dBodyGetLinearVel (dBodyID) |
Get the linear velocity of a body. | |
-ODE_API const dReal * | dBodyGetAngularVel (dBodyID) |
Get the angular velocity of a body. | |
-ODE_API void | dBodySetMass (dBodyID, const dMass *mass) |
Set the mass of a body. | |
-ODE_API void | dBodyGetMass (dBodyID, dMass *mass) |
Get the mass of a body. | |
-ODE_API void | dBodyAddForce (dBodyID, dReal fx, dReal fy, dReal fz) |
Add force at centre of mass of body in absolute coordinates. | |
-ODE_API void | dBodyAddTorque (dBodyID, dReal fx, dReal fy, dReal fz) |
Add torque at centre of mass of body in absolute coordinates. | |
-ODE_API void | dBodyAddRelForce (dBodyID, dReal fx, dReal fy, dReal fz) |
Add force at centre of mass of body in coordinates relative to body. | |
-ODE_API void | dBodyAddRelTorque (dBodyID, dReal fx, dReal fy, dReal fz) |
Add torque at centre of mass of body in coordinates relative to body. | |
-ODE_API void | dBodyAddForceAtPos (dBodyID, dReal fx, dReal fy, dReal fz, dReal px, dReal py, dReal pz) |
Add force at specified point in body in global coordinates. | |
-ODE_API void | dBodyAddForceAtRelPos (dBodyID, dReal fx, dReal fy, dReal fz, dReal px, dReal py, dReal pz) |
Add force at specified point in body in local coordinates. | |
-ODE_API void | dBodyAddRelForceAtPos (dBodyID, dReal fx, dReal fy, dReal fz, dReal px, dReal py, dReal pz) |
Add force at specified point in body in global coordinates. | |
-ODE_API void | dBodyAddRelForceAtRelPos (dBodyID, dReal fx, dReal fy, dReal fz, dReal px, dReal py, dReal pz) |
Add force at specified point in body in local coordinates. | |
ODE_API const dReal * | dBodyGetForce (dBodyID) |
Return the current accumulated force vector. | |
ODE_API const dReal * | dBodyGetTorque (dBodyID) |
Return the current accumulated torque vector. | |
ODE_API void | dBodySetForce (dBodyID b, dReal x, dReal y, dReal z) |
Set the body force accumulation vector. | |
ODE_API void | dBodySetTorque (dBodyID b, dReal x, dReal y, dReal z) |
Set the body torque accumulation vector. | |
ODE_API void | dBodyGetRelPointPos (dBodyID, dReal px, dReal py, dReal pz, dVector3 result) |
Get world position of a relative point on body. | |
ODE_API void | dBodyGetRelPointVel (dBodyID, dReal px, dReal py, dReal pz, dVector3 result) |
Get velocity vector in global coords of a relative point on body. | |
ODE_API void | dBodyGetPointVel (dBodyID, dReal px, dReal py, dReal pz, dVector3 result) |
Get velocity vector in global coords of a globally specified point on a body. | |
ODE_API void | dBodyGetPosRelPoint (dBodyID, dReal px, dReal py, dReal pz, dVector3 result) |
takes a point in global coordinates and returns the point's position in body-relative coordinates. | |
ODE_API void | dBodyVectorToWorld (dBodyID, dReal px, dReal py, dReal pz, dVector3 result) |
Convert from local to world coordinates. | |
ODE_API void | dBodyVectorFromWorld (dBodyID, dReal px, dReal py, dReal pz, dVector3 result) |
Convert from world to local coordinates. | |
ODE_API void | dBodySetFiniteRotationMode (dBodyID, int mode) |
controls the way a body's orientation is updated at each timestep. | |
ODE_API void | dBodySetFiniteRotationAxis (dBodyID, dReal x, dReal y, dReal z) |
sets the finite rotation axis for a body. | |
ODE_API int | dBodyGetFiniteRotationMode (dBodyID) |
Get the way a body's orientation is updated each timestep. | |
ODE_API void | dBodyGetFiniteRotationAxis (dBodyID, dVector3 result) |
Get the finite rotation axis. | |
ODE_API int | dBodyGetNumJoints (dBodyID b) |
Get the number of joints that are attached to this body. | |
ODE_API dJointID | dBodyGetJoint (dBodyID, int index) |
Return a joint attached to this body, given by index. | |
ODE_API void | dBodyEnable (dBodyID) |
Manually enable a body. | |
ODE_API void | dBodyDisable (dBodyID) |
Manually disable a body. | |
ODE_API int | dBodyIsEnabled (dBodyID) |
Check wether a body is enabled. | |
ODE_API void | dBodySetGravityMode (dBodyID b, int mode) |
Set whether the body is influenced by the world's gravity or not. | |
ODE_API int | dBodyGetGravityMode (dBodyID b) |
Get whether the body is influenced by the world's gravity or not. |
-
-
-Note that the shape of a rigid body is not a dynamical property (except insofar as it influences the various mass properties). It is only collision detection that cares about the detailed shape of the body.
ODE_API void dBodyCopyPosition | -( | -dBodyID | -body, | -|
- | - | dVector3 | -pos | - |
- | ) | -- |
-Copy the position of a body into a vector. -
-
body | the body to query | |
pos | a copy of the body position |
ODE_API void dBodyCopyQuaternion | -( | -dBodyID | -body, | -|
- | - | dQuaternion | -quat | - |
- | ) | -- |
-Copy the orientation of a body into a quaternion. -
-
body | the body to query | |
quat | a copy of the orientation quaternion |
ODE_API void dBodyCopyRotation | -( | -dBodyID | -, | -|
- | - | dMatrix3 | -R | - |
- | ) | -- |
-Copy the rotation of a body. -
-
body | the body to query | |
R | a copy of the rotation matrix |
ODE_API dBodyID dBodyCreate | -( | -dWorldID | -- | ) | -- |
-Create a body in given world. -
-
ODE_API void dBodyDestroy | -( | -dBodyID | -- | ) | -- |
-Destroy a body. -
-
ODE_API void dBodyDisable | -( | -dBodyID | -- | ) | -- |
-Manually disable a body. -
-
ODE_API void dBodyEnable | -( | -dBodyID | -- | ) | -- |
-Manually enable a body. -
-
dBodyID | identification of body. |
ODE_API dReal dBodyGetAutoDisableAngularThreshold | -( | -dBodyID | -- | ) | -- |
-Get auto disable angular average threshold. -
-
ODE_API int dBodyGetAutoDisableAverageSamplesCount | -( | -dBodyID | -- | ) | -- |
-Get auto disable average size (samples count). -
-
ODE_API int dBodyGetAutoDisableFlag | -( | -dBodyID | -- | ) | -- |
-Get auto disable flag. -
-
ODE_API dReal dBodyGetAutoDisableLinearThreshold | -( | -dBodyID | -- | ) | -- |
-Get auto disable linear average threshold. -
-
ODE_API int dBodyGetAutoDisableSteps | -( | -dBodyID | -- | ) | -- |
-Get auto steps a body must be thought of as idle to disable. -
-
ODE_API dReal dBodyGetAutoDisableTime | -( | -dBodyID | -- | ) | -- |
-Get auto disable time. -
-
ODE_API void* dBodyGetData | -( | -dBodyID | -- | ) | -- |
-Get the body's user-data pointer. -
-
ODE_API void dBodyGetFiniteRotationAxis | -( | -dBodyID | -, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Get the finite rotation axis. -
-
result | will contain the axis. |
ODE_API int dBodyGetFiniteRotationMode | -( | -dBodyID | -- | ) | -- |
-Get the way a body's orientation is updated each timestep. -
-
ODE_API const dReal* dBodyGetForce | -( | -dBodyID | -- | ) | -- |
-Return the current accumulated force vector. -
-
ODE_API int dBodyGetGravityMode | -( | -dBodyID | -b | -) | -- |
-Get whether the body is influenced by the world's gravity or not. -
-
ODE_API dJointID dBodyGetJoint | -( | -dBodyID | -, | -|
- | - | int | -index | - |
- | ) | -- |
-Return a joint attached to this body, given by index. -
-
index | valid range is 0 to n-1 where n is the value returned by dBodyGetNumJoints(). |
ODE_API int dBodyGetNumJoints | -( | -dBodyID | -b | -) | -- |
-Get the number of joints that are attached to this body. -
-
ODE_API void dBodyGetPointVel | -( | -dBodyID | -, | -|
- | - | dReal | -px, | -|
- | - | dReal | -py, | -|
- | - | dReal | -pz, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Get velocity vector in global coords of a globally specified point on a body. -
-
result | will contain the result. |
ODE_API const dReal* dBodyGetPosition | -( | -dBodyID | -- | ) | -- |
-Get the position of a body. -
-
ODE_API void dBodyGetPosRelPoint | -( | -dBodyID | -, | -|
- | - | dReal | -px, | -|
- | - | dReal | -py, | -|
- | - | dReal | -pz, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-takes a point in global coordinates and returns the point's position in body-relative coordinates. -
-
result | will contain the result. |
ODE_API const dReal* dBodyGetQuaternion | -( | -dBodyID | -- | ) | -- |
-Get the rotation of a body. -
-
ODE_API void dBodyGetRelPointPos | -( | -dBodyID | -, | -|
- | - | dReal | -px, | -|
- | - | dReal | -py, | -|
- | - | dReal | -pz, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Get world position of a relative point on body. -
-
result | will contain the result. |
ODE_API void dBodyGetRelPointVel | -( | -dBodyID | -, | -|
- | - | dReal | -px, | -|
- | - | dReal | -py, | -|
- | - | dReal | -pz, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Get velocity vector in global coords of a relative point on body. -
-
result | will contain the result. |
ODE_API const dReal* dBodyGetRotation | -( | -dBodyID | -- | ) | -- |
-Get the rotation of a body. -
-
ODE_API const dReal* dBodyGetTorque | -( | -dBodyID | -- | ) | -- |
-Return the current accumulated torque vector. -
-
ODE_API dWorldID dBodyGetWorld | -( | -dBodyID | -- | ) | -- |
-Retrives the world attached to te given body. -
-
ODE_API int dBodyIsEnabled | -( | -dBodyID | -- | ) | -- |
-Check wether a body is enabled. -
-
ODE_API void dBodySetAutoDisableAngularThreshold | -( | -dBodyID | -, | -|
- | - | dReal | -angular_average_threshold | - |
- | ) | -- |
-Set auto disable angular average threshold. -
-
ODE_API void dBodySetAutoDisableAverageSamplesCount | -( | -dBodyID | -, | -|
- | - | unsigned int | -average_samples_count | - |
- | ) | -- |
-Set auto disable average buffer size (average steps). -
-
average_samples_count | the nr of samples to review. |
ODE_API void dBodySetAutoDisableDefaults | -( | -dBodyID | -- | ) | -- |
-Set auto disable defaults. -
-
ODE_API void dBodySetAutoDisableFlag | -( | -dBodyID | -, | -|
- | - | int | -do_auto_disable | - |
- | ) | -- |
-Set auto disable flag. -
-
do_auto_disable | 0 or 1 |
ODE_API void dBodySetAutoDisableLinearThreshold | -( | -dBodyID | -, | -|
- | - | dReal | -linear_average_threshold | - |
- | ) | -- |
-Set auto disable linear average threshold. -
-
ODE_API void dBodySetAutoDisableSteps | -( | -dBodyID | -, | -|
- | - | int | -steps | - |
- | ) | -- |
-Set auto disable steps. -
-
steps | the nr of steps. |
ODE_API void dBodySetAutoDisableTime | -( | -dBodyID | -, | -|
- | - | dReal | -time | - |
- | ) | -- |
-Set auto disable time. -
-
time | nr of seconds. |
ODE_API void dBodySetData | -( | -dBodyID | -, | -|
- | - | void * | -data | - |
- | ) | -- |
-Set the body's user-data pointer. -
-
data | arbitraty pointer |
ODE_API void dBodySetFiniteRotationAxis | -( | -dBodyID | -, | -|
- | - | dReal | -x, | -|
- | - | dReal | -y, | -|
- | - | dReal | -z | - |
- | ) | -- |
-sets the finite rotation axis for a body. -
-
-This can be useful to alleviate certain sources of error caused by quickly spinning bodies. For example, if a car wheel is rotating at high speed you can call this function with the wheel's hinge axis as the argument to try and improve its behavior.
ODE_API void dBodySetFiniteRotationMode | -( | -dBodyID | -, | -|
- | - | int | -mode | - |
- | ) | -- |
-controls the way a body's orientation is updated at each timestep. -
-
mode | can be 0 or 1:
|
ODE_API void dBodySetForce | -( | -dBodyID | -b, | -|
- | - | dReal | -x, | -|
- | - | dReal | -y, | -|
- | - | dReal | -z | - |
- | ) | -- |
-Set the body force accumulation vector. -
-
ODE_API void dBodySetGravityMode | -( | -dBodyID | -b, | -|
- | - | int | -mode | - |
- | ) | -- |
-Set whether the body is influenced by the world's gravity or not. -
-
mode | when nonzero gravity affects this body. |
ODE_API void dBodySetPosition | -( | -dBodyID | -, | -|
- | - | dReal | -x, | -|
- | - | dReal | -y, | -|
- | - | dReal | -z | - |
- | ) | -- |
-Set position of a body. -
-
ODE_API void dBodySetQuaternion | -( | -dBodyID | -, | -|
- | - | const dQuaternion | -q | - |
- | ) | -- |
-Set the orientation of a body. -
-
ODE_API void dBodySetRotation | -( | -dBodyID | -, | -|
- | - | const dMatrix3 | -R | - |
- | ) | -- |
-Set the orientation of a body. -
-
ODE_API void dBodySetTorque | -( | -dBodyID | -b, | -|
- | - | dReal | -x, | -|
- | - | dReal | -y, | -|
- | - | dReal | -z | - |
- | ) | -- |
-Set the body torque accumulation vector. -
-
ODE_API void dBodyVectorFromWorld | -( | -dBodyID | -, | -|
- | - | dReal | -px, | -|
- | - | dReal | -py, | -|
- | - | dReal | -pz, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Convert from world to local coordinates. -
-
result | will contain the result. |
ODE_API void dBodyVectorToWorld | -( | -dBodyID | -, | -|
- | - | dReal | -px, | -|
- | - | dReal | -py, | -|
- | - | dReal | -pz, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Convert from local to world coordinates. -
-
result | will contain the result. |
-
Modules | |
Sphere Class | |
Box Class | |
Data Structures | |
struct | dContactGeom |
Describe the contact point between two geoms. More... | |
Typedefs | |
typedef dReal | dHeightfieldGetHeight (void *p_user_data, int x, int z) |
Callback prototype. | |
typedef void | dNearCallback (void *data, dGeomID o1, dGeomID o2) |
User callback for geom-geom collision testing. | |
Functions | |
ODE_API void | dGeomDestroy (dGeomID geom) |
Destroy a geom, removing it from any space. | |
ODE_API void | dGeomSetData (dGeomID geom, void *data) |
Set the user-defined data pointer stored in the geom. | |
ODE_API void * | dGeomGetData (dGeomID geom) |
Get the user-defined data pointer stored in the geom. | |
ODE_API void | dGeomSetBody (dGeomID geom, dBodyID body) |
Set the body associated with a placeable geom. | |
ODE_API dBodyID | dGeomGetBody (dGeomID geom) |
Get the body associated with a placeable geom. | |
ODE_API void | dGeomSetPosition (dGeomID geom, dReal x, dReal y, dReal z) |
Set the position vector of a placeable geom. | |
ODE_API void | dGeomSetRotation (dGeomID geom, const dMatrix3 R) |
Set the rotation matrix of a placeable geom. | |
ODE_API void | dGeomSetQuaternion (dGeomID geom, const dQuaternion Q) |
Set the rotation of a placeable geom. | |
ODE_API const dReal * | dGeomGetPosition (dGeomID geom) |
Get the position vector of a placeable geom. | |
ODE_API void | dGeomCopyPosition (dGeomID geom, dVector3 pos) |
Copy the position of a geom into a vector. | |
ODE_API const dReal * | dGeomGetRotation (dGeomID geom) |
Get the rotation matrix of a placeable geom. | |
ODE_API void | dGeomCopyRotation (dGeomID geom, dMatrix3 R) |
Get the rotation matrix of a placeable geom. | |
ODE_API void | dGeomGetQuaternion (dGeomID geom, dQuaternion result) |
Get the rotation quaternion of a placeable geom. | |
ODE_API void | dGeomGetAABB (dGeomID geom, dReal aabb[6]) |
Return the axis-aligned bounding box. | |
ODE_API int | dGeomIsSpace (dGeomID geom) |
Determing if a geom is a space. | |
ODE_API dSpaceID | dGeomGetSpace (dGeomID) |
Query for the space containing a particular geom. | |
ODE_API int | dGeomGetClass (dGeomID geom) |
Given a geom, this returns its class. | |
ODE_API void | dGeomSetCategoryBits (dGeomID geom, unsigned long bits) |
Set the "category" bitfield for the given geom. | |
ODE_API void | dGeomSetCollideBits (dGeomID geom, unsigned long bits) |
Set the "collide" bitfield for the given geom. | |
ODE_API unsigned long | dGeomGetCategoryBits (dGeomID) |
Get the "category" bitfield for the given geom. | |
ODE_API unsigned long | dGeomGetCollideBits (dGeomID) |
Get the "collide" bitfield for the given geom. | |
ODE_API void | dGeomEnable (dGeomID geom) |
Enable a geom. | |
ODE_API void | dGeomDisable (dGeomID geom) |
Disable a geom. | |
ODE_API int | dGeomIsEnabled (dGeomID geom) |
Check to see if a geom is enabled. | |
ODE_API void | dGeomSetOffsetPosition (dGeomID geom, dReal x, dReal y, dReal z) |
Set the local offset position of a geom from its body. | |
ODE_API void | dGeomSetOffsetRotation (dGeomID geom, const dMatrix3 R) |
Set the local offset rotation matrix of a geom from its body. | |
ODE_API void | dGeomSetOffsetQuaternion (dGeomID geom, const dQuaternion Q) |
Set the local offset rotation of a geom from its body. | |
ODE_API void | dGeomSetOffsetWorldPosition (dGeomID geom, dReal x, dReal y, dReal z) |
Set the offset position of a geom from its body. | |
ODE_API void | dGeomSetOffsetWorldRotation (dGeomID geom, const dMatrix3 R) |
Set the offset rotation of a geom from its body. | |
ODE_API void | dGeomSetOffsetWorldQuaternion (dGeomID geom, const dQuaternion) |
Set the offset rotation of a geom from its body. | |
ODE_API void | dGeomClearOffset (dGeomID geom) |
Clear any offset from the geom. | |
ODE_API int | dGeomIsOffset (dGeomID geom) |
Check to see whether the geom has an offset. | |
ODE_API const dReal * | dGeomGetOffsetPosition (dGeomID geom) |
Get the offset position vector of a geom. | |
ODE_API void | dGeomCopyOffsetPosition (dGeomID geom, dVector3 pos) |
Copy the offset position vector of a geom. | |
ODE_API const dReal * | dGeomGetOffsetRotation (dGeomID geom) |
Get the offset rotation matrix of a geom. | |
ODE_API void | dGeomCopyOffsetRotation (dGeomID geom, dMatrix3 R) |
Copy the offset rotation matrix of a geom. | |
ODE_API void | dGeomGetOffsetQuaternion (dGeomID geom, dQuaternion result) |
Get the offset rotation quaternion of a geom. | |
ODE_API int | dCollide (dGeomID o1, dGeomID o2, int flags, dContactGeom *contact, int skip) |
Given two geoms o1 and o2 that potentially intersect, generate contact information for them. | |
ODE_API void | dSpaceCollide (dSpaceID space, void *data, dNearCallback *callback) |
Determines which pairs of geoms in a space may potentially intersect, and calls the callback function for each candidate pair. | |
ODE_API void | dSpaceCollide2 (dGeomID space1, dGeomID space2, void *data, dNearCallback *callback) |
Determines which geoms from one space may potentially intersect with geoms from another space, and calls the callback function for each candidate pair. | |
ODE_API dGeomID | dCreateHeightfield (dSpaceID space, dHeightfieldDataID data, int bPlaceable) |
Creates a heightfield geom. | |
ODE_API -dHeightfieldDataID | dGeomHeightfieldDataCreate () |
Creates a new empty dHeightfieldDataID. | |
ODE_API void | dGeomHeightfieldDataDestroy (dHeightfieldDataID d) |
Destroys a dHeightfieldDataID. | |
ODE_API void | dGeomHeightfieldDataBuildCallback (dHeightfieldDataID d, void *pUserData, dHeightfieldGetHeight *pCallback, dReal width, dReal depth, int widthSamples, int depthSamples, dReal scale, dReal offset, dReal thickness, int bWrap) |
Configures a dHeightfieldDataID to use a callback to retrieve height data. | |
ODE_API void | dGeomHeightfieldDataBuildByte (dHeightfieldDataID d, const unsigned char *pHeightData, int bCopyHeightData, dReal width, dReal depth, int widthSamples, int depthSamples, dReal scale, dReal offset, dReal thickness, int bWrap) |
Configures a dHeightfieldDataID to use height data in byte format. | |
ODE_API void | dGeomHeightfieldDataBuildShort (dHeightfieldDataID d, const short *pHeightData, int bCopyHeightData, dReal width, dReal depth, int widthSamples, int depthSamples, dReal scale, dReal offset, dReal thickness, int bWrap) |
Configures a dHeightfieldDataID to use height data in short format. | |
ODE_API void | dGeomHeightfieldDataBuildSingle (dHeightfieldDataID d, const float *pHeightData, int bCopyHeightData, dReal width, dReal depth, int widthSamples, int depthSamples, dReal scale, dReal offset, dReal thickness, int bWrap) |
Configures a dHeightfieldDataID to use height data in single precision floating point format. | |
ODE_API void | dGeomHeightfieldDataBuildDouble (dHeightfieldDataID d, const double *pHeightData, int bCopyHeightData, dReal width, dReal depth, int widthSamples, int depthSamples, dReal scale, dReal offset, dReal thickness, int bWrap) |
Configures a dHeightfieldDataID to use height data in double precision floating point format. | |
ODE_API void | dGeomHeightfieldDataSetBounds (dHeightfieldDataID d, dReal minHeight, dReal maxHeight) |
Manually set the minimum and maximum height bounds. | |
ODE_API void | dGeomHeightfieldSetHeightfieldData (dGeomID g, dHeightfieldDataID d) |
Assigns a dHeightfieldDataID to a heightfield geom. | |
ODE_API -dHeightfieldDataID | dGeomHeightfieldGetHeightfieldData (dGeomID g) |
Gets the dHeightfieldDataID bound to a heightfield geom. |
-Using ODE's collision detection is optional - an alternative collision detection system can be used as long as it can supply the right kinds of contact information.
typedef dReal dHeightfieldGetHeight(void *p_user_data, int x, int z) | -
-Callback prototype. -
-Used by the callback heightfield data type to sample a height for a given cell position.
-
p_user_data | User data specified when creating the dHeightfieldDataID | |
x | The index of a sample in the local x axis. It is a value in the range zero to ( nWidthSamples - 1 ). | |
x | The index of a sample in the local z axis. It is a value in the range zero to ( nDepthSamples - 1 ). |
typedef void dNearCallback(void *data, dGeomID o1, dGeomID o2) | -
-User callback for geom-geom collision testing. -
-
data | The user data object, as passed to dSpaceCollide. | |
o1 | The first geom being tested. | |
o2 | The second geom being test. |
-
ODE_API int dCollide | -( | -dGeomID | -o1, | -|
- | - | dGeomID | -o2, | -|
- | - | int | -flags, | -|
- | - | dContactGeom * | -contact, | -|
- | - | int | -skip | - |
- | ) | -- |
-Given two geoms o1 and o2 that potentially intersect, generate contact information for them. -
-Internally, this just calls the correct class-specific collision functions for o1 and o2.
-
o1 | The first geom to test. | |
o2 | The second geom to test. | |
flags | The flags specify how contacts should be generated if the geoms touch. The lower 16 bits of flags is an integer that specifies the maximum number of contact points to generate. You must ask for at least one contact. Additionally, following bits may be set: CONTACTS_UNIMPORTANT -- just generate any contacts (skip contact refining). All other bits in flags must be set to zero. In the future the other bits may be used to select from different contact generation strategies. | |
contact | Points to an array of dContactGeom structures. The array must be able to hold at least the maximum number of contacts. These dContactGeom structures may be embedded within larger structures in the array -- the skip parameter is the byte offset from one dContactGeom to the next in the array. If skip is sizeof(dContactGeom) then contact points to a normal (C-style) array. It is an error for skip to be smaller than sizeof(dContactGeom). |
-If o1 and o2 are the same geom then this function will do nothing and return 0. Technically speaking an object intersects with itself, but it is not useful to find contact points in this case.
-This function does not care if o1 and o2 are in the same space or not (or indeed if they are in any space at all).
ODE_API dGeomID dCreateHeightfield | -( | -dSpaceID | -space, | -|
- | - | dHeightfieldDataID | -data, | -|
- | - | int | -bPlaceable | - |
- | ) | -- |
-Creates a heightfield geom. -
-Uses the information in the given dHeightfieldDataID to construct a geom representing a heightfield in a collision space.
-
space | The space to add the geom to. | |
data | The dHeightfieldDataID created by dGeomHeightfieldDataCreate and setup by dGeomHeightfieldDataBuildCallback, dGeomHeightfieldDataBuildByte, dGeomHeightfieldDataBuildShort or dGeomHeightfieldDataBuildFloat. | |
bPlaceable | If non-zero this geom can be transformed in the world using the usual functions such as dGeomSetPosition and dGeomSetRotation. If the geom is not set as placeable, then it uses a fixed orientation where the global y axis represents the dynamic 'height' of the heightfield. |
ODE_API void dGeomClearOffset | -( | -dGeomID | -geom | -) | -- |
-Clear any offset from the geom. -
-If the geom has an offset, it is eliminated and the geom is repositioned at the body's position. If the geom has no offset, this function does nothing. This is more efficient than calling dGeomSetOffsetPosition(zero) and dGeomSetOffsetRotation(identiy), because this function actually eliminates the offset, rather than leaving it as the identity transform.
-
geom | the geom to have its offset destroyed. |
ODE_API void dGeomCopyOffsetPosition | -( | -dGeomID | -geom, | -|
- | - | dVector3 | -pos | - |
- | ) | -- |
-Copy the offset position vector of a geom. -
-Returns the positional offset of the geom in local coordinates. If the geom has no offset, this function returns the zero vector.
-
geom | the geom to query. | |
pos | returns the offset position |
ODE_API void dGeomCopyOffsetRotation | -( | -dGeomID | -geom, | -|
- | - | dMatrix3 | -R | - |
- | ) | -- |
-Copy the offset rotation matrix of a geom. -
-Returns the rotational offset of the geom in local coordinates. If the geom has no offset, this function returns the identity matrix.
-
geom | the geom to query. | |
R | returns the rotation matrix. |
ODE_API void dGeomCopyPosition | -( | -dGeomID | -geom, | -|
- | - | dVector3 | -pos | - |
- | ) | -- |
-Copy the position of a geom into a vector. -
-
geom | the geom to query | |
pos | a copy of the geom position |
ODE_API void dGeomCopyRotation | -( | -dGeomID | -geom, | -|
- | - | dMatrix3 | -R | - |
- | ) | -- |
-Get the rotation matrix of a placeable geom. -
-If the geom is attached to a body, the body's rotation will be returned.
-Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.
-
geom | the geom to query. | |
R | a copy of the geom rotation |
ODE_API void dGeomDestroy | -( | -dGeomID | -geom | -) | -- |
-Destroy a geom, removing it from any space. -
-Destroy a geom, removing it from any space it is in first. This one function destroys a geom of any type, but to create a geom you must call a creation function for that type.
-When a space is destroyed, if its cleanup mode is 1 (the default) then all the geoms in that space are automatically destroyed as well.
-
geom | the geom to be destroyed. |
ODE_API void dGeomDisable | -( | -dGeomID | -geom | -) | -- |
-Disable a geom. -
-Disabled geoms are completely ignored by dSpaceCollide and dSpaceCollide2, although they can still be members of a space. New geoms are created in the enabled state.
-
geom | the geom to disable |
ODE_API void dGeomEnable | -( | -dGeomID | -geom | -) | -- |
-Enable a geom. -
-Disabled geoms are completely ignored by dSpaceCollide and dSpaceCollide2, although they can still be members of a space. New geoms are created in the enabled state.
-
geom | the geom to enable |
ODE_API void dGeomGetAABB | -( | -dGeomID | -geom, | -|
- | - | dReal | -aabb[6] | - |
- | ) | -- |
-Return the axis-aligned bounding box. -
-Return in aabb an axis aligned bounding box that surrounds the given geom. The aabb array has elements (minx, maxx, miny, maxy, minz, maxz). If the geom is a space, a bounding box that surrounds all contained geoms is returned.
-This function may return a pre-computed cached bounding box, if it can determine that the geom has not moved since the last time the bounding box was computed.
-
geom | the geom to query | |
aabb | the returned bounding box |
ODE_API dBodyID dGeomGetBody | -( | -dGeomID | -geom | -) | -- |
-Get the body associated with a placeable geom. -
-
geom | the geom to query. |
ODE_API unsigned long dGeomGetCategoryBits | -( | -dGeomID | -- | ) | -- |
-Get the "category" bitfield for the given geom. -
-
geom | the geom to set | |
bits | the new bitfield value |
ODE_API int dGeomGetClass | -( | -dGeomID | -geom | -) | -- |
-Given a geom, this returns its class. -
-The ODE classes are:
-
geom | the geom to query |
ODE_API unsigned long dGeomGetCollideBits | -( | -dGeomID | -- | ) | -- |
-Get the "collide" bitfield for the given geom. -
-
geom | the geom to set | |
bits | the new bitfield value |
ODE_API void* dGeomGetData | -( | -dGeomID | -geom | -) | -- |
-Get the user-defined data pointer stored in the geom. -
-
geom | the geom containing the data |
ODE_API const dReal* dGeomGetOffsetPosition | -( | -dGeomID | -geom | -) | -- |
-Get the offset position vector of a geom. -
-Returns the positional offset of the geom in local coordinates. If the geom has no offset, this function returns the zero vector.
-
geom | the geom to query. |
ODE_API void dGeomGetOffsetQuaternion | -( | -dGeomID | -geom, | -|
- | - | dQuaternion | -result | - |
- | ) | -- |
-Get the offset rotation quaternion of a geom. -
-Returns the rotation offset of the geom as a quaternion. If the geom has no offset, the identity quaternion is returned.
-
geom | the geom to query. | |
result | a copy of the rotation quaternion. |
ODE_API const dReal* dGeomGetOffsetRotation | -( | -dGeomID | -geom | -) | -- |
-Get the offset rotation matrix of a geom. -
-Returns the rotational offset of the geom in local coordinates. If the geom has no offset, this function returns the identity matrix.
-
geom | the geom to query. |
ODE_API const dReal* dGeomGetPosition | -( | -dGeomID | -geom | -) | -- |
-Get the position vector of a placeable geom. -
-If the geom is attached to a body, the body's position will be returned.
-Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.
-
geom | the geom to query. |
ODE_API void dGeomGetQuaternion | -( | -dGeomID | -geom, | -|
- | - | dQuaternion | -result | - |
- | ) | -- |
-Get the rotation quaternion of a placeable geom. -
-If the geom is attached to a body, the body's quaternion will be returned.
-Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.
-
geom | the geom to query. | |
result | a copy of the rotation quaternion. |
ODE_API const dReal* dGeomGetRotation | -( | -dGeomID | -geom | -) | -- |
-Get the rotation matrix of a placeable geom. -
-If the geom is attached to a body, the body's rotation will be returned.
-Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.
-
geom | the geom to query. |
ODE_API dSpaceID dGeomGetSpace | -( | -dGeomID | -- | ) | -- |
-Query for the space containing a particular geom. -
-
geom | the geom to query |
ODE_API void dGeomHeightfieldDataBuildByte | -( | -dHeightfieldDataID | -d, | -|
- | - | const unsigned char * | -pHeightData, | -|
- | - | int | -bCopyHeightData, | -|
- | - | dReal | -width, | -|
- | - | dReal | -depth, | -|
- | - | int | -widthSamples, | -|
- | - | int | -depthSamples, | -|
- | - | dReal | -scale, | -|
- | - | dReal | -offset, | -|
- | - | dReal | -thickness, | -|
- | - | int | -bWrap | - |
- | ) | -- |
-Configures a dHeightfieldDataID to use height data in byte format. -
-Before a dHeightfieldDataID can be used by a geom it must be configured to specify the format of the height data. This call specifies that the heightfield data is stored as a rectangular array of bytes (8 bit unsigned) representing the height at each sample point.
-
d | A new dHeightfieldDataID created by dGeomHeightfieldDataCreate | |
pHeightData | A pointer to the height data. | |
bCopyHeightData | When non-zero the height data is copied to an internal store. When zero the height data is accessed by reference and so must persist throughout the lifetime of the heightfield. | |
width | Specifies the total 'width' of the heightfield along the geom's local x axis. | |
depth | Specifies the total 'depth' of the heightfield along the geom's local z axis. | |
widthSamples | Specifies the number of vertices to sample along the width of the heightfield. Each vertex has a corresponding height value which forms the overall shape. Naturally this value must be at least two or more. | |
depthSamples | Specifies the number of vertices to sample along the depth of the heightfield. | |
scale | A uniform scale applied to all raw height data. | |
offset | An offset applied to the scaled height data. | |
thickness | A value subtracted from the lowest height value which in effect adds an additional cuboid to the base of the heightfield. This is used to prevent geoms from looping under the desired terrain and not registering as a collision. Note that the thickness is not affected by the scale or offset parameters. | |
bWrap | If non-zero the heightfield will infinitely tile in both directions along the local x and z axes. If zero the heightfield is bounded from zero to width in the local x axis, and zero to depth in the local z axis. |
ODE_API void dGeomHeightfieldDataBuildCallback | -( | -dHeightfieldDataID | -d, | -|
- | - | void * | -pUserData, | -|
- | - | dHeightfieldGetHeight * | -pCallback, | -|
- | - | dReal | -width, | -|
- | - | dReal | -depth, | -|
- | - | int | -widthSamples, | -|
- | - | int | -depthSamples, | -|
- | - | dReal | -scale, | -|
- | - | dReal | -offset, | -|
- | - | dReal | -thickness, | -|
- | - | int | -bWrap | - |
- | ) | -- |
-Configures a dHeightfieldDataID to use a callback to retrieve height data. -
-Before a dHeightfieldDataID can be used by a geom it must be configured to specify the format of the height data. This call specifies that the heightfield data is computed by the user and it should use the given callback when determining the height of a given element of it's shape.
-
d | A new dHeightfieldDataID created by dGeomHeightfieldDataCreate | |
width | Specifies the total 'width' of the heightfield along the geom's local x axis. | |
depth | Specifies the total 'depth' of the heightfield along the geom's local z axis. | |
widthSamples | Specifies the number of vertices to sample along the width of the heightfield. Each vertex has a corresponding height value which forms the overall shape. Naturally this value must be at least two or more. | |
depthSamples | Specifies the number of vertices to sample along the depth of the heightfield. | |
scale | A uniform scale applied to all raw height data. | |
offset | An offset applied to the scaled height data. | |
thickness | A value subtracted from the lowest height value which in effect adds an additional cuboid to the base of the heightfield. This is used to prevent geoms from looping under the desired terrain and not registering as a collision. Note that the thickness is not affected by the scale or offset parameters. | |
bWrap | If non-zero the heightfield will infinitely tile in both directions along the local x and z axes. If zero the heightfield is bounded from zero to width in the local x axis, and zero to depth in the local z axis. |
ODE_API void dGeomHeightfieldDataBuildDouble | -( | -dHeightfieldDataID | -d, | -|
- | - | const double * | -pHeightData, | -|
- | - | int | -bCopyHeightData, | -|
- | - | dReal | -width, | -|
- | - | dReal | -depth, | -|
- | - | int | -widthSamples, | -|
- | - | int | -depthSamples, | -|
- | - | dReal | -scale, | -|
- | - | dReal | -offset, | -|
- | - | dReal | -thickness, | -|
- | - | int | -bWrap | - |
- | ) | -- |
-Configures a dHeightfieldDataID to use height data in double precision floating point format. -
-Before a dHeightfieldDataID can be used by a geom it must be configured to specify the format of the height data. This call specifies that the heightfield data is stored as a rectangular array of double precision floats representing the height at each sample point.
-
d | A new dHeightfieldDataID created by dGeomHeightfieldDataCreate | |
pHeightData | A pointer to the height data. | |
bCopyHeightData | When non-zero the height data is copied to an internal store. When zero the height data is accessed by reference and so must persist throughout the lifetime of the heightfield. | |
width | Specifies the total 'width' of the heightfield along the geom's local x axis. | |
depth | Specifies the total 'depth' of the heightfield along the geom's local z axis. | |
widthSamples | Specifies the number of vertices to sample along the width of the heightfield. Each vertex has a corresponding height value which forms the overall shape. Naturally this value must be at least two or more. | |
depthSamples | Specifies the number of vertices to sample along the depth of the heightfield. | |
scale | A uniform scale applied to all raw height data. | |
offset | An offset applied to the scaled height data. | |
thickness | A value subtracted from the lowest height value which in effect adds an additional cuboid to the base of the heightfield. This is used to prevent geoms from looping under the desired terrain and not registering as a collision. Note that the thickness is not affected by the scale or offset parameters. | |
bWrap | If non-zero the heightfield will infinitely tile in both directions along the local x and z axes. If zero the heightfield is bounded from zero to width in the local x axis, and zero to depth in the local z axis. |
ODE_API void dGeomHeightfieldDataBuildShort | -( | -dHeightfieldDataID | -d, | -|
- | - | const short * | -pHeightData, | -|
- | - | int | -bCopyHeightData, | -|
- | - | dReal | -width, | -|
- | - | dReal | -depth, | -|
- | - | int | -widthSamples, | -|
- | - | int | -depthSamples, | -|
- | - | dReal | -scale, | -|
- | - | dReal | -offset, | -|
- | - | dReal | -thickness, | -|
- | - | int | -bWrap | - |
- | ) | -- |
-Configures a dHeightfieldDataID to use height data in short format. -
-Before a dHeightfieldDataID can be used by a geom it must be configured to specify the format of the height data. This call specifies that the heightfield data is stored as a rectangular array of shorts (16 bit signed) representing the height at each sample point.
-
d | A new dHeightfieldDataID created by dGeomHeightfieldDataCreate | |
pHeightData | A pointer to the height data. | |
bCopyHeightData | When non-zero the height data is copied to an internal store. When zero the height data is accessed by reference and so must persist throughout the lifetime of the heightfield. | |
width | Specifies the total 'width' of the heightfield along the geom's local x axis. | |
depth | Specifies the total 'depth' of the heightfield along the geom's local z axis. | |
widthSamples | Specifies the number of vertices to sample along the width of the heightfield. Each vertex has a corresponding height value which forms the overall shape. Naturally this value must be at least two or more. | |
depthSamples | Specifies the number of vertices to sample along the depth of the heightfield. | |
scale | A uniform scale applied to all raw height data. | |
offset | An offset applied to the scaled height data. | |
thickness | A value subtracted from the lowest height value which in effect adds an additional cuboid to the base of the heightfield. This is used to prevent geoms from looping under the desired terrain and not registering as a collision. Note that the thickness is not affected by the scale or offset parameters. | |
bWrap | If non-zero the heightfield will infinitely tile in both directions along the local x and z axes. If zero the heightfield is bounded from zero to width in the local x axis, and zero to depth in the local z axis. |
ODE_API void dGeomHeightfieldDataBuildSingle | -( | -dHeightfieldDataID | -d, | -|
- | - | const float * | -pHeightData, | -|
- | - | int | -bCopyHeightData, | -|
- | - | dReal | -width, | -|
- | - | dReal | -depth, | -|
- | - | int | -widthSamples, | -|
- | - | int | -depthSamples, | -|
- | - | dReal | -scale, | -|
- | - | dReal | -offset, | -|
- | - | dReal | -thickness, | -|
- | - | int | -bWrap | - |
- | ) | -- |
-Configures a dHeightfieldDataID to use height data in single precision floating point format. -
-Before a dHeightfieldDataID can be used by a geom it must be configured to specify the format of the height data. This call specifies that the heightfield data is stored as a rectangular array of single precision floats representing the height at each sample point.
-
d | A new dHeightfieldDataID created by dGeomHeightfieldDataCreate | |
pHeightData | A pointer to the height data. | |
bCopyHeightData | When non-zero the height data is copied to an internal store. When zero the height data is accessed by reference and so must persist throughout the lifetime of the heightfield. | |
width | Specifies the total 'width' of the heightfield along the geom's local x axis. | |
depth | Specifies the total 'depth' of the heightfield along the geom's local z axis. | |
widthSamples | Specifies the number of vertices to sample along the width of the heightfield. Each vertex has a corresponding height value which forms the overall shape. Naturally this value must be at least two or more. | |
depthSamples | Specifies the number of vertices to sample along the depth of the heightfield. | |
scale | A uniform scale applied to all raw height data. | |
offset | An offset applied to the scaled height data. | |
thickness | A value subtracted from the lowest height value which in effect adds an additional cuboid to the base of the heightfield. This is used to prevent geoms from looping under the desired terrain and not registering as a collision. Note that the thickness is not affected by the scale or offset parameters. | |
bWrap | If non-zero the heightfield will infinitely tile in both directions along the local x and z axes. If zero the heightfield is bounded from zero to width in the local x axis, and zero to depth in the local z axis. |
ODE_API dHeightfieldDataID dGeomHeightfieldDataCreate | -( | -- | ) | -- |
-Creates a new empty dHeightfieldDataID. -
-Allocates a new dHeightfieldDataID and returns it. You must call dGeomHeightfieldDataDestroy to destroy it after the geom has been removed. The dHeightfieldDataID value is used when specifying a data format type.
-
ODE_API void dGeomHeightfieldDataDestroy | -( | -dHeightfieldDataID | -d | -) | -- |
-Destroys a dHeightfieldDataID. -
-Deallocates a given dHeightfieldDataID and all managed resources.
-
d | A dHeightfieldDataID created by dGeomHeightfieldDataCreate |
ODE_API void dGeomHeightfieldDataSetBounds | -( | -dHeightfieldDataID | -d, | -|
- | - | dReal | -minHeight, | -|
- | - | dReal | -maxHeight | - |
- | ) | -- |
-Manually set the minimum and maximum height bounds. -
-This call allows you to set explicit min / max values after initial creation typically for callback heightfields which default to +/- infinity, or those whose data has changed. This must be set prior to binding with a geom, as the the AABB is not recomputed after it's first generation.
-
d | A dHeightfieldDataID created by dGeomHeightfieldDataCreate | |
min_height | The new minimum height value. Scale, offset and thickness is then applied. | |
max_height | The new maximum height value. Scale and offset is then applied. |
ODE_API dHeightfieldDataID dGeomHeightfieldGetHeightfieldData | -( | -dGeomID | -g | -) | -- |
-Gets the dHeightfieldDataID bound to a heightfield geom. -
-Returns the dHeightfieldDataID associated with a heightfield geom.
-
g | A geom created by dCreateHeightfield |
ODE_API void dGeomHeightfieldSetHeightfieldData | -( | -dGeomID | -g, | -|
- | - | dHeightfieldDataID | -d | - |
- | ) | -- |
-Assigns a dHeightfieldDataID to a heightfield geom. -
-Associates the given dHeightfieldDataID with a heightfield geom. This is done without affecting the GEOM_PLACEABLE flag.
-
g | A geom created by dCreateHeightfield | |
d | A dHeightfieldDataID created by dGeomHeightfieldDataCreate |
ODE_API int dGeomIsEnabled | -( | -dGeomID | -geom | -) | -- |
-Check to see if a geom is enabled. -
-Disabled geoms are completely ignored by dSpaceCollide and dSpaceCollide2, although they can still be members of a space. New geoms are created in the enabled state.
-
geom | the geom to query |
ODE_API int dGeomIsOffset | -( | -dGeomID | -geom | -) | -- |
-Check to see whether the geom has an offset. -
-This function will return non-zero if the offset has been created. Note that there is a difference between a geom with no offset, and a geom with an offset that is the identity transform. In the latter case, although the observed behaviour is identical, there is a unnecessary computation involved because the geom will be applying the transform whenever it needs to recalculate its world position.
-
geom | the geom to query. |
ODE_API int dGeomIsSpace | -( | -dGeomID | -geom | -) | -- |
-Determing if a geom is a space. -
-
geom | the geom to query |
ODE_API void dGeomSetBody | -( | -dGeomID | -geom, | -|
- | - | dBodyID | -body | - |
- | ) | -- |
-Set the body associated with a placeable geom. -
-Setting a body on a geom automatically combines the position vector and rotation matrix of the body and geom, so that setting the position or orientation of one will set the value for both objects. Setting a body ID of zero gives the geom its own position and rotation, independent from any body. If the geom was previously connected to a body then its new independent position/rotation is set to the current position/rotation of the body.
-Calling these functions on a non-placeable geom results in a runtime error in the debug build of ODE.
-
geom | the geom to connect | |
body | the body to attach to the geom |
ODE_API void dGeomSetCategoryBits | -( | -dGeomID | -geom, | -|
- | - | unsigned long | -bits | - |
- | ) | -- |
-Set the "category" bitfield for the given geom. -
-The category bitfield is used by spaces to govern which geoms will interact with each other. The bitfield is guaranteed to be at least 32 bits wide. The default category values for newly created geoms have all bits set.
-
geom | the geom to set | |
bits | the new bitfield value |
ODE_API void dGeomSetCollideBits | -( | -dGeomID | -geom, | -|
- | - | unsigned long | -bits | - |
- | ) | -- |
-Set the "collide" bitfield for the given geom. -
-The collide bitfield is used by spaces to govern which geoms will interact with each other. The bitfield is guaranteed to be at least 32 bits wide. The default category values for newly created geoms have all bits set.
-
geom | the geom to set | |
bits | the new bitfield value |
ODE_API void dGeomSetData | -( | -dGeomID | -geom, | -|
- | - | void * | -data | - |
- | ) | -- |
-Set the user-defined data pointer stored in the geom. -
-
geom | the geom to hold the data | |
data | the data pointer to be stored |
ODE_API void dGeomSetOffsetPosition | -( | -dGeomID | -geom, | -|
- | - | dReal | -x, | -|
- | - | dReal | -y, | -|
- | - | dReal | -z | - |
- | ) | -- |
-Set the local offset position of a geom from its body. -
-Sets the geom's positional offset in local coordinates. After this call, the geom will be at a new position determined from the body's position and the offset. The geom must be attached to a body. If the geom did not have an offset, it is automatically created.
-
geom | the geom to set. | |
x | the new X coordinate. | |
y | the new Y coordinate. | |
z | the new Z coordinate. |
ODE_API void dGeomSetOffsetQuaternion | -( | -dGeomID | -geom, | -|
- | - | const dQuaternion | -Q | - |
- | ) | -- |
-Set the local offset rotation of a geom from its body. -
-Sets the geom's rotational offset in local coordinates. After this call, the geom will be at a new position determined from the body's position and the offset. The geom must be attached to a body. If the geom did not have an offset, it is automatically created.
-
geom | the geom to set. | |
Q | the new rotation. |
ODE_API void dGeomSetOffsetRotation | -( | -dGeomID | -geom, | -|
- | - | const dMatrix3 | -R | - |
- | ) | -- |
-Set the local offset rotation matrix of a geom from its body. -
-Sets the geom's rotational offset in local coordinates. After this call, the geom will be at a new position determined from the body's position and the offset. The geom must be attached to a body. If the geom did not have an offset, it is automatically created.
-
geom | the geom to set. | |
R | the new rotation matrix. |
ODE_API void dGeomSetOffsetWorldPosition | -( | -dGeomID | -geom, | -|
- | - | dReal | -x, | -|
- | - | dReal | -y, | -|
- | - | dReal | -z | - |
- | ) | -- |
-Set the offset position of a geom from its body. -
-Sets the geom's positional offset to move it to the new world coordinates. After this call, the geom will be at the world position passed in, and the offset will be the difference from the current body position. The geom must be attached to a body. If the geom did not have an offset, it is automatically created.
-
geom | the geom to set. | |
x | the new X coordinate. | |
y | the new Y coordinate. | |
z | the new Z coordinate. |
ODE_API void dGeomSetOffsetWorldQuaternion | -( | -dGeomID | -geom, | -|
- | - | const | -dQuaternion | - |
- | ) | -- |
-Set the offset rotation of a geom from its body. -
-Sets the geom's rotational offset to orient it to the new world rotation matrix. After this call, the geom will be at the world orientation passed in, and the offset will be the difference from the current body orientation. The geom must be attached to a body. If the geom did not have an offset, it is automatically created.
-
geom | the geom to set. | |
Q | the new rotation. |
ODE_API void dGeomSetOffsetWorldRotation | -( | -dGeomID | -geom, | -|
- | - | const dMatrix3 | -R | - |
- | ) | -- |
-Set the offset rotation of a geom from its body. -
-Sets the geom's rotational offset to orient it to the new world rotation matrix. After this call, the geom will be at the world orientation passed in, and the offset will be the difference from the current body orientation. The geom must be attached to a body. If the geom did not have an offset, it is automatically created.
-
geom | the geom to set. | |
R | the new rotation matrix. |
ODE_API void dGeomSetPosition | -( | -dGeomID | -geom, | -|
- | - | dReal | -x, | -|
- | - | dReal | -y, | -|
- | - | dReal | -z | - |
- | ) | -- |
-Set the position vector of a placeable geom. -
-If the geom is attached to a body, the body's position will also be changed. Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.
-
geom | the geom to set. | |
x | the new X coordinate. | |
y | the new Y coordinate. | |
z | the new Z coordinate. |
ODE_API void dGeomSetQuaternion | -( | -dGeomID | -geom, | -|
- | - | const dQuaternion | -Q | - |
- | ) | -- |
-Set the rotation of a placeable geom. -
-If the geom is attached to a body, the body's rotation will also be changed.
-Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.
-
geom | the geom to set. | |
Q | the new rotation. |
ODE_API void dGeomSetRotation | -( | -dGeomID | -geom, | -|
- | - | const dMatrix3 | -R | - |
- | ) | -- |
-Set the rotation matrix of a placeable geom. -
-If the geom is attached to a body, the body's rotation will also be changed. Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.
-
geom | the geom to set. | |
R | the new rotation matrix. |
ODE_API void dSpaceCollide | -( | -dSpaceID | -space, | -|
- | - | void * | -data, | -|
- | - | dNearCallback * | -callback | - |
- | ) | -- |
-Determines which pairs of geoms in a space may potentially intersect, and calls the callback function for each candidate pair. -
-
space | The space to test. | |
data | Passed from dSpaceCollide directly to the callback function. Its meaning is user defined. The o1 and o2 arguments are the geoms that may be near each other. | |
callback | A callback function is of type dNearCallback. |
-dSpaceCollide() is guaranteed to pass all intersecting geom pairs to the callback function, but may also pass close but non-intersecting pairs. The number of these calls depends on the internal algorithms used by the space. Thus you should not expect that dCollide will return contacts for every pair passed to the callback.
ODE_API void dSpaceCollide2 | -( | -dGeomID | -space1, | -|
- | - | dGeomID | -space2, | -|
- | - | void * | -data, | -|
- | - | dNearCallback * | -callback | - |
- | ) | -- |
-Determines which geoms from one space may potentially intersect with geoms from another space, and calls the callback function for each candidate pair. -
-
space1 | The first space to test. | |
space2 | The second space to test. | |
data | Passed from dSpaceCollide directly to the callback function. Its meaning is user defined. The o1 and o2 arguments are the geoms that may be near each other. | |
callback | A callback function is of type dNearCallback. |
-Other spaces that are contained within the colliding space are not treated specially, i.e. they are not recursed into. The callback function may be passed these contained spaces as one or both geom arguments.
-dSpaceCollide2() is guaranteed to pass all intersecting geom pairs to the callback function, but may also pass close but non-intersecting pairs. The number of these calls depends on the internal algorithms used by the space. Thus you should not expect that dCollide will return contacts for every pair passed to the callback.
-
Functions | |
ODE_API dGeomID | dCreateBox (dSpaceID space, dReal lx, dReal ly, dReal lz) |
Create a box geom with the provided side lengths. | |
ODE_API void | dGeomBoxSetLengths (dGeomID box, dReal lx, dReal ly, dReal lz) |
Set the side lengths of the given box. | |
ODE_API void | dGeomBoxGetLengths (dGeomID box, dVector3 result) |
Get the side lengths of a box. |
ODE_API dGeomID dCreateBox | -( | -dSpaceID | -space, | -|
- | - | dReal | -lx, | -|
- | - | dReal | -ly, | -|
- | - | dReal | -lz | - |
- | ) | -- |
-Create a box geom with the provided side lengths. -
-
space | a space to contain the new geom. May be null. | |
lx | the length of the box along the X axis | |
ly | the length of the box along the Y axis | |
lz | the length of the box along the Z axis |
ODE_API void dGeomBoxGetLengths | -( | -dGeomID | -box, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Get the side lengths of a box. -
-
box | the box to query | |
result | the returned side lengths |
ODE_API void dGeomBoxSetLengths | -( | -dGeomID | -box, | -|
- | - | dReal | -lx, | -|
- | - | dReal | -ly, | -|
- | - | dReal | -lz | - |
- | ) | -- |
-Set the side lengths of the given box. -
-
box | the box to set | |
lx | the length of the box along the X axis | |
ly | the length of the box along the Y axis | |
lz | the length of the box along the Z axis |
-
Functions | |
ODE_API dGeomID | dCreateSphere (dSpaceID space, dReal radius) |
Create a sphere geom of the given radius, and return its ID. | |
ODE_API void | dGeomSphereSetRadius (dGeomID sphere, dReal radius) |
Set the radius of a sphere geom. | |
ODE_API dReal | dGeomSphereGetRadius (dGeomID sphere) |
Retrieves the radius of a sphere geom. | |
ODE_API dReal | dGeomSpherePointDepth (dGeomID sphere, dReal x, dReal y, dReal z) |
Calculate the depth of the a given point within a sphere. |
ODE_API dGeomID dCreateSphere | -( | -dSpaceID | -space, | -|
- | - | dReal | -radius | - |
- | ) | -- |
-Create a sphere geom of the given radius, and return its ID. -
-
space | a space to contain the new geom. May be null. | |
radius | the radius of the sphere. |
ODE_API dReal dGeomSphereGetRadius | -( | -dGeomID | -sphere | -) | -- |
-Retrieves the radius of a sphere geom. -
-
sphere | the sphere to query. |
ODE_API dReal dGeomSpherePointDepth | -( | -dGeomID | -sphere, | -|
- | - | dReal | -x, | -|
- | - | dReal | -y, | -|
- | - | dReal | -z | - |
- | ) | -- |
-Calculate the depth of the a given point within a sphere. -
-
sphere | the sphere to query. | |
x | the X coordinate of the point. | |
y | the Y coordinate of the point. | |
z | the Z coordinate of the point. |
ODE_API void dGeomSphereSetRadius | -( | -dGeomID | -sphere, | -|
- | - | dReal | -radius | - |
- | ) | -- |
-Set the radius of a sphere geom. -
-
sphere | the sphere to set. | |
radius | the new radius. |
-
Functions | |
-ODE_API void | dWorldSetAutoEnableDepthSF1 (dWorldID, int autoEnableDepth) |
Set the AutoEnableDepth parameter used by the StepFast1 algorithm. | |
-ODE_API int | dWorldGetAutoEnableDepthSF1 (dWorldID) |
Get the AutoEnableDepth parameter used by the StepFast1 algorithm. | |
ODE_API dReal | dWorldGetAutoDisableLinearThreshold (dWorldID) |
Get auto disable linear threshold for newly created bodies. | |
ODE_API void | dWorldSetAutoDisableLinearThreshold (dWorldID, dReal linear_threshold) |
Set auto disable linear threshold for newly created bodies. | |
ODE_API dReal | dWorldGetAutoDisableAngularThreshold (dWorldID) |
Get auto disable angular threshold for newly created bodies. | |
ODE_API void | dWorldSetAutoDisableAngularThreshold (dWorldID, dReal angular_threshold) |
Set auto disable angular threshold for newly created bodies. | |
ODE_API dReal | dWorldGetAutoDisableLinearAverageThreshold (dWorldID) |
Get auto disable linear average threshold for newly created bodies. | |
ODE_API void | dWorldSetAutoDisableLinearAverageThreshold (dWorldID, dReal linear_average_threshold) |
Set auto disable linear average threshold for newly created bodies. | |
ODE_API dReal | dWorldGetAutoDisableAngularAverageThreshold (dWorldID) |
Get auto disable angular average threshold for newly created bodies. | |
ODE_API void | dWorldSetAutoDisableAngularAverageThreshold (dWorldID, dReal angular_average_threshold) |
Set auto disable angular average threshold for newly created bodies. | |
ODE_API int | dWorldGetAutoDisableAverageSamplesCount (dWorldID) |
Get auto disable sample count for newly created bodies. | |
ODE_API void | dWorldSetAutoDisableAverageSamplesCount (dWorldID, unsigned int average_samples_count) |
Set auto disable average sample count for newly created bodies. | |
ODE_API int | dWorldGetAutoDisableSteps (dWorldID) |
Get auto disable steps for newly created bodies. | |
ODE_API void | dWorldSetAutoDisableSteps (dWorldID, int steps) |
Set auto disable steps for newly created bodies. | |
ODE_API dReal | dWorldGetAutoDisableTime (dWorldID) |
Get auto disable time for newly created bodies. | |
ODE_API void | dWorldSetAutoDisableTime (dWorldID, dReal time) |
Set auto disable time for newly created bodies. | |
ODE_API int | dWorldGetAutoDisableFlag (dWorldID) |
Get auto disable flag for newly created bodies. | |
ODE_API void | dWorldSetAutoDisableFlag (dWorldID, int do_auto_disable) |
Set auto disable flag for newly created bodies. |
-A disabled body that is connected through a joint to an enabled body will be automatically re-enabled at the next simulation step.
-Disabled bodies do not consume CPU time, therefore to speed up the simulation bodies should be disabled when they come to rest. This can be done automatically with the auto-disable feature.
-If a body has its auto-disable flag turned on, it will automatically disable itself when
-Thus, every body has six auto-disable parameters: an enabled flag, a idle step count, an idle time, linear/angular average velocity thresholds, and the average samples count.
-Newly created bodies get these parameters from world.
ODE_API dReal dWorldGetAutoDisableAngularAverageThreshold | -( | -dWorldID | -- | ) | -- |
-Get auto disable angular average threshold for newly created bodies. -
-
ODE_API dReal dWorldGetAutoDisableAngularThreshold | -( | -dWorldID | -- | ) | -- |
-Get auto disable angular threshold for newly created bodies. -
-
ODE_API int dWorldGetAutoDisableAverageSamplesCount | -( | -dWorldID | -- | ) | -- |
-Get auto disable sample count for newly created bodies. -
-
ODE_API int dWorldGetAutoDisableFlag | -( | -dWorldID | -- | ) | -- |
-Get auto disable flag for newly created bodies. -
-
ODE_API dReal dWorldGetAutoDisableLinearAverageThreshold | -( | -dWorldID | -- | ) | -- |
-Get auto disable linear average threshold for newly created bodies. -
-
ODE_API dReal dWorldGetAutoDisableLinearThreshold | -( | -dWorldID | -- | ) | -- |
-Get auto disable linear threshold for newly created bodies. -
-
ODE_API int dWorldGetAutoDisableSteps | -( | -dWorldID | -- | ) | -- |
-Get auto disable steps for newly created bodies. -
-
ODE_API dReal dWorldGetAutoDisableTime | -( | -dWorldID | -- | ) | -- |
-Get auto disable time for newly created bodies. -
-
ODE_API void dWorldSetAutoDisableAngularAverageThreshold | -( | -dWorldID | -, | -|
- | - | dReal | -angular_average_threshold | - |
- | ) | -- |
-Set auto disable angular average threshold for newly created bodies. -
-
linear_average_threshold | default is 0.01 |
ODE_API void dWorldSetAutoDisableAngularThreshold | -( | -dWorldID | -, | -|
- | - | dReal | -angular_threshold | - |
- | ) | -- |
-Set auto disable angular threshold for newly created bodies. -
-
linear_threshold | default is 0.01 |
ODE_API void dWorldSetAutoDisableAverageSamplesCount | -( | -dWorldID | -, | -|
- | - | unsigned int | -average_samples_count | - |
- | ) | -- |
-Set auto disable average sample count for newly created bodies. -
-
average_samples_count | Default is 1, meaning only instantaneous velocity is used. Set to zero to disable sampling and thus prevent any body from auto-disabling. |
ODE_API void dWorldSetAutoDisableFlag | -( | -dWorldID | -, | -|
- | - | int | -do_auto_disable | - |
- | ) | -- |
-Set auto disable flag for newly created bodies. -
-
do_auto_disable | default is false. |
ODE_API void dWorldSetAutoDisableLinearAverageThreshold | -( | -dWorldID | -, | -|
- | - | dReal | -linear_average_threshold | - |
- | ) | -- |
-Set auto disable linear average threshold for newly created bodies. -
-
linear_average_threshold | default is 0.01 |
ODE_API void dWorldSetAutoDisableLinearThreshold | -( | -dWorldID | -, | -|
- | - | dReal | -linear_threshold | - |
- | ) | -- |
-Set auto disable linear threshold for newly created bodies. -
-
linear_threshold | default is 0.01 |
ODE_API void dWorldSetAutoDisableSteps | -( | -dWorldID | -, | -|
- | - | int | -steps | - |
- | ) | -- |
-Set auto disable steps for newly created bodies. -
-
steps | default is 10 |
ODE_API void dWorldSetAutoDisableTime | -( | -dWorldID | -, | -|
- | - | dReal | -time | - |
- | ) | -- |
-Set auto disable time for newly created bodies. -
-
time | default is 0 seconds |
-
Data Structures | |
struct | dsFunctions |
Set of functions to be used as callbacks by the simulation loop. More... | |
Functions | |
DS_API void | dsSimulationLoop (int argc, char **argv, int window_width, int window_height, struct dsFunctions *fn) |
Does the complete simulation. | |
DS_API void | dsError (char *msg,...) |
exit with error message. | |
DS_API void | dsDebug (char *msg,...) |
exit with error message and core dump. | |
DS_API void | dsPrint (char *msg,...) |
print log message | |
DS_API void | dsSetViewpoint (float xyz[3], float hpr[3]) |
Sets the viewpoint. | |
DS_API void | dsGetViewpoint (float xyz[3], float hpr[3]) |
Gets the viewpoint. | |
DS_API void | dsStop () |
Stop the simulation loop. | |
DS_API double | dsElapsedTime () |
Get the elapsed time (on wall-clock). | |
DS_API void | dsSetTexture (int texture_number) |
Toggle the rendering of textures. | |
DS_API void | dsSetColor (float red, float green, float blue) |
Set the color with which geometry is drawn. | |
DS_API void | dsSetColorAlpha (float red, float green, float blue, float alpha) |
Set the color and transparency with which geometry is drawn. | |
DS_API void | dsDrawBox (const float pos[3], const float R[12], const float sides[3]) |
Draw a box. | |
DS_API void | dsDrawSphere (const float pos[3], const float R[12], float radius) |
Draw a sphere. | |
DS_API void | dsDrawTriangle (const float pos[3], const float R[12], const float *v0, const float *v1, const float *v2, int solid) |
Draw a triangle. | |
-DS_API void | dsDrawCylinder (const float pos[3], const float R[12], float length, float radius) |
Draw a z-aligned cylinder. | |
-DS_API void | dsDrawCapsule (const float pos[3], const float R[12], float length, float radius) |
Draw a z-aligned capsule. | |
-DS_API void | dsDrawLine (const float pos1[3], const float pos2[3]) |
Draw a line. | |
-DS_API void | dsDrawConvex (const float pos[3], const float R[12], float *_planes, unsigned int _planecount, float *_points, unsigned int _pointcount, unsigned int *_polygons) |
Draw a convex shape. | |
DS_API void | dsSetSphereQuality (int n) |
Set the quality with which curved objects are rendered. |
-The user is able to click+drag in the main window to move the camera: left button - pan and tilt. right button - forward and sideways. left + right button (or middle button) - sideways and up.
DS_API void dsDebug | -( | -char * | -msg, | -|
- | - | - | ... | - |
- | ) | -- |
-exit with error message and core dump. -
-this functions tries to dump core or start the debugger.
msg | format strin, like printf, without the newline character. |
DS_API void dsDrawBox | -( | -const float | -pos[3], | -|
- | - | const float | -R[12], | -|
- | - | const float | -sides[3] | - |
- | ) | -- |
-Draw a box. -
-
pos | is the x,y,z of the center of the object. | |
R | is a 3x3 rotation matrix for the object, stored by row like this: [ R11 R12 R13 0 ] [ R21 R22 R23 0 ] [ R31 R32 R33 0 ] | |
sides[] | is an array of x,y,z side lengths. |
DS_API void dsDrawSphere | -( | -const float | -pos[3], | -|
- | - | const float | -R[12], | -|
- | - | float | -radius | - |
- | ) | -- |
-Draw a sphere. -
-
pos | Position of center. | |
R | orientation. | |
radius |
DS_API void dsDrawTriangle | -( | -const float | -pos[3], | -|
- | - | const float | -R[12], | -|
- | - | const float * | -v0, | -|
- | - | const float * | -v1, | -|
- | - | const float * | -v2, | -|
- | - | int | -solid | - |
- | ) | -- |
-Draw a triangle. -
-
pos | Position of center | |
R | orientation | |
v0 | first vertex | |
v1 | second | |
v2 | third vertex | |
solid | set to 0 for wireframe |
DS_API double dsElapsedTime | -( | -- | ) | -- |
-Get the elapsed time (on wall-clock). -
-It returns the nr of seconds since the last call to this function. -
DS_API void dsError | -( | -char * | -msg, | -|
- | - | - | ... | - |
- | ) | -- |
-exit with error message. -
-This function displays an error message then exit.
msg | format strin, like printf, without the newline character. |
DS_API void dsGetViewpoint | -( | -float | -xyz[3], | -|
- | - | float | -hpr[3] | - |
- | ) | -- |
-Gets the viewpoint. -
-
xyz | position | |
hpr | heading,pitch,roll. |
DS_API void dsPrint | -( | -char * | -msg, | -|
- | - | - | ... | - |
- | ) | -- |
-print log message -
-
msg | format string, like printf, without the -. |
DS_API void dsSetColor | -( | -float | -red, | -|
- | - | float | -green, | -|
- | - | float | -blue | - |
- | ) | -- |
-Set the color with which geometry is drawn. -
-
red | Red component from 0 to 1 | |
green | Green component from 0 to 1 | |
blue | Blue component from 0 to 1 |
DS_API void dsSetColorAlpha | -( | -float | -red, | -|
- | - | float | -green, | -|
- | - | float | -blue, | -|
- | - | float | -alpha | - |
- | ) | -- |
-Set the color and transparency with which geometry is drawn. -
-
alpha | Note that alpha transparency is a misnomer: it is alpha opacity. 1.0 means fully opaque, and 0.0 means fully transparent. |
DS_API void dsSetSphereQuality | -( | -int | -n | -) | -- |
-Set the quality with which curved objects are rendered. -
-Higher numbers are higher quality, but slower to draw. This must be set before the first objects are drawn to be effective. Default sphere quality is 1, default capsule quality is 3. -
DS_API void dsSetTexture | -( | -int | -texture_number | -) | -- |
-Toggle the rendering of textures. -
-It changes the way objects are drawn. these changes will apply to all further dsDrawXXX() functions.
the | texture number must be a DS_xxx texture constant. The current texture is colored according to the current color. At the start of each frame, the texture is reset to none and the color is reset to white. |
DS_API void dsSetViewpoint | -( | -float | -xyz[3], | -|
- | - | float | -hpr[3] | - |
- | ) | -- |
-Sets the viewpoint. -
-
xyz | camera position. | |
hpr | contains heading, pitch and roll numbers in degrees. heading=0 points along the x axis, pitch=0 is looking towards the horizon, and roll 0 is "unrotated". |
DS_API void dsSimulationLoop | -( | -int | -argc, | -|
- | - | char ** | -argv, | -|
- | - | int | -window_width, | -|
- | - | int | -window_height, | -|
- | - | struct dsFunctions * | -fn | - |
- | ) | -- |
-Does the complete simulation. -
-This function starts running the simulation, and only exits when the simulation is done. Function pointers should be provided for the callbacks.
argv | supports flags like '-notex' '-noshadow' '-pause' | |
fn | Callback functions. |
DS_API void dsStop | -( | -- | ) | -- |
-Stop the simulation loop. -
-Calling this from within dsSimulationLoop() will cause it to exit and return to the caller. it is the same as if the user used the exit command. using this outside the loop will have no effect. -
-
Functions | |
ODE_API dJointID | dJointCreateBall (dWorldID, dJointGroupID) |
Create a new joint of the ball type. | |
ODE_API dJointID | dJointCreateHinge (dWorldID, dJointGroupID) |
Create a new joint of the hinge type. | |
ODE_API dJointID | dJointCreateSlider (dWorldID, dJointGroupID) |
Create a new joint of the slider type. | |
ODE_API dJointID | dJointCreateContact (dWorldID, dJointGroupID, const dContact *) |
Create a new joint of the contact type. | |
ODE_API dJointID | dJointCreateHinge2 (dWorldID, dJointGroupID) |
Create a new joint of the hinge2 type. | |
ODE_API dJointID | dJointCreateUniversal (dWorldID, dJointGroupID) |
Create a new joint of the universal type. | |
ODE_API dJointID | dJointCreatePR (dWorldID, dJointGroupID) |
Create a new joint of the PR (Prismatic and Rotoide) type. | |
ODE_API dJointID | dJointCreateFixed (dWorldID, dJointGroupID) |
Create a new joint of the fixed type. | |
ODE_API dJointID | dJointCreateAMotor (dWorldID, dJointGroupID) |
Create a new joint of the A-motor type. | |
ODE_API dJointID | dJointCreateLMotor (dWorldID, dJointGroupID) |
Create a new joint of the L-motor type. | |
ODE_API dJointID | dJointCreatePlane2D (dWorldID, dJointGroupID) |
Create a new joint of the plane-2d type. | |
ODE_API void | dJointDestroy (dJointID) |
Destroy a joint. | |
ODE_API dJointGroupID | dJointGroupCreate (int max_size) |
Create a joint group. | |
ODE_API void | dJointGroupDestroy (dJointGroupID) |
Destroy a joint group. | |
ODE_API void | dJointGroupEmpty (dJointGroupID) |
Empty a joint group. | |
ODE_API void | dJointAttach (dJointID, dBodyID body1, dBodyID body2) |
Attach the joint to some new bodies. | |
-ODE_API void | dJointSetData (dJointID, void *data) |
Set the user-data pointer. | |
-ODE_API void * | dJointGetData (dJointID) |
Get the user-data pointer. | |
ODE_API int | dJointGetType (dJointID) |
Get the type of the joint. | |
ODE_API dBodyID | dJointGetBody (dJointID, int index) |
Return the bodies that this joint connects. | |
ODE_API void | dJointSetFeedback (dJointID, dJointFeedback *) |
Sets the datastructure that is to receive the feedback. | |
-ODE_API dJointFeedback * | dJointGetFeedback (dJointID) |
Gets the datastructure that is to receive the feedback. | |
ODE_API void | dJointSetBallAnchor (dJointID, dReal x, dReal y, dReal z) |
Set the joint anchor point. | |
-ODE_API void | dJointSetBallAnchor2 (dJointID, dReal x, dReal y, dReal z) |
Set the joint anchor point. | |
-ODE_API void | dJointSetBallParam (dJointID, int parameter, dReal value) |
Param setting for Ball joints. | |
-ODE_API void | dJointSetHingeAnchor (dJointID, dReal x, dReal y, dReal z) |
Set hinge anchor parameter. | |
-ODE_API void | dJointSetHingeAxis (dJointID, dReal x, dReal y, dReal z) |
Set hinge axis. | |
-ODE_API void | dJointSetHingeParam (dJointID, int parameter, dReal value) |
set joint parameter | |
ODE_API void | dJointAddHingeTorque (dJointID joint, dReal torque) |
Applies the torque about the hinge axis. | |
-ODE_API void | dJointSetSliderAxis (dJointID, dReal x, dReal y, dReal z) |
set the joint axis | |
-ODE_API void | dJointSetSliderAxisDelta (dJointID, dReal x, dReal y, dReal z, dReal ax, dReal ay, dReal az) |
-ODE_API void | dJointSetSliderParam (dJointID, int parameter, dReal value) |
set joint parameter | |
ODE_API void | dJointAddSliderForce (dJointID joint, dReal force) |
Applies the given force in the slider's direction. | |
-ODE_API void | dJointSetHinge2Anchor (dJointID, dReal x, dReal y, dReal z) |
set anchor | |
-ODE_API void | dJointSetHinge2Axis1 (dJointID, dReal x, dReal y, dReal z) |
set axis | |
-ODE_API void | dJointSetHinge2Axis2 (dJointID, dReal x, dReal y, dReal z) |
set axis | |
-ODE_API void | dJointSetHinge2Param (dJointID, int parameter, dReal value) |
set joint parameter | |
ODE_API void | dJointAddHinge2Torques (dJointID joint, dReal torque1, dReal torque2) |
Applies torque1 about the hinge2's axis 1, torque2 about the hinge2's axis 2. | |
-ODE_API void | dJointSetUniversalAnchor (dJointID, dReal x, dReal y, dReal z) |
set anchor | |
-ODE_API void | dJointSetUniversalAxis1 (dJointID, dReal x, dReal y, dReal z) |
set axis | |
-ODE_API void | dJointSetUniversalAxis2 (dJointID, dReal x, dReal y, dReal z) |
set axis | |
-ODE_API void | dJointSetUniversalParam (dJointID, int parameter, dReal value) |
set joint parameter | |
ODE_API void | dJointAddUniversalTorques (dJointID joint, dReal torque1, dReal torque2) |
Applies torque1 about the universal's axis 1, torque2 about the universal's axis 2. | |
-ODE_API void | dJointSetPRAnchor (dJointID, dReal x, dReal y, dReal z) |
set anchor | |
-ODE_API void | dJointSetPRAxis1 (dJointID, dReal x, dReal y, dReal z) |
set the axis for the prismatic articulation | |
-ODE_API void | dJointSetPRAxis2 (dJointID, dReal x, dReal y, dReal z) |
set the axis for the rotoide articulation | |
ODE_API void | dJointSetPRParam (dJointID, int parameter, dReal value) |
set joint parameter | |
ODE_API void | dJointAddPRTorque (dJointID j, dReal torque) |
Applies the torque about the rotoide axis of the PR joint. | |
-ODE_API void | dJointSetFixed (dJointID) |
Call this on the fixed joint after it has been attached to remember the current desired relative offset and desired relative rotation between the bodies. | |
ODE_API void | dJointSetAMotorNumAxes (dJointID, int num) |
set the nr of axes | |
-ODE_API void | dJointSetAMotorAxis (dJointID, int anum, int rel, dReal x, dReal y, dReal z) |
set axis | |
ODE_API void | dJointSetAMotorAngle (dJointID, int anum, dReal angle) |
Tell the AMotor what the current angle is along axis anum. | |
-ODE_API void | dJointSetAMotorParam (dJointID, int parameter, dReal value) |
set joint parameter | |
-ODE_API void | dJointSetAMotorMode (dJointID, int mode) |
set mode | |
ODE_API void | dJointAddAMotorTorques (dJointID, dReal torque1, dReal torque2, dReal torque3) |
Applies torque0 about the AMotor's axis 0, torque1 about the AMotor's axis 1, and torque2 about the AMotor's axis 2. | |
ODE_API void | dJointSetLMotorNumAxes (dJointID, int num) |
Set the number of axes that will be controlled by the LMotor. | |
ODE_API void | dJointSetLMotorAxis (dJointID, int anum, int rel, dReal x, dReal y, dReal z) |
Set the AMotor axes. | |
-ODE_API void | dJointSetLMotorParam (dJointID, int parameter, dReal value) |
set joint parameter | |
-ODE_API void | dJointSetPlane2DXParam (dJointID, int parameter, dReal value) |
-ODE_API void | dJointSetPlane2DYParam (dJointID, int parameter, dReal value) |
-ODE_API void | dJointSetPlane2DAngleParam (dJointID, int parameter, dReal value) |
-ODE_API dReal | dJointGetBallParam (dJointID, int parameter) |
get joint parameter | |
ODE_API void | dJointGetHingeAnchor (dJointID, dVector3 result) |
Get the hinge anchor point, in world coordinates. | |
ODE_API void | dJointGetHingeAnchor2 (dJointID, dVector3 result) |
Get the joint anchor point, in world coordinates. | |
-ODE_API void | dJointGetHingeAxis (dJointID, dVector3 result) |
get axis | |
-ODE_API dReal | dJointGetHingeParam (dJointID, int parameter) |
get joint parameter | |
ODE_API dReal | dJointGetHingeAngle (dJointID) |
Get the hinge angle. | |
-ODE_API dReal | dJointGetHingeAngleRate (dJointID) |
Get the hinge angle time derivative. | |
ODE_API dReal | dJointGetSliderPosition (dJointID) |
Get the slider linear position (i.e. the slider's extension). | |
-ODE_API dReal | dJointGetSliderPositionRate (dJointID) |
Get the slider linear position's time derivative. | |
-ODE_API void | dJointGetSliderAxis (dJointID, dVector3 result) |
Get the slider axis. | |
-ODE_API dReal | dJointGetSliderParam (dJointID, int parameter) |
get joint parameter | |
ODE_API void | dJointGetHinge2Anchor (dJointID, dVector3 result) |
Get the joint anchor point, in world coordinates. | |
-ODE_API void | dJointGetHinge2Anchor2 (dJointID, dVector3 result) |
Get the joint anchor point, in world coordinates. This returns the point on body 2. If the joint is perfectly satisfied, this will return the same value as dJointGetHinge2Anchor. If not, this value will be slightly different. This can be used, for example, to see how far the joint has come apart. | |
-ODE_API void | dJointGetHinge2Axis1 (dJointID, dVector3 result) |
Get joint axis. | |
-ODE_API void | dJointGetHinge2Axis2 (dJointID, dVector3 result) |
Get joint axis. | |
-ODE_API dReal | dJointGetHinge2Param (dJointID, int parameter) |
get joint parameter | |
-ODE_API dReal | dJointGetHinge2Angle1 (dJointID) |
Get angle. | |
-ODE_API dReal | dJointGetHinge2Angle1Rate (dJointID) |
Get time derivative of angle. | |
-ODE_API dReal | dJointGetHinge2Angle2Rate (dJointID) |
Get time derivative of angle. | |
ODE_API void | dJointGetUniversalAnchor (dJointID, dVector3 result) |
Get the joint anchor point, in world coordinates. | |
ODE_API void | dJointGetUniversalAnchor2 (dJointID, dVector3 result) |
Get the joint anchor point, in world coordinates. | |
-ODE_API void | dJointGetUniversalAxis1 (dJointID, dVector3 result) |
Get axis. | |
-ODE_API void | dJointGetUniversalAxis2 (dJointID, dVector3 result) |
Get axis. | |
-ODE_API dReal | dJointGetUniversalParam (dJointID, int parameter) |
get joint parameter | |
ODE_API void | dJointGetUniversalAngles (dJointID, dReal *angle1, dReal *angle2) |
Get both angles at the same time. | |
-ODE_API dReal | dJointGetUniversalAngle1 (dJointID) |
Get angle. | |
-ODE_API dReal | dJointGetUniversalAngle2 (dJointID) |
Get angle. | |
-ODE_API dReal | dJointGetUniversalAngle1Rate (dJointID) |
Get time derivative of angle. | |
-ODE_API dReal | dJointGetUniversalAngle2Rate (dJointID) |
Get time derivative of angle. | |
ODE_API void | dJointGetPRAnchor (dJointID, dVector3 result) |
Get the joint anchor point, in world coordinates. | |
ODE_API dReal | dJointGetPRPosition (dJointID) |
Get the PR linear position (i.e. the prismatic's extension). | |
-ODE_API dReal | dJointGetPRPositionRate (dJointID) |
Get the PR linear position's time derivative. | |
-ODE_API void | dJointGetPRAxis1 (dJointID, dVector3 result) |
Get the prismatic axis. | |
-ODE_API void | dJointGetPRAxis2 (dJointID, dVector3 result) |
Get the Rotoide axis. | |
-ODE_API dReal | dJointGetPRParam (dJointID, int parameter) |
get joint parameter | |
ODE_API int | dJointGetAMotorNumAxes (dJointID) |
Get the number of angular axes that will be controlled by the AMotor. | |
ODE_API void | dJointGetAMotorAxis (dJointID, int anum, dVector3 result) |
Get the AMotor axes. | |
ODE_API int | dJointGetAMotorAxisRel (dJointID, int anum) |
Get axis. | |
ODE_API dReal | dJointGetAMotorAngle (dJointID, int anum) |
Get the current angle for axis. | |
ODE_API dReal | dJointGetAMotorAngleRate (dJointID, int anum) |
Get the current angle rate for axis anum. | |
-ODE_API dReal | dJointGetAMotorParam (dJointID, int parameter) |
get joint parameter | |
ODE_API int | dJointGetAMotorMode (dJointID) |
Get the angular motor mode. | |
-ODE_API int | dJointGetLMotorNumAxes (dJointID) |
Get nr of axes. | |
-ODE_API void | dJointGetLMotorAxis (dJointID, int anum, dVector3 result) |
Get axis. | |
-ODE_API dReal | dJointGetLMotorParam (dJointID, int parameter) |
get joint parameter | |
-ODE_API dReal | dJointGetFixedParam (dJointID, int parameter) |
get joint parameter | |
-ODE_API dJointID | dConnectingJoint (dBodyID, dBodyID) |
-ODE_API int | dConnectingJointList (dBodyID, dBodyID, dJointID *) |
ODE_API int | dAreConnected (dBodyID, dBodyID) |
Utility function. | |
ODE_API int | dAreConnectedExcluding (dBodyID body1, dBodyID body2, int joint_type) |
Utility function. |
-A joint has a set of parameters that can be set. These include:
-
ODE_API int dAreConnected | -( | -dBodyID | -, | -|
- | - | dBodyID | -- | |
- | ) | -- |
-Utility function. -
-
ODE_API int dAreConnectedExcluding | -( | -dBodyID | -body1, | -|
- | - | dBodyID | -body2, | -|
- | - | int | -joint_type | - |
- | ) | -- |
-Utility function. -
-
body1 | A body to check. | |
body2 | A body to check. | |
joint_type | is a dJointTypeXXX constant. This is useful for deciding whether to add contact joints between two bodies: if they are already connected by non-contact joints then it may not be appropriate to add contacts, however it is okay to add more contact between- bodies that already have contacts. |
ODE_API void dJointAddAMotorTorques | -( | -dJointID | -, | -|
- | - | dReal | -torque1, | -|
- | - | dReal | -torque2, | -|
- | - | dReal | -torque3 | - |
- | ) | -- |
-Applies torque0 about the AMotor's axis 0, torque1 about the AMotor's axis 1, and torque2 about the AMotor's axis 2. -
-
ODE_API void dJointAddHinge2Torques | -( | -dJointID | -joint, | -|
- | - | dReal | -torque1, | -|
- | - | dReal | -torque2 | - |
- | ) | -- |
-Applies torque1 about the hinge2's axis 1, torque2 about the hinge2's axis 2. -
-
ODE_API void dJointAddHingeTorque | -( | -dJointID | -joint, | -|
- | - | dReal | -torque | - |
- | ) | -- |
-Applies the torque about the hinge axis. -
-That is, it applies a torque with specified magnitude in the direction of the hinge axis, to body 1, and with the same magnitude but in opposite direction to body 2. This function is just a wrapper for dBodyAddTorque()} -
ODE_API void dJointAddPRTorque | -( | -dJointID | -j, | -|
- | - | dReal | -torque | - |
- | ) | -- |
-Applies the torque about the rotoide axis of the PR joint. -
-That is, it applies a torque with specified magnitude in the direction of the rotoide axis, to body 1, and with the same magnitude but in opposite direction to body 2. This function is just a wrapper for dBodyAddTorque()} -
ODE_API void dJointAddSliderForce | -( | -dJointID | -joint, | -|
- | - | dReal | -force | - |
- | ) | -- |
-Applies the given force in the slider's direction. -
-That is, it applies a force with specified magnitude, in the direction of slider's axis, to body1, and with the same magnitude but opposite direction to body2. This function is just a wrapper for dBodyAddForce(). -
ODE_API void dJointAddUniversalTorques | -( | -dJointID | -joint, | -|
- | - | dReal | -torque1, | -|
- | - | dReal | -torque2 | - |
- | ) | -- |
-Applies torque1 about the universal's axis 1, torque2 about the universal's axis 2. -
-
ODE_API void dJointAttach | -( | -dJointID | -, | -|
- | - | dBodyID | -body1, | -|
- | - | dBodyID | -body2 | - |
- | ) | -- |
-Attach the joint to some new bodies. -
-If the joint is already attached, it will be detached from the old bodies first. To attach this joint to only one body, set body1 or body2 to zero - a zero body refers to the static environment. Setting both bodies to zero puts the joint into "limbo", i.e. it will have no effect on the simulation.
ODE_API dJointID dJointCreateAMotor | -( | -dWorldID | -, | -|
- | - | dJointGroupID | -- | |
- | ) | -- |
-Create a new joint of the A-motor type. -
-
dJointGroupID | set to 0 to allocate the joint normally. If it is nonzero the joint is allocated in the given joint group. |
ODE_API dJointID dJointCreateBall | -( | -dWorldID | -, | -|
- | - | dJointGroupID | -- | |
- | ) | -- |
-Create a new joint of the ball type. -
-
dJointGroupID | set to 0 to allocate the joint normally. If it is nonzero the joint is allocated in the given joint group. |
ODE_API dJointID dJointCreateContact | -( | -dWorldID | -, | -|
- | - | dJointGroupID | -, | -|
- | - | const dContact * | -- | |
- | ) | -- |
-Create a new joint of the contact type. -
-
dJointGroupID | set to 0 to allocate the joint normally. If it is nonzero the joint is allocated in the given joint group. |
ODE_API dJointID dJointCreateFixed | -( | -dWorldID | -, | -|
- | - | dJointGroupID | -- | |
- | ) | -- |
-Create a new joint of the fixed type. -
-
dJointGroupID | set to 0 to allocate the joint normally. If it is nonzero the joint is allocated in the given joint group. |
ODE_API dJointID dJointCreateHinge | -( | -dWorldID | -, | -|
- | - | dJointGroupID | -- | |
- | ) | -- |
-Create a new joint of the hinge type. -
-
dJointGroupID | set to 0 to allocate the joint normally. If it is nonzero the joint is allocated in the given joint group. |
ODE_API dJointID dJointCreateHinge2 | -( | -dWorldID | -, | -|
- | - | dJointGroupID | -- | |
- | ) | -- |
-Create a new joint of the hinge2 type. -
-
dJointGroupID | set to 0 to allocate the joint normally. If it is nonzero the joint is allocated in the given joint group. |
ODE_API dJointID dJointCreateLMotor | -( | -dWorldID | -, | -|
- | - | dJointGroupID | -- | |
- | ) | -- |
-Create a new joint of the L-motor type. -
-
dJointGroupID | set to 0 to allocate the joint normally. If it is nonzero the joint is allocated in the given joint group. |
ODE_API dJointID dJointCreatePlane2D | -( | -dWorldID | -, | -|
- | - | dJointGroupID | -- | |
- | ) | -- |
-Create a new joint of the plane-2d type. -
-
dJointGroupID | set to 0 to allocate the joint normally. If it is nonzero the joint is allocated in the given joint group. |
ODE_API dJointID dJointCreatePR | -( | -dWorldID | -, | -|
- | - | dJointGroupID | -- | |
- | ) | -- |
-Create a new joint of the PR (Prismatic and Rotoide) type. -
-
dJointGroupID | set to 0 to allocate the joint normally. If it is nonzero the joint is allocated in the given joint group. |
ODE_API dJointID dJointCreateSlider | -( | -dWorldID | -, | -|
- | - | dJointGroupID | -- | |
- | ) | -- |
-Create a new joint of the slider type. -
-
dJointGroupID | set to 0 to allocate the joint normally. If it is nonzero the joint is allocated in the given joint group. |
ODE_API dJointID dJointCreateUniversal | -( | -dWorldID | -, | -|
- | - | dJointGroupID | -- | |
- | ) | -- |
-Create a new joint of the universal type. -
-
dJointGroupID | set to 0 to allocate the joint normally. If it is nonzero the joint is allocated in the given joint group. |
ODE_API void dJointDestroy | -( | -dJointID | -- | ) | -- |
-Destroy a joint. -
-disconnects it from its attached bodies and removing it from the world. However, if the joint is a member of a group then this function has no effect - to destroy that joint the group must be emptied or destroyed. -
ODE_API dReal dJointGetAMotorAngle | -( | -dJointID | -, | -|
- | - | int | -anum | - |
- | ) | -- |
-Get the current angle for axis. -
-
ODE_API dReal dJointGetAMotorAngleRate | -( | -dJointID | -, | -|
- | - | int | -anum | - |
- | ) | -- |
-Get the current angle rate for axis anum. -
-
ODE_API void dJointGetAMotorAxis | -( | -dJointID | -, | -|
- | - | int | -anum, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Get the AMotor axes. -
-
anum | selects the axis to change (0,1 or 2). | |
rel | Each axis can have one of three ``relative orientation'' modes.
|
ODE_API int dJointGetAMotorAxisRel | -( | -dJointID | -, | -|
- | - | int | -anum | - |
- | ) | -- |
-Get axis. -
-
ODE_API int dJointGetAMotorMode | -( | -dJointID | -- | ) | -- |
-Get the angular motor mode. -
-
mode | must be one of the following constants:
|
ODE_API int dJointGetAMotorNumAxes | -( | -dJointID | -- | ) | -- |
-Get the number of angular axes that will be controlled by the AMotor. -
-
num | can range from 0 (which effectively deactivates the joint) to 3. This is automatically set to 3 in dAMotorEuler mode. |
ODE_API dBodyID dJointGetBody | -( | -dJointID | -, | -|
- | - | int | -index | - |
- | ) | -- |
-Return the bodies that this joint connects. -
-
index | return the first (0) or second (1) body. |
ODE_API void dJointGetHinge2Anchor | -( | -dJointID | -, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Get the joint anchor point, in world coordinates. -
-
ODE_API void dJointGetHingeAnchor | -( | -dJointID | -, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Get the hinge anchor point, in world coordinates. -
-This returns the point on body 1. If the joint is perfectly satisfied, this will be the same as the point on body 2. -
ODE_API void dJointGetHingeAnchor2 | -( | -dJointID | -, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Get the joint anchor point, in world coordinates. -
-
ODE_API dReal dJointGetHingeAngle | -( | -dJointID | -- | ) | -- |
-Get the hinge angle. -
-The angle is measured between the two bodies, or between the body and the static environment. The angle will be between -pi..pi. When the hinge anchor or axis is set, the current position of the attached bodies is examined and that position will be the zero angle. -
ODE_API void dJointGetPRAnchor | -( | -dJointID | -, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Get the joint anchor point, in world coordinates. -
-
ODE_API dReal dJointGetPRPosition | -( | -dJointID | -- | ) | -- |
-Get the PR linear position (i.e. the prismatic's extension). -
-When the axis is set, the current position of the attached bodies is examined and that position will be the zero position.
-The position is the "oriented" length between the position = (Prismatic axis) dot_product [(body1 + offset) - (body2 + anchor2)] -
ODE_API dReal dJointGetSliderPosition | -( | -dJointID | -- | ) | -- |
-Get the slider linear position (i.e. the slider's extension). -
-When the axis is set, the current position of the attached bodies is examined and that position will be the zero position. -
ODE_API int dJointGetType | -( | -dJointID | -- | ) | -- |
-Get the type of the joint. -
-
ODE_API void dJointGetUniversalAnchor | -( | -dJointID | -, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Get the joint anchor point, in world coordinates. -
-
ODE_API void dJointGetUniversalAnchor2 | -( | -dJointID | -, | -|
- | - | dVector3 | -result | - |
- | ) | -- |
-Get the joint anchor point, in world coordinates. -
-
ODE_API void dJointGetUniversalAngles | -( | -dJointID | -, | -|
- | - | dReal * | -angle1, | -|
- | - | dReal * | -angle2 | - |
- | ) | -- |
-Get both angles at the same time. -
-
joint | The universal joint for which we want to calculate the angles | |
angle1 | The angle between the body1 and the axis 1 | |
angle2 | The angle between the body2 and the axis 2 |
ODE_API dJointGroupID dJointGroupCreate | -( | -int | -max_size | -) | -- |
-Create a joint group. -
-
max_size | deprecated. Set to 0. |
ODE_API void dJointGroupDestroy | -( | -dJointGroupID | -- | ) | -- |
-Destroy a joint group. -
-All joints in the joint group will be destroyed. -
ODE_API void dJointGroupEmpty | -( | -dJointGroupID | -- | ) | -- |
-Empty a joint group. -
-All joints in the joint group will be destroyed, but the joint group itself will not be destroyed. -
ODE_API void dJointSetAMotorAngle | -( | -dJointID | -, | -|
- | - | int | -anum, | -|
- | - | dReal | -angle | - |
- | ) | -- |
-Tell the AMotor what the current angle is along axis anum. -
-This function should only be called in dAMotorUser mode, because in this mode the AMotor has no other way of knowing the joint angles. The angle information is needed if stops have been set along the axis, but it is not needed for axis motors. -
ODE_API void dJointSetAMotorNumAxes | -( | -dJointID | -, | -|
- | - | int | -num | - |
- | ) | -- |
-set the nr of axes -
-
num | 0..3 |
ODE_API void dJointSetBallAnchor | -( | -dJointID | -, | -|
- | - | dReal | -x, | -|
- | - | dReal | -y, | -|
- | - | dReal | -z | - |
- | ) | -- |
-Set the joint anchor point. -
-The joint will try to keep this point on each body together. The input is specified in world coordinates. -
ODE_API void dJointSetFeedback | -( | -dJointID | -, | -|
- | - | dJointFeedback * | -- | |
- | ) | -- |
-Sets the datastructure that is to receive the feedback. -
-The feedback can be used by the user, so that it is known how much force an individual joint exerts. -
ODE_API void dJointSetLMotorAxis | -( | -dJointID | -, | -|
- | - | int | -anum, | -|
- | - | int | -rel, | -|
- | - | dReal | -x, | -|
- | - | dReal | -y, | -|
- | - | dReal | -z | - |
- | ) | -- |
-Set the AMotor axes. -
-
anum | selects the axis to change (0,1 or 2). | |
rel | Each axis can have one of three ``relative orientation'' modes
|
ODE_API void dJointSetLMotorNumAxes | -( | -dJointID | -, | -|
- | - | int | -num | - |
- | ) | -- |
-Set the number of axes that will be controlled by the LMotor. -
-
num | can range from 0 (which effectively deactivates the joint) to 3. |
ODE_API void dJointSetPRParam | -( | -dJointID | -, | -|
- | - | int | -parameter, | -|
- | - | dReal | -value | - |
- | ) | -- |
-set joint parameter -
-
-
Functions | |
ODE_API dWorldID | dWorldCreate (void) |
Create a new, empty world and return its ID number. | |
ODE_API void | dWorldDestroy (dWorldID world) |
Destroy a world and everything in it. | |
ODE_API void | dWorldSetGravity (dWorldID, dReal x, dReal y, dReal z) |
Set the world's global gravity vector. | |
-ODE_API void | dWorldGetGravity (dWorldID, dVector3 gravity) |
Get the gravity vector for a given world. | |
ODE_API void | dWorldSetERP (dWorldID, dReal erp) |
Set the global ERP value, that controls how much error correction is performed in each time step. | |
ODE_API dReal | dWorldGetERP (dWorldID) |
Get the error reduction parameter. | |
ODE_API void | dWorldSetCFM (dWorldID, dReal cfm) |
Set the global CFM (constraint force mixing) value. | |
ODE_API dReal | dWorldGetCFM (dWorldID) |
Get the constraint force mixing value. | |
ODE_API void | dWorldStep (dWorldID, dReal stepsize) |
Step the world. | |
ODE_API void | dWorldImpulseToForce (dWorldID, dReal stepsize, dReal ix, dReal iy, dReal iz, dVector3 force) |
Converts an impulse to a force. | |
ODE_API void | dWorldQuickStep (dWorldID w, dReal stepsize) |
Step the world. | |
ODE_API void | dWorldSetQuickStepNumIterations (dWorldID, int num) |
Set the number of iterations that the QuickStep method performs per step. | |
ODE_API int | dWorldGetQuickStepNumIterations (dWorldID) |
Get the number of iterations that the QuickStep method performs per step. | |
ODE_API void | dWorldSetQuickStepW (dWorldID, dReal over_relaxation) |
Set the SOR over-relaxation parameter. | |
ODE_API dReal | dWorldGetQuickStepW (dWorldID) |
Get the SOR over-relaxation parameter. | |
ODE_API void | dWorldSetContactMaxCorrectingVel (dWorldID, dReal vel) |
Set the maximum correcting velocity that contacts are allowed to generate. | |
-ODE_API dReal | dWorldGetContactMaxCorrectingVel (dWorldID) |
Get the maximum correcting velocity that contacts are allowed to generated. | |
ODE_API void | dWorldSetContactSurfaceLayer (dWorldID, dReal depth) |
Set the depth of the surface layer around all geometry objects. | |
ODE_API dReal | dWorldGetContactSurfaceLayer (dWorldID) |
Get the depth of the surface layer around all geometry objects. | |
ODE_API void | dWorldStepFast1 (dWorldID, dReal stepsize, int maxiterations) |
Step the world using the StepFast1 algorithm. |
-All the objects in a world exist at the same point in time, thus one reason to use separate worlds is to simulate systems at different rates. Most applications will only need one world.
ODE_API dWorldID dWorldCreate | -( | -void | -- | ) | -- |
-Create a new, empty world and return its ID number. -
-
ODE_API void dWorldDestroy | -( | -dWorldID | -world | -) | -- |
-Destroy a world and everything in it. -
-This includes all bodies, and all joints that are not part of a joint group. Joints that are part of a joint group will be deactivated, and can be destroyed by calling, for example, dJointGroupEmpty().
-
world | the identifier for the world the be destroyed. |
ODE_API dReal dWorldGetCFM | -( | -dWorldID | -- | ) | -- |
-Get the constraint force mixing value. -
-
ODE_API dReal dWorldGetContactSurfaceLayer | -( | -dWorldID | -- | ) | -- |
-Get the depth of the surface layer around all geometry objects. -
-
ODE_API dReal dWorldGetERP | -( | -dWorldID | -- | ) | -- |
-Get the error reduction parameter. -
-
ODE_API int dWorldGetQuickStepNumIterations | -( | -dWorldID | -- | ) | -- |
-Get the number of iterations that the QuickStep method performs per step. -
-
ODE_API dReal dWorldGetQuickStepW | -( | -dWorldID | -- | ) | -- |
-Get the SOR over-relaxation parameter. -
-
ODE_API void dWorldImpulseToForce | -( | -dWorldID | -, | -|
- | - | dReal | -stepsize, | -|
- | - | dReal | -ix, | -|
- | - | dReal | -iy, | -|
- | - | dReal | -iz, | -|
- | - | dVector3 | -force | - |
- | ) | -- |
-Converts an impulse to a force. -
-
ODE_API void dWorldQuickStep | -( | -dWorldID | -w, | -|
- | - | dReal | -stepsize | - |
- | ) | -- |
-Step the world. -
-
-QuickStep is great for stacks of objects especially when the auto-disable feature is used as well. However, it has poor accuracy for near-singular systems. Near-singular systems can occur when using high-friction contacts, motors, or certain articulated structures. For example, a robot with multiple legs sitting on the ground may be near-singular.
-There are ways to help overcome QuickStep's inaccuracy problems:
ODE_API void dWorldSetCFM | -( | -dWorldID | -, | -|
- | - | dReal | -cfm | - |
- | ) | -- |
-Set the global CFM (constraint force mixing) value. -
-
cfm | Typical values are in the range {10^{-9}} -- 1. The default is 10^-5 if single precision is being used, or 10^-10 if double precision is being used. |
ODE_API void dWorldSetContactMaxCorrectingVel | -( | -dWorldID | -, | -|
- | - | dReal | -vel | - |
- | ) | -- |
-Set the maximum correcting velocity that contacts are allowed to generate. -
-
vel | The default value is infinity (i.e. no limit). |
ODE_API void dWorldSetContactSurfaceLayer | -( | -dWorldID | -, | -|
- | - | dReal | -depth | - |
- | ) | -- |
-Set the depth of the surface layer around all geometry objects. -
-
depth | The default value is zero. |
ODE_API void dWorldSetERP | -( | -dWorldID | -, | -|
- | - | dReal | -erp | - |
- | ) | -- |
-Set the global ERP value, that controls how much error correction is performed in each time step. -
-
dWorldID | the identifier of the world. | |
erp | Typical values are in the range 0.1--0.8. The default is 0.2. |
ODE_API void dWorldSetGravity | -( | -dWorldID | -, | -|
- | - | dReal | -x, | -|
- | - | dReal | -y, | -|
- | - | dReal | -z | - |
- | ) | -- |
-Set the world's global gravity vector. -
-The units are m/s^2, so Earth's gravity vector would be (0,0,-9.81), assuming that +z is up. The default is no gravity, i.e. (0,0,0). -
ODE_API void dWorldSetQuickStepNumIterations | -( | -dWorldID | -, | -|
- | - | int | -num | - |
- | ) | -- |
-Set the number of iterations that the QuickStep method performs per step. -
-
num | The default is 20 iterations. |
ODE_API void dWorldSetQuickStepW | -( | -dWorldID | -, | -|
- | - | dReal | -over_relaxation | - |
- | ) | -- |
-Set the SOR over-relaxation parameter. -
-
over_relaxation | value to use by SOR |
ODE_API void dWorldStep | -( | -dWorldID | -, | -|
- | - | dReal | -stepsize | - |
- | ) | -- |
-Step the world. -
-This uses a "big matrix" method that takes time on the order of m^3 and memory on the order of m^2, where m is the total number of constraint rows. For large systems this will use a lot of memory and can be very slow, but this is currently the most accurate method.
-
stepsize | The number of seconds that the simulation has to advance. |
ODE_API void dWorldStepFast1 | -( | -dWorldID | -, | -|
- | - | dReal | -stepsize, | -|
- | - | int | -maxiterations | - |
- | ) | -- |
-Step the world using the StepFast1 algorithm. -
-
stepsize | the nr of seconds to advance the simulation. | |
maxiterations | The number of iterations to perform. |
-
-
-The Open Dynamics Engine (ODE) is a free, industrial quality library for simulating articulated rigid body dynamics. ODE is being developed by Russell Smith with help from several contributors.
-This document describes the library API. For a more general introduction to ODE, please see the Online Handbook.
-
-We are still working on getting the full API documentated. In the meantime, please refer to the Online Handbook
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef _ODE_MASS_H_ -00024 #define _ODE_MASS_H_ -00025 -00026 #include <ode/common.h> -00027 -00028 #ifdef __cplusplus -00029 extern "C" { -00030 #endif -00031 -00032 struct dMass; -00033 typedef struct dMass dMass; -00034 -00043 ODE_API int dMassCheck(const dMass *m); -00044 -00045 ODE_API void dMassSetZero (dMass *); -00046 -00047 ODE_API void dMassSetParameters (dMass *, dReal themass, -00048 dReal cgx, dReal cgy, dReal cgz, -00049 dReal I11, dReal I22, dReal I33, -00050 dReal I12, dReal I13, dReal I23); -00051 -00052 ODE_API void dMassSetSphere (dMass *, dReal density, dReal radius); -00053 ODE_API void dMassSetSphereTotal (dMass *, dReal total_mass, dReal radius); -00054 -00055 ODE_API void dMassSetCapsule (dMass *, dReal density, int direction, -00056 dReal radius, dReal length); -00057 ODE_API void dMassSetCapsuleTotal (dMass *, dReal total_mass, int direction, -00058 dReal radius, dReal length); -00059 -00060 ODE_API void dMassSetCylinder (dMass *, dReal density, int direction, -00061 dReal radius, dReal length); -00062 ODE_API void dMassSetCylinderTotal (dMass *, dReal total_mass, int direction, -00063 dReal radius, dReal length); -00064 -00065 ODE_API void dMassSetBox (dMass *, dReal density, -00066 dReal lx, dReal ly, dReal lz); -00067 ODE_API void dMassSetBoxTotal (dMass *, dReal total_mass, -00068 dReal lx, dReal ly, dReal lz); -00069 -00070 ODE_API void dMassSetTrimesh (dMass *, dReal density, dGeomID g); -00071 -00072 ODE_API void dMassSetTrimeshTotal (dMass *m, dReal total_mass, dGeomID g); -00073 -00074 ODE_API void dMassAdjust (dMass *, dReal newmass); -00075 -00076 ODE_API void dMassTranslate (dMass *, dReal x, dReal y, dReal z); -00077 -00078 ODE_API void dMassRotate (dMass *, const dMatrix3 R); -00079 -00080 ODE_API void dMassAdd (dMass *a, const dMass *b); -00081 -00082 // Backwards compatible API -00083 #define dMassSetCappedCylinder dMassSetCapsule -00084 #define dMassSetCappedCylinderTotal dMassSetCapsuleTotal -00085 -00086 -00087 struct dMass { -00088 dReal mass; -00089 dVector4 c; -00090 dMatrix3 I; -00091 -00092 #ifdef __cplusplus -00093 dMass() -00094 { dMassSetZero (this); } -00095 void setZero() -00096 { dMassSetZero (this); } -00097 void setParameters (dReal themass, dReal cgx, dReal cgy, dReal cgz, -00098 dReal I11, dReal I22, dReal I33, -00099 dReal I12, dReal I13, dReal I23) -00100 { dMassSetParameters (this,themass,cgx,cgy,cgz,I11,I22,I33,I12,I13,I23); } -00101 void setSphere (dReal density, dReal radius) -00102 { dMassSetSphere (this,density,radius); } -00103 void setCapsule (dReal density, int direction, dReal a, dReal b) -00104 { dMassSetCappedCylinder (this,density,direction,a,b); } -00105 void setCappedCylinder (dReal density, int direction, dReal a, dReal b) -00106 { setCapsule(density, direction, a, b); } -00107 void setBox (dReal density, dReal lx, dReal ly, dReal lz) -00108 { dMassSetBox (this,density,lx,ly,lz); } -00109 void adjust (dReal newmass) -00110 { dMassAdjust (this,newmass); } -00111 void translate (dReal x, dReal y, dReal z) -00112 { dMassTranslate (this,x,y,z); } -00113 void rotate (const dMatrix3 R) -00114 { dMassRotate (this,R); } -00115 void add (const dMass *b) -00116 { dMassAdd (this,b); } -00117 #endif -00118 }; -00119 -00120 -00121 #ifdef __cplusplus -00122 } -00123 #endif -00124 -00125 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 /* optimized and unoptimized vector and matrix functions */ -00024 -00025 #ifndef _ODE_MATRIX_H_ -00026 #define _ODE_MATRIX_H_ -00027 -00028 #include <ode/common.h> -00029 -00030 -00031 #ifdef __cplusplus -00032 extern "C" { -00033 #endif -00034 -00035 -00036 /* set a vector/matrix of size n to all zeros, or to a specific value. */ -00037 -00038 ODE_API void dSetZero (dReal *a, int n); -00039 ODE_API void dSetValue (dReal *a, int n, dReal value); -00040 -00041 -00042 /* get the dot product of two n*1 vectors. if n <= 0 then -00043 * zero will be returned (in which case a and b need not be valid). -00044 */ -00045 -00046 ODE_API dReal dDot (const dReal *a, const dReal *b, int n); -00047 -00048 -00049 /* get the dot products of (a0,b), (a1,b), etc and return them in outsum. -00050 * all vectors are n*1. if n <= 0 then zeroes will be returned (in which case -00051 * the input vectors need not be valid). this function is somewhat faster -00052 * than calling dDot() for all of the combinations separately. -00053 */ -00054 -00055 /* NOT INCLUDED in the library for now. -00056 void dMultidot2 (const dReal *a0, const dReal *a1, -00057 const dReal *b, dReal *outsum, int n); -00058 */ -00059 -00060 -00061 /* matrix multiplication. all matrices are stored in standard row format. -00062 * the digit refers to the argument that is transposed: -00063 * 0: A = B * C (sizes: A:p*r B:p*q C:q*r) -00064 * 1: A = B' * C (sizes: A:p*r B:q*p C:q*r) -00065 * 2: A = B * C' (sizes: A:p*r B:p*q C:r*q) -00066 * case 1,2 are equivalent to saying that the operation is A=B*C but -00067 * B or C are stored in standard column format. -00068 */ -00069 -00070 ODE_API void dMultiply0 (dReal *A, const dReal *B, const dReal *C, int p,int q,int r); -00071 ODE_API void dMultiply1 (dReal *A, const dReal *B, const dReal *C, int p,int q,int r); -00072 ODE_API void dMultiply2 (dReal *A, const dReal *B, const dReal *C, int p,int q,int r); -00073 -00074 -00075 /* do an in-place cholesky decomposition on the lower triangle of the n*n -00076 * symmetric matrix A (which is stored by rows). the resulting lower triangle -00077 * will be such that L*L'=A. return 1 on success and 0 on failure (on failure -00078 * the matrix is not positive definite). -00079 */ -00080 -00081 ODE_API int dFactorCholesky (dReal *A, int n); -00082 -00083 -00084 /* solve for x: L*L'*x = b, and put the result back into x. -00085 * L is size n*n, b is size n*1. only the lower triangle of L is considered. -00086 */ -00087 -00088 ODE_API void dSolveCholesky (const dReal *L, dReal *b, int n); -00089 -00090 -00091 /* compute the inverse of the n*n positive definite matrix A and put it in -00092 * Ainv. this is not especially fast. this returns 1 on success (A was -00093 * positive definite) or 0 on failure (not PD). -00094 */ -00095 -00096 ODE_API int dInvertPDMatrix (const dReal *A, dReal *Ainv, int n); -00097 -00098 -00099 /* check whether an n*n matrix A is positive definite, return 1/0 (yes/no). -00100 * positive definite means that x'*A*x > 0 for any x. this performs a -00101 * cholesky decomposition of A. if the decomposition fails then the matrix -00102 * is not positive definite. A is stored by rows. A is not altered. -00103 */ -00104 -00105 ODE_API int dIsPositiveDefinite (const dReal *A, int n); -00106 -00107 -00108 /* factorize a matrix A into L*D*L', where L is lower triangular with ones on -00109 * the diagonal, and D is diagonal. -00110 * A is an n*n matrix stored by rows, with a leading dimension of n rounded -00111 * up to 4. L is written into the strict lower triangle of A (the ones are not -00112 * written) and the reciprocal of the diagonal elements of D are written into -00113 * d. -00114 */ -00115 ODE_API void dFactorLDLT (dReal *A, dReal *d, int n, int nskip); -00116 -00117 -00118 /* solve L*x=b, where L is n*n lower triangular with ones on the diagonal, -00119 * and x,b are n*1. b is overwritten with x. -00120 * the leading dimension of L is `nskip'. -00121 */ -00122 ODE_API void dSolveL1 (const dReal *L, dReal *b, int n, int nskip); -00123 -00124 -00125 /* solve L'*x=b, where L is n*n lower triangular with ones on the diagonal, -00126 * and x,b are n*1. b is overwritten with x. -00127 * the leading dimension of L is `nskip'. -00128 */ -00129 ODE_API void dSolveL1T (const dReal *L, dReal *b, int n, int nskip); -00130 -00131 -00132 /* in matlab syntax: a(1:n) = a(1:n) .* d(1:n) */ -00133 -00134 ODE_API void dVectorScale (dReal *a, const dReal *d, int n); -00135 -00136 -00137 /* given `L', a n*n lower triangular matrix with ones on the diagonal, -00138 * and `d', a n*1 vector of the reciprocal diagonal elements of an n*n matrix -00139 * D, solve L*D*L'*x=b where x,b are n*1. x overwrites b. -00140 * the leading dimension of L is `nskip'. -00141 */ -00142 -00143 ODE_API void dSolveLDLT (const dReal *L, const dReal *d, dReal *b, int n, int nskip); -00144 -00145 -00146 /* given an L*D*L' factorization of an n*n matrix A, return the updated -00147 * factorization L2*D2*L2' of A plus the following "top left" matrix: -00148 * -00149 * [ b a' ] <-- b is a[0] -00150 * [ a 0 ] <-- a is a[1..n-1] -00151 * -00152 * - L has size n*n, its leading dimension is nskip. L is lower triangular -00153 * with ones on the diagonal. only the lower triangle of L is referenced. -00154 * - d has size n. d contains the reciprocal diagonal elements of D. -00155 * - a has size n. -00156 * the result is written into L, except that the left column of L and d[0] -00157 * are not actually modified. see ldltaddTL.m for further comments. -00158 */ -00159 ODE_API void dLDLTAddTL (dReal *L, dReal *d, const dReal *a, int n, int nskip); -00160 -00161 -00162 /* given an L*D*L' factorization of a permuted matrix A, produce a new -00163 * factorization for row and column `r' removed. -00164 * - A has size n1*n1, its leading dimension in nskip. A is symmetric and -00165 * positive definite. only the lower triangle of A is referenced. -00166 * A itself may actually be an array of row pointers. -00167 * - L has size n2*n2, its leading dimension in nskip. L is lower triangular -00168 * with ones on the diagonal. only the lower triangle of L is referenced. -00169 * - d has size n2. d contains the reciprocal diagonal elements of D. -00170 * - p is a permutation vector. it contains n2 indexes into A. each index -00171 * must be in the range 0..n1-1. -00172 * - r is the row/column of L to remove. -00173 * the new L will be written within the old L, i.e. will have the same leading -00174 * dimension. the last row and column of L, and the last element of d, are -00175 * undefined on exit. -00176 * -00177 * a fast O(n^2) algorithm is used. see ldltremove.m for further comments. -00178 */ -00179 ODE_API void dLDLTRemove (dReal **A, const int *p, dReal *L, dReal *d, -00180 int n1, int n2, int r, int nskip); -00181 -00182 -00183 /* given an n*n matrix A (with leading dimension nskip), remove the r'th row -00184 * and column by moving elements. the new matrix will have the same leading -00185 * dimension. the last row and column of A are untouched on exit. -00186 */ -00187 ODE_API void dRemoveRowCol (dReal *A, int n, int nskip, int r); -00188 -00189 -00190 #ifdef __cplusplus -00191 } -00192 #endif -00193 -00194 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 /* this comes from the `reuse' library. copy any changes back to the source */ -00024 -00025 #ifndef _ODE_MEMORY_H_ -00026 #define _ODE_MEMORY_H_ -00027 -00028 #include "ode/config.h" -00029 -00030 #ifdef __cplusplus -00031 extern "C" { -00032 #endif -00033 -00034 /* function types to allocate and free memory */ -00035 typedef void * dAllocFunction (size_t size); -00036 typedef void * dReallocFunction (void *ptr, size_t oldsize, size_t newsize); -00037 typedef void dFreeFunction (void *ptr, size_t size); -00038 -00039 /* set new memory management functions. if fn is 0, the default handlers are -00040 * used. */ -00041 ODE_API void dSetAllocHandler (dAllocFunction *fn); -00042 ODE_API void dSetReallocHandler (dReallocFunction *fn); -00043 ODE_API void dSetFreeHandler (dFreeFunction *fn); -00044 -00045 /* get current memory management functions */ -00046 ODE_API dAllocFunction *dGetAllocHandler (void); -00047 ODE_API dReallocFunction *dGetReallocHandler (void); -00048 ODE_API dFreeFunction *dGetFreeHandler (void); -00049 -00050 /* allocate and free memory. */ -00051 ODE_API void * dAlloc (size_t size); -00052 ODE_API void * dRealloc (void *ptr, size_t oldsize, size_t newsize); -00053 ODE_API void dFree (void *ptr, size_t size); -00054 -00055 #ifdef __cplusplus -00056 } -00057 #endif -00058 -00059 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 /* miscellaneous math functions. these are mostly useful for testing */ -00024 -00025 #ifndef _ODE_MISC_H_ -00026 #define _ODE_MISC_H_ -00027 -00028 #include <ode/common.h> -00029 -00030 -00031 #ifdef __cplusplus -00032 extern "C" { -00033 #endif -00034 -00035 -00036 /* return 1 if the random number generator is working. */ -00037 ODE_API int dTestRand(void); -00038 -00039 /* return next 32 bit random number. this uses a not-very-random linear -00040 * congruential method. -00041 */ -00042 ODE_API unsigned long dRand(void); -00043 -00044 /* get and set the current random number seed. */ -00045 ODE_API unsigned long dRandGetSeed(void); -00046 ODE_API void dRandSetSeed (unsigned long s); -00047 -00048 /* return a random integer between 0..n-1. the distribution will get worse -00049 * as n approaches 2^32. -00050 */ -00051 ODE_API int dRandInt (int n); -00052 -00053 /* return a random real number between 0..1 */ -00054 ODE_API dReal dRandReal(void); -00055 -00056 /* print out a matrix */ -00057 #ifdef __cplusplus -00058 ODE_API void dPrintMatrix (const dReal *A, int n, int m, char *fmt = "%10.4f ", -00059 FILE *f=stdout); -00060 #else -00061 ODE_API void dPrintMatrix (const dReal *A, int n, int m, char *fmt, FILE *f); -00062 #endif -00063 -00064 /* make a random vector with entries between +/- range. A has n elements. */ -00065 ODE_API void dMakeRandomVector (dReal *A, int n, dReal range); -00066 -00067 /* make a random matrix with entries between +/- range. A has size n*m. */ -00068 ODE_API void dMakeRandomMatrix (dReal *A, int n, int m, dReal range); -00069 -00070 /* clear the upper triangle of a square matrix */ -00071 ODE_API void dClearUpperTriangle (dReal *A, int n); -00072 -00073 /* return the maximum element difference between the two n*m matrices */ -00074 ODE_API dReal dMaxDifference (const dReal *A, const dReal *B, int n, int m); -00075 -00076 /* return the maximum element difference between the lower triangle of two -00077 * n*n matrices */ -00078 ODE_API dReal dMaxDifferenceLowerTriangle (const dReal *A, const dReal *B, int n); -00079 -00080 -00081 #ifdef __cplusplus -00082 } -00083 #endif -00084 -00085 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef _ODE_OBJECTS_H_ -00024 #define _ODE_OBJECTS_H_ -00025 -00026 #include <ode/common.h> -00027 #include <ode/mass.h> -00028 #include <ode/contact.h> -00029 -00030 #ifdef __cplusplus -00031 extern "C" { -00032 #endif -00033 -00052 ODE_API dWorldID dWorldCreate(void); -00053 -00054 -00064 ODE_API void dWorldDestroy (dWorldID world); -00065 -00066 -00075 ODE_API void dWorldSetGravity (dWorldID, dReal x, dReal y, dReal z); -00076 -00077 -00082 ODE_API void dWorldGetGravity (dWorldID, dVector3 gravity); -00083 -00084 -00092 ODE_API void dWorldSetERP (dWorldID, dReal erp); -00093 -00099 ODE_API dReal dWorldGetERP (dWorldID); -00100 -00101 -00109 ODE_API void dWorldSetCFM (dWorldID, dReal cfm); -00110 -00116 ODE_API dReal dWorldGetCFM (dWorldID); -00117 -00118 -00129 ODE_API void dWorldStep (dWorldID, dReal stepsize); -00130 -00131 -00146 ODE_API void dWorldImpulseToForce -00147 ( -00148 dWorldID, dReal stepsize, -00149 dReal ix, dReal iy, dReal iz, dVector3 force -00150 ); -00151 -00152 -00184 ODE_API void dWorldQuickStep (dWorldID w, dReal stepsize); -00185 -00186 -00196 ODE_API void dWorldSetQuickStepNumIterations (dWorldID, int num); -00197 -00198 -00205 ODE_API int dWorldGetQuickStepNumIterations (dWorldID); -00206 -00212 ODE_API void dWorldSetQuickStepW (dWorldID, dReal over_relaxation); -00213 -00219 ODE_API dReal dWorldGetQuickStepW (dWorldID); -00220 -00221 /* World contact parameter functions */ -00222 -00231 ODE_API void dWorldSetContactMaxCorrectingVel (dWorldID, dReal vel); -00232 -00238 ODE_API dReal dWorldGetContactMaxCorrectingVel (dWorldID); -00239 -00251 ODE_API void dWorldSetContactSurfaceLayer (dWorldID, dReal depth); -00252 -00258 ODE_API dReal dWorldGetContactSurfaceLayer (dWorldID); -00259 -00260 /* StepFast1 functions */ -00261 -00268 ODE_API void dWorldStepFast1(dWorldID, dReal stepsize, int maxiterations); -00269 -00270 -00306 ODE_API void dWorldSetAutoEnableDepthSF1(dWorldID, int autoEnableDepth); -00307 -00312 ODE_API int dWorldGetAutoEnableDepthSF1(dWorldID); -00313 -00319 ODE_API dReal dWorldGetAutoDisableLinearThreshold (dWorldID); -00320 -00326 ODE_API void dWorldSetAutoDisableLinearThreshold (dWorldID, dReal linear_threshold); -00327 -00333 ODE_API dReal dWorldGetAutoDisableAngularThreshold (dWorldID); -00334 -00340 ODE_API void dWorldSetAutoDisableAngularThreshold (dWorldID, dReal angular_threshold); -00341 -00347 ODE_API dReal dWorldGetAutoDisableLinearAverageThreshold (dWorldID); -00348 -00354 ODE_API void dWorldSetAutoDisableLinearAverageThreshold (dWorldID, dReal linear_average_threshold); -00355 -00361 ODE_API dReal dWorldGetAutoDisableAngularAverageThreshold (dWorldID); -00362 -00368 ODE_API void dWorldSetAutoDisableAngularAverageThreshold (dWorldID, dReal angular_average_threshold); -00369 -00375 ODE_API int dWorldGetAutoDisableAverageSamplesCount (dWorldID); -00376 -00383 ODE_API void dWorldSetAutoDisableAverageSamplesCount (dWorldID, unsigned int average_samples_count ); -00384 -00390 ODE_API int dWorldGetAutoDisableSteps (dWorldID); -00391 -00397 ODE_API void dWorldSetAutoDisableSteps (dWorldID, int steps); -00398 -00404 ODE_API dReal dWorldGetAutoDisableTime (dWorldID); -00405 -00411 ODE_API void dWorldSetAutoDisableTime (dWorldID, dReal time); -00412 -00418 ODE_API int dWorldGetAutoDisableFlag (dWorldID); -00419 -00425 ODE_API void dWorldSetAutoDisableFlag (dWorldID, int do_auto_disable); -00426 -00427 -00428 -00468 ODE_API dReal dBodyGetAutoDisableLinearThreshold (dBodyID); -00469 -00475 ODE_API void dBodySetAutoDisableLinearThreshold (dBodyID, dReal linear_average_threshold); -00476 -00482 ODE_API dReal dBodyGetAutoDisableAngularThreshold (dBodyID); -00483 -00489 ODE_API void dBodySetAutoDisableAngularThreshold (dBodyID, dReal angular_average_threshold); -00490 -00496 ODE_API int dBodyGetAutoDisableAverageSamplesCount (dBodyID); -00497 -00503 ODE_API void dBodySetAutoDisableAverageSamplesCount (dBodyID, unsigned int average_samples_count); -00504 -00505 -00511 ODE_API int dBodyGetAutoDisableSteps (dBodyID); -00512 -00518 ODE_API void dBodySetAutoDisableSteps (dBodyID, int steps); -00519 -00525 ODE_API dReal dBodyGetAutoDisableTime (dBodyID); -00526 -00532 ODE_API void dBodySetAutoDisableTime (dBodyID, dReal time); -00533 -00539 ODE_API int dBodyGetAutoDisableFlag (dBodyID); -00540 -00546 ODE_API void dBodySetAutoDisableFlag (dBodyID, int do_auto_disable); -00547 -00554 ODE_API void dBodySetAutoDisableDefaults (dBodyID); -00555 -00556 -00563 ODE_API dWorldID dBodyGetWorld (dBodyID); -00564 -00571 ODE_API dBodyID dBodyCreate (dWorldID); -00572 -00581 ODE_API void dBodyDestroy (dBodyID); -00582 -00588 ODE_API void dBodySetData (dBodyID, void *data); -00589 -00595 ODE_API void *dBodyGetData (dBodyID); -00596 -00605 ODE_API void dBodySetPosition (dBodyID, dReal x, dReal y, dReal z); -00606 -00615 ODE_API void dBodySetRotation (dBodyID, const dMatrix3 R); -00616 -00625 ODE_API void dBodySetQuaternion (dBodyID, const dQuaternion q); -00626 -00631 ODE_API void dBodySetLinearVel (dBodyID, dReal x, dReal y, dReal z); -00632 -00637 ODE_API void dBodySetAngularVel (dBodyID, dReal x, dReal y, dReal z); -00638 -00648 ODE_API const dReal * dBodyGetPosition (dBodyID); -00649 -00650 -00658 ODE_API void dBodyCopyPosition (dBodyID body, dVector3 pos); -00659 -00660 -00666 ODE_API const dReal * dBodyGetRotation (dBodyID); -00667 -00668 -00676 ODE_API void dBodyCopyRotation (dBodyID, dMatrix3 R); -00677 -00678 -00684 ODE_API const dReal * dBodyGetQuaternion (dBodyID); -00685 -00686 -00694 ODE_API void dBodyCopyQuaternion(dBodyID body, dQuaternion quat); -00695 -00696 -00701 ODE_API const dReal * dBodyGetLinearVel (dBodyID); -00702 -00707 ODE_API const dReal * dBodyGetAngularVel (dBodyID); -00708 -00713 ODE_API void dBodySetMass (dBodyID, const dMass *mass); -00714 -00719 ODE_API void dBodyGetMass (dBodyID, dMass *mass); -00720 -00725 ODE_API void dBodyAddForce (dBodyID, dReal fx, dReal fy, dReal fz); -00726 -00731 ODE_API void dBodyAddTorque (dBodyID, dReal fx, dReal fy, dReal fz); -00732 -00737 ODE_API void dBodyAddRelForce (dBodyID, dReal fx, dReal fy, dReal fz); -00738 -00743 ODE_API void dBodyAddRelTorque (dBodyID, dReal fx, dReal fy, dReal fz); -00744 -00749 ODE_API void dBodyAddForceAtPos (dBodyID, dReal fx, dReal fy, dReal fz, -00750 dReal px, dReal py, dReal pz); -00755 ODE_API void dBodyAddForceAtRelPos (dBodyID, dReal fx, dReal fy, dReal fz, -00756 dReal px, dReal py, dReal pz); -00761 ODE_API void dBodyAddRelForceAtPos (dBodyID, dReal fx, dReal fy, dReal fz, -00762 dReal px, dReal py, dReal pz); -00767 ODE_API void dBodyAddRelForceAtRelPos (dBodyID, dReal fx, dReal fy, dReal fz, -00768 dReal px, dReal py, dReal pz); -00769 -00779 ODE_API const dReal * dBodyGetForce (dBodyID); -00780 -00790 ODE_API const dReal * dBodyGetTorque (dBodyID); -00791 -00800 ODE_API void dBodySetForce (dBodyID b, dReal x, dReal y, dReal z); -00801 -00810 ODE_API void dBodySetTorque (dBodyID b, dReal x, dReal y, dReal z); -00811 -00817 ODE_API void dBodyGetRelPointPos -00818 ( -00819 dBodyID, dReal px, dReal py, dReal pz, -00820 dVector3 result -00821 ); -00822 -00828 ODE_API void dBodyGetRelPointVel -00829 ( -00830 dBodyID, dReal px, dReal py, dReal pz, -00831 dVector3 result -00832 ); -00833 -00840 ODE_API void dBodyGetPointVel -00841 ( -00842 dBodyID, dReal px, dReal py, dReal pz, -00843 dVector3 result -00844 ); -00845 -00854 ODE_API void dBodyGetPosRelPoint -00855 ( -00856 dBodyID, dReal px, dReal py, dReal pz, -00857 dVector3 result -00858 ); -00859 -00865 ODE_API void dBodyVectorToWorld -00866 ( -00867 dBodyID, dReal px, dReal py, dReal pz, -00868 dVector3 result -00869 ); -00870 -00876 ODE_API void dBodyVectorFromWorld -00877 ( -00878 dBodyID, dReal px, dReal py, dReal pz, -00879 dVector3 result -00880 ); -00881 -00899 ODE_API void dBodySetFiniteRotationMode (dBodyID, int mode); -00900 -00917 ODE_API void dBodySetFiniteRotationAxis (dBodyID, dReal x, dReal y, dReal z); -00918 -00924 ODE_API int dBodyGetFiniteRotationMode (dBodyID); -00925 -00931 ODE_API void dBodyGetFiniteRotationAxis (dBodyID, dVector3 result); -00932 -00938 ODE_API int dBodyGetNumJoints (dBodyID b); -00939 -00946 ODE_API dJointID dBodyGetJoint (dBodyID, int index); -00947 -00953 ODE_API void dBodyEnable (dBodyID); -00954 -00962 ODE_API void dBodyDisable (dBodyID); -00963 -00969 ODE_API int dBodyIsEnabled (dBodyID); -00970 -00978 ODE_API void dBodySetGravityMode (dBodyID b, int mode); -00979 -00985 ODE_API int dBodyGetGravityMode (dBodyID b); -00986 -00987 -00988 -01064 ODE_API dJointID dJointCreateBall (dWorldID, dJointGroupID); -01065 -01072 ODE_API dJointID dJointCreateHinge (dWorldID, dJointGroupID); -01073 -01080 ODE_API dJointID dJointCreateSlider (dWorldID, dJointGroupID); -01081 -01088 ODE_API dJointID dJointCreateContact (dWorldID, dJointGroupID, const dContact *); -01089 -01096 ODE_API dJointID dJointCreateHinge2 (dWorldID, dJointGroupID); -01097 -01104 ODE_API dJointID dJointCreateUniversal (dWorldID, dJointGroupID); -01105 -01112 ODE_API dJointID dJointCreatePR (dWorldID, dJointGroupID); -01113 -01120 ODE_API dJointID dJointCreateFixed (dWorldID, dJointGroupID); -01121 -01122 ODE_API dJointID dJointCreateNull (dWorldID, dJointGroupID); -01123 -01130 ODE_API dJointID dJointCreateAMotor (dWorldID, dJointGroupID); -01131 -01138 ODE_API dJointID dJointCreateLMotor (dWorldID, dJointGroupID); -01139 -01146 ODE_API dJointID dJointCreatePlane2D (dWorldID, dJointGroupID); -01147 -01156 ODE_API void dJointDestroy (dJointID); -01157 -01158 -01164 ODE_API dJointGroupID dJointGroupCreate (int max_size); -01165 -01172 ODE_API void dJointGroupDestroy (dJointGroupID); -01173 -01181 ODE_API void dJointGroupEmpty (dJointGroupID); -01182 -01196 ODE_API void dJointAttach (dJointID, dBodyID body1, dBodyID body2); -01197 -01202 ODE_API void dJointSetData (dJointID, void *data); -01203 -01208 ODE_API void *dJointGetData (dJointID); -01209 -01224 ODE_API int dJointGetType (dJointID); -01225 -01236 ODE_API dBodyID dJointGetBody (dJointID, int index); -01237 -01245 ODE_API void dJointSetFeedback (dJointID, dJointFeedback *); -01246 -01251 ODE_API dJointFeedback *dJointGetFeedback (dJointID); -01252 -01260 ODE_API void dJointSetBallAnchor (dJointID, dReal x, dReal y, dReal z); -01261 -01266 ODE_API void dJointSetBallAnchor2 (dJointID, dReal x, dReal y, dReal z); -01267 -01272 ODE_API void dJointSetBallParam (dJointID, int parameter, dReal value); -01273 -01278 ODE_API void dJointSetHingeAnchor (dJointID, dReal x, dReal y, dReal z); -01279 -01280 ODE_API void dJointSetHingeAnchorDelta (dJointID, dReal x, dReal y, dReal z, dReal ax, dReal ay, dReal az); -01281 -01286 ODE_API void dJointSetHingeAxis (dJointID, dReal x, dReal y, dReal z); -01287 -01292 ODE_API void dJointSetHingeParam (dJointID, int parameter, dReal value); -01293 -01302 ODE_API void dJointAddHingeTorque(dJointID joint, dReal torque); -01303 -01308 ODE_API void dJointSetSliderAxis (dJointID, dReal x, dReal y, dReal z); -01309 -01313 ODE_API void dJointSetSliderAxisDelta (dJointID, dReal x, dReal y, dReal z, dReal ax, dReal ay, dReal az); -01314 -01319 ODE_API void dJointSetSliderParam (dJointID, int parameter, dReal value); -01320 -01329 ODE_API void dJointAddSliderForce(dJointID joint, dReal force); -01330 -01335 ODE_API void dJointSetHinge2Anchor (dJointID, dReal x, dReal y, dReal z); -01336 -01341 ODE_API void dJointSetHinge2Axis1 (dJointID, dReal x, dReal y, dReal z); -01342 -01347 ODE_API void dJointSetHinge2Axis2 (dJointID, dReal x, dReal y, dReal z); -01348 -01353 ODE_API void dJointSetHinge2Param (dJointID, int parameter, dReal value); -01354 -01361 ODE_API void dJointAddHinge2Torques(dJointID joint, dReal torque1, dReal torque2); -01362 -01367 ODE_API void dJointSetUniversalAnchor (dJointID, dReal x, dReal y, dReal z); -01368 -01373 ODE_API void dJointSetUniversalAxis1 (dJointID, dReal x, dReal y, dReal z); -01374 -01379 ODE_API void dJointSetUniversalAxis2 (dJointID, dReal x, dReal y, dReal z); -01380 -01385 ODE_API void dJointSetUniversalParam (dJointID, int parameter, dReal value); -01386 -01393 ODE_API void dJointAddUniversalTorques(dJointID joint, dReal torque1, dReal torque2); -01394 -01395 -01400 ODE_API void dJointSetPRAnchor (dJointID, dReal x, dReal y, dReal z); -01401 -01406 ODE_API void dJointSetPRAxis1 (dJointID, dReal x, dReal y, dReal z); -01407 -01412 ODE_API void dJointSetPRAxis2 (dJointID, dReal x, dReal y, dReal z); -01413 -01420 ODE_API void dJointSetPRParam (dJointID, int parameter, dReal value); -01421 -01430 ODE_API void dJointAddPRTorque (dJointID j, dReal torque); -01431 -01432 -01439 ODE_API void dJointSetFixed (dJointID); -01440 -01441 /* -01442 * @brief Sets joint parameter -01443 * -01444 * @ingroup joints -01445 */ -01446 ODE_API void dJointSetFixedParam (dJointID, int parameter, dReal value); -01447 -01453 ODE_API void dJointSetAMotorNumAxes (dJointID, int num); -01454 -01459 ODE_API void dJointSetAMotorAxis (dJointID, int anum, int rel, -01460 dReal x, dReal y, dReal z); -01461 -01471 ODE_API void dJointSetAMotorAngle (dJointID, int anum, dReal angle); -01472 -01477 ODE_API void dJointSetAMotorParam (dJointID, int parameter, dReal value); -01478 -01483 ODE_API void dJointSetAMotorMode (dJointID, int mode); -01484 -01493 ODE_API void dJointAddAMotorTorques (dJointID, dReal torque1, dReal torque2, dReal torque3); -01494 -01500 ODE_API void dJointSetLMotorNumAxes (dJointID, int num); -01501 -01513 ODE_API void dJointSetLMotorAxis (dJointID, int anum, int rel, dReal x, dReal y, dReal z); -01514 -01519 ODE_API void dJointSetLMotorParam (dJointID, int parameter, dReal value); -01520 -01524 ODE_API void dJointSetPlane2DXParam (dJointID, int parameter, dReal value); -01525 -01530 ODE_API void dJointSetPlane2DYParam (dJointID, int parameter, dReal value); -01531 -01535 ODE_API void dJointSetPlane2DAngleParam (dJointID, int parameter, dReal value); -01536 -01543 ODE_API void dJointGetBallAnchor (dJointID, dVector3 result); -01544 -01555 ODE_API void dJointGetBallAnchor2 (dJointID, dVector3 result); -01556 -01561 ODE_API dReal dJointGetBallParam (dJointID, int parameter); -01562 -01570 ODE_API void dJointGetHingeAnchor (dJointID, dVector3 result); -01571 -01580 ODE_API void dJointGetHingeAnchor2 (dJointID, dVector3 result); -01581 -01586 ODE_API void dJointGetHingeAxis (dJointID, dVector3 result); -01587 -01592 ODE_API dReal dJointGetHingeParam (dJointID, int parameter); -01593 -01604 ODE_API dReal dJointGetHingeAngle (dJointID); -01605 -01610 ODE_API dReal dJointGetHingeAngleRate (dJointID); -01611 -01619 ODE_API dReal dJointGetSliderPosition (dJointID); -01620 -01625 ODE_API dReal dJointGetSliderPositionRate (dJointID); -01626 -01631 ODE_API void dJointGetSliderAxis (dJointID, dVector3 result); -01632 -01637 ODE_API dReal dJointGetSliderParam (dJointID, int parameter); -01638 -01645 ODE_API void dJointGetHinge2Anchor (dJointID, dVector3 result); -01646 -01655 ODE_API void dJointGetHinge2Anchor2 (dJointID, dVector3 result); -01656 -01661 ODE_API void dJointGetHinge2Axis1 (dJointID, dVector3 result); -01662 -01667 ODE_API void dJointGetHinge2Axis2 (dJointID, dVector3 result); -01668 -01673 ODE_API dReal dJointGetHinge2Param (dJointID, int parameter); -01674 -01679 ODE_API dReal dJointGetHinge2Angle1 (dJointID); -01680 -01685 ODE_API dReal dJointGetHinge2Angle1Rate (dJointID); -01686 -01691 ODE_API dReal dJointGetHinge2Angle2Rate (dJointID); -01692 -01699 ODE_API void dJointGetUniversalAnchor (dJointID, dVector3 result); -01700 -01714 ODE_API void dJointGetUniversalAnchor2 (dJointID, dVector3 result); -01715 -01720 ODE_API void dJointGetUniversalAxis1 (dJointID, dVector3 result); -01721 -01726 ODE_API void dJointGetUniversalAxis2 (dJointID, dVector3 result); -01727 -01728 -01733 ODE_API dReal dJointGetUniversalParam (dJointID, int parameter); -01734 -01746 ODE_API void dJointGetUniversalAngles (dJointID, dReal *angle1, dReal *angle2); -01747 -01752 ODE_API dReal dJointGetUniversalAngle1 (dJointID); -01753 -01758 ODE_API dReal dJointGetUniversalAngle2 (dJointID); -01759 -01764 ODE_API dReal dJointGetUniversalAngle1Rate (dJointID); -01765 -01770 ODE_API dReal dJointGetUniversalAngle2Rate (dJointID); -01771 -01772 -01773 -01780 ODE_API void dJointGetPRAnchor (dJointID, dVector3 result); -01781 -01793 ODE_API dReal dJointGetPRPosition (dJointID); -01794 -01800 ODE_API dReal dJointGetPRPositionRate (dJointID); -01801 -01802 -01807 ODE_API void dJointGetPRAxis1 (dJointID, dVector3 result); -01808 -01813 ODE_API void dJointGetPRAxis2 (dJointID, dVector3 result); -01814 -01819 ODE_API dReal dJointGetPRParam (dJointID, int parameter); -01820 -01821 -01822 -01831 ODE_API int dJointGetAMotorNumAxes (dJointID); -01832 -01842 ODE_API void dJointGetAMotorAxis (dJointID, int anum, dVector3 result); -01843 -01860 ODE_API int dJointGetAMotorAxisRel (dJointID, int anum); -01861 -01870 ODE_API dReal dJointGetAMotorAngle (dJointID, int anum); -01871 -01880 ODE_API dReal dJointGetAMotorAngleRate (dJointID, int anum); -01881 -01886 ODE_API dReal dJointGetAMotorParam (dJointID, int parameter); -01887 -01901 ODE_API int dJointGetAMotorMode (dJointID); -01902 -01907 ODE_API int dJointGetLMotorNumAxes (dJointID); -01908 -01913 ODE_API void dJointGetLMotorAxis (dJointID, int anum, dVector3 result); -01914 -01919 ODE_API dReal dJointGetLMotorParam (dJointID, int parameter); -01920 -01925 ODE_API dReal dJointGetFixedParam (dJointID, int parameter); -01926 -01927 -01931 ODE_API dJointID dConnectingJoint (dBodyID, dBodyID); -01932 -01936 ODE_API int dConnectingJointList (dBodyID, dBodyID, dJointID*); -01937 -01944 ODE_API int dAreConnected (dBodyID, dBodyID); -01945 -01959 ODE_API int dAreConnectedExcluding (dBodyID body1, dBodyID body2, int joint_type); -01960 -01961 -01962 #ifdef __cplusplus -01963 } -01964 #endif -01965 -01966 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef _ODE_ODE_H_ -00024 #define _ODE_ODE_H_ -00025 -00026 /* include *everything* here */ -00027 -00028 #include <ode/config.h> -00029 #include <ode/compatibility.h> -00030 #include <ode/common.h> -00031 #include <ode/contact.h> -00032 #include <ode/error.h> -00033 #include <ode/memory.h> -00034 #include <ode/odemath.h> -00035 #include <ode/matrix.h> -00036 #include <ode/timer.h> -00037 #include <ode/rotation.h> -00038 #include <ode/mass.h> -00039 #include <ode/misc.h> -00040 #include <ode/objects.h> -00041 #include <ode/odecpp.h> -00042 #include <ode/collision_space.h> -00043 #include <ode/collision.h> -00044 #include <ode/odecpp_collision.h> -00045 #include <ode/export-dif.h> -00046 -00047 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 /* C++ interface for non-collision stuff */ -00024 -00025 -00026 #ifndef _ODE_ODECPP_H_ -00027 #define _ODE_ODECPP_H_ -00028 #ifdef __cplusplus -00029 -00030 #include <ode/error.h> -00031 -00032 -00033 class dWorld { -00034 dWorldID _id; -00035 -00036 // intentionally undefined, don't use these -00037 dWorld (const dWorld &); -00038 void operator= (const dWorld &); -00039 -00040 public: -00041 dWorld() -00042 { _id = dWorldCreate(); } -00043 ~dWorld() -00044 { dWorldDestroy (_id); } -00045 -00046 dWorldID id() const -00047 { return _id; } -00048 operator dWorldID() const -00049 { return _id; } -00050 -00051 void setGravity (dReal x, dReal y, dReal z) -00052 { dWorldSetGravity (_id,x,y,z); } -00053 void getGravity (dVector3 g) const -00054 { dWorldGetGravity (_id,g); } -00055 -00056 void setERP (dReal erp) -00057 { dWorldSetERP(_id, erp); } -00058 dReal getERP() const -00059 { return dWorldGetERP(_id); } -00060 -00061 void setCFM (dReal cfm) -00062 { dWorldSetCFM(_id, cfm); } -00063 dReal getCFM() const -00064 { return dWorldGetCFM(_id); } -00065 -00066 void step (dReal stepsize) -00067 { dWorldStep (_id,stepsize); } -00068 -00069 void stepFast1 (dReal stepsize, int maxiterations) -00070 { dWorldStepFast1 (_id,stepsize,maxiterations); } -00071 void setAutoEnableDepthSF1(dWorldID, int depth) -00072 { dWorldSetAutoEnableDepthSF1 (_id, depth); } -00073 int getAutoEnableDepthSF1(dWorldID) -00074 { return dWorldGetAutoEnableDepthSF1 (_id); } -00075 -00076 void setAutoDisableLinearThreshold (dReal threshold) -00077 { dWorldSetAutoDisableLinearThreshold (_id,threshold); } -00078 dReal getAutoDisableLinearThreshold() -00079 { return dWorldGetAutoDisableLinearThreshold (_id); } -00080 void setAutoDisableAngularThreshold (dReal threshold) -00081 { dWorldSetAutoDisableAngularThreshold (_id,threshold); } -00082 dReal getAutoDisableAngularThreshold() -00083 { return dWorldGetAutoDisableAngularThreshold (_id); } -00084 void setAutoDisableSteps (int steps) -00085 { dWorldSetAutoDisableSteps (_id,steps); } -00086 int getAutoDisableSteps() -00087 { return dWorldGetAutoDisableSteps (_id); } -00088 void setAutoDisableTime (dReal time) -00089 { dWorldSetAutoDisableTime (_id,time); } -00090 dReal getAutoDisableTime() -00091 { return dWorldGetAutoDisableTime (_id); } -00092 void setAutoDisableFlag (int do_auto_disable) -00093 { dWorldSetAutoDisableFlag (_id,do_auto_disable); } -00094 int getAutoDisableFlag() -00095 { return dWorldGetAutoDisableFlag (_id); } -00096 -00097 void impulseToForce (dReal stepsize, dReal ix, dReal iy, dReal iz, -00098 dVector3 force) -00099 { dWorldImpulseToForce (_id,stepsize,ix,iy,iz,force); } -00100 }; -00101 -00102 -00103 class dBody { -00104 dBodyID _id; -00105 -00106 // intentionally undefined, don't use these -00107 dBody (const dBody &); -00108 void operator= (const dBody &); -00109 -00110 public: -00111 dBody() -00112 { _id = 0; } -00113 dBody (dWorldID world) -00114 { _id = dBodyCreate (world); } -00115 ~dBody() -00116 { if (_id) dBodyDestroy (_id); } -00117 -00118 void create (dWorldID world) { -00119 if (_id) dBodyDestroy (_id); -00120 _id = dBodyCreate (world); -00121 } -00122 -00123 dBodyID id() const -00124 { return _id; } -00125 operator dBodyID() const -00126 { return _id; } -00127 -00128 void setData (void *data) -00129 { dBodySetData (_id,data); } -00130 void *getData() const -00131 { return dBodyGetData (_id); } -00132 -00133 void setPosition (dReal x, dReal y, dReal z) -00134 { dBodySetPosition (_id,x,y,z); } -00135 void setRotation (const dMatrix3 R) -00136 { dBodySetRotation (_id,R); } -00137 void setQuaternion (const dQuaternion q) -00138 { dBodySetQuaternion (_id,q); } -00139 void setLinearVel (dReal x, dReal y, dReal z) -00140 { dBodySetLinearVel (_id,x,y,z); } -00141 void setAngularVel (dReal x, dReal y, dReal z) -00142 { dBodySetAngularVel (_id,x,y,z); } -00143 -00144 const dReal * getPosition() const -00145 { return dBodyGetPosition (_id); } -00146 const dReal * getRotation() const -00147 { return dBodyGetRotation (_id); } -00148 const dReal * getQuaternion() const -00149 { return dBodyGetQuaternion (_id); } -00150 const dReal * getLinearVel() const -00151 { return dBodyGetLinearVel (_id); } -00152 const dReal * getAngularVel() const -00153 { return dBodyGetAngularVel (_id); } -00154 -00155 void setMass (const dMass *mass) -00156 { dBodySetMass (_id,mass); } -00157 void getMass (dMass *mass) const -00158 { dBodyGetMass (_id,mass); } -00159 -00160 void addForce (dReal fx, dReal fy, dReal fz) -00161 { dBodyAddForce (_id, fx, fy, fz); } -00162 void addTorque (dReal fx, dReal fy, dReal fz) -00163 { dBodyAddTorque (_id, fx, fy, fz); } -00164 void addRelForce (dReal fx, dReal fy, dReal fz) -00165 { dBodyAddRelForce (_id, fx, fy, fz); } -00166 void addRelTorque (dReal fx, dReal fy, dReal fz) -00167 { dBodyAddRelTorque (_id, fx, fy, fz); } -00168 void addForceAtPos (dReal fx, dReal fy, dReal fz, -00169 dReal px, dReal py, dReal pz) -00170 { dBodyAddForceAtPos (_id, fx, fy, fz, px, py, pz); } -00171 void addForceAtRelPos (dReal fx, dReal fy, dReal fz, -00172 dReal px, dReal py, dReal pz) -00173 { dBodyAddForceAtRelPos (_id, fx, fy, fz, px, py, pz); } -00174 void addRelForceAtPos (dReal fx, dReal fy, dReal fz, -00175 dReal px, dReal py, dReal pz) -00176 { dBodyAddRelForceAtPos (_id, fx, fy, fz, px, py, pz); } -00177 void addRelForceAtRelPos (dReal fx, dReal fy, dReal fz, -00178 dReal px, dReal py, dReal pz) -00179 { dBodyAddRelForceAtRelPos (_id, fx, fy, fz, px, py, pz); } -00180 -00181 const dReal * getForce() const -00182 { return dBodyGetForce(_id); } -00183 const dReal * getTorque() const -00184 { return dBodyGetTorque(_id); } -00185 void setForce (dReal x, dReal y, dReal z) -00186 { dBodySetForce (_id,x,y,z); } -00187 void setTorque (dReal x, dReal y, dReal z) -00188 { dBodySetTorque (_id,x,y,z); } -00189 -00190 void enable() -00191 { dBodyEnable (_id); } -00192 void disable() -00193 { dBodyDisable (_id); } -00194 int isEnabled() const -00195 { return dBodyIsEnabled (_id); } -00196 -00197 void getRelPointPos (dReal px, dReal py, dReal pz, dVector3 result) const -00198 { dBodyGetRelPointPos (_id, px, py, pz, result); } -00199 void getRelPointVel (dReal px, dReal py, dReal pz, dVector3 result) const -00200 { dBodyGetRelPointVel (_id, px, py, pz, result); } -00201 void getPointVel (dReal px, dReal py, dReal pz, dVector3 result) const -00202 { dBodyGetPointVel (_id,px,py,pz,result); } -00203 void getPosRelPoint (dReal px, dReal py, dReal pz, dVector3 result) const -00204 { dBodyGetPosRelPoint (_id,px,py,pz,result); } -00205 void vectorToWorld (dReal px, dReal py, dReal pz, dVector3 result) const -00206 { dBodyVectorToWorld (_id,px,py,pz,result); } -00207 void vectorFromWorld (dReal px, dReal py, dReal pz, dVector3 result) const -00208 { dBodyVectorFromWorld (_id,px,py,pz,result); } -00209 -00210 void setFiniteRotationMode (int mode) -00211 { dBodySetFiniteRotationMode (_id, mode); } -00212 void setFiniteRotationAxis (dReal x, dReal y, dReal z) -00213 { dBodySetFiniteRotationAxis (_id, x, y, z); } -00214 -00215 int getFiniteRotationMode() const -00216 { return dBodyGetFiniteRotationMode (_id); } -00217 void getFiniteRotationAxis (dVector3 result) const -00218 { dBodyGetFiniteRotationAxis (_id, result); } -00219 -00220 int getNumJoints() const -00221 { return dBodyGetNumJoints (_id); } -00222 dJointID getJoint (int index) const -00223 { return dBodyGetJoint (_id, index); } -00224 -00225 void setGravityMode (int mode) -00226 { dBodySetGravityMode (_id,mode); } -00227 int getGravityMode() const -00228 { return dBodyGetGravityMode (_id); } -00229 -00230 int isConnectedTo (dBodyID body) const -00231 { return dAreConnected (_id, body); } -00232 -00233 void setAutoDisableLinearThreshold (dReal threshold) -00234 { dBodySetAutoDisableLinearThreshold (_id,threshold); } -00235 dReal getAutoDisableLinearThreshold() -00236 { return dBodyGetAutoDisableLinearThreshold (_id); } -00237 void setAutoDisableAngularThreshold (dReal threshold) -00238 { dBodySetAutoDisableAngularThreshold (_id,threshold); } -00239 dReal getAutoDisableAngularThreshold() -00240 { return dBodyGetAutoDisableAngularThreshold (_id); } -00241 void setAutoDisableSteps (int steps) -00242 { dBodySetAutoDisableSteps (_id,steps); } -00243 int getAutoDisableSteps() -00244 { return dBodyGetAutoDisableSteps (_id); } -00245 void setAutoDisableTime (dReal time) -00246 { dBodySetAutoDisableTime (_id,time); } -00247 dReal getAutoDisableTime() -00248 { return dBodyGetAutoDisableTime (_id); } -00249 void setAutoDisableFlag (int do_auto_disable) -00250 { dBodySetAutoDisableFlag (_id,do_auto_disable); } -00251 int getAutoDisableFlag() -00252 { return dBodyGetAutoDisableFlag (_id); } -00253 }; -00254 -00255 -00256 class dJointGroup { -00257 dJointGroupID _id; -00258 -00259 // intentionally undefined, don't use these -00260 dJointGroup (const dJointGroup &); -00261 void operator= (const dJointGroup &); -00262 -00263 public: -00264 dJointGroup (int dummy_arg=0) -00265 { _id = dJointGroupCreate (0); } -00266 ~dJointGroup() -00267 { dJointGroupDestroy (_id); } -00268 void create (int dummy_arg=0) { -00269 if (_id) dJointGroupDestroy (_id); -00270 _id = dJointGroupCreate (0); -00271 } -00272 -00273 dJointGroupID id() const -00274 { return _id; } -00275 operator dJointGroupID() const -00276 { return _id; } -00277 -00278 void empty() -00279 { dJointGroupEmpty (_id); } -00280 }; -00281 -00282 -00283 class dJoint { -00284 private: -00285 // intentionally undefined, don't use these -00286 dJoint (const dJoint &) ; -00287 void operator= (const dJoint &); -00288 -00289 protected: -00290 dJointID _id; -00291 -00292 public: -00293 dJoint() -00294 { _id = 0; } -00295 ~dJoint() -00296 { if (_id) dJointDestroy (_id); } -00297 -00298 dJointID id() const -00299 { return _id; } -00300 operator dJointID() const -00301 { return _id; } -00302 -00303 void attach (dBodyID body1, dBodyID body2) -00304 { dJointAttach (_id, body1, body2); } -00305 -00306 void setData (void *data) -00307 { dJointSetData (_id, data); } -00308 void *getData() const -00309 { return dJointGetData (_id); } -00310 -00311 int getType() const -00312 { return dJointGetType (_id); } -00313 -00314 dBodyID getBody (int index) const -00315 { return dJointGetBody (_id, index); } -00316 -00317 void setFeedback(dJointFeedback *fb) -00318 { dJointSetFeedback(_id, fb); } -00319 dJointFeedback *getFeedback() const -00320 { return dJointGetFeedback(_id); } -00321 }; -00322 -00323 -00324 class dBallJoint : public dJoint { -00325 private: -00326 // intentionally undefined, don't use these -00327 dBallJoint (const dBallJoint &); -00328 void operator= (const dBallJoint &); -00329 -00330 public: -00331 dBallJoint() { } -00332 dBallJoint (dWorldID world, dJointGroupID group=0) -00333 { _id = dJointCreateBall (world, group); } -00334 -00335 void create (dWorldID world, dJointGroupID group=0) { -00336 if (_id) dJointDestroy (_id); -00337 _id = dJointCreateBall (world, group); -00338 } -00339 -00340 void setAnchor (dReal x, dReal y, dReal z) -00341 { dJointSetBallAnchor (_id, x, y, z); } -00342 void getAnchor (dVector3 result) const -00343 { dJointGetBallAnchor (_id, result); } -00344 void getAnchor2 (dVector3 result) const -00345 { dJointGetBallAnchor2 (_id, result); } -00346 void setParam (int parameter, dReal value) -00347 { dJointSetBallParam (_id, parameter, value); } -00348 dReal getParam (int parameter) const -00349 { return dJointGetBallParam (_id, parameter); } -00350 } ; -00351 -00352 -00353 class dHingeJoint : public dJoint { -00354 // intentionally undefined, don't use these -00355 dHingeJoint (const dHingeJoint &); -00356 void operator = (const dHingeJoint &); -00357 -00358 public: -00359 dHingeJoint() { } -00360 dHingeJoint (dWorldID world, dJointGroupID group=0) -00361 { _id = dJointCreateHinge (world, group); } -00362 -00363 void create (dWorldID world, dJointGroupID group=0) { -00364 if (_id) dJointDestroy (_id); -00365 _id = dJointCreateHinge (world, group); -00366 } -00367 -00368 void setAnchor (dReal x, dReal y, dReal z) -00369 { dJointSetHingeAnchor (_id, x, y, z); } -00370 void getAnchor (dVector3 result) const -00371 { dJointGetHingeAnchor (_id, result); } -00372 void getAnchor2 (dVector3 result) const -00373 { dJointGetHingeAnchor2 (_id, result); } -00374 -00375 void setAxis (dReal x, dReal y, dReal z) -00376 { dJointSetHingeAxis (_id, x, y, z); } -00377 void getAxis (dVector3 result) const -00378 { dJointGetHingeAxis (_id, result); } -00379 -00380 dReal getAngle() const -00381 { return dJointGetHingeAngle (_id); } -00382 dReal getAngleRate() const -00383 { return dJointGetHingeAngleRate (_id); } -00384 -00385 void setParam (int parameter, dReal value) -00386 { dJointSetHingeParam (_id, parameter, value); } -00387 dReal getParam (int parameter) const -00388 { return dJointGetHingeParam (_id, parameter); } -00389 -00390 void addTorque (dReal torque) -00391 { dJointAddHingeTorque(_id, torque); } -00392 }; -00393 -00394 -00395 class dSliderJoint : public dJoint { -00396 // intentionally undefined, don't use these -00397 dSliderJoint (const dSliderJoint &); -00398 void operator = (const dSliderJoint &); -00399 -00400 public: -00401 dSliderJoint() { } -00402 dSliderJoint (dWorldID world, dJointGroupID group=0) -00403 { _id = dJointCreateSlider (world, group); } -00404 -00405 void create (dWorldID world, dJointGroupID group=0) { -00406 if (_id) dJointDestroy (_id); -00407 _id = dJointCreateSlider (world, group); -00408 } -00409 -00410 void setAxis (dReal x, dReal y, dReal z) -00411 { dJointSetSliderAxis (_id, x, y, z); } -00412 void getAxis (dVector3 result) const -00413 { dJointGetSliderAxis (_id, result); } -00414 -00415 dReal getPosition() const -00416 { return dJointGetSliderPosition (_id); } -00417 dReal getPositionRate() const -00418 { return dJointGetSliderPositionRate (_id); } -00419 -00420 void setParam (int parameter, dReal value) -00421 { dJointSetSliderParam (_id, parameter, value); } -00422 dReal getParam (int parameter) const -00423 { return dJointGetSliderParam (_id, parameter); } -00424 -00425 void addForce (dReal force) -00426 { dJointAddSliderForce(_id, force); } -00427 }; -00428 -00429 -00430 class dUniversalJoint : public dJoint { -00431 // intentionally undefined, don't use these -00432 dUniversalJoint (const dUniversalJoint &); -00433 void operator = (const dUniversalJoint &); -00434 -00435 public: -00436 dUniversalJoint() { } -00437 dUniversalJoint (dWorldID world, dJointGroupID group=0) -00438 { _id = dJointCreateUniversal (world, group); } -00439 -00440 void create (dWorldID world, dJointGroupID group=0) { -00441 if (_id) dJointDestroy (_id); -00442 _id = dJointCreateUniversal (world, group); -00443 } -00444 -00445 void setAnchor (dReal x, dReal y, dReal z) -00446 { dJointSetUniversalAnchor (_id, x, y, z); } -00447 void setAxis1 (dReal x, dReal y, dReal z) -00448 { dJointSetUniversalAxis1 (_id, x, y, z); } -00449 void setAxis2 (dReal x, dReal y, dReal z) -00450 { dJointSetUniversalAxis2 (_id, x, y, z); } -00451 void setParam (int parameter, dReal value) -00452 { dJointSetUniversalParam (_id, parameter, value); } -00453 -00454 void getAnchor (dVector3 result) const -00455 { dJointGetUniversalAnchor (_id, result); } -00456 void getAnchor2 (dVector3 result) const -00457 { dJointGetUniversalAnchor2 (_id, result); } -00458 void getAxis1 (dVector3 result) const -00459 { dJointGetUniversalAxis1 (_id, result); } -00460 void getAxis2 (dVector3 result) const -00461 { dJointGetUniversalAxis2 (_id, result); } -00462 dReal getParam (int parameter) const -00463 { return dJointGetUniversalParam (_id, parameter); } -00464 void getAngles(dReal *angle1, dReal *angle2) const -00465 { dJointGetUniversalAngles (_id, angle1, angle2); } -00466 -00467 dReal getAngle1() const -00468 { return dJointGetUniversalAngle1 (_id); } -00469 dReal getAngle1Rate() const -00470 { return dJointGetUniversalAngle1Rate (_id); } -00471 dReal getAngle2() const -00472 { return dJointGetUniversalAngle2 (_id); } -00473 dReal getAngle2Rate() const -00474 { return dJointGetUniversalAngle2Rate (_id); } -00475 -00476 void addTorques (dReal torque1, dReal torque2) -00477 { dJointAddUniversalTorques(_id, torque1, torque2); } -00478 }; -00479 -00480 -00481 class dHinge2Joint : public dJoint { -00482 // intentionally undefined, don't use these -00483 dHinge2Joint (const dHinge2Joint &); -00484 void operator = (const dHinge2Joint &); -00485 -00486 public: -00487 dHinge2Joint() { } -00488 dHinge2Joint (dWorldID world, dJointGroupID group=0) -00489 { _id = dJointCreateHinge2 (world, group); } -00490 -00491 void create (dWorldID world, dJointGroupID group=0) { -00492 if (_id) dJointDestroy (_id); -00493 _id = dJointCreateHinge2 (world, group); -00494 } -00495 -00496 void setAnchor (dReal x, dReal y, dReal z) -00497 { dJointSetHinge2Anchor (_id, x, y, z); } -00498 void setAxis1 (dReal x, dReal y, dReal z) -00499 { dJointSetHinge2Axis1 (_id, x, y, z); } -00500 void setAxis2 (dReal x, dReal y, dReal z) -00501 { dJointSetHinge2Axis2 (_id, x, y, z); } -00502 -00503 void getAnchor (dVector3 result) const -00504 { dJointGetHinge2Anchor (_id, result); } -00505 void getAnchor2 (dVector3 result) const -00506 { dJointGetHinge2Anchor2 (_id, result); } -00507 void getAxis1 (dVector3 result) const -00508 { dJointGetHinge2Axis1 (_id, result); } -00509 void getAxis2 (dVector3 result) const -00510 { dJointGetHinge2Axis2 (_id, result); } -00511 -00512 dReal getAngle1() const -00513 { return dJointGetHinge2Angle1 (_id); } -00514 dReal getAngle1Rate() const -00515 { return dJointGetHinge2Angle1Rate (_id); } -00516 dReal getAngle2Rate() const -00517 { return dJointGetHinge2Angle2Rate (_id); } -00518 -00519 void setParam (int parameter, dReal value) -00520 { dJointSetHinge2Param (_id, parameter, value); } -00521 dReal getParam (int parameter) const -00522 { return dJointGetHinge2Param (_id, parameter); } -00523 -00524 void addTorques(dReal torque1, dReal torque2) -00525 { dJointAddHinge2Torques(_id, torque1, torque2); } -00526 }; -00527 -00528 -00529 class dPRJoint : public dJoint { -00530 dPRJoint (const dPRJoint &); -00531 void operator = (const dPRJoint &); -00532 -00533 public: -00534 dPRJoint() { } -00535 dPRJoint (dWorldID world, dJointGroupID group=0) -00536 { _id = dJointCreatePR (world, group); } -00537 -00538 void create (dWorldID world, dJointGroupID group=0) { -00539 if (_id) dJointDestroy (_id); -00540 _id = dJointCreatePR (world, group); -00541 } -00542 -00543 void setAnchor (dReal x, dReal y, dReal z) -00544 { dJointSetPRAnchor (_id, x, y, z); } -00545 void setAxis1 (dReal x, dReal y, dReal z) -00546 { dJointSetPRAxis1 (_id, x, y, z); } -00547 void setAxis2 (dReal x, dReal y, dReal z) -00548 { dJointSetPRAxis2 (_id, x, y, z); } -00549 -00550 void getAnchor (dVector3 result) const -00551 { dJointGetPRAnchor (_id, result); } -00552 void getAxis1 (dVector3 result) const -00553 { dJointGetPRAxis1 (_id, result); } -00554 void getAxis2 (dVector3 result) const -00555 { dJointGetPRAxis2 (_id, result); } -00556 -00557 dReal getPosition() const -00558 { return dJointGetPRPosition (_id); } -00559 dReal getPositionRate() const -00560 { return dJointGetPRPositionRate (_id); } -00561 -00562 void setParam (int parameter, dReal value) -00563 { dJointSetPRParam (_id, parameter, value); } -00564 dReal getParam (int parameter) const -00565 { return dJointGetPRParam (_id, parameter); } -00566 }; -00567 -00568 -00569 class dFixedJoint : public dJoint { -00570 // intentionally undefined, don't use these -00571 dFixedJoint (const dFixedJoint &); -00572 void operator = (const dFixedJoint &); -00573 -00574 public: -00575 dFixedJoint() { } -00576 dFixedJoint (dWorldID world, dJointGroupID group=0) -00577 { _id = dJointCreateFixed (world, group); } -00578 -00579 void create (dWorldID world, dJointGroupID group=0) { -00580 if (_id) dJointDestroy (_id); -00581 _id = dJointCreateFixed (world, group); -00582 } -00583 -00584 void set() -00585 { dJointSetFixed (_id); } -00586 -00587 void setParam (int parameter, dReal value) -00588 { dJointSetFixedParam (_id, parameter, value); } -00589 -00590 dReal getParam (int parameter) const -00591 { return dJointGetFixedParam (_id, parameter); } -00592 }; -00593 -00594 -00595 class dContactJoint : public dJoint { -00596 // intentionally undefined, don't use these -00597 dContactJoint (const dContactJoint &); -00598 void operator = (const dContactJoint &); -00599 -00600 public: -00601 dContactJoint() { } -00602 dContactJoint (dWorldID world, dJointGroupID group, dContact *contact) -00603 { _id = dJointCreateContact (world, group, contact); } -00604 -00605 void create (dWorldID world, dJointGroupID group, dContact *contact) { -00606 if (_id) dJointDestroy (_id); -00607 _id = dJointCreateContact (world, group, contact); -00608 } -00609 }; -00610 -00611 -00612 class dNullJoint : public dJoint { -00613 // intentionally undefined, don't use these -00614 dNullJoint (const dNullJoint &); -00615 void operator = (const dNullJoint &); -00616 -00617 public: -00618 dNullJoint() { } -00619 dNullJoint (dWorldID world, dJointGroupID group=0) -00620 { _id = dJointCreateNull (world, group); } -00621 -00622 void create (dWorldID world, dJointGroupID group=0) { -00623 if (_id) dJointDestroy (_id); -00624 _id = dJointCreateNull (world, group); -00625 } -00626 }; -00627 -00628 -00629 class dAMotorJoint : public dJoint { -00630 // intentionally undefined, don't use these -00631 dAMotorJoint (const dAMotorJoint &); -00632 void operator = (const dAMotorJoint &); -00633 -00634 public: -00635 dAMotorJoint() { } -00636 dAMotorJoint (dWorldID world, dJointGroupID group=0) -00637 { _id = dJointCreateAMotor (world, group); } -00638 -00639 void create (dWorldID world, dJointGroupID group=0) { -00640 if (_id) dJointDestroy (_id); -00641 _id = dJointCreateAMotor (world, group); -00642 } -00643 -00644 void setMode (int mode) -00645 { dJointSetAMotorMode (_id, mode); } -00646 int getMode() const -00647 { return dJointGetAMotorMode (_id); } -00648 -00649 void setNumAxes (int num) -00650 { dJointSetAMotorNumAxes (_id, num); } -00651 int getNumAxes() const -00652 { return dJointGetAMotorNumAxes (_id); } -00653 -00654 void setAxis (int anum, int rel, dReal x, dReal y, dReal z) -00655 { dJointSetAMotorAxis (_id, anum, rel, x, y, z); } -00656 void getAxis (int anum, dVector3 result) const -00657 { dJointGetAMotorAxis (_id, anum, result); } -00658 int getAxisRel (int anum) const -00659 { return dJointGetAMotorAxisRel (_id, anum); } -00660 -00661 void setAngle (int anum, dReal angle) -00662 { dJointSetAMotorAngle (_id, anum, angle); } -00663 dReal getAngle (int anum) const -00664 { return dJointGetAMotorAngle (_id, anum); } -00665 dReal getAngleRate (int anum) -00666 { return dJointGetAMotorAngleRate (_id,anum); } -00667 -00668 void setParam (int parameter, dReal value) -00669 { dJointSetAMotorParam (_id, parameter, value); } -00670 dReal getParam (int parameter) const -00671 { return dJointGetAMotorParam (_id, parameter); } -00672 -00673 void addTorques(dReal torque1, dReal torque2, dReal torque3) -00674 { dJointAddAMotorTorques(_id, torque1, torque2, torque3); } -00675 }; -00676 -00677 -00678 class dLMotorJoint : public dJoint { -00679 // intentionally undefined, don't use these -00680 dLMotorJoint (const dLMotorJoint &); -00681 void operator = (const dLMotorJoint &); -00682 -00683 public: -00684 dLMotorJoint() { } -00685 dLMotorJoint (dWorldID world, dJointGroupID group=0) -00686 { _id = dJointCreateLMotor (world, group); } -00687 -00688 void create (dWorldID world, dJointGroupID group=0) { -00689 if (_id) dJointDestroy (_id); -00690 _id = dJointCreateLMotor (world, group); -00691 } -00692 -00693 void setNumAxes (int num) -00694 { dJointSetLMotorNumAxes (_id, num); } -00695 int getNumAxes() const -00696 { return dJointGetLMotorNumAxes (_id); } -00697 -00698 void setAxis (int anum, int rel, dReal x, dReal y, dReal z) -00699 { dJointSetLMotorAxis (_id, anum, rel, x, y, z); } -00700 void getAxis (int anum, dVector3 result) const -00701 { dJointGetLMotorAxis (_id, anum, result); } -00702 -00703 void setParam (int parameter, dReal value) -00704 { dJointSetLMotorParam (_id, parameter, value); } -00705 dReal getParam (int parameter) const -00706 { return dJointGetLMotorParam (_id, parameter); } -00707 }; -00708 -00709 -00710 -00711 #endif -00712 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 /* C++ interface for new collision API */ -00024 -00025 -00026 #ifndef _ODE_ODECPP_COLLISION_H_ -00027 #define _ODE_ODECPP_COLLISION_H_ -00028 #ifdef __cplusplus -00029 -00030 #include <ode/error.h> -00031 -00032 -00033 class dGeom { -00034 // intentionally undefined, don't use these -00035 dGeom (dGeom &); -00036 void operator= (dGeom &); -00037 -00038 protected: -00039 dGeomID _id; -00040 -00041 public: -00042 dGeom() -00043 { _id = 0; } -00044 ~dGeom() -00045 { if (_id) dGeomDestroy (_id); } -00046 -00047 dGeomID id() const -00048 { return _id; } -00049 operator dGeomID() const -00050 { return _id; } -00051 -00052 void destroy() { -00053 if (_id) dGeomDestroy (_id); -00054 _id = 0; -00055 } -00056 -00057 int getClass() const -00058 { return dGeomGetClass (_id); } -00059 -00060 dSpaceID getSpace() const -00061 { return dGeomGetSpace (_id); } -00062 -00063 void setData (void *data) -00064 { dGeomSetData (_id,data); } -00065 void *getData() const -00066 { return dGeomGetData (_id); } -00067 -00068 void setBody (dBodyID b) -00069 { dGeomSetBody (_id,b); } -00070 dBodyID getBody() const -00071 { return dGeomGetBody (_id); } -00072 -00073 void setPosition (dReal x, dReal y, dReal z) -00074 { dGeomSetPosition (_id,x,y,z); } -00075 const dReal * getPosition() const -00076 { return dGeomGetPosition (_id); } -00077 -00078 void setRotation (const dMatrix3 R) -00079 { dGeomSetRotation (_id,R); } -00080 const dReal * getRotation() const -00081 { return dGeomGetRotation (_id); } -00082 -00083 void setQuaternion (const dQuaternion quat) -00084 { dGeomSetQuaternion (_id,quat); } -00085 void getQuaternion (dQuaternion quat) const -00086 { dGeomGetQuaternion (_id,quat); } -00087 -00088 void getAABB (dReal aabb[6]) const -00089 { dGeomGetAABB (_id, aabb); } -00090 -00091 int isSpace() -00092 { return dGeomIsSpace (_id); } -00093 -00094 void setCategoryBits (unsigned long bits) -00095 { dGeomSetCategoryBits (_id, bits); } -00096 void setCollideBits (unsigned long bits) -00097 { dGeomSetCollideBits (_id, bits); } -00098 unsigned long getCategoryBits() -00099 { return dGeomGetCategoryBits (_id); } -00100 unsigned long getCollideBits() -00101 { return dGeomGetCollideBits (_id); } -00102 -00103 void enable() -00104 { dGeomEnable (_id); } -00105 void disable() -00106 { dGeomDisable (_id); } -00107 int isEnabled() -00108 { return dGeomIsEnabled (_id); } -00109 -00110 void collide2 (dGeomID g, void *data, dNearCallback *callback) -00111 { dSpaceCollide2 (_id,g,data,callback); } -00112 }; -00113 -00114 -00115 class dSpace : public dGeom { -00116 // intentionally undefined, don't use these -00117 dSpace (dSpace &); -00118 void operator= (dSpace &); -00119 -00120 protected: -00121 // the default constructor is protected so that you -00122 // can't instance this class. you must instance one -00123 // of its subclasses instead. -00124 dSpace () { _id = 0; } -00125 -00126 public: -00127 dSpaceID id() const -00128 { return (dSpaceID) _id; } -00129 operator dSpaceID() const -00130 { return (dSpaceID) _id; } -00131 -00132 void setCleanup (int mode) -00133 { dSpaceSetCleanup (id(), mode); } -00134 int getCleanup() -00135 { return dSpaceGetCleanup (id()); } -00136 -00137 void add (dGeomID x) -00138 { dSpaceAdd (id(), x); } -00139 void remove (dGeomID x) -00140 { dSpaceRemove (id(), x); } -00141 int query (dGeomID x) -00142 { return dSpaceQuery (id(),x); } -00143 -00144 int getNumGeoms() -00145 { return dSpaceGetNumGeoms (id()); } -00146 dGeomID getGeom (int i) -00147 { return dSpaceGetGeom (id(),i); } -00148 -00149 void collide (void *data, dNearCallback *callback) -00150 { dSpaceCollide (id(),data,callback); } -00151 }; -00152 -00153 -00154 class dSimpleSpace : public dSpace { -00155 // intentionally undefined, don't use these -00156 dSimpleSpace (dSimpleSpace &); -00157 void operator= (dSimpleSpace &); -00158 -00159 public: -00160 dSimpleSpace (dSpaceID space) -00161 { _id = (dGeomID) dSimpleSpaceCreate (space); } -00162 }; -00163 -00164 -00165 class dHashSpace : public dSpace { -00166 // intentionally undefined, don't use these -00167 dHashSpace (dHashSpace &); -00168 void operator= (dHashSpace &); -00169 -00170 public: -00171 dHashSpace (dSpaceID space) -00172 { _id = (dGeomID) dHashSpaceCreate (space); } -00173 void setLevels (int minlevel, int maxlevel) -00174 { dHashSpaceSetLevels (id(),minlevel,maxlevel); } -00175 }; -00176 -00177 -00178 class dQuadTreeSpace : public dSpace { -00179 // intentionally undefined, don't use these -00180 dQuadTreeSpace (dQuadTreeSpace &); -00181 void operator= (dQuadTreeSpace &); -00182 -00183 public: -00184 dQuadTreeSpace (dSpaceID space, dVector3 center, dVector3 extents, int depth) -00185 { _id = (dGeomID) dQuadTreeSpaceCreate (space,center,extents,depth); } -00186 }; -00187 -00188 -00189 class dSphere : public dGeom { -00190 // intentionally undefined, don't use these -00191 dSphere (dSphere &); -00192 void operator= (dSphere &); -00193 -00194 public: -00195 dSphere () { } -00196 dSphere (dSpaceID space, dReal radius) -00197 { _id = dCreateSphere (space, radius); } -00198 -00199 void create (dSpaceID space, dReal radius) { -00200 if (_id) dGeomDestroy (_id); -00201 _id = dCreateSphere (space, radius); -00202 } -00203 -00204 void setRadius (dReal radius) -00205 { dGeomSphereSetRadius (_id, radius); } -00206 dReal getRadius() const -00207 { return dGeomSphereGetRadius (_id); } -00208 }; -00209 -00210 -00211 class dBox : public dGeom { -00212 // intentionally undefined, don't use these -00213 dBox (dBox &); -00214 void operator= (dBox &); -00215 -00216 public: -00217 dBox () { } -00218 dBox (dSpaceID space, dReal lx, dReal ly, dReal lz) -00219 { _id = dCreateBox (space,lx,ly,lz); } -00220 -00221 void create (dSpaceID space, dReal lx, dReal ly, dReal lz) { -00222 if (_id) dGeomDestroy (_id); -00223 _id = dCreateBox (space,lx,ly,lz); -00224 } -00225 -00226 void setLengths (dReal lx, dReal ly, dReal lz) -00227 { dGeomBoxSetLengths (_id, lx, ly, lz); } -00228 void getLengths (dVector3 result) const -00229 { dGeomBoxGetLengths (_id,result); } -00230 }; -00231 -00232 -00233 class dPlane : public dGeom { -00234 // intentionally undefined, don't use these -00235 dPlane (dPlane &); -00236 void operator= (dPlane &); -00237 -00238 public: -00239 dPlane() { } -00240 dPlane (dSpaceID space, dReal a, dReal b, dReal c, dReal d) -00241 { _id = dCreatePlane (space,a,b,c,d); } -00242 -00243 void create (dSpaceID space, dReal a, dReal b, dReal c, dReal d) { -00244 if (_id) dGeomDestroy (_id); -00245 _id = dCreatePlane (space,a,b,c,d); -00246 } -00247 -00248 void setParams (dReal a, dReal b, dReal c, dReal d) -00249 { dGeomPlaneSetParams (_id, a, b, c, d); } -00250 void getParams (dVector4 result) const -00251 { dGeomPlaneGetParams (_id,result); } -00252 }; -00253 -00254 -00255 class dCapsule : public dGeom { -00256 // intentionally undefined, don't use these -00257 dCapsule (dCapsule &); -00258 void operator= (dCapsule &); -00259 -00260 public: -00261 dCapsule() { } -00262 dCapsule (dSpaceID space, dReal radius, dReal length) -00263 { _id = dCreateCapsule (space,radius,length); } -00264 -00265 void create (dSpaceID space, dReal radius, dReal length) { -00266 if (_id) dGeomDestroy (_id); -00267 _id = dCreateCapsule (space,radius,length); -00268 } -00269 -00270 void setParams (dReal radius, dReal length) -00271 { dGeomCapsuleSetParams (_id, radius, length); } -00272 void getParams (dReal *radius, dReal *length) const -00273 { dGeomCapsuleGetParams (_id,radius,length); } -00274 }; -00275 -00276 -00277 class dRay : public dGeom { -00278 // intentionally undefined, don't use these -00279 dRay (dRay &); -00280 void operator= (dRay &); -00281 -00282 public: -00283 dRay() { } -00284 dRay (dSpaceID space, dReal length) -00285 { _id = dCreateRay (space,length); } -00286 -00287 void create (dSpaceID space, dReal length) { -00288 if (_id) dGeomDestroy (_id); -00289 _id = dCreateRay (space,length); -00290 } -00291 -00292 void setLength (dReal length) -00293 { dGeomRaySetLength (_id, length); } -00294 dReal getLength() -00295 { return dGeomRayGetLength (_id); } -00296 -00297 void set (dReal px, dReal py, dReal pz, dReal dx, dReal dy, dReal dz) -00298 { dGeomRaySet (_id, px, py, pz, dx, dy, dz); } -00299 void get (dVector3 start, dVector3 dir) -00300 { dGeomRayGet (_id, start, dir); } -00301 -00302 void setParams (int firstContact, int backfaceCull) -00303 { dGeomRaySetParams (_id, firstContact, backfaceCull); } -00304 void getParams (int *firstContact, int *backfaceCull) -00305 { dGeomRayGetParams (_id, firstContact, backfaceCull); } -00306 void setClosestHit (int closestHit) -00307 { dGeomRaySetClosestHit (_id, closestHit); } -00308 int getClosestHit() -00309 { return dGeomRayGetClosestHit (_id); } -00310 }; -00311 -00312 -00313 class dGeomTransform : public dGeom { -00314 // intentionally undefined, don't use these -00315 dGeomTransform (dGeomTransform &); -00316 void operator= (dGeomTransform &); -00317 -00318 public: -00319 dGeomTransform() { } -00320 dGeomTransform (dSpaceID space) -00321 { _id = dCreateGeomTransform (space); } -00322 -00323 void create (dSpaceID space=0) { -00324 if (_id) dGeomDestroy (_id); -00325 _id = dCreateGeomTransform (space); -00326 } -00327 -00328 void setGeom (dGeomID geom) -00329 { dGeomTransformSetGeom (_id, geom); } -00330 dGeomID getGeom() const -00331 { return dGeomTransformGetGeom (_id); } -00332 -00333 void setCleanup (int mode) -00334 { dGeomTransformSetCleanup (_id,mode); } -00335 int getCleanup () -00336 { return dGeomTransformGetCleanup (_id); } -00337 -00338 void setInfo (int mode) -00339 { dGeomTransformSetInfo (_id,mode); } -00340 int getInfo() -00341 { return dGeomTransformGetInfo (_id); } -00342 }; -00343 -00344 -00345 #endif -00346 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef _ODE_ODEMATH_H_ -00024 #define _ODE_ODEMATH_H_ -00025 -00026 #include <ode/common.h> -00027 -00028 #ifdef __GNUC__ -00029 #define PURE_INLINE extern inline -00030 #else -00031 #define PURE_INLINE inline -00032 #endif -00033 -00034 /* -00035 * macro to access elements i,j in an NxM matrix A, independent of the -00036 * matrix storage convention. -00037 */ -00038 #define dACCESS33(A,i,j) ((A)[(i)*4+(j)]) -00039 -00040 /* -00041 * Macro to test for valid floating point values -00042 */ -00043 #define dVALIDVEC3(v) (!(dIsNan(v[0]) || dIsNan(v[1]) || dIsNan(v[2]))) -00044 #define dVALIDVEC4(v) (!(dIsNan(v[0]) || dIsNan(v[1]) || dIsNan(v[2]) || dIsNan(v[3]))) -00045 #define dVALIDMAT3(m) (!(dIsNan(m[0]) || dIsNan(m[1]) || dIsNan(m[2]) || dIsNan(m[3]) || dIsNan(m[4]) || dIsNan(m[5]) || dIsNan(m[6]) || dIsNan(m[7]) || dIsNan(m[8]) || dIsNan(m[9]) || dIsNan(m[10]) || dIsNan(m[11]))) -00046 #define dVALIDMAT4(m) (!(dIsNan(m[0]) || dIsNan(m[1]) || dIsNan(m[2]) || dIsNan(m[3]) || dIsNan(m[4]) || dIsNan(m[5]) || dIsNan(m[6]) || dIsNan(m[7]) || dIsNan(m[8]) || dIsNan(m[9]) || dIsNan(m[10]) || dIsNan(m[11]) || dIsNan(m[12]) || dIsNan(m[13]) || dIsNan(m[14]) || dIsNan(m[15]) )) -00047 -00048 -00049 -00050 /* -00051 * General purpose vector operations with other vectors or constants. -00052 */ -00053 -00054 #define dOP(a,op,b,c) \ -00055 (a)[0] = ((b)[0]) op ((c)[0]); \ -00056 (a)[1] = ((b)[1]) op ((c)[1]); \ -00057 (a)[2] = ((b)[2]) op ((c)[2]); -00058 #define dOPC(a,op,b,c) \ -00059 (a)[0] = ((b)[0]) op (c); \ -00060 (a)[1] = ((b)[1]) op (c); \ -00061 (a)[2] = ((b)[2]) op (c); -00062 #define dOPE(a,op,b) \ -00063 (a)[0] op ((b)[0]); \ -00064 (a)[1] op ((b)[1]); \ -00065 (a)[2] op ((b)[2]); -00066 #define dOPEC(a,op,c) \ -00067 (a)[0] op (c); \ -00068 (a)[1] op (c); \ -00069 (a)[2] op (c); -00070 -00071 -00072 /* -00073 * Length, and squared length helpers. dLENGTH returns the length of a dVector3. -00074 * dLENGTHSQUARED return the squared length of a dVector3. -00075 */ -00076 -00077 #define dLENGTHSQUARED(a) (((a)[0])*((a)[0]) + ((a)[1])*((a)[1]) + ((a)[2])*((a)[2])) -00078 -00079 #ifdef __cplusplus -00080 -00081 PURE_INLINE dReal dLENGTH (const dReal *a) { return dSqrt(dLENGTHSQUARED(a)); } -00082 -00083 #else -00084 -00085 #define dLENGTH(a) ( dSqrt( ((a)[0])*((a)[0]) + ((a)[1])*((a)[1]) + ((a)[2])*((a)[2]) ) ) -00086 -00087 #endif /* __cplusplus */ -00088 -00089 -00090 -00091 -00092 -00093 /* -00094 * 3-way dot product. dDOTpq means that elements of `a' and `b' are spaced -00095 * p and q indexes apart respectively. dDOT() means dDOT11. -00096 * in C++ we could use function templates to get all the versions of these -00097 * functions - but on some compilers this will result in sub-optimal code. -00098 */ -00099 -00100 #define dDOTpq(a,b,p,q) ((a)[0]*(b)[0] + (a)[p]*(b)[q] + (a)[2*(p)]*(b)[2*(q)]) -00101 -00102 #ifdef __cplusplus -00103 -00104 PURE_INLINE dReal dDOT (const dReal *a, const dReal *b) { return dDOTpq(a,b,1,1); } -00105 PURE_INLINE dReal dDOT13 (const dReal *a, const dReal *b) { return dDOTpq(a,b,1,3); } -00106 PURE_INLINE dReal dDOT31 (const dReal *a, const dReal *b) { return dDOTpq(a,b,3,1); } -00107 PURE_INLINE dReal dDOT33 (const dReal *a, const dReal *b) { return dDOTpq(a,b,3,3); } -00108 PURE_INLINE dReal dDOT14 (const dReal *a, const dReal *b) { return dDOTpq(a,b,1,4); } -00109 PURE_INLINE dReal dDOT41 (const dReal *a, const dReal *b) { return dDOTpq(a,b,4,1); } -00110 PURE_INLINE dReal dDOT44 (const dReal *a, const dReal *b) { return dDOTpq(a,b,4,4); } -00111 -00112 #else -00113 -00114 #define dDOT(a,b) dDOTpq(a,b,1,1) -00115 #define dDOT13(a,b) dDOTpq(a,b,1,3) -00116 #define dDOT31(a,b) dDOTpq(a,b,3,1) -00117 #define dDOT33(a,b) dDOTpq(a,b,3,3) -00118 #define dDOT14(a,b) dDOTpq(a,b,1,4) -00119 #define dDOT41(a,b) dDOTpq(a,b,4,1) -00120 #define dDOT44(a,b) dDOTpq(a,b,4,4) -00121 -00122 #endif /* __cplusplus */ -00123 -00124 -00125 /* -00126 * cross product, set a = b x c. dCROSSpqr means that elements of `a', `b' -00127 * and `c' are spaced p, q and r indexes apart respectively. -00128 * dCROSS() means dCROSS111. `op' is normally `=', but you can set it to -00129 * +=, -= etc to get other effects. -00130 */ -00131 -00132 #define dCROSS(a,op,b,c) \ -00133 do { \ -00134 (a)[0] op ((b)[1]*(c)[2] - (b)[2]*(c)[1]); \ -00135 (a)[1] op ((b)[2]*(c)[0] - (b)[0]*(c)[2]); \ -00136 (a)[2] op ((b)[0]*(c)[1] - (b)[1]*(c)[0]); \ -00137 } while(0) -00138 #define dCROSSpqr(a,op,b,c,p,q,r) \ -00139 do { \ -00140 (a)[ 0] op ((b)[ q]*(c)[2*r] - (b)[2*q]*(c)[ r]); \ -00141 (a)[ p] op ((b)[2*q]*(c)[ 0] - (b)[ 0]*(c)[2*r]); \ -00142 (a)[2*p] op ((b)[ 0]*(c)[ r] - (b)[ q]*(c)[ 0]); \ -00143 } while(0) -00144 #define dCROSS114(a,op,b,c) dCROSSpqr(a,op,b,c,1,1,4) -00145 #define dCROSS141(a,op,b,c) dCROSSpqr(a,op,b,c,1,4,1) -00146 #define dCROSS144(a,op,b,c) dCROSSpqr(a,op,b,c,1,4,4) -00147 #define dCROSS411(a,op,b,c) dCROSSpqr(a,op,b,c,4,1,1) -00148 #define dCROSS414(a,op,b,c) dCROSSpqr(a,op,b,c,4,1,4) -00149 #define dCROSS441(a,op,b,c) dCROSSpqr(a,op,b,c,4,4,1) -00150 #define dCROSS444(a,op,b,c) dCROSSpqr(a,op,b,c,4,4,4) -00151 -00152 -00153 /* -00154 * set a 3x3 submatrix of A to a matrix such that submatrix(A)*b = a x b. -00155 * A is stored by rows, and has `skip' elements per row. the matrix is -00156 * assumed to be already zero, so this does not write zero elements! -00157 * if (plus,minus) is (+,-) then a positive version will be written. -00158 * if (plus,minus) is (-,+) then a negative version will be written. -00159 */ -00160 -00161 #define dCROSSMAT(A,a,skip,plus,minus) \ -00162 do { \ -00163 (A)[1] = minus (a)[2]; \ -00164 (A)[2] = plus (a)[1]; \ -00165 (A)[(skip)+0] = plus (a)[2]; \ -00166 (A)[(skip)+2] = minus (a)[0]; \ -00167 (A)[2*(skip)+0] = minus (a)[1]; \ -00168 (A)[2*(skip)+1] = plus (a)[0]; \ -00169 } while(0) -00170 -00171 -00172 /* -00173 * compute the distance between two 3D-vectors -00174 */ -00175 -00176 #ifdef __cplusplus -00177 PURE_INLINE dReal dDISTANCE (const dVector3 a, const dVector3 b) -00178 { return dSqrt( (a[0]-b[0])*(a[0]-b[0]) + (a[1]-b[1])*(a[1]-b[1]) + (a[2]-b[2])*(a[2]-b[2]) ); } -00179 #else -00180 #define dDISTANCE(a,b) \ -00181 (dSqrt( ((a)[0]-(b)[0])*((a)[0]-(b)[0]) + ((a)[1]-(b)[1])*((a)[1]-(b)[1]) + ((a)[2]-(b)[2])*((a)[2]-(b)[2]) )) -00182 #endif -00183 -00184 -00185 /* -00186 * special case matrix multipication, with operator selection -00187 */ -00188 -00189 #define dMULTIPLYOP0_331(A,op,B,C) \ -00190 do { \ -00191 (A)[0] op dDOT((B),(C)); \ -00192 (A)[1] op dDOT((B+4),(C)); \ -00193 (A)[2] op dDOT((B+8),(C)); \ -00194 } while(0) -00195 #define dMULTIPLYOP1_331(A,op,B,C) \ -00196 do { \ -00197 (A)[0] op dDOT41((B),(C)); \ -00198 (A)[1] op dDOT41((B+1),(C)); \ -00199 (A)[2] op dDOT41((B+2),(C)); \ -00200 } while(0) -00201 #define dMULTIPLYOP0_133(A,op,B,C) \ -00202 do { \ -00203 (A)[0] op dDOT14((B),(C)); \ -00204 (A)[1] op dDOT14((B),(C+1)); \ -00205 (A)[2] op dDOT14((B),(C+2)); \ -00206 } while(0) -00207 #define dMULTIPLYOP0_333(A,op,B,C) \ -00208 do { \ -00209 (A)[0] op dDOT14((B),(C)); \ -00210 (A)[1] op dDOT14((B),(C+1)); \ -00211 (A)[2] op dDOT14((B),(C+2)); \ -00212 (A)[4] op dDOT14((B+4),(C)); \ -00213 (A)[5] op dDOT14((B+4),(C+1)); \ -00214 (A)[6] op dDOT14((B+4),(C+2)); \ -00215 (A)[8] op dDOT14((B+8),(C)); \ -00216 (A)[9] op dDOT14((B+8),(C+1)); \ -00217 (A)[10] op dDOT14((B+8),(C+2)); \ -00218 } while(0) -00219 #define dMULTIPLYOP1_333(A,op,B,C) \ -00220 do { \ -00221 (A)[0] op dDOT44((B),(C)); \ -00222 (A)[1] op dDOT44((B),(C+1)); \ -00223 (A)[2] op dDOT44((B),(C+2)); \ -00224 (A)[4] op dDOT44((B+1),(C)); \ -00225 (A)[5] op dDOT44((B+1),(C+1)); \ -00226 (A)[6] op dDOT44((B+1),(C+2)); \ -00227 (A)[8] op dDOT44((B+2),(C)); \ -00228 (A)[9] op dDOT44((B+2),(C+1)); \ -00229 (A)[10] op dDOT44((B+2),(C+2)); \ -00230 } while(0) -00231 #define dMULTIPLYOP2_333(A,op,B,C) \ -00232 do { \ -00233 (A)[0] op dDOT((B),(C)); \ -00234 (A)[1] op dDOT((B),(C+4)); \ -00235 (A)[2] op dDOT((B),(C+8)); \ -00236 (A)[4] op dDOT((B+4),(C)); \ -00237 (A)[5] op dDOT((B+4),(C+4)); \ -00238 (A)[6] op dDOT((B+4),(C+8)); \ -00239 (A)[8] op dDOT((B+8),(C)); \ -00240 (A)[9] op dDOT((B+8),(C+4)); \ -00241 (A)[10] op dDOT((B+8),(C+8)); \ -00242 } while(0) -00243 -00244 #ifdef __cplusplus -00245 -00246 #define DECL template <class TA, class TB, class TC> PURE_INLINE void -00247 -00248 DECL dMULTIPLY0_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_331(A,=,B,C); } -00249 DECL dMULTIPLY1_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP1_331(A,=,B,C); } -00250 DECL dMULTIPLY0_133(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_133(A,=,B,C); } -00251 DECL dMULTIPLY0_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_333(A,=,B,C); } -00252 DECL dMULTIPLY1_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP1_333(A,=,B,C); } -00253 DECL dMULTIPLY2_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP2_333(A,=,B,C); } -00254 -00255 DECL dMULTIPLYADD0_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_331(A,+=,B,C); } -00256 DECL dMULTIPLYADD1_331(TA *A, const TB *B, const TC *C) { dMULTIPLYOP1_331(A,+=,B,C); } -00257 DECL dMULTIPLYADD0_133(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_133(A,+=,B,C); } -00258 DECL dMULTIPLYADD0_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP0_333(A,+=,B,C); } -00259 DECL dMULTIPLYADD1_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP1_333(A,+=,B,C); } -00260 DECL dMULTIPLYADD2_333(TA *A, const TB *B, const TC *C) { dMULTIPLYOP2_333(A,+=,B,C); } -00261 -00262 #undef DECL -00263 -00264 #else -00265 -00266 #define dMULTIPLY0_331(A,B,C) dMULTIPLYOP0_331(A,=,B,C) -00267 #define dMULTIPLY1_331(A,B,C) dMULTIPLYOP1_331(A,=,B,C) -00268 #define dMULTIPLY0_133(A,B,C) dMULTIPLYOP0_133(A,=,B,C) -00269 #define dMULTIPLY0_333(A,B,C) dMULTIPLYOP0_333(A,=,B,C) -00270 #define dMULTIPLY1_333(A,B,C) dMULTIPLYOP1_333(A,=,B,C) -00271 #define dMULTIPLY2_333(A,B,C) dMULTIPLYOP2_333(A,=,B,C) -00272 -00273 #define dMULTIPLYADD0_331(A,B,C) dMULTIPLYOP0_331(A,+=,B,C) -00274 #define dMULTIPLYADD1_331(A,B,C) dMULTIPLYOP1_331(A,+=,B,C) -00275 #define dMULTIPLYADD0_133(A,B,C) dMULTIPLYOP0_133(A,+=,B,C) -00276 #define dMULTIPLYADD0_333(A,B,C) dMULTIPLYOP0_333(A,+=,B,C) -00277 #define dMULTIPLYADD1_333(A,B,C) dMULTIPLYOP1_333(A,+=,B,C) -00278 #define dMULTIPLYADD2_333(A,B,C) dMULTIPLYOP2_333(A,+=,B,C) -00279 -00280 #endif -00281 -00282 -00283 #ifdef __cplusplus -00284 extern "C" { -00285 #endif -00286 -00287 /* -00288 * normalize 3x1 and 4x1 vectors (i.e. scale them to unit length) -00289 */ -00290 ODE_API int dSafeNormalize3 (dVector3 a); -00291 ODE_API int dSafeNormalize4 (dVector4 a); -00292 -00293 // For some reason demo_chain1.c does not understand "inline" keyword. -00294 static __inline void _dNormalize3(dVector3 a) -00295 { -00296 int bNormalizationResult = dSafeNormalize3(a); -00297 dIASSERT(bNormalizationResult); -00298 dVARIABLEUSED(bNormalizationResult); -00299 } -00300 -00301 static __inline void _dNormalize4(dVector4 a) -00302 { -00303 int bNormalizationResult = dSafeNormalize4(a); -00304 dIASSERT(bNormalizationResult); -00305 dVARIABLEUSED(bNormalizationResult); -00306 } -00307 -00308 // For DLL export -00309 ODE_API void dNormalize3 (dVector3 a); // Potentially asserts on zero vec -00310 ODE_API void dNormalize4 (dVector4 a); // Potentially asserts on zero vec -00311 -00312 // For internal use -00313 #define dNormalize3(a) _dNormalize3(a) -00314 #define dNormalize4(a) _dNormalize4(a) -00315 -00316 /* -00317 * given a unit length "normal" vector n, generate vectors p and q vectors -00318 * that are an orthonormal basis for the plane space perpendicular to n. -00319 * i.e. this makes p,q such that n,p,q are all perpendicular to each other. -00320 * q will equal n x p. if n is not unit length then p will be unit length but -00321 * q wont be. -00322 */ -00323 -00324 ODE_API void dPlaneSpace (const dVector3 n, dVector3 p, dVector3 q); -00325 -00326 #ifdef __cplusplus -00327 } -00328 #endif -00329 -00330 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef _ODE_ROTATION_H_ -00024 #define _ODE_ROTATION_H_ -00025 -00026 #include <ode/common.h> -00027 #include <ode/compatibility.h> -00028 -00029 #ifdef __cplusplus -00030 extern "C" { -00031 #endif -00032 -00033 -00034 ODE_API void dRSetIdentity (dMatrix3 R); -00035 -00036 ODE_API void dRFromAxisAndAngle (dMatrix3 R, dReal ax, dReal ay, dReal az, -00037 dReal angle); -00038 -00039 ODE_API void dRFromEulerAngles (dMatrix3 R, dReal phi, dReal theta, dReal psi); -00040 -00041 ODE_API void dRFrom2Axes (dMatrix3 R, dReal ax, dReal ay, dReal az, -00042 dReal bx, dReal by, dReal bz); -00043 -00044 ODE_API void dRFromZAxis (dMatrix3 R, dReal ax, dReal ay, dReal az); -00045 -00046 ODE_API void dQSetIdentity (dQuaternion q); -00047 -00048 ODE_API void dQFromAxisAndAngle (dQuaternion q, dReal ax, dReal ay, dReal az, -00049 dReal angle); -00050 -00051 /* Quaternion multiplication, analogous to the matrix multiplication routines. */ -00052 /* qa = rotate by qc, then qb */ -00053 ODE_API void dQMultiply0 (dQuaternion qa, const dQuaternion qb, const dQuaternion qc); -00054 /* qa = rotate by qc, then by inverse of qb */ -00055 ODE_API void dQMultiply1 (dQuaternion qa, const dQuaternion qb, const dQuaternion qc); -00056 /* qa = rotate by inverse of qc, then by qb */ -00057 ODE_API void dQMultiply2 (dQuaternion qa, const dQuaternion qb, const dQuaternion qc); -00058 /* qa = rotate by inverse of qc, then by inverse of qb */ -00059 ODE_API void dQMultiply3 (dQuaternion qa, const dQuaternion qb, const dQuaternion qc); -00060 -00061 ODE_API void dRfromQ (dMatrix3 R, const dQuaternion q); -00062 ODE_API void dQfromR (dQuaternion q, const dMatrix3 R); -00063 ODE_API void dDQfromW (dReal dq[4], const dVector3 w, const dQuaternion q); -00064 -00065 -00066 #ifdef __cplusplus -00067 } -00068 #endif -00069 -00070 #endif -
-#include <contact.h>
-
-
Data Fields | |
-dVector3 | pos |
contact position | |
-dVector3 | normal |
normal vector | |
-dReal | depth |
penetration depth | |
-dGeomID | g1 |
-dGeomID | g2 |
the colliding geoms | |
-int | side1 |
-int | side2 |
(to be documented) |
-If two bodies touch, or if a body touches a static feature in its environment, the contact is represented by one or more "contact points", described by dContactGeom.
-The convention is that if body 1 is moved along the normal vector by a distance depth (or equivalently if body 2 is moved the same distance in the opposite direction) then the contact depth will be reduced to zero. This means that the normal vector points "in" to body 1.
-#include <drawstuff.h>
-
-
Data Fields | |
-int | version |
-void(* | start )() |
-void(* | step )(int pause) |
-void(* | command )(int cmd) |
-void(* | stop )() |
-char * | path_to_textures |
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef _ODE_TIMER_H_ -00024 #define _ODE_TIMER_H_ -00025 -00026 #include <ode/config.h> -00027 -00028 #ifdef __cplusplus -00029 extern "C" { -00030 #endif -00031 -00032 -00033 /* stop watch objects */ -00034 -00035 typedef struct dStopwatch { -00036 double time; /* total clock count */ -00037 unsigned long cc[2]; /* clock count since last `start' */ -00038 } dStopwatch; -00039 -00040 ODE_API void dStopwatchReset (dStopwatch *); -00041 ODE_API void dStopwatchStart (dStopwatch *); -00042 ODE_API void dStopwatchStop (dStopwatch *); -00043 ODE_API double dStopwatchTime (dStopwatch *); /* returns total time in secs */ -00044 -00045 -00046 /* code timers */ -00047 -00048 ODE_API void dTimerStart (const char *description); /* pass a static string here */ -00049 ODE_API void dTimerNow (const char *description); /* pass a static string here */ -00050 ODE_API void dTimerEnd(void); -00051 -00052 /* print out a timer report. if `average' is nonzero, print out the average -00053 * time for each slot (this is only meaningful if the same start-now-end -00054 * calls are being made repeatedly. -00055 */ -00056 ODE_API void dTimerReport (FILE *fout, int average); -00057 -00058 -00059 /* resolution */ -00060 -00061 /* returns the timer ticks per second implied by the timing hardware or API. -00062 * the actual timer resolution may not be this great. -00063 */ -00064 ODE_API double dTimerTicksPerSecond(void); -00065 -00066 /* returns an estimate of the actual timer resolution, in seconds. this may -00067 * be greater than 1/ticks_per_second. -00068 */ -00069 ODE_API double dTimerResolution(void); -00070 -00071 -00072 #ifdef __cplusplus -00073 } -00074 #endif -00075 -00076 #endif -
00001 /************************************************************************* -00002 * * -00003 * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. * -00004 * All rights reserved. Email: russ@q12.org Web: www.q12.org * -00005 * * -00006 * This library is free software; you can redistribute it and/or * -00007 * modify it under the terms of EITHER: * -00008 * (1) The GNU Lesser General Public License as published by the Free * -00009 * Software Foundation; either version 2.1 of the License, or (at * -00010 * your option) any later version. The text of the GNU Lesser * -00011 * General Public License is included with this library in the * -00012 * file LICENSE.TXT. * -00013 * (2) The BSD-style license that is included with this library in * -00014 * the file LICENSE-BSD.TXT. * -00015 * * -00016 * This library is distributed in the hope that it will be useful, * -00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * -00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * -00019 * LICENSE.TXT and LICENSE-BSD.TXT for more details. * -00020 * * -00021 *************************************************************************/ -00022 -00023 #ifndef __VERSION_H -00024 #define __VERSION_H -00025 -00026 /* high byte is major version, low byte is minor version */ -00027 #define DS_VERSION 0x0002 -00028 -00029 #endif -