KrisLibrary  1.0.0
CollisionPointCloud.h
1 #ifndef COLLISION_POINT_CLOUD_H
2 #define COLLISION_POINT_CLOUD_H
3 
4 #include <KrisLibrary/meshing/PointCloud.h>
5 #include <KrisLibrary/math3d/geometry3d.h>
6 #include <memory>
7 #include <limits>
8 #include "GridSubdivision.h"
9 #include "Octree.h"
10 
11 namespace Geometry {
12 
13  using namespace Math3D;
14 
21 {
22  public:
24  explicit CollisionPointCloud(const Meshing::PointCloud3D& pc);
29  void InitCollisions();
30 
36  GridSubdivision3D grid;
37  shared_ptr<OctreePointSet> octree;
38 
40  Real maxRadius;
41 };
42 
44 void GetBB(const CollisionPointCloud& pc,Box3D& b);
45 
49 bool WithinDistance(const CollisionPointCloud& pc,const GeometricPrimitive3D& g,Real tol);
51 Real Distance(const CollisionPointCloud& pc,const Vector3& pt);
56 Real Distance(const CollisionPointCloud& pc,const Vector3& pt,int& closestPoint,Real upperBound);
59 Real Distance(const CollisionPointCloud& pc,const GeometricPrimitive3D& g);
65 Real Distance(const CollisionPointCloud& pc,const GeometricPrimitive3D& g,int& closestPoint,Real upperBound=Inf);
70 Real Distance(const CollisionPointCloud& pc1,const CollisionPointCloud& pc2,int& closestPoint1,int& closestPoint2,Real upperBound=Inf);
74 void NearbyPoints(const CollisionPointCloud& pc,const GeometricPrimitive3D& g,Real tol,std::vector<int>& points,size_t maxContacts=std::numeric_limits<size_t>::max());
75 
79 bool Collides(const CollisionPointCloud& pc1,const CollisionPointCloud& pc2,Real margin,std::vector<int>& points1,std::vector<int>& points2,size_t maxContacts=1);
80 
84 int RayCast(const CollisionPointCloud& pc,Real rad,const Ray3D& r,Vector3& pt);
85 
88 int RayCastLocal(const CollisionPointCloud& pc,Real rad,const Ray3D& r,Vector3& pt);
89 
90 } //namespace Geometry
91 
92 #endif
void GetBB(const CollisionMesh &m, Box3D &bb)
Returns the bounding box containing m.
Definition: CollisionMesh.cpp:1856
A generic 3D geometric primitive class.
Definition: geometry3d.h:33
Real Distance(const CollisionImplicitSurface &s, const Vector3 &pt)
Definition: CollisionImplicitSurface.cpp:140
A 3D vector class.
Definition: math3d/primitives.h:136
A 3D point cloud class.
Definition: PointCloud.h:50
A 3D axis-aligned bounding box.
Definition: AABB3D.h:13
int radiusIndex
the index of point radii, or -1 if not defined
Definition: CollisionPointCloud.h:39
A rigid-body transformation.
Definition: math3d/primitives.h:820
AABB3D bblocal
The local bounding box of the point cloud.
Definition: CollisionPointCloud.h:32
int RayCastLocal(const CollisionMesh &mesh, const Ray3D &r, Vector3 &pt)
Definition: CollisionMesh.cpp:1848
Real maxRadius
the maximum over all point radii
Definition: CollisionPointCloud.h:40
Contains all the definitions in the Math3D package.
Definition: AnyGeometry.h:13
RigidTransform currentTransform
The transformation of the point cloud in space.
Definition: CollisionPointCloud.h:34
Real gridResolution
default value is 0, which auto-determines from point cloud
Definition: CollisionPointCloud.h:35
void NearbyPoints(const CollisionPointCloud &pc, const GeometricPrimitive3D &g, Real tol, std::vector< int > &pointIds, size_t maxContacts)
Definition: CollisionPointCloud.cpp:364
A point cloud with a fast collision detection data structure.
Definition: CollisionPointCloud.h:20
Real RayCast(const Meshing::VolumeGrid &grid, const Ray3D &ray, Real levelSet, Real tmax)
Definition: CollisionImplicitSurface.cpp:527
A 3D boxThe box is the unit cube [0,1]^3 set in the scaled local coordinate system. That is, one corner is at the origin, and it has dimensions [dims.x,dims.y,dims.z] in the coordinates given by {xbasis,ybasis,zbasis}.
Definition: Box3D.h:21
bool Collides(const CollisionImplicitSurface &s, const CollisionPointCloud &pc, Real margin, vector< int > &collidingPoints, size_t maxContacts)
Definition: CollisionImplicitSurface.cpp:195
Contains all definitions in the Geometry package.
Definition: AnyGeometry.cpp:26
A grid with a list of arbitrary objects (given by void pointers)
Definition: GridSubdivision.h:98
Definition: Ray3D.h:8