4 #include <KrisLibrary/utils/AnyValue.h> 5 #include "CollisionMesh.h" 12 namespace Geometry {
class CollisionPointCloud;
class CollisionImplicitSurface;
class ConvexHull3D;
class CollisionConvexHull3D; }
21 class AnyDistanceQuerySettings;
22 class AnyDistanceQueryResult;
23 class AnyContactsQuerySettings;
24 class AnyContactsQueryResult;
48 enum Type { Primitive, TriangleMesh, PointCloud, ImplicitSurface, ConvexHull, Group };
61 static const char* TypeName(
Type type);
62 const char* TypeName()
const {
return AnyGeometry3D::TypeName(type); }
68 const vector<AnyGeometry3D>& AsGroup()
const;
74 vector<AnyGeometry3D>& AsGroup();
77 static bool CanLoadExt(
const char* ext);
78 static bool CanSaveExt(
const char* ext);
79 bool Load(
const char* fn);
80 bool Save(
const char* fn)
const;
81 bool Load(istream& in);
82 bool Save(ostream& out)
const;
86 size_t NumElements()
const;
90 void Transform(
const Matrix4& mat);
91 void Merge(
const vector<AnyGeometry3D>& geoms);
130 void InitCollisionData();
133 void ReinitCollisionData();
143 const vector<AnyCollisionGeometry3D>& GroupCollisionData()
const;
149 vector<AnyCollisionGeometry3D>& GroupCollisionData();
167 AABB3D GetAABBTight()
const;
179 bool Collides(
AnyCollisionGeometry3D& geom,vector<int>& elements1,vector<int>& elements2,
size_t maxcollisions=INT_MAX);
181 Real Distance(
const Vector3& pt);
185 bool WithinDistance(
AnyCollisionGeometry3D& geom,Real d,vector<int>& elements1,vector<int>& elements2,
size_t maxcollisions=INT_MAX);
187 bool RayCast(
const Ray3D& r,Real* distance=NULL,
int* element=NULL);
219 bool WithinDistance(Real d);
221 bool WithinDistanceAll(Real d);
223 Real PenetrationDepth();
226 Real Distance(Real absErr,Real relErr,Real bound=Inf);
229 void InteractingPairs(std::vector<int>& t1,std::vector<int>& t2)
const;
232 void InteractingPoints(std::vector<Vector3>& p1,std::vector<Vector3>& p2)
const;
237 std::vector<int> elements1,elements2;
238 std::vector<Vector3> points1,points2;
void GetBB(const CollisionMesh &m, Box3D &bb)
Returns the bounding box containing m.
Definition: CollisionMesh.cpp:1856
bool CollisionDataInitialized() const
Returns true if the collision data is initialized.
Definition: AnyGeometry.h:135
A generic 3D geometric primitive class.
Definition: geometry3d.h:33
Real relErr
Allowable relative and absolute errors.
Definition: AnyGeometry.h:246
Vector3 dir1
Definition: AnyGeometry.h:266
The namespace for all classes/functions in the Meshing package.
Definition: AnyGeometry.h:11
int elem1
The elements defining the closest points on the geometries.
Definition: AnyGeometry.h:260
bool hasPenetration
flags indicating which elements are filled out
Definition: AnyGeometry.h:256
A class for coloring, texturing, and drawing meshes in OpenGL.
Definition: GeometryAppearance.h:53
A 3D vector class.
Definition: math3d/primitives.h:136
Definition: CollisionMesh.h:102
AnyValue collisionData
Definition: AnyGeometry.h:196
A polymorphic container class that can contain data of any type.
Definition: AnyValue.h:25
A 3D point cloud class.
Definition: PointCloud.h:50
Definition: rayprimitives.h:132
A 3D axis-aligned bounding box.
Definition: AABB3D.h:13
AnyValue data
The data, according to the type.
Definition: AnyGeometry.h:96
An AnyGeometry with collision detection information.
Definition: AnyGeometry.h:112
Real d
The distance, with negative values indicating penetration if hasPenetration=true. Otherwise...
Definition: AnyGeometry.h:258
A 4x4 matrix class.
Definition: math3d/primitives.h:626
Definition: AnyGeometry.h:251
Contains all the definitions in the Math3D package.
Definition: AnyGeometry.h:13
A triangle mesh along with PQP bounding volume structures that enable fast collision and other proxim...
Definition: CollisionMesh.h:26
Real margin
Amount by which the underlying geometry is "fattened".
Definition: AnyGeometry.h:198
A class that stores information regarding a collision query. May be slightly faster than running indi...
Definition: AnyGeometry.h:207
Contains all definitions in the GLDraw package.
Definition: AnyGeometry.h:14
Vector3 cp1
The closest points on the two geometries, in world coordinates.
Definition: AnyGeometry.h:262
A class that stores any kind of geometry we've defined.
Definition: AnyGeometry.h:37
RigidTransform currentTransform
Definition: AnyGeometry.h:201
Real upperBound
An upper bound on the distance, and if the two objects are farther than this distance the computation...
Definition: AnyGeometry.h:248
The collision data class for ConvexHull3D that contains the solid3 data structure moved by some rigid...
Definition: ConvexHull3D.h:124
An implicit surface (usually signed-distance function) with a fast collision detection data structure...
Definition: CollisionImplicitSurface.h:16
A basic triangle mesh.
Definition: TriMesh.h:41
Type
Definition: AnyGeometry.h:48
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
3D-D convex hull routines
void ClearCollisionData()
Clears the current collision data.
Definition: AnyGeometry.h:137
vector< int > group_elem1
If the item is a group, this vector will recursively define the sub-elements.
Definition: AnyGeometry.h:268
void CollideAll(const CollisionMesh &m, const Sphere3D &s, vector< int > &tris, int max)
Computes a list of triangles that overlap the geometry.
Definition: CollisionMesh.cpp:1459
A 3D array over an axis-aligned 3D volume, containing Real values.
Definition: AnyGeometry.h:11
A 3D convex hull class.
Definition: ConvexHull3D.h:62
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
Definition: AnyGeometry.h:241
Contains all definitions in the Geometry package.
Definition: AnyGeometry.cpp:26
Definition: PropertyMap.cpp:9
AnyValue appearanceData
Optional appearance data, according to the type.
Definition: AnyGeometry.h:98