LCOV - code coverage report
Current view: top level - geom - CoEdge.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 27 66 40.9 %
Date: 2020-06-30 00:58:45 Functions: 8 15 53.3 %
Branches: 23 90 25.6 %

           Branch data     Line data    Source code
       1                 :            : //-------------------------------------------------------------------------
       2                 :            : // Filename      : CoEdge.cpp
       3                 :            : //
       4                 :            : // Purpose       : 
       5                 :            : //
       6                 :            : // Special Notes :
       7                 :            : //
       8                 :            : // Creator       : Xuechen Liu
       9                 :            : //
      10                 :            : // Creation Date : 08/02/96
      11                 :            : //
      12                 :            : // Owner         : Jihong Ma
      13                 :            : //-------------------------------------------------------------------------
      14                 :            : 
      15                 :            : // ********** BEGIN STANDARD INCLUDES      **********
      16                 :            : // ********** END STANDARD INCLUDES        **********
      17                 :            : 
      18                 :            : // ********** BEGIN CUBIT INCLUDES         **********
      19                 :            : #include "CoEdge.hpp"
      20                 :            : #include "RefEdge.hpp"
      21                 :            : #include "RefFace.hpp"
      22                 :            : #include "Loop.hpp"
      23                 :            : #include "DLIList.hpp"
      24                 :            : #include "GeometryDefines.h"
      25                 :            : #include "GeometryQueryTool.hpp"
      26                 :            : #include "CastTo.hpp"
      27                 :            : #include "CoEdgeSM.hpp"
      28                 :            : #include "Curve.hpp"
      29                 :            : 
      30                 :            : // ********** END CUBIT INCLUDES           **********
      31                 :            : 
      32                 :            : // ********** BEGIN STATIC DECLARATIONS    **********
      33                 :            : // ********** END STATIC DECLARATIONS      **********
      34                 :            : 
      35                 :            : // ********** BEGIN PUBLIC FUNCTIONS       **********
      36                 :            : //-------------------------------------------------------------------------
      37                 :            : // Purpose       : The default constructor.
      38                 :            : //
      39                 :            : // Special Notes :
      40                 :            : //
      41                 :            : // Creator       : Xuechen Liu
      42                 :            : //
      43                 :            : // Creation Date : 08/02/96
      44                 :            : //-------------------------------------------------------------------------
      45         [ +  - ]:     135202 : CoEdge::CoEdge() 
      46                 :            : {
      47                 :      67601 : }
      48                 :            : 
      49                 :            : //-------------------------------------------------------------------------
      50                 :            : // Purpose       : The destructor.
      51                 :            : //
      52                 :            : // Special Notes :
      53                 :            : //
      54                 :            : // Creator       : Raikanta Sahu
      55                 :            : //
      56                 :            : // Creation Date : 10/22/96
      57                 :            : //-------------------------------------------------------------------------
      58         [ +  - ]:     125733 : CoEdge::~CoEdge() 
      59                 :            : {
      60         [ +  - ]:      41911 :   remove_from_observers();
      61         [ -  + ]:      83822 : }
      62                 :            : 
      63                 :            : //-------------------------------------------------------------------------
      64                 :            : // Purpose       : The constructor with a pointer to a edge and the
      65                 :            : //                 sense of this CoEdge. 
      66                 :            : //
      67                 :            : // Special Notes :
      68                 :            : //
      69                 :            : // Creator       : Xuechen Liu
      70                 :            : //
      71                 :            : // Creation Date : 08/02/96
      72                 :            : //-------------------------------------------------------------------------
      73         [ #  # ]:          0 : CoEdge::CoEdge(RefEdge* edgePtr, CubitSense sense) 
      74                 :            : {
      75         [ #  # ]:          0 :    attach_basic_topology_entity(edgePtr) ;
      76         [ #  # ]:          0 :    set_sense(sense) ;
      77                 :          0 : }
      78                 :            : 
      79                 :            : //-------------------------------------------------------------------------
      80                 :            : // Purpose       : 
      81                 :            : //
      82                 :            : // Special Notes : 
      83                 :            : //
      84                 :            : // Creator       : Jason Kraftcheck
      85                 :            : //
      86                 :            : // Creation Date : 07/22/03
      87                 :            : //-------------------------------------------------------------------------
      88         [ #  # ]:          0 : CoEdge::CoEdge( CoEdgeSM* osme_ptr )
      89                 :            : {
      90         [ #  # ]:          0 :   set_co_edge_sm_ptr(osme_ptr);
      91                 :          0 : }
      92                 :            : 
      93                 :            : //-------------------------------------------------------------------------
      94                 :            : // Purpose       : Get the RefEdge associated with this CoEdge.
      95                 :            : //
      96                 :            : // Special Notes :
      97                 :            : //
      98                 :            : // Creator       : Malcolm J. Panthaki
      99                 :            : //
     100                 :            : // Creation Date : 08/02/96
     101                 :            : //-------------------------------------------------------------------------
     102                 :      97724 : RefEdge* CoEdge::get_ref_edge_ptr()  
     103                 :            : {
     104                 :            :    // Call the generic function defined in the SenseEntity class to
     105                 :            :    // do the real work
     106                 :      97724 :    BasicTopologyEntity* BTEPtr = get_basic_topology_entity_ptr();
     107                 :            : 
     108                 :            :    // Cast the returned pointer to RefEdge and return it
     109                 :      97724 :    return STATIC_CAST_TO( BTEPtr, RefEdge );
     110                 :            : }
     111                 :            : 
     112                 :            : //-------------------------------------------------------------------------
     113                 :            : // Purpose       : Get the parent Loop
     114                 :            : //
     115                 :            : // Special Notes : 
     116                 :            : //
     117                 :            : // Creator       : Jason Kraftcheck
     118                 :            : //
     119                 :            : // Creation Date : 09/23/99
     120                 :            : //-------------------------------------------------------------------------
     121                 :      18760 : Loop* CoEdge::get_loop_ptr()
     122                 :            : {
     123                 :      18760 :   return STATIC_CAST_TO( get_grouping_entity_ptr(), Loop );
     124                 :            : }
     125                 :            : 
     126                 :            : 
     127                 :            : //-------------------------------------------------------------------------
     128                 :            : // Purpose       : Get the ref_face associated with this CoEdge.
     129                 :            : //
     130                 :            : // Special Notes : Will assert if more than one ref_face but will
     131                 :            : //                 return NULL if no RefFaces are associated with it.
     132                 :            : //
     133                 :            : // Creator       : David White
     134                 :            : //
     135                 :            : // Creation Date : 3/14/97
     136                 :            : //-------------------------------------------------------------------------
     137                 :        264 : RefFace* CoEdge::get_ref_face()
     138                 :            : {
     139                 :        264 :   return static_cast<RefFace*>(get_parent_basic_topology_entity_ptr());
     140                 :            : }
     141                 :            :   
     142                 :            : 
     143                 :            : 
     144                 :            : //-------------------------------------------------------------------------
     145                 :            : // Purpose       : This function is called after a child of a TopologyEntity
     146                 :            : //                 is switched. The sense of a CoEdge may change if one 
     147                 :            : //                 of its RefEdges changes. This function takes care of 
     148                 :            : //                 that. If the sense of the RefEdges that were switched 
     149                 :            : //                 is same, nothing is done. If the RefEdges are of 
     150                 :            : //                 opposite sense, the sense of this object is switched, 
     151                 :            : //                 i.e. if it was FORWARD, it is made REVERSE, and vice
     152                 :            : //                 versa. 
     153                 :            : //
     154                 :            : // Special Notes :
     155                 :            : //
     156                 :            : // Creator       : Raikanta Sahu
     157                 :            : //
     158                 :            : // Creation Date : 02/26/97
     159                 :            : //-------------------------------------------------------------------------
     160                 :            : 
     161                 :          0 : void CoEdge::switch_child_notify(TopologyEntity const* newChild,
     162                 :            :                                  TopologyEntity const* oldChild)
     163                 :            : {
     164                 :            :     // Make sure the entities being switched are RefEdges. If not,
     165                 :            :     // get out of this function.
     166                 :            : 
     167                 :          0 :   TopologyEntity* tmp_new_child = const_cast<TopologyEntity*>(newChild);
     168                 :          0 :   TopologyEntity* tmp_old_child = const_cast<TopologyEntity*>(oldChild);
     169         [ #  # ]:          0 :   RefEdge * newChildRefEdge = CAST_TO(tmp_new_child, RefEdge) ;
     170         [ #  # ]:          0 :   RefEdge * oldChildRefEdge = CAST_TO(tmp_old_child, RefEdge) ;
     171                 :            :   
     172 [ #  # ][ #  # ]:          0 :   if ( ( newChildRefEdge == NULL ) || ( oldChildRefEdge == NULL ) )
     173                 :            :   {
     174                 :          0 :     return ;
     175                 :            :   }
     176                 :            : 
     177                 :            :     // If the children are RefEdges, get the sense of the old RefEdge 
     178                 :            :     // relative to the new one.
     179                 :            : 
     180                 :            :   CubitSense sense;
     181                 :            :   CubitBoolean spatially_equal;
     182                 :            :     //We really don't care at this point if the two are spatially equal.  
     183                 :            :     // The user could have done a force merge and in which case they are not.
     184                 :            :     // So just ignore that spatial comparison.
     185                 :            : 
     186                 :            : //When this function is called, the merge has already taken place, so force
     187                 :            : //  merge actually makes more sense to use here...
     188                 :          0 :   CubitBoolean force_merge = CUBIT_TRUE;
     189                 :            : 
     190                 :            :   /*CubitStatus stat = */
     191                 :            :   newChildRefEdge->relative_sense( 
     192                 :            :      oldChildRefEdge, GeometryQueryTool::get_geometry_factor(), &sense,
     193 [ #  # ][ #  # ]:          0 :      spatially_equal, force_merge );
     194                 :            :   
     195                 :            :     // If the sense of the old RefEdge relative to the new RefEdge is 
     196                 :            :     // same, nothing needs to be done. However, if the relative sense
     197                 :            :     // is reversed, switch the sense of the CoEdge.
     198         [ #  # ]:          0 :   if ( sense == CUBIT_REVERSED ) 
     199                 :            :   {
     200 [ #  # ][ #  # ]:          0 :     if ( get_sense() == CUBIT_FORWARD )
     201                 :            :     {
     202         [ #  # ]:          0 :       set_sense(CUBIT_REVERSED) ;
     203                 :            :     }
     204                 :            :     else
     205                 :            :     {
     206         [ #  # ]:          0 :       set_sense(CUBIT_FORWARD) ;
     207                 :            :     }
     208                 :            :   }
     209                 :            : }
     210                 :            : 
     211                 :            : //-------------------------------------------------------------------------
     212                 :            : // Purpose       : Get CoEdgeSM pointer
     213                 :            : //
     214                 :            : // Special Notes : 
     215                 :            : //
     216                 :            : // Creator       : Jason Kraftcheck
     217                 :            : //
     218                 :            : // Creation Date : 07/23/03
     219                 :            : //-------------------------------------------------------------------------
     220                 :          0 : CoEdgeSM* CoEdge::get_co_edge_sm_ptr() const
     221                 :            : {
     222                 :          0 :   return static_cast<CoEdgeSM*>(bridge_manager()->topology_bridge());
     223                 :            : }
     224                 :            : 
     225                 :            : 
     226                 :          0 : CubitStatus CoEdge::set_co_edge_sm_ptr( CoEdgeSM* ptr )
     227                 :            : {
     228         [ #  # ]:          0 :   if (!bridge_manager()->topology_bridge())
     229                 :          0 :     return bridge_manager()->add_bridge(ptr);
     230         [ #  # ]:          0 :   else if(bridge_manager()->topology_bridge() != ptr)
     231                 :          0 :     return CUBIT_FAILURE;
     232                 :            :   else
     233                 :          0 :     return CUBIT_SUCCESS;
     234                 :            : }
     235                 :            : 
     236                 :            : //-------------------------------------------------------------------------
     237                 :            : // Purpose       : Check if child RefEdges are equal and have correct
     238                 :            : //                 relative sense.
     239                 :            : //
     240                 :            : // Special Notes : 
     241                 :            : //
     242                 :            : // Creator       : Jason Kraftcheck
     243                 :            : //
     244                 :            : // Creation Date : 04/01/04
     245                 :            : //-------------------------------------------------------------------------
     246                 :       9849 : CubitBoolean CoEdge::about_spatially_equal( CoEdge* other_coedge,
     247                 :            :                                             CubitSense relative_sense,
     248                 :            :                                             double tolerance_factor,
     249                 :            :                                             CubitBoolean notify_refEntity )
     250                 :            : {
     251         [ +  - ]:       9849 :   RefEdge* this_ref_edge = get_ref_edge_ptr();
     252         [ +  - ]:       9849 :   RefEdge* other_ref_edge = other_coedge->get_ref_edge_ptr();
     253                 :            :   CubitSense edge_sense;
     254                 :            :   
     255         [ +  + ]:       9849 :   if (!this_ref_edge->about_spatially_equal( other_ref_edge,
     256                 :            :                                              tolerance_factor,
     257                 :            :                                              &edge_sense,
     258         [ +  - ]:       9849 :                                              notify_refEntity ))
     259                 :       8910 :     return CUBIT_FALSE;
     260                 :            :   
     261 [ +  - ][ +  - ]:       1878 :   if (this_ref_edge->get_curve_ptr()->geometry_type() == POINT_CURVE_TYPE ||
         [ +  - ][ -  + ]
                 [ -  + ]
     262 [ +  - ][ +  - ]:        939 :       other_ref_edge->get_curve_ptr()->geometry_type() == POINT_CURVE_TYPE)
     263                 :          0 :     return CUBIT_TRUE;
     264                 :            :   
     265         [ -  + ]:        939 :   if (edge_sense == CUBIT_UNKNOWN)
     266                 :            :   {
     267 [ #  # ][ #  # ]:          0 :     PRINT_WARNING("Failed to determine relative sense of curves.\n");
         [ #  # ][ #  # ]
     268                 :          0 :     return CUBIT_TRUE;
     269                 :            :   }
     270                 :            :   
     271 [ +  - ][ +  - ]:        939 :   bool coedges_reversed = get_sense() != other_coedge->get_sense();
     272                 :        939 :   bool want_reversed = edge_sense != relative_sense;
     273         [ +  + ]:        939 :   if (coedges_reversed == want_reversed)
     274                 :        616 :     return CUBIT_TRUE;
     275                 :            :   
     276                 :            :  // if (notify_refEntity)
     277                 :            :  // {
     278                 :            :  //   this_ref_edge->remove_compare_data();
     279                 :            :  //   other_ref_edge->remove_compare_data();
     280                 :            :  // }
     281                 :       9849 :   return CUBIT_FALSE;
     282                 :            : }
     283                 :            : 
     284                 :            : //-------------------------------------------------------------------------
     285                 :            : // Purpose       : Get start/end vertex
     286                 :            : //
     287                 :            : // Special Notes : 
     288                 :            : //
     289                 :            : // Creator       : Jason Kraftcheck
     290                 :            : //
     291                 :            : // Creation Date : 05/11/04
     292                 :            : //-------------------------------------------------------------------------
     293                 :          0 : RefVertex* CoEdge::start_vertex() 
     294                 :            : {
     295                 :          0 :   return get_sense() == CUBIT_FORWARD ? 
     296                 :          0 :          get_ref_edge_ptr()->start_vertex() :
     297         [ #  # ]:          0 :          get_ref_edge_ptr()->end_vertex();
     298                 :            : }
     299                 :          0 : RefVertex* CoEdge::end_vertex() 
     300                 :            : {
     301                 :          0 :   return get_sense() == CUBIT_REVERSED ? 
     302                 :          0 :          get_ref_edge_ptr()->start_vertex() :
     303         [ #  # ]:          0 :          get_ref_edge_ptr()->end_vertex();
     304 [ +  - ][ +  - ]:       6540 : }
     305                 :            : 
     306                 :            : // ********** END PUBLIC FUNCTIONS         **********
     307                 :            : 
     308                 :            : // ********** BEGIN PROTECTED FUNCTIONS    **********
     309                 :            : // ********** END PROTECTED FUNCTIONS      **********
     310                 :            : 
     311                 :            : // ********** BEGIN PRIVATE FUNCTIONS      **********
     312                 :            : // ********** END PRIVATE FUNCTIONS        **********
     313                 :            : 
     314                 :            : // ********** BEGIN HELPER CLASSES         **********
     315                 :            : // ********** END HELPER CLASSES           **********
     316                 :            : 
     317                 :            : // ********** BEGIN EXTERN FUNCTIONS       **********
     318                 :            : // ********** END EXTERN FUNCTIONS         **********
     319                 :            : 
     320                 :            : // ********** BEGIN STATIC FUNCTIONS       **********
     321                 :            : // ********** END STATIC FUNCTIONS         **********
     322                 :            : 

Generated by: LCOV version 1.11