diff options
Diffstat (limited to 'extern/solid/SOLID/SOLID.h')
-rw-r--r-- | extern/solid/SOLID/SOLID.h | 279 |
1 files changed, 0 insertions, 279 deletions
diff --git a/extern/solid/SOLID/SOLID.h b/extern/solid/SOLID/SOLID.h deleted file mode 100644 index 37d74340f8c..00000000000 --- a/extern/solid/SOLID/SOLID.h +++ /dev/null @@ -1,279 +0,0 @@ -/* - * SOLID - Software Library for Interference Detection - * - * Copyright (C) 2001-2003 Dtecta. All rights reserved. - * - * This library may be distributed under the terms of the Q Public License - * (QPL) as defined by Trolltech AS of Norway and appearing in the file - * LICENSE.QPL included in the packaging of this file. - * - * This library may be distributed and/or modified under the terms of the - * GNU General Public License (GPL) version 2 as published by the Free Software - * Foundation and appearing in the file LICENSE.GPL included in the - * packaging of this file. - * - * This library is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE - * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Commercial use or any other use of this library not covered by either - * the QPL or the GPL requires an additional license from Dtecta. - * Please contact info@dtecta.com for enquiries about the terms of commercial - * use of this library. - */ - -#ifndef SOLID_H -#define SOLID_H - -#include "SOLID_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - - DT_DECLARE_HANDLE(DT_ObjectHandle); - DT_DECLARE_HANDLE(DT_SceneHandle); - DT_DECLARE_HANDLE(DT_ShapeHandle); - DT_DECLARE_HANDLE(DT_VertexBaseHandle); - DT_DECLARE_HANDLE(DT_RespTableHandle); - DT_DECLARE_HANDLE(DT_ArchiveHandle); - - typedef unsigned int DT_ResponseClass; - - typedef enum DT_ResponseType { - DT_NO_RESPONSE, /* No response (obsolete) */ - DT_BROAD_RESPONSE, - DT_SIMPLE_RESPONSE, /* No collision data */ - DT_WITNESSED_RESPONSE, /* A point common to both objects - is returned as collision data - */ - DT_DEPTH_RESPONSE /* The penetration depth is returned - as collision data. The penetration depth - is the shortest vector over which one - object needs to be translated in order - to bring the objects in touching contact. - */ - } DT_ResponseType; - -/* For witnessed response, the following structure represents a common point. The world - coordinates of 'point1' and 'point2' coincide. 'normal' is the zero vector. - - For depth response, the following structure represents the penetration depth. - 'point1' en 'point2' are the witness points of the penetration depth in world coordinates. - The penetration depth vector in world coordinates is represented by 'normal'. -*/ - - typedef struct DT_CollData { - DT_Vector3 point1; /* Point in object1 in world coordinates */ - DT_Vector3 point2; /* Point in object2 in world coordinates */ - DT_Vector3 normal; /* point2 - point1 */ - } DT_CollData; - -/* A response callback is called by SOLID for each pair of collding objects. 'client-data' - is a pointer to an arbitrary structure in the client application. The client objects are - pointers to structures in the client application associated with the coliding objects. - 'coll_data' is the collision data computed by SOLID. -*/ - - typedef DT_Bool (*DT_ResponseCallback)(void *client_data, - void *client_object1, - void *client_object2, - const DT_CollData *coll_data); - -/* Shape definition */ - - - extern DECLSPEC DT_ShapeHandle DT_NewBox(DT_Scalar x, DT_Scalar y, DT_Scalar z); - extern DECLSPEC DT_ShapeHandle DT_NewCone(DT_Scalar radius, DT_Scalar height); - extern DECLSPEC DT_ShapeHandle DT_NewCylinder(DT_Scalar radius, DT_Scalar height); - extern DECLSPEC DT_ShapeHandle DT_NewSphere(DT_Scalar radius); - extern DECLSPEC DT_ShapeHandle DT_NewPoint(const DT_Vector3 point); - extern DECLSPEC DT_ShapeHandle DT_NewLineSegment(const DT_Vector3 source, const DT_Vector3 target); - extern DECLSPEC DT_ShapeHandle DT_NewMinkowski(DT_ShapeHandle shape1, DT_ShapeHandle shape2); - extern DECLSPEC DT_ShapeHandle DT_NewHull(DT_ShapeHandle shape1, DT_ShapeHandle shape2); - - extern DECLSPEC DT_VertexBaseHandle DT_NewVertexBase(const void *pointer, DT_Size stride); - extern DECLSPEC void DT_DeleteVertexBase(DT_VertexBaseHandle vertexBase); - extern DECLSPEC void DT_ChangeVertexBase(DT_VertexBaseHandle vertexBase, const void *pointer); - - extern DECLSPEC DT_ShapeHandle DT_NewComplexShape(DT_VertexBaseHandle vertexBase); - extern DECLSPEC void DT_EndComplexShape(); - - extern DECLSPEC DT_ShapeHandle DT_NewPolytope(DT_VertexBaseHandle vertexBase); - extern DECLSPEC void DT_EndPolytope(); - - extern DECLSPEC void DT_Begin(); - extern DECLSPEC void DT_End(); - - extern DECLSPEC void DT_Vertex(const DT_Vector3 vertex); - extern DECLSPEC void DT_VertexIndex(DT_Index index); - - extern DECLSPEC void DT_VertexIndices(DT_Count count, const DT_Index *indices); - extern DECLSPEC void DT_VertexRange(DT_Index first, DT_Count count); - - extern DECLSPEC void DT_DeleteShape(DT_ShapeHandle shape); - -/* Object */ - - extern DECLSPEC DT_ObjectHandle DT_CreateObject( - void *client_object, /* pointer to object in client memory */ - DT_ShapeHandle shape /* the shape or geometry of the object */ - ); - - extern DECLSPEC void DT_DestroyObject(DT_ObjectHandle object); - - - - extern DECLSPEC void DT_SetPosition(DT_ObjectHandle object, const DT_Vector3 position); - extern DECLSPEC void DT_SetOrientation(DT_ObjectHandle object, const DT_Quaternion orientation); - extern DECLSPEC void DT_SetScaling(DT_ObjectHandle object, const DT_Vector3 scaling); - -/* The margin is an offset from the actual shape. The actual geometry of an - object is the set of points whose distance to the transformed shape is at - most the margin. During the lifetime of an object the margin can be - modified. -*/ - - extern DECLSPEC void DT_SetMargin(DT_ObjectHandle object, DT_Scalar margin); - - -/* These commands assume a column-major 4x4 OpenGL matrix representation */ - - extern DECLSPEC void DT_SetMatrixf(DT_ObjectHandle object, const float *m); - extern DECLSPEC void DT_GetMatrixf(DT_ObjectHandle object, float *m); - - extern DECLSPEC void DT_SetMatrixd(DT_ObjectHandle object, const double *m); - extern DECLSPEC void DT_GetMatrixd(DT_ObjectHandle object, double *m); - - extern DECLSPEC void DT_GetBBox(DT_ObjectHandle object, DT_Vector3 min, DT_Vector3 max); - - - extern DECLSPEC DT_Bool DT_GetIntersect(DT_ObjectHandle object1, DT_ObjectHandle object2, - DT_Vector3 v); -/* This next command returns the distance between the objects. De returned - closest points are given in world coordinates. -*/ - extern DECLSPEC DT_Scalar DT_GetClosestPair(DT_ObjectHandle object1, DT_ObjectHandle object2, - DT_Vector3 point1, DT_Vector3 point2); - - extern DECLSPEC DT_Bool DT_GetCommonPoint(DT_ObjectHandle object1, DT_ObjectHandle object2, - DT_Vector3 point); - - extern DECLSPEC DT_Bool DT_GetPenDepth(DT_ObjectHandle object1, DT_ObjectHandle object2, - DT_Vector3 point1, DT_Vector3 point2); - -/* Scene */ - - extern DECLSPEC DT_SceneHandle DT_CreateScene(); - extern DECLSPEC void DT_DestroyScene(DT_SceneHandle scene); - - extern DECLSPEC void DT_AddObject(DT_SceneHandle scene, DT_ObjectHandle object); - extern DECLSPEC void DT_RemoveObject(DT_SceneHandle scene, DT_ObjectHandle object); - -/* Note that objects can be assigned to multiple scenes! */ - -/* Response */ - -/* Response tables are defined independent of the scenes in which they are used. - Multiple response tables can be used in one scene, and a response table - can be shared among scenes. -*/ - extern DECLSPEC DT_RespTableHandle DT_CreateRespTable(); - extern DECLSPEC void DT_DestroyRespTable(DT_RespTableHandle respTable); - -/* Responses are defined on (pairs of) response classes. Each response table - maintains its set of response classes. -*/ - extern DECLSPEC DT_ResponseClass DT_GenResponseClass(DT_RespTableHandle respTable); - -/* To each object for which a response is defined in the response table a - response class needs to be assigned. -*/ - - extern DECLSPEC void DT_SetResponseClass(DT_RespTableHandle respTable, - DT_ObjectHandle object, - DT_ResponseClass responseClass); - - extern DECLSPEC void DT_ClearResponseClass(DT_RespTableHandle respTable, - DT_ObjectHandle object); - - extern DECLSPEC void DT_CallResponse(DT_RespTableHandle respTable, - DT_ObjectHandle object1, - DT_ObjectHandle object2, - const DT_CollData *coll_data); - -/* For each pair of objects multiple responses can be defined. A response is a callback - together with its response type and client data. */ - -/* Responses can be defined for all pairs of response classes... */ - extern DECLSPEC void DT_AddDefaultResponse(DT_RespTableHandle respTable, - DT_ResponseCallback response, - DT_ResponseType type, void *client_data); - - extern DECLSPEC void DT_RemoveDefaultResponse(DT_RespTableHandle respTable, - DT_ResponseCallback response); -/* ...per response class... */ - extern DECLSPEC void DT_AddClassResponse(DT_RespTableHandle respTable, - DT_ResponseClass responseClass, - DT_ResponseCallback response, - DT_ResponseType type, void *client_data); - - extern DECLSPEC void DT_RemoveClassResponse(DT_RespTableHandle respTable, - DT_ResponseClass responseClass, - DT_ResponseCallback response); - -/* ... and per pair of response classes...*/ - extern DECLSPEC void DT_AddPairResponse(DT_RespTableHandle respTable, - DT_ResponseClass responseClass1, - DT_ResponseClass responseClass2, - DT_ResponseCallback response, - DT_ResponseType type, void *client_data); - extern DECLSPEC void DT_RemovePairResponse(DT_RespTableHandle respTable, - DT_ResponseClass responseClass1, - DT_ResponseClass responseClass2, - DT_ResponseCallback response); - -/* The next command calls the response callbacks for all intersecting pairs of objects in a scene. - 'DT_Test' returns the number of pairs of objects for which callbacks have been called. -*/ - - extern DECLSPEC DT_Count DT_Test(DT_SceneHandle scene, DT_RespTableHandle respTable); - -/* Set the maximum relative error in the closest points and penetration depth - computation. The default for `max_error' is 1.0e-3. Larger errors result - in better performance. Non-positive error tolerances are ignored. -*/ - - extern DECLSPEC void DT_SetAccuracy(DT_Scalar max_error); - -/* Set the maximum tolerance on relative errors due to rounding. The default for `tol_error' - is the machine epsilon. Very large tolerances result in false collisions. Setting tol_error too small - results in missed collisions. Non-positive error tolerances are ignored. -*/ - - extern DECLSPEC void DT_SetTolerance(DT_Scalar tol_error); - - -/* This function returns the client pointer to the first object in a scene hit by the ray - (actually a line segment) defined by the points 'from' en 'to'. The spot is the hit point - on the object in local coordinates. 'normal' is the normal to the surface of the object in - world coordinates. The ignore_client pointer is used to make one of the objects transparent. - - NB: Currently ray tests are implemented for spheres, boxes, and meshes only!! -*/ - - extern DECLSPEC void *DT_RayCast(DT_SceneHandle scene, void *ignore_client, - const DT_Vector3 source, const DT_Vector3 target, - DT_Scalar max_param, DT_Scalar *param, DT_Vector3 normal); - -/* Similar, only here a single object is tested and a boolean is returned */ - - extern DECLSPEC DT_Bool DT_ObjectRayCast(DT_ObjectHandle object, - const DT_Vector3 source, const DT_Vector3 target, - DT_Scalar max_param, DT_Scalar *param, DT_Vector3 normal); - - -#ifdef __cplusplus -} -#endif - -#endif |