Browse Source

Added functions to get trimesh info

Andrea Catania 7 years ago
parent
commit
0b7c4db5ee
2 changed files with 24 additions and 0 deletions
  1. 20 0
      core/math/triangle_mesh.cpp
  2. 4 0
      core/math/triangle_mesh.h

+ 20 - 0
core/math/triangle_mesh.cpp

@@ -88,6 +88,26 @@ int TriangleMesh::_create_bvh(BVH *p_bvh, BVH **p_bb, int p_from, int p_size, in
 	return index;
 	return index;
 }
 }
 
 
+void TriangleMesh::get_indices(PoolVector<int> *r_triangles_indices) const {
+
+	if (!valid)
+		return;
+
+	const int triangles_num = triangles.size();
+
+	// Parse vertices indices
+	PoolVector<Triangle>::Read triangles_read = triangles.read();
+
+	r_triangles_indices->resize(triangles_num * 3);
+	PoolVector<int>::Write r_indices_write = r_triangles_indices->write();
+
+	for (int i = 0; i < triangles_num; ++i) {
+		r_indices_write[3 * i + 0] = triangles_read[i].indices[0];
+		r_indices_write[3 * i + 1] = triangles_read[i].indices[1];
+		r_indices_write[3 * i + 2] = triangles_read[i].indices[2];
+	}
+}
+
 void TriangleMesh::create(const PoolVector<Vector3> &p_faces) {
 void TriangleMesh::create(const PoolVector<Vector3> &p_faces) {
 
 
 	valid = false;
 	valid = false;

+ 4 - 0
core/math/triangle_mesh.h

@@ -92,6 +92,10 @@ public:
 	Vector3 get_area_normal(const AABB &p_aabb) const;
 	Vector3 get_area_normal(const AABB &p_aabb) const;
 	PoolVector<Face3> get_faces() const;
 	PoolVector<Face3> get_faces() const;
 
 
+	PoolVector<Triangle> get_triangles() const { return triangles; }
+	PoolVector<Vector3> get_vertices() const { return vertices; }
+	void get_indices(PoolVector<int> *p_triangles_indices) const;
+
 	void create(const PoolVector<Vector3> &p_faces);
 	void create(const PoolVector<Vector3> &p_faces);
 	TriangleMesh();
 	TriangleMesh();
 };
 };