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

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : CompositeBody.cpp
       3                 :            : //
       4                 :            : // Purpose       : Composite of BodySMs
       5                 :            : //
       6                 :            : // Special Notes : 
       7                 :            : //
       8                 :            : // Creator       : Jason Kraftcheck
       9                 :            : //
      10                 :            : // Creation Date : 01/11/02
      11                 :            : //-------------------------------------------------------------------------
      12                 :            : 
      13                 :            : #include "DLIList.hpp"
      14                 :            : #include "CompositeBody.hpp"
      15                 :            : #include "CompositeLump.hpp"
      16                 :            : #include "VirtualQueryEngine.hpp"
      17                 :            : #include "CompositeEngine.hpp"
      18                 :            : 
      19                 :          0 : CompositeBody::CompositeBody()
      20         [ #  # ]:          0 :   : firstLump(0)
      21                 :            : {
      22                 :          0 : }
      23                 :            : 
      24 [ #  # ][ #  # ]:          0 : CompositeBody::~CompositeBody()
      25                 :            : {
      26                 :            :   int i;
      27                 :            :   
      28 [ #  # ][ #  # ]:          0 :   for( i = 0; i < realBodies.size(); i++ )
      29 [ #  # ][ #  # ]:          0 :     if( realBodies[i]->owner() == this )
                 [ #  # ]
      30 [ #  # ][ #  # ]:          0 :       realBodies[i]->owner(0);
      31                 :            :   
      32         [ #  # ]:          0 :   while( firstLump )
      33         [ #  # ]:          0 :     remove( firstLump );
      34         [ #  # ]:          0 : }
      35                 :            : 
      36                 :            : 
      37                 :          0 : CompositeLump* CompositeBody::next_lump( CompositeLump* prev ) const
      38                 :            : {
      39         [ #  # ]:          0 :   return prev ? prev->nextLump : firstLump;
      40                 :            : }
      41                 :            : 
      42                 :          0 : CubitStatus CompositeBody::add( CompositeLump* lump )
      43                 :            : {
      44         [ #  # ]:          0 :   if( lump->myBody != 0 )
      45                 :          0 :     return CUBIT_FAILURE;
      46                 :            :     
      47                 :          0 :   lump->myBody = this;
      48                 :          0 :   lump->nextLump = firstLump;
      49                 :          0 :   firstLump = lump;
      50                 :          0 :   return CUBIT_SUCCESS;
      51                 :            : }
      52                 :            : 
      53                 :          0 : CubitStatus CompositeBody::remove( CompositeLump* lump )
      54                 :            : {
      55         [ #  # ]:          0 :   if( lump->myBody != this )
      56                 :          0 :     return CUBIT_FAILURE;
      57                 :            :   
      58         [ #  # ]:          0 :   if( firstLump == lump )
      59                 :            :   {
      60                 :          0 :     firstLump = lump->nextLump;
      61                 :            :   }
      62                 :            :   else
      63                 :            :   {
      64                 :          0 :     CompositeLump* prev = firstLump; 
      65 [ #  # ][ #  # ]:          0 :     while( prev && prev->nextLump != lump )
      66                 :          0 :       prev = prev->nextLump;
      67         [ #  # ]:          0 :     assert( prev != NULL );
      68                 :            :     
      69                 :          0 :     prev->nextLump = lump->nextLump;
      70                 :            :   }
      71                 :            :   
      72                 :          0 :   lump->myBody = 0;
      73                 :          0 :   lump->nextLump = 0;
      74                 :          0 :   return CUBIT_SUCCESS;
      75                 :            : }
      76                 :            : 
      77                 :          0 : CubitStatus CompositeBody::add( BodySM* body )
      78                 :            : {
      79         [ #  # ]:          0 :   if( index_of( body ) >= 0  )
      80                 :          0 :     return CUBIT_FAILURE;
      81                 :            :     
      82         [ #  # ]:          0 :   if( body->owner() )
      83                 :          0 :     body->owner()->swap_bridge( body, this, false );
      84                 :          0 :   body->owner(this);
      85                 :            :   
      86                 :          0 :   realBodies.push( body );
      87                 :          0 :   return CUBIT_SUCCESS;
      88                 :            : }
      89                 :            : 
      90                 :          0 : CubitStatus CompositeBody::remove( BodySM* body )
      91                 :          0 :   { return remove_body( index_of( body ) ); }
      92                 :            : 
      93                 :          0 : CubitStatus CompositeBody::remove_body( int index )
      94                 :            : {
      95         [ #  # ]:          0 :   if( index < 0 ) return CUBIT_FAILURE;
      96                 :            :   
      97         [ #  # ]:          0 :   if( realBodies[index]->owner() == this )
      98                 :          0 :     realBodies[index]->owner(0);
      99                 :          0 :   realBodies.remove(index);
     100                 :          0 :   return CUBIT_SUCCESS;
     101                 :            : }
     102                 :            : /*
     103                 :            : CubitStatus CompositeBody::move( const CubitVector& offset )
     104                 :            : {
     105                 :            :   int i;
     106                 :            :   for (i = 0; i < realBodies.size(); i++)
     107                 :            :     if (CUBIT_SUCCESS != realBodies[i]->move( offset ))
     108                 :            :       break;
     109                 :            :   
     110                 :            :   if (i == realBodies.size())
     111                 :            :     return CUBIT_SUCCESS;
     112                 :            :   
     113                 :            :   for (int j = 0; j < i; j++)
     114                 :            :     realBodies[j]->move( -offset );
     115                 :            :   return CUBIT_FAILURE;
     116                 :            : }
     117                 :            : 
     118                 :            : 
     119                 :            : CubitStatus CompositeBody::rotate( const CubitVector& axis, double angle )
     120                 :            : {
     121                 :            :   int i;
     122                 :            :   for (i = 0; i < realBodies.size(); i++)
     123                 :            :     if (CUBIT_SUCCESS != realBodies[i]->rotate( axis, angle ))
     124                 :            :       break;
     125                 :            :   
     126                 :            :   if (i == realBodies.size())
     127                 :            :     return CUBIT_SUCCESS;
     128                 :            :   
     129                 :            :   for (int j = 0; j < i; j++)
     130                 :            :     realBodies[j]->rotate( axis, -angle );
     131                 :            :   return CUBIT_FAILURE;
     132                 :            : }
     133                 :            : 
     134                 :            : CubitStatus CompositeBody::scale( double factor )
     135                 :            : {
     136                 :            :   int i;
     137                 :            :   for (i = 0; i < realBodies.size(); i++)
     138                 :            :     if (CUBIT_SUCCESS != realBodies[i]->scale( factor ))
     139                 :            :       break;
     140                 :            :   
     141                 :            :   if (i == realBodies.size())
     142                 :            :     return CUBIT_SUCCESS;
     143                 :            :   
     144                 :            :   for (int j = 0; j < i; j++)
     145                 :            :     realBodies[j]->scale( 1.0/factor );
     146                 :            :   return CUBIT_FAILURE;
     147                 :            : }
     148                 :            : 
     149                 :            : CubitStatus CompositeBody::scale( const CubitVector& factors )
     150                 :            : {
     151                 :            :   int i;
     152                 :            :   for (i = 0; i < realBodies.size(); i++)
     153                 :            :     if (CUBIT_SUCCESS != realBodies[i]->scale( factors ))
     154                 :            :       break;
     155                 :            :   
     156                 :            :   if (i == realBodies.size())
     157                 :            :     return CUBIT_SUCCESS;
     158                 :            :   
     159                 :            :   const CubitVector unscale( 1.0/factors.x(), 1.0/factors.y(), 1.0/factors.z() );
     160                 :            :   for (int j = 0; j < i; j++)
     161                 :            :     realBodies[j]->scale( unscale );
     162                 :            :   return CUBIT_FAILURE;
     163                 :            : }
     164                 :            : 
     165                 :            :   
     166                 :            : CubitStatus CompositeBody::reflect( const CubitVector& axis )
     167                 :            : {
     168                 :            :   int i;
     169                 :            :   for (i = 0; i < realBodies.size(); i++)
     170                 :            :     if (CUBIT_SUCCESS != realBodies[i]->reflect( axis ))
     171                 :            :       break;
     172                 :            :   
     173                 :            :   if (i == realBodies.size())
     174                 :            :     return CUBIT_SUCCESS;
     175                 :            :   
     176                 :            :   for (int j = 0; j < i; j++)
     177                 :            :     realBodies[j]->reflect( axis );
     178                 :            :   return CUBIT_FAILURE;
     179                 :            : }
     180                 :            :     
     181                 :            : 
     182                 :            : CubitStatus CompositeBody::restore()
     183                 :            :   { return CUBIT_FAILURE; }
     184                 :            : 
     185                 :            : CubitStatus CompositeBody::reverse()
     186                 :            :   { return CUBIT_FAILURE; }
     187                 :            : */
     188                 :          0 : CubitStatus CompositeBody::get_transforms( CubitTransformMatrix& )
     189                 :          0 :   { return CUBIT_FAILURE; }
     190                 :            : 
     191                 :          0 : void CompositeBody::get_parents_virt( DLIList<TopologyBridge*>& )
     192                 :          0 :   { }
     193                 :            : 
     194                 :          0 : void CompositeBody::get_children_virt( DLIList<TopologyBridge*>& children )
     195                 :            : {
     196         [ #  # ]:          0 :   for( CompositeLump* lump = firstLump; lump; lump = lump->nextLump )
     197         [ #  # ]:          0 :     children.append( lump );
     198                 :          0 : }
     199                 :            : 
     200                 :            : 
     201                 :            : //-------------------------------------------------------------------------
     202                 :            : // Purpose       : Get CompositeEngine
     203                 :            : //
     204                 :            : // Special Notes : 
     205                 :            : //
     206                 :            : // Creator       : Jason Kraftcheck
     207                 :            : //
     208                 :            : // Creation Date : 01/11/02
     209                 :            : //-------------------------------------------------------------------------
     210                 :          0 : GeometryQueryEngine* CompositeBody::get_geometry_query_engine() const
     211                 :          0 :   { return VirtualQueryEngine::instance(); }
     212                 :            : 
     213                 :            :   
     214                 :          0 : CubitStatus CompositeBody::remove_bridge( TopologyBridge* bridge )
     215                 :            : {
     216                 :            :   int i;
     217 [ #  # ][ #  # ]:          0 :   for (i = realBodies.size() - 1; i >= 0 && realBodies[i] != bridge; --i);
                 [ #  # ]
     218         [ #  # ]:          0 :   if (i < 0)
     219                 :          0 :     return CUBIT_FAILURE;
     220                 :            :   
     221         [ #  # ]:          0 :   assert( bridge->owner() == this );
     222                 :          0 :   bridge->owner( 0 );
     223                 :          0 :   realBodies.remove( i );
     224                 :            :   
     225         [ #  # ]:          0 :   if (realBodies.size() == 0)
     226                 :          0 :     CompositeEngine::instance().notify_deactivated( this );
     227                 :            :   
     228                 :          0 :   return CUBIT_SUCCESS;
     229                 :            : }
     230                 :            :   
     231                 :            :   
     232                 :          0 : CubitStatus CompositeBody::swap_bridge( TopologyBridge* old_tb, 
     233                 :            :                                         TopologyBridge* new_tb,
     234                 :            :                                         bool )
     235                 :            : {
     236 [ #  # ][ #  # ]:          0 :   if( new_tb->owner() )
     237                 :          0 :     return CUBIT_FAILURE;
     238                 :            :   
     239         [ #  # ]:          0 :   BodySM* new_body = dynamic_cast<BodySM*>(new_tb);
     240         [ #  # ]:          0 :   BodySM* old_body = dynamic_cast<BodySM*>(old_tb);
     241         [ #  # ]:          0 :   int index = realBodies.find( old_body );
     242 [ #  # ][ #  # ]:          0 :   if( index >= 0 && new_body != 0 && realBodies.find(new_body) < 0 )
         [ #  # ][ #  # ]
                 [ #  # ]
     243                 :            :   {
     244 [ #  # ][ #  # ]:          0 :     if( old_body->owner() == this )
     245         [ #  # ]:          0 :       old_body->owner(0);
     246         [ #  # ]:          0 :     new_body->owner(this);
     247         [ #  # ]:          0 :     realBodies[index] = new_body;
     248                 :          0 :     return CUBIT_SUCCESS;
     249                 :            :   }
     250                 :            :   
     251                 :          0 :   return CUBIT_FAILURE;
     252                 :            : }
     253                 :            :   
     254                 :          0 : CubitBoolean CompositeBody::contains_bridge( TopologyBridge* bridge ) const
     255                 :            : {
     256 [ #  # ][ #  # ]:          0 :   return index_of(dynamic_cast<BodySM*>(bridge)) < 0 ? CUBIT_FALSE : CUBIT_TRUE;
     257                 :            : }
     258                 :            : 
     259                 :          0 : void CompositeBody::notify_reversed( TopologyBridge* )
     260                 :          0 :   { assert(0); }
     261                 :            : 
     262                 :            : //-------------------------------------------------------------------------
     263                 :            : // Purpose       : Attribute functions
     264                 :            : //
     265                 :            : // Special Notes : 
     266                 :            : //
     267                 :            : // Creator       : Jason Kraftcheck
     268                 :            : //
     269                 :            : // Creation Date : 01/11/02
     270                 :            : //-------------------------------------------------------------------------
     271                 :          0 : void CompositeBody::append_simple_attribute_virt( const CubitSimpleAttrib& )
     272                 :          0 : { }
     273                 :          0 : void CompositeBody::remove_simple_attribute_virt( const CubitSimpleAttrib& )
     274                 :          0 : { }
     275                 :          0 : void CompositeBody::remove_all_simple_attribute_virt()
     276                 :          0 : { }
     277                 :          0 : CubitStatus CompositeBody::get_simple_attribute( DLIList<CubitSimpleAttrib>& )
     278                 :          0 : { return CUBIT_FAILURE; }
     279                 :          0 : CubitStatus CompositeBody::get_simple_attribute(
     280                 :            :           const CubitString& , DLIList<CubitSimpleAttrib>& )
     281                 :          0 : { return CUBIT_FAILURE; }
     282                 :            : 
     283                 :            : //-------------------------------------------------------------------------
     284                 :            : // Purpose       : 
     285                 :            : //
     286                 :            : // Special Notes : 
     287                 :            : //
     288                 :            : // Creator       : Jason Kraftcheck
     289                 :            : //
     290                 :            : // Creation Date : 05/10/04
     291                 :            : //-------------------------------------------------------------------------
     292                 :          0 : CubitPointContainment CompositeBody::point_containment( const CubitVector& pos, double tolerance )
     293                 :            : {
     294                 :          0 :   int inside = 0;
     295                 :          0 :   int boundary = 0;
     296                 :            :   
     297         [ #  # ]:          0 :   for (int i = 0; i < realBodies.size(); ++i)
     298                 :            :   {
     299   [ #  #  #  # ]:          0 :     switch( realBodies[i]->point_containment( pos, tolerance ) )
     300                 :            :     {
     301                 :            :       case CUBIT_PNT_BOUNDARY:
     302                 :          0 :         boundary++;
     303                 :          0 :         break;
     304                 :            :       case CUBIT_PNT_INSIDE:
     305                 :          0 :         inside++;
     306                 :          0 :         break;
     307                 :            :       case CUBIT_PNT_OUTSIDE:
     308                 :          0 :         break;
     309                 :            :       default:
     310                 :          0 :         return CUBIT_PNT_UNKNOWN;
     311                 :            :     }
     312                 :            :   }
     313                 :            :   
     314         [ #  # ]:          0 :   if (inside)
     315                 :          0 :     return CUBIT_PNT_INSIDE;
     316         [ #  # ]:          0 :   else if (boundary > 1)
     317                 :          0 :     return CUBIT_PNT_INSIDE;
     318         [ #  # ]:          0 :   else if (boundary)
     319                 :          0 :     return CUBIT_PNT_BOUNDARY;
     320                 :            :   else
     321                 :          0 :     return CUBIT_PNT_OUTSIDE;
     322                 :            : }
     323                 :            : 
     324                 :            : //-------------------------------------------------------------------------
     325                 :            : // Purpose       : 
     326                 :            : //
     327                 :            : // Special Notes : 
     328                 :            : //
     329                 :            : // Creator       : Jason Kraftcheck
     330                 :            : //
     331                 :            : // Creation Date : 05/10/04
     332                 :            : //-------------------------------------------------------------------------
     333                 :          0 : CubitStatus CompositeBody::mass_properties( CubitVector& result,
     334                 :            :                                             double& volume )
     335                 :            : {
     336                 :            :   double vol;
     337         [ #  # ]:          0 :   CubitVector centroid;
     338         [ #  # ]:          0 :   result.set( 0.0, 0.0, 0.0 );
     339                 :          0 :   volume = 0;
     340                 :            :   
     341 [ #  # ][ #  # ]:          0 :   for (int i = 0; i < realBodies.size(); ++i)
     342                 :            :   {
     343 [ #  # ][ #  # ]:          0 :     if (CUBIT_FAILURE == realBodies[i]->mass_properties( centroid, vol ))
                 [ #  # ]
     344                 :          0 :       return CUBIT_FAILURE;
     345                 :            :     
     346 [ #  # ][ #  # ]:          0 :     result += vol * centroid;
     347                 :          0 :     volume += vol;
     348                 :            :   }
     349                 :            :   
     350         [ #  # ]:          0 :   if (volume > CUBIT_RESABS)
     351         [ #  # ]:          0 :     result /= volume;
     352                 :          0 :   return CUBIT_SUCCESS;
     353                 :            : }
     354                 :            : 
     355                 :            : //-------------------------------------------------------------------------
     356                 :            : // Purpose       : Combine
     357                 :            : //
     358                 :            : // Special Notes : 
     359                 :            : //
     360                 :            : // Creator       : Jason Kraftcheck
     361                 :            : //
     362                 :            : // Creation Date : 06/11/04
     363                 :            : //-------------------------------------------------------------------------
     364                 :          0 : void CompositeBody::combine( CompositeBody* other )
     365                 :            : {
     366                 :          0 :   int oldsize = realBodies.size();
     367                 :          0 :   realBodies.size( oldsize + other->realBodies.size() );
     368         [ #  # ]:          0 :   for (int i = 0; i < other->realBodies.size(); i++)
     369                 :            :   {
     370                 :          0 :     BodySM* bod = other->realBodies[i];
     371                 :          0 :     realBodies[i+oldsize] = bod;
     372                 :          0 :     bod->owner(this);
     373                 :            :   }
     374                 :          0 :   other->realBodies.size(0);
     375                 :          0 : }
     376                 :            :   

Generated by: LCOV version 1.11