open_iA  2019.12
A tool for the visual analysis and processing of volumetric datasets, with a focus on industrial computed tomography.
Public Member Functions | Public Attributes | List of all members
iABSPNode Class Reference

Class representing a BSP-tree node. AABB specified BSP-tree node. More...

#include <iABSPTree.h>

Collaboration diagram for iABSPNode:

Public Member Functions

int axisInd () const
 
int DistributePrims (int &level, int &max_level, iAaabb &m_aabb, std::vector< iABSPNode * > &nodes, std::vector< unsigned int > &tri_ind, std::vector< iATriPrim * > &parent_tris, unsigned int tri_start_ind)
 Splits current node's AABB. More...
 
int DistributePrimsSAH (int &level, int &max_level, iAaabb &m_aabb, std::vector< iABSPNode * > &nodes, std::vector< unsigned int > &tri_ind, std::vector< iATriPrim * > &parent_tris, unsigned int tri_start_ind)
 
iABSPNodeget_left (const std::vector< iABSPNode * > &nodes)
 
iABSPNodeget_left (std::vector< iABSPNode * > &nodes)
 
iABSPNodeget_right (const std::vector< iABSPNode * > &nodes)
 
iABSPNodeget_right (std::vector< iABSPNode * > &nodes)
 
bool has_left () const
 
bool has_right () const
 
 iABSPNode ()
 
bool isLeaf () const
 
unsigned int offset ()
 
void set_has_left (bool has)
 
void set_has_right (bool has)
 
void set_offset (unsigned int val)
 
void set_splitCoord (float val)
 
void set_tri_count (unsigned int val)
 
void set_tri_start (unsigned int val)
 
void setAxisInd (int index)
 
void setLeaf (bool a_isLeaf)
 
int Split (iAaabb const &p_aabb, iAaabb &l_aabb, iAaabb &r_aabb)
 Splits current node's AABB by maximum dimension. More...
 
float & splitCoord ()
 
int SplitSAH (iAaabb &p_aabb, iAaabb &l_aabb, iAaabb &r_aabb, unsigned int axis_index, float bound)
 
unsigned int tri_count ()
 
unsigned int tri_start ()
 
 ~iABSPNode ()
 

Public Attributes

unsigned int internal1
 
unsigned int internal2
 shared data, depends if node is leaf or not More...
 
unsigned int masked_vars
 Is this node a leaf-node first bit – is leaf, has left, has right, else – axis index. More...
 

Detailed Description

Class representing a BSP-tree node. AABB specified BSP-tree node.

Constructor & Destructor Documentation

◆ iABSPNode()

iABSPNode::iABSPNode ( )
inline

◆ ~iABSPNode()

iABSPNode::~iABSPNode ( )
inline

Member Function Documentation

◆ axisInd()

int iABSPNode::axisInd ( ) const
inline

◆ DistributePrims()

int iABSPNode::DistributePrims ( int &  level,
int &  max_level,
iAaabb m_aabb,
std::vector< iABSPNode * > &  nodes,
std::vector< unsigned int > &  tri_ind,
std::vector< iATriPrim * > &  parent_tris,
unsigned int  tri_start_ind 
)
inline

Splits current node's AABB.

Creates two child-nodes with derived AABBs and distributes primitives from current node primitives vector among two child-nodes. Recursively called for child-nodes. Stops if maximum level is reached. If current node does not have any primitives, recursion is stopped.

Parameters
levellevel of current node.
max_levelnodes with max_level are leafs.
m_aabbnode's aabb
nodesvector of all tree nodes
tri_indvector of index-triangle mapping array
parent_tris
tri_start_ind
Returns
1 if successful

◆ DistributePrimsSAH()

int iABSPNode::DistributePrimsSAH ( int &  level,
int &  max_level,
iAaabb m_aabb,
std::vector< iABSPNode * > &  nodes,
std::vector< unsigned int > &  tri_ind,
std::vector< iATriPrim * > &  parent_tris,
unsigned int  tri_start_ind 
)
inline

◆ get_left() [1/2]

iABSPNode* iABSPNode::get_left ( const std::vector< iABSPNode * > &  nodes)
inline

◆ get_left() [2/2]

iABSPNode* iABSPNode::get_left ( std::vector< iABSPNode * > &  nodes)
inline

◆ get_right() [1/2]

iABSPNode* iABSPNode::get_right ( const std::vector< iABSPNode * > &  nodes)
inline

◆ get_right() [2/2]

iABSPNode* iABSPNode::get_right ( std::vector< iABSPNode * > &  nodes)
inline

◆ has_left()

bool iABSPNode::has_left ( ) const
inline

◆ has_right()

bool iABSPNode::has_right ( ) const
inline

◆ isLeaf()

bool iABSPNode::isLeaf ( ) const
inline

◆ offset()

unsigned int iABSPNode::offset ( )
inline

◆ set_has_left()

void iABSPNode::set_has_left ( bool  has)
inline

◆ set_has_right()

void iABSPNode::set_has_right ( bool  has)
inline

◆ set_offset()

void iABSPNode::set_offset ( unsigned int  val)
inline

◆ set_splitCoord()

void iABSPNode::set_splitCoord ( float  val)
inline

◆ set_tri_count()

void iABSPNode::set_tri_count ( unsigned int  val)
inline

◆ set_tri_start()

void iABSPNode::set_tri_start ( unsigned int  val)
inline

◆ setAxisInd()

void iABSPNode::setAxisInd ( int  index)
inline

◆ setLeaf()

void iABSPNode::setLeaf ( bool  a_isLeaf)
inline

◆ Split()

int iABSPNode::Split ( iAaabb const &  p_aabb,
iAaabb l_aabb,
iAaabb r_aabb 
)
inline

Splits current node's AABB by maximum dimension.

Creates two child-nodes with derived AABBs.

Parameters
[in]p_aabbparent's aabb
[out]l_aabbleft child's aabb
[out]r_aabbright child's aabb
Returns
1 if successful, 0 otherwise

◆ splitCoord()

float& iABSPNode::splitCoord ( )
inline

◆ SplitSAH()

int iABSPNode::SplitSAH ( iAaabb p_aabb,
iAaabb l_aabb,
iAaabb r_aabb,
unsigned int  axis_index,
float  bound 
)
inline

◆ tri_count()

unsigned int iABSPNode::tri_count ( )
inline

◆ tri_start()

unsigned int iABSPNode::tri_start ( )
inline

Member Data Documentation

◆ internal1

unsigned int iABSPNode::internal1

◆ internal2

unsigned int iABSPNode::internal2

shared data, depends if node is leaf or not

◆ masked_vars

unsigned int iABSPNode::masked_vars

Is this node a leaf-node first bit – is leaf, has left, has right, else – axis index.


The documentation for this class was generated from the following file: