NewtonImport.pas
上传用户:ctlcnc
上传日期:2021-12-10
资源大小:4933k
文件大小:66k
源码类别:

2D图形编程

开发平台:

Delphi

  1. {*******************************************************************************}
  2. {                                                                               }
  3. {      Newton Game Dynamics Delphi-Headertranslation                            }
  4. {       Current SDK version 1.53                                                }
  5. {                                                                               }
  6. {      Copyright (c) 2004,05,06 Sascha Willems                                  }
  7. {                               Jon Walton                                      }
  8. {                               Dominique Louis                                 }
  9. {                                                                               }
  10. {      Initial Author : S.Spasov (Sury)                                         }
  11. {                                                                               }
  12. {*******************************************************************************}
  13. {                                                                               }
  14. { License :                                                                     }
  15. {                                                                               }
  16. {  The contents of this file are used with permission, subject to               }
  17. {  the Mozilla Public License Version 1.1 (the "License"); you may              }
  18. {  not use this file except in compliance with the License. You may             }
  19. {  obtain a copy of the License at                                              }
  20. {  http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  21. {                                                                               }
  22. {  Software distributed under the License is distributed on an                  }
  23. {  "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or               }
  24. {  implied. See the License for the specific language governing                 }
  25. {  rights and limitations under the License.                                    }
  26. {                                                                               }
  27. {*******************************************************************************}
  28. {                                                                               }
  29. {  See "Readme_NewtonImport.txt" for more information and detailed history      }
  30. {                                                                               }
  31. {*******************************************************************************}
  32. unit NewtonImport;
  33. {$I delphinewton.inc}
  34. //{$DEFINE NEWTON_DOUBLE_PRECISION} // This is needed when you want to use double precision
  35. interface
  36. uses
  37. {$IFDEF __GPC__}
  38.   system,
  39.   gpc,
  40. {$ENDIF}
  41. {$IFDEF UNIX}
  42. {$IFDEF FPC}
  43. {$IFDEF Ver1_0}
  44.   linux,
  45. {$ELSE}
  46.   pthreads,
  47.   baseunix,
  48.   unix,
  49. {$ENDIF}
  50.   x,
  51.   xlib,
  52. {$ELSE}
  53.   Types,
  54.   Libc,
  55.   Xlib,
  56. {$ENDIF}
  57. {$ENDIF}
  58. {$IFDEF __MACH__}
  59.   GPCMacOSAll,
  60. {$ENDIF}
  61.   Classes;
  62. const
  63. {$IFDEF WIN32}
  64.   NewtonDLL = 'Newton.dll';
  65. {$ENDIF}
  66. {$IFDEF UNIX}
  67. {$IFDEF DARWIN} // MacOS X
  68.   NewtonDLL = 'libnewton.dylib';
  69. {$ELSE}
  70.   NewtonDLL = 'libnewton.so';
  71. {$ENDIF}
  72. {$ENDIF}
  73. {$IFDEF MACOS}
  74.   NewtonDLL = 'libnewton';
  75. {$ENDIF}
  76. (*Comment this line if you get weird errors*)
  77. {$DEFINE NICE_CODE_PARAMS}
  78. type
  79. {I did this to speed up the translation process and avoid bugs}
  80. {if you don't like me screw up the Delphi syntax with those
  81. (C++ types just do a simple find and replace =)
  82. {Pascal to C++}
  83.   {simple types}
  84.   Bool = Boolean;
  85.   {$IFDEF NEWTON_DOUBLE_PRECISION}
  86.    Float = Double;
  87.   {$ELSE}
  88.    Float = Single;
  89.   {$ENDIF}
  90.   Long_double = Extended;
  91.   Int = Integer;
  92.   __int8 = ShortInt;
  93.   __int16 = SmallInt;
  94.   __int32 = LongInt;
  95.   __int64 = Int64;
  96.   NChar = ShortInt;
  97.   Unsigned_char = Byte;
  98.   Short = SmallInt;
  99.   Unsigned_short = Word;
  100.   Long = LongInt;
  101.   Unsigned_long = LongWord;
  102.   Unsigned_int = Cardinal;
  103.   size_t = Cardinal;
  104.   {Pointer types}
  105.   Pvoid = Pointer; //void pointer
  106.   PBool = ^Bool;
  107.   PFloat = ^Float;
  108.   PLong_double = ^Long_double;
  109.   PInt = ^Int;
  110.   P__int8 = ^__int8;
  111.   P__int16 = ^__int16;
  112.   P__int32 = ^__int32;
  113.   P__int64 = ^__int64;
  114.   P2Char = ^NChar;
  115.   PUnsigned_char = ^Unsigned_char;
  116.   PShort = ^Short;
  117.   PUnsigned_short = ^Unsigned_short;
  118.   PLong = ^Long;
  119.   PUnsigned_long = ^Unsigned_long;
  120.   PUnsigned_int = ^Unsigned_int;
  121.   Psize_t = ^size_t;
  122. {end Pascal to C++}
  123.   {well this might look stupid
  124.   but i did it in order to make
  125.   code complete and code parameters hint window
  126.   to show the actual type for ex. PNewtonWorld
  127.   instead of just "Pointer" , thus making programming a lot easier}
  128. {$IFDEF NICE_CODE_PARAMS}
  129.   PNewtonBody = ^Pointer;
  130.   PNewtonWorld = ^Pointer;
  131.   PNewtonJoint = ^Pointer;
  132.   PNewtonContact = ^Pointer;
  133.   PNewtonMaterial = ^Pointer;
  134.   PNewtonCollision = ^Pointer;
  135.   PNewtonRagDoll = ^Pointer;
  136.   PNewtonRagDollBone = ^Pointer;
  137. {$ELSE}
  138.   PNewtonBody = Pointer;
  139.   PNewtonWorld = Pointer;
  140.   PNewtonJoint = Pointer;
  141.   PNewtonContact = Pointer;
  142.   PNewtonMaterial = Pointer;
  143.   PNewtonCollision = Pointer;
  144.   PNewtonRagDoll = Pointer;
  145.   PNewtonRagDollBone = Pointer;
  146. {$ENDIF}
  147.   PNewtonUserMeshCollisionCollideDesc = ^NewtonUserMeshCollisionCollideDesc;
  148.   NewtonUserMeshCollisionCollideDesc = record
  149.     m_boxP0               : array[ 0..3 ] of float;
  150.     m_boxP1               : array[ 0..3 ] of float;
  151.     m_userData            : Pointer;
  152.     m_faceCount           : int;
  153.     m_vertex              : ^float;
  154.     m_vertexStrideInBytes : int;
  155.     m_userAttribute       : ^int;
  156.     m_faceIndexCount      : ^int;
  157.     m_faceVertexIndex     : ^int;
  158.     m_objBody             : PNewtonBody;
  159.     m_polySoupBody        : PNewtonBody;
  160.   end;
  161.   PNewtonUserMeshCollisionRayHitDesc = ^NewtonUserMeshCollisionRayHitDesc;
  162.   NewtonUserMeshCollisionRayHitDesc = record
  163.     m_p0        : array[ 0..3 ] of float;
  164.     m_p1        : array[ 0..3 ] of float;
  165.     m_normalOut : array[ 0..3 ] of float;
  166.     m_userId    : int;
  167.     m_thickness : float;
  168.     m_userData  : Pointer;
  169.   end;
  170.   PNewtonHingeSliderUpdateDesc = ^NewtonHingeSliderUpdateDesc;
  171.   NewtonHingeSliderUpdateDesc = record
  172.     m_accel       : float;
  173.     m_minFriction : float;
  174.     m_maxFriction : float;
  175.     m_timestep    : float;
  176.   end;
  177. // *****************************************************************************************************************************
  178. //
  179. //  Callbacks
  180. //
  181. // *****************************************************************************************************************************
  182. NewtonAllocMemory = function( sizeInBytes : int ) : Pointer; cdecl;
  183. PNewtonAllocMemory = ^NewtonAllocMemory;
  184. NewtonFreeMemory = procedure( ptr : Pointer; sizeInBytes : int ); cdecl;
  185. PNewtonFreeMemory = ^NewtonFreeMemory;
  186. NewtonSerialize = procedure( serializeHandle : Pointer; const buffer : Pointer; size : size_t ); cdecl;
  187. PNewtonSerialize = ^NewtonSerialize;
  188. NewtonDeserialize = procedure( serializeHandle : Pointer; buffer : Pointer; size : size_t ); cdecl;
  189. PNewtonDeserialize = ^NewtonDeserialize;
  190. NewtonUserMeshCollisionCollideCallback = procedure( NewtonUserMeshCollisionCollideDesc : PNewtonUserMeshCollisionCollideDesc ); cdecl;
  191. PNewtonUserMeshCollisionCollideCallback = ^NewtonUserMeshCollisionCollideCallback;
  192. NewtonUserMeshCollisionRayHitCallback = function( NewtonUserMeshCollisionRayHitDesc : PNewtonUserMeshCollisionRayHitDesc ) : int; cdecl;
  193. PNewtonUserMeshCollisionRayHitCallback = ^NewtonUserMeshCollisionRayHitCallback;
  194. NewtonUserMeshCollisionDestroyCallback = procedure( descData : Pointer ); cdecl;
  195. PNewtonUserMeshCollisionDestroyCallback = ^NewtonUserMeshCollisionDestroyCallback;
  196. NewtonTreeCollisionCallback = procedure( const bodyWithTreeCollision : PNewtonBody; const body : PNewtonBody;
  197.                                          const vertex : PFloat; vertexstrideInBytes : int;
  198.                                          indexCount : int; const indexArray : PInt ); cdecl;
  199. PNewtonTreeCollisionCallback = ^NewtonTreeCollisionCallback;
  200. NewtonBodyDestructor = procedure( const body : PNewtonBody ); cdecl;
  201. PNewtonBodyDestructor = ^NewtonBodyDestructor;
  202. NewtonApplyForceAndTorque = procedure( const body : PNewtonBody ); cdecl;
  203. PNewtonApplyForceAndTorque = ^NewtonApplyForceAndTorque;
  204. NewtonBodyActivationState = procedure( const body : PNewtonBody; state : unsigned_int ); cdecl;
  205. PNewtonBodyActivationState = ^NewtonBodyActivationState;
  206. NewtonSetTransform = procedure( const body : PNewtonBody; const matrix : PFloat ); cdecl;
  207. PNewtonSetTransform = ^NewtonSetTransform;
  208. NewtonSetRagDollTransform = procedure( const bone : PNewtonRagDollBone ); cdecl;
  209. PNewtonSetRagDollTransform = ^NewtonSetRagDollTransform;
  210. NewtonGetBuoyancyPlane = function(const collisionID : Int; context : Pointer; const globalSpaceMatrix : PFloat; globalSpacePlane : PFloat ) : Int; cdecl;
  211. PNewtonGetBuoyancyPlane = ^NewtonGetBuoyancyPlane;
  212. NewtonVehicleTireUpdate = procedure( const vehicle: PNewtonJoint ); cdecl;
  213. PNewtonVehicleTireUpdate = ^NewtonVehicleTireUpdate;
  214. NewtonWorldRayPrefilterCallback = function (const body : PNewtonBody; const collision : PNewtonCollision) : cardinal; cdecl;
  215. PNewtonWorldRayPrefilterCallback = ^NewtonWorldRayPrefilterCallback;
  216. NewtonWorldRayFilterCallback = function( const body : PNewtonBody; const hitNormal: PFloat; collisionID : Int; userData: Pointer; intersetParam: Float ) : Float; cdecl;
  217. PNewtonWorldRayFilterCallback = ^NewtonWorldRayFilterCallback;
  218. NewtonBodyLeaveWorld = procedure( const body : PNewtonBody ); cdecl;
  219. PNewtonBodyLeaveWorld = ^NewtonBodyLeaveWorld;
  220. NewtonContactBegin = function( const material : PNewtonMaterial; const body0 : PNewtonBody; const body1 : PNewtonBody ) : int; cdecl;
  221. PNewtonContactBegin = ^NewtonContactBegin;
  222. NewtonContactProcess = function( const material : PNewtonMaterial; const contact : PNewtonContact ) : int; cdecl;
  223. PNewtonContactProcess = ^NewtonContactProcess;
  224. NewtonContactEnd = procedure( const material : PNewtonMaterial ); cdecl;
  225. PNewtonContactEnd = ^NewtonContactEnd;
  226. NewtonBodyIterator = procedure( const body : PNewtonBody ); cdecl;
  227. PNewtonBodyIterator = ^NewtonBodyIterator;
  228. NewtonCollisionIterator = procedure( const body : PNewtonBody; vertexCount : int; const FaceArray : PFloat; faceId : int ); cdecl;
  229. PNewtonCollisionIterator = ^NewtonCollisionIterator;
  230. NewtonBallCallBack = procedure( const ball : PNewtonJoint ); cdecl;
  231. PNewtonBallCallBack = ^NewtonBallCallBack;
  232. NewtonHingeCallBack = function( const hinge : PNewtonJoint; desc : PNewtonHingeSliderUpdateDesc ) : Unsigned_int; cdecl;
  233. PNewtonHingeCallBack = ^NewtonHingeCallBack;
  234. NewtonSliderCallBack = function( const slider : PNewtonJoint; desc : PNewtonHingeSliderUpdateDesc ) : Unsigned_int; cdecl;
  235. PNewtonSliderCallBack = ^NewtonSliderCallBack;
  236. NewtonUniversalCallBack = function( const universal : PNewtonJoint; desc : PNewtonHingeSliderUpdateDesc ) : Unsigned_int; cdecl;
  237. PNewtonUniversalCallBack = ^NewtonUniversalCallBack;
  238. NewtonCorkscrewCallBack = function( const corkscrew : PNewtonJoint; desc : PNewtonHingeSliderUpdateDesc ) : Unsigned_int; cdecl;
  239. PNewtonCorkscrewCallBack = ^NewtonCorkscrewCallBack;
  240. NewtonUserBilateralCallBack = function( const userJoint: PNewtonJoint): unsigned_int; cdecl;
  241. PNewtonUserBilateralCallBack = ^NewtonUserBilateralCallBack;
  242. NewtonConstraintDestructor = procedure( const me : PNewtonJoint ); cdecl;
  243. PNewtonConstraintDestructor = ^NewtonConstraintDestructor;
  244. // *****************************************************************************************************************************
  245. //
  246. // world control functions
  247. //
  248. // *****************************************************************************************************************************
  249. function  NewtonCreate( malloc : NewtonAllocMemory; mfree : NewtonFreeMemory ) : PNewtonWorld; cdecl; external{$IFDEF __GPC__}name 'NewtonCreate'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  250. procedure NewtonDestroy( const newtonWorld : PNewtonWorld ); cdecl; external{$IFDEF __GPC__}name 'NewtonDestroy'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  251. procedure NewtonDestroyAllBodies( const newtonWorld : PNewtonWorld ); cdecl; external{$IFDEF __GPC__}name 'NewtonDestroyAllBodies'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  252. procedure NewtonUpdate( const newtonWorld : PNewtonWorld; timestep : float ); cdecl; external{$IFDEF __GPC__}name 'NewtonUpdate'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  253. procedure NewtonSetPlatformArchitecture (const newtonWorld : PNewtonWorld; mode : Integer); cdecl; external{$IFDEF __GPC__}name 'NewtonSetPlatformArchitecture'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  254. procedure NewtonSetSolverModel(const NewtonWorld : PNewtonWorld; Model : Int); cdecl; external{$IFDEF __GPC__}name 'NewtonSetSolverModel'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  255. procedure NewtonSetFrictionModel(const NewtonWorld : PNewtonWorld; Model : Int); cdecl; external{$IFDEF __GPC__}name 'NewtonSetFrictionModel'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  256. function  NewtonGetTimeStep(const NewtonWorld : PNewtonWorld) :Float; cdecl; external{$IFDEF __GPC__}name 'NewtonGetTimeStep'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  257. procedure NewtonSetMinimumFrameRate( const newtonWorld : PNewtonWorld; frameRate : float ); cdecl; external{$IFDEF __GPC__}name 'NewtonSetMinimumFrameRate'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  258. procedure NewtonSetBodyLeaveWorldEvent( const newtonWorld : PNewtonWorld; callback : PNewtonBodyLeaveWorld ); cdecl; external{$IFDEF __GPC__}name 'NewtonSetBodyLeaveWorldEvent'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  259. procedure NewtonSetWorldSize( const newtonWorld : PNewtonWorld; const minPoint : PFloat; const maxPoint : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonSetWorldSize'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  260. procedure NewtonWorldFreezeBody( const newtonWorld : PNewtonWorld; const body : PNewtonBody ); cdecl; external{$IFDEF __GPC__}name 'NewtonWorldFreezeBody'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  261. procedure NewtonWorldUnfreezeBody( const newtonWorld : PNewtonWorld; const body : PNewtonBody ); cdecl; external{$IFDEF __GPC__}name 'NewtonWorldUnfreezeBody'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  262. procedure NewtonWorldForEachBodyDo( const newtonWorld : PNewtonWorld; callback : PNewtonBodyIterator ); cdecl; external{$IFDEF __GPC__}name 'NewtonWorldForEachBodyDo'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  263. procedure NewtonWorldForEachBodyInAABBDo (const newtonWorld : PNewtonWorld; const p0 : PFloat; const p1 : PFloat; callback : PNewtonBodyIterator); cdecl; external{$IFDEF __GPC__}name 'NewtonWorldForEachBodyInAABBDo'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  264. procedure NewtonWorldSetUserData( const newtonWorld : PNewtonWorld; userData : Pointer); cdecl; external{$IFDEF __GPC__}name 'NewtonWorldSetUserData'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  265. function  NewtonWorldGetUserData( const newtonWorld : PNewtonWorld) : Pointer; cdecl; external{$IFDEF __GPC__}name 'NewtonWorldGetUserData'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  266. function  NewtonWorldGetVersion( const newtonWorld : PNewtonWorld) : int; cdecl; external{$IFDEF __GPC__}name 'NewtonWorldGetVersion'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  267. procedure NewtonWorldRayCast( const newtonWorld : PNewtonWorld; const p0 : PFloat; const p1 : PFloat;
  268.                               filter : PNewtonWorldRayFilterCallback; userData: Pointer;
  269.                               prefilter : NewtonWorldRayPrefilterCallback); cdecl; external{$IFDEF __GPC__}name 'NewtonWorldRayCast'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  270. // *****************************************************************************************************************************
  271. //
  272. //  Physics Material Section
  273. //
  274. // *****************************************************************************************************************************
  275. function  NewtonMaterialGetDefaultGroupID( const newtonWorld : PNewtonWorld ) : int; cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialGetDefaultGroupID'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  276. function  NewtonMaterialCreateGroupID( const newtonWorld : PNewtonWorld ) : int; cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialCreateGroupID'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  277. procedure NewtonMaterialDestroyAllGroupID( const newtonWorld : PNewtonWorld ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialDestroyAllGroupID'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  278. procedure NewtonMaterialSetDefaultSoftness( const newtonWorld : PNewtonWorld; id0 : int; id1 : int; value : float ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetDefaultSoftness'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  279. procedure NewtonMaterialSetDefaultElasticity( const newtonWorld : PNewtonWorld; id0 : int; id1 : int; elasticCoef : float ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetDefaultElasticity'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  280. procedure NewtonMaterialSetDefaultCollidable( const newtonWorld : PNewtonWorld; id0 : int; id1 : int; state : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetDefaultCollidable'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  281. procedure NewtonMaterialSetContinuousCollisionMode (const newtonWorld : PNewtonWOrld; id0, id1, state : int);  cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetContinuousCollisionMode'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  282. procedure NewtonMaterialSetDefaultFriction( const newtonWorld : PNewtonWorld; id0 : int; id1 : int; staticFriction : float; kineticFriction : float ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetDefaultFriction'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  283. procedure NewtonMaterialSetCollisionCallback( const newtonWorld : PNewtonWorld; id0 : int; id1 : int; userData : Pointer; _begin : PNewtonContactBegin; process : PNewtonContactProcess; _end : PNewtonContactEnd ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetCollisionCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  284. function  NewtonMaterialGetUserData( const NewtonWorld: PNewtonWorld; id0: int; id1: int): Pointer; cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialGetUserData'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  285. // *****************************************************************************************************************************
  286. //
  287. // Physics Contact control functions
  288. //
  289. // *****************************************************************************************************************************
  290. procedure NewtonMaterialDisableContact( const material : PNewtonMaterial ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialDisableContact'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  291. function  NewtonMaterialGetCurrentTimestep( const material : PNewtonMaterial) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialGetCurrentTimestep'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  292. function  NewtonMaterialGetMaterialPairUserData( const material : PNewtonMaterial) : Pointer; cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialGetMaterialPairUserData'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  293. function  NewtonMaterialGetContactFaceAttribute( const material : PNewtonMaterial) : Unsigned_int; cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialGetContactFaceAttribute'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  294. function  NewtonMaterialGetBodyCollisionID( const material : PNewtonMaterial; body : PNewtonBody) : Unsigned_int; cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialGetBodyCollisionID'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  295. function  NewtonMaterialGetContactNormalSpeed( const material : PNewtonMaterial; const contactlHandle : PNewtonContact ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialGetContactNormalSpeed'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  296. procedure NewtonMaterialGetContactForce( const material : PNewtonMaterial; force : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialGetContactForce'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  297. procedure NewtonMaterialGetContactPositionAndNormal( const material : PNewtonMaterial; posit : PFloat; normal : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialGetContactPositionAndNormal'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  298. procedure NewtonMaterialGetContactTangentDirections( const material : PNewtonMaterial; dir0 : PFloat; dir : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialGetContactTangentDirections'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  299. function  NewtonMaterialGetContactTangentSpeed( const material : PNewtonMaterial; const contactlHandle : PNewtonContact; index : int ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialGetContactTangentSpeed'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  300. procedure NewtonMaterialSetContactSoftness( const material : PNewtonMaterial; softness : float ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetContactSoftness'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  301. procedure NewtonMaterialSetContactElasticity( const material : PNewtonMaterial; restitution : float ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetContactElasticity'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  302. procedure NewtonMaterialSetContactFrictionState( const material : PNewtonMaterial; state : int; index : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetContactFrictionState'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  303. procedure NewtonMaterialSetContactStaticFrictionCoef( const material : PNewtonMaterial; coef : float; index : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetContactStaticFrictionCoef'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  304. procedure NewtonMaterialSetContactKineticFrictionCoef( const material : PNewtonMaterial; coef : float; index : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetContactKineticFrictionCoef'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  305. procedure NewtonMaterialSetContactNormalAcceleration (const material : PNewtonMaterial; accel : float); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetContactNormalAcceleration'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  306. procedure NewtonMaterialSetContactNormalDirection(const material : PNewtonMaterial; directionVector : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetContactNormalDirection'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  307. procedure NewtonMaterialSetContactTangentAcceleration( const material : PNewtonMaterial; accel : float; index : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialSetContactTangentAcceleration'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  308. procedure NewtonMaterialContactRotateTangentDirections( const material : PNewtonMaterial; const directionVector : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonMaterialContactRotateTangentDirections'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  309. // *****************************************************************************************************************************
  310. //
  311. // convex collision primitives creation functions
  312. //
  313. // *****************************************************************************************************************************
  314. function  NewtonCreateNull( const newtonWorld : PNewtonWorld) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateNull'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  315. function  NewtonCreateSphere( const newtonWorld : PNewtonWorld; radiusX, radiusY, radiusZ : float; const offsetMatrix : PFloat ) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateSphere'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  316. function  NewtonCreateBox( const newtonWorld : PNewtonWorld; dx : float; dy : float; dz : float; const offsetMatrix : PFloat ) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateBox'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  317. function  NewtonCreateCone( const newtonWorld : PNewtonWorld; radius : Float; height : Float; const offsetMatrix : PFloat) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateCone'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  318. function  NewtonCreateCapsule( const newtonWorld : PNewtonWorld; radius : Float; height : Float; const offsetMatrix : PFloat) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateCapsule'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  319. function  NewtonCreateCylinder( const newtonWorld : PNewtonWorld; radius : Float; height : Float; const offsetMatrix : PFloat) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateCylinder'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  320. function  NewtonCreateChamferCylinder( const newtonWorld : PNewtonWorld; raduis : Float; height : Float; const offsetMatrix : PFloat) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateChamferCylinder'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  321. function  NewtonCreateConvexHull( const newtonWorld : PNewtonWorld; count : int; const vertexCloud : PFloat; strideInBytes : int; const offsetMatrix : PFloat) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateConvexHull'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  322. function  NewtonCreateConvexHullModifier( const newtonWorld : PNewtonWorld; const convexHullCollision : PNewtonCollision): PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NEwtonCreateConvexHullModifier'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  323. procedure NewtonConvexHullModifierGetMatrix(const convexHullCollision : PNewtonCollision; matrix : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonConvexHullModifierGetMatrix'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  324. procedure NewtonConvexHullModifierSetMatrix(const convexHullCollision : PNewtonCollision; const matrix : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonConvexHullModifierSetMatrix'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  325. procedure NewtonConvexCollisionSetUserID( const convexCollision : PNewtonCollision; id : unsigned_int ); cdecl; external{$IFDEF __GPC__}name 'NewtonConvexCollisionSetUserID'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  326. function  NewtonConvexCollisionGetUserID( const convexCollision : PNewtonCollision) : unsigned_int; cdecl; external{$IFDEF __GPC__}name 'NewtonConvexCollisionGetUserID'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  327. function  NewtonConvexCollisionCalculateVolume(const convexCollision : PNewtonCollision) : Float;  cdecl; external{$IFDEF __GPC__}name 'NewtonConvexCollisionCalculateVolume'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  328. procedure NewtonConvexCollisionCalculateInertialMatrix (const convexCollision : PNewtonCollision; inertia, origin : PFloat);  cdecl; external{$IFDEF __GPC__}name 'NewtonConvexCollisionCalculateInertialMatrix'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  329. procedure NewtonCollisionMakeUnique (const newtonWorld : PNewtonWorld; const collision : PNewtonCollision); cdecl; external{$IFDEF __GPC__}name 'NewtonCollisionMakeUnique'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  330. procedure NewtonReleaseCollision( const newtonWorld : PNewtonWorld; const collision : PNewtonCollision ); cdecl; external{$IFDEF __GPC__}name 'NewtonReleaseCollision'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  331. // *****************************************************************************************************************************
  332. //
  333. // complex collision primitives creation functions
  334. // note: can only be used with static bodies (bodies with infinite mass)
  335. //
  336. // *****************************************************************************************************************************
  337. type
  338.   TCollisionPrimitiveArray = array of PNewtonCollision;
  339. function NewtonCreateCompoundCollision( const newtonWorld : PNewtonWorld; count : int;
  340.                                         const collisionPrimitiveArray : TcollisionPrimitiveArray ) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateCompoundCollision'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  341. function NewtonCreateUserMeshCollision( const newtonWorld : PNewtonWorld; const minBox : PFloat;
  342.                                         const maxBox : PFloat; userData : Pointer; collideCallback : NewtonUserMeshCollisionCollideCallback;
  343.                                         rayHitCallback : NewtonUserMeshCollisionRayHitCallback; destroyCallback : NewtonUserMeshCollisionDestroyCallback ) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateUserMeshCollision'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  344. // *****************************************************************************************************************************
  345. //
  346. // CollisionTree Utility functions
  347. //
  348. // *****************************************************************************************************************************
  349. function  NewtonCreateTreeCollision( const newtonWorld : PNewtonWorld; userCallback : NewtonTreeCollisionCallback ) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateTreeCollision'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  350. procedure NewtonTreeCollisionBeginBuild( const treeCollision : PNewtonCollision ); cdecl; external{$IFDEF __GPC__}name 'NewtonTreeCollisionBeginBuild'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  351. procedure NewtonTreeCollisionAddFace( const treeCollision : PNewtonCollision; vertexCount : int; const vertexPtr : PFloat;
  352.                                       strideInBytes : int; faceAttribute : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonTreeCollisionAddFace'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  353. procedure NewtonTreeCollisionEndBuild( const treeCollision : PNewtonCollision; optimize : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonTreeCollisionEndBuild'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  354. procedure NewtonTreeCollisionSerialize( const treeCollision : PNewtonCollision; serializeFunction : NewtonSerialize;
  355.                                         serializeHandle : Pointer ); cdecl; external{$IFDEF __GPC__}name 'NewtonTreeCollisionSerialize'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  356. function  NewtonCreateTreeCollisionFromSerialization( const newtonWorld : PNewtonWorld;
  357.                                                       userCallback : NewtonTreeCollisionCallback; deserializeFunction : NewtonDeserialize; serializeHandle : Pointer ) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateTreeCollisionFromSerialization'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  358. function  NewtonTreeCollisionGetFaceAtribute( const treeCollision : PNewtonCollision; const faceIndexArray : Pint ) : int; cdecl; external{$IFDEF __GPC__}name 'NewtonTreeCollisionGetFaceAtribute'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  359. procedure NewtonTreeCollisionSetFaceAtribute( const treeCollision : PNewtonCollision; const faceIndexArray : Pint;
  360.                                               attribute : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonTreeCollisionSetFaceAtribute'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  361. // *****************************************************************************************************************************
  362. //
  363. // General purpose collision library functions
  364. //
  365. // *****************************************************************************************************************************
  366. function  NewtonCollisionPointDistance (const newtonWorld : PNewtonWorld; const point : PFloat;
  367.                                     const collision : PNewtonCollision; const matrix : PFloat; contact : PFloat; normal : PFloat) : Int;
  368.                                         cdecl; external{$IFDEF __GPC__}name 'NewtonCollisionPointDistance'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  369. function  NewtonCollisionClosestPoint (const newtonWorld : PNewtonWorld; const collsionA : PNewtonCollision;
  370.                                        const matrixA : PFloat; const collisionB : PNewtonCollision; const matrixB : PFloat;
  371.                                    contactA, contactB, normalAB : PFloat) : Int;
  372.                                        cdecl; external{$IFDEF __GPC__}name 'NewtonCollisionClosestPoint'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  373. function  NewtonCollisionCollide (const newtonWorld : PNewtonWorld; maxSize : Int; const collsionA : PNewtonCollision;
  374.                                   const matrixA : PFloat; const collisionB : PNewtonCollision; const matrixB : PFloat;
  375.                                   contacts, normals, penetration : PFloat) : Int;
  376.                                   cdecl; external{$IFDEF __GPC__}name 'NewtonCollisionCollide'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  377. function NewtonCollisionCollideContinue (const newtonWorld : PNewtonWorld; maxSize : Int; const timestep : Float;
  378.                                      const collsionA : PNewtonCollision; const matrixA : PFloat; const velocA : PFloat; const omegaA : Float;
  379.                                      const collsionB : PNewtonCollision; const matrixB : PFloat; const velocB : PFloat; const omegaB : Float;
  380.                                      timeOfImpact : PFloat; contacts : PFloat; normals : PFloat; penetration : PFloat) : Int;
  381.                                          cdecl; external{$IFDEF __GPC__}name 'NewtonCollisionCollideContinue'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  382. function  NewtonCollisionRayCast(const collision : PNewtonCollision; const p0: PFloat; const p1: PFloat; normals: PFloat; attribute: pint): float; cdecl; external{$IFDEF __GPC__}name 'NewtonCollisionRayCast'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  383. procedure NewtonCollisionCalculateAABB( const collision : PNewtonCollision; const matrix : PFloat; p0 : PFloat; p1 : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonCollisionCalculateAABB'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  384. // *****************************************************************************************************************************
  385. //
  386. // transforms utility functions
  387. //
  388. // *****************************************************************************************************************************
  389. procedure NewtonGetEulerAngle( const matrix : PFloat; eulersAngles : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonGetEulerAngle'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  390. procedure NewtonSetEulerAngle( const eulersAngles : PFloat; matrix : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonSetEulerAngle'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  391. // *****************************************************************************************************************************
  392. //
  393. // body manipulation functions
  394. //
  395. // *****************************************************************************************************************************
  396. function  NewtonCreateBody( const newtonWorld : PNewtonWorld; const collision : PNewtonCollision ) : PNewtonBody; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateBody'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  397. procedure NewtonDestroyBody( const newtonWorld : PNewtonWorld; const body : PNewtonBody ); cdecl; external{$IFDEF __GPC__}name 'NewtonDestroyBody'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  398. procedure NewtonBodyAddForce( const body : PNewtonBody; const force : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyAddForce'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  399. procedure NewtonBodyAddTorque( const body : PNewtonBody; const torque : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyAddTorque'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  400. procedure NewtonBodySetMatrix( const body : PNewtonBody; const matrix : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetMatrix'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  401. procedure NewtonBodySetMatrixRecursive( const body : PNewtonBody; const matrix : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetMatrixRecursive'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  402. procedure NewtonBodySetMassMatrix( const body : PNewtonBody; mass : float; Ixx : float; Iyy : float; Izz : float ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetMassMatrix'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  403. procedure NewtonBodySetMaterialGroupID( const body : PNewtonBody; id : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetMaterialGroupID'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  404. procedure NewtonBodySetContinuousCollisionMode(const body : PNewtonbody; state : unsigned_int); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetContinuousCollisionMode'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  405. procedure NewtonBodySetJointRecursiveCollision( const body : PNewtonBody; state : unsigned_int ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetJointRecursiveCollision'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  406. procedure NewtonBodySetOmega( const body : PNewtonBody; const omega : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetOmega'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  407. procedure NewtonBodySetVelocity( const body : PNewtonBody; const velocity : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetVelocity'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  408. procedure NewtonBodySetForce( const body : PNewtonBody; const force : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetForce'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  409. procedure NewtonBodySetTorque( const body : PNewtonBody; const torque : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetTorque'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  410. procedure NewtonBodySetCentreOfMass(const body : PNewtonBody; const com : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetCentreOfMass'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  411. procedure NewtonBodySetLinearDamping( const body : PNewtonBody; linearDamp : float ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetLinearDamping'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  412. procedure NewtonBodySetAngularDamping( const body : PNewtonBody; const angularDamp : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetAngularDamping'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  413. procedure NewtonBodySetUserData( const body : PNewtonBody; userData : Pointer ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetUserData'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  414. procedure NewtonBodyCoriolisForcesMode( const body : PNewtonBody; mode : int); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyCoriolisForcesMode'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  415. procedure NewtonBodySetCollision( const body : PNewtonBody; const collision : PNewtonCollision ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetCollision'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  416. procedure NewtonBodySetAutoFreeze( const body : PNewtonBody; state : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetAutoFreeze'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  417. procedure NewtonBodySetFreezeTreshold( const body : PNewtonBody; freezeSpeed2 : float; freezeOmega2 : float; framesCount : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetFreezeTreshold'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  418. procedure NewtonBodySetTransformCallback( const body : PNewtonBody; callback : NewtonSetTransform ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetTransformCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  419. procedure NewtonBodySetDestructorCallback( const body : PNewtonBody; callback : NewtonBodyDestructor ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetDestructorCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  420. procedure NewtonBodySetAutoactiveCallback( const body : PNewtonBody; callback : NewtonBodyActivationState ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetAutoactiveCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  421. procedure NewtonBodySetForceAndTorqueCallback( const body : PNewtonBody; callback : NewtonApplyForceAndTorque ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodySetForceAndTorqueCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  422. function NewtonBodyGetForceAndTorqueCallback( const body : PNewtonBody ): NewtonApplyForceAndTorque; cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetForceAndTorqueCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  423. function  NewtonBodyGetWorld( const body : PNewtonBody) : PNewtonWorld; cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetWorld'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  424. function  NewtonBodyGetUserData( const body : PNewtonBody ) : Pointer; cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetUserData'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  425. function  NewtonBodyGetCollision( const body : PNewtonBody ) : PNewtonCollision; cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetCollision'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  426. function  NewtonBodyGetMaterialGroupID( const body : PNewtonBody ) : Int; cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetMaterialGroupID'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  427. function  NewtonBodyGetContinuousCollisionMode( const body : PNewtonBody ) : Int; cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetContinuousCollisionMode'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  428. function  NewtonBodyGetJointRecursiveCollision( const body : PNewtonBody ) : Int; cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetJointRecursiveCollision'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  429. procedure NewtonBodyGetMatrix( const body : PNewtonBody; matrix : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetMatrix'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  430. procedure NewtonBodyGetMassMatrix( const body : PNewtonBody; mass : PFloat; Ixx : PFloat; Iyy : PFloat; Izz : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetMassMatrix'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  431. procedure NewtonBodyGetInvMass( const body : PNewtonBody; invMass : PFloat; invIxx : PFloat; invIyy : PFloat; invIzz : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetInvMass'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  432. procedure NewtonBodyGetOmega( const body : PNewtonBody; vector : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetOmega'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  433. procedure NewtonBodyGetVelocity( const body : PNewtonBody; vector : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetVelocity'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  434. procedure NewtonBodyGetForce( const body : PNewtonBody; vector : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetForce'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  435. procedure NewtonBodyGetTorque( const body : PNewtonBody; vector : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetTorque'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  436. procedure NewtonBodyGetCentreOfMass(const body : PNewtonBody; com : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetCentreOfMass'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  437. function  NewtonBodyGetSleepingState( const body : PNewtonBody) : Int; cdecl; external{$IFDEF __GPC__}name 'NEwtonBodyGetSleepingState'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  438. function  NewtonBodyGetAutoFreeze( const body : PNewtonBody ) : Int; cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetAutoFreeze'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  439. function  NewtonBodyGetLinearDamping( const body : PNewtonBody ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetLinearDamping'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  440. procedure NewtonBodyGetAngularDamping( const body : PNewtonBody; vector : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetAngularDamping'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  441. procedure NewtonBodyGetAABB( const body : PNewtonBody; p0 : PFloat; p1 : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetAABB'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  442. procedure NewtonBodyGetFreezeTreshold( const body : PNewtonBody; freezeSpeed2 : PFloat; freezeOmega2 : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyGetFreezeTreshold'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  443. procedure NewtonBodyAddBuoyancyForce( const body : PNewtonBody; fluidDensity : float; fluidLinearViscosity : float; fluidAngularViscosity : float;
  444.                                       const gravityVector : PFloat; buoyancyPlane : NewtonGetBuoyancyPlane; context : Pointer ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyAddBuoyancyForce'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  445. procedure NewtonBodyForEachPolygonDo( const body : PNewtonBody; callback : NewtonCollisionIterator ); cdecl; external{$IFDEF __GPC__}name 'NewtonBodyForEachPolygonDo'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  446. procedure NewtonAddBodyImpulse(const body : PNewtonBody; const pointDeltaVeloc : PFloat; const pointPosit : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonAddBodyImpulse'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  447. // *****************************************************************************************************************************
  448. //
  449. // Common joint funtions
  450. //
  451. // *****************************************************************************************************************************
  452. function  NewtonJointGetUserData( const joint : PNewtonJoint ) : Pointer; cdecl; external{$IFDEF __GPC__}name 'NewtonJointGetUserData'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  453. procedure NewtonJointSetUserData( const joint : PNewtonJoint; userData : Pointer ); cdecl; external{$IFDEF __GPC__}name 'NewtonJointSetUserData'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  454. function  NewtonJointGetCollisionState( const joint : PNewtonJoint ) : int; cdecl; external{$IFDEF __GPC__}name 'NewtonJointGetCollisionState'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  455. procedure NewtonJointSetCollisionState( const joint : PNewtonJoint; state : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonJointSetCollisionState'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  456. function  NewtonJointGetStiffness( const joint : PNewtonJoint): float; cdecl; external{$IFDEF __GPC__}name 'NewtonJointGetStiffness'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  457. procedure NewtonJointSetStiffness( const joint: PNewtonJoint; state: float); cdecl; external{$IFDEF __GPC__}name 'NewtonJointSetStiffness'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  458. procedure NewtonDestroyJoint( const newtonWorld : PNewtonWorld; const joint : PNewtonJoint ); cdecl; external{$IFDEF __GPC__}name 'NewtonDestroyJoint'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  459. procedure NewtonJointSetDestructor( const joint : PNewtonJoint; _destructor : NewtonConstraintDestructor ); cdecl; external{$IFDEF __GPC__}name 'NewtonJointSetDestructor'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  460. // *****************************************************************************************************************************
  461. //
  462. // Ball and Socket joint functions
  463. //
  464. // *****************************************************************************************************************************
  465. function  NewtonConstraintCreateBall( const newtonWorld : PNewtonWorld; const pivotPoint : PFloat;
  466.                                       const childBody : PNewtonBody; const parentBody : PNewtonBody ) : PNewtonJoint; cdecl; external{$IFDEF __GPC__}name 'NewtonConstraintCreateBall'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  467. procedure NewtonBallSetUserCallback( const ball : PNewtonJoint; callback : NewtonBallCallBack ); cdecl; external{$IFDEF __GPC__}name 'NewtonBallSetUserCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  468. procedure NewtonBallGetJointAngle( const ball : PNewtonJoint; angle : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBallGetJointAngle'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  469. procedure NewtonBallGetJointOmega( const ball : PNewtonJoint; omega : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBallGetJointOmega'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  470. procedure NewtonBallGetJointForce( const ball : PNewtonJoint; force : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonBallGetJointForce'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  471. procedure NewtonBallSetConeLimits( const ball : PNewtonJoint; const pin : PFloat; maxConeAngle : float; maxTwistAngle : float ); cdecl; external{$IFDEF __GPC__}name 'NewtonBallSetConeLimits'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  472. // *****************************************************************************************************************************
  473. //
  474. // Hinge joint functions
  475. //
  476. // *****************************************************************************************************************************
  477. function  NewtonConstraintCreateHinge( const newtonWorld : PNewtonWorld;
  478.                                        const pivotPoint : PFloat; const pinDir : PFloat;
  479.                                        const childBody : PNewtonBody; const parentBody : PNewtonBody ) : PNewtonJoint; cdecl; external{$IFDEF __GPC__}name 'NewtonConstraintCreateHinge'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  480. procedure NewtonHingeSetUserCallback( const hinge : PNewtonJoint; callback : NewtonHingeCallBack ); cdecl; external{$IFDEF __GPC__}name 'NewtonHingeSetUserCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  481. function  NewtonHingeGetJointAngle( const hinge : PNewtonJoint ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonHingeGetJointAngle'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  482. function  NewtonHingeGetJointOmega( const hinge : PNewtonJoint ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonHingeGetJointOmega'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  483. procedure NewtonHingeGetJointForce( const hinge : PNewtonJoint; force : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonHingeGetJointForce'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  484. function  NewtonHingeCalculateStopAlpha( const hinge : PNewtonJoint; const desc : PNewtonHingeSliderUpdateDesc; angle : float ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonHingeCalculateStopAlpha'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  485. // *****************************************************************************************************************************
  486. //
  487. // Slider joint functions
  488. //
  489. // *****************************************************************************************************************************
  490. function  NewtonConstraintCreateSlider( const newtonWorld : PNewtonWorld;
  491.                                         const pivotPoint : PFloat; const pinDir : PFloat;
  492.                                         const childBody : PNewtonBody; const parentBody : PNewtonBody ) : PNewtonJoint; cdecl; external{$IFDEF __GPC__}name 'NewtonConstraintCreateSlider'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  493. procedure NewtonSliderSetUserCallback( const slider : PNewtonJoint; callback : NewtonSliderCallBack ); cdecl; external{$IFDEF __GPC__}name 'NewtonSliderSetUserCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  494. function  NewtonSliderGetJointPosit( const slider : PNewtonJoint ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonSliderGetJointPosit'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  495. function  NewtonSliderGetJointVeloc( const slider : PNewtonJoint ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonSliderGetJointVeloc'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  496. procedure NewtonSliderGetJointForce( const slider : PNewtonJoint; force : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonSliderGetJointForce'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  497. function  NewtonSliderCalculateStopAccel( const slider : PNewtonJoint; const desc : PNewtonHingeSliderUpdateDesc; position : float ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonSliderCalculateStopAccel'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  498. // *****************************************************************************************************************************
  499. //
  500. // Corkscrew joint functions
  501. //
  502. // *****************************************************************************************************************************
  503. function  NewtonConstraintCreateCorkscrew( const newtonWorld : PNewtonWorld;
  504.                                            const pivotPoint : PFloat; const pinDir : PFloat;
  505.                                            const childBody : PNewtonBody; const parentBody : PNewtonBody ) : PNewtonJoint; cdecl; external{$IFDEF __GPC__}name 'NewtonConstraintCreateCorkscrew'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  506. procedure NewtonCorkscrewSetUserCallback( const corkscrew : PNewtonJoint; callback : NewtonCorkscrewCallBack ); cdecl; external{$IFDEF __GPC__}name 'NewtonCorkscrewSetUserCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  507. function  NewtonCorkscrewGetJointPosit( const corkscrew : PNewtonJoint ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonCorkscrewGetJointPosit'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  508. function  NewtonCorkscrewGetJointAngle( const corkscrew : PNewtonJoint ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonCorkscrewGetJointAngle'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  509. function  NewtonCorkscrewGetJointVeloc( const corkscrew : PNewtonJoint ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonCorkscrewGetJointVeloc'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  510. function  NewtonCorkscrewGetJointOmega( const corkscrew : PNewtonJoint ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonCorkscrewGetJointOmega'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  511. procedure NewtonCorkscrewGetJointForce( const corkscrew : PNewtonJoint; force : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonCorkscrewGetJointForce'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  512. function  NewtonCorkscrewCalculateStopAlpha( const corkscrew : PNewtonJoint; const desc : PNewtonHingeSliderUpdateDesc; angle : float ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonCorkscrewCalculateStopAlpha'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  513. function  NewtonCorkscrewCalculateStopAccel( const corkscrew : PNewtonJoint; const desc : PNewtonHingeSliderUpdateDesc; position : float ) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonCorkscrewCalculateStopAccel'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  514. // *****************************************************************************************************************************
  515. //
  516. // Universal joint functions
  517. //
  518. // *****************************************************************************************************************************
  519. function  NewtonConstraintCreateUniversal( const newtonWorld: PNewtonWorld; const pivotPoint: PFloat; const pinDir0: PFloat;
  520.                                           const pinDir1: PFloat; const childBody: PNewtonBody; const parentBody: PNewtonBody): PNewtonJoint; cdecl; external{$IFDEF __GPC__}name 'NewtonConstraintCreateUniversal'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  521. procedure NewtonUniversalSetUserCallback(const universal: PNewtonJoint; callback: NewtonUniversalCallback); cdecl; external{$IFDEF __GPC__}name 'NewtonUniversalSetUserCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  522. function  NewtonUniversalGetJointAngle0(const universal: PNewtonJoint):float; cdecl; external{$IFDEF __GPC__}name 'NewtonUniversalGetJointAngle0'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  523. function  NewtonUniversalGetJointAngle1(const universal: PNewtonJoint):float; cdecl; external{$IFDEF __GPC__}name 'NewtonUniversalGetJointAngle1'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  524. function  NewtonUniversalGetJointOmega0(const universal: PNewtonJoint):float; cdecl; external{$IFDEF __GPC__}name 'NewtonUniversalGetJointOmega0'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  525. function  NewtonUniversalGetJointOmega1(const universal: PNewtonJoint):float; cdecl; external{$IFDEF __GPC__}name 'NewtonUniversalGetJointOmega1'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  526. procedure NewtonUniversalGetJointForce(const universal: PNewtonJoint; force: PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonUniversalGetJointForce'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  527. function  NewtonUniversalCalculateStopAlpha0(const universal : PNewtonJoint; const desc: PNewtonHingeSliderUpdateDesc; angle: float): float; cdecl; external{$IFDEF __GPC__}name 'NewtonUniversalCalculateStopAlpha0'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  528. function  NewtonUniversalCalculateStopAlpha1(const universal : PNewtonJoint; const desc: PNewtonHingeSliderUpdateDesc; angle: float): float; cdecl; external{$IFDEF __GPC__}name 'NewtonUniversalCalculateStopAlpha1'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  529. // *****************************************************************************************************************************
  530. //
  531. // Up vector joint unctions
  532. //
  533. // *****************************************************************************************************************************
  534. function  NewtonConstraintCreateUpVector( const newtonWorld : PNewtonWorld; const pinDir : PFloat; const body : PNewtonBody ) : PNewtonJoint; cdecl; external{$IFDEF __GPC__}name 'NewtonConstraintCreateUpVector'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  535. procedure NewtonUpVectorGetPin( const upVector : PNewtonJoint; pin : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonUpVectorGetPin'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  536. procedure NewtonUpVectorSetPin( const upVector : PNewtonJoint; const pin : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonUpVectorSetPin'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  537. // *****************************************************************************************************************************
  538. //
  539. // User defined bilateral Joint
  540. //
  541. // *****************************************************************************************************************************
  542. function  NewtonConstraintCreateUserJoint(const NewtonWorld : PNewtonWorld; MaxDOF : Integer; Callback : PNewtonUserBilateralCallBack;
  543.                                           const ChildBody: PNewtonBody; const parentBody: PNewtonBody): PNewtonJoint;
  544.                                           cdecl; external{$IFDEF __GPC__}name 'NewtonConstraintCreateUserJoint'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  545. procedure NewtonUserJointAddLinearRow(const Joint : PNewtonJoint; const pivot0 : PFloat; const pivot1 : PFloat; const Dir : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonUserJointAddLinearRow'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  546. procedure NewtonUserJointAddAngularRow(const Joint : PNewtonJoint; RelativeAngle : Float; const Dir : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonUserJointAddAngularRow'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  547. procedure NewtonUserJointAddGeneralRow(const Joint : PNewtonJoint; const Jacobian0 : PFloat; const Jacobian1 : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonUserJointAddGeneralRow'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  548. procedure NewtonUserJointSetRowMinimumFriction(const Joint : PNewtonJoint; Friction : Float); cdecl; external{$IFDEF __GPC__}name 'NewtonUserJointSetRowMinimumFriction'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  549. procedure NewtonUserJointSetRowMaximumFriction(const Joint : PNewtonJoint; Friction : Float); cdecl; external{$IFDEF __GPC__}name 'NewtonUserJointSetRowMaximumFriction'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  550. procedure NewtonUserJointSetRowAcceleration(const Joint : PNewtonJoint; Acceleration : Float); cdecl; external{$IFDEF __GPC__}name 'NewtonUserJointSetRowAcceleration'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  551. procedure NewtonUserJointSetRowStiffness(const Joint : PNewtonJoint; Stiffness : Float); cdecl; external{$IFDEF __GPC__}name 'NewtonUserJointSetRowStiffness'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  552. procedure NewtonUserJointSetRowSpringDamperAcceleration(const joint : PNewtonJoint; springK : Float; springD : Float); cdecl; external{$IFDEF __GPC__}name 'NewtonUserJointSetRowSpringDamperAcceleration'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  553. function  NewtonUserJointGetRowForce (const Joint : PNewtonJoint; Row : Int) : Float; cdecl; external{$IFDEF __GPC__}name 'NewtonUserJointGetRowForce'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  554. // *****************************************************************************************************************************
  555. //
  556. // Ragdoll joint contatiner funtion
  557. //
  558. // *****************************************************************************************************************************
  559. function  NewtonCreateRagDoll( const newtonWorld : PNewtonWorld ) : PNewtonRagDoll; cdecl; external{$IFDEF __GPC__}name 'NewtonCreateRagDoll'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  560. procedure NewtonDestroyRagDoll( const newtonWorld : PNewtonWorld; const ragDoll : PNewtonRagDoll ); cdecl; external{$IFDEF __GPC__}name 'NewtonDestroyRagDoll'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  561. procedure NewtonRagDollBegin( const ragDoll : PNewtonRagDoll ); cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollBegin'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  562. procedure NewtonRagDollEnd( const ragDoll : PNewtonRagDoll ); cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollEnd'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  563. function  NewtonRagDollFindBone( const ragDoll : PNewtonRagDoll; id : int ) : PNewtonRagDollBone; cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollFindBone'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  564. //function  NewtonRagDollGetRootBone( const ragDoll : PNewtonRagDoll ) : PNewtonRagDollBone; cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollGetRootBone'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  565. procedure NewtonRagDollSetForceAndTorqueCallback( const ragDoll : PNewtonRagDoll; callback : NewtonApplyForceAndTorque ); cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollSetForceAndTorqueCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  566. procedure NewtonRagDollSetTransformCallback( const ragDoll : PNewtonRagDoll; callback : NewtonSetRagDollTransform ); cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollSetTransformCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  567. function  NewtonRagDollAddBone( const RagDoll : PNewtonRagDoll; const Parent : PNewtonRagDollBone; userData : Pointer; mass : Float; const matrix : PFloat;
  568.       const BoneCollision : PNewtonCollision; const Size : PFloat) : PNewtonRagDollBone; cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollAddBone'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  569. function  NewtonRagDollBoneGetUserData( const bone : PNewtonRagDollBone ) : Pointer; cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollBoneGetUserData'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  570. function  NewtonRagDollBoneGetBody( const bone : PNewtonRagDollBone ) : PNewtonBody; cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollBoneGetBody'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  571. procedure NewtonRagDollBoneSetID( const bone : PNewtonRagDollBone; id : int ); cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollBoneSetID'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  572. procedure NewtonRagDollBoneSetLimits( const bone : PNewtonRagDollBone;
  573.                                       const coneDir : PFloat; minConeAngle : float; maxConeAngle : float; maxTwistAngle : float;
  574.                                       const bilateralConeDir : PFloat; negativeBilateralConeAngle : float; positiveBilateralConeAngle : float ); cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollBoneSetLimits'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  575. procedure NewtonRagDollBoneGetLocalMatrix( const bone : PNewtonRagDollBone; matrix : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollBoneGetLocalMatrix'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  576. procedure NewtonRagDollBoneGetGlobalMatrix( const bone : PNewtonRagDollBone; matrix : PFloat ); cdecl; external{$IFDEF __GPC__}name 'NewtonRagDollBoneGetGlobalMatrix'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  577. // *****************************************************************************************************************************
  578. //
  579. // Vehicle joint functions
  580. //
  581. // *****************************************************************************************************************************
  582. function  NewtonConstraintCreateVehicle( const newtonWorld : PNewtonWorld; const upDir : PFloat; const body : PNewtonBody) : PNewtonJoint; cdecl; external{$IFDEF __GPC__}name 'NewtonConstraintCreateVehicle'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  583. procedure NewtonVehicleReset( const vehicle : PNewtonJoint); cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleReset'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  584. procedure NewtonVehicleSetTireCallback( const vehicle : PNewtonJoint; update : PNewtonVehicleTireUpdate); cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleSetTireCallback'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  585. function  NewtonVehicleAddTire( const vehicle : PNewtonJoint; const localMatrix : PFloat; const pin : PFloat; mass : Float; width : Float; radius : Float;
  586.                                 suspensionShock : Float; suspensionSpring : Float; suspensionLength : Float; userData : Pointer; collisionID : int) : Pointer; cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleAddTire'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  587. procedure NewtonVehicleRemoveTire( const vehicle : PNewtonJoint; tireID : Pointer); cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleRemoveTire'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  588. function  NewtonVehicleGetFirstTireID( const vehicle : PNewtonJoint) : Pointer; cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleGetFirstTireID'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  589. function  NewtonVehicleGetNextTireID( const vehicle : PNewtonJoint; tireId : Pointer) : Pointer; cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleGetNextTireID'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  590. function  NewtonVehicleTireIsAirBorne( const vehicle : PNewtonJoint; tireId : Pointer) : int; cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleTireIsAirBorne'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  591. function  NewtonVehicleTireLostSideGrip( const vehicle : PNewtonJoint; tireId : Pointer) : int; cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleTireLostSideGrip'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  592. function  NewtonVehicleTireLostTraction( const vehicle : PNewtonJoint; tireId : Pointer) : int;  cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleTireLostTraction'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  593. function  NewtonVehicleGetTireUserData( const vehicle : PNewtonJoint; tireId : Pointer) : Pointer; cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleGetTireUserData'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  594. function  NewtonVehicleGetTireOmega( const vehicle : PNewtonJoint; tireId : Pointer) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleGetTireOmega'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  595. function  NewtonVehicleGetTireNormalLoad( const vehicle : PNewtonJoint; tireId : Pointer) : Float; cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleGetTireNormalLoad'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  596. function  NewtonVehicleGetTireSteerAngle( const vehicle : PNewtonJoint; tireId : Pointer) : Float; cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleGetTireSteerAngle'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  597. function  NewtonVehicleGetTireLateralSpeed( const vehicle : PNewtonJoint; tireId : Pointer) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleGetTireLateralSpeed'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  598. function  NewtonVehicleGetTireLongitudinalSpeed( const vehicle : PNewtonJoint; tireId : Pointer) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleGetTireLongitudinalSpeed'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  599. procedure NewtonVehicleGetTireMatrix( const vehicle : PNewtonJoint; tireId : Pointer; matrix : PFloat); cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleGetTireMatrix'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  600. procedure NewtonVehicleSetTireTorque( const vehicle : PNewtonJoint; tireId : Pointer; torque : Float); cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleSetTireTorque'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  601. procedure NewtonVehicleSetTireSteerAngle( const vehicle : PNewtonJoint; tireId : Pointer; angle : Float); cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleSetTireSteerAngle'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  602. procedure NewtonVehicleSetTireMaxSideSleepSpeed( const vehicle : PNewtonJoint; tireId : Pointer; speed : float); cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleSetTireMaxSideSleepSpeed'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  603. procedure NewtonVehicleSetTireSideSleepCoeficient(const vehicle : PNewtonJoint; tireId : Pointer; coeficient : float); cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleSetTireSideSleepCoeficient'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  604. procedure NewtonVehicleSetTireMaxLongitudinalSlideSpeed(const vehicle : PNewtonJoint; tireId : Pointer; speed : float); cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleSetTireMaxLongitudinalSlideSpeed'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  605. procedure NewtonVehicleSetTireLongitudinalSlideCoeficient(const vehicle : PNewtonJoint; tireId : Pointer; coeficient : float); cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleSetTireLongitudinalSlideCoeficient'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  606. function  NewtonVehicleTireCalculateMaxBrakeAcceleration(const vehicle : PNewtonJoint; tireId : Pointer) : float; cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleTireCalculateMaxBrakeAcceleration'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  607. procedure NewtonVehicleTireSetBrakeAcceleration( const vehicle : PNewtonJoint; tireId : Pointer; accelaration : float; torqeLimit : float); cdecl; external{$IFDEF __GPC__}name 'NewtonVehicleTireSetBrakeAcceleration'{$ELSE}NewtonDLL{$ENDIF __GPC__};
  608. implementation
  609. end.