LCOV - code coverage report
Current view: top level - geom - GeometryFeatureTool.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 1 86 1.2 %
Date: 2020-06-30 00:58:45 Functions: 2 13 15.4 %
Branches: 2 122 1.6 %

           Branch data     Line data    Source code
       1                 :            : // *** BEGIN INCLUDES *** //
       2                 :            : #include "GeometryFeatureTool.hpp"
       3                 :            : #include "Body.hpp"
       4                 :            : #include "RefEntityFactory.hpp"
       5                 :            : #include "TopologyEntity.hpp"
       6                 :            : #include "CastTo.hpp"
       7                 :            : #include "RefFace.hpp"
       8                 :            : #include "BasicTopologyEntity.hpp"
       9                 :            : #include "TDSourceFeature.hpp"
      10                 :            : // *** END INCLUDES *** //
      11                 :            : 
      12                 :            : GeometryFeatureTool* GeometryFeatureTool::instance_ = 0;
      13                 :            : 
      14                 :            : // *** BEGIN PUBLIC FUNCTIONS *** //
      15                 :          0 : GeometryFeatureTool* GeometryFeatureTool::instance( GeometryFeatureEngine *GFEPtr )
      16                 :            : {
      17                 :            :    // Check to see if we have created an instance of the class;
      18                 :            :    // if not, proceed to create one.
      19         [ #  # ]:          0 :    if (instance_ == 0)
      20                 :            :    {
      21                 :            :       // When creating the instance, we should always have a valid
      22                 :            :       // gfePtr. If not, complain.
      23         [ #  # ]:          0 :       instance_ = new GeometryFeatureTool(GFEPtr);
      24                 :            : 
      25                 :            :       // Check to make sure there's a ref entity factory extant:
      26                 :            :       // RefEntityFactory *factory =
      27                 :          0 :       RefEntityFactory::instance();
      28                 :            :    }
      29                 :            :    // If there is an existing instance of the class, check if there
      30                 :            :    // is a request to set the default engine. If so, do so.
      31 [ #  # ][ #  # ]:          0 :    else if ( GFEPtr != NULL && !instance_->gfeList.move_to(GFEPtr) )
                 [ #  # ]
      32                 :            :    {
      33         [ #  # ]:          0 :       delete instance_->gfeList.remove();
      34                 :          0 :       instance_->gfeList.insert(GFEPtr);
      35                 :            :    }
      36                 :            : 
      37                 :            :    // Return the a pointer to the instance of the class.
      38                 :          0 :    return instance_;
      39                 :            : }
      40                 :            : 
      41                 :          0 : GeometryFeatureTool::~GeometryFeatureTool()
      42                 :            : {
      43 [ #  # ][ #  # ]:          0 :    for (int i = gfeList.size(); i > 0; i--)
      44 [ #  # ][ #  # ]:          0 :       delete gfeList.get_and_step();
                 [ #  # ]
      45                 :            : 
      46         [ #  # ]:          0 :    gfeList.clean_out();
      47                 :          0 :    instance_ = NULL;
      48                 :          0 : }
      49                 :            : 
      50                 :            : // *** BEGIN ENGINE OPERATIONS *** //
      51                 :          0 : void GeometryFeatureTool::add_gfe( GeometryFeatureEngine *gfe_ptr )
      52                 :            : {
      53         [ #  # ]:          0 :    assert(gfe_ptr != 0);
      54                 :            : 
      55         [ #  # ]:          0 :    if (!gfeList.move_to(gfe_ptr))
      56                 :          0 :       gfeList.append(gfe_ptr);
      57                 :          0 : }
      58                 :            : 
      59                 :          0 : GeometryFeatureEngine* GeometryFeatureTool::get_engine( TopologyBridge *tb_ptr ) const
      60                 :            : {
      61                 :            :   GeometryFeatureEngine *gfe;
      62                 :            : 
      63         [ #  # ]:          0 :   for (int i = 0; i < gfeList.size(); i++)
      64                 :            :   {
      65                 :          0 :     gfe = gfeList.next(i);
      66         [ #  # ]:          0 :     if (gfe->is_feature_engine(tb_ptr))
      67                 :          0 :        return gfe;
      68                 :            :   }
      69                 :            : 
      70                 :          0 :   return NULL;
      71                 :            : }
      72                 :            : 
      73                 :          0 : GeometryFeatureEngine* GeometryFeatureTool::get_engine( TopologyEntity *te_ptr ) const
      74                 :            : {
      75                 :            :   GeometryFeatureEngine *gfe;
      76                 :            : 
      77                 :          0 :   TopologyBridge *tb_ptr = te_ptr->bridge_manager()->topology_bridge();
      78                 :            : 
      79         [ #  # ]:          0 :   for (int i = 0; i < gfeList.size(); i++)
      80                 :            :   {
      81                 :          0 :     gfe = gfeList.next(i);
      82         [ #  # ]:          0 :     if (gfe->is_feature_engine(tb_ptr))
      83                 :          0 :        return gfe;
      84                 :            :   }
      85                 :            : 
      86                 :          0 :   return NULL;
      87                 :            : }
      88                 :            : 
      89                 :          0 : CubitBoolean GeometryFeatureTool::same_feature_engine( DLIList<RefEntity*> &ref_entity_list,
      90                 :            :                                                                                    CubitBoolean check_children ) const
      91                 :            : {
      92         [ #  # ]:          0 :    DLIList<RefEntity*> complete_entity_list;
      93                 :            : 
      94                 :            :    //Check the check_children option and check all the children if necessary
      95         [ #  # ]:          0 :    if (check_children)
      96                 :            :    {
      97                 :            :       //Make a complete list of all the RefEntities and their children
      98         [ #  # ]:          0 :       DLIList<RefEntity*> temp = ref_entity_list;
      99                 :            :       RefEntity* ref_entity_ptr;
     100                 :            : 
     101 [ #  # ][ #  # ]:          0 :       for (int i = 0; i < ref_entity_list.size(); i++)
     102                 :            :       {
     103         [ #  # ]:          0 :          ref_entity_ptr = ref_entity_list.get_and_step();
     104         [ #  # ]:          0 :          complete_entity_list.clean_out();
     105         [ #  # ]:          0 :          ref_entity_ptr->get_all_child_ref_entities(complete_entity_list);
     106         [ #  # ]:          0 :          temp += complete_entity_list;
     107                 :            :       }
     108                 :            : 
     109         [ #  # ]:          0 :       complete_entity_list.clean_out();
     110 [ #  # ][ #  # ]:          0 :       complete_entity_list.merge_unique(temp);
     111                 :            :    }
     112                 :            : 
     113                 :            :    //Now make sure all the RefEntities are from the same geometry engine
     114 [ #  # ][ #  # ]:          0 :    DLIList<TopologyEntity*> te_list;
     115 [ #  # ][ #  # ]:          0 :    CAST_LIST(complete_entity_list, te_list, TopologyEntity);
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     116 [ #  # ][ #  # ]:          0 :    return same_feature_engine(te_list);
     117                 :            : }
     118                 :            : 
     119                 :          0 : CubitBoolean GeometryFeatureTool::same_feature_engine( DLIList<TopologyEntity*> &topo_list ) const
     120                 :            : {
     121                 :          0 :    GeometryFeatureEngine *gePtr1 = get_engine(topo_list.get_and_step());
     122                 :            :    GeometryFeatureEngine *gePtr2;
     123                 :            : 
     124         [ #  # ]:          0 :    for (int i = 1; i < topo_list.size(); i++)
     125                 :            :    {
     126                 :          0 :       gePtr2 = get_engine(topo_list.get_and_step());
     127         [ #  # ]:          0 :       if (gePtr1 != gePtr2)
     128                 :            :       {
     129                 :          0 :          return CUBIT_FALSE;
     130                 :            :       }
     131                 :            :    }
     132                 :          0 :    return CUBIT_TRUE;
     133                 :            : }
     134                 :            : 
     135                 :            : // *** END ENGINE OPERATIONS *** //
     136                 :            : 
     137                 :            : // *** BEGIN FEATURE FUNCTIONS *** //
     138                 :            : 
     139                 :            : GeometryFeatureEngine::FeatureType
     140                 :          0 : GeometryFeatureTool::feature_type(BasicTopologyEntity* bte)
     141                 :            : {
     142                 :            :     // first check to see if the feature information is in the tool data
     143                 :          0 :     TDSourceFeature *tdss = 0;
     144                 :            :     tdss = (TDSourceFeature *)bte->
     145                 :          0 :         get_TD(&TDSourceFeature::is_source_feature);
     146                 :            : 
     147         [ #  # ]:          0 :     if(tdss)
     148                 :          0 :         return tdss->source_feature();
     149                 :            : 
     150                 :            :     // if the feature information is not in the tool data 
     151                 :            :     // then call the engine specific FeatureEngine
     152                 :          0 :     TopologyEntity* topo_ptr = CAST_TO(bte, TopologyEntity);
     153                 :            : 
     154         [ #  # ]:          0 :     if (!topo_ptr)
     155                 :          0 :         return GeometryFeatureEngine::FEATURE_UNDEFINED;
     156                 :            : 
     157                 :          0 :     GeometryFeatureEngine* gfe = get_engine(topo_ptr);
     158                 :            : 
     159         [ #  # ]:          0 :     if(!gfe)
     160                 :          0 :         return GeometryFeatureEngine::FEATURE_UNDEFINED;
     161                 :            : 
     162                 :          0 :     return gfe->feature_type(bte->get_geometry_entity_ptr());
     163                 :            : }
     164                 :            : 
     165                 :          0 : CubitStatus GeometryFeatureTool::get_related_by_feature(
     166                 :            :     BasicTopologyEntity* bte,
     167                 :            :     DLIList<GeometryEntity*>& return_list)
     168                 :            : {
     169                 :          0 :     TopologyEntity* topo_ptr = CAST_TO(bte, TopologyEntity);
     170                 :            : 
     171         [ #  # ]:          0 :     if (!topo_ptr)
     172                 :          0 :         return CUBIT_FAILURE;
     173                 :            : 
     174                 :          0 :     GeometryFeatureEngine* gfe = get_engine(topo_ptr);
     175                 :            : 
     176         [ #  # ]:          0 :     if(!gfe)
     177                 :          0 :         return CUBIT_FAILURE;
     178                 :            : 
     179                 :          0 :     return gfe->get_related_by_feature(bte->get_geometry_entity_ptr(),return_list);
     180                 :            : }
     181                 :            : 
     182                 :            : DLIList<GeometryFeatureEngine::FeatureType> 
     183                 :          0 : GeometryFeatureTool::available_feature_types(BasicTopologyEntity* bte)
     184                 :            : {
     185                 :          0 :     TopologyEntity* topo_ptr = CAST_TO(bte, TopologyEntity);
     186         [ #  # ]:          0 :     DLIList<GeometryFeatureEngine::FeatureType> null_list;
     187         [ #  # ]:          0 :     if (!topo_ptr)
     188         [ #  # ]:          0 :         return null_list;
     189                 :            : 
     190         [ #  # ]:          0 :     GeometryFeatureEngine* gfe = get_engine(topo_ptr);
     191                 :            : 
     192         [ #  # ]:          0 :     if(!gfe)
     193         [ #  # ]:          0 :         return null_list;
     194                 :            : 
     195 [ #  # ][ #  # ]:          0 :     return gfe->available_feature_types(bte->get_geometry_entity_ptr());
                 [ #  # ]
     196                 :            : }
     197                 :            : 
     198                 :            : // *** END PUBLIC FUNCTIONS *** //
     199                 :            : 
     200                 :            : // *** BEGIN PROTECTED FUNCTIONS *** //
     201                 :            : 
     202                 :          0 : GeometryFeatureTool::GeometryFeatureTool( GeometryFeatureEngine* GFEPtr )
     203                 :            : {
     204         [ #  # ]:          0 :   if (GFEPtr != NULL)
     205         [ #  # ]:          0 :      add_gfe(GFEPtr);
     206 [ +  - ][ +  - ]:       6540 : }
     207                 :            : 
     208                 :            : // *** END PROTECTED FUNCTIONS *** //
     209                 :            : 
     210                 :            : // *** BEGIN PRIVATE FUNCTIONS *** //
     211                 :            : 
     212                 :            : // *** END PRIVATE FUNCTIONS *** //

Generated by: LCOV version 1.11