LCOV - code coverage report
Current view: top level - algs - VertexMesher.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 33 35 94.3 %
Date: 2020-07-01 15:24:36 Functions: 8 8 100.0 %
Branches: 39 88 44.3 %

           Branch data     Line data    Source code
       1                 :            : #include "meshkit/VertexMesher.hpp"
       2                 :            : #include "meshkit/MKCore.hpp"
       3                 :            : #include "MBTagConventions.hpp"
       4                 :            : #include "moab/EntityType.hpp"
       5                 :            : #include "meshkit/iGeom.hpp"
       6                 :            : #include "meshkit/RegisterMeshOp.hpp"
       7                 :            : 
       8                 :            : namespace MeshKit 
       9                 :            : {
      10                 :            :     
      11                 :            :  
      12                 :            : // static registration of this  mesh scheme
      13                 :            : moab::EntityType types[] = { moab::MBVERTEX, moab::MBMAXTYPE};
      14                 :         40 : const moab::EntityType* VertexMesher::output_types() 
      15                 :         40 :   { return types; }
      16                 :            :     
      17                 :         32 : VertexMesher::VertexMesher(MKCore *mkcore, const MEntVector &me_vec) 
      18                 :         32 :         : MeshScheme(mkcore, me_vec) 
      19                 :            : {
      20 [ +  - ][ +  - ]:         32 :   if (mk_core()->vertex_mesher()) 
                 [ -  + ]
      21         [ #  # ]:          0 :     throw Error(MK_FAILURE, "Should only have a single VertexMesher; use mk_core()->vertex_mesher().");
      22                 :            :   
      23 [ +  - ][ +  - ]:         32 :   mk_core()->vertex_mesher(this);
      24                 :         32 : }
      25                 :            : 
      26                 :         90 : VertexMesher::~VertexMesher() 
      27                 :            : {
      28         [ -  + ]:         30 :   assert (mk_core()->vertex_mesher() == this);
      29                 :         30 :   mk_core()->vertex_mesher(NULL);
      30         [ -  + ]:         60 : }
      31                 :            :     
      32                 :        242 : bool VertexMesher::add_modelent(ModelEnt *model_ent) 
      33                 :            : {
      34                 :            :     // make sure this represents a geometric vertex
      35         [ -  + ]:        242 :   if (0 != model_ent->dimension()) 
      36         [ #  # ]:          0 :     throw Error(MK_WRONG_DIMENSION, "Wrong dimension entity added to VertexMesher.");
      37                 :            : 
      38                 :        242 :   return MeshOp::add_modelent(model_ent);
      39                 :            : }
      40                 :            : 
      41                 :            :     //! Setup is a no-op, but must be provided since it's pure virtual
      42                 :         33 : void VertexMesher::setup_this() 
      43                 :         33 : {}
      44                 :            :     
      45                 :         33 : void VertexMesher::execute_this() 
      46                 :            : {
      47         [ -  + ]:         66 :   if (mentSelection.empty()) return;
      48                 :            :   
      49                 :            :     // generate vertices for each vertex
      50         [ +  - ]:         33 :   MEntSelection::iterator sit;
      51 [ +  - ][ +  - ]:        279 :   for (sit = mentSelection.begin(); sit != mentSelection.end(); sit++) {
                 [ +  + ]
      52 [ +  - ][ +  - ]:        246 :     if  ((*sit).first->get_meshed_state() >= COMPLETE_MESH)
                 [ +  + ]
      53                 :          8 :         continue;
      54                 :        238 :     double pos[3] = {0, 0, 0};
      55                 :            :       // get the position
      56 [ +  - ][ +  - ]:        238 :     (*sit).first->evaluate(pos[0], pos[0], pos[0], pos);
      57                 :            :     moab::EntityHandle new_vert;
      58                 :            :       // create the vertex
      59 [ +  - ][ +  - ]:        238 :     moab::ErrorCode rval = mk_core()->moab_instance()->create_vertex(pos, new_vert);
                 [ +  - ]
      60 [ -  + ][ #  # ]:        238 :     MBERRCHK(rval, mk_core()->moab_instance());
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
      61                 :            :       // category tagging
      62 [ +  - ][ +  - ]:        238 :     iMesh::EntitySetHandle msh = IBSH((*sit).first->mesh_handle());
      63                 :        238 :     char category_val[CATEGORY_TAG_SIZE] = "Vertex\0";
      64                 :            :     iBase_TagHandle category_tag;
      65 [ +  - ][ +  - ]:        238 :     mk_core()->imesh_instance()->createTag(CATEGORY_TAG_NAME,CATEGORY_TAG_SIZE,iBase_BYTES, category_tag);    
                 [ +  - ]
      66 [ +  - ][ +  - ]:        238 :     mk_core()->imesh_instance()->setEntSetData(msh, category_tag, &category_val);
                 [ +  - ]
      67                 :            :       // add to meselection
      68 [ +  - ][ +  - ]:        238 :     (*sit).second.insert(new_vert);
      69                 :            :       // commit to ModelEnt
      70 [ +  - ][ +  - ]:        238 :     (*sit).first->commit_mesh((*sit).second, COMPLETE_MESH);
                 [ +  - ]
      71                 :            :   }
      72                 :            : }
      73                 :            : 
      74                 :            :   
      75 [ +  - ][ +  - ]:        156 : } // namespace MeshKit

Generated by: LCOV version 1.11