LCOV - code coverage report
Current view: top level - geom/virtual - CompositeLump.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 0 160 0.0 %
Date: 2020-06-30 00:58:45 Functions: 0 27 0.0 %
Branches: 0 170 0.0 %

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : CompositeLump.cpp
       3                 :            : //
       4                 :            : // Purpose       : Combine Lumps
       5                 :            : //
       6                 :            : // Special Notes : 
       7                 :            : //
       8                 :            : // Creator       : Jason Kraftcheck
       9                 :            : //
      10                 :            : // Creation Date : 01/11/02
      11                 :            : //-------------------------------------------------------------------------
      12                 :            : 
      13                 :            : #include "CompositeLump.hpp"
      14                 :            : #include "CompositeShell.hpp"
      15                 :            : #include "CompositeBody.hpp"
      16                 :            : #include "VirtualQueryEngine.hpp"
      17                 :            : #include "CompositeEngine.hpp"
      18                 :            : 
      19                 :            : //-------------------------------------------------------------------------
      20                 :            : // Purpose       : Public constructor - replace real Lump with Composite
      21                 :            : //
      22                 :            : // Special Notes : 
      23                 :            : //
      24                 :            : // Creator       : Jason Kraftcheck
      25                 :            : //
      26                 :            : // Creation Date : 07/20/02
      27                 :            : //-------------------------------------------------------------------------
      28                 :          0 : CompositeLump::CompositeLump( Lump* lump )
      29                 :          0 :   : myBody(0), nextLump(0), firstShell(0), hiddenSet(0)
      30                 :            : { 
      31         [ #  # ]:          0 :   assert( lump != NULL );
      32 [ #  # ][ #  # ]:          0 :   compGeom = new CompositeGeom(1);
      33         [ #  # ]:          0 :   compGeom->append( lump, CUBIT_FORWARD ); 
      34 [ #  # ][ #  # ]:          0 :   if( lump->owner() )
      35 [ #  # ][ #  # ]:          0 :     lump->owner()->swap_bridge( lump, this, false );
      36         [ #  # ]:          0 :   lump->owner( this );
      37                 :          0 : }
      38                 :            : 
      39                 :            : //-------------------------------------------------------------------------
      40                 :            : // Purpose       : Internal constructor for splitting Composites
      41                 :            : //
      42                 :            : // Special Notes : 
      43                 :            : //
      44                 :            : // Creator       : Jason Kraftcheck
      45                 :            : //
      46                 :            : // Creation Date : 07/20/02
      47                 :            : //-------------------------------------------------------------------------
      48                 :          0 : CompositeLump::CompositeLump( CompositeGeom* geometry )
      49                 :            :   : myBody(0),
      50                 :            :     nextLump(0),
      51                 :            :     compGeom( geometry ),
      52                 :            :     firstShell(0),
      53                 :          0 :     hiddenSet(0)
      54                 :            : {
      55         [ #  # ]:          0 :   assert( geometry != NULL );
      56 [ #  # ][ #  # ]:          0 :   for( int i = 0; i < compGeom->num_entities(); i++ )
      57                 :            :   {
      58         [ #  # ]:          0 :     GeometryEntity* entity = compGeom->entity(i);
      59 [ #  # ][ #  # ]:          0 :     assert( !entity->owner() );
      60         [ #  # ]:          0 :     entity->owner(this);
      61                 :            :   }
      62                 :          0 : }
      63                 :            : 
      64                 :            : //-------------------------------------------------------------------------
      65                 :            : // Purpose       : Destructor
      66                 :            : //
      67                 :            : // Special Notes : 
      68                 :            : //
      69                 :            : // Creator       : Jason Kraftcheck
      70                 :            : //
      71                 :            : // Creation Date : 07/20/02
      72                 :            : //-------------------------------------------------------------------------
      73         [ #  # ]:          0 : CompositeLump::~CompositeLump()
      74                 :            : {
      75                 :            :   int i;
      76         [ #  # ]:          0 :   assert( !myBody );
      77                 :            :   
      78         [ #  # ]:          0 :   while( firstShell )
      79         [ #  # ]:          0 :     remove( firstShell );
      80                 :            :     
      81 [ #  # ][ #  # ]:          0 :   for( i = 0; i < num_lumps(); i++ )
      82 [ #  # ][ #  # ]:          0 :     if( get_lump(i)->owner() == this )
                 [ #  # ]
      83 [ #  # ][ #  # ]:          0 :       get_lump(i)->owner(0);
      84                 :            :       
      85 [ #  # ][ #  # ]:          0 :   delete hiddenSet;
      86 [ #  # ][ #  # ]:          0 :   delete compGeom;
      87         [ #  # ]:          0 : }
      88                 :            : 
      89                 :          0 : CubitStatus CompositeLump::add( CompositeShell* shell )
      90                 :            : {
      91         [ #  # ]:          0 :   if( shell->myLump )
      92                 :          0 :     return CUBIT_FAILURE;
      93                 :            :   
      94                 :          0 :   shell->lumpNext = firstShell;
      95                 :          0 :   firstShell = shell;
      96                 :          0 :   shell->myLump = this;
      97                 :          0 :   return CUBIT_SUCCESS;
      98                 :            : }
      99                 :            : 
     100                 :          0 : CubitStatus CompositeLump::remove( CompositeShell* shell )
     101                 :            : {
     102         [ #  # ]:          0 :   if( shell->myLump != this )
     103                 :          0 :     return CUBIT_FAILURE;
     104                 :            :   
     105         [ #  # ]:          0 :   if( firstShell == shell )
     106                 :            :   {
     107                 :          0 :     firstShell = firstShell->lumpNext;
     108                 :            :   }
     109                 :            :   else
     110                 :            :   {
     111                 :          0 :     CompositeShell *prev = firstShell, *next = firstShell->lumpNext;
     112         [ #  # ]:          0 :     while( next != shell )
     113                 :            :     {
     114         [ #  # ]:          0 :       assert( next != NULL );
     115                 :          0 :       prev = next;
     116                 :          0 :       next = next->lumpNext;
     117                 :            :     }
     118                 :            :     
     119                 :          0 :     prev->lumpNext = shell->lumpNext;
     120                 :            :   }
     121                 :            :   
     122                 :          0 :   shell->lumpNext = 0;
     123                 :          0 :   shell->myLump = 0;
     124                 :            :   
     125                 :          0 :   return CUBIT_SUCCESS;
     126                 :            : }
     127                 :            : 
     128                 :            : 
     129                 :          0 : CubitBox CompositeLump::bounding_box() const
     130                 :          0 :   { return compGeom->bounding_box(); }
     131                 :            :   
     132                 :          0 : double CompositeLump::measure()
     133                 :          0 :   { return compGeom->measure( compGeom->num_entities() -1 ); }
     134                 :            : 
     135                 :          0 : void CompositeLump::get_parents_virt( DLIList<TopologyBridge*>& parents )
     136 [ #  # ][ #  # ]:          0 :   { if( myBody ) parents.append( myBody ); }
     137                 :            : 
     138                 :          0 : void CompositeLump::get_children_virt( DLIList<TopologyBridge*>& children )
     139                 :            : {
     140         [ #  # ]:          0 :   for( CompositeShell* shell = firstShell; shell; shell = shell->lumpNext )
     141         [ #  # ]:          0 :     children.append( shell );
     142                 :          0 : }
     143                 :            : 
     144                 :            : 
     145                 :            : //-------------------------------------------------------------------------
     146                 :            : // Purpose       : Get CompositeEngine
     147                 :            : //
     148                 :            : // Special Notes : 
     149                 :            : //
     150                 :            : // Creator       : Jason Kraftcheck
     151                 :            : //
     152                 :            : // Creation Date : 01/11/02
     153                 :            : //-------------------------------------------------------------------------
     154                 :          0 : GeometryQueryEngine* CompositeLump::get_geometry_query_engine() const
     155                 :          0 :   { return VirtualQueryEngine::instance(); }
     156                 :            : 
     157                 :            : 
     158                 :          0 : CubitStatus CompositeLump::add( Lump* lump )
     159                 :            : { 
     160 [ #  # ][ #  # ]:          0 :   if( !lump->owner() && compGeom->append(lump,CUBIT_FORWARD) )
                 [ #  # ]
     161                 :            :   {
     162                 :          0 :     lump->owner(this);
     163                 :          0 :     return CUBIT_SUCCESS;
     164                 :            :   }
     165                 :          0 :   return CUBIT_FAILURE;
     166                 :            : }    
     167                 :            : 
     168                 :          0 : CubitStatus CompositeLump::remove( Lump* lump )
     169                 :          0 :   { return remove_lump( index_of( lump ) ); }
     170                 :            : 
     171                 :          0 : CubitStatus CompositeLump::remove_lump( int index )
     172                 :            : {
     173 [ #  # ][ #  # ]:          0 :   if( index < 0 || index >= num_lumps() )
                 [ #  # ]
     174                 :          0 :     return CUBIT_FAILURE;
     175                 :            :   
     176                 :          0 :   TopologyBridge* lump = compGeom->entity(index);
     177         [ #  # ]:          0 :   if( compGeom->remove( index, false ) )
     178                 :            :   {
     179         [ #  # ]:          0 :     if( lump->owner() == this )
     180                 :          0 :       lump->owner(0);
     181                 :          0 :     return CUBIT_SUCCESS;
     182                 :            :   }
     183                 :          0 :   return CUBIT_FAILURE;
     184                 :            : }
     185                 :            :   
     186                 :          0 : CubitStatus CompositeLump::remove_bridge( TopologyBridge* bridge )
     187                 :            : {
     188                 :          0 :   int i = compGeom->index_of(bridge);
     189         [ #  # ]:          0 :   if (i < 0)
     190                 :          0 :     return CUBIT_FAILURE;
     191                 :            :   
     192         [ #  # ]:          0 :   assert (bridge->owner() == this);
     193                 :          0 :   bridge->owner(0);
     194         [ #  # ]:          0 :   if (!compGeom->remove(i, true))
     195                 :          0 :     return CUBIT_FAILURE;
     196                 :            :   
     197         [ #  # ]:          0 :   if (compGeom->num_entities() == 0)
     198                 :          0 :     CompositeEngine::instance().notify_deactivated(this);
     199                 :            :   
     200                 :          0 :   return CUBIT_SUCCESS;
     201                 :            : }
     202                 :            :   
     203                 :            :   
     204                 :          0 : CubitStatus CompositeLump::swap_bridge( TopologyBridge* old_tb, 
     205                 :            :                                         TopologyBridge* new_tb,
     206                 :            :                                         bool )
     207                 :            : {
     208         [ #  # ]:          0 :   if( new_tb->owner() )
     209                 :          0 :     return CUBIT_FAILURE;
     210                 :            :   
     211                 :          0 :   int index = compGeom->index_of( old_tb );
     212         [ #  # ]:          0 :   GeometryEntity* ge = dynamic_cast<GeometryEntity*>(new_tb);
     213 [ #  # ][ #  # ]:          0 :   if( index >= 0 && ge != 0 )
     214                 :            :   {
     215         [ #  # ]:          0 :     if( old_tb->owner() == this )
     216                 :          0 :       old_tb->owner(0);
     217                 :          0 :     new_tb->owner(this);
     218                 :          0 :     return compGeom->swap( index, ge );
     219                 :            :   }
     220                 :            :   
     221                 :          0 :   return CUBIT_FAILURE;
     222                 :            : }
     223                 :            :   
     224                 :          0 : CubitBoolean CompositeLump::contains_bridge( TopologyBridge* bridge ) const
     225                 :            : {
     226         [ #  # ]:          0 :   return compGeom->index_of(bridge) < 0 ? CUBIT_FALSE : CUBIT_TRUE;
     227                 :            : }
     228                 :            : 
     229                 :          0 : void CompositeLump::notify_reversed( TopologyBridge* )
     230                 :          0 :   { assert(0); }
     231                 :            : 
     232                 :            : 
     233                 :            : //-------------------------------------------------------------------------
     234                 :            : // Purpose       : Attribute functions
     235                 :            : //
     236                 :            : // Special Notes : 
     237                 :            : //
     238                 :            : // Creator       : Jason Kraftcheck
     239                 :            : //
     240                 :            : // Creation Date : 01/11/02
     241                 :            : //-------------------------------------------------------------------------
     242                 :          0 : void CompositeLump::append_simple_attribute_virt( const CubitSimpleAttrib& csa )
     243                 :          0 : { compGeom->add_attribute(csa); }
     244                 :          0 : void CompositeLump::remove_simple_attribute_virt( const CubitSimpleAttrib& csa )
     245                 :          0 : { compGeom->rem_attribute(csa); }
     246                 :          0 : void CompositeLump::remove_all_simple_attribute_virt()
     247                 :          0 : { compGeom->rem_all_attributes(); }
     248                 :          0 : CubitStatus CompositeLump::get_simple_attribute( DLIList<CubitSimpleAttrib>& list )
     249                 :          0 : { compGeom->get_attributes( list ); return CUBIT_SUCCESS; }
     250                 :          0 : CubitStatus CompositeLump::get_simple_attribute(
     251                 :            :           const CubitString& name, DLIList<CubitSimpleAttrib>& attrib_list )
     252                 :            : {
     253                 :          0 :   compGeom->get_attributes( name.c_str(), attrib_list );
     254                 :          0 :   return CUBIT_SUCCESS;
     255                 :            : }
     256                 :            : 
     257                 :            : 
     258                 :            : //-------------------------------------------------------------------------
     259                 :            : // Purpose       : Split this CompositeLump into two.
     260                 :            : //
     261                 :            : // Special Notes : 
     262                 :            : //
     263                 :            : // Creator       : Jason Kraftcheck
     264                 :            : //
     265                 :            : // Creation Date : 06/11/04
     266                 :            : //-------------------------------------------------------------------------
     267                 :          0 : CompositeLump* CompositeLump::split( VGArray<int>& indices_to_move )
     268                 :            : {
     269                 :            :   int i;
     270                 :            :   
     271         [ #  # ]:          0 :   for( i = 0; i < indices_to_move.size(); i++ )
     272 [ #  # ][ #  # ]:          0 :     if( indices_to_move[i] < 0 || indices_to_move[i] >= num_lumps() )
                 [ #  # ]
     273                 :          0 :       return 0;
     274                 :            :   
     275                 :          0 :   CompositeGeom* new_geom = compGeom->split( indices_to_move );
     276         [ #  # ]:          0 :   if( !new_geom )
     277                 :          0 :     return 0;
     278                 :            :   
     279         [ #  # ]:          0 :   for( i = 0; i < new_geom->num_entities(); i++ )
     280                 :          0 :     new_geom->entity(i)->owner( 0 );
     281                 :            :     
     282         [ #  # ]:          0 :   return new CompositeLump( new_geom );
     283                 :            : }
     284                 :            : 
     285                 :            : //-------------------------------------------------------------------------
     286                 :            : // Purpose       : Combine composite volumes
     287                 :            : //
     288                 :            : // Special Notes : 
     289                 :            : //
     290                 :            : // Creator       : Jason Kraftcheck
     291                 :            : //
     292                 :            : // Creation Date : 06/11/04
     293                 :            : //-------------------------------------------------------------------------
     294                 :          0 : CubitStatus CompositeLump::combine( CompositeLump* dead_lump )
     295                 :            : {
     296                 :          0 :   int old_size = compGeom->num_entities();
     297                 :          0 :   compGeom->merge( *(dead_lump->compGeom) );
     298         [ #  # ]:          0 :   if( dead_lump->hiddenSet != 0 )
     299                 :          0 :     hidden_entities().merge( dead_lump->hiddenSet );
     300         [ #  # ]:          0 :   for( int i = old_size; i < compGeom->num_entities(); i++ )
     301                 :            :   {
     302                 :          0 :     TopologyBridge* bridge = compGeom->entity(i);
     303 [ #  # ][ #  # ]:          0 :     assert( bridge->owner() == dead_lump );
     304                 :          0 :     bridge->owner( this );
     305                 :            :   }
     306                 :            :   
     307                 :          0 :   return CUBIT_SUCCESS;
     308                 :            : }
     309                 :            : 
     310                 :            : //-------------------------------------------------------------------------
     311                 :            : // Purpose       : Debug output
     312                 :            : //
     313                 :            : // Special Notes : 
     314                 :            : //
     315                 :            : // Creator       : Jason Kraftcheck
     316                 :            : //
     317                 :            : // Creation Date : 09/16/04
     318                 :            : //-------------------------------------------------------------------------
     319                 :          0 : void CompositeLump::print_debug_info( const char* prefix, bool brief )
     320                 :            : {
     321         [ #  # ]:          0 :   if( prefix == 0 ) prefix = "";
     322                 :          0 :   CompositeShell* shell = 0;
     323         [ #  # ]:          0 :   if (brief)
     324                 :            :   {
     325                 :          0 :     int count = 0;
     326         [ #  # ]:          0 :     while ((shell = next_shell(shell))  != NULL ) ++count;
     327         [ #  # ]:          0 :     PRINT_INFO( "%sCompositeLump %p : %d shells, %d lumps.\n",
     328         [ #  # ]:          0 :       prefix, (void*)this, count, num_lumps() );
     329                 :          0 :     return;
     330                 :            :   }
     331                 :            :   
     332 [ #  # ][ #  # ]:          0 :   PRINT_INFO("%sCompositeLump %p:\n", prefix, (void*)this );
     333                 :            :   
     334                 :          0 :   char* new_prefix = new char[strlen(prefix)+3];
     335                 :          0 :   strcpy( new_prefix, prefix );
     336                 :          0 :   strcat( new_prefix, "  " );
     337         [ #  # ]:          0 :   if (hiddenSet) hiddenSet->print_debug_info( new_prefix );
     338 [ #  # ][ #  # ]:          0 :   else PRINT_INFO("%sNo Hidden Entities.\n", new_prefix );
     339         [ #  # ]:          0 :   while ((shell = next_shell( shell )) != NULL )
     340                 :          0 :     shell->print_debug_info( new_prefix );
     341         [ #  # ]:          0 :   delete [] new_prefix;
     342                 :            : }
     343                 :            : 
     344                 :            :   
     345                 :          0 : void CompositeLump::get_hidden_surfaces( DLIList<Surface*>& surfs )
     346                 :            : {
     347         [ #  # ]:          0 :   if (hiddenSet)
     348                 :          0 :     hiddenSet->hidden_surfaces( surfs );
     349                 :          0 : }
     350                 :            : 
     351                 :          0 : CubitStatus CompositeLump::mass_properties( CubitVector &centroid, double &volume )
     352                 :            : {
     353 [ #  # ][ #  # ]:          0 :   PRINT_ERROR("CompositeLump::mass_properties is not implemented\n");
     354                 :          0 :   centroid.set(0,0,0);
     355                 :          0 :   volume = 0;
     356                 :          0 :   return CUBIT_FAILURE;
     357                 :            : }

Generated by: LCOV version 1.11