314    float voxelSize, 
float halfWidth, InterruptT *interrupt)
 
  317    static_assert(std::is_floating_point<typename GridType::ValueType>::value,
 
  318        "level set grids must have scalar, floating-point value types");
 
  322    std::vector<Vec3f> vtx;
 
  323    std::vector<Vec3I> tri;
 
  324    std::vector<Vec4I> qua;
 
  326    if (faceCount == 4) {
 
  328        vtx.push_back( 
Vec3f( 0.0f,          1.0f,         0.0f) );
 
  329        vtx.push_back( 
Vec3f(-0.942810297f, -0.333329707f, 0.0f) );
 
  330        vtx.push_back( 
Vec3f( 0.471405149f, -0.333329707f, 0.816497624f) );
 
  331        vtx.push_back( 
Vec3f( 0.471405149f, -0.333329707f, -0.816497624f) );
 
  333        tri.push_back( 
Vec3I(0, 2, 3) );
 
  334        tri.push_back( 
Vec3I(0, 3, 1) );
 
  335        tri.push_back( 
Vec3I(0, 1, 2) );
 
  336        tri.push_back( 
Vec3I(1, 3, 2) );
 
  338    } 
else if (faceCount == 6) {
 
  340        vtx.push_back( 
Vec3f(-0.5f, -0.5f, -0.5f) );
 
  341        vtx.push_back( 
Vec3f( 0.5f, -0.5f, -0.5f) );
 
  342        vtx.push_back( 
Vec3f( 0.5f, -0.5f,  0.5f) );
 
  343        vtx.push_back( 
Vec3f(-0.5f, -0.5f,  0.5f) );
 
  344        vtx.push_back( 
Vec3f(-0.5f,  0.5f, -0.5f) );
 
  345        vtx.push_back( 
Vec3f( 0.5f,  0.5f, -0.5f) );
 
  346        vtx.push_back( 
Vec3f( 0.5f,  0.5f,  0.5f) );
 
  347        vtx.push_back( 
Vec3f(-0.5f,  0.5f,  0.5f) );
 
  349        qua.push_back( 
Vec4I(1, 0, 4, 5) );
 
  350        qua.push_back( 
Vec4I(2, 1, 5, 6) );
 
  351        qua.push_back( 
Vec4I(3, 2, 6, 7) );
 
  352        qua.push_back( 
Vec4I(0, 3, 7, 4) );
 
  353        qua.push_back( 
Vec4I(2, 3, 0, 1) );
 
  354        qua.push_back( 
Vec4I(5, 4, 7, 6) );
 
  356    } 
else if (faceCount == 8) {
 
  358        vtx.push_back( 
Vec3f( 0.0f, 0.0f, -1.0f) );
 
  359        vtx.push_back( 
Vec3f( 1.0f, 0.0f,  0.0f) );
 
  360        vtx.push_back( 
Vec3f( 0.0f, 0.0f,  1.0f) );
 
  361        vtx.push_back( 
Vec3f(-1.0f, 0.0f,  0.0f) );
 
  362        vtx.push_back( 
Vec3f( 0.0f,-1.0f,  0.0f) );
 
  363        vtx.push_back( 
Vec3f( 0.0f, 1.0f,  0.0f) );
 
  365        tri.push_back( 
Vec3I(0, 4, 3) );
 
  366        tri.push_back( 
Vec3I(0, 1, 4) );
 
  367        tri.push_back( 
Vec3I(1, 2, 4) );
 
  368        tri.push_back( 
Vec3I(2, 3, 4) );
 
  369        tri.push_back( 
Vec3I(0, 3, 5) );
 
  370        tri.push_back( 
Vec3I(0, 5, 1) );
 
  371        tri.push_back( 
Vec3I(1, 5, 2) );
 
  372        tri.push_back( 
Vec3I(2, 5, 3) );
 
  374    } 
else if (faceCount == 12) {
 
  376        vtx.push_back( 
Vec3f( 0.354437858f,  0.487842113f, -0.789344311f) );
 
  377        vtx.push_back( 
Vec3f( 0.573492587f, -0.186338872f, -0.78934437f) );
 
  378        vtx.push_back( 
Vec3f( 0.0f,         -0.603005826f, -0.78934443f) );
 
  379        vtx.push_back( 
Vec3f(-0.573492587f, -0.186338872f, -0.78934437f) );
 
  380        vtx.push_back( 
Vec3f(-0.354437858f,  0.487842113f, -0.789344311f) );
 
  381        vtx.push_back( 
Vec3f(-0.573492587f,  0.789345026f, -0.186338797f) );
 
  382        vtx.push_back( 
Vec3f(-0.927930415f, -0.301502913f, -0.186338872f) );
 
  383        vtx.push_back( 
Vec3f( 0.0f,         -0.975683928f, -0.186338902f) );
 
  384        vtx.push_back( 
Vec3f( 0.927930415f, -0.301502913f, -0.186338872f) );
 
  385        vtx.push_back( 
Vec3f( 0.573492587f,  0.789345026f, -0.186338797f) );
 
  386        vtx.push_back( 
Vec3f( 0.0f,          0.975683868f,  0.186338902f) );
 
  387        vtx.push_back( 
Vec3f(-0.927930415f,  0.301502913f,  0.186338872f) );
 
  388        vtx.push_back( 
Vec3f(-0.573492587f, -0.789345026f,  0.186338797f) );
 
  389        vtx.push_back( 
Vec3f( 0.573492587f, -0.789345026f,  0.186338797f) );
 
  390        vtx.push_back( 
Vec3f( 0.927930415f,  0.301502913f,  0.186338872f) );
 
  391        vtx.push_back( 
Vec3f( 0.0f,          0.603005826f,  0.78934443f) );
 
  392        vtx.push_back( 
Vec3f( 0.573492587f,  0.186338872f,  0.78934437f) );
 
  393        vtx.push_back( 
Vec3f( 0.354437858f, -0.487842113f,  0.789344311f) );
 
  394        vtx.push_back( 
Vec3f(-0.354437858f, -0.487842113f,  0.789344311f) );
 
  395        vtx.push_back( 
Vec3f(-0.573492587f,  0.186338872f,  0.78934437f) );
 
  397        qua.push_back( 
Vec4I(0, 1, 2, 3) );
 
  398        tri.push_back( 
Vec3I(0, 3, 4) );
 
  399        qua.push_back( 
Vec4I(0, 4, 5, 10) );
 
  400        tri.push_back( 
Vec3I(0, 10, 9) );
 
  401        qua.push_back( 
Vec4I(0, 9, 14, 8) );
 
  402        tri.push_back( 
Vec3I(0, 8, 1) );
 
  403        qua.push_back( 
Vec4I(1, 8, 13, 7) );
 
  404        tri.push_back( 
Vec3I(1, 7, 2) );
 
  405        qua.push_back( 
Vec4I(2, 7, 12, 6) );
 
  406        tri.push_back( 
Vec3I(2, 6, 3) );
 
  407        qua.push_back( 
Vec4I(3, 6, 11, 5) );
 
  408        tri.push_back( 
Vec3I(3, 5, 4) );
 
  409        qua.push_back( 
Vec4I(5, 11, 19, 15) );
 
  410        tri.push_back( 
Vec3I(5, 15, 10) );
 
  411        qua.push_back( 
Vec4I(6, 12, 18, 19) );
 
  412        tri.push_back( 
Vec3I(6, 19, 11) );
 
  413        qua.push_back( 
Vec4I(7, 13, 17, 18) );
 
  414        tri.push_back( 
Vec3I(7, 18, 12) );
 
  415        qua.push_back( 
Vec4I(8, 14, 16, 17) );
 
  416        tri.push_back( 
Vec3I(8, 17, 13) );
 
  417        qua.push_back( 
Vec4I(9, 10, 15, 16) );
 
  418        tri.push_back( 
Vec3I(9, 16, 14) );
 
  419        qua.push_back( 
Vec4I(15, 19, 18, 17) );
 
  420        tri.push_back( 
Vec3I(15, 17, 16) );
 
  422    } 
else if (faceCount == 20) {
 
  424        vtx.push_back( 
Vec3f(0.0f, 0.0f, -1.0f) );
 
  425        vtx.push_back( 
Vec3f(0.0f, 0.894427359f, -0.447213143f) );
 
  426        vtx.push_back( 
Vec3f(0.850650847f, 0.276393682f, -0.447213203f) );
 
  427        vtx.push_back( 
Vec3f(0.525731206f, -0.723606944f, -0.447213262f) );
 
  428        vtx.push_back( 
Vec3f(-0.525731206f, -0.723606944f, -0.447213262f) );
 
  429        vtx.push_back( 
Vec3f(-0.850650847f, 0.276393682f, -0.447213203f) );
 
  430        vtx.push_back( 
Vec3f(-0.525731206f, 0.723606944f, 0.447213262f) );
 
  431        vtx.push_back( 
Vec3f(-0.850650847f, -0.276393682f, 0.447213203f) );
 
  432        vtx.push_back( 
Vec3f(0.0f, -0.894427359f, 0.447213143f) );
 
  433        vtx.push_back( 
Vec3f(0.850650847f, -0.276393682f, 0.447213203f) );
 
  434        vtx.push_back( 
Vec3f(0.525731206f, 0.723606944f, 0.447213262f) );
 
  435        vtx.push_back( 
Vec3f(0.0f, 0.0f, 1.0f) );
 
  437        tri.push_back( 
Vec3I( 2,  0,  1) );
 
  438        tri.push_back( 
Vec3I( 3,  0,  2) );
 
  439        tri.push_back( 
Vec3I( 4,  0,  3) );
 
  440        tri.push_back( 
Vec3I( 5,  0,  4) );
 
  441        tri.push_back( 
Vec3I( 1,  0,  5) );
 
  442        tri.push_back( 
Vec3I( 6,  1,  5) );
 
  443        tri.push_back( 
Vec3I( 7,  5,  4) );
 
  444        tri.push_back( 
Vec3I( 8,  4,  3) );
 
  445        tri.push_back( 
Vec3I( 9,  3,  2) );
 
  446        tri.push_back( 
Vec3I(10,  2,  1) );
 
  447        tri.push_back( 
Vec3I(10,  1,  6) );
 
  448        tri.push_back( 
Vec3I( 6,  5,  7) );
 
  449        tri.push_back( 
Vec3I( 7,  4,  8) );
 
  450        tri.push_back( 
Vec3I( 8,  3,  9) );
 
  451        tri.push_back( 
Vec3I( 9,  2, 10) );
 
  452        tri.push_back( 
Vec3I( 6, 11, 10) );
 
  453        tri.push_back( 
Vec3I(10, 11,  9) );
 
  454        tri.push_back( 
Vec3I( 9, 11,  8) );
 
  455        tri.push_back( 
Vec3I( 8, 11,  7) );
 
  456        tri.push_back( 
Vec3I( 7, 11,  6) );
 
  463    for ( 
size_t i = 0; i<vtx.size(); ++i ) vtx[i] = scale * vtx[i] + center;
 
  465    typename GridType::Ptr grid;
 
  467    if (interrupt == 
nullptr) {