LCOV - code coverage report
Current view: top level - src/io - VtkUtil.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 7 12 58.3 %
Date: 2020-12-16 07:07:30 Functions: 1 1 100.0 %
Branches: 5 16 31.2 %

           Branch data     Line data    Source code
       1                 :            : /**
       2                 :            :  * MOAB, a Mesh-Oriented datABase, is a software component for creating,
       3                 :            :  * storing and accessing finite element mesh data.
       4                 :            :  *
       5                 :            :  * Copyright 2004 Sandia Corporation.  Under the terms of Contract
       6                 :            :  * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
       7                 :            :  * retains certain rights in this software.
       8                 :            :  *
       9                 :            :  * This library is free software; you can redistribute it and/or
      10                 :            :  * modify it under the terms of the GNU Lesser General Public
      11                 :            :  * License as published by the Free Software Foundation; either
      12                 :            :  * version 2.1 of the License, or (at your option) any later version.
      13                 :            :  *
      14                 :            :  */
      15                 :            : 
      16                 :            : #include "moab/VtkUtil.hpp"
      17                 :            : 
      18                 :            : namespace moab
      19                 :            : {
      20                 :            : 
      21                 :            : const char* VtkUtil::vtkTypeNames[] = {
      22                 :            :     "unsigned_char",  // MB_TYPE_OPAQUE
      23                 :            :     "int",            // MB_TYPE_INTEGER
      24                 :            :     "double",         // MB_TYPE_DOUBLE
      25                 :            :     "bit",            // MB_TYPE_BIT
      26                 :            :     "unsigned_long",  // MB_TYPE_HANDLE
      27                 :            : };
      28                 :            : 
      29                 :            : /*
      30                 :            : const unsigned VtkUtil::typeSizes[] = {
      31                 :            :  1,                      // MB_TYPE_OPAQUE
      32                 :            :  sizeof(int),            // MB_TYPE_INTEGER
      33                 :            :  sizeof(double),         // MB_TYPE_DOUBLE
      34                 :            :  1,                      // MB_TYPE_BIT
      35                 :            :  sizeof(EntityHandle), // MB_TYPE_HANDLE
      36                 :            : };
      37                 :            : */
      38                 :            : 
      39                 :            : // Define node ordering for those types for which
      40                 :            : // the VTK and MOAB ordering doesn't match.  The values
      41                 :            : // contained in the array are MOAB connectivity indices,
      42                 :            : // and the values used to index the arrays are VTK
      43                 :            : // connectivity indices.
      44                 :            : const unsigned pixel[] = { 0, 1, 3, 2 };
      45                 :            : const unsigned voxel[] = { 0, 1, 3, 2, 4, 5, 7, 6 };
      46                 :            : const unsigned wedge[] = { 0,  2,  1,                                       // bottom corners
      47                 :            :                            3,  5,  4,                                       // top corners
      48                 :            :                            8,  7,  6,                                       // bottom edges
      49                 :            :                            14, 13, 12,                                      // top edges
      50                 :            :                            9,  11, 10,                                      // lateral edges
      51                 :            :                            17, 16, 15 };                                    // quadrilateral faces
      52                 :            : const unsigned qhex[]  = { 0,  1,  2,  3,                                   // corners (same)
      53                 :            :                           4,  5,  6,  7,  8,  9,  10, 11,                  // mid-edge (top before lateral)
      54                 :            :                           16, 17, 18, 19, 12, 13, 14, 15, 23, 21, 20, 22,  // mid-face (mixed up) & mid-region (same)
      55                 :            :                           24, 25, 26 };
      56                 :            : 
      57                 :            : // List of VtkElemType structs, indexed by the VTK type number.
      58                 :            : const VtkElemType VtkUtil::vtkElemTypes[] = {
      59                 :            :     { 0, 0, MBMAXTYPE, 0, 0 },
      60                 :            :     { "vertex", 1, MBVERTEX, 1, 0 },
      61                 :            :     { "polyvertex", 2, MBMAXTYPE, 0, 0 },
      62                 :            :     { "line", 3, MBEDGE, 2, 0 },
      63                 :            :     { "polyline", 4, MBMAXTYPE, 0, 0 },
      64                 :            :     { "triangle", 5, MBTRI, 3, 0 },
      65                 :            :     { "triangle strip", 6, MBMAXTYPE, 0, 0 },
      66                 :            :     { "polygon", 7, MBPOLYGON, 0, 0 },
      67                 :            :     { "pixel", 8, MBQUAD, 4, pixel },
      68                 :            :     { "quadrilateral", 9, MBQUAD, 4, 0 },
      69                 :            :     { "tetrahedron", 10, MBTET, 4, 0 },
      70                 :            :     { "voxel", 11, MBHEX, 8, voxel },
      71                 :            :     { "hexahedron", 12, MBHEX, 8, 0 },
      72                 :            :     { "wedge", 13, MBPRISM, 6, wedge },
      73                 :            :     { "pyramid", 14, MBPYRAMID, 5, 0 },
      74                 :            :     { "pentagonal prism", 15, MBMAXTYPE, 10, 0 },  // not supported
      75                 :            :     { "hexagonal prism", 16, MBMAXTYPE, 12, 0 },   // not supported
      76                 :            :     { 0, 17, MBMAXTYPE, 0, 0 },
      77                 :            :     { 0, 18, MBMAXTYPE, 0, 0 },
      78                 :            :     { 0, 19, MBMAXTYPE, 0, 0 },
      79                 :            :     { 0, 20, MBMAXTYPE, 0, 0 },
      80                 :            :     { "quadratic edge", 21, MBEDGE, 3, 0 },
      81                 :            :     { "quadratic tri", 22, MBTRI, 6, 0 },
      82                 :            :     { "quadratic quad", 23, MBQUAD, 8, 0 },
      83                 :            :     { "quadratic tet", 24, MBTET, 10, 0 },
      84                 :            :     { "quadratic hex", 25, MBHEX, 20, qhex },
      85                 :            :     { "quadratic wedge", 26, MBPRISM, 15, wedge },
      86                 :            :     { "quadratic pyramid", 27, MBPYRAMID, 13, 0 },
      87                 :            :     { "bi-quadratic quad", 28, MBQUAD, 9, 0 },
      88                 :            :     { "tri-quadratic hex", 29, MBHEX, 27, qhex },
      89                 :            :     { "quadratic-linear quad", 30, MBMAXTYPE, 6, 0 },        // not supported
      90                 :            :     { "quadratic-linear wedge", 31, MBMAXTYPE, 12, wedge },  // not supported
      91                 :            :     { "bi-quadratic wedge", 32, MBMAXTYPE, 18, wedge },      // not supported
      92                 :            :     { "bi-quadratic hex", 33, MBMAXTYPE, 24, qhex },         // not supported
      93                 :            :     { "bi-quadratic triangle", 34, MBMAXTYPE, 0, 0 },
      94                 :            :     { "cubic line", 35, MBMAXTYPE, 0, 0 },  // VTK_CUBIC_LINE not supported
      95                 :            :     { 0, 36, MBMAXTYPE, 0, 0 },
      96                 :            :     { 0, 37, MBMAXTYPE, 0, 0 },
      97                 :            :     { 0, 38, MBMAXTYPE, 0, 0 },
      98                 :            :     { 0, 39, MBMAXTYPE, 0, 0 },
      99                 :            :     { 0, 40, MBMAXTYPE, 0, 0 },
     100                 :            :     { "convex point set", 41, MBMAXTYPE, 0, 0 },  //  VTK_CONVEX_POINT_SET = 41, not supported
     101                 :            :     { "polyhedron", 42, MBPOLYHEDRON, 0, 0 }      //
     102                 :            : };
     103                 :            : 
     104                 :            : const unsigned VtkUtil::numVtkElemType = sizeof( VtkUtil::vtkElemTypes ) / sizeof( VtkUtil::vtkElemTypes[0] );
     105                 :            : 
     106                 :            : // Define an array, indexed by EntityType containing the corresponding
     107                 :            : // VTK element type numbers for the linear, quadratic (mid-edge),
     108                 :            : // and full (mid-face & mid-region node) elements.
     109                 :            : // Zero is used to indicate an invalid type (not supported by VTK.)  The
     110                 :            : // VTK element type number may be used as an index into vtkElemTypes[].
     111                 :            : const int mb_to_vtk_type[][3] = { { 1, 0, 0 },     // MBVERTEX
     112                 :            :                                   { 3, 21, 0 },    // MBEDGE
     113                 :            :                                   { 5, 22, 0 },    // MBTRI
     114                 :            :                                   { 9, 23, 28 },   // MBQUAD
     115                 :            :                                   { 7, 0, 0 },     // MBPOLYGON
     116                 :            :                                   { 10, 24, 0 },   // MBTET
     117                 :            :                                   { 14, 27, 0 },   // MBPYRAMID
     118                 :            :                                   { 13, 26, 0 },   // MBWEDGE
     119                 :            :                                   { 0, 0, 0 },     // MBKNIFE
     120                 :            :                                   { 12, 25, 29 },  // MBHEX
     121                 :            :                                   { 42, 0, 0 },    // MBPOLYHEDRON
     122                 :            :                                   { 0, 0, 0 },     // MBENTITYSET
     123                 :            :                                   { 0, 0, 0 } };   // MBMAXTYPE
     124                 :            : 
     125                 :      11880 : const VtkElemType* VtkUtil::get_vtk_type( EntityType type, unsigned num_nodes )
     126                 :            : {
     127                 :      11880 :     const int i = mb_to_vtk_type[type][0];  // Index for linear type
     128                 :      11880 :     const int j = mb_to_vtk_type[type][1];  // Index for quadratic type
     129                 :      11880 :     const int k = mb_to_vtk_type[type][2];  // Index for full quadratic type
     130         [ +  - ]:      11880 :     if( i )  // If element type is supported at all (if not linear then not quadratic either)
     131                 :            :     {
     132                 :            :         // If the linear type is requested (all polygons are linear
     133                 :            :         // irrespective of the number of nodes), return that.
     134 [ +  + ][ +  - ]:      11880 :         if( type == MBPOLYGON || type == MBPOLYHEDRON || vtkElemTypes[i].num_nodes == num_nodes )
                 [ +  - ]
     135                 :      11880 :             return vtkElemTypes + i;
     136                 :            :         // Otherwise if there is a quadratic type and the number of
     137                 :            :         // nodes specified corresponds to the quadratic type, return that.
     138 [ #  # ][ #  # ]:          0 :         else if( j && vtkElemTypes[j].num_nodes == num_nodes )
     139                 :          0 :             return vtkElemTypes + j;
     140                 :            :         // Otherwise if there is a full quadratic type and the number of
     141                 :            :         // nodes specified corresponds to the quadratic type, return that.
     142 [ #  # ][ #  # ]:          0 :         else if( k && vtkElemTypes[k].num_nodes == num_nodes )
     143                 :          0 :             return vtkElemTypes + k;
     144                 :            :     }
     145                 :            : 
     146                 :          0 :     return 0;
     147                 :            : }
     148                 :            : 
     149                 :            : }  // namespace moab

Generated by: LCOV version 1.11