Panda3D
Loading...
Searching...
No Matches
physxSoftBody.h
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file physxSoftBody.h
10 * @author enn0x
11 * @date 2010-09-13
12 */
13
14#ifndef PHYSXSOFTBODY_H
15#define PHYSXSOFTBODY_H
16
17#include "pandabase.h"
18#include "luse.h"
19
20#include "physxObject.h"
22#include "physxEnums.h"
23#include "physx_includes.h"
24
25class PhysxScene;
26class PhysxGroupsMask;
28
29/**
30 *
31 */
32class EXPCL_PANDAPHYSX PhysxSoftBody : public PhysxObject, public PhysxEnums {
33
34PUBLISHED:
35 INLINE PhysxSoftBody();
36 INLINE ~PhysxSoftBody();
37
38 PhysxScene *get_scene() const;
39 PhysxSoftBodyNode *get_soft_body_node() const;
40 PhysxSoftBodyNode *create_soft_body_node(const char *name);
41
42 void set_name(const char *name);
43 void set_flag(PhysxSoftBodyFlag flag, bool value);
44 void set_groups_mask(const PhysxGroupsMask &mask);
45 void set_group(unsigned int group);
46 void set_solver_iterations(unsigned int iterations);
47 void set_particle_radius(float radius);
48#if NX_SDK_VERSION_NUMBER > 281
49 void set_self_collision_thickness(float thickness);
50 void set_hard_stretch_limitation_factor(float factor);
51#endif
52 void set_volume_stiffness(float stiffness);
53 void set_stretching_stiffness(float stiffness);
54 void set_damping_coefficient(float coef);
55 void set_friction(float friction);
56 void set_tear_factor(float factor);
57 void set_attachment_tear_factor(float factor);
58
59 const char *get_name() const;
60 bool get_flag(PhysxSoftBodyFlag flag) const;
61 PhysxGroupsMask get_groups_mask() const;
62 unsigned int get_group() const;
63 unsigned int get_num_particles();
64 unsigned int get_solver_iterations() const;
65 float get_particle_radius() const;
66 float get_density() const;
67 float get_relative_grid_spacing() const;
68#if NX_SDK_VERSION_NUMBER > 281
69 float get_self_collision_thickness() const;
70 float get_hard_stretch_limitation_factor() const;
71#endif
72 float get_volume_stiffness() const;
73 float get_stretching_stiffness() const;
74 float get_damping_coefficient() const;
75 float get_friction() const;
76 float get_tear_factor() const;
77 float get_attachment_tear_factor() const;
78
79/*
80 // Attachment
81 void attach_vertex_to_global_pos(unsigned int vertexId, LPoint3f const &pos);
82 void free_vertex(unsigned int vertexId);
83 void attach_to_shape(PhysxShape *shape);
84 void attach_to_colliding_shapes();
85 void detach_from_shape(PhysxShape *shape);
86 void attach_vertex_to_shape(unsigned int vertexId, PhysxShape *shape, LPoint3f const &localPos);
87 PhysxVertexAttachmentStatus get_vertex_attachment_status(unsigned int vertexId) const;
88 PhysxShape *get_vertex_attachment_shape(unsigned int vertexId) const;
89 LPoint3f get_vertex_attachment_pos(unsigned int vertexId) const;
90*/
91
92 // Sleeping
93 bool is_sleeping() const;
94 void wake_up(float wakeCounterValue=NX_SLEEP_INTERVAL);
95 void put_to_sleep();
96 void set_sleep_linear_velocity(float threshold);
97 float get_sleep_linear_velocity() const;
98
99/*
100 // Forces
101 void set_external_acceleration(LVector3f const &acceleration);
102 LVector3f get_external_acceleration() const;
103
104 void set_wind_acceleration(LVector3f const &acceleration);
105 LVector3f get_wind_acceleration() const;
106
107 void add_force_at_vertex(LVector3f const &force, int vertexId,
108 PhysxForceMode mode=FM_force);
109 void add_force_at_pos(LPoint3f const &pos, float magnitude, float radius,
110 PhysxForceMode mode=FM_force);
111 void add_directed_force_at_pos(LPoint3f const &pos, LVector3f const &force, float radius,
112 PhysxForceMode mode=FM_force);
113*/
114
115
116/*
117virtual void getWorldBounds (NxBounds3 &bounds) const =0
118virtual void attachToShape (const NxShape *shape, NxU32 attachmentFlags)=0
119virtual void attachToCollidingShapes (NxU32 attachmentFlags)=0
120virtual void detachFromShape (const NxShape *shape)=0
121virtual void attachVertexToShape (NxU32 vertexId, const NxShape *shape, const NxVec3 &localPos, NxU32 attachmentFlags)=0
122virtual void attachVertexToGlobalPosition (const NxU32 vertexId, const NxVec3 &pos)=0
123virtual void freeVertex (const NxU32 vertexId)=0
124virtual bool tearVertex (const NxU32 vertexId, const NxVec3 &normal)=0
125virtual bool raycast (const NxRay &worldRay, NxVec3 &hit, NxU32 &vertexId)=0
126virtual void setMeshData (NxMeshData &meshData)=0
127virtual NxMeshData getMeshData ()=0
128virtual void setSplitPairData (NxSoftBodySplitPairData &splitPairData)=0
129virtual NxSoftBodySplitPairData getSplitPairData ()=0
130virtual void setValidBounds (const NxBounds3 &validBounds)=0
131virtual void getValidBounds (NxBounds3 &validBounds) const =0
132virtual void setPosition (const NxVec3 &position, NxU32 vertexId)=0
133virtual void setPositions (void *buffer, NxU32 byteStride=sizeof(NxVec3))=0
134virtual NxVec3 getPosition (NxU32 vertexId) const =0
135virtual void getPositions (void *buffer, NxU32 byteStride=sizeof(NxVec3))=0
136virtual void setVelocity (const NxVec3 &velocity, NxU32 vertexId)=0
137virtual void setVelocities (void *buffer, NxU32 byteStride=sizeof(NxVec3))=0
138virtual NxVec3 getVelocity (NxU32 vertexId) const =0
139virtual void getVelocities (void *buffer, NxU32 byteStride=sizeof(NxVec3))=0
140virtual void setConstrainPositions (void *buffer, NxU32 byteStride=sizeof(NxVec3))=0
141virtual void setConstrainNormals (void *buffer, NxU32 byteStride=sizeof(NxVec3))=0
142virtual void setConstrainCoefficients (const NxSoftBodyConstrainCoefficients *coefficients, NxU32 byteStride=sizeof(NxSoftBodyConstrainCoefficients))=0
143virtual NxU32 queryShapePointers ()=0
144virtual NxU32 getStateByteSize ()=0
145virtual void getShapePointers (NxShape **shapePointers, NxU32 *flags)=0
146virtual void setShapePointers (NxShape **shapePointers, unsigned int numShapes)=0
147virtual void saveStateToStream (NxStream &stream, bool permute=false)=0
148virtual void loadStateFromStream (NxStream &stream)=0
149virtual void setCollisionResponseCoefficient (NxReal coefficient)=0
150virtual NxReal getCollisionResponseCoefficient () const =0
151virtual void setAttachmentResponseCoefficient (NxReal coefficient)=0
152virtual NxReal getAttachmentResponseCoefficient () const =0
153virtual void setFromFluidResponseCoefficient (NxReal coefficient)=0
154virtual NxReal getFromFluidResponseCoefficient () const =0
155virtual void setToFluidResponseCoefficient (NxReal coefficient)=0
156virtual NxReal getToFluidResponseCoefficient () const =0
157virtual void setExternalAcceleration (NxVec3 acceleration)=0
158virtual NxVec3 getExternalAcceleration () const =0
159virtual void setMinAdhereVelocity (NxReal velocity)=0
160virtual NxReal getMinAdhereVelocity () const =0
161virtual void addForceAtVertex (const NxVec3 &force, NxU32 vertexId, NxForceMode mode=NX_FORCE)=0
162virtual void addForceAtPos (const NxVec3 &position, NxReal magnitude, NxReal radius, NxForceMode mode=NX_FORCE)=0
163virtual void addDirectedForceAtPos (const NxVec3 &position, const NxVec3 &force, NxReal radius, NxForceMode mode=NX_FORCE)=0
164virtual bool overlapAABBTetrahedra (const NxBounds3 &bounds, NxU32 &nb, const NxU32 *&indices) const =0
165virtual NxCompartment * getCompartment () const =0
166virtual NxForceFieldMaterial getForceFieldMaterial () const =0
167virtual void setForceFieldMaterial (NxForceFieldMaterial)=0
168*/
169
170 INLINE void ls() const;
171 INLINE void ls(std::ostream &out, int indent_level=0) const;
172
173public:
174 void update();
175
176PUBLISHED:
177 void release();
178
179public:
180 INLINE NxSoftBody *ptr() const { return _ptr; };
181
182 void link(NxSoftBody *ptr);
183 void unlink();
184
185private:
186 NxSoftBody *_ptr;
187 PT(PhysxSoftBodyNode) _node;
188 std::string _name;
189
190public:
191 static TypeHandle get_class_type() {
192 return _type_handle;
193 }
194 static void init_type() {
195 PhysxObject::init_type();
196 register_type(_type_handle, "PhysxSoftBody",
197 PhysxObject::get_class_type());
198 }
199 virtual TypeHandle get_type() const {
200 return get_class_type();
201 }
202 virtual TypeHandle force_init_type() {
203 init_type();
204 return get_class_type();
205 }
206
207private:
208 static TypeHandle _type_handle;
209};
210
211#include "physxSoftBody.I"
212
213#endif // PHYSXSOFTBODY_H
This class exists just to provide scoping for the enums shared by PhysX classes.
Definition physxEnums.h:355
128-bit bitmask class.
A scene is a collection of bodies, constraints, and effectors which can interact.
Definition physxScene.h:69
Renderable geometry which represents a soft body mesh.
TypeHandle is the identifier used to differentiate C++ class types.
Definition typeHandle.h:81
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void register_type(TypeHandle &type_handle, const std::string &name)
This inline function is just a convenient way to call TypeRegistry::register_type(),...