本文整理汇总了C++中MeshImpl::get_all_elements方法的典型用法代码示例。如果您正苦于以下问题:C++ MeshImpl::get_all_elements方法的具体用法?C++ MeshImpl::get_all_elements怎么用?C++ MeshImpl::get_all_elements使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MeshImpl
的用法示例。
在下文中一共展示了MeshImpl::get_all_elements方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: test_read_vector_attrib
// Test reading Vtk vector attribute
void VtkTest::test_read_vector_attrib()
{
MeshImpl mesh;
MsqPrintError err(cout);
FILE* file = fopen( temp_file_name, "w+" );
fputs( structured_3d_points_data, file );
fputs( simple_vector_attrib, file );
fclose( file );
mesh.read_vtk( temp_file_name, err );
remove( temp_file_name );
ASSERT_NO_ERROR(err);
std::vector<Mesh::ElementHandle> elems;
mesh.get_all_elements( elems, err );
CPPUNIT_ASSERT( !err );
CPPUNIT_ASSERT_EQUAL( elems.size(), (size_t)8 );
void* th = mesh.tag_get( "hexvect", err );
CPPUNIT_ASSERT( !err );
std::string name;
Mesh::TagType type;
unsigned tagsize;
mesh.tag_properties( th, name, type, tagsize, err );
CPPUNIT_ASSERT( !err && type == Mesh::DOUBLE && tagsize == 3 );
double elem_data[24];
mesh.tag_get_element_data( th, 8, arrptr(elems), elem_data, err );
CPPUNIT_ASSERT( !err );
for (int i = 0; i < 8; ++i)
CPPUNIT_ASSERT( Vector3D( elem_data+3*i ) == Vector3D( i+1, i+1, i+1 ) );
}
示例2: check_field_attrib
void VtkTest::check_field_attrib( const char* temp_file_name )
{
MeshImpl mesh;
MsqPrintError err(cout);
mesh.read_vtk( temp_file_name, err );
remove( temp_file_name );
ASSERT_NO_ERROR(err);
std::vector<Mesh::ElementHandle> elems;
mesh.get_all_elements( elems, err );
CPPUNIT_ASSERT( !err );
CPPUNIT_ASSERT_EQUAL( elems.size(), (size_t)8 );
std::string name;
Mesh::TagType type;
unsigned tagsize;
void* th = mesh.tag_get( "test_field elem_vects", err );
CPPUNIT_ASSERT( !err );
mesh.tag_properties( th, name, type, tagsize, err );
CPPUNIT_ASSERT( !err && type == Mesh::DOUBLE && tagsize == 3 );
double elem_data[24];
mesh.tag_get_element_data( th, 8, arrptr(elems), elem_data, err );
CPPUNIT_ASSERT( !err );
for (int i = 0; i < 8; ++i)
CPPUNIT_ASSERT( Vector3D( elem_data+3*i ) == Vector3D( i+1, i+1, i+1 ) );
th = mesh.tag_get( "test_field elem_ids", err );
CPPUNIT_ASSERT( !err );
mesh.tag_properties( th, name, type, tagsize, err );
CPPUNIT_ASSERT( !err && type == Mesh::INT && tagsize == 1 );
int elem_ids[8];
mesh.tag_get_element_data( th, 8, arrptr(elems), elem_ids, err );
CPPUNIT_ASSERT( !err );
for (int i = 0; i < 8; ++i)
CPPUNIT_ASSERT( elem_ids[i] == i+1 );
th = mesh.tag_get( "field1", err );
CPPUNIT_ASSERT( !err );
mesh.tag_properties( th, name, type, tagsize, err );
CPPUNIT_ASSERT( !err && type == Mesh::INT && tagsize == 1 );
int values[8];
mesh.tag_get_element_data( th, 8, arrptr(elems), values, err );
CPPUNIT_ASSERT( !err );
for (int i = 0; i < 8; ++i)
CPPUNIT_ASSERT( values[i] == 8-i );
}
示例3: test_read_simple_scalar_attrib
// Test reading Vtk simple (one-component) scalar attribute
void VtkTest::test_read_simple_scalar_attrib()
{
MeshImpl mesh;
MsqPrintError err(cout);
FILE* file = fopen( temp_file_name, "w+" );
fputs( structured_3d_points_data, file );
fputs( simple_scalar_attrib, file );
fclose( file );
mesh.read_vtk( temp_file_name, err );
remove( temp_file_name );
ASSERT_NO_ERROR(err);
std::vector<Mesh::ElementHandle> elems;
mesh.get_all_elements( elems, err );
CPPUNIT_ASSERT( !err );
CPPUNIT_ASSERT_EQUAL( elems.size(), (size_t)8 );
void* th = mesh.tag_get( "global_id", err );
CPPUNIT_ASSERT( !err );
std::string name;
Mesh::TagType type;
unsigned tagsize;
mesh.tag_properties( th, name, type, tagsize, err );
CPPUNIT_ASSERT( !err && type == Mesh::INT && tagsize == 1 );
int elem_data[8];
mesh.tag_get_element_data( th, 8, arrptr(elems), elem_data, err );
CPPUNIT_ASSERT( !err );
for (int i = 0; i < 8; ++i)
CPPUNIT_ASSERT( elem_data[i] == (1+i) );
}
示例4: check_domain
void DomainClassifierTest::check_domain( DomainClassifier& domain )
{
std::vector<Mesh::VertexHandle> vertices, cverts;
std::vector<Mesh::ElementHandle> elements, celems;
// Check that, for each entity with a domain, the
// DomainClassifier instance returns that domain.
// Also, put all entities with domains into cverts and
// celems for later.
for (unsigned i = 0; i < myDomains.size(); ++i) {
for (unsigned j = 0; j < myDomains[i].vertices.size(); ++j) {
Mesh::VertexHandle v = myDomains[i].vertices[j];
const MeshDomain* ptr = domain.find_vertex_domain( v );
CPPUNIT_ASSERT( myDomains[i].domain == ptr );
cverts.push_back( v );
}
for (unsigned k = 0; k < myDomains[i].elements.size(); ++k) {
Mesh::ElementHandle e = myDomains[i].elements[k];
const MeshDomain* ptr = domain.find_element_domain( e );
CPPUNIT_ASSERT( myDomains[i].domain == ptr );
celems.push_back( e );
}
}
// sort cverts and celems so we can do binary_search later
std::sort( cverts.begin(), cverts.end() );
std::sort( celems.begin(), celems.end() );
// get all vertices and elements in mesh
MsqPrintError err(std::cerr);
myMesh.get_all_vertices( vertices, err );
CPPUNIT_ASSERT(!err);
myMesh.get_all_elements( elements, err );
CPPUNIT_ASSERT(!err);
// For each vertex not in a domain (not in cverts), make sure
// that the domain is NULL.
for (size_t i = 0; i < vertices.size(); ++i) {
if (std::binary_search( cverts.begin(), cverts.end(), vertices[i] ))
continue;
const MeshDomain* ptr = domain.find_vertex_domain( vertices[i] );
CPPUNIT_ASSERT( NULL == ptr );
}
// For each element not in a domain (not in celems), make sure
// that the domain is NULL.
for (size_t i = 0; i < elements.size(); ++i) {
if (std::binary_search( celems.begin(), celems.end(), elements[i] ))
continue;
const MeshDomain* ptr = domain.find_element_domain( elements[i] );
CPPUNIT_ASSERT( NULL == ptr );
}
}
示例5: get_planar_example
void get_planar_example( const char* filename,
DomainClassifier& geom,
MeshImpl& mesh,
MsqError& err )
{
static PlanarDomain z(PlanarDomain::XY);
mesh.read_vtk(filename, err); MSQ_ERRRTN(err);
mesh.mark_skin_fixed(err); MSQ_ERRRTN(err);
DomainClassifier::DomainSet set(&z);
mesh.get_all_vertices( set.vertices, err ); MSQ_ERRRTN(err);
mesh.get_all_elements( set.elements, err ); MSQ_ERRRTN(err);
DomainClassifier::classify_by_handle( geom, &mesh, &set, 1, err ); MSQ_ERRRTN(err);
}
示例6: test_read_fixed_attrib
// Test reading MeshImpl boundary-vertex bit
// from Vtk scalar attribute.
void VtkTest::test_read_fixed_attrib()
{
MeshImpl mesh;
MsqPrintError err(cout);
FILE* file = fopen( temp_file_name, "w+" );
fputs( structured_3d_points_data, file );
fputs( fixed_vertex_attrib, file );
fclose( file );
mesh.read_vtk( temp_file_name, err );
remove( temp_file_name );
ASSERT_NO_ERROR(err);
std::vector<Mesh::ElementHandle> elems;
mesh.get_all_elements( elems, err );
CPPUNIT_ASSERT( !err );
CPPUNIT_ASSERT_EQUAL( elems.size(), (size_t)8 );
std::vector<Mesh::VertexHandle> verts;
std::vector<size_t> offsets;
mesh.elements_get_attached_vertices( arrptr(elems), elems.size(), verts, offsets, err );
ASSERT_NO_ERROR(err);
// get unique list of vertices
std::vector<Mesh::VertexHandle>::iterator new_end;
std::sort( verts.begin(), verts.end() );
new_end = std::unique( verts.begin(), verts.end() );
verts.resize( new_end - verts.begin() );
CPPUNIT_ASSERT_EQUAL( verts.size(), (size_t)27 );
// get fixed flag
std::vector<bool> fixed;
mesh.vertices_get_fixed_flag( arrptr(verts), fixed, verts.size(), err );
ASSERT_NO_ERROR(err);
CPPUNIT_ASSERT_EQUAL( verts.size(), fixed.size() );
for (int i = 0; i < 27; ++i)
{
bool should_be_fixed = (i != 13);
CPPUNIT_ASSERT_EQUAL( should_be_fixed, (bool)fixed[i] );
}
}
示例7: test_read_unstructured
void VtkTest::test_read_unstructured( const char* filename )
{
MeshImpl mesh;
MsqPrintError err(cout);
mesh.read_vtk( filename, err );
ASSERT_NO_ERROR(err);
// Get mesh data
std::vector<Mesh::VertexHandle> conn;
std::vector<Mesh::ElementHandle> elems(38);
std::vector<size_t> offsets(39);
mesh.get_all_elements( elems, err );
ASSERT_NO_ERROR(err);
CPPUNIT_ASSERT_EQUAL( elems.size(), (size_t)38 );
mesh.elements_get_attached_vertices( arrptr(elems), elems.size(),
conn, offsets, err );
ASSERT_NO_ERROR(err);
unsigned i;
struct meshdata { EntityTopology type; size_t nodes; size_t count; };
meshdata list[] = {
{ Mesquite::HEXAHEDRON, 8, 8 },
{ Mesquite::QUADRILATERAL, 4, 4 },
{ Mesquite::PYRAMID, 5, 4 },
{ Mesquite::TETRAHEDRON, 4, 6 },
{ Mesquite::TRIANGLE, 3, 14 },
{ Mesquite::PRISM, 6, 2 },
{ Mesquite::MIXED, 0, 0 } };
// Count expected lenght of connectivity list
size_t conn_len = 0;
for (i = 0; list[i].nodes; ++i)
conn_len += list[i].nodes * list[i].count;
CPPUNIT_ASSERT_EQUAL( conn_len, conn.size() );
check_8hex_block( mesh, conn.begin() );
check_4quad_block( mesh, conn.begin() + 64 );
}
示例8: main
// Routine to create initial mesh for test.
// o Marks vertices at a greater topological depth than the specified
// value as slaved.
// o Perturbs higher-order vertices on skin towards element center
// o Marks skin vertices as fixed
int main( int argc, char* argv[] )
{
if (argc != 4)
usage(argv[0]);
char* endptr = 0;
const long n = strtol( argv[1], &endptr, 0 );
if (*endptr || n < 0)
usage(argv[0]);
// read input mesh
MeshImpl mesh;
MsqPrintError err(std::cerr);
mesh.read_vtk( argv[2], err );
if (err) return 1;
// get skin vertices
mesh.mark_skin_fixed( err, true );
if (err) return 1;
std::vector<Mesh::VertexHandle> verts;
mesh.get_all_vertices( verts, err );
if (err) return 1;
std::vector<bool> fixed;
mesh.vertices_get_fixed_flag( arrptr(verts), fixed, verts.size(), err );
if (err) return 1;
std::vector<Mesh::VertexHandle> skin;
for (size_t i = 0; i < verts.size(); ++i)
if (fixed[i])
skin.push_back( verts[i] );
// create map for vertex depth, and initialize to 0 for skin vertices
std::map<Mesh::VertexHandle,int> depth;
std::map<Mesh::VertexHandle,int>::iterator d_iter;
for (size_t i = 0; i < skin.size(); ++i)
depth[skin[i]] = 0;
// get all elements
std::vector<Mesh::ElementHandle> curr, next;
std::vector<Mesh::ElementHandle> conn;
std::vector<size_t> off;
mesh.get_all_elements( next, err );
// build sorted list of higher-order vertices
std::vector<Mesh::VertexHandle> higher_order;
for (size_t i = 0; i < next.size(); ++i) {
Mesh::ElementHandle elem = next[i];
conn.clear();
mesh.elements_get_attached_vertices( &elem, 1, conn, off, err );
if (err) return 1;
EntityTopology type;
mesh.elements_get_topologies( &elem, &type, 1, err );
std::copy( conn.begin() + TopologyInfo::corners(type), conn.end(),
std::back_inserter( higher_order ) );
}
std::sort( higher_order.begin(), higher_order.end() );
higher_order.erase( std::unique( higher_order.begin(), higher_order.end() ),
higher_order.end() );
// build depth map for all vertices
while (!next.empty()) {
curr.swap( next );
next.clear();
while (!curr.empty()) {
Mesh::ElementHandle elem = curr.back();
curr.pop_back();
conn.clear();
mesh.elements_get_attached_vertices( &elem, 1, conn, off, err );
if (err) return 1;
int min = std::numeric_limits<int>::max();
for (size_t i = 0; i < conn.size(); ++i) {
d_iter = depth.find( conn[i] );
if (d_iter != depth.end() && d_iter->second < min)
min = d_iter->second;
}
if (min == std::numeric_limits<int>::max()) {
next.push_back( elem );
continue;
}
for (size_t i = 0; i < conn.size(); ++i) {
d_iter = depth.find( conn[i] );
if (d_iter == depth.end() || d_iter->second > min+1)
depth[conn[i]] = min+1;
}
}
}
// write depth map to tag for debugging purposes
std::vector<int> depth_vals(verts.size());
for (size_t i = 0; i < verts.size(); ++i)
depth_vals[i] = depth[verts[i]];
//.........这里部分代码省略.........
示例9: test_read_quadratic
void VtkTest::test_read_quadratic( const char* filename )
{
const size_t NUM_ELEM = 8;
MeshImpl mesh;
MsqPrintError err(cout);
mesh.read_vtk( filename, err );
ASSERT_NO_ERROR(err);
std::vector<Mesh::ElementHandle> elems(NUM_ELEM);
mesh.get_all_elements( elems, err );
ASSERT_NO_ERROR(err);
CPPUNIT_ASSERT_EQUAL(elems.size(), NUM_ELEM );
std::vector<Mesh::VertexHandle> conn;
std::vector<size_t> offsets;
mesh.elements_get_attached_vertices( arrptr(elems), elems.size(), conn, offsets, err );
ASSERT_NO_ERROR(err);
CPPUNIT_ASSERT_EQUAL( conn.size(), (size_t)108 );
EntityTopology types[NUM_ELEM];
mesh.elements_get_topologies( arrptr(elems), types, NUM_ELEM, err );
ASSERT_NO_ERROR(err);
static const double hex_corners[] =
{ 1.0, -1.0, -1.0,
1.0, 1.0, -1.0,
-1.0, 1.0, -1.0,
-1.0, -1.0, -1.0,
1.0, -1.0, 1.0,
1.0, 1.0, 1.0,
-1.0, 1.0, 1.0,
-1.0, -1.0, 1.0 };
static const double tet_corners[] =
{ 1.0, -1.0, -1.0,
1.0, 1.0, -1.0,
-1.0, 0.0, -1.0,
0.0, 0.0, 1.0 };
static const double pyr_corners[] =
{ 1.0, -1.0, -1.0,
1.0, 1.0, -1.0,
-1.0, 1.0, -1.0,
-1.0, -1.0, -1.0,
0.0, 0.0, 1.0 };
static const double pri_corners[] =
{ -1.0, -1.0, -1.0,
1.0, 1.0, -1.0,
-1.0, 1.0, -1.0,
-1.0, -1.0, 1.0,
1.0, 1.0, 1.0,
-1.0, 1.0, 1.0 };
static const unsigned hex_edges[] =
{ 0, 1,
1, 2,
2, 3,
3, 0,
0, 4,
1, 5,
2, 6,
3, 7,
4, 5,
5, 6,
6, 7,
7, 4 };
static const unsigned tet_edges[] =
{ 0, 1,
1, 2,
2, 0,
0, 3,
1, 3,
2, 3 };
static const unsigned pri_edges[] =
{ 0, 1,
1, 2,
2, 0,
0, 3,
1, 4,
2, 5,
3, 4,
4, 5,
5, 3 };
static const unsigned pyr_edges[] =
{ 0, 1,
1, 2,
2, 3,
3, 0,
0, 4,
1, 4,
2, 4,
3, 4 };
static const unsigned hex_faces[] =
{ 4, 0, 1, 5, 4,
4, 1, 2, 6, 5,
4, 2, 3, 7, 6,
4, 3, 0, 4, 7,
4, 3, 2, 1, 0,
4, 4, 5, 6, 7
};
static const struct {
//.........这里部分代码省略.........
示例10: setUp
//.........这里部分代码省略.........
const char filename[] = "dctest.vtk";
FILE* file = fopen( filename, "w" );
fputs( "# vtk DataFile Version 2.0\n", file );
fputs( "Mesquite Mesh\n", file );
fputs( "ASCII\n", file );
fputs( "DATASET UNSTRUCTURED_GRID\n", file );
fputs( vertex_data, file );
int num_elem = num_quads + num_hexes + num_interior_quads;
int num_elem_data = 5*num_quads + 9*num_hexes * 5*num_interior_quads;
fprintf( file, "CELLS %d %d\n", num_elem, num_elem_data );
fputs( quad_data, file );
fputs( hex_data, file );
fputs( interior_quad_data, file );
fprintf( file, "CELL_TYPES %d\n", num_elem );
for (int i = 0; i < num_quads; ++i)
fputs( "9\n", file );
for (int i = 0; i < num_hexes; ++i)
fputs( "12\n", file );
for (int i = 0; i < num_interior_quads; ++i)
fputs( "9\n", file );
fclose( file );
MsqPrintError err(std::cerr);
myMesh.read_vtk( filename, err );
remove( filename );
CPPUNIT_ASSERT(!err);
std::vector<Mesh::VertexHandle> verts;
std::vector<Mesh::ElementHandle> elems;
myMesh.get_all_vertices(verts, err);
CPPUNIT_ASSERT(!err);
CPPUNIT_ASSERT_EQUAL( (size_t)64, verts.size() );
myMesh.get_all_elements(elems, err);
CPPUNIT_ASSERT(!err);
CPPUNIT_ASSERT_EQUAL( (size_t)num_elem, elems.size() );
// define point domains
PointDomain* pdom[8];
pdom[0] = new PointDomain( Vector3D(0,0,0) );
pdom[1] = new PointDomain( Vector3D(3,0,0) );
pdom[2] = new PointDomain( Vector3D(0,3,0) );
pdom[3] = new PointDomain( Vector3D(3,3,0) );
pdom[4] = new PointDomain( Vector3D(0,0,3) );
pdom[5] = new PointDomain( Vector3D(3,0,3) );
pdom[6] = new PointDomain( Vector3D(0,3,3) );
pdom[7] = new PointDomain( Vector3D(3,3,3) );
size_t pdidx[8] = { 0, 3, 12, 15, 48, 51, 60, 63 };
for (unsigned i = 0; i < 8; ++i) {
MsqVertex coords;
Mesh::VertexHandle h = verts[pdidx[i]];
myMesh.vertices_get_coordinates( &h, &coords, 1, err );
CPPUNIT_ASSERT(!err);
CPPUNIT_ASSERT_VECTORS_EQUAL( pdom[i]->geom(), coords, 1e-6 );
DomSet set;
set.domain = pdom[i];
set.vertices.push_back( h );
myDomains.push_back( set );
domainDims.push_back( 0 );
}
// define line domains
LineDomain* ldom[12];
ldom[0] = new LineDomain( Vector3D(0,0,0), Vector3D(1,0,0) ); // y=0,z=0
ldom[1] = new LineDomain( Vector3D(0,3,0), Vector3D(1,0,0) ); // y=3,z=0
ldom[2] = new LineDomain( Vector3D(0,0,3), Vector3D(1,0,0) ); // y=0,z=3
示例11: test_slaved_common
void SlaveBoundaryVerticesTest::test_slaved_common( unsigned depth, unsigned boundary )
{
MeshImpl mesh;
DomainClassifier domain;
make_mesh( mesh, domain, 2*depth+2 );
MsqPrintError err(std::cerr);
std::vector< std::vector<Mesh::VertexHandle> > depths(depth+1);
std::set<Mesh::VertexHandle> non_slave;
std::set<Mesh::VertexHandle>::iterator p;
// find boundary vertices
std::vector<Mesh::VertexHandle> verts;
mesh.get_all_vertices( verts, err ); ASSERT_NO_ERROR(err);
CPPUNIT_ASSERT(!verts.empty());
if (boundary >= 4) {
std::vector<bool> flags;
mesh.vertices_get_fixed_flag( arrptr(verts), flags, verts.size(), err );
ASSERT_NO_ERROR(err);
for (size_t i = 0; i < verts.size(); ++i)
if (flags[i]) {
depths[0].push_back( verts[i] );
non_slave.insert( verts[i] );
}
}
else {
std::vector<unsigned short> dim(verts.size());
domain.domain_DoF( arrptr(verts), arrptr(dim), verts.size(), err );
ASSERT_NO_ERROR(err);
for (size_t i = 0; i < verts.size(); ++i)
if (dim[i] <= boundary) {
depths[0].push_back( verts[i] );
non_slave.insert( verts[i] );
}
}
// check that our input is usable for this test
CPPUNIT_ASSERT( !verts.empty() );
// find all vertices up to specified depth
for (unsigned d = 0; d < depth; ++d) {
for (size_t i = 0; i < depths[d].size(); ++i) {
std::vector<Mesh::ElementHandle> adj;
std::vector<size_t> junk;
mesh.vertices_get_attached_elements( &depths[d][i], 1, adj, junk, err );
ASSERT_NO_ERROR(err);
for(size_t j = 0; j < adj.size(); ++j) {
junk.clear();
std::vector<Mesh::VertexHandle> conn;
mesh.elements_get_attached_vertices( &adj[j], 1, conn, junk, err );
ASSERT_NO_ERROR(err);
for (size_t k = 0; k < conn.size(); ++k) {
p = non_slave.find(conn[k]);
if (p == non_slave.end()) {
non_slave.insert( p, conn[k] );
depths[d+1].push_back( conn[k] );
}
}
}
}
}
// Check that our input is usable for this test:
// Should have some vertices that are not within the specified depth of
// the boundary.
CPPUNIT_ASSERT( non_slave.size() < verts.size() );
// Now build a map of all higher-order nodes in the mesh
std::set<Mesh::VertexHandle> higher_order;
std::vector<Mesh::ElementHandle> elems;
mesh.get_all_elements( elems, err );
ASSERT_NO_ERROR(err);
CPPUNIT_ASSERT(!elems.empty());
std::vector<EntityTopology> types(elems.size());
mesh.elements_get_topologies( arrptr(elems), arrptr(types), elems.size(), err );
ASSERT_NO_ERROR(err);
for (size_t i = 0; i < elems.size(); ++i) {
std::vector<Mesh::VertexHandle> conn;
std::vector<size_t> junk;
mesh.elements_get_attached_vertices( &elems[i], 1, conn, junk, err );
ASSERT_NO_ERROR(err);
for (size_t j = TopologyInfo::corners( types[i] ); j < conn.size(); ++j)
higher_order.insert( conn[j] );
}
// Check that our input is usable for this test:
// Should have some higher-order vertices
CPPUNIT_ASSERT( !higher_order.empty() );
// Now build a map of all fixed vertices
std::set<Mesh::VertexHandle> fixed_vertices;
std::vector<bool> fixed;
mesh.vertices_get_fixed_flag( arrptr(verts), fixed, verts.size(), err );
ASSERT_NO_ERROR(err);
for (size_t i = 0; i < verts.size(); ++i)
if (fixed[i])
fixed_vertices.insert( verts[i] );
// Now actually run the tool
Settings settings;
//.........这里部分代码省略.........