LCOV - code coverage report
Current view: top level - geom/facet/cgm - CubitOctreeNode.hpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 0 25 0.0 %
Date: 2020-06-30 00:58:45 Functions: 0 21 0.0 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : CubitOctree.hpp
       3                 :            : //
       4                 :            : // Purpose       : Defines the grid node of the CubitOctree model       
       5                 :            : //
       6                 :            : // Creator       : William Roshan Quadros
       7                 :            : //
       8                 :            : // Creation Date :  01/01/2003
       9                 :            : //
      10                 :            : // Owner         : 
      11                 :            : //-------------------------------------------------------------------------
      12                 :            : #ifndef CUBITOCTREENODE_H
      13                 :            : #define CUBITOCTREENODE_H
      14                 :            : #include "CubitVector.hpp"
      15                 :            : #include "DLIList.hpp"
      16                 :            : #include "PriorityQueue.hpp"
      17                 :            : #include <queue>
      18                 :            : #include "CubitDefines.h"
      19                 :            : //#include "MemoryManager.hpp"
      20                 :            : #include "OctreeIntersectionData.hpp"
      21                 :            : #include "CubitOctreeConstants.hpp"
      22                 :            : 
      23                 :            : class RefFace;
      24                 :            : class CubitOctree;
      25                 :            : class CubitOctreeCell;
      26                 :            : class CubitFacet;
      27                 :            : class CubitOctreeNode;
      28                 :            : class CubitOctreeGenerator;
      29                 :            : 
      30                 :            : 
      31                 :            : class CubitOctreeNode{
      32                 :            :   
      33                 :            : public:
      34                 :            :   
      35                 :            :   CubitOctreeNode( const CubitVector &cen, CubitOctreeCell *parent_cell, const int i, const int j, const int k );
      36                 :            :   CubitOctreeNode( const double &x, const double &y, const double &z );
      37                 :            :   void initialize_constructor( const double &x, const double &y, const double &z );
      38                 :            :     //- Constructor
      39                 :            :   
      40                 :            :   ~CubitOctreeNode();
      41                 :            :     //- Distructor
      42                 :            :   
      43                 :            :   void display( OctreeNodeConstant type = NODE_SIZE, float draw_size = -1 ); 
      44                 :            :     //- Displays the grid nodes
      45                 :            :   
      46                 :          0 :   inline int get_color(){ return color; }
      47                 :            :     //- Returns color
      48                 :            : 
      49                 :          0 :   inline void set_color (const int new_color) {color = new_color;}
      50                 :            :   
      51                 :          0 :   inline int get_num(){ return num; }
      52                 :            :     //- Returns the serial number of the grid node
      53                 :            : 
      54                 :          0 :   inline CubitVector& get_coord(){ return coord; }
      55                 :            :     //- Returns the cartesian coordinates
      56                 :            :   
      57                 :            :   double get_size( OctreeSourceEntityType type ) const;
      58                 :            :     //- Returns size of the node
      59                 :            : 
      60                 :            :   int id(){ return num; }
      61                 :            : 
      62                 :            :   void set_size( double s, int type );
      63                 :            :     //- Sets size at the node
      64                 :            :   
      65                 :            :   void set_adj_node( enum OctreePosition type, CubitOctreeNode *ptr_grid_node );
      66                 :            :     //- sets the adjacent nodes
      67                 :            :   
      68                 :            :   void set_adj_node_distance( enum OctreePosition type, int dist );
      69                 :            :     //- sets the adjacent nodes distance
      70                 :            :   
      71                 :            :   double manhattan_distance_adj_node( int index );
      72                 :            :   inline double manhattan_distance_adj_node( CubitOctreeNode *ptr_adj_node );  
      73                 :            : 
      74                 :          0 :   inline double get_distance(){ return distance; }
      75                 :            :   
      76                 :          0 :   inline double x(){ return coord.x(); }
      77                 :          0 :   inline double y(){ return coord.y(); }
      78                 :          0 :   inline double z(){ return coord.z(); }
      79                 :            :     //- Returns cartesian co-ordinates 
      80                 :            :   
      81                 :            :   inline void x( double value ){ coord.x( value ); }
      82                 :            :   inline void y( double value ){ coord.y( value ); }
      83                 :            :   inline void z( double value ){ coord.z( value ); }
      84                 :            :     //- Sets cartician co-ordinates of node
      85                 :            :   
      86                 :            :   CubitOctreeNode *get_adj_node( int num );
      87                 :            :     //- Returns one of the six adjacent nodes
      88                 :            :   
      89                 :            :   int get_adj_node_distance( enum OctreePosition type );
      90                 :            :     //- returns the distance with the adj node in the direction of type
      91                 :            :   
      92                 :            :   void append_list_item( CubitVector facet_normal );
      93                 :            :   
      94                 :            :    void calc_facet_patch_distance_normal(DLIList<OctreeIntersectionData*> &idatas, int num_use_idatas, double &patch_distance, CubitVector &patch_normal, CubitBoolean sort, CubitBoolean set_Refface);
      95                 :            :   void SAT_find_face_distance_average_normal ();
      96                 :            : 
      97                 :          0 :   inline CubitOctreeCell* get_min_depth_cell(){ return minDepthCell; }
      98                 :            :     //- returns minimum depth cell
      99                 :            : 
     100                 :          0 :   inline int get_cell_depth_difference(){ return cellDepthDifference; }
     101                 :            :   
     102                 :            : 
     103                 :            :   int get_counter();
     104                 :            :     //- uses static counter to number the cell
     105                 :            : 
     106                 :          0 :   static inline void reset_counter() {mCounter = -1;}
     107                 :            : 
     108                 :          0 :   inline void update_adj_cell( CubitOctreeCell *ptr_cell, int i, int j, int k ) 
     109                 :            :       {
     110                 :          0 :         adjCell[i][j][k] = ptr_cell;
     111                 :          0 :       }
     112                 :            :     //- updates the cell at i, j, k location
     113                 :            :   
     114                 :            :   int find_min_depth_cell_and_depth_difference( void  );
     115                 :            :     //- finds the maximum depth adjacent cell and difference in adj cells' depth
     116                 :            :   
     117                 :            :   void calculate_size_based_on_cell_dimension( double bbox_dimension );
     118                 :            :     //- calculates size using 6 adj nodes distance
     119                 :            :   
     120                 :          0 :   inline CubitOctreeCell *get_adj_cell( const int i, const int j, const int k ) { return adjCell[i][j][k]; }
     121                 :            :   
     122                 :            :     // MARK is used in establishing connection between skl point and grid nodes contained in it using DFS
     123                 :          0 :   inline void set_mark( CubitBoolean type ){ mark = type; }
     124                 :          0 :   inline CubitBoolean get_mark(){ return mark; }
     125                 :            :   
     126                 :          0 :   inline void set_visit( CubitBoolean type ){ visit = type;     }
     127                 :            :     //- sets the visit with type ( CUBIT_FALSE or CUBIT_TRUE )
     128                 :            :     
     129                 :          0 :   inline CubitBoolean get_visit() const {return visit;}
     130                 :            :     //- Returns visit
     131                 :            :     
     132                 :            :   inline CubitVector get_normal() const {return mNormal;}
     133                 :            : 
     134                 :            : 
     135                 :            :   
     136                 :            :   int find_half_space( CubitFacet *ptr_facet );
     137                 :            : 
     138                 :            :     //- returns half space direction
     139                 :            :   
     140                 :          0 :   inline CubitBoolean get_halfspace_direction(){ return halfspaceDirection; }
     141                 :          0 :   inline void set_halfspace_direction( const CubitBoolean type ){ halfspaceDirection = type ; }
     142                 :            : 
     143                 :            :   void find_intersection_with_facet( CubitOctreeType type, RefFace *ptr_face, CubitFacet *ptr_facet,  DLIList<CubitOctreeNode*> &boundary_white_node_list);
     144                 :            :     //- checks intesection between the lines joining grid node and adjacent nodes with the facet.
     145                 :            :     //- queue_mat_generation stores the BLACK grinodes that contains distanace and normal for MAT generation.
     146                 :            :   
     147                 :            :   CubitBoolean find_intersection_point( int axis, CubitVector grid_node0, CubitVector grid_node1, CubitVector &facet_normal, CubitVector facet_vert0, CubitVector facet_vert1, CubitVector facet_vert2, CubitVector &int_point, double &para );
     148                 :            :     //- returns true if the intersection between the line segment and facet takes place
     149                 :            :     //- para stores the parameter of intersection point int_point
     150                 :            : 
     151                 :            :   static CubitBoolean is_same_side(const CubitVector &p1, const CubitVector &p2, const CubitVector &a, const CubitVector &b);
     152                 :            :   static CubitBoolean is_intersection_point_contained_inside_facet( const CubitVector &int_point, const CubitVector &facet_vert0, const CubitVector &facet_vert1, const CubitVector &facet_vert2 );
     153                 :            :     //- returns true if intersection point is contained inside the facet
     154                 :            :     //- interior angle at the intersecton point should add up to 360 deg.
     155                 :            :   
     156                 :            :      
     157                 :            :     //- Appends the source point
     158                 :            : 
     159                 :          0 :   inline void append_list_item( OctreeIntersectionData *ptr_int_data ) 
     160                 :            :       {
     161                 :          0 :         octreeIntersectionDataList.push( ptr_int_data );
     162                 :          0 :       }
     163                 :            :   
     164                 :            :     //- Appends intesection data like, face, int_point, facet etc.
     165                 :            : 
     166                 :          0 :   DLIList<OctreeIntersectionData*>* get_idata_list() {return &octreeIntersectionDataList;}
     167                 :            :   
     168                 :            :   CubitBoolean bfs_to_find_contained_nodes(int max_onode_per_src);
     169                 :            :   CubitBoolean dfs_to_find_contained_nodes(int max_onode_per_src);
     170                 :            :     // Breadth first search is used to find nodes contained inside the box of skeleton source point  
     171                 :            : 
     172                 :            :     
     173                 :            :     //- sizing function due to each type of source point is evaluated separately.
     174                 :            :     //- then these function can be blended to find final sizing function.
     175                 :            :     //- curently the minimum of all function is selected.
     176                 :            : 
     177                 :            :   static CubitBoolean compare_function( CubitOctreeNode *&a, CubitOctreeNode *&b );
     178                 :            : 
     179                 :            :   void find_distance_at_adj_node(PriorityQueue<CubitOctreeNode *> *heap );
     180                 :            :   
     181                 :            :   CubitBoolean find_size_using_adj_node();
     182                 :            :   
     183                 :            :   
     184                 :            :     //static void set_scope_box_limits( double max_x, double min_x, double max_y, double min_y, double max_z, double min_z);
     185                 :            :     //static void reset_scope_box_limits();
     186                 :            :     //- To avoid the overflow of stack during linking source point and grid nodes
     187                 :            :     //static double scpBoxMaxX, scpBoxMinX, scpBoxMaxY, scpBoxMinY, scpBoxMaxZ, scpBoxMinZ;
     188                 :            :   //SetDynamicMemoryAllocation(memoryManager)
     189                 :            :   //- class specific new and delete operators
     190                 :            :   
     191                 :            : private:
     192                 :            :   
     193                 :            : 
     194                 :            :   
     195                 :            :   
     196                 :            : private:
     197                 :            :   int num;
     198                 :            :     //- Serial number of node
     199                 :            : 
     200                 :            :   static int mCounter;
     201                 :            :   
     202                 :            :   CubitBoolean visit;
     203                 :            :   CubitBoolean mark;
     204                 :            :   
     205                 :            :   short color; 
     206                 :            :     // in CubitOctree based approach
     207                 :            :     //- GREY is default ( all nodes outside WHITE or Solid )
     208                 :            :     //- BLACK (node inside solid), WHITE (node at the boundary during facet CubitOctree intersection)
     209                 :            : 
     210                 :            :   CubitBoolean halfspaceDirection;
     211                 :            :   
     212                 :            :   double size;
     213                 :            : 
     214                 :            :     //- Size at the grid node is initially set to 0.0
     215                 :            : 
     216                 :            :   
     217                 :            :    // OPT: keep pointer to list and clear list after intersection
     218                 :            :   DLIList<OctreeIntersectionData *> octreeIntersectionDataList;
     219                 :            :   
     220                 :            :   // OPT: use cubit hash to temp hold this data
     221                 :            :   int cellDepthDifference;
     222                 :            :     //- used in splitting CubitOctree cells during smooth transition
     223                 :            :   
     224                 :            :   
     225                 :            :   CubitOctreeCell *minDepthCell;
     226                 :            :     //- keeps the pointer to minimum depth adjacent cell
     227                 :            :     
     228                 :            :   double distance;
     229                 :            :   
     230                 :            :   CubitVector coord; 
     231                 :            :   // Co-ordinates of the grid node
     232                 :            :   
     233                 :            :   CubitOctreeNode *adjGridNode[6]; 
     234                 :            :     //0 to 5 LEFT, RIGHT, BOTTOM, TOP, BACK, FRONT
     235                 :            :   
     236                 :            :   int adjNodeDistance[6];  ///???
     237                 :            :     //- stores the lengths between adjacent nodes
     238                 :            :   
     239                 :            :   CubitOctreeCell *adjCell[2][2][2];
     240                 :            :   
     241                 :            :  
     242                 :            :   RefFace *refFace;
     243                 :            :     //- Face associated with the grid node used in wave propagation
     244                 :            :   
     245                 :            :   CubitVector mNormal;
     246                 :            :     //- Normal at the grid_node is used in MAT generation.
     247                 :            : 
     248                 :            :   
     249                 :            :   //static MemoryManager memoryManager;
     250                 :            :     //- memory management object
     251                 :            : 
     252                 :            : };
     253                 :            : 
     254                 :            : #endif
     255                 :            : 
     256                 :            : //EOF
     257                 :            : 

Generated by: LCOV version 1.11