LCOV - code coverage report
Current view: top level - geom - RefVertex.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 49 91 53.8 %
Date: 2020-06-30 00:58:45 Functions: 10 13 76.9 %
Branches: 35 214 16.4 %

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : RefVertex.cpp
       3                 :            : //
       4                 :            : // Purpose       : This file contains the implementation of the class 
       5                 :            : //                 RefVertex. A RefVertex is a TopologyEntity and represents
       6                 :            : //                 a point or vertex in the topology of the Model. 
       7                 :            : //
       8                 :            : // Special Notes :
       9                 :            : //
      10                 :            : // Creator       : Xuechen Liu
      11                 :            : //
      12                 :            : // Creation Date : 07/11/96 
      13                 :            : //
      14                 :            : // Owner         : Malcolm J. Panthaki
      15                 :            : //-------------------------------------------------------------------------
      16                 :            : 
      17                 :            : 
      18                 :            : #include <assert.h>
      19                 :            : 
      20                 :            : #include "CubitDefines.h"
      21                 :            : #include "GeometryDefines.h"
      22                 :            : 
      23                 :            : #include "RefEntityFactory.hpp"
      24                 :            : #include "GeometryQueryTool.hpp"
      25                 :            : #include "GeometryQueryEngine.hpp"
      26                 :            : #include "ModelQueryEngine.hpp"
      27                 :            : 
      28                 :            : #include "RefVolume.hpp"
      29                 :            : #include "RefFace.hpp"
      30                 :            : #include "RefEdge.hpp"
      31                 :            : #include "RefVertex.hpp"
      32                 :            : #include "Point.hpp"
      33                 :            : #include "DLIList.hpp"
      34                 :            : #include "CastTo.hpp"
      35                 :            : #include "ToolData.hpp"
      36                 :            : #include "CoVertex.hpp"
      37                 :            : 
      38                 :            : //-------------------------------------------------------------------------
      39                 :            : // Purpose       : Constructor with a pointer to a Point
      40                 :            : //
      41                 :            : // Special Notes :
      42                 :            : //
      43                 :            : // Creator       : Xuechen Liu
      44                 :            : //
      45                 :            : // Creation Date : 07/11/96
      46                 :            : //-------------------------------------------------------------------------
      47                 :      48966 : RefVertex::RefVertex(TBPoint* pointPtr)
      48                 :            : {
      49                 :            :    // Set the GeometryEntity pointer
      50         [ +  - ]:      24483 :    if (pointPtr != NULL)
      51                 :            :    {
      52         [ +  - ]:      24483 :       set_geometry_entity_ptr(pointPtr) ;
      53                 :            :    }
      54                 :            :    else
      55                 :            :    {
      56 [ #  # ][ #  # ]:          0 :       PRINT_ERROR("In the RefVertex(TBPoint*) constructor\n");
         [ #  # ][ #  # ]
      57 [ #  # ][ #  # ]:          0 :       PRINT_ERROR("       Input TBPoint pointer is NULL\n");
         [ #  # ][ #  # ]
      58                 :          0 :       assert(CUBIT_FALSE);
      59                 :            :    }
      60                 :            :    
      61                 :            :    // Initialize the member data
      62         [ +  - ]:      24483 :    initialize();
      63                 :      24483 : }
      64                 :            : 
      65                 :            : //-------------------------------------------------------------------------
      66                 :            : // Purpose       : The destructor.
      67                 :            : //
      68                 :            : // Special Notes :
      69                 :            : //
      70                 :            : // Creator       : Malcolm J. Panthaki
      71                 :            : //
      72                 :            : // Creation Date : 11/06/96
      73                 :            : //-------------------------------------------------------------------------
      74                 :      45669 : RefVertex::~RefVertex()
      75                 :            : {
      76         [ -  + ]:      30446 : }
      77                 :            : 
      78                 :            : //-------------------------------------------------------------------------
      79                 :            : // Purpose       : Return a pointer to the point associated with a vertex.
      80                 :            : //
      81                 :            : // Special Notes :
      82                 :            : //
      83                 :            : // Creator       : Xuechen Liu
      84                 :            : //
      85                 :            : // Creation Date : 08/02/96
      86                 :            : //-------------------------------------------------------------------------
      87                 :        550 : TBPoint* RefVertex::get_point_ptr() 
      88                 :            : {
      89         [ -  + ]:        550 :   return CAST_TO(get_geometry_entity_ptr(), TBPoint) ;
      90                 :            : }
      91                 :            : 
      92                 :     189030 : const TBPoint* RefVertex::get_point_ptr() const 
      93                 :            : {
      94         [ +  - ]:     189030 :   return CAST_TO(get_geometry_entity_ptr(), TBPoint) ;
      95                 :            : }
      96                 :            : 
      97                 :            : 
      98                 :            : //-------------------------------------------------------------------------
      99                 :            : // Purpose       : Returns the global coordinates of this RefVertex.
     100                 :            : //
     101                 :            : // Special Notes :
     102                 :            : //
     103                 :            : // Creator       : Malcolm J. Panthaki
     104                 :            : //
     105                 :            : // Creation Date : 09/25/96
     106                 :            : //-------------------------------------------------------------------------
     107                 :     189030 : CubitVector RefVertex::coordinates() const
     108                 :            : {
     109                 :     189030 :   const TBPoint* point_ptr = get_point_ptr();
     110                 :            :   
     111         [ +  - ]:     189030 :   if (point_ptr != NULL)
     112                 :            :   {
     113                 :     189030 :     return point_ptr->coordinates();
     114                 :            :   }
     115                 :            :   else
     116                 :            :   {
     117         [ #  # ]:          0 :     PRINT_ERROR("In RefVertex::coordinates\n"
     118                 :            :                 "       RefVertex %d has no GeometryEntity attached to it.\n"
     119         [ #  # ]:          0 :                 "       THIS IS A BUG - PLEASE REPORT IT.\n", id());
     120         [ #  # ]:          0 :     assert( point_ptr != NULL );
     121                 :     189030 :     return CubitVector();
     122                 :            :   }
     123                 :            : }
     124                 :            : 
     125                 :            : //-------------------------------------------------------------------------
     126                 :            : // Purpose       : Return the "center point" of the RefVertex -- its 
     127                 :            : //                 coordinates.
     128                 :            : //
     129                 :            : // Special Notes :
     130                 :            : //
     131                 :            : // Creator       : Raikanta Sahu
     132                 :            : //
     133                 :            : // Creation Date : 10/30/96
     134                 :            : //-------------------------------------------------------------------------
     135                 :          0 : CubitVector RefVertex::center_point()
     136                 :            : {
     137                 :          0 :    return this->coordinates();
     138                 :            : }
     139                 :          0 : void RefVertex::common_ref_edges(RefVertex *other_vertex,
     140                 :            :                                 DLIList <RefEdge*> &common_ref_edges,
     141                 :            :                                 RefFace *owning_face) 
     142                 :            : {
     143                 :            :     //- returns an edge sharing the other vertex and owned by owning_face 
     144                 :            :     //- (if non-NULL)
     145                 :            :     //- The edge must have this vertex and other_vertex as its
     146                 :            :     //- start and end vertices.
     147         [ #  # ]:          0 :   DLIList<RefEntity*> temp_list;
     148 [ #  # ][ #  # ]:          0 :   join(other_vertex, temp_list);
     149                 :            : 
     150                 :            :   int i;
     151 [ #  # ][ #  # ]:          0 :   for (i = temp_list.size(); i > 0; i--)
     152                 :            :   {
     153 [ #  # ][ #  # ]:          0 :     RefEdge *common_edge = CAST_TO(temp_list.get(), RefEdge);
     154                 :            :       //This extra 'if' block is needed in case other_vertex == this
     155 [ #  # ][ #  # ]:          0 :     if (common_edge &&  
                 [ #  # ]
     156 [ #  # ][ #  # ]:          0 :         ((common_edge->start_vertex() == other_vertex &&
     157 [ #  # ][ #  # ]:          0 :            common_edge->end_vertex() == this) ||
     158 [ #  # ][ #  # ]:          0 :          ( common_edge->start_vertex() == this &&
     159         [ #  # ]:          0 :            common_edge->end_vertex() == other_vertex )))
     160                 :            :     {
     161 [ #  # ][ #  # ]:          0 :       if (common_edge && (!owning_face || common_edge->is_child(owning_face)))
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     162         [ #  # ]:          0 :         common_ref_edges.append(common_edge);
     163                 :            :     }
     164         [ #  # ]:          0 :     temp_list.step();
     165                 :            :   }
     166         [ #  # ]:          0 :   return;
     167                 :            : }
     168                 :            : 
     169                 :          0 : RefEdge *RefVertex::common_ref_edge(RefVertex *other_vertex, 
     170                 :            :                                     RefFace *owning_face) 
     171                 :            : {
     172                 :            :     //- returns an edge sharing the other vertex and owned by owning_face
     173                 :            :     //- (if non-NULL)
     174                 :            :     //- The edge must have this vertex and other_vertex as its
     175                 :            :     //- start and end vertices.
     176         [ #  # ]:          0 :   DLIList<RefEntity*> temp_list;
     177 [ #  # ][ #  # ]:          0 :   join(other_vertex, temp_list);
     178                 :            : 
     179                 :            :   int i;
     180 [ #  # ][ #  # ]:          0 :   for (i = temp_list.size(); i > 0; i--) {
     181 [ #  # ][ #  # ]:          0 :     RefEdge *common_edge = CAST_TO(temp_list.get(), RefEdge);
     182                 :            : 
     183         [ #  # ]:          0 :     if( NULL == common_edge )
     184                 :          0 :       continue;
     185                 :            : 
     186                 :            :       //This extra 'if' block is needed in case other_vertex == this
     187 [ #  # ][ #  # ]:          0 :     if ( ( common_edge->start_vertex() == other_vertex &&
                 [ #  # ]
     188 [ #  # ][ #  # ]:          0 :            common_edge->end_vertex() == this) ||
                 [ #  # ]
     189 [ #  # ][ #  # ]:          0 :          ( common_edge->start_vertex() == this &&
     190         [ #  # ]:          0 :            common_edge->end_vertex() == other_vertex ) )
     191                 :            :     {
     192 [ #  # ][ #  # ]:          0 :       if (common_edge && (!owning_face || common_edge->is_child(owning_face)))
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     193                 :          0 :         return common_edge;
     194                 :            :       else
     195         [ #  # ]:          0 :         temp_list.step();
     196                 :            :     }
     197                 :            :     else
     198         [ #  # ]:          0 :       temp_list.step();
     199                 :            :   }
     200                 :            :   
     201         [ #  # ]:          0 :   return NULL;
     202                 :            : }
     203                 :            : 
     204                 :            : //-------------------------------------------------------------------------
     205                 :            : // Purpose       : Spatially compare two RefVertexes, notification is made if
     206                 :            : //                 the flag notify_ref_entity is set.
     207                 :            : //
     208                 :            : // Special Notes :
     209                 :            : //
     210                 :            : // Creator       : David White
     211                 :            : //
     212                 :            : // Creation Date : 04/08/97
     213                 :            : //-------------------------------------------------------------------------
     214                 :       3614 : CubitBoolean RefVertex::about_spatially_equal(
     215                 :            :                                 RefVertex* ref_vertex_ptr_2,
     216                 :            :                                 double tolerance_factor,
     217                 :            :                                 CubitBoolean notify_ref_entity )
     218                 :            : {
     219         [ +  + ]:       3614 :    if( this == ref_vertex_ptr_2 )
     220                 :            :    {
     221         [ -  + ]:         80 :       if (notify_ref_entity)
     222         [ #  # ]:          0 :         remove_compare_data();
     223                 :         80 :       return CUBIT_TRUE;
     224                 :            :    }
     225                 :            :  
     226         [ +  - ]:       3534 :    const CubitVector vertex_1_position = this->coordinates();
     227         [ +  - ]:       3534 :    const CubitVector vertex_2_position = ref_vertex_ptr_2->coordinates();
     228         [ +  + ]:       3534 :    if (!GeometryQueryTool::instance()-> about_spatially_equal(
     229 [ +  - ][ +  - ]:       3534 :      vertex_1_position, vertex_2_position, tolerance_factor))
     230                 :       2612 :      return CUBIT_FALSE;
     231                 :            :      
     232         [ -  + ]:        922 :    if ( notify_ref_entity == CUBIT_TRUE )
     233 [ #  # ][ #  # ]:          0 :      this->comparison_found(ref_vertex_ptr_2);
     234                 :            : 
     235                 :       3614 :    return CUBIT_TRUE;
     236                 :            : }  
     237                 :            : 
     238                 :            : // ********** END PUBLIC FUNCTIONS         **********
     239                 :            : 
     240                 :            : // ********** BEGIN PROTECTED FUNCTIONS    **********
     241                 :            : // ********** END PROTECTED FUNCTIONS      **********
     242                 :            : 
     243                 :            : // ********** BEGIN PRIVATE FUNCTIONS      **********
     244                 :            : 
     245                 :            : //-------------------------------------------------------------------------
     246                 :            : // Purpose       : Initializes member data
     247                 :            : //
     248                 :            : // Special Notes :
     249                 :            : //
     250                 :            : // Creator       : Malcolm J. Panthaki
     251                 :            : //
     252                 :            : // Creation Date : 10/07/96
     253                 :            : //-------------------------------------------------------------------------
     254                 :      24483 : void RefVertex::initialize()
     255                 :            : {
     256                 :      24483 :    GeometryEntity* geom_ptr = get_geometry_entity_ptr();
     257                 :      24483 :    int saved_id = geom_ptr->get_saved_id();
     258 [ -  + ][ #  # ]:      24483 :    if ( !saved_id || RefEntityFactory::instance()->get_ref_vertex(saved_id) )
                 [ +  - ]
     259                 :            :    {
     260                 :      24483 :      saved_id =  RefEntityFactory::instance()->next_ref_vertex_id();
     261                 :      24483 :      geom_ptr->set_saved_id(saved_id);
     262                 :            :    }
     263                 :      24483 :    entityId = saved_id;
     264                 :            : 
     265                 :            :    // Initialize some attributes
     266                 :            : 
     267                 :            :      // read and initialize attributes
     268                 :      24483 :    auto_read_cubit_attrib();
     269                 :      24483 :    auto_actuate_cubit_attrib();
     270                 :            :    
     271                 :            :    // Assign a default entity name
     272                 :      24483 :    assign_default_name();
     273                 :            : 
     274                 :      24483 : }
     275                 :            : 
     276                 :        864 : void RefVertex::get_parent_ref_entities(DLIList<RefEntity*>& entity_list)
     277                 :            : {
     278                 :            : 
     279                 :            :   // First get the type of RefEntity that is a child of "this" one
     280         [ +  - ]:        864 :   DagType parent_type = get_parent_ref_entity_type();;
     281                 :            : 
     282         [ +  - ]:        864 :   DLIList<TopologyEntity*> tempList ;
     283                 :            : 
     284                 :            :   CubitStatus result = ModelQueryEngine::instance()->
     285 [ +  - ][ +  - ]:        864 :       query_model( *this, parent_type, tempList );
     286         [ -  + ]:        864 :   if (result == CUBIT_FAILURE)
     287                 :            :   {
     288 [ #  # ][ #  # ]:          0 :     PRINT_ERROR("In RefEntity::get_parent_ref_entities\n");
         [ #  # ][ #  # ]
     289 [ #  # ][ #  # ]:          0 :     PRINT_ERROR("       Query failed for unknown reason.\n");
         [ #  # ][ #  # ]
     290                 :        864 :     return;
     291                 :            :   }
     292                 :            : 
     293         [ +  - ]:        864 :   entity_list.clean_out();
     294 [ +  - ][ +  + ]:       3416 :   for(int i=0; i<tempList.size(); i++)
         [ +  - ][ +  - ]
     295                 :            :   {
     296 [ +  - ][ +  - ]:       2552 :     entity_list.append(static_cast<ParentType*>(tempList[i]));
                 [ +  - ]
     297                 :        864 :   }
     298 [ +  - ][ +  - ]:       6540 : }

Generated by: LCOV version 1.11