LCOV - code coverage report
Current view: top level - geom/Cholla - CubitFacetEdgeData.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 39 93 41.9 %
Date: 2020-06-30 00:58:45 Functions: 4 10 40.0 %
Branches: 25 108 23.1 %

           Branch data     Line data    Source code
       1                 :            : //=======================================================================
       2                 :            : //
       3                 :            : //  File: CubitFacetEdgeData
       4                 :            : //  Description: used for edges of CubitFacets.  These are optional
       5                 :            : //               and used only if specific information must be stored at 
       6                 :            : //               the edge common to tow facets
       7                 :            : //  Owner: sjowen
       8                 :            : //
       9                 :            : //=======================================================================
      10                 :            : 
      11                 :            : #include "CubitFacetEdge.hpp"
      12                 :            : #include "CubitFacetEdgeData.hpp"
      13                 :            : #include "CubitFacetData.hpp"
      14                 :            : #include "CubitPoint.hpp"
      15                 :            : #include "CubitVector.hpp"
      16                 :            : #include "GeometryDefines.h"
      17                 :            : #include "ToolData.hpp"
      18                 :            : 
      19                 :            : static int counter_id = 0;
      20                 :            : 
      21                 :            : //======================================================================
      22                 :            : // Function: CubitFacetEdgeData (PUBLIC)
      23                 :            : // Description: constructor.  Determines the adjacencies from existing
      24                 :            : //              CubitPoint adjacency information
      25                 :            : //              Note: can handle non-manifold topology
      26                 :            : // Author: sjowen
      27                 :            : // Date: 8/00
      28                 :            : //======================================================================
      29         [ +  - ]:       4972 : CubitFacetEdgeData::CubitFacetEdgeData( CubitPoint *p1, CubitPoint *p2 )
      30                 :            : {
      31 [ +  - ][ -  + ]:       2486 :   assert( p1 && p2 );
      32         [ -  + ]:       2486 :   assert( p1 != p2 );
      33                 :       2486 :   pointArray[0] = p1;
      34                 :       2486 :   pointArray[1] = p2;
      35                 :            : 
      36                 :       2486 :   counter_id++;
      37                 :       2486 :   entityId = counter_id;
      38                 :            :   
      39                 :            :   // determine adjacency (assumes facets are already defined)
      40                 :            :   // set the edge and use on the adjacent facets
      41                 :            : 
      42                 :            :   int sense;
      43                 :            :   int eindex;
      44                 :            :   CubitFacet *facet_ptr;
      45         [ +  - ]:       2486 :   DLIList<CubitFacet*> facet_list;
      46         [ +  - ]:       2486 :   p1->facets( facet_list );
      47                 :            :   CubitBoolean found;
      48 [ +  - ][ +  + ]:      10516 :   for(int ii=0; ii<facet_list.size(); ii++) {
      49                 :       8030 :     found = CUBIT_FALSE;
      50         [ +  - ]:       8030 :     facet_ptr = facet_list.get_and_step();
      51 [ +  + ][ +  + ]:      29458 :     for(int jj=0; jj<3 && !found; jj++) 
      52                 :            :     {
      53 [ +  - ][ +  + ]:      21428 :       if (facet_ptr->point(jj) == p2) 
      54                 :            :       {
      55                 :       3168 :         found = CUBIT_TRUE;
      56         [ +  - ]:       3168 :         adjFacetList.append(facet_ptr);
      57         [ +  - ]:       3168 :         eindex = facet_ptr->edge_index( p1, p2, sense );
      58         [ +  - ]:       3168 :         facet_ptr->edge( this, eindex );
      59         [ +  - ]:       3168 :         facet_ptr->edge_use( sense, eindex );
      60                 :            :       }
      61                 :            :     }
      62         [ +  - ]:       2486 :   }
      63                 :       2486 : }
      64                 :            : 
      65                 :            : //======================================================================
      66                 :            : // Function: CubitFacetEdgeData (PUBLIC)
      67                 :            : // Description: overloaded constructor:  Adjacency information is
      68                 :            : //              provided in the arguments -- assumes a 2D topology
      69                 :            : // Author: sjowen
      70                 :            : // Date: 8/00
      71                 :            : //======================================================================
      72                 :          0 : CubitFacetEdgeData::CubitFacetEdgeData( CubitPoint *p1, CubitPoint *p2,
      73                 :            :                                 CubitFacet *facet1, CubitFacet *facet2,
      74         [ #  # ]:          0 :                                 int edge_index1, int edge_index2)
      75                 :            : {
      76 [ #  # ][ #  # ]:          0 :   assert( p1 && p2 );
      77         [ #  # ]:          0 :   assert( p1 != p2 );
      78                 :          0 :   pointArray[0] = p1;
      79                 :          0 :   pointArray[1] = p2;
      80                 :            : 
      81                 :          0 :   counter_id++;
      82                 :          0 :   entityId = counter_id;
      83                 :            :     
      84         [ #  # ]:          0 :   if (facet1) {
      85         [ #  # ]:          0 :     adjFacetList.append(facet1);
      86         [ #  # ]:          0 :     facet1->edge( this, edge_index1 );
      87         [ #  # ]:          0 :     facet1->edge_use( 1, edge_index1 );
      88                 :            :   }
      89         [ #  # ]:          0 :   if (facet2) {
      90         [ #  # ]:          0 :     adjFacetList.append(facet2);
      91         [ #  # ]:          0 :     facet2->edge( this, edge_index2 );
      92         [ #  # ]:          0 :     facet2->edge_use( -1, edge_index2 );
      93                 :            :   }
      94                 :          0 : }
      95                 :            : 
      96                 :            : //======================================================================
      97                 :            : // Function: ~CubitFacetEdgeData (PUBLIC)
      98                 :            : // Description: destructor
      99                 :            : // Author: sjowen
     100                 :            : // Date: 8/00
     101                 :            : //======================================================================
     102         [ #  # ]:          0 : CubitFacetEdgeData::~CubitFacetEdgeData()
     103                 :            : {
     104 [ #  # ][ #  # ]:          0 :   assert(adjFacetList.size() == 0);
     105         [ #  # ]:          0 : }
     106                 :            : 
     107                 :            : //======================================================================
     108                 :            : // Function: adj_facet (PUBLIC)
     109                 :            : // Description: get a specific adjacent facet (by index)
     110                 :            : // Author: sjowen
     111                 :            : // Date: 4/01
     112                 :            : //======================================================================
     113                 :          0 : CubitFacet *CubitFacetEdgeData::adj_facet( int index )
     114                 :            : {
     115 [ #  # ][ #  # ]:          0 :   if (index < 0 || index > adjFacetList.size() - 1)
                 [ #  # ]
     116                 :          0 :     return (CubitFacet *)NULL;
     117                 :          0 :   adjFacetList.reset();
     118                 :          0 :   return adjFacetList.next(index);
     119                 :            : }
     120                 :            : 
     121                 :            : //======================================================================
     122                 :            : // Function: facets (PUBLIC)
     123                 :            : // Description: get the atached facets
     124                 :            : // Author: sjowen
     125                 :            : // Date: 4/01
     126                 :            : //======================================================================
     127                 :      16346 : void CubitFacetEdgeData::facets(DLIList<CubitFacet*> &facet_list)
     128                 :            : {
     129                 :      16346 :   facet_list += adjFacetList;
     130                 :      16346 : }
     131                 :            : 
     132                 :            : //======================================================================
     133                 :            : // Function: edges (PUBLIC)
     134                 :            : // Description: get the atached edges
     135                 :            : // Author: sjowen
     136                 :            : // Date: 4/01
     137                 :            : //======================================================================
     138                 :          0 : void CubitFacetEdgeData::edges(DLIList<CubitFacetEdge*> &edge_list )
     139                 :            : {
     140         [ #  # ]:          0 :   edge_list.append( this );
     141                 :          0 : }
     142                 :            : 
     143                 :            : //======================================================================
     144                 :            : // Function: points (PUBLIC)
     145                 :            : // Description: get the attached points
     146                 :            : // Author: sjowen
     147                 :            : // Date: 4/01
     148                 :            : //======================================================================
     149                 :       1914 : void CubitFacetEdgeData::points(DLIList<CubitPoint*> &point_list )
     150                 :            : {
     151                 :       1914 :   point_list.append( pointArray[0] );
     152                 :       1914 :   point_list.append( pointArray[1] );
     153                 :       1914 : }
     154                 :            : 
     155                 :            : //======================================================================
     156                 :            : // Function: remove_facet (PUBLIC)
     157                 :            : // Description: remove the facet from the edge adjacency list
     158                 :            : // Author: sjowen
     159                 :            : // Date: 4/01
     160                 :            : //======================================================================
     161                 :          0 : CubitStatus CubitFacetEdgeData::remove_facet( CubitFacet *facet_ptr )
     162                 :            : {
     163                 :          0 :   CubitStatus stat = CUBIT_SUCCESS;
     164                 :          0 :   bool removed = adjFacetList.remove( facet_ptr );
     165         [ #  # ]:          0 :   if (removed)
     166                 :          0 :     stat = CUBIT_SUCCESS;
     167                 :            :   else
     168                 :          0 :     stat = CUBIT_FAILURE;
     169                 :          0 :   return stat;
     170                 :            : }
     171                 :            : 
     172                 :            : //-------------------------------------------------------------------------
     173                 :            : // Purpose       : Merge edges
     174                 :            : //
     175                 :            : // Special Notes : points must already be merged.
     176                 :            : //
     177                 :            : // Creator       : Jason Kraftcheck
     178                 :            : //
     179                 :            : // Creation Date : 02/24/03
     180                 :            : //-------------------------------------------------------------------------
     181                 :          0 : CubitStatus CubitFacetEdgeData::merge_edges( CubitFacetEdgeData* other_edge )
     182                 :            : {
     183         [ #  # ]:          0 :   if( other_edge == this )
     184                 :          0 :     return CUBIT_SUCCESS;
     185                 :            :   
     186                 :          0 :   int reversed = false;
     187 [ #  # ][ #  # ]:          0 :   if ( point(0) == other_edge->point(1) && point(1) == other_edge->point(0) )
                 [ #  # ]
     188                 :          0 :     reversed = true;
     189 [ #  # ][ #  # ]:          0 :   else if( point(0) != other_edge->point(0) || point(1) != other_edge->point(1) )
                 [ #  # ]
     190                 :          0 :     return CUBIT_FAILURE;
     191                 :            :   
     192                 :            :   CubitFacetData* facet;
     193                 :          0 :   adjFacetList.reset();
     194         [ #  # ]:          0 :   while( other_edge->adjFacetList.size() )
     195                 :            :   {
     196         [ #  # ]:          0 :     facet = dynamic_cast<CubitFacetData*>(other_edge->adjFacetList.pop());
     197         [ #  # ]:          0 :     for ( int i = 0; i < 3; i++ )
     198                 :            :     {
     199         [ #  # ]:          0 :       if( facet->edge(i) == other_edge )
     200                 :            :       {
     201                 :          0 :         facet->edge( this, i );
     202                 :          0 :         add_facet(facet);
     203         [ #  # ]:          0 :         if( reversed )
     204                 :          0 :           facet->edge_use( -facet->edge_use(i), i );
     205                 :            :       }
     206                 :            :     }
     207                 :            :   }
     208                 :            :   
     209         [ #  # ]:          0 :   delete other_edge;
     210                 :          0 :   return CUBIT_SUCCESS;
     211                 :            : }
     212                 :            : 
     213                 :         44 : void CubitFacetEdgeData::flip()
     214                 :            : {
     215                 :         44 :   CubitPoint* tmp = pointArray[0];
     216                 :         44 :   pointArray[0] = pointArray[1];
     217                 :         44 :   pointArray[1] = tmp;
     218         [ +  + ]:         88 :   for ( int i = adjFacetList.size(); i--; )
     219                 :            :   {
     220                 :         44 :     CubitFacet* facet = adjFacetList.get_and_step();
     221                 :         44 :     int index = facet->edge_index(this);
     222         [ -  + ]:         44 :     assert(index >= 0);
     223                 :         44 :     facet->edge_use( -facet->edge_use(index), index );
     224                 :            :   }
     225                 :         44 :   toggle_is_flipped();
     226                 :         44 : }
     227                 :            : 

Generated by: LCOV version 1.11