/usr/include/choreonoid-1.1/cnoid/src/Collision/CollisionPairInserter.h is in libcnoid-dev 1.1.0+dfsg-6.1+b4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | #ifndef CNOID_COLLISION_COLLISION_PAIR_INSERTER_H_INCLUDED
#define CNOID_COLLISION_COLLISION_PAIR_INSERTER_H_INCLUDED
#include "CollisionData.h"
#include <vector>
namespace Opcode {
class AABBCollisionNode;
class MeshInterface;
}
namespace cnoid {
class CollisionPairInserter
{
public:
CollisionPairInserter();
~CollisionPairInserter();
void clear(){
cdContact.clear();
}
int detectTriTriOverlap(
const Vector3& P1,
const Vector3& P2,
const Vector3& P3,
const Vector3& Q1,
const Vector3& Q2,
const Vector3& Q3,
collision_data* col_p);
int apply(const Opcode::AABBCollisionNode* b1,
const Opcode::AABBCollisionNode* b2,
int id1, int id2,
int num_of_i_points,
Vector3 i_points[4],
Vector3& n_vector,
double depth,
Vector3& n1,
Vector3& m1,
int ctype,
Opcode::MeshInterface* mesh1,
Opcode::MeshInterface* mesh2);
inline std::vector<collision_data>& collisions() {
return cdContact;
}
Matrix3 CD_Rot1;
Vector3 CD_Trans1;
double CD_s1;
Matrix3 CD_Rot2;
Vector3 CD_Trans2;
double CD_s2;
std::vector<collision_data> cdContact;
private:
class tri
{
public:
int id;
Vector3 p1, p2, p3;
};
class col_tri
{
public:
int status; // 0: unvisited, 1: visited, 2: included in the convex neighbor
Vector3 p1, p2, p3;
Vector3 n;
};
static void copy_tri(col_tri* t1, tri* t2);
static void copy_tri(col_tri* t1, col_tri* t2);
static void calc_normal_vector(col_tri* t);
static int is_convex_neighbor(col_tri* t1, col_tri* t2);
static int identical_ver(const Vector3& v1, const Vector3& v2);
static int is_neighboring_triangle(col_tri* t1, col_tri* t2);
static void get_neighboring_triangles(
col_tri* tri_convex_neighbor, col_tri* tri_neighbor,
int* start_tri, int* end_tri, int num_tri);
static int get_triangles_in_convex_neighbor(
tri* root, col_tri* tri_convex_neighbor, col_tri* tri_neighbor,
int num_tri, int max_num);
static int get_triangles_in_convex_neighbor(
tri* root, col_tri* tri_convex_neighbor, col_tri* tri_neighbor, int num_tri);
static void get_triangles_in_neighbor(
col_tri* neighbor_tris,
int* n,
const Opcode::AABBCollisionNode* root,
Opcode::MeshInterface* mesh);
static int count_num_of_triangles(const Opcode::AABBCollisionNode* root);
void examine_normal_vector(
const Opcode::AABBCollisionNode* b1,
const Opcode::AABBCollisionNode* b2,
int ctype,
Opcode::MeshInterface* mesh1,
Opcode::MeshInterface* mesh2);
void check_separability(
const Opcode::AABBCollisionNode* b1,
const Opcode::AABBCollisionNode* root1, int num_tri1,
const Opcode::AABBCollisionNode* b2,
const Opcode::AABBCollisionNode* root2, int num_tri2,
int ctype,
Opcode::MeshInterface* mesh1, Opcode::MeshInterface* mesh2);
void find_signed_distance(
Vector3 &signed_distance, col_tri *trp, int nth, int ctype, int obj);
void find_signed_distance(
Vector3& signed_distance, const Vector3& vert, int nth, int ctype, int obj);
void find_signed_distance(
Vector3& signed_distance,
const Opcode::AABBCollisionNode* b1,
const Opcode::AABBCollisionNode* root,
int num_tri,
int contactIndex,
int ctype,
int obj,
Opcode::MeshInterface* mesh);
int new_point_test(int k);
};
}
#endif
|