File: Newton.h

package info (click to toggle)
scummvm 2.9.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 450,580 kB
  • sloc: cpp: 4,299,825; asm: 28,322; python: 12,901; sh: 11,302; java: 9,289; xml: 7,895; perl: 2,639; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (1025 lines) | stat: -rw-r--r-- 63,753 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
/* Copyright (c) <2003-2011> <Julio Jerez, Newton Game Dynamics>
 *
 * This software is provided 'as-is', without any express or implied
 * warranty. In no event will the authors be held liable for any damages
 * arising from the use of this software.
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 *
 * 1. The origin of this software must not be misrepresented; you must not
 * claim that you wrote the original software. If you use this software
 * in a product, an acknowledgment in the product documentation would be
 * appreciated but is not required.
 *
 * 2. Altered source versions must be plainly marked as such, and must not be
 * misrepresented as being the original software.
 *
 * 3. This notice may not be removed or altered from any source distribution.
 */

#ifndef __NEWTON_H_INCLUDED__
#define __NEWTON_H_INCLUDED__

#include "common/scummsys.h"

#define NEWTON_MAJOR_VERSION 2
#define NEWTON_MINOR_VERSION 36

#define NEWTON_API

#ifdef __USE_DOUBLE_PRECISION__
#define dFloat double
#else
#define dFloat float
#endif

#define dFloat64 double


#ifdef __cplusplus
extern "C" {
#endif

#define NEWTON_PROFILER_WORLD_UPDATE                    0

#define NEWTON_PROFILER_COLLISION_UPDATE                1
#define NEWTON_PROFILER_COLLISION_UPDATE_BROAD_PHASE    2
#define NEWTON_PROFILER_COLLISION_UPDATE_NARROW_PHASE   3

#define NEWTON_PROFILER_DYNAMICS_UPDATE                 4
#define NEWTON_PROFILER_DYNAMICS_CONSTRAINT_GRAPH       5
#define NEWTON_PROFILER_DYNAMICS_SOLVE_CONSTRAINT_GRAPH 6

#define NEWTON_PROFILER_FORCE_CALLBACK_UPDATE           7


class NewtonMesh;
class NewtonBody;
class NewtonWorld;
class NewtonJoint;
class NewtonMaterial;
class NewtonCollision;
class NewtonSceneProxy;
class NewtonbreakableComponentMesh;

//	typedef struct NewtonRagDoll{} NewtonRagDoll;
//	typedef struct NewtonRagDollBone{} NewtonRagDollBone;

#define SERIALIZE_ID_BOX                    0
#define SERIALIZE_ID_CONE                   1
#define SERIALIZE_ID_SPHERE                 2
#define SERIALIZE_ID_CAPSULE                3
#define SERIALIZE_ID_CYLINDER               4
#define SERIALIZE_ID_COMPOUND               5
#define SERIALIZE_ID_CONVEXHULL             6
#define SERIALIZE_ID_CONVEXMODIFIER         7
#define SERIALIZE_ID_CHAMFERCYLINDER        8
#define SERIALIZE_ID_TREE                   9
#define SERIALIZE_ID_NULL                   10
#define SERIALIZE_ID_HEIGHTFIELD            11
#define SERIALIZE_ID_USERMESH               12
#define SERIALIZE_ID_SCENE                  13
#define SERIALIZE_ID_COMPOUND_BREAKABLE     14

typedef struct NewtonBoxParam NewtonBoxParam;
typedef struct NewtonConeParam NewtonConeParam;
typedef struct NewtonSphereParam NewtonSphereParam;
typedef struct NewtonCapsuleParam NewtonCapsuleParam;
typedef struct NewtonCylinderParam NewtonCylinderParam;
typedef struct NewtonConvexHullParam NewtonConvexHullParam;
typedef struct NewtonCollisionTreeParam NewtonCollisionTreeParam;
typedef struct NewtonSceneCollisionParam NewtonSceneCollisionParam;
typedef struct NewtonChamferCylinderParam NewtonChamferCylinderParam;
typedef struct NewtonCompoundCollisionParam NewtonCompoundCollisionParam;
typedef struct NewtonConvexHullModifierParam NewtonConvexHullModifierParam;
typedef struct NewtonHeightFieldCollisionParam NewtonHeightFieldCollisionParam;

typedef struct NewtonCollisionInfoRecord NewtonCollisionInfoRecord;

struct NewtonBoxParam {
	dFloat m_x;
	dFloat m_y;
	dFloat m_z;
};

struct NewtonSphereParam {
	dFloat m_r0;
	dFloat m_r1;
	dFloat m_r2;
};

struct NewtonCylinderParam {
	dFloat m_r0;
	dFloat m_r1;
	dFloat m_height;
};

struct NewtonCapsuleParam {
	dFloat m_r0;
	dFloat m_r1;
	dFloat m_height;
};

struct NewtonConeParam {
	dFloat m_r;
	dFloat m_height;
};

struct NewtonChamferCylinderParam {
	dFloat m_r;
	dFloat m_height;
};

struct NewtonConvexHullParam {
	int m_vertexCount;
	int m_vertexStrideInBytes;
	int m_faceCount;
	dFloat *m_vertex;
};

struct NewtonConvexHullModifierParam {
	NewtonCollision *m_chidren;
};


struct NewtonCompoundCollisionParam {
	int m_chidrenCount;
	NewtonCollision **m_chidren;
};

struct NewtonCollisionTreeParam {
	int m_vertexCount;
	int m_indexCount;
};

struct NewtonHeightFieldCollisionParam {
	int m_width;
	int m_height;
	int m_gridsDiagonals;
	dFloat m_horizonalScale;
	dFloat m_verticalScale;
	unsigned short *m_elevation;
	char *m_atributes;
};

struct NewtonSceneCollisionParam {
	int m_childrenProxyCount;
};

struct NewtonCollisionInfoRecord {
	dFloat m_offsetMatrix[4][4];
	int m_collisionType;              // tag id to identify the collision primitive
	int m_referenceCount;             // the current reference count for this collision
	int m_collisionUserID;

	union {
		NewtonBoxParam m_box;
		NewtonConeParam m_cone;
		NewtonSphereParam m_sphere;
		NewtonCapsuleParam m_capsule;
		NewtonCylinderParam m_cylinder;
		NewtonChamferCylinderParam m_chamferCylinder;
		NewtonConvexHullParam m_convexHull;
		NewtonCompoundCollisionParam m_compoundCollision;
		NewtonConvexHullModifierParam m_convexHullModifier;
		NewtonCollisionTreeParam m_collisionTree;
		NewtonHeightFieldCollisionParam m_heightField;
		NewtonSceneCollisionParam m_sceneCollision;
		dFloat m_paramArray[64];            // user define collision can use this to store information
	};
};


typedef struct NewtonJointRecord NewtonJointRecord;
typedef struct NewtonHingeSliderUpdateDesc NewtonHingeSliderUpdateDesc;
typedef struct NewtonUserMeshCollisionRayHitDesc NewtonUserMeshCollisionRayHitDesc;
typedef struct NewtonUserMeshCollisionCollideDesc NewtonUserMeshCollisionCollideDesc;
typedef struct NewtonWorldConvexCastReturnInfo NewtonWorldConvexCastReturnInfo;


struct NewtonJointRecord {
	dFloat m_attachmenMatrix_0[4][4];
	dFloat m_attachmenMatrix_1[4][4];
	dFloat m_minLinearDof[3];
	dFloat m_maxLinearDof[3];
	dFloat m_minAngularDof[3];
	dFloat m_maxAngularDof[3];
	const NewtonBody *m_attachBody_0;
	const NewtonBody *m_attachBody_1;
	dFloat m_extraParameters[16];
	int   m_bodiesCollisionOn;
	char m_descriptionType[32];
} ;



struct NewtonUserMeshCollisionCollideDesc {
	dFloat m_boxP0[4];                        // lower bounding box of intersection query in local space
	dFloat m_boxP1[4];                        // upper bounding box of intersection query in local space
	int m_threadNumber;                       // current thread executing this query
	int   m_faceCount;                        // the application should set here how many polygons intersect the query box
	int m_vertexStrideInBytes;              // the application should set here the size of each vertex
	void *m_userData;                       // user data passed to the collision geometry at creation time
	dFloat *m_vertex;                       // the application should the pointer to the vertex array.
	int *m_userAttribute;                   // the application should set here the pointer to the user data, one for each face
	int *m_faceIndexCount;                  // the application should set here the pointer to the vertex count of each face.
	int *m_faceVertexIndex;                 // the application should set here the pointer index array for each vertex on a face.
	NewtonBody *m_objBody;                  // pointer to the colliding body
	NewtonBody *m_polySoupBody;             // pointer to the rigid body owner of this collision tree
};

struct NewtonWorldConvexCastReturnInfo {
	dFloat m_point[4];                        // collision point in global space
	dFloat m_normal[4];                       // surface normal at collision point in global space
	dFloat m_normalOnHitPoint[4];           // surface normal at the surface of the hit body,
	// is the same as the normal calculated by a ray cast hitting the body at the hit point
	dFloat m_penetration;                   // contact penetration at collision point
	int    m_contactID;                       // collision ID at contact point
	const  NewtonBody *m_hitBody;         // body hit at contact point
};

struct NewtonUserMeshCollisionRayHitDesc {
	dFloat m_p0[4];                           // ray origin in collision local space
	dFloat m_p1[4];                         // ray destination in collision local space
	dFloat m_normalOut[4];                    // copy here the normal at the ray intersection
	int m_userIdOut;                        // copy here a user defined id for further feedback
	void *m_userData;                       // user data passed to the collision geometry at creation time
};

struct NewtonHingeSliderUpdateDesc {
	dFloat m_accel;
	dFloat m_minFriction;
	dFloat m_maxFriction;
	dFloat m_timestep;
} ;


// Newton callback functions
typedef void *(*NewtonAllocMemory)(int sizeInBytes);
typedef void (*NewtonFreeMemory)(void *const ptr, int sizeInBytes);
typedef void (*NewtonDestroyWorld)(const NewtonWorld *const newtonWorld);

typedef unsigned(*NewtonGetTicksCountCallback)();

typedef void (*NewtonSerialize)(void *const serializeHandle, const void *buffer, size_t size);
typedef void (*NewtonDeserialize)(void *const serializeHandle, void *buffer, size_t size);

// user collision callbacks
typedef void (*NewtonUserMeshCollisionDestroyCallback)(void *const userData);
typedef void (*NewtonUserMeshCollisionCollideCallback)(NewtonUserMeshCollisionCollideDesc *const collideDescData);
typedef dFloat(*NewtonUserMeshCollisionRayHitCallback)(NewtonUserMeshCollisionRayHitDesc *const lineDescData);
typedef void (*NewtonUserMeshCollisionGetCollisionInfo)(void *const userData, NewtonCollisionInfoRecord *const infoRecord);
typedef void (*NewtonUserMeshCollisionGetFacesInAABB)(void *const userData, const dFloat *const p0, const dFloat *const p1,
													  const dFloat *const *const vertexArray, int32 *const vertexCount, int32 *const vertexStrideInBytes,
													  const int32 *const indexList, int32 maxIndexCount, const int32 *const userDataList);

typedef dFloat(*NewtonCollisionTreeRayCastCallback)(const NewtonBody *const body, const NewtonCollision *const treeCollision, dFloat interception, dFloat *normal, int faceId, void *usedData);
typedef dFloat(*NewtonHeightFieldRayCastCallback)(const NewtonBody *const body, const NewtonCollision *const heightFieldCollision, dFloat interception, int row, int col, dFloat *normal, int faceId, void *usedData);


// collision tree call back (obsoleted no recommended)
typedef void (*NewtonTreeCollisionCallback)(const NewtonBody *const bodyWithTreeCollision, const NewtonBody *const body, int faceID,
        int vertexCount, const dFloat *const vertex, int vertexStrideInBytes);

typedef void (*NewtonBodyDestructor)(const NewtonBody *const body);
typedef void (*NewtonApplyForceAndTorque)(NewtonBody *const body, dFloat timestep, int32 threadIndex);
typedef void (*NewtonSetTransform)(const NewtonBody *const body, const dFloat *const matrix, int32 threadIndex);

typedef int (*NewtonIslandUpdate)(const NewtonWorld *const newtonWorld, const void *islandHandle, int bodyCount);
typedef void (*NewtonBodyLeaveWorld)(const NewtonBody *const body, int threadIndex);
typedef void (*NewtonDestroyBodyByExeciveForce)(const NewtonBody *const body, const NewtonJoint *const contact);
typedef void (*NewtonCollisionDestructor)(const NewtonWorld *const newtonWorld, const NewtonCollision *const collision);

typedef int (*NewtonCollisionCompoundBreakableCallback)(NewtonMesh *const mesh, void *const userData, dFloat *const planeMatrixOut);

typedef int (*NewtonGetBuoyancyPlane)(const int32 collisionID, void *const context, const dFloat *const globalSpaceMatrix, dFloat *const globalSpacePlane);
typedef unsigned(*NewtonWorldRayPrefilterCallback)(const NewtonBody *const body, const NewtonCollision *const collision, void *const userData);
typedef dFloat(*NewtonWorldRayFilterCallback)(const NewtonBody *const body, const dFloat *const hitNormal, int collisionID, void *const userData, dFloat intersectParam);


typedef int (*NewtonOnAABBOverlap)(const NewtonMaterial *const material, const NewtonBody *const body0, const NewtonBody *const body1, int32 threadIndex);
typedef void (*NewtonContactsProcess)(const NewtonJoint *const contact, dFloat timestep, int32 threadIndex);

typedef void (*NewtonBodyIterator)(const NewtonBody *const body, void *const userData);
typedef void (*NewtonJointIterator)(const NewtonJoint *const joint, void *const userData);
typedef void (*NewtonCollisionIterator)(void *const userData, int vertexCount, const dFloat *const faceArray, int faceId);

typedef void (*NewtonBallCallBack)(const NewtonJoint *const ball, dFloat timestep);
typedef unsigned(*NewtonHingeCallBack)(const NewtonJoint *const hinge, NewtonHingeSliderUpdateDesc *const desc);
typedef unsigned(*NewtonSliderCallBack)(const NewtonJoint *const slider, NewtonHingeSliderUpdateDesc *const desc);
typedef unsigned(*NewtonUniversalCallBack)(const NewtonJoint *const universal, NewtonHingeSliderUpdateDesc *const desc);
typedef unsigned(*NewtonCorkscrewCallBack)(const NewtonJoint *const corkscrew, NewtonHingeSliderUpdateDesc *const desc);

typedef void (*NewtonUserBilateralCallBack)(const NewtonJoint *const userJoint, dFloat timestep, int threadIndex);
typedef void (*NewtonUserBilateralGetInfoCallBack)(const NewtonJoint *const userJoint, NewtonJointRecord *const info);

typedef void (*NewtonConstraintDestructor)(const NewtonJoint *const  me);

//	typedef void (*NewtonSetRagDollTransform) (const NewtonRagDollBone* const bone);
//	typedef void (*NewtonBodyActivationState) (const NewtonBody* const body, unsigned state);
//	typedef void (*NewtonVehicleTireUpdate) (const NewtonJoint* const vehicle, dFloat timestep);


void NewtonInitGlobals();

void NewtonDestroyGlobals();

// **********************************************************************************************
//
// world control functions
//
// **********************************************************************************************
NEWTON_API int NewtonWorldGetVersion();
NEWTON_API int NewtonWorldFloatSize();

NEWTON_API int NewtonGetMemoryUsed();
NEWTON_API void NewtonSetMemorySystem(NewtonAllocMemory malloc, NewtonFreeMemory mfree);

NEWTON_API NewtonWorld *NewtonCreate();
NEWTON_API void NewtonDestroy(const NewtonWorld *const newtonWorld);
NEWTON_API void NewtonDestroyAllBodies(const NewtonWorld *const newtonWorld);

NEWTON_API void NewtonUpdate(NewtonWorld *const newtonWorld, dFloat timestep);
NEWTON_API void NewtonInvalidateCache(NewtonWorld *const newtonWorld);
NEWTON_API void NewtonCollisionUpdate(NewtonWorld *const newtonWorld);

NEWTON_API void NewtonSetSolverModel(NewtonWorld *const newtonWorld, int model);
NEWTON_API void NewtonSetPlatformArchitecture(NewtonWorld *const newtonWorld, int mode);
NEWTON_API int NewtonGetPlatformArchitecture(const NewtonWorld *const newtonWorld, char *description);
NEWTON_API void NewtonSetMultiThreadSolverOnSingleIsland(NewtonWorld *const newtonWorld, int mode);
NEWTON_API int NewtonGetMultiThreadSolverOnSingleIsland(const NewtonWorld *const newtonWorld);

NEWTON_API void NewtonSetPerformanceClock(NewtonWorld *const newtonWorld, NewtonGetTicksCountCallback callback);
NEWTON_API unsigned NewtonReadPerformanceTicks(const NewtonWorld *const newtonWorld, unsigned performanceEntry);
NEWTON_API unsigned NewtonReadThreadPerformanceTicks(const NewtonWorld *newtonWorld, unsigned threadIndex);

NEWTON_API void NewtonWorldCriticalSectionLock(NewtonWorld *const newtonWorld);
NEWTON_API void NewtonWorldCriticalSectionUnlock(NewtonWorld *const newtonWorld);
NEWTON_API void NewtonSetThreadsCount(NewtonWorld *const newtonWorld, int threads);
NEWTON_API int NewtonGetThreadsCount(const NewtonWorld *const newtonWorld);
NEWTON_API int NewtonGetMaxThreadsCount(const NewtonWorld *const newtonWorld);

NEWTON_API void NewtonSetFrictionModel(NewtonWorld *const newtonWorld, int model);
NEWTON_API void NewtonSetMinimumFrameRate(NewtonWorld *const newtonWorld, dFloat frameRate);
NEWTON_API void NewtonSetBodyLeaveWorldEvent(NewtonWorld *const newtonWorld, NewtonBodyLeaveWorld callback);
NEWTON_API void NewtonSetWorldSize(NewtonWorld *const newtonWorld, const dFloat *const minPoint, const dFloat *const maxPoint);
NEWTON_API void NewtonSetIslandUpdateEvent(NewtonWorld *const newtonWorld, NewtonIslandUpdate islandUpdate);
NEWTON_API void NewtonSetCollisionDestructor(NewtonWorld *const newtonWorld, NewtonCollisionDestructor callback);
NEWTON_API void NewtonSetDestroyBodyByExeciveForce(NewtonWorld *const newtonWorld, NewtonDestroyBodyByExeciveForce callback);


//	NEWTON_API void NewtonWorldForEachBodyDo (const NewtonWorld* const newtonWorld, NewtonBodyIterator callback);
NEWTON_API void NewtonWorldForEachJointDo(const NewtonWorld *const newtonWorld, NewtonJointIterator callback, void *const userData);
NEWTON_API void NewtonWorldForEachBodyInAABBDo(const NewtonWorld *const newtonWorld, const dFloat *const p0, const dFloat *const p1, NewtonBodyIterator callback, void *const userData);


NEWTON_API void NewtonWorldSetUserData(NewtonWorld *const newtonWorld, void *const userData);
NEWTON_API void *NewtonWorldGetUserData(const NewtonWorld *const newtonWorld);
NEWTON_API void NewtonWorldSetDestructorCallBack(NewtonWorld *const newtonWorld, NewtonDestroyWorld destructor);
NEWTON_API NewtonDestroyWorld NewtonWorldGetDestructorCallBack(const NewtonWorld *const newtonWorld);

NEWTON_API void NewtonWorldRayCast(NewtonWorld *const newtonWorld, const dFloat *const p0, const dFloat *const p1, NewtonWorldRayFilterCallback filter, void *const userData,
                                   NewtonWorldRayPrefilterCallback prefilter);
NEWTON_API int NewtonWorldConvexCast(NewtonWorld *const newtonWorld, const dFloat *const matrix, const dFloat *const target, NewtonCollision *shape, dFloat *const hitParam, void *const userData,
                                     NewtonWorldRayPrefilterCallback prefilter, NewtonWorldConvexCastReturnInfo *info, int maxContactsCount, int threadIndex);


// world utility functions
NEWTON_API int NewtonWorldGetBodyCount(const NewtonWorld *const newtonWorld);
NEWTON_API int NewtonWorldGetConstraintCount(const NewtonWorld *const newtonWorld);

// NEWTON_API int NewtonGetActiveBodiesCount();
// NEWTON_API int NewtonGetActiveConstraintsCount();
// NEWTON_API dFloat NewtonGetGlobalScale (const NewtonWorld* const newtonWorld);



// **********************************************************************************************
//
// Simulation islands
//
// **********************************************************************************************
NEWTON_API NewtonBody *NewtonIslandGetBody(const void *const island, int bodyIndex);
NEWTON_API void NewtonIslandGetBodyAABB(const void *const island, int bodyIndex, dFloat *const p0, dFloat *const p1);

// **********************************************************************************************
//
// Physics Material Section
//
// **********************************************************************************************
NEWTON_API int NewtonMaterialCreateGroupID(NewtonWorld *const newtonWorld);
NEWTON_API int NewtonMaterialGetDefaultGroupID(const NewtonWorld *const newtonWorld);
NEWTON_API void NewtonMaterialDestroyAllGroupID(NewtonWorld *const newtonWorld);

// material definitions that can not be overwritten in function callback
NEWTON_API void *NewtonMaterialGetUserData(const NewtonWorld *const newtonWorld, int id0, int id1);
NEWTON_API void NewtonMaterialSetSurfaceThickness(const NewtonWorld *const newtonWorld, int id0, int id1, dFloat thickness);
NEWTON_API void NewtonMaterialSetContinuousCollisionMode(const NewtonWorld *const newtonWorld, int id0, int id1, int state);
NEWTON_API void NewtonMaterialSetCollisionCallback(const NewtonWorld *const newtonWorld, int id0, int id1, void *const userData,
        NewtonOnAABBOverlap aabbOverlap, NewtonContactsProcess process);

NEWTON_API void NewtonMaterialSetDefaultSoftness(const NewtonWorld *const newtonWorld, int id0, int id1, dFloat value);
NEWTON_API void NewtonMaterialSetDefaultElasticity(const NewtonWorld *const newtonWorld, int id0, int id1, dFloat elasticCoef);
NEWTON_API void NewtonMaterialSetDefaultCollidable(const NewtonWorld *const newtonWorld, int id0, int id1, int state);
NEWTON_API void NewtonMaterialSetDefaultFriction(const NewtonWorld *const newtonWorld, int id0, int id1, dFloat staticFriction, dFloat kineticFriction);

NEWTON_API NewtonMaterial *NewtonWorldGetFirstMaterial(const NewtonWorld *const newtonWorld);
NEWTON_API NewtonMaterial *NewtonWorldGetNextMaterial(const NewtonWorld *const newtonWorld, NewtonMaterial *const material);

NEWTON_API NewtonBody *NewtonWorldGetFirstBody(const NewtonWorld *const newtonWorld);
NEWTON_API NewtonBody *NewtonWorldGetNextBody(const NewtonWorld *const newtonWorld, const NewtonBody *const curBody);


// **********************************************************************************************
//
// Physics Contact control functions
//
// **********************************************************************************************
NEWTON_API void *NewtonMaterialGetMaterialPairUserData(const NewtonMaterial *const material);
NEWTON_API unsigned NewtonMaterialGetContactFaceAttribute(const NewtonMaterial *const material);
NEWTON_API NewtonCollision *NewtonMaterialGetBodyCollidingShape(const NewtonMaterial *const material, const NewtonBody *const body);
//NEWTON_API unsigned NewtonMaterialGetBodyCollisionID (const NewtonMaterial* const material, const NewtonBody* const body);
NEWTON_API dFloat NewtonMaterialGetContactNormalSpeed(const NewtonMaterial *const material);
NEWTON_API void NewtonMaterialGetContactForce(const NewtonMaterial *const material, NewtonBody *const body, dFloat *const force);
NEWTON_API void NewtonMaterialGetContactPositionAndNormal(const NewtonMaterial *const material, NewtonBody *const body, dFloat *const posit, dFloat *const normal);
NEWTON_API void NewtonMaterialGetContactTangentDirections(const NewtonMaterial *const material, NewtonBody *const body, dFloat *const dir0, dFloat *const dir1);
NEWTON_API dFloat NewtonMaterialGetContactTangentSpeed(const NewtonMaterial *const material, int index);

NEWTON_API void NewtonMaterialSetContactSoftness(NewtonMaterial *const material, dFloat softness);
NEWTON_API void NewtonMaterialSetContactElasticity(NewtonMaterial *const material, dFloat restitution);
NEWTON_API void NewtonMaterialSetContactFrictionState(NewtonMaterial *const material, int state, int index);
NEWTON_API void NewtonMaterialSetContactFrictionCoef(NewtonMaterial *const material, dFloat staticFrictionCoef, dFloat kineticFrictionCoef, int index);

NEWTON_API void NewtonMaterialSetContactNormalAcceleration(NewtonMaterial *const material, dFloat accel);
NEWTON_API void NewtonMaterialSetContactNormalDirection(NewtonMaterial *const material, const dFloat *const directionVector);

NEWTON_API void NewtonMaterialSetContactTangentAcceleration(NewtonMaterial *const material, dFloat accel, int index);
NEWTON_API void NewtonMaterialContactRotateTangentDirections(NewtonMaterial *const material, const dFloat *const directionVector);



// **********************************************************************************************
//
// convex collision primitives creation functions
//
// **********************************************************************************************
NEWTON_API NewtonCollision *NewtonCreateNull(NewtonWorld *const newtonWorld);
NEWTON_API NewtonCollision *NewtonCreateSphere(NewtonWorld *const newtonWorld, dFloat radiusX, dFloat radiusY, dFloat radiusZ, int shapeID, const dFloat *const offsetMatrix);
NEWTON_API NewtonCollision *NewtonCreateBox(NewtonWorld *const newtonWorld, dFloat dx, dFloat dy, dFloat dz, int shapeID, const dFloat *const offsetMatrix);
NEWTON_API NewtonCollision *NewtonCreateCone(NewtonWorld *const newtonWorld, dFloat radius, dFloat height, int shapeID, const dFloat *const offsetMatrix);
NEWTON_API NewtonCollision *NewtonCreateCapsule(NewtonWorld *const newtonWorld, dFloat radius, dFloat height, int shapeID, const dFloat *const offsetMatrix);
NEWTON_API NewtonCollision *NewtonCreateCylinder(NewtonWorld *const newtonWorld, dFloat radius, dFloat height, int shapeID, const dFloat *const offsetMatrix);
NEWTON_API NewtonCollision *NewtonCreateChamferCylinder(NewtonWorld *const newtonWorld, dFloat radius, dFloat height, int shapeID, const dFloat *const offsetMatrix);
NEWTON_API NewtonCollision *NewtonCreateConvexHull(NewtonWorld *const newtonWorld, int count, const dFloat *const vertexCloud, int strideInBytes, dFloat tolerance, int shapeID, const dFloat *const offsetMatrix);
NEWTON_API NewtonCollision *NewtonCreateConvexHullFromMesh(const NewtonWorld *const newtonWorld, const NewtonMesh *const mesh, dFloat tolerance, int shapeID);

NEWTON_API NewtonCollision *NewtonCreateConvexHullModifier(NewtonWorld *const newtonWorld, NewtonCollision *const convexHullCollision, int shapeID);
NEWTON_API void NewtonConvexHullModifierGetMatrix(const NewtonCollision *const convexHullCollision, dFloat *const matrix);
NEWTON_API void NewtonConvexHullModifierSetMatrix(NewtonCollision *const convexHullCollision, const dFloat *const matrix);

NEWTON_API int NewtonCollisionIsTriggerVolume(const NewtonCollision *const convexCollision);
NEWTON_API void NewtonCollisionSetAsTriggerVolume(NewtonCollision *convexCollision, int trigger);

NEWTON_API void NewtonCollisionSetMaxBreakImpactImpulse(NewtonCollision *const convexHullCollision, dFloat maxImpactImpulse);
NEWTON_API dFloat NewtonCollisionGetMaxBreakImpactImpulse(const NewtonCollision *const convexHullCollision);

NEWTON_API void NewtonCollisionSetUserID(NewtonCollision *convexCollision, unsigned id);
NEWTON_API unsigned NewtonCollisionGetUserID(NewtonCollision *const convexCollision);

NEWTON_API int NewtonConvexHullGetFaceIndices(const NewtonCollision *const convexHullCollision, int face, int32 *const faceIndices);
NEWTON_API dFloat NewtonConvexCollisionCalculateVolume(const NewtonCollision *const convexCollision);
NEWTON_API void NewtonConvexCollisionCalculateInertialMatrix(const NewtonCollision *convexCollision, dFloat *const inertia, dFloat *const origin);


NEWTON_API void NewtonCollisionMakeUnique(NewtonWorld *const newtonWorld, NewtonCollision *const collision);
NEWTON_API void NewtonReleaseCollision(NewtonWorld *const newtonWorld, NewtonCollision *const collision);
NEWTON_API int NewtonAddCollisionReference(NewtonCollision *const collision);


// **********************************************************************************************
//
// mass/spring/damper collision shape
//
// **********************************************************************************************
//	NEWTON_API NewtonCollision* NewtonCreateSoftShape (const NewtonWorld* const newtonWorld);
//	NEWTON_API void NewtonSoftBodySetMassCount (const NewtonCollision* convexCollision, int count);
//	NEWTON_API void NewtonSoftBodySetSpringCount (const NewtonCollision* convexCollision, int count);

//	NEWTON_API void NewtonSoftBodySetMass (const NewtonCollision* convexCollision, int index, dFloat mass, dFloat* position);
//	NEWTON_API int NewtonSoftBodySetSpring (const NewtonCollision* convexCollision, int index, int mass0, int mass1, dFloat stiffness, dFloat damper);
//	NEWTON_API int NewtonSoftBodyGetMassArray (const NewtonCollision* convexCollision, dFloat* masses, dFloat** positions);


// **********************************************************************************************
//
// complex collision primitives creation functions
//
// **********************************************************************************************
NEWTON_API NewtonCollision *NewtonCreateCompoundCollision(NewtonWorld *const newtonWorld, int count, NewtonCollision *const collisionPrimitiveArray[], int shapeID);
NEWTON_API NewtonCollision *NewtonCreateCompoundCollisionFromMesh(NewtonWorld *const newtonWorld, const NewtonMesh *const mesh, dFloat hullTolerance, int shapeID, int subShapeID);
//NEWTON_API NewtonCollision* NewtonCreateCompoundCollisionFromMesh(const NewtonWorld* const newtonWorld, const NewtonMesh* const mesh, int maxSubShapesCount, int shapeID, int subShapeID);

// **********************************************************************************************
//
// complex breakable collision primitives interface
//
// **********************************************************************************************
//	NEWTON_API NewtonCollision* NewtonCreateCompoundBreakable (const NewtonWorld* const newtonWorld, int meshCount,
//															   NewtonMesh* const solids[], NewtonMesh* const splitePlanes[],
//															   dFloat* const matrixPallete, int32* const shapeIDArray, dFloat* const densities,
//															   int shapeID, int debriID, NewtonCollisionCompoundBreakableCallback callback, void* buildUsedData);

NEWTON_API NewtonCollision *NewtonCreateCompoundBreakable(NewtonWorld *const newtonWorld, int meshCount,
        NewtonMesh **const solids, const int32 *const shapeIDArray,
        const dFloat *const densities, const int32 *const internalFaceMaterial,
        int shapeID, int debriID, dFloat debriSeparationGap);


NEWTON_API void NewtonCompoundBreakableResetAnchoredPieces(NewtonCollision *const compoundBreakable);
NEWTON_API void NewtonCompoundBreakableSetAnchoredPieces(NewtonCollision *const compoundBreakable, int fixShapesCount, dFloat *const matrixPallete, NewtonCollision **const fixedShapesArray);

NEWTON_API int NewtonCompoundBreakableGetVertexCount(const NewtonCollision *const compoundBreakable);
NEWTON_API void NewtonCompoundBreakableGetVertexStreams(const NewtonCollision *const compoundBreakable, int vertexStrideInByte, dFloat *const vertex,
        int normalStrideInByte, dFloat *const normal,  int uvStrideInByte, dFloat *const uv);


NEWTON_API NewtonbreakableComponentMesh *NewtonBreakableGetMainMesh(const NewtonCollision *const compoundBreakable);
NEWTON_API NewtonbreakableComponentMesh *NewtonBreakableGetFirstComponent(const NewtonCollision *const compoundBreakable);
NEWTON_API const NewtonbreakableComponentMesh *NewtonBreakableGetNextComponent(const NewtonbreakableComponentMesh *const component);

NEWTON_API void NewtonBreakableBeginDelete(NewtonCollision *const compoundBreakable);
NEWTON_API NewtonBody *NewtonBreakableCreateDebrieBody(NewtonCollision *const compoundBreakable, NewtonbreakableComponentMesh *const component);
NEWTON_API void NewtonBreakableDeleteComponent(NewtonCollision *const compoundBreakable, NewtonbreakableComponentMesh *const component);
NEWTON_API void NewtonBreakableEndDelete(NewtonCollision *const compoundBreakable);


NEWTON_API int NewtonBreakableGetComponentsInRadius(const NewtonCollision *const compoundBreakable, const dFloat *position, dFloat radius, NewtonbreakableComponentMesh **const segments, int maxCount);

NEWTON_API void *NewtonBreakableGetFirstSegment(NewtonbreakableComponentMesh *const breakableComponent);
NEWTON_API void *NewtonBreakableGetNextSegment(const void *const segment);

NEWTON_API int NewtonBreakableSegmentGetMaterial(void *const segment);
NEWTON_API int NewtonBreakableSegmentGetIndexCount(void *const segment);
NEWTON_API int NewtonBreakableSegmentGetIndexStream(const NewtonCollision *const compoundBreakable, NewtonbreakableComponentMesh *const meshOwner, void *const segment, int32 *const index);
NEWTON_API int NewtonBreakableSegmentGetIndexStreamShort(const NewtonCollision *const compoundBreakable, const NewtonbreakableComponentMesh *const meshOwner, void *const segment, short int *const index);


NEWTON_API NewtonCollision *NewtonCreateUserMeshCollision(NewtonWorld *const newtonWorld, const dFloat *const minBox,
        const dFloat *const maxBox, void *const userData, NewtonUserMeshCollisionCollideCallback collideCallback,
        NewtonUserMeshCollisionRayHitCallback rayHitCallback, NewtonUserMeshCollisionDestroyCallback destroyCallback,
        NewtonUserMeshCollisionGetCollisionInfo getInfoCallback, NewtonUserMeshCollisionGetFacesInAABB facesInAABBCallback, int shapeID);


NEWTON_API NewtonCollision *NewtonCreateSceneCollision(NewtonWorld *const newtonWorld, int shapeID);
NEWTON_API NewtonSceneProxy *NewtonSceneCollisionCreateProxy(NewtonCollision *const scene, NewtonCollision *const collision, dFloat *const matrix);

NEWTON_API void NewtonSceneCollisionDestroyProxy(NewtonCollision *const scene, NewtonSceneProxy *Proxy);
NEWTON_API void NewtonSceneProxySetMatrix(NewtonSceneProxy *const proxy, const dFloat *matrix);
NEWTON_API void NewtonSceneProxyGetMatrix(NewtonSceneProxy *const proxy, dFloat *matrix);
NEWTON_API void NewtonSceneSetProxyUserData(NewtonSceneProxy *const proxy, void *userData);
NEWTON_API void *NewtonSceneGetProxyUserData(NewtonSceneProxy *const proxy);

NEWTON_API NewtonSceneProxy *NewtonSceneGetFirstProxy(NewtonCollision *const scene);
NEWTON_API NewtonSceneProxy *NewtonSceneGetNextProxy(NewtonCollision *const scene, NewtonSceneProxy *const proxy);

NEWTON_API void NewtonSceneCollisionOptimize(NewtonCollision *scene);

//  ***********************************************************************************************************
//
//	Collision serialization functions
//
// ***********************************************************************************************************
NEWTON_API NewtonCollision *NewtonCreateCollisionFromSerialization(NewtonWorld *const newtonWorld, NewtonDeserialize deserializeFunction, void *const serializeHandle);
NEWTON_API void NewtonCollisionSerialize(const NewtonWorld *const newtonWorld, const NewtonCollision *const collision, NewtonSerialize serializeFunction, void *const serializeHandle);
NEWTON_API void NewtonCollisionGetInfo(const NewtonCollision *const collision, NewtonCollisionInfoRecord *const collisionInfo);

// **********************************************************************************************
//
// Static collision shapes functions
//
// **********************************************************************************************
NEWTON_API NewtonCollision *NewtonCreateHeightFieldCollision(NewtonWorld *const newtonWorld, int width, int height, int gridsDiagonals,
        const unsigned short *const elevationMap, const int8 *const attributeMap,
        dFloat horizontalScale, dFloat verticalScale, int shapeID);
NEWTON_API void NewtonHeightFieldSetUserRayCastCallback(NewtonCollision *const treeCollision, NewtonHeightFieldRayCastCallback rayHitCallback);


NEWTON_API NewtonCollision *NewtonCreateTreeCollision(NewtonWorld *const newtonWorld, int shapeID);
NEWTON_API NewtonCollision *NewtonCreateTreeCollisionFromMesh(const NewtonWorld *const newtonWorld, const NewtonMesh *const mesh, int shapeID);

NEWTON_API void NewtonTreeCollisionSetUserRayCastCallback(const NewtonCollision *const treeCollision, NewtonCollisionTreeRayCastCallback rayHitCallback);

NEWTON_API void NewtonTreeCollisionBeginBuild(NewtonCollision *treeCollision);
NEWTON_API void NewtonTreeCollisionAddFace(NewtonCollision *const treeCollision, int vertexCount, const dFloat *const vertexPtr, int strideInBytes, int faceAttribute);
NEWTON_API void NewtonTreeCollisionEndBuild(NewtonCollision *const treeCollision, int optimize);

NEWTON_API int NewtonTreeCollisionGetFaceAtribute(const NewtonCollision *const treeCollision, const int32 *const faceIndexArray);
NEWTON_API void NewtonTreeCollisionSetFaceAtribute(NewtonCollision *const treeCollision, const int32 *const faceIndexArray, int attribute);
NEWTON_API int NewtonTreeCollisionGetVertexListIndexListInAABB(const NewtonCollision *const treeCollision, const dFloat *const p0, const dFloat *const p1, const dFloat **const vertexArray, int32 *const vertexCount, int32 *const vertexStrideInBytes, int32 *const indexList, int maxIndexCount, int32 *const faceAttribute);


NEWTON_API void NewtonStaticCollisionSetDebugCallback(NewtonCollision *const staticCollision, NewtonTreeCollisionCallback userCallback);

// **********************************************************************************************
//
// General purpose collision library functions
//
// **********************************************************************************************
NEWTON_API int NewtonCollisionPointDistance(NewtonWorld *const newtonWorld, const dFloat *const point,
        NewtonCollision *const collision, const dFloat *const matrix, dFloat *const contact, dFloat *const normal, int threadIndex);

NEWTON_API int NewtonCollisionClosestPoint(NewtonWorld *const newtonWorld,
        NewtonCollision *const collisionA, const dFloat *const matrixA, NewtonCollision *const collisionB, const dFloat *const matrixB,
        dFloat *const contactA, dFloat *const contactB, dFloat *const normalAB, int threadIndex);

NEWTON_API int NewtonCollisionCollide(NewtonWorld *const newtonWorld, int maxSize,
                                      NewtonCollision *const collisionA, const dFloat *const matrixA,
                                      NewtonCollision *const collisionB, const dFloat *const matrixB,
                                      dFloat *const contacts, dFloat *const normals, dFloat *const penetration, int threadIndex);

NEWTON_API int NewtonCollisionCollideContinue(NewtonWorld *const newtonWorld, int maxSize, const dFloat timestep,
        NewtonCollision *const collisionA, const dFloat *const matrixA, const dFloat *const velocA, const dFloat *omegaA,
        NewtonCollision *const collisionB, const dFloat *const matrixB, const dFloat *const velocB, const dFloat *const omegaB,
        dFloat *const timeOfImpact, dFloat *const contacts, dFloat *const normals, dFloat *const penetration, int threadIndex);

NEWTON_API void NewtonCollisionSupportVertex(const NewtonCollision *const collision, const dFloat *const dir, dFloat *const vertex);
NEWTON_API dFloat NewtonCollisionRayCast(const NewtonCollision *const collision, const dFloat *const p0, const dFloat *const p1, dFloat *const normal, int *const attribute);
NEWTON_API void NewtonCollisionCalculateAABB(const NewtonCollision *const collision, const dFloat *const matrix, dFloat *const p0, dFloat *const p1);
NEWTON_API void NewtonCollisionForEachPolygonDo(const NewtonCollision *const collision, const dFloat *const matrix, NewtonCollisionIterator callback, void *const userData);


// **********************************************************************************************
//
// transforms utility functions
//
// **********************************************************************************************
NEWTON_API void NewtonGetEulerAngle(const dFloat *const matrix, dFloat *const eulersAngles);
NEWTON_API void NewtonSetEulerAngle(const dFloat *const eulersAngles, dFloat *const matrix);
NEWTON_API dFloat NewtonCalculateSpringDamperAcceleration(dFloat dt, dFloat ks, dFloat x, dFloat kd, dFloat s);

// **********************************************************************************************
//
// body manipulation functions
//
// **********************************************************************************************
NEWTON_API NewtonBody *NewtonCreateBody(NewtonWorld *const newtonWorld, NewtonCollision *const collision, const dFloat *const matrix);
NEWTON_API void  NewtonDestroyBody(NewtonWorld *const newtonWorld, NewtonBody *const body);

NEWTON_API void  NewtonBodyAddForce(NewtonBody *const body, const dFloat *const force);
NEWTON_API void  NewtonBodyAddTorque(NewtonBody *const body, const dFloat *const torque);
NEWTON_API void  NewtonBodyCalculateInverseDynamicsForce(const NewtonBody *const body, dFloat timestep, const dFloat *const desiredVeloc, dFloat *const forceOut);

NEWTON_API void  NewtonBodySetMatrix(NewtonBody *const body, dFloat *const matrix);
NEWTON_API void  NewtonBodySetMatrixRecursive(NewtonBody *const body, const dFloat *const matrix);
NEWTON_API void  NewtonBodySetMassMatrix(NewtonBody *const body, dFloat mass, dFloat Ixx, dFloat Iyy, dFloat Izz);
NEWTON_API void  NewtonBodySetMaterialGroupID(NewtonBody *body, int id);
NEWTON_API void  NewtonBodySetContinuousCollisionMode(NewtonBody *body, unsigned state);
NEWTON_API void  NewtonBodySetJointRecursiveCollision(NewtonBody *body, unsigned state);
NEWTON_API void  NewtonBodySetOmega(NewtonBody *body, const dFloat *const omega);
NEWTON_API void  NewtonBodySetVelocity(NewtonBody *body, const dFloat *const velocity);
NEWTON_API void  NewtonBodySetForce(NewtonBody *const body, const dFloat *const force);
NEWTON_API void  NewtonBodySetTorque(NewtonBody *body, const dFloat *const torque);

NEWTON_API void  NewtonBodySetCentreOfMass(NewtonBody *body, const dFloat *const com);
NEWTON_API void  NewtonBodySetLinearDamping(NewtonBody *body, dFloat linearDamp);
NEWTON_API void  NewtonBodySetAngularDamping(NewtonBody *body, const dFloat *const angularDamp);
NEWTON_API void  NewtonBodySetUserData(NewtonBody *const body, void *const userData);
NEWTON_API void  NewtonBodySetCollision(NewtonBody *body, NewtonCollision *collision);



NEWTON_API int  NewtonBodyGetSleepState(const NewtonBody *const body);
NEWTON_API int  NewtonBodyGetAutoSleep(const NewtonBody *const body);
NEWTON_API void NewtonBodySetAutoSleep(NewtonBody *body, int state);

NEWTON_API int  NewtonBodyGetFreezeState(const NewtonBody *const body);
NEWTON_API void NewtonBodySetFreezeState(NewtonBody *body, int state);


//	NEWTON_API void NewtonBodySetAutoFreeze(const NewtonBody* const body, int state);
//	NEWTON_API void NewtonBodyCoriolisForcesMode (const NewtonBody* const body, int mode);
//	NEWTON_API void NewtonBodySetGyroscopicForcesMode (const NewtonBody* const body, int mode);
//	NEWTON_API int  NewtonBodyGetGyroscopicForcesMode (const NewtonBody* const body);
//	NEWTON_API int  NewtonBodyGetFreezeState (const NewtonBody* const body);
//	NEWTON_API void NewtonBodySetFreezeState  (const NewtonBody* const body, int state);
//	NEWTON_API void NewtonBodyGetFreezeTreshold (const NewtonBody* const body, dFloat* freezeSpeed2, dFloat* freezeOmega2);
//	NEWTON_API void NewtonBodySetFreezeTreshold (const NewtonBody* const body, dFloat freezeSpeed2, dFloat freezeOmega2, int framesCount);
//	NEWTON_API void NewtonBodySetAutoactiveCallback (const NewtonBody* const body, NewtonBodyActivationState callback);


NEWTON_API void  NewtonBodySetDestructorCallback(NewtonBody *const body, NewtonBodyDestructor callback);

NEWTON_API void  NewtonBodySetTransformCallback(NewtonBody *const body, NewtonSetTransform callback);
NEWTON_API NewtonSetTransform NewtonBodyGetTransformCallback(const NewtonBody *const body);

NEWTON_API void  NewtonBodySetForceAndTorqueCallback(NewtonBody *const body, NewtonApplyForceAndTorque callback);
NEWTON_API NewtonApplyForceAndTorque NewtonBodyGetForceAndTorqueCallback(const NewtonBody *const body);
NEWTON_API void *NewtonBodyGetUserData(const NewtonBody *const body);
NEWTON_API NewtonWorld *NewtonBodyGetWorld(const NewtonBody *const body);
NEWTON_API NewtonCollision *NewtonBodyGetCollision(const NewtonBody *const body);
NEWTON_API int   NewtonBodyGetMaterialGroupID(const NewtonBody *const body);

NEWTON_API int   NewtonBodyGetContinuousCollisionMode(const NewtonBody *const body);
NEWTON_API int   NewtonBodyGetJointRecursiveCollision(const NewtonBody *const body);

NEWTON_API void  NewtonBodyGetMatrix(const NewtonBody *const body, dFloat *const matrix);
NEWTON_API void  NewtonBodyGetRotation(const NewtonBody *const body, dFloat *const rotation);
NEWTON_API void  NewtonBodyGetMassMatrix(const NewtonBody *const body, dFloat *mass, dFloat *const Ixx, dFloat *const Iyy, dFloat *const Izz);
NEWTON_API void  NewtonBodyGetInvMass(const NewtonBody *const body, dFloat *const invMass, dFloat *const invIxx, dFloat *const invIyy, dFloat *const invIzz);
NEWTON_API void  NewtonBodyGetOmega(const NewtonBody *const body, dFloat *const vector);
NEWTON_API void  NewtonBodyGetVelocity(const NewtonBody *const body, dFloat *const vector);
NEWTON_API void  NewtonBodyGetForce(const NewtonBody *const body, dFloat *const vector);
NEWTON_API void  NewtonBodyGetTorque(const NewtonBody *const body, dFloat *const vector);
NEWTON_API void  NewtonBodyGetForceAcc(const NewtonBody *const body, dFloat *const vector);
NEWTON_API void  NewtonBodyGetTorqueAcc(const NewtonBody *const body, dFloat *const vector);
NEWTON_API void  NewtonBodyGetCentreOfMass(const NewtonBody *const body, dFloat *const com);

NEWTON_API dFloat NewtonBodyGetLinearDamping(const NewtonBody *const body);
NEWTON_API void  NewtonBodyGetAngularDamping(const NewtonBody *const body, dFloat *const vector);
NEWTON_API void  NewtonBodyGetAABB(const NewtonBody *const body, dFloat *const p0, dFloat *const p1);
NEWTON_API NewtonJoint *NewtonBodyGetFirstJoint(const NewtonBody *const body);
NEWTON_API NewtonJoint *NewtonBodyGetNextJoint(const NewtonBody *const body, const NewtonJoint *const joint);
NEWTON_API NewtonJoint *NewtonBodyGetFirstContactJoint(const NewtonBody *const body);
NEWTON_API NewtonJoint *NewtonBodyGetNextContactJoint(const NewtonBody *const body, const NewtonJoint *const contactJoint);

NEWTON_API void *NewtonContactJointGetFirstContact(const NewtonJoint *const contactJoint);
NEWTON_API void *NewtonContactJointGetNextContact(const NewtonJoint *const contactJoint, void *const contact);

NEWTON_API int NewtonContactJointGetContactCount(const NewtonJoint *const contactJoint);
NEWTON_API void NewtonContactJointRemoveContact(NewtonJoint *contactJoint, void *const contact);

NEWTON_API NewtonMaterial *NewtonContactGetMaterial(void *const contact);


NEWTON_API void  NewtonBodyAddBuoyancyForce(NewtonBody *const body, dFloat fluidDensity,
        dFloat fluidLinearViscosity, dFloat fluidAngularViscosity,
        const dFloat *const gravityVector, NewtonGetBuoyancyPlane buoyancyPlane, void *const context);

//	NEWTON_API void NewtonBodyForEachPolygonDo (const NewtonBody* const body, NewtonCollisionIterator callback);
NEWTON_API void NewtonBodyAddImpulse(NewtonBody *body, const dFloat *const pointDeltaVeloc, const dFloat *const pointPosit);


NEWTON_API void NewtonBodyApplyImpulseArray(NewtonBody *body, int impuleCount, int strideInByte, const dFloat *const impulseArray, const dFloat *const pointArray);


// **********************************************************************************************
//
// Common joint functions
//
// **********************************************************************************************
NEWTON_API void *NewtonJointGetUserData(const NewtonJoint *const joint);
NEWTON_API void NewtonJointSetUserData(NewtonJoint *joint, void *const userData);

NEWTON_API NewtonBody *NewtonJointGetBody0(const NewtonJoint *const joint);
NEWTON_API NewtonBody *NewtonJointGetBody1(const NewtonJoint *const joint);

NEWTON_API void NewtonJointGetInfo(const NewtonJoint *const joint, NewtonJointRecord *const info);
NEWTON_API int NewtonJointGetCollisionState(const NewtonJoint *const joint);
NEWTON_API void NewtonJointSetCollisionState(NewtonJoint *joint, int state);

NEWTON_API dFloat NewtonJointGetStiffness(const NewtonJoint *const joint);
NEWTON_API void NewtonJointSetStiffness(NewtonJoint *joint, dFloat state);

NEWTON_API void NewtonDestroyJoint(NewtonWorld *newtonWorld, NewtonJoint *joint);
NEWTON_API void NewtonJointSetDestructor(const NewtonJoint *const joint, NewtonConstraintDestructor destructor);




// **********************************************************************************************
//
// Ball and Socket joint functions
//
// **********************************************************************************************
NEWTON_API NewtonJoint *NewtonConstraintCreateBall(NewtonWorld *newtonWorld, const dFloat *pivotPoint,
        NewtonBody *childBody, NewtonBody *parentBody);
NEWTON_API void NewtonBallSetUserCallback(NewtonJoint *ball, NewtonBallCallBack callback);
NEWTON_API void NewtonBallGetJointAngle(const NewtonJoint *const ball, dFloat *angle);
NEWTON_API void NewtonBallGetJointOmega(const NewtonJoint *const ball, dFloat *omega);
NEWTON_API void NewtonBallGetJointForce(const NewtonJoint *const ball, dFloat *const force);
NEWTON_API void NewtonBallSetConeLimits(NewtonJoint *ball, const dFloat *pin, dFloat maxConeAngle, dFloat maxTwistAngle);

// **********************************************************************************************
//
// Hinge joint functions
//
// **********************************************************************************************
NEWTON_API NewtonJoint *NewtonConstraintCreateHinge(NewtonWorld *newtonWorld,
        const dFloat *pivotPoint, const dFloat *pinDir,
        NewtonBody *childBody, NewtonBody *parentBody);

NEWTON_API void NewtonHingeSetUserCallback(NewtonJoint *hinge, NewtonHingeCallBack callback);
NEWTON_API dFloat NewtonHingeGetJointAngle(const NewtonJoint *const hinge);
NEWTON_API dFloat NewtonHingeGetJointOmega(const NewtonJoint *const hinge);
NEWTON_API void NewtonHingeGetJointForce(const NewtonJoint *const hinge, dFloat *const force);
NEWTON_API dFloat NewtonHingeCalculateStopAlpha(const NewtonJoint *const hinge, const NewtonHingeSliderUpdateDesc *const desc, dFloat angle);

// **********************************************************************************************
//
// Slider joint functions
//
// **********************************************************************************************
NEWTON_API NewtonJoint *NewtonConstraintCreateSlider(NewtonWorld *newtonWorld,
        const dFloat *pivotPoint, const dFloat *pinDir,
        NewtonBody *childBody, NewtonBody *parentBody);
NEWTON_API void NewtonSliderSetUserCallback(NewtonJoint *slider, NewtonSliderCallBack callback);
NEWTON_API dFloat NewtonSliderGetJointPosit(const NewtonJoint *slider);
NEWTON_API dFloat NewtonSliderGetJointVeloc(const NewtonJoint *slider);
NEWTON_API void NewtonSliderGetJointForce(const NewtonJoint *const slider, dFloat *const force);
NEWTON_API dFloat NewtonSliderCalculateStopAccel(const NewtonJoint *const slider, const NewtonHingeSliderUpdateDesc *const desc, dFloat position);


// **********************************************************************************************
//
// Corkscrew joint functions
//
// **********************************************************************************************
NEWTON_API NewtonJoint *NewtonConstraintCreateCorkscrew(NewtonWorld *newtonWorld,
        const dFloat *pivotPoint, const dFloat *pinDir,
        NewtonBody *childBody, NewtonBody *parentBody);
NEWTON_API void NewtonCorkscrewSetUserCallback(NewtonJoint *corkscrew, NewtonCorkscrewCallBack callback);
NEWTON_API dFloat NewtonCorkscrewGetJointPosit(const NewtonJoint *const corkscrew);
NEWTON_API dFloat NewtonCorkscrewGetJointAngle(const NewtonJoint *const corkscrew);
NEWTON_API dFloat NewtonCorkscrewGetJointVeloc(const NewtonJoint *const corkscrew);
NEWTON_API dFloat NewtonCorkscrewGetJointOmega(const NewtonJoint *const corkscrew);
NEWTON_API void NewtonCorkscrewGetJointForce(const NewtonJoint *const corkscrew, dFloat *const force);
NEWTON_API dFloat NewtonCorkscrewCalculateStopAlpha(const NewtonJoint *const corkscrew, const NewtonHingeSliderUpdateDesc *const desc, dFloat angle);
NEWTON_API dFloat NewtonCorkscrewCalculateStopAccel(const NewtonJoint *const corkscrew, const NewtonHingeSliderUpdateDesc *const desc, dFloat position);


// **********************************************************************************************
//
// Universal joint functions
//
// **********************************************************************************************
NEWTON_API NewtonJoint *NewtonConstraintCreateUniversal(const NewtonWorld *const newtonWorld,
        const dFloat *pivotPoint, const dFloat *pinDir0, const dFloat *pinDir1,
        const NewtonBody *const childBody, const NewtonBody *const parentBody);
NEWTON_API void NewtonUniversalSetUserCallback(const NewtonJoint *const universal, NewtonUniversalCallBack callback);
NEWTON_API dFloat NewtonUniversalGetJointAngle0(const NewtonJoint *const universal);
NEWTON_API dFloat NewtonUniversalGetJointAngle1(const NewtonJoint *const universal);
NEWTON_API dFloat NewtonUniversalGetJointOmega0(const NewtonJoint *const universal);
NEWTON_API dFloat NewtonUniversalGetJointOmega1(const NewtonJoint *const universal);
NEWTON_API void NewtonUniversalGetJointForce(const NewtonJoint *const universal, dFloat *const force);
NEWTON_API dFloat NewtonUniversalCalculateStopAlpha0(const NewtonJoint *const universal, const NewtonHingeSliderUpdateDesc *const desc, dFloat angle);
NEWTON_API dFloat NewtonUniversalCalculateStopAlpha1(const NewtonJoint *const universal, const NewtonHingeSliderUpdateDesc *const desc, dFloat angle);


// **********************************************************************************************
//
// Up vector joint functions
//
// **********************************************************************************************
NEWTON_API NewtonJoint *NewtonConstraintCreateUpVector(const NewtonWorld *const newtonWorld, const dFloat *pinDir, const NewtonBody *const body);
NEWTON_API void NewtonUpVectorGetPin(const NewtonJoint *const upVector, dFloat *pin);
NEWTON_API void NewtonUpVectorSetPin(const NewtonJoint *const upVector, const dFloat *pin);


// **********************************************************************************************
//
// User defined bilateral Joint
//
// **********************************************************************************************
NEWTON_API NewtonJoint *NewtonConstraintCreateUserJoint(const NewtonWorld *const newtonWorld, int maxDOF,
        NewtonUserBilateralCallBack callback,
        NewtonUserBilateralGetInfoCallBack getInfo,
        const NewtonBody *const childBody, const NewtonBody *const parentBody) ;
NEWTON_API void NewtonUserJointSetFeedbackCollectorCallback(const NewtonJoint *const joint, NewtonUserBilateralCallBack getFeedback);
NEWTON_API void NewtonUserJointAddLinearRow(const NewtonJoint *const joint, const dFloat *const pivot0, const dFloat *const pivot1, const dFloat *const dir);
NEWTON_API void NewtonUserJointAddAngularRow(const NewtonJoint *const joint, dFloat relativeAngle, const dFloat *const dir);
NEWTON_API void NewtonUserJointAddGeneralRow(const NewtonJoint *const joint, const dFloat *const jacobian0, const dFloat *const jacobian1);
NEWTON_API void NewtonUserJointSetRowMinimumFriction(const NewtonJoint *const joint, dFloat friction);
NEWTON_API void NewtonUserJointSetRowMaximumFriction(const NewtonJoint *const joint, dFloat friction);
NEWTON_API void NewtonUserJointSetRowAcceleration(const NewtonJoint *const joint, dFloat acceleration);
NEWTON_API void NewtonUserJointSetRowSpringDamperAcceleration(const NewtonJoint *const joint, dFloat springK, dFloat springD);
NEWTON_API void NewtonUserJointSetRowStiffness(const NewtonJoint *const joint, dFloat stiffness);
NEWTON_API dFloat NewtonUserJointGetRowForce(const NewtonJoint *const joint, int row);


// **********************************************************************************************
//
// Mesh joint functions
//
// **********************************************************************************************
NEWTON_API NewtonMesh *NewtonMeshCreate(const NewtonWorld *const newtonWorld);
NEWTON_API NewtonMesh *NewtonMeshCreateFromMesh(const NewtonMesh *const mesh);
NEWTON_API NewtonMesh *NewtonMeshCreateFromCollision(const NewtonCollision *const collision);
NEWTON_API NewtonMesh *NewtonMeshConvexHull(const NewtonWorld *const newtonWorld, int count, const dFloat *const vertexCloud, int strideInBytes, dFloat tolerance);
NEWTON_API NewtonMesh *NewtonMeshCreatePlane(const NewtonWorld *const newtonWorld, const dFloat *const locationMatrix, dFloat witdth, dFloat breadth, int material, const dFloat *const textureMatrix0, const dFloat *const textureMatrix1);

NEWTON_API void NewtonMeshDestroy(const NewtonMesh *const mesh);

NEWTON_API void NewtonMesApplyTransform(const NewtonMesh *const mesh, const dFloat *const matrix);
NEWTON_API void NewtonMeshCalculateOOBB(const NewtonMesh *const mesh, dFloat *const matrix, dFloat *const x, dFloat *const y, dFloat *const z);

NEWTON_API void NewtonMeshCalculateVertexNormals(const NewtonMesh *const mesh, dFloat angleInRadians);
NEWTON_API void NewtonMeshApplySphericalMapping(const NewtonMesh *const mesh, int material);
NEWTON_API void NewtonMeshApplyBoxMapping(const NewtonMesh *const mesh, int front, int side, int top);
NEWTON_API void NewtonMeshApplyCylindricalMapping(const NewtonMesh *const mesh, int cylinderMaterial, int capMaterial);

NEWTON_API int NewtonMeshIsOpenMesh(const NewtonMesh *const mesh);
NEWTON_API void NewtonMeshFixTJoints(const NewtonMesh *const mesh);


NEWTON_API void NewtonMeshPolygonize(const NewtonMesh *const mesh);
NEWTON_API void NewtonMeshTriangulate(const NewtonMesh *const mesh);
NEWTON_API NewtonMesh *NewtonMeshUnion(const NewtonMesh *const mesh, const NewtonMesh *const clipper, const dFloat *const clipperMatrix);
NEWTON_API NewtonMesh *NewtonMeshDifference(const NewtonMesh *const mesh, const NewtonMesh *const clipper, const dFloat *const clipperMatrix);
NEWTON_API NewtonMesh *NewtonMeshIntersection(const NewtonMesh *const mesh, const NewtonMesh *const clipper, const dFloat *const clipperMatrix);
NEWTON_API void NewtonMeshClip(const NewtonMesh *const mesh, const NewtonMesh *const clipper, const dFloat *const clipperMatrix, NewtonMesh **const topMesh, NewtonMesh **const bottomMesh);
NEWTON_API void NewtonMeshPlaneClip(const NewtonMesh *const mesh, dFloat *const planeMatrix, const dFloat *const planeTextureMatrix, int planeMaterial, NewtonMesh **const topMesh, NewtonMesh **const bottomMesh);

NEWTON_API NewtonMesh *NewtonMeshApproximateConvexDecomposition(const NewtonMesh *const mesh, dFloat maxConcavity, int maxCount);
NEWTON_API NewtonMesh *NewtonMeshTetrahedralization(const NewtonMesh *const mesh, int internalMaterial, const dFloat *const textureMatrix);
NEWTON_API NewtonMesh *NewtonMeshVoronoiDecomposition(const NewtonMesh *const mesh, int pointCount, int pointStrideInBytes, const dFloat *const pointCloud, int internalMaterial, const dFloat *const textureMatrix);


NEWTON_API void NewtonRemoveUnusedVertices(const NewtonMesh *const mesh, int32 *const vertexRemapTable);

NEWTON_API void NewtonMeshBeginFace(const NewtonMesh *const mesh);
NEWTON_API void NewtonMeshAddFace(const NewtonMesh *const mesh, int vertexCount, const dFloat *const vertex, int strideInBytes, int materialIndex);
NEWTON_API void NewtonMeshEndFace(const NewtonMesh *const mesh);

NEWTON_API void NewtonMeshBuildFromVertexListIndexList(const NewtonMesh *const mesh,
        int faceCount, const int32 *const faceIndexCount, const int32 *const faceMaterialIndex,
        const dFloat *const vertex, int vertexStrideInBytes, const int32 *const vertexIndex,
        const dFloat *const normal, int normalStrideInBytes, const int32 *const normalIndex,
        const dFloat *const uv0, int uv0StrideInBytes, const int32 *const uv0Index,
        const dFloat *const uv1, int uv1StrideInBytes, const int32 *const uv1Index);



NEWTON_API void NewtonMeshGetVertexStreams(const NewtonMesh *const mesh,
        int vertexStrideInByte, dFloat *const vertex,
        int normalStrideInByte, dFloat *const normal,
        int uvStrideInByte0, dFloat *const uv0,
        int uvStrideInByte1, dFloat *const uv1);
NEWTON_API void NewtonMeshGetIndirectVertexStreams(const NewtonMesh *const mesh,
        int vertexStrideInByte, dFloat *const vertex, int *const vertexIndices, int *const vertexCount,
        int normalStrideInByte, dFloat *const normal, int *const normalIndices, int *const normalCount,
        int uvStrideInByte0, dFloat *const uv0, int *const uvIndices0, int *const uvCount0,
        int uvStrideInByte1, dFloat *const uv1, int *const uvIndices1, int *const uvCount1);
NEWTON_API void *NewtonMeshBeginHandle(const NewtonMesh *const mesh);
NEWTON_API void NewtonMeshEndHandle(const NewtonMesh *const mesh, void *const handle);
NEWTON_API int NewtonMeshFirstMaterial(const NewtonMesh *const mesh, void *const handle);
NEWTON_API int NewtonMeshNextMaterial(const NewtonMesh *const mesh, void *const handle, int materialId);
NEWTON_API int NewtonMeshMaterialGetMaterial(const NewtonMesh *const mesh, void *const handle, int materialId);
NEWTON_API int NewtonMeshMaterialGetIndexCount(const NewtonMesh *const mesh, void *const handle, int materialId);
NEWTON_API void NewtonMeshMaterialGetIndexStream(const NewtonMesh *const mesh, void *const handle, int materialId, int32 *const index);
NEWTON_API void NewtonMeshMaterialGetIndexStreamShort(const NewtonMesh *const mesh, void *const handle, int materialId, short int *const index);

NEWTON_API NewtonMesh *NewtonMeshCreateFirstSingleSegment(const NewtonMesh *const mesh);
NEWTON_API NewtonMesh *NewtonMeshCreateNextSingleSegment(const NewtonMesh *const mesh, const NewtonMesh *const segment);

NEWTON_API NewtonMesh *NewtonMeshCreateFirstLayer(const NewtonMesh *const mesh);
NEWTON_API NewtonMesh *NewtonMeshCreateNextLayer(const NewtonMesh *const mesh, const NewtonMesh *const segment);


NEWTON_API int NewtonMeshGetTotalFaceCount(const NewtonMesh *const mesh);
NEWTON_API int NewtonMeshGetTotalIndexCount(const NewtonMesh *const mesh);
NEWTON_API void NewtonMeshGetFaces(const NewtonMesh *const mesh, int32 *const faceIndexCount, int32 *const faceMaterial, void **const faceIndices);


NEWTON_API int NewtonMeshGetPointCount(const NewtonMesh *const mesh);
NEWTON_API int NewtonMeshGetPointStrideInByte(const NewtonMesh *const mesh);
NEWTON_API dFloat64 *NewtonMeshGetPointArray(const NewtonMesh *const mesh);
NEWTON_API dFloat64 *NewtonMeshGetNormalArray(const NewtonMesh *const mesh);
NEWTON_API dFloat64 *NewtonMeshGetUV0Array(const NewtonMesh *const mesh);
NEWTON_API dFloat64 *NewtonMeshGetUV1Array(const NewtonMesh *const mesh);

NEWTON_API int NewtonMeshGetVertexCount(const NewtonMesh *const mesh);
NEWTON_API int NewtonMeshGetVertexStrideInByte(const NewtonMesh *const mesh);
NEWTON_API dFloat64 *NewtonMeshGetVertexArray(const NewtonMesh *const mesh);


NEWTON_API void *NewtonMeshGetFirstVertex(const NewtonMesh *const mesh);
NEWTON_API void *NewtonMeshGetNextVertex(const NewtonMesh *const mesh, void *const vertex);
NEWTON_API int NewtonMeshGetVertexIndex(const NewtonMesh *const mesh, void *const vertex);

NEWTON_API void *NewtonMeshGetFirstPoint(const NewtonMesh *const mesh);
NEWTON_API void *NewtonMeshGetNextPoint(const NewtonMesh *const mesh, void *const point);
NEWTON_API int NewtonMeshGetPointIndex(const NewtonMesh *const mesh, const void *const point);
NEWTON_API int NewtonMeshGetVertexIndexFromPoint(const NewtonMesh *const mesh, void *const point);


NEWTON_API void *NewtonMeshGetFirstEdge(const NewtonMesh *const mesh);
NEWTON_API void *NewtonMeshGetNextEdge(const NewtonMesh *const mesh, void *const edge);
NEWTON_API void NewtonMeshGetEdgeIndices(const NewtonMesh *const mesh, const void *const edge, int32 *const v0, int32 *const v1);
//NEWTON_API void NewtonMeshGetEdgePointIndices (const NewtonMesh* const mesh, const void* const edge, int* const v0, int* const v1);

NEWTON_API void *NewtonMeshGetFirstFace(const NewtonMesh *const mesh);
NEWTON_API void *NewtonMeshGetNextFace(const NewtonMesh *const mesh, void *const face);
NEWTON_API int NewtonMeshIsFaceOpen(const NewtonMesh *const mesh, const void *const face);
NEWTON_API int NewtonMeshGetFaceMaterial(const NewtonMesh *const mesh, const void *const face);
NEWTON_API int NewtonMeshGetFaceIndexCount(const NewtonMesh *const mesh, const void *const face);
NEWTON_API void NewtonMeshGetFaceIndices(const NewtonMesh *const mesh, const void *const face, int *const indices);
NEWTON_API void NewtonMeshGetFacePointIndices(const NewtonMesh *const mesh, const void *const face, int *const indices);


#ifdef __cplusplus
}
#endif

#endif