tetrahedral meshの読み込み方

.smeshをtetgenにかけると.ele, .node, .faceファイルが出力されるわけですが、
これらもごく単純なフォーマットで、次の程度のもので読み込むことが可能です。

template < class Traits >
void
make_softvolume(
        const char*                             basename,
        float                                   mass,
        partix::SoftVolume< Traits >*&          volume,
        partix::TetrahedralMesh< Traits >*&     mesh
        )
{
        typedef partix::Point< Traits >         point_type;
        typedef typename Traits::vector_type    vector_type;

        std::string filename( basename );

        mesh = new partix::TetrahedralMesh< Traits >;

        // .node(頂点座標)読み込み
        {
                std::ifstream ifs( ( filename + ".node" ).c_str() );
                int node_count, dummy;
                ifs >> node_count >> dummy >> dummy >> dummy;
                for( int i = 0 ; i < node_count ; i++ ) {
                        vector_type p;
                        ifs >> dummy >> p.x >> p.y >> p.z;
                        mesh->add_point( p, mass );
                }
        }

        // .ele(tetrahedron)読み込み
        {
                std::ifstream ifs( ( filename + ".ele" ).c_str() );
                int node_count, dummy;
                ifs >> node_count >> dummy >> dummy;
                for( int i = 0 ; i < node_count ; i++ ) {
                        int i0, i1, i2, i3;
                        ifs >> dummy >> i0 >> i1 >> i2 >> i3;
                        mesh->add_tetrahedron( i0, i1, i2, i3 );
                }
        }

        // .face(外接面)読み込み
        {
                std::ifstream ifs( ( filename + ".face" ).c_str() );
                int node_count, dummy;
                ifs >> node_count >> dummy;
                for( int i = 0 ; i < node_count ; i++ ) {
                        int i0, i1, i2;
                        ifs >> dummy >> i0 >> i1 >> i2 >> dummy;
                        mesh->add_face( i0, i2, i1 ); // 反転
                }
        }

        mesh->setup();
        volume = new partix::SoftVolume< Traits >;
        volume->set_mesh( mesh );
        volume->regularize();
}

各フォーマットの正確な定義はhttp://tetgen.berlios.de/fformats.htmlにあります。