#include <iostream>
#include <cstdlib>
#include "MBCore.hpp"
#include "MBRange.hpp"
#include "MBTagConventions.hpp"
Go to the source code of this file.
|
| int | compare_edge (const void *a, const void *b) |
| |
| MBErrorCode | skin_tris (MBInterface *mb, MBRange tris, MBRange &skin_edges) |
| |
| int | main (int argc, char **argv) |
| |
◆ compare_edge()
| int compare_edge |
( |
const void * |
a, |
|
|
const void * |
b |
|
) |
| |
◆ main()
| int main |
( |
int |
argc, |
|
|
char ** |
argv |
|
) |
| |
- Examples
- SkinMesh.cpp.
Definition at line 141 of file SkinMesh.cpp.
145 std::cout <<
"Usage: " << argv[0] <<
" <filename>" << std::endl;
150 MBCore*
mb =
new MBCore();
151 MBErrorCode rval =
mb->load_file( argv[1] );
156 rval =
mb->get_entities_by_type( 0,
MBEDGE, edges );
158 if( !edges.empty() ) std::cout <<
"Warning: deleting all MBEdges" << std::endl;
159 rval =
mb->delete_entities( edges );
168 void* dim[] = { &two };
169 rval =
mb->get_entities_by_type_and_tag( 0,
MBENTITYSET, &geom_tag, dim, 1, surf_sets );
173 for( MBRange::iterator i = surf_sets.begin(); i != surf_sets.end(); ++i )
178 rval =
mb->get_entities_by_type( *i,
MBTRI, tris );
187 std::cout <<
"surface has " << skin_edges.size() <<
" skin edges" << std::endl;
190 rval =
mb->delete_entities( skin_edges );
References GEOM_DIMENSION_TAG_NAME, mb, MB_SUCCESS, MB_TYPE_INTEGER, MBEDGE, MBENTITYSET, MBTRI, and skin_tris().
◆ skin_tris()
| MBErrorCode skin_tris |
( |
MBInterface * |
mb, |
|
|
MBRange |
tris, |
|
|
MBRange & |
skin_edges |
|
) |
| |
- Examples
- SkinMesh.cpp.
Definition at line 39 of file SkinMesh.cpp.
45 if( !tris.all_of_type(
MBTRI ) )
return MB_FAILURE;
49 MBErrorCode rval =
mb->get_number_entities_by_type( 0,
MBEDGE, n_edges );
53 std::cerr <<
"skin_tris: failed because " << n_edges <<
" edges exist in the MOAB instance" << std::endl;
58 edge* edges =
new edge[3 * tris.size()];
61 for( MBRange::iterator i = tris.begin(); i != tris.end(); ++i )
63 const MBEntityHandle* conn;
64 rval =
mb->get_connectivity( *i, conn, n_verts );
66 if( 3 != n_verts )
return MB_FAILURE;
68 if( conn[0] == conn[1] || conn[1] == conn[2] || conn[2] == conn[0] )
70 std::cerr <<
"skin_tris: degenerate triangle" << std::endl;
75 edges[3 * ii + 0].
v0 = conn[0];
76 edges[3 * ii + 0].
v1 = conn[1];
77 edges[3 * ii + 1].
v0 = conn[1];
78 edges[3 * ii + 1].
v1 = conn[2];
79 edges[3 * ii + 2].
v0 = conn[2];
80 edges[3 * ii + 2].
v1 = conn[0];
85 for(
unsigned int i = 0; i < 3 * tris.size(); ++i )
87 if( edges[i].v0 > edges[i].v1 )
89 MBEntityHandle temp = edges[i].
v0;
90 edges[i].
v0 = edges[i].
v1;
99 for(
unsigned int i = 0; i < 3 * tris.size(); i++ )
103 if( 3 * tris.size() - 1 == i )
105 const MBEntityHandle conn[2] = { edges[i].
v0, edges[i].
v1 };
109 skin_edges.insert(
edge );
113 else if( edges[i].v0 == edges[i + 1].v0 && edges[i].v1 == edges[i + 1].v1 )
117 while( edges[i].v0 == edges[i + 1].v0 && edges[i].v1 == edges[i + 1].v1 )
119 std::cout <<
"find_skin WARNING: non-manifold edge" << std::endl;
120 mb->list_entity( edges[i].v0 );
121 mb->list_entity( edges[i].v1 );
128 const MBEntityHandle conn[2] = { edges[i].
v0, edges[i].
v1 };
132 skin_edges.insert(
edge );
References compare_edge(), mb, MB_ENTITY_NOT_FOUND, MB_SUCCESS, MBEDGE, MBTRI, edge::v0, and edge::v1.
Referenced by moab::ReadRTT::build_moab(), and main().