Panda3D

bulletConvexPointCloudShape.cxx

00001 // Filename: bulletConvexPointCloudShape.cxx
00002 // Created by:  enn0x (30Jan10)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00008 //
00009 // All use of this software is subject to the terms of the revised BSD
00010 // license.  You should have received a copy of this license along
00011 // with this source code in a file named "LICENSE."
00012 //
00013 ////////////////////////////////////////////////////////////////////
00014 
00015 #include "bulletConvexPointCloudShape.h"
00016 
00017 #include "geomVertexReader.h"
00018 
00019 TypeHandle BulletConvexPointCloudShape::_type_handle;
00020 
00021 ////////////////////////////////////////////////////////////////////
00022 //     Function: BulletConvexPointCloudShape::Constructor
00023 //       Access: Published
00024 //  Description:
00025 ////////////////////////////////////////////////////////////////////
00026 BulletConvexPointCloudShape::
00027 BulletConvexPointCloudShape(const PTA_LVecBase3 &points, LVecBase3 scale) {
00028 
00029   btVector3 btScale = LVecBase3_to_btVector3(scale);
00030 
00031   // Convert points
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   // Create shape
00042   _shape = new btConvexPointCloudShape(btPoints, points.size(), btScale);
00043   _shape->setUserPointer(this);
00044 }
00045 
00046 ////////////////////////////////////////////////////////////////////
00047 //     Function: BulletConvexPointCloudShape::ptr
00048 //       Access: Public
00049 //  Description:
00050 ////////////////////////////////////////////////////////////////////
00051 btCollisionShape *BulletConvexPointCloudShape::
00052 ptr() const {
00053 
00054   return _shape;
00055 }
00056 
00057 ////////////////////////////////////////////////////////////////////
00058 //     Function: BulletConvexPointCloudShape::Constructor
00059 //       Access: Published
00060 //  Description:
00061 ////////////////////////////////////////////////////////////////////
00062 BulletConvexPointCloudShape::
00063 BulletConvexPointCloudShape(const Geom *geom, LVecBase3 scale) {
00064 
00065   btVector3 btScale = LVecBase3_to_btVector3(scale);
00066 
00067   // Collect points
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   // Convert points
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   // Create
00088   _shape = new btConvexPointCloudShape(btPoints, points.size(), btScale);
00089   _shape->setUserPointer(this);
00090 }
00091 
 All Classes Functions Variables Enumerations