00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "bulletConvexPointCloudShape.h"
00016
00017 #include "geomVertexReader.h"
00018
00019 TypeHandle BulletConvexPointCloudShape::_type_handle;
00020
00021
00022
00023
00024
00025
00026 BulletConvexPointCloudShape::
00027 BulletConvexPointCloudShape(const PTA_LVecBase3 &points, LVecBase3 scale) {
00028
00029 btVector3 btScale = LVecBase3_to_btVector3(scale);
00030
00031
00032 btVector3 *btPoints = new btVector3[points.size()];
00033
00034 int i = 0;
00035 PTA_LVecBase3::const_iterator it;
00036 for (it=points.begin(); it!=points.end(); it++) {
00037 btPoints[i] = LVecBase3_to_btVector3(*it);
00038 i++;
00039 }
00040
00041
00042 _shape = new btConvexPointCloudShape(btPoints, points.size(), btScale);
00043 _shape->setUserPointer(this);
00044 }
00045
00046
00047
00048
00049
00050
00051 btCollisionShape *BulletConvexPointCloudShape::
00052 ptr() const {
00053
00054 return _shape;
00055 }
00056
00057
00058
00059
00060
00061
00062 BulletConvexPointCloudShape::
00063 BulletConvexPointCloudShape(const Geom *geom, LVecBase3 scale) {
00064
00065 btVector3 btScale = LVecBase3_to_btVector3(scale);
00066
00067
00068 pvector<LPoint3> points;
00069
00070 CPT(GeomVertexData) vdata = geom->get_vertex_data();
00071 GeomVertexReader reader = GeomVertexReader(vdata, InternalName::get_vertex());
00072
00073 while (!reader.is_at_end()) {
00074 points.push_back(reader.get_data3());
00075 }
00076
00077
00078 btVector3 *btPoints = new btVector3[points.size()];
00079
00080 int i = 0;
00081 pvector<LPoint3>::const_iterator it;
00082 for (it=points.begin(); it!=points.end(); it++) {
00083 btPoints[i] = LVecBase3_to_btVector3(*it);
00084 i++;
00085 }
00086
00087
00088 _shape = new btConvexPointCloudShape(btPoints, points.size(), btScale);
00089 _shape->setUserPointer(this);
00090 }
00091