Line data Source code
1 : /* Copyright (c) 2016-2017, Human Brain Project
2 : * Ahmet.Bilgili@epfl.ch
3 : */
4 :
5 : #include "ClipPlanes.h"
6 :
7 : #include <vmmlib/aabb.hpp>
8 :
9 : namespace lexis
10 : {
11 : namespace render
12 : {
13 :
14 1 : ClipPlanes::ClipPlanes()
15 : {
16 1 : reset();
17 1 : }
18 :
19 3 : bool ClipPlanes::isEmpty() const
20 : {
21 3 : return getPlanes().empty();
22 : }
23 :
24 1 : void ClipPlanes::clear()
25 : {
26 1 : getPlanes().clear();
27 1 : }
28 :
29 2 : void ClipPlanes::reset()
30 : {
31 16 : setPlanes( {
32 : { { -1.0f, 0.0f, 0.0f }, 0.5f }, // +X plane
33 : { { 1.0f, 0.0f, 0.0f }, 0.5f }, // -X plane
34 : { { 0.0f, -1.0f, 0.0f }, 0.5f }, // +Y plane
35 : { { 0.0f, 1.0f, 0.0f }, 0.5f }, // -Y plane
36 : { { 0.0f, 0.0f, -1.0f }, 0.5f }, // +Z plane
37 : { { 0.0f, 0.0f, 1.0f }, 0.5f } // -Z Plane
38 14 : } );
39 2 : }
40 :
41 6 : bool ClipPlanes::isOutside( const vmml::AABBf& worldBox ) const
42 : {
43 30 : for( const auto& plane : getPlanes() )
44 : {
45 26 : const float* normal = plane.getNormal();
46 26 : if( worldBox.isInFront( { normal[ 0 ], normal[ 1 ], normal[ 2 ], plane.getD() } ))
47 2 : return true;
48 : }
49 :
50 4 : return false;
51 : }
52 :
53 : }
54 12 : }
|