collision.h   collision.h 
skipping to change at line 175 skipping to change at line 175
* @returns A pointer to the geom's position vector. * @returns A pointer to the geom's position vector.
* @remarks The returned value is a pointer to the geom's internal * @remarks The returned value is a pointer to the geom's internal
* data structure. It is valid until any changes are made * data structure. It is valid until any changes are made
* to the geom. * to the geom.
* @sa dBodyGetPosition * @sa dBodyGetPosition
* @ingroup collide * @ingroup collide
*/ */
ODE_API const dReal * dGeomGetPosition (dGeomID geom); ODE_API const dReal * dGeomGetPosition (dGeomID geom);
/** /**
* @brief Copy the position of a geom into a vector.
* @ingroup collide
* @param geom the geom to query
* @param pos a copy of the geom position
* @sa dGeomGetPosition
*/
ODE_API void dGeomCopyPosition (dGeomID geom, dVector3 pos);
/**
* @brief Get the rotation matrix of a placeable geom. * @brief Get the rotation matrix of a placeable geom.
* *
* If the geom is attached to a body, the body's rotation will be returned. * 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 * Calling this function on a non-placeable geom results in a runtime error in
* the debug build of ODE. * the debug build of ODE.
* *
* @param geom the geom to query. * @param geom the geom to query.
* @returns A pointer to the geom's rotation matrix. * @returns A pointer to the geom's rotation matrix.
* @remarks The returned value is a pointer to the geom's internal * @remarks The returned value is a pointer to the geom's internal
* data structure. It is valid until any changes are made * data structure. It is valid until any changes are made
* to the geom. * to the geom.
* @sa dBodyGetRotation * @sa dBodyGetRotation
* @ingroup collide * @ingroup collide
*/ */
ODE_API const dReal * dGeomGetRotation (dGeomID geom); ODE_API const dReal * dGeomGetRotation (dGeomID geom);
/** /**
* @brief 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.
*
* @param geom the geom to query.
* @param R a copy of the geom rotation
* @sa dGeomGetRotation
* @ingroup collide
*/
ODE_API void dGeomCopyRotation(dGeomID geom, dMatrix3 R);
/**
* @brief Get the rotation quaternion of a placeable geom. * @brief Get the rotation quaternion of a placeable geom.
* *
* If the geom is attached to a body, the body's quaternion will be returne d. * If the geom is attached to a body, the body's quaternion will be returne d.
* *
* Calling this function on a non-placeable geom results in a runtime error in * Calling this function on a non-placeable geom results in a runtime error in
* the debug build of ODE. * the debug build of ODE.
* *
* @param geom the geom to query. * @param geom the geom to query.
* @param result a copy of the rotation quaternion. * @param result a copy of the rotation quaternion.
* @sa dBodyGetQuaternion * @sa dBodyGetQuaternion
skipping to change at line 507 skipping to change at line 531
* @param geom the geom to query. * @param geom the geom to query.
* @returns A pointer to the geom's offset vector. * @returns A pointer to the geom's offset vector.
* @remarks The returned value is a pointer to the geom's internal * @remarks The returned value is a pointer to the geom's internal
* data structure. It is valid until any changes are made * data structure. It is valid until any changes are made
* to the geom. * to the geom.
* @ingroup collide * @ingroup collide
*/ */
ODE_API const dReal * dGeomGetOffsetPosition (dGeomID geom); ODE_API const dReal * dGeomGetOffsetPosition (dGeomID geom);
/** /**
* @brief Get the offset position vector of a geom. * @brief Copy the offset position vector of a geom.
* *
* Returns the positional offset of the geom in local coordinates. * Returns the positional offset of the geom in local coordinates.
* If the geom has no offset, this function returns the zero vector. * If the geom has no offset, this function returns the zero vector.
* *
* @param geom the geom to query.
* @param pos returns the offset position
* @ingroup collide
*/
ODE_API void dGeomCopyOffsetPosition (dGeomID geom, dVector3 pos);
/**
* @brief 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.
*
* @param geom the geom to query. * @param geom the geom to query.
* @returns A pointer to the geom's offset vector. * @returns A pointer to the geom's offset rotation matrix.
* @remarks The returned value is a pointer to the geom's internal * @remarks The returned value is a pointer to the geom's internal
* data structure. It is valid until any changes are made * data structure. It is valid until any changes are made
* to the geom. * to the geom.
* @ingroup collide * @ingroup collide
*/ */
ODE_API const dReal * dGeomGetOffsetRotation (dGeomID geom); ODE_API const dReal * dGeomGetOffsetRotation (dGeomID geom);
/** /**
* @brief 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.
*
* @param geom the geom to query.
* @param R returns the rotation matrix.
* @ingroup collide
*/
ODE_API void dGeomCopyOffsetRotation (dGeomID geom, dMatrix3 R);
/**
* @brief Get the offset rotation quaternion of a geom. * @brief Get the offset rotation quaternion of a geom.
* *
* Returns the rotation offset of the geom as a quaternion. * Returns the rotation offset of the geom as a quaternion.
* If the geom has no offset, the identity quaternion is returned. * If the geom has no offset, the identity quaternion is returned.
* *
* @param geom the geom to query. * @param geom the geom to query.
* @param result a copy of the rotation quaternion. * @param result a copy of the rotation quaternion.
* @ingroup collide * @ingroup collide
*/ */
ODE_API void dGeomGetOffsetQuaternion (dGeomID geom, dQuaternion result); ODE_API void dGeomGetOffsetQuaternion (dGeomID geom, dQuaternion result);
skipping to change at line 1237 skipping to change at line 1287
const dVector3 side1, const dVector3 _p2, const dVector3 side1, const dVector3 _p2,
const dMatrix3 R2, const dVector3 side2); const dMatrix3 R2, const dVector3 side2);
ODE_API int dBoxBox (const dVector3 p1, const dMatrix3 R1, ODE_API int dBoxBox (const dVector3 p1, const dMatrix3 R1,
const dVector3 side1, const dVector3 p2, const dVector3 side1, const dVector3 p2,
const dMatrix3 R2, const dVector3 side2, const dMatrix3 R2, const dVector3 side2,
dVector3 normal, dReal *depth, int *return_code, dVector3 normal, dReal *depth, int *return_code,
int maxc, dContactGeom *contact, int skip); int maxc, dContactGeom *contact, int skip);
ODE_API void dInfiniteAABB (dGeomID geom, dReal aabb[6]); ODE_API void dInfiniteAABB (dGeomID geom, dReal aabb[6]);
ODE_API void dInitODE(void);
ODE_API void dCloseODE(void); ODE_API void dCloseODE(void);
/* ************************************************************************ */ /* ************************************************************************ */
/* custom classes */ /* custom classes */
typedef void dGetAABBFn (dGeomID, dReal aabb[6]); typedef void dGetAABBFn (dGeomID, dReal aabb[6]);
typedef int dColliderFn (dGeomID o1, dGeomID o2, typedef int dColliderFn (dGeomID o1, dGeomID o2,
int flags, dContactGeom *contact, int skip); int flags, dContactGeom *contact, int skip);
typedef dColliderFn * dGetColliderFnFn (int num); typedef dColliderFn * dGetColliderFnFn (int num);
typedef void dGeomDtorFn (dGeomID o); typedef void dGeomDtorFn (dGeomID o);
 End of changes. 7 change blocks. 
2 lines changed or deleted 54 lines changed or added


 collision_trimesh.h   collision_trimesh.h 
skipping to change at line 54 skipping to change at line 54
struct dxTriMeshData; struct dxTriMeshData;
typedef struct dxTriMeshData* dTriMeshDataID; typedef struct dxTriMeshData* dTriMeshDataID;
/* /*
* These dont make much sense now, but they will later when we add more * These dont make much sense now, but they will later when we add more
* features. * features.
*/ */
ODE_API dTriMeshDataID dGeomTriMeshDataCreate(void); ODE_API dTriMeshDataID dGeomTriMeshDataCreate(void);
ODE_API void dGeomTriMeshDataDestroy(dTriMeshDataID g); ODE_API void dGeomTriMeshDataDestroy(dTriMeshDataID g);
enum { TRIMESH_FACE_NORMALS, TRIMESH_LAST_TRANSFORMATION }; enum { TRIMESH_FACE_NORMALS };
ODE_API void dGeomTriMeshDataSet(dTriMeshDataID g, int data_id, void* in_da ta); ODE_API void dGeomTriMeshDataSet(dTriMeshDataID g, int data_id, void* in_da ta);
ODE_API void* dGeomTriMeshDataGet(dTriMeshDataID g, int data_id); ODE_API void* dGeomTriMeshDataGet(dTriMeshDataID g, int data_id);
/**
* We need to set the last transform after each time step for
* accurate collision response. These functions get and set that transform.
* It is stored per geom instance, rather than per dTriMeshDataID.
*/
ODE_API void dGeomTriMeshSetLastTransform( dGeomID g, dMatrix4 last_trans )
;
ODE_API dReal* dGeomTriMeshGetLastTransform( dGeomID g );
/* /*
* Build TriMesh data with single pricision used in vertex data . * Build TriMesh data with single precision used in vertex data .
*/ */
ODE_API void dGeomTriMeshDataBuildSingle(dTriMeshDataID g, ODE_API void dGeomTriMeshDataBuildSingle(dTriMeshDataID g,
const void* Vertices, int VertexStride, in t VertexCount, const void* Vertices, int VertexStride, in t VertexCount,
const void* Indices, int IndexCount, int T riStride); const void* Indices, int IndexCount, int T riStride);
/* same again with a normals array (used as trimesh-trimesh optimization) * / /* same again with a normals array (used as trimesh-trimesh optimization) * /
ODE_API void dGeomTriMeshDataBuildSingle1(dTriMeshDataID g, ODE_API void dGeomTriMeshDataBuildSingle1(dTriMeshDataID g,
const void* Vertices, int VertexStride, i nt VertexCount, const void* Vertices, int VertexStride, i nt VertexCount,
const void* Indices, int IndexCount, int TriStride, const void* Indices, int IndexCount, int TriStride,
const void* Normals); const void* Normals);
/* /*
 End of changes. 3 change blocks. 
2 lines changed or deleted 11 lines changed or added


 common.h   common.h 
skipping to change at line 96 skipping to change at line 96
#define dIASSERT(a) ; #define dIASSERT(a) ;
#define dUASSERT(a,msg) ; #define dUASSERT(a,msg) ;
#define dDEBUGMSG(msg) ; #define dDEBUGMSG(msg) ;
#endif #endif
#define dAASSERT(a) dUASSERT(a,"Bad argument(s)") #define dAASSERT(a) dUASSERT(a,"Bad argument(s)")
/* floating point data type, vector, matrix and quaternion types */ /* floating point data type, vector, matrix and quaternion types */
#if defined(dSINGLE) #if defined(dSINGLE)
typedef float dReal; typedef float dReal;
#ifdef dDOUBLE
#error You can only #define dSINGLE or dDOUBLE, not both.
#endif // dDOUBLE
#elif defined(dDOUBLE) #elif defined(dDOUBLE)
typedef double dReal; typedef double dReal;
#else #else
#error You must #define dSINGLE or dDOUBLE #error You must #define dSINGLE or dDOUBLE
#endif #endif
/* round an integer up to a multiple of 4, except that 0 and 1 are unmodifi ed /* round an integer up to a multiple of 4, except that 0 and 1 are unmodifi ed
* (used to compute matrix leading dimensions) * (used to compute matrix leading dimensions)
*/ */
#define dPAD(a) (((a) > 1) ? ((((a)-1)|3)+1) : (a)) #define dPAD(a) (((a) > 1) ? ((((a)-1)|3)+1) : (a))
skipping to change at line 245 skipping to change at line 248
dJointTypeBall, dJointTypeBall,
dJointTypeHinge, dJointTypeHinge,
dJointTypeSlider, dJointTypeSlider,
dJointTypeContact, dJointTypeContact,
dJointTypeUniversal, dJointTypeUniversal,
dJointTypeHinge2, dJointTypeHinge2,
dJointTypeFixed, dJointTypeFixed,
dJointTypeNull, dJointTypeNull,
dJointTypeAMotor, dJointTypeAMotor,
dJointTypeLMotor, dJointTypeLMotor,
dJointTypePlane2D dJointTypePlane2D,
dJointTypePR
}; };
/* an alternative way of setting joint parameters, using joint parameter /* an alternative way of setting joint parameters, using joint parameter
* structures and member constants. we don't actually do this yet. * structures and member constants. we don't actually do this yet.
*/ */
/* /*
typedef struct dLimot { typedef struct dLimot {
int mode; int mode;
dReal lostop, histop; dReal lostop, histop;
 End of changes. 2 change blocks. 
1 lines changed or deleted 5 lines changed or added


 config.h   config.h 
/* include/ode/config.h. Generated by configure. */ /* include/ode/config.h. Generated from config.h.in by configure. */
/* include/ode/config.h.in. Generated from configure.in by autoheader. */ /* include/ode/config.h.in. Generated from configure.in by autoheader. */
#ifndef ODE_CONFIG_H #ifndef ODE_CONFIG_H
#define ODE_CONFIG_H #define ODE_CONFIG_H
/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
systems. This function is required for `alloca.c' support on those syste ms. systems. This function is required for `alloca.c' support on those syste ms.
*/ */
/* #undef CRAY_STACKSEG_END */ /* #undef CRAY_STACKSEG_END */
skipping to change at line 190 skipping to change at line 190
/* Define to 1 if you have the `__isnan' function. */ /* Define to 1 if you have the `__isnan' function. */
#define HAVE___ISNAN 1 #define HAVE___ISNAN 1
/* Define to 1 if you have the `__isnanf' function. */ /* Define to 1 if you have the `__isnanf' function. */
#define HAVE___ISNANF 1 #define HAVE___ISNANF 1
/* Name of package */ /* Name of package */
#define PACKAGE "ODE" #define PACKAGE "ODE"
/* Define to the address where bug reports for this package should be sent. */ /* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "ode@q12.org" #define PACKAGE_BUGREPORT "ode@ode.org"
/* Define to the full name of this package. */ /* Define to the full name of this package. */
#define PACKAGE_NAME "ODE" #define PACKAGE_NAME "ODE"
/* Define to the full name and version of this package. */ /* Define to the full name and version of this package. */
#define PACKAGE_STRING "ODE 0.6.1" #define PACKAGE_STRING "ODE 0.8"
/* Define to the one symbol short name of this package. */ /* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "ode" #define PACKAGE_TARNAME "ode"
/* Define to the version of this package. */ /* Define to the version of this package. */
#define PACKAGE_VERSION "0.6.1" #define PACKAGE_VERSION "0.8"
/* is this a pentium on a gcc-based platform? */ /* is this a pentium on a gcc-based platform? */
#define PENTIUM 1 #define PENTIUM 1
/* Define to the type of arg 1 for `select'. */ /* Define to the type of arg 1 for `select'. */
#define SELECT_TYPE_ARG1 int #define SELECT_TYPE_ARG1 int
/* Define to the type of args 2, 3 and 4 for `select'. */ /* Define to the type of args 2, 3 and 4 for `select'. */
#define SELECT_TYPE_ARG234 (fd_set *) #define SELECT_TYPE_ARG234 (fd_set *)
/* Define to the type of arg 5 for `select'. */ /* Define to the type of arg 5 for `select'. */
#define SELECT_TYPE_ARG5 (struct timeval *) #define SELECT_TYPE_ARG5 (struct timeval *)
/* The size of a `char', as computed by sizeof. */ /* The size of `char', as computed by sizeof. */
#define SIZEOF_CHAR 1 #define SIZEOF_CHAR 1
/* The size of a `int', as computed by sizeof. */ /* The size of `int', as computed by sizeof. */
#define SIZEOF_INT 4 #define SIZEOF_INT 4
/* The size of a `long int', as computed by sizeof. */ /* The size of `long int', as computed by sizeof. */
#define SIZEOF_LONG_INT 4 #define SIZEOF_LONG_INT 4
/* The size of a `short', as computed by sizeof. */ /* The size of `short', as computed by sizeof. */
#define SIZEOF_SHORT 2 #define SIZEOF_SHORT 2
/* The size of a `void*', as computed by sizeof. */ /* The size of `void*', as computed by sizeof. */
#define SIZEOF_VOIDP 4 #define SIZEOF_VOIDP 4
/* The extension for shared libraries. */ /* The extension for shared libraries. */
#define SO_EXT ".so" #define SO_EXT ".so"
/* If using the C implementation of alloca, define if you know the /* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be direction of stack growth for your system; otherwise it will be
automatically deduced at run-time. automatically deduced at runtime.
STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION > 0 => grows toward higher addresses
STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION < 0 => grows toward lower addresses
STACK_DIRECTION = 0 => direction of growth unknown */ STACK_DIRECTION = 0 => direction of growth unknown */
/* #undef STACK_DIRECTION */ /* #undef STACK_DIRECTION */
/* Define to 1 if you have the ANSI C header files. */ /* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1 #define STDC_HEADERS 1
/* Version number of package */ /* Version number of package */
#define VERSION "0.6.1" #define VERSION "0.8.0"
/* Define to 1 if your processor stores words with the most significant byt e /* Define to 1 if your processor stores words with the most significant byt e
first (like Motorola and SPARC, unlike Intel and VAX). */ first (like Motorola and SPARC, unlike Intel and VAX). */
/* #undef WORDS_BIGENDIAN */ /* #undef WORDS_BIGENDIAN */
/* is this a X86_64 system on a gcc-based platform? */ /* is this a X86_64 system on a gcc-based platform? */
/* #undef X86_64_SYSTEM */ /* #undef X86_64_SYSTEM */
/* Define to 1 if the X Window System is missing or not being used. */ /* Define to 1 if the X Window System is missing or not being used. */
/* #undef X_DISPLAY_MISSING */ /* #undef X_DISPLAY_MISSING */
skipping to change at line 291 skipping to change at line 291
#ifndef __cplusplus #ifndef __cplusplus
/* #undef inline */ /* #undef inline */
#endif #endif
/* Define to rpl_malloc if the replacement function should be used. */ /* Define to rpl_malloc if the replacement function should be used. */
/* #undef malloc */ /* #undef malloc */
/* Define to rpl_realloc if the replacement function should be used. */ /* Define to rpl_realloc if the replacement function should be used. */
/* #undef realloc */ /* #undef realloc */
/* Define to `unsigned' if <sys/types.h> does not define. */ /* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef size_t */ /* #undef size_t */
/* Define to empty if the keyword `volatile' does not work. Warning: valid /* Define to empty if the keyword `volatile' does not work. Warning: valid
code using `volatile' can become incorrect without. Disable with care. * / code using `volatile' can become incorrect without. Disable with care. * /
/* #undef volatile */ /* #undef volatile */
#ifdef HAVE_ALLOCA_H #ifdef HAVE_ALLOCA_H
#include <alloca.h> #include <alloca.h>
#endif #endif
#if defined(HAVE_IEEEFP_H) && !defined(__CYGWIN__) #if defined(HAVE_IEEEFP_H) && !defined(__CYGWIN__)
skipping to change at line 337 skipping to change at line 337
#include <float.h> #include <float.h>
#endif #endif
#if SIZEOF_CHAR == 1 #if SIZEOF_CHAR == 1
typedef char int8; typedef char int8;
typedef unsigned char uint8; typedef unsigned char uint8;
#else #else
#error "expecting sizeof(char) == 1" #error "expecting sizeof(char) == 1"
#endif #endif
#if SIZEOF_SHORT == 2 #if SIZEOF_SHORT == 2
typedef short int16; typedef short int16;
typedef unsigned short uint16;; typedef unsigned short uint16;
#else #else
#error "can not find 2 byte integer type" #error "can not find 2 byte integer type"
#endif #endif
/* integer types (we assume int >= 32 bits) */ /* integer types (we assume int >= 32 bits) */
#if SIZEOF_INT == 4 #if SIZEOF_INT == 4
typedef short int32; typedef short int32;
typedef unsigned short uint32; typedef unsigned short uint32;
#else #else
#error "can not find 4 byte integer type" #error "can not find 4 byte integer type"
#endif #endif
 End of changes. 13 change blocks. 
13 lines changed or deleted 13 lines changed or added


 mass.h   mass.h 
skipping to change at line 70 skipping to change at line 70
ODE_API void dMassSetCylinder (dMass *, dReal density, int direction, ODE_API void dMassSetCylinder (dMass *, dReal density, int direction,
dReal radius, dReal length); dReal radius, dReal length);
ODE_API void dMassSetCylinderTotal (dMass *, dReal total_mass, int directio n, ODE_API void dMassSetCylinderTotal (dMass *, dReal total_mass, int directio n,
dReal radius, dReal length); dReal radius, dReal length);
ODE_API void dMassSetBox (dMass *, dReal density, ODE_API void dMassSetBox (dMass *, dReal density,
dReal lx, dReal ly, dReal lz); dReal lx, dReal ly, dReal lz);
ODE_API void dMassSetBoxTotal (dMass *, dReal total_mass, ODE_API void dMassSetBoxTotal (dMass *, dReal total_mass,
dReal lx, dReal ly, dReal lz); dReal lx, dReal ly, dReal lz);
ODE_API void dMassSetTrimesh (dMass *, dReal density, dGeomID g);
ODE_API void dMassAdjust (dMass *, dReal newmass); ODE_API void dMassAdjust (dMass *, dReal newmass);
ODE_API void dMassTranslate (dMass *, dReal x, dReal y, dReal z); ODE_API void dMassTranslate (dMass *, dReal x, dReal y, dReal z);
ODE_API void dMassRotate (dMass *, const dMatrix3 R); ODE_API void dMassRotate (dMass *, const dMatrix3 R);
ODE_API void dMassAdd (dMass *a, const dMass *b); ODE_API void dMassAdd (dMass *a, const dMass *b);
// Backwards compatible API // Backwards compatible API
#define dMassSetCappedCylinder dMassSetCapsule #define dMassSetCappedCylinder dMassSetCapsule
 End of changes. 1 change blocks. 
0 lines changed or deleted 2 lines changed or added


 objects.h   objects.h 
skipping to change at line 278 skipping to change at line 278
* *
* Disabled bodies do not consume CPU time, therefore to speed up the simul ation * Disabled bodies do not consume CPU time, therefore to speed up the simul ation
* bodies should be disabled when they come to rest. This can be done autom atically * bodies should be disabled when they come to rest. This can be done autom atically
* with the auto-disable feature. * with the auto-disable feature.
* *
* If a body has its auto-disable flag turned on, it will automatically dis able * If a body has its auto-disable flag turned on, it will automatically dis able
* itself when * itself when
* @li It has been idle for a given number of simulation steps. * @li It has been idle for a given number of simulation steps.
* @li It has also been idle for a given amount of simulation time. * @li It has also been idle for a given amount of simulation time.
* *
* A body is considered to be idle when the magnitudes of both its linear v * A body is considered to be idle when the magnitudes of both its
elocity * linear average velocity and angular average velocity are below given thr
* and angular velocity are below given thresholds. esholds.
* The sample size for the average defaults to one and can be disabled by s
etting
* to zero with
*
* Thus, every body has six auto-disable parameters: an enabled flag, a idl
e step
* count, an idle time, linear/angular average velocity thresholds, and the
* average samples count.
* *
* Thus, every body has five auto-disable parameters: an enabled flag, a id * Newly created bodies get these parameters from world.
le step
* count, an idle time, and linear/angular velocity thresholds. Newly creat
ed bodies
* get these parameters from world.
*/ */
/** /**
* @brief Set the AutoEnableDepth parameter used by the StepFast1 algorithm . * @brief Set the AutoEnableDepth parameter used by the StepFast1 algorithm .
* @ingroup disable * @ingroup disable
*/ */
ODE_API void dWorldSetAutoEnableDepthSF1(dWorldID, int autoEnableDepth); ODE_API void dWorldSetAutoEnableDepthSF1(dWorldID, int autoEnableDepth);
/** /**
* @brief Get the AutoEnableDepth parameter used by the StepFast1 algorithm . * @brief Get the AutoEnableDepth parameter used by the StepFast1 algorithm .
skipping to change at line 327 skipping to change at line 331
ODE_API dReal dWorldGetAutoDisableAngularThreshold (dWorldID); ODE_API dReal dWorldGetAutoDisableAngularThreshold (dWorldID);
/** /**
* @brief Set auto disable angular threshold for newly created bodies. * @brief Set auto disable angular threshold for newly created bodies.
* @param linear_threshold default is 0.01 * @param linear_threshold default is 0.01
* @ingroup disable * @ingroup disable
*/ */
ODE_API void dWorldSetAutoDisableAngularThreshold (dWorldID, dReal angular_ threshold); ODE_API void dWorldSetAutoDisableAngularThreshold (dWorldID, dReal angular_ threshold);
/** /**
* @brief Get auto disable linear average threshold for newly created bodie
s.
* @ingroup disable
* @return the threshold
*/
ODE_API dReal dWorldGetAutoDisableLinearAverageThreshold (dWorldID);
/**
* @brief Set auto disable linear average threshold for newly created bodie
s.
* @param linear_average_threshold default is 0.01
* @ingroup disable
*/
ODE_API void dWorldSetAutoDisableLinearAverageThreshold (dWorldID, dReal l
inear_average_threshold);
/**
* @brief Get auto disable angular average threshold for newly created bodi
es.
* @ingroup disable
* @return the threshold
*/
ODE_API dReal dWorldGetAutoDisableAngularAverageThreshold (dWorldID);
/**
* @brief Set auto disable angular average threshold for newly created bodi
es.
* @param linear_average_threshold default is 0.01
* @ingroup disable
*/
ODE_API void dWorldSetAutoDisableAngularAverageThreshold (dWorldID, dReal a
ngular_average_threshold);
/**
* @brief Get auto disable sample count for newly created bodies.
* @ingroup disable
* @return number of samples used
*/
ODE_API int dWorldGetAutoDisableAverageSamplesCount (dWorldID);
/**
* @brief Set auto disable average sample count for newly created bodies.
* @ingroup disable
* @param average_samples_count Default is 1, meaning only instantaneous ve
locity is used.
* Set to zero to disable sampling and thus prevent any body from auto-disa
bling.
*/
ODE_API void dWorldSetAutoDisableAverageSamplesCount (dWorldID, unsigned in
t average_samples_count );
/**
* @brief Get auto disable steps for newly created bodies. * @brief Get auto disable steps for newly created bodies.
* @ingroup disable * @ingroup disable
* @return nr of steps * @return nr of steps
*/ */
ODE_API int dWorldGetAutoDisableSteps (dWorldID); ODE_API int dWorldGetAutoDisableSteps (dWorldID);
/** /**
* @brief Set auto disable steps for newly created bodies. * @brief Set auto disable steps for newly created bodies.
* @ingroup disable * @ingroup disable
* @param steps default is 10 * @param steps default is 10
skipping to change at line 402 skipping to change at line 449
* The origin of this coordinate frame is the body's point of reference. So me values * The origin of this coordinate frame is the body's point of reference. So me values
* in ODE (vectors, matrices etc) are relative to the body coordinate frame , and others * in ODE (vectors, matrices etc) are relative to the body coordinate frame , and others
* are relative to the global coordinate frame. * are relative to the global coordinate frame.
* *
* Note that the shape of a rigid body is not a dynamical property (except insofar as * 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 detecti on that cares * it influences the various mass properties). It is only collision detecti on that cares
* about the detailed shape of the body. * about the detailed shape of the body.
*/ */
/** /**
* @brief Get auto disable linear threshold. * @brief Get auto disable linear average threshold.
* @ingroup bodies * @ingroup bodies
* @return the threshold * @return the threshold
*/ */
ODE_API dReal dBodyGetAutoDisableLinearThreshold (dBodyID); ODE_API dReal dBodyGetAutoDisableLinearThreshold (dBodyID);
/** /**
* @brief Set auto disable linear threshold. * @brief Set auto disable linear average threshold.
* @ingroup bodies * @ingroup bodies
* @return the threshold * @return the threshold
*/ */
ODE_API void dBodySetAutoDisableLinearThreshold (dBodyID, dReal linear_thr eshold); ODE_API void dBodySetAutoDisableLinearThreshold (dBodyID, dReal linear_ave rage_threshold);
/** /**
* @brief Get auto disable angular threshold. * @brief Get auto disable angular average threshold.
* @ingroup bodies * @ingroup bodies
* @return the threshold * @return the threshold
*/ */
ODE_API dReal dBodyGetAutoDisableAngularThreshold (dBodyID); ODE_API dReal dBodyGetAutoDisableAngularThreshold (dBodyID);
/** /**
* @brief Set auto disable angular threshold. * @brief Set auto disable angular average threshold.
* @ingroup bodies * @ingroup bodies
* @return the threshold * @return the threshold
*/ */
ODE_API void dBodySetAutoDisableAngularThreshold (dBodyID, dReal angular_t ODE_API void dBodySetAutoDisableAngularThreshold (dBodyID, dReal angular_a
hreshold); verage_threshold);
/**
* @brief Get auto disable average size (samples count).
* @ingroup bodies
* @return the nr of steps/size.
*/
ODE_API int dBodyGetAutoDisableAverageSamplesCount (dBodyID);
/**
* @brief Set auto disable average buffer size (average steps).
* @ingroup bodies
* @param average_samples_count the nr of samples to review.
*/
ODE_API void dBodySetAutoDisableAverageSamplesCount (dBodyID, unsigned int
average_samples_count);
/** /**
* @brief Get auto disable steps. * @brief Get auto steps a body must be thought of as idle to disable
* @ingroup bodies * @ingroup bodies
* @return the nr of steps * @return the nr of steps
*/ */
ODE_API int dBodyGetAutoDisableSteps (dBodyID); ODE_API int dBodyGetAutoDisableSteps (dBodyID);
/** /**
* @brief Set auto disable steps. * @brief Set auto disable steps.
* @ingroup bodies * @ingroup bodies
* @param steps the nr of steps. * @param steps the nr of steps.
*/ */
skipping to change at line 480 skipping to change at line 541
/** /**
* @brief Set auto disable defaults. * @brief Set auto disable defaults.
* @remarks * @remarks
* Set the values for the body to those set as default for the world. * Set the values for the body to those set as default for the world.
* @ingroup bodies * @ingroup bodies
*/ */
ODE_API void dBodySetAutoDisableDefaults (dBodyID); ODE_API void dBodySetAutoDisableDefaults (dBodyID);
/** /**
* @brief Retrives the world attached to te given body.
* @remarks
*
* @ingroup bodies
*/
ODE_API dWorldID dBodyGetWorld (dBodyID);
/**
* @brief Create a body in given world. * @brief Create a body in given world.
* @remarks * @remarks
* Default mass parameters are at position (0,0,0). * Default mass parameters are at position (0,0,0).
* @ingroup bodies * @ingroup bodies
*/ */
ODE_API dBodyID dBodyCreate (dWorldID); ODE_API dBodyID dBodyCreate (dWorldID);
/** /**
* @brief Destroy a body. * @brief Destroy a body.
* @remarks * @remarks
skipping to change at line 581 skipping to change at line 650
ODE_API void dBodyCopyPosition (dBodyID body, dVector3 pos); ODE_API void dBodyCopyPosition (dBodyID body, dVector3 pos);
/** /**
* @brief Get the rotation of a body. * @brief Get the rotation of a body.
* @ingroup bodies * @ingroup bodies
* @return pointer to a 4x3 rotation matrix. * @return pointer to a 4x3 rotation matrix.
*/ */
ODE_API const dReal * dBodyGetRotation (dBodyID); ODE_API const dReal * dBodyGetRotation (dBodyID);
/** /**
* @brief Copy the rotation of a body.
* @ingroup bodies
* @param body the body to query
* @param R a copy of the rotation matrix
* @sa dBodyGetRotation
*/
ODE_API void dBodyCopyRotation (dBodyID, dMatrix3 R);
/**
* @brief Get the rotation of a body. * @brief Get the rotation of a body.
* @ingroup bodies * @ingroup bodies
* @return pointer to 4 scalars that represent the quaternion. * @return pointer to 4 scalars that represent the quaternion.
*/ */
ODE_API const dReal * dBodyGetQuaternion (dBodyID); ODE_API const dReal * dBodyGetQuaternion (dBodyID);
/** /**
* @brief Copy the orientation of a body into a quaternion. * @brief Copy the orientation of a body into a quaternion.
* @ingroup bodies * @ingroup bodies
* @param body the body to query * @param body the body to query
skipping to change at line 1003 skipping to change at line 1081
/** /**
* @brief Create a new joint of the universal type. * @brief Create a new joint of the universal type.
* @ingroup joints * @ingroup joints
* @param dJointGroupID set to 0 to allocate the joint normally. * @param dJointGroupID set to 0 to allocate the joint normally.
* If it is nonzero the joint is allocated in the given joint group. * If it is nonzero the joint is allocated in the given joint group.
*/ */
ODE_API dJointID dJointCreateUniversal (dWorldID, dJointGroupID); ODE_API dJointID dJointCreateUniversal (dWorldID, dJointGroupID);
/** /**
* @brief Create a new joint of the PR (Prismatic and Rotoide) type.
* @ingroup joints
* @param 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);
/**
* @brief Create a new joint of the fixed type. * @brief Create a new joint of the fixed type.
* @ingroup joints * @ingroup joints
* @param dJointGroupID set to 0 to allocate the joint normally. * @param dJointGroupID set to 0 to allocate the joint normally.
* If it is nonzero the joint is allocated in the given joint group. * If it is nonzero the joint is allocated in the given joint group.
*/ */
ODE_API dJointID dJointCreateFixed (dWorldID, dJointGroupID); ODE_API dJointID dJointCreateFixed (dWorldID, dJointGroupID);
ODE_API dJointID dJointCreateNull (dWorldID, dJointGroupID); ODE_API dJointID dJointCreateNull (dWorldID, dJointGroupID);
/** /**
skipping to change at line 1277 skipping to change at line 1363
/** /**
* @brief Applies torque1 about the universal's axis 1, torque2 about the * @brief Applies torque1 about the universal's axis 1, torque2 about the
* universal's axis 2. * universal's axis 2.
* @remarks This function is just a wrapper for dBodyAddTorque(). * @remarks This function is just a wrapper for dBodyAddTorque().
* @ingroup joints * @ingroup joints
*/ */
ODE_API void dJointAddUniversalTorques(dJointID joint, dReal torque1, dReal torque2); ODE_API void dJointAddUniversalTorques(dJointID joint, dReal torque1, dReal torque2);
/** /**
* @brief set anchor
* @ingroup joints
*/
ODE_API void dJointSetPRAnchor (dJointID, dReal x, dReal y, dReal z);
/**
* @brief set the axis for the prismatic articulation
* @ingroup joints
*/
ODE_API void dJointSetPRAxis1 (dJointID, dReal x, dReal y, dReal z);
/**
* @brief set the axis for the rotoide articulation
* @ingroup joints
*/
ODE_API void dJointSetPRAxis2 (dJointID, dReal x, dReal y, dReal z);
/**
* @brief set joint parameter
* @ingroup joints
*
* @note parameterX where X equal 2 refer to parameter for the rotoide arti
culation
*/
ODE_API void dJointSetPRParam (dJointID, int parameter, dReal value);
/**
* @brief 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 oppos
ite
* direction to body 2. This function is just a wrapper for dBodyAddTorque(
)}
* @ingroup joints
*/
ODE_API void dJointAddPRTorque (dJointID j, dReal torque);
/**
* @brief Call this on the fixed joint after it has been attached to * @brief Call this on the fixed joint after it has been attached to
* remember the current desired relative offset and desired relative * remember the current desired relative offset and desired relative
* rotation between the bodies. * rotation between the bodies.
* @ingroup joints * @ingroup joints
*/ */
ODE_API void dJointSetFixed (dJointID); ODE_API void dJointSetFixed (dJointID);
/** /**
* @brief set the nr of axes * @brief set the nr of axes
* @param num 0..3 * @param num 0..3
skipping to change at line 1565 skipping to change at line 1687
*/ */
ODE_API void dJointGetUniversalAxis2 (dJointID, dVector3 result); ODE_API void dJointGetUniversalAxis2 (dJointID, dVector3 result);
/** /**
* @brief get joint parameter * @brief get joint parameter
* @ingroup joints * @ingroup joints
*/ */
ODE_API dReal dJointGetUniversalParam (dJointID, int parameter); ODE_API dReal dJointGetUniversalParam (dJointID, int parameter);
/** /**
* @brief Get both angles at the same time.
* @ingroup joints
*
* @param joint The universal joint for which we want to calculate the an
gles
* @param angle1 The angle between the body1 and the axis 1
* @param angle2 The angle between the body2 and the axis 2
*
* @note This function combine getUniversalAngle1 and getUniversalAngle2 to
gether
* and try to avoid redundant calculation
*/
ODE_API void dJointGetUniversalAngles (dJointID, dReal *angle1, dReal *angl
e2);
/**
* @brief Get angle * @brief Get angle
* @ingroup joints * @ingroup joints
*/ */
ODE_API dReal dJointGetUniversalAngle1 (dJointID); ODE_API dReal dJointGetUniversalAngle1 (dJointID);
/** /**
* @brief Get angle * @brief Get angle
* @ingroup joints * @ingroup joints
*/ */
ODE_API dReal dJointGetUniversalAngle2 (dJointID); ODE_API dReal dJointGetUniversalAngle2 (dJointID);
skipping to change at line 1589 skipping to change at line 1724
*/ */
ODE_API dReal dJointGetUniversalAngle1Rate (dJointID); ODE_API dReal dJointGetUniversalAngle1Rate (dJointID);
/** /**
* @brief Get time derivative of angle * @brief Get time derivative of angle
* @ingroup joints * @ingroup joints
*/ */
ODE_API dReal dJointGetUniversalAngle2Rate (dJointID); ODE_API dReal dJointGetUniversalAngle2Rate (dJointID);
/** /**
* @brief Get the joint anchor point, in world coordinates.
* @return the point on body 1. If the joint is perfectly satisfied,
* this will be the same as the point on body 2.
* @ingroup joints
*/
ODE_API void dJointGetPRAnchor (dJointID, dVector3 result);
/**
* @brief 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 + anc
hor2)]
*
* @ingroup joints
*/
ODE_API dReal dJointGetPRPosition (dJointID);
/**
* @brief Get the PR linear position's time derivative
*
* @ingroup joints
*/
ODE_API dReal dJointGetPRPositionRate (dJointID);
/**
* @brief Get the prismatic axis
* @ingroup joints
*/
ODE_API void dJointGetPRAxis1 (dJointID, dVector3 result);
/**
* @brief Get the Rotoide axis
* @ingroup joints
*/
ODE_API void dJointGetPRAxis2 (dJointID, dVector3 result);
/**
* @brief get joint parameter
* @ingroup joints
*/
ODE_API dReal dJointGetPRParam (dJointID, int parameter);
/**
* @brief Get the number of angular axes that will be controlled by the * @brief Get the number of angular axes that will be controlled by the
* AMotor. * AMotor.
* @param num can range from 0 (which effectively deactivates the * @param num can range from 0 (which effectively deactivates the
* joint) to 3. * joint) to 3.
* This is automatically set to 3 in dAMotorEuler mode. * This is automatically set to 3 in dAMotorEuler mode.
* @ingroup joints * @ingroup joints
*/ */
ODE_API int dJointGetAMotorNumAxes (dJointID); ODE_API int dJointGetAMotorNumAxes (dJointID);
/** /**
skipping to change at line 1708 skipping to change at line 1889
* @return 1 if the two bodies are connected together by * @return 1 if the two bodies are connected together by
* a joint, otherwise return 0. * a joint, otherwise return 0.
* @ingroup joints * @ingroup joints
*/ */
ODE_API int dAreConnected (dBodyID, dBodyID); ODE_API int dAreConnected (dBodyID, dBodyID);
/** /**
* @brief Utility function * @brief Utility function
* @return 1 if the two bodies are connected together by * @return 1 if the two bodies are connected together by
* a joint that does not have type @arg{joint_type}, otherwise return 0. * a joint that does not have type @arg{joint_type}, otherwise return 0.
* @param body1 A body to check.
* @param body2 A body to check.
* @param joint_type is a dJointTypeXXX constant. * @param joint_type is a dJointTypeXXX constant.
* This is useful for deciding whether to add contact joints between two bo dies: * This is useful for deciding whether to add contact joints between two bo dies:
* if they are already connected by non-contact joints then it may not be * 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 betw een- * appropriate to add contacts, however it is okay to add more contact betw een-
* bodies that already have contacts. * bodies that already have contacts.
* @ingroup joints * @ingroup joints
*/ */
ODE_API int dAreConnectedExcluding (dBodyID, dBodyID, int joint_type); ODE_API int dAreConnectedExcluding (dBodyID body1, dBodyID body2, int joint _type);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif #endif
 End of changes. 18 change blocks. 
17 lines changed or deleted 217 lines changed or added


 odecpp.h   odecpp.h 
skipping to change at line 451 skipping to change at line 451
void getAnchor (dVector3 result) const void getAnchor (dVector3 result) const
{ dJointGetUniversalAnchor (_id, result); } { dJointGetUniversalAnchor (_id, result); }
void getAnchor2 (dVector3 result) const void getAnchor2 (dVector3 result) const
{ dJointGetUniversalAnchor2 (_id, result); } { dJointGetUniversalAnchor2 (_id, result); }
void getAxis1 (dVector3 result) const void getAxis1 (dVector3 result) const
{ dJointGetUniversalAxis1 (_id, result); } { dJointGetUniversalAxis1 (_id, result); }
void getAxis2 (dVector3 result) const void getAxis2 (dVector3 result) const
{ dJointGetUniversalAxis2 (_id, result); } { dJointGetUniversalAxis2 (_id, result); }
dReal getParam (int parameter) const dReal getParam (int parameter) const
{ return dJointGetUniversalParam (_id, parameter); } { return dJointGetUniversalParam (_id, parameter); }
void getAngles(dReal *angle1, dReal *angle2) const
{ dJointGetUniversalAngles (_id, angle1, angle2); }
dReal getAngle1() const dReal getAngle1() const
{ return dJointGetUniversalAngle1 (_id); } { return dJointGetUniversalAngle1 (_id); }
dReal getAngle1Rate() const dReal getAngle1Rate() const
{ return dJointGetUniversalAngle1Rate (_id); } { return dJointGetUniversalAngle1Rate (_id); }
dReal getAngle2() const dReal getAngle2() const
{ return dJointGetUniversalAngle2 (_id); } { return dJointGetUniversalAngle2 (_id); }
dReal getAngle2Rate() const dReal getAngle2Rate() const
{ return dJointGetUniversalAngle2Rate (_id); } { return dJointGetUniversalAngle2Rate (_id); }
void addTorques (dReal torque1, dReal torque2) void addTorques (dReal torque1, dReal torque2)
skipping to change at line 511 skipping to change at line 514
void setParam (int parameter, dReal value) void setParam (int parameter, dReal value)
{ dJointSetHinge2Param (_id, parameter, value); } { dJointSetHinge2Param (_id, parameter, value); }
dReal getParam (int parameter) const dReal getParam (int parameter) const
{ return dJointGetHinge2Param (_id, parameter); } { return dJointGetHinge2Param (_id, parameter); }
void addTorques(dReal torque1, dReal torque2) void addTorques(dReal torque1, dReal torque2)
{ dJointAddHinge2Torques(_id, torque1, torque2); } { dJointAddHinge2Torques(_id, torque1, torque2); }
}; };
class dPRJoint : public dJoint {
dPRJoint (const dPRJoint &);
void operator = (const dPRJoint &);
public:
dPRJoint() { }
dPRJoint (dWorldID world, dJointGroupID group=0)
{ _id = dJointCreatePR (world, group); }
void create (dWorldID world, dJointGroupID group=0) {
if (_id) dJointDestroy (_id);
_id = dJointCreatePR (world, group);
}
void setAnchor (dReal x, dReal y, dReal z)
{ dJointSetPRAnchor (_id, x, y, z); }
void setAxis1 (dReal x, dReal y, dReal z)
{ dJointSetPRAxis1 (_id, x, y, z); }
void setAxis2 (dReal x, dReal y, dReal z)
{ dJointSetPRAxis2 (_id, x, y, z); }
void getAnchor (dVector3 result) const
{ dJointGetPRAnchor (_id, result); }
void getAxis1 (dVector3 result) const
{ dJointGetPRAxis1 (_id, result); }
void getAxis2 (dVector3 result) const
{ dJointGetPRAxis2 (_id, result); }
dReal getPosition() const
{ return dJointGetPRPosition (_id); }
dReal getPositionRate() const
{ return dJointGetPRPositionRate (_id); }
void setParam (int parameter, dReal value)
{ dJointSetPRParam (_id, parameter, value); }
dReal getParam (int parameter) const
{ return dJointGetPRParam (_id, parameter); }
};
class dFixedJoint : public dJoint { class dFixedJoint : public dJoint {
// intentionally undefined, don't use these // intentionally undefined, don't use these
dFixedJoint (const dFixedJoint &); dFixedJoint (const dFixedJoint &);
void operator = (const dFixedJoint &); void operator = (const dFixedJoint &);
public: public:
dFixedJoint() { } dFixedJoint() { }
dFixedJoint (dWorldID world, dJointGroupID group=0) dFixedJoint (dWorldID world, dJointGroupID group=0)
{ _id = dJointCreateFixed (world, group); } { _id = dJointCreateFixed (world, group); }
 End of changes. 2 change blocks. 
0 lines changed or deleted 42 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/