mirror of https://github.com/CGAL/cgal
Improve read_off fir Surface_mesh. Thank you @gdamiandgit diff
This commit is contained in:
parent
2601bae0e3
commit
64a7f4b66a
|
|
@ -2019,8 +2019,16 @@ private: //------------------------------------------------------- private data
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
/// \relates Surface_mesh
|
||||||
|
/// Extracts the surface mesh from an input stream in Ascii OFF, COFF, NOFF, CNOFF format.
|
||||||
|
/// The operator reads the point property as well as "v:normal", "v:color", and "f:color".
|
||||||
|
/// Vertex texture coordinates are ignored.
|
||||||
|
/// \pre `operator>>(std::istream&,const P&)` must be defined.
|
||||||
|
|
||||||
template <typename P>
|
template <typename P>
|
||||||
bool read_off_clear(std::istream& is, Surface_mesh<P>& sm)
|
bool read_off(std::istream& is, Surface_mesh<P>& sm)
|
||||||
{
|
{
|
||||||
typedef Surface_mesh<P> Mesh;
|
typedef Surface_mesh<P> Mesh;
|
||||||
typedef typename Kernel_traits<P>::Kernel K;
|
typedef typename Kernel_traits<P>::Kernel K;
|
||||||
|
|
@ -2028,7 +2036,6 @@ private: //------------------------------------------------------- private data
|
||||||
typedef typename Mesh::Face_index Face_index;
|
typedef typename Mesh::Face_index Face_index;
|
||||||
typedef typename Mesh::Vertex_index Vertex_index;
|
typedef typename Mesh::Vertex_index Vertex_index;
|
||||||
typedef typename Mesh::size_type size_type;
|
typedef typename Mesh::size_type size_type;
|
||||||
sm.clear();
|
|
||||||
int n, f, e;
|
int n, f, e;
|
||||||
std::string off;
|
std::string off;
|
||||||
is >> sm_skip_comments;
|
is >> sm_skip_comments;
|
||||||
|
|
@ -2037,7 +2044,8 @@ private: //------------------------------------------------------- private data
|
||||||
|
|
||||||
is >> n >> f >> e;
|
is >> n >> f >> e;
|
||||||
|
|
||||||
sm.reserve(n,2*f,e);
|
sm.reserve(sm.num_vertices()+n, sm.num_faces()+2*f, sm.num_edges()+e);
|
||||||
|
std::vector<Vertex_index> vertexmap(n);
|
||||||
P p;
|
P p;
|
||||||
Vector_3 v;
|
Vector_3 v;
|
||||||
typename Mesh::template Property_map<Vertex_index,CGAL::Color> vcolor;
|
typename Mesh::template Property_map<Vertex_index,CGAL::Color> vcolor;
|
||||||
|
|
@ -2055,6 +2063,7 @@ private: //------------------------------------------------------- private data
|
||||||
is >> sm_skip_comments;
|
is >> sm_skip_comments;
|
||||||
is >> p;
|
is >> p;
|
||||||
Vertex_index vi= sm.add_vertex(p);
|
Vertex_index vi= sm.add_vertex(p);
|
||||||
|
vertexmap[i] = vi;
|
||||||
if(v_has_normals){
|
if(v_has_normals){
|
||||||
is >> v;
|
is >> v;
|
||||||
vnormal[vi] = v;
|
vnormal[vi] = v;
|
||||||
|
|
@ -2079,9 +2088,8 @@ private: //------------------------------------------------------- private data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::vector<size_type> vr;
|
std::vector<Vertex_index> vr;
|
||||||
std::size_t d;
|
size_type d, vi;
|
||||||
|
|
||||||
bool fcolored = false;
|
bool fcolored = false;
|
||||||
typename Mesh::template Property_map<Face_index,CGAL::Color> fcolor;
|
typename Mesh::template Property_map<Face_index,CGAL::Color> fcolor;
|
||||||
|
|
||||||
|
|
@ -2090,7 +2098,8 @@ private: //------------------------------------------------------- private data
|
||||||
is >> d;
|
is >> d;
|
||||||
vr.resize(d);
|
vr.resize(d);
|
||||||
for(std::size_t j=0; j<d; j++){
|
for(std::size_t j=0; j<d; j++){
|
||||||
is >> vr[j];
|
is >> vi;
|
||||||
|
vr[j] = vertexmap[vi];
|
||||||
}
|
}
|
||||||
Face_index fi = sm.add_face(vr);
|
Face_index fi = sm.add_face(vr);
|
||||||
if(fi == sm.null_face())
|
if(fi == sm.null_face())
|
||||||
|
|
@ -2121,27 +2130,7 @@ private: //------------------------------------------------------- private data
|
||||||
}
|
}
|
||||||
return is.good();
|
return is.good();
|
||||||
}
|
}
|
||||||
/// @endcond
|
|
||||||
|
|
||||||
/// \relates Surface_mesh
|
|
||||||
/// Extracts the surface mesh from an input stream in Ascii OFF, COFF, NOFF, CNOFF format.
|
|
||||||
/// The operator reads the point property as well as "v:normal", "v:color", and "f:color".
|
|
||||||
/// Vertex texture coordinates are ignored.
|
|
||||||
/// \pre `operator>>(std::istream&,const P&)` must be defined.
|
|
||||||
|
|
||||||
template <typename P>
|
|
||||||
bool read_off(std::istream& is, Surface_mesh<P>& sm)
|
|
||||||
{
|
|
||||||
if( (sm.num_vertices() == 0) && (sm.num_halfedges() == 0)&& (sm.num_faces() == 0) ){
|
|
||||||
return read_off_clear(is,sm);
|
|
||||||
}
|
|
||||||
Surface_mesh<P> other;
|
|
||||||
if(read_off_clear(is,other)){
|
|
||||||
copy_face_graph(other,sm);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// \relates Surface_mesh
|
/// \relates Surface_mesh
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue