1 // Copyright (C) 2002-2012 Nikolaus Gebhardt
2 // This file is part of the "Irrlicht Engine".
3 // For conditions of distribution and use, see copyright notice in irrlicht.h
4 
5 #include "CTriangleBBSelector.h"
6 #include "ISceneNode.h"
7 
8 namespace irr
9 {
10 namespace scene
11 {
12 
13 //! constructor
CTriangleBBSelector(ISceneNode * node)14 CTriangleBBSelector::CTriangleBBSelector(ISceneNode* node)
15 : CTriangleSelector(node)
16 {
17 	#ifdef _DEBUG
18 	setDebugName("CTriangleBBSelector");
19 	#endif
20 
21 	Triangles.set_used(12); // a box has 12 triangles.
22 }
23 
24 
25 
26 //! Gets all triangles.
getTriangles(core::triangle3df * triangles,s32 arraySize,s32 & outTriangleCount,const core::matrix4 * transform) const27 void CTriangleBBSelector::getTriangles(core::triangle3df* triangles,
28 					s32 arraySize, s32& outTriangleCount,
29 					const core::matrix4* transform) const
30 {
31 	if (!SceneNode)
32 		return;
33 
34 	// construct triangles
35 	const core::aabbox3d<f32>& box = SceneNode->getBoundingBox();
36 	core::vector3df edges[8];
37 	box.getEdges(edges);
38 
39 	Triangles[0].set( edges[3], edges[0], edges[2]);
40 	Triangles[1].set( edges[3], edges[1], edges[0]);
41 
42 	Triangles[2].set( edges[3], edges[2], edges[7]);
43 	Triangles[3].set( edges[7], edges[2], edges[6]);
44 
45 	Triangles[4].set( edges[7], edges[6], edges[4]);
46 	Triangles[5].set( edges[5], edges[7], edges[4]);
47 
48 	Triangles[6].set( edges[5], edges[4], edges[0]);
49 	Triangles[7].set( edges[5], edges[0], edges[1]);
50 
51 	Triangles[8].set( edges[1], edges[3], edges[7]);
52 	Triangles[9].set( edges[1], edges[7], edges[5]);
53 
54 	Triangles[10].set(edges[0], edges[6], edges[2]);
55 	Triangles[11].set(edges[0], edges[4], edges[6]);
56 
57 	// call parent
58 	CTriangleSelector::getTriangles(triangles, arraySize, outTriangleCount,	transform);
59 }
60 
getTriangles(core::triangle3df * triangles,s32 arraySize,s32 & outTriangleCount,const core::aabbox3d<f32> & box,const core::matrix4 * transform) const61 void CTriangleBBSelector::getTriangles(core::triangle3df* triangles,
62 					s32 arraySize, s32& outTriangleCount,
63 					const core::aabbox3d<f32>& box,
64 					const core::matrix4* transform) const
65 {
66 	return getTriangles(triangles, arraySize, outTriangleCount, transform);
67 }
68 
getTriangles(core::triangle3df * triangles,s32 arraySize,s32 & outTriangleCount,const core::line3d<f32> & line,const core::matrix4 * transform) const69 void CTriangleBBSelector::getTriangles(core::triangle3df* triangles,
70 					s32 arraySize, s32& outTriangleCount,
71 					const core::line3d<f32>& line,
72 					const core::matrix4* transform) const
73 {
74 	return getTriangles(triangles, arraySize, outTriangleCount, transform);
75 }
76 
77 
78 } // end namespace scene
79 } // end namespace irr
80 
81