Bullet Collision Detection & Physics Library: btSoftBodyData.h Source File

Bullet Collision Detection & Physics Library

btSoftBodyData.h
Go to the documentation of this file.
1 /*
2 Bullet Continuous Collision Detection and Physics Library
3 Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
4
5 This software is provided 'as-is', without any express or implied warranty.
6 In no event will the authors be held liable for any damages arising from the use of this software.
7 Permission is granted to anyone to use this software for any purpose,
8 including commercial applications, and to alter it and redistribute it freely,
9 subject to the following restrictions:
10
11 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.
12 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
13 3. This notice may not be removed or altered from any source distribution.
14 */
15
16 #ifndef BT_SOFTBODY_FLOAT_DATA
17 #define BT_SOFTBODY_FLOAT_DATA
18
19 #include "BulletCollision/CollisionDispatch/btCollisionObject.h"
20 #include "BulletDynamics/Dynamics/btRigidBody.h"
21
22 struct SoftBodyMaterialData
23 {
24 float m_linearStiffness;
25 float m_angularStiffness;
26 float m_volumeStiffness;
27 int m_flags;
28 };
29
30 struct SoftBodyNodeData
31 {
32 SoftBodyMaterialData *m_material;
33 btVector3FloatData m_position;
34 btVector3FloatData m_previousPosition;
35 btVector3FloatData m_velocity;
36 btVector3FloatData m_accumulatedForce;
37 btVector3FloatData m_normal;
38 float m_inverseMass;
39 float m_area;
40 int m_attach;
41 int m_pad;
42 };
43
44 struct SoftBodyLinkData
45 {
46 SoftBodyMaterialData *m_material;
47 int m_nodeIndices[2]; // Node pointers
48 float m_restLength; // Rest length
49 int m_bbending; // Bending link
50 };
51
52 struct SoftBodyFaceData
53 {
54 btVector3FloatData m_normal; // Normal
55 SoftBodyMaterialData *m_material;
56 int m_nodeIndices[3]; // Node pointers
57 float m_restArea; // Rest area
58 };
59
60 struct SoftBodyTetraData
61 {
62 btVector3FloatData m_c0[4]; // gradients
63 SoftBodyMaterialData *m_material;
64 int m_nodeIndices[4]; // Node pointers
65 float m_restVolume; // Rest volume
66 float m_c1; // (4*kVST)/(im0+im1+im2+im3)
67 float m_c2; // m_c1/sum(|g0..3|^2)
68 int m_pad;
69 };
70
71 struct SoftRigidAnchorData
72 {
73 btMatrix3x3FloatData m_c0; // Impulse matrix
74 btVector3FloatData m_c1; // Relative anchor
75 btVector3FloatData m_localFrame; // Anchor position in body space
76 btRigidBodyData *m_rigidBody;
77 int m_nodeIndex; // Node pointer
78 float m_c2; // ima*dt
79 };
80
81 struct SoftBodyConfigData
82 {
83 int m_aeroModel; // Aerodynamic model (default: V_Point)
84 float m_baumgarte; // Velocities correction factor (Baumgarte)
85 float m_damping; // Damping coefficient [0,1]
86 float m_drag; // Drag coefficient [0,+inf]
87 float m_lift; // Lift coefficient [0,+inf]
88 float m_pressure; // Pressure coefficient [-inf,+inf]
89 float m_volume; // Volume conversation coefficient [0,+inf]
90 float m_dynamicFriction; // Dynamic friction coefficient [0,1]
91 float m_poseMatch; // Pose matching coefficient [0,1]
92 float m_rigidContactHardness; // Rigid contacts hardness [0,1]
93 float m_kineticContactHardness; // Kinetic contacts hardness [0,1]
94 float m_softContactHardness; // Soft contacts hardness [0,1]
95 float m_anchorHardness; // Anchors hardness [0,1]
96 float m_softRigidClusterHardness; // Soft vs rigid hardness [0,1] (cluster only)
97 float m_softKineticClusterHardness; // Soft vs kinetic hardness [0,1] (cluster only)
98 float m_softSoftClusterHardness; // Soft vs soft hardness [0,1] (cluster only)
99 float m_softRigidClusterImpulseSplit; // Soft vs rigid impulse split [0,1] (cluster only)
100 float m_softKineticClusterImpulseSplit; // Soft vs rigid impulse split [0,1] (cluster only)
101 float m_softSoftClusterImpulseSplit; // Soft vs rigid impulse split [0,1] (cluster only)
102 float m_maxVolume; // Maximum volume ratio for pose
103 float m_timeScale; // Time scale
104 int m_velocityIterations; // Velocities solver iterations
105 int m_positionIterations; // Positions solver iterations
106 int m_driftIterations; // Drift solver iterations
107 int m_clusterIterations; // Cluster solver iterations
108 int m_collisionFlags; // Collisions flags
109 };
110
111 struct SoftBodyPoseData
112 {
113 btMatrix3x3FloatData m_rot; // Rotation
114 btMatrix3x3FloatData m_scale; // Scale
115 btMatrix3x3FloatData m_aqq; // Base scaling
116 btVector3FloatData m_com; // COM
117
118 btVector3FloatData *m_positions; // Reference positions
119 float *m_weights; // Weights
120 int m_numPositions;
121 int m_numWeigts;
122
123 int m_bvolume; // Is valid
124 int m_bframe; // Is frame
125 float m_restVolume; // Rest volume
126 int m_pad;
127 };
128
129 struct SoftBodyClusterData
130 {
131 btTransformFloatData m_framexform;
132 btMatrix3x3FloatData m_locii;
133 btMatrix3x3FloatData m_invwi;
134 btVector3FloatData m_com;
135 btVector3FloatData m_vimpulses[2];
136 btVector3FloatData m_dimpulses[2];
137 btVector3FloatData m_lv;
138 btVector3FloatData m_av;
139
140 btVector3FloatData *m_framerefs;
141 int *m_nodeIndices;
142 float *m_masses;
143
144 int m_numFrameRefs;
145 int m_numNodes;
146 int m_numMasses;
147
148 float m_idmass;
149 float m_imass;
150 int m_nvimpulses;
151 int m_ndimpulses;
152 float m_ndamping;
153 float m_ldamping;
154 float m_adamping;
155 float m_matching;
156 float m_maxSelfCollisionImpulse;
157 float m_selfCollisionImpulseFactor;
158 int m_containsAnchor;
159 int m_collide;
160 int m_clusterIndex;
161 };
162
163 enum btSoftJointBodyType
164 {
165 BT_JOINT_SOFT_BODY_CLUSTER = 1,
166 BT_JOINT_RIGID_BODY,
167 BT_JOINT_COLLISION_OBJECT
168 };
169
170 struct btSoftBodyJointData
171 {
172 void *m_bodyA;
173 void *m_bodyB;
174 btVector3FloatData m_refs[2];
175 float m_cfm;
176 float m_erp;
177 float m_split;
178 int m_delete;
179 btVector3FloatData m_relPosition[2]; //linear
180 int m_bodyAtype;
181 int m_bodyBtype;
182 int m_jointType;
183 int m_pad;
184 };
185
187 struct btSoftBodyFloatData
188 {
189 btCollisionObjectFloatData m_collisionObjectData;
190
191 SoftBodyPoseData *m_pose;
192 SoftBodyMaterialData **m_materials;
193 SoftBodyNodeData *m_nodes;
194 SoftBodyLinkData *m_links;
195 SoftBodyFaceData *m_faces;
196 SoftBodyTetraData *m_tetrahedra;
197 SoftRigidAnchorData *m_anchors;
198 SoftBodyClusterData *m_clusters;
199 btSoftBodyJointData *m_joints;
200
201 int m_numMaterials;
202 int m_numNodes;
203 int m_numLinks;
204 int m_numFaces;
205 int m_numTetrahedra;
206 int m_numAnchors;
207 int m_numClusters;
208 int m_numJoints;
209 SoftBodyConfigData m_config;
210 };
211
212 #endif //BT_SOFTBODY_FLOAT_DATA
SoftBodyClusterData::m_framerefs
btVector3FloatData * m_framerefs
Definition: btSoftBodyData.h:140
SoftBodyClusterData::m_numMasses
int m_numMasses
Definition: btSoftBodyData.h:146
SoftBodyLinkData::m_material
SoftBodyMaterialData * m_material
Definition: btSoftBodyData.h:46
SoftBodyConfigData::m_collisionFlags
int m_collisionFlags
Definition: btSoftBodyData.h:108
btSoftBodyFloatData::m_numAnchors
int m_numAnchors
Definition: btSoftBodyData.h:206
btSoftBodyJointData::m_relPosition
btVector3FloatData m_relPosition[2]
Definition: btSoftBodyData.h:179
btSoftBodyJointData::m_bodyA
void * m_bodyA
Definition: btSoftBodyData.h:172
SoftBodyFaceData::m_restArea
float m_restArea
Definition: btSoftBodyData.h:57
SoftBodyConfigData::m_softSoftClusterImpulseSplit
float m_softSoftClusterImpulseSplit
Definition: btSoftBodyData.h:101
SoftBodyTetraData::m_restVolume
float m_restVolume
Definition: btSoftBodyData.h:65
SoftRigidAnchorData::m_c2
float m_c2
Definition: btSoftBodyData.h:78
btSoftBodyFloatData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btSoftBodyData.h:188
SoftRigidAnchorData::m_nodeIndex
int m_nodeIndex
Definition: btSoftBodyData.h:77
SoftBodyClusterData::m_dimpulses
btVector3FloatData m_dimpulses[2]
Definition: btSoftBodyData.h:136
SoftBodyNodeData::m_previousPosition
btVector3FloatData m_previousPosition
Definition: btSoftBodyData.h:34
BT_JOINT_SOFT_BODY_CLUSTER
@ BT_JOINT_SOFT_BODY_CLUSTER
Definition: btSoftBodyData.h:165
btSoftBodyFloatData::m_joints
btSoftBodyJointData * m_joints
Definition: btSoftBodyData.h:199
SoftBodyPoseData::m_bframe
int m_bframe
Definition: btSoftBodyData.h:124
btCollisionObjectFloatData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btCollisionObject.h:639
btSoftBodyJointData::m_split
float m_split
Definition: btSoftBodyData.h:177
SoftBodyConfigData::m_poseMatch
float m_poseMatch
Definition: btSoftBodyData.h:91
btSoftBodyFloatData::m_collisionObjectData
btCollisionObjectFloatData m_collisionObjectData
Definition: btSoftBodyData.h:189
SoftBodyConfigData::m_positionIterations
int m_positionIterations
Definition: btSoftBodyData.h:105
SoftBodyClusterData::m_framexform
btTransformFloatData m_framexform
Definition: btSoftBodyData.h:131
SoftBodyConfigData::m_volume
float m_volume
Definition: btSoftBodyData.h:89
SoftRigidAnchorData::m_rigidBody
btRigidBodyData * m_rigidBody
Definition: btSoftBodyData.h:76
SoftBodyFaceData::m_nodeIndices
int m_nodeIndices[3]
Definition: btSoftBodyData.h:56
SoftBodyNodeData::m_inverseMass
float m_inverseMass
Definition: btSoftBodyData.h:38
btSoftBodyFloatData::m_nodes
SoftBodyNodeData * m_nodes
Definition: btSoftBodyData.h:193
SoftBodyClusterData::m_ndamping
float m_ndamping
Definition: btSoftBodyData.h:152
SoftRigidAnchorData
Definition: btSoftBodyData.h:72
btRigidBody.h
SoftBodyTetraData::m_nodeIndices
int m_nodeIndices[4]
Definition: btSoftBodyData.h:64
SoftBodyLinkData
Definition: btSoftBodyData.h:45
SoftBodyPoseData
Definition: btSoftBodyData.h:112
SoftBodyClusterData::m_collide
int m_collide
Definition: btSoftBodyData.h:159
SoftBodyConfigData::m_velocityIterations
int m_velocityIterations
Definition: btSoftBodyData.h:104
SoftBodyClusterData::m_locii
btMatrix3x3FloatData m_locii
Definition: btSoftBodyData.h:132
SoftBodyClusterData::m_idmass
float m_idmass
Definition: btSoftBodyData.h:148
SoftBodyConfigData::m_softKineticClusterImpulseSplit
float m_softKineticClusterImpulseSplit
Definition: btSoftBodyData.h:100
SoftBodyConfigData::m_drag
float m_drag
Definition: btSoftBodyData.h:86
SoftBodyConfigData::m_baumgarte
float m_baumgarte
Definition: btSoftBodyData.h:84
SoftBodyClusterData::m_nodeIndices
int * m_nodeIndices
Definition: btSoftBodyData.h:141
SoftBodyFaceData::m_material
SoftBodyMaterialData * m_material
Definition: btSoftBodyData.h:55
SoftBodyConfigData::m_softKineticClusterHardness
float m_softKineticClusterHardness
Definition: btSoftBodyData.h:97
SoftBodyConfigData::m_dynamicFriction
float m_dynamicFriction
Definition: btSoftBodyData.h:90
SoftBodyClusterData::m_vimpulses
btVector3FloatData m_vimpulses[2]
Definition: btSoftBodyData.h:135
btSoftBodyJointData::m_jointType
int m_jointType
Definition: btSoftBodyData.h:182
SoftBodyConfigData::m_softRigidClusterImpulseSplit
float m_softRigidClusterImpulseSplit
Definition: btSoftBodyData.h:99
btVector3FloatData
Definition: btVector3.h:1282
btSoftBodyFloatData::m_numFaces
int m_numFaces
Definition: btSoftBodyData.h:204
btSoftBodyJointData::m_bodyBtype
int m_bodyBtype
Definition: btSoftBodyData.h:181
SoftBodyClusterData::m_masses
float * m_masses
Definition: btSoftBodyData.h:142
SoftBodyNodeData::m_accumulatedForce
btVector3FloatData m_accumulatedForce
Definition: btSoftBodyData.h:36
SoftBodyConfigData::m_rigidContactHardness
float m_rigidContactHardness
Definition: btSoftBodyData.h:92
SoftBodyClusterData::m_ldamping
float m_ldamping
Definition: btSoftBodyData.h:153
SoftBodyMaterialData
Definition: btSoftBodyData.h:23
SoftBodyClusterData::m_selfCollisionImpulseFactor
float m_selfCollisionImpulseFactor
Definition: btSoftBodyData.h:157
btSoftBodyJointData::m_cfm
float m_cfm
Definition: btSoftBodyData.h:175
SoftBodyTetraData::m_c2
float m_c2
Definition: btSoftBodyData.h:67
SoftBodyConfigData::m_lift
float m_lift
Definition: btSoftBodyData.h:87
btSoftBodyJointData::m_delete
int m_delete
Definition: btSoftBodyData.h:178
SoftBodyClusterData::m_clusterIndex
int m_clusterIndex
Definition: btSoftBodyData.h:160
SoftBodyConfigData::m_driftIterations
int m_driftIterations
Definition: btSoftBodyData.h:106
SoftBodyNodeData::m_normal
btVector3FloatData m_normal
Definition: btSoftBodyData.h:37
btSoftBodyFloatData::m_anchors
SoftRigidAnchorData * m_anchors
Definition: btSoftBodyData.h:197
btSoftBodyJointData
Definition: btSoftBodyData.h:171
btSoftBodyJointData::m_pad
int m_pad
Definition: btSoftBodyData.h:183
SoftBodyPoseData::m_numPositions
int m_numPositions
Definition: btSoftBodyData.h:120
BT_JOINT_RIGID_BODY
@ BT_JOINT_RIGID_BODY
Definition: btSoftBodyData.h:166
btSoftBodyJointData::m_refs
btVector3FloatData m_refs[2]
Definition: btSoftBodyData.h:174
SoftBodyClusterData::m_nvimpulses
int m_nvimpulses
Definition: btSoftBodyData.h:150
btRigidBodyData
#define btRigidBodyData
Definition: btRigidBody.h:35
SoftBodyClusterData::m_containsAnchor
int m_containsAnchor
Definition: btSoftBodyData.h:158
SoftBodyClusterData::m_ndimpulses
int m_ndimpulses
Definition: btSoftBodyData.h:151
btSoftBodyFloatData::m_config
SoftBodyConfigData m_config
Definition: btSoftBodyData.h:209
SoftBodyConfigData::m_kineticContactHardness
float m_kineticContactHardness
Definition: btSoftBodyData.h:93
SoftBodyConfigData::m_timeScale
float m_timeScale
Definition: btSoftBodyData.h:103
SoftBodyPoseData::m_pad
int m_pad
Definition: btSoftBodyData.h:126
SoftBodyMaterialData::m_linearStiffness
float m_linearStiffness
Definition: btSoftBodyData.h:24
SoftBodyConfigData::m_clusterIterations
int m_clusterIterations
Definition: btSoftBodyData.h:107
SoftBodyConfigData::m_pressure
float m_pressure
Definition: btSoftBodyData.h:88
SoftBodyClusterData::m_numFrameRefs
int m_numFrameRefs
Definition: btSoftBodyData.h:144
SoftBodyPoseData::m_scale
btMatrix3x3FloatData m_scale
Definition: btSoftBodyData.h:114
SoftBodyNodeData::m_velocity
btVector3FloatData m_velocity
Definition: btSoftBodyData.h:35
SoftBodyTetraData::m_material
SoftBodyMaterialData * m_material
Definition: btSoftBodyData.h:63
SoftBodyClusterData::m_lv
btVector3FloatData m_lv
Definition: btSoftBodyData.h:137
SoftRigidAnchorData::m_c1
btVector3FloatData m_c1
Definition: btSoftBodyData.h:74
SoftBodyFaceData::m_normal
btVector3FloatData m_normal
Definition: btSoftBodyData.h:54
SoftBodyTetraData::m_c1
float m_c1
Definition: btSoftBodyData.h:66
SoftBodyNodeData::m_position
btVector3FloatData m_position
Definition: btSoftBodyData.h:33
SoftBodyMaterialData::m_flags
int m_flags
Definition: btSoftBodyData.h:27
SoftBodyNodeData
Definition: btSoftBodyData.h:31
SoftBodyNodeData::m_area
float m_area
Definition: btSoftBodyData.h:39
SoftBodyLinkData::m_bbending
int m_bbending
Definition: btSoftBodyData.h:49
btSoftJointBodyType
btSoftJointBodyType
Definition: btSoftBodyData.h:164
SoftBodyLinkData::m_nodeIndices
int m_nodeIndices[2]
Definition: btSoftBodyData.h:47
SoftBodyClusterData::m_invwi
btMatrix3x3FloatData m_invwi
Definition: btSoftBodyData.h:133
btSoftBodyFloatData::m_numNodes
int m_numNodes
Definition: btSoftBodyData.h:202
SoftBodyPoseData::m_rot
btMatrix3x3FloatData m_rot
Definition: btSoftBodyData.h:113
btSoftBodyFloatData::m_pose
SoftBodyPoseData * m_pose
Definition: btSoftBodyData.h:191
btSoftBodyFloatData::m_materials
SoftBodyMaterialData ** m_materials
Definition: btSoftBodyData.h:192
btSoftBodyJointData::m_erp
float m_erp
Definition: btSoftBodyData.h:176
SoftBodyPoseData::m_aqq
btMatrix3x3FloatData m_aqq
Definition: btSoftBodyData.h:115
SoftBodyFaceData
Definition: btSoftBodyData.h:53
btSoftBodyFloatData::m_numLinks
int m_numLinks
Definition: btSoftBodyData.h:203
BT_JOINT_COLLISION_OBJECT
@ BT_JOINT_COLLISION_OBJECT
Definition: btSoftBodyData.h:167
btTransformFloatData
for serialization
Definition: btTransform.h:245
btSoftBodyFloatData::m_clusters
SoftBodyClusterData * m_clusters
Definition: btSoftBodyData.h:198
SoftBodyClusterData::m_imass
float m_imass
Definition: btSoftBodyData.h:149
SoftBodyConfigData::m_softRigidClusterHardness
float m_softRigidClusterHardness
Definition: btSoftBodyData.h:96
SoftBodyClusterData::m_com
btVector3FloatData m_com
Definition: btSoftBodyData.h:134
SoftBodyClusterData
Definition: btSoftBodyData.h:130
SoftBodyConfigData::m_softSoftClusterHardness
float m_softSoftClusterHardness
Definition: btSoftBodyData.h:98
btSoftBodyFloatData::m_faces
SoftBodyFaceData * m_faces
Definition: btSoftBodyData.h:195
SoftBodyPoseData::m_bvolume
int m_bvolume
Definition: btSoftBodyData.h:123
SoftBodyPoseData::m_numWeigts
int m_numWeigts
Definition: btSoftBodyData.h:121
SoftBodyPoseData::m_positions
btVector3FloatData * m_positions
Definition: btSoftBodyData.h:118
SoftBodyConfigData::m_anchorHardness
float m_anchorHardness
Definition: btSoftBodyData.h:95
SoftRigidAnchorData::m_localFrame
btVector3FloatData m_localFrame
Definition: btSoftBodyData.h:75
SoftBodyPoseData::m_restVolume
float m_restVolume
Definition: btSoftBodyData.h:125
SoftBodyClusterData::m_numNodes
int m_numNodes
Definition: btSoftBodyData.h:145
SoftBodyConfigData::m_softContactHardness
float m_softContactHardness
Definition: btSoftBodyData.h:94
btSoftBodyFloatData::m_tetrahedra
SoftBodyTetraData * m_tetrahedra
Definition: btSoftBodyData.h:196
SoftBodyNodeData::m_material
SoftBodyMaterialData * m_material
Definition: btSoftBodyData.h:32
SoftBodyConfigData
Definition: btSoftBodyData.h:82
btCollisionObject.h
SoftBodyConfigData::m_maxVolume
float m_maxVolume
Definition: btSoftBodyData.h:102
SoftBodyTetraData
Definition: btSoftBodyData.h:61
SoftBodyClusterData::m_adamping
float m_adamping
Definition: btSoftBodyData.h:154
SoftBodyLinkData::m_restLength
float m_restLength
Definition: btSoftBodyData.h:48
SoftBodyNodeData::m_pad
int m_pad
Definition: btSoftBodyData.h:41
btSoftBodyFloatData::m_numTetrahedra
int m_numTetrahedra
Definition: btSoftBodyData.h:205
SoftBodyPoseData::m_com
btVector3FloatData m_com
Definition: btSoftBodyData.h:116
SoftBodyNodeData::m_attach
int m_attach
Definition: btSoftBodyData.h:40
SoftBodyClusterData::m_matching
float m_matching
Definition: btSoftBodyData.h:155
btSoftBodyJointData::m_bodyAtype
int m_bodyAtype
Definition: btSoftBodyData.h:180
SoftBodyPoseData::m_weights
float * m_weights
Definition: btSoftBodyData.h:119
btMatrix3x3FloatData
for serialization
Definition: btMatrix3x3.h:1375
SoftBodyConfigData::m_damping
float m_damping
Definition: btSoftBodyData.h:85
SoftRigidAnchorData::m_c0
btMatrix3x3FloatData m_c0
Definition: btSoftBodyData.h:73
SoftBodyClusterData::m_av
btVector3FloatData m_av
Definition: btSoftBodyData.h:138
btSoftBodyFloatData::m_numClusters
int m_numClusters
Definition: btSoftBodyData.h:207
SoftBodyMaterialData::m_volumeStiffness
float m_volumeStiffness
Definition: btSoftBodyData.h:26
SoftBodyTetraData::m_pad
int m_pad
Definition: btSoftBodyData.h:68
SoftBodyTetraData::m_c0
btVector3FloatData m_c0[4]
Definition: btSoftBodyData.h:62
btSoftBodyFloatData::m_numMaterials
int m_numMaterials
Definition: btSoftBodyData.h:201
btSoftBodyFloatData::m_links
SoftBodyLinkData * m_links
Definition: btSoftBodyData.h:194
SoftBodyConfigData::m_aeroModel
int m_aeroModel
Definition: btSoftBodyData.h:83
SoftBodyMaterialData::m_angularStiffness
float m_angularStiffness
Definition: btSoftBodyData.h:25
SoftBodyClusterData::m_maxSelfCollisionImpulse
float m_maxSelfCollisionImpulse
Definition: btSoftBodyData.h:156
btSoftBodyJointData::m_bodyB
void * m_bodyB
Definition: btSoftBodyData.h:173
btSoftBodyFloatData::m_numJoints
int m_numJoints
Definition: btSoftBodyData.h:208