Replace pair property map with 2 property maps (simpler for IO)

This commit is contained in:
Simon Giraudot 2019-04-23 12:30:36 +02:00
parent fe18f20d05
commit 70aab39fa6
3 changed files with 50 additions and 29 deletions

View File

@ -150,9 +150,14 @@ public :
pen.setWidth(0); pen.setWidth(0);
painter->setPen(pen); painter->setPen(pen);
painter->setBrush(brush); painter->setBrush(brush);
SMesh::Property_map<halfedge_descriptor,std::pair<float, float> > uv; SMesh::Property_map<halfedge_descriptor, float> u;
uv = graph->add_property_map<halfedge_descriptor,std::pair<float, float> > SMesh::Property_map<halfedge_descriptor, float> v;
("h:uv",std::make_pair(0.0f,0.0f)).first;
u = graph->add_property_map<halfedge_descriptor, float>
("h:u", 0.0f).first;
v = graph->add_property_map<halfedge_descriptor, float>
("h:v", 0.0f).first;
for( Component::iterator for( Component::iterator
fi = component->begin(); fi = component->begin();
fi != component->end(); fi != component->end();
@ -161,11 +166,11 @@ public :
boost::graph_traits<SMesh>::face_descriptor f(*fi); boost::graph_traits<SMesh>::face_descriptor f(*fi);
QPointF points[3]; QPointF points[3];
boost::graph_traits<SMesh>::halfedge_descriptor h = halfedge(f, *graph);; boost::graph_traits<SMesh>::halfedge_descriptor h = halfedge(f, *graph);;
points[0] = QPointF(get(uv, h).first, -get(uv, h).second); points[0] = QPointF(get(u, h), -get(v, h));
h = next(halfedge(f, *graph), *graph); h = next(halfedge(f, *graph), *graph);
points[1] = QPointF(get(uv, h).first, -get(uv, h).second); points[1] = QPointF(get(u, h), -get(v, h));
h = next(next(halfedge(f, *graph), *graph), *graph); h = next(next(halfedge(f, *graph), *graph), *graph);
points[2] = QPointF(get(uv, h).first, -get(uv, h).second); points[2] = QPointF(get(u, h), -get(v, h));
painter->drawPolygon(points,3); painter->drawPolygon(points,3);
} }
@ -605,9 +610,12 @@ public Q_SLOTS:
{ {
component->insert(*bfit); component->insert(*bfit);
} }
SMesh::Property_map<halfedge_descriptor,std::pair<float, float> > uv; SMesh::Property_map<halfedge_descriptor, float> umap;
uv = sm->add_property_map<halfedge_descriptor,std::pair<float, float> >( SMesh::Property_map<halfedge_descriptor, float> vmap;
"h:uv",std::make_pair(0.0f,0.0f)).first; umap = sm->add_property_map<halfedge_descriptor, float>
("h:u", 0.0f).first;
vmap = sm->add_property_map<halfedge_descriptor, float>
("h:v", 0.0f).first;
SMesh::Halfedge_iterator it; SMesh::Halfedge_iterator it;
SMesh::Property_map<SMesh::Vertex_index, EPICK::Point_2> uv_map = SMesh::Property_map<SMesh::Vertex_index, EPICK::Point_2> uv_map =
sm->property_map<SMesh::Vertex_index, EPICK::Point_2>("v:uv").first; sm->property_map<SMesh::Vertex_index, EPICK::Point_2>("v:uv").first;
@ -618,7 +626,8 @@ public Q_SLOTS:
halfedge_descriptor hd(*it); halfedge_descriptor hd(*it);
EPICK::FT u = uv_map[target(hd, *sm)].x(); EPICK::FT u = uv_map[target(hd, *sm)].x();
EPICK::FT v = uv_map[target(hd, *sm)].y(); EPICK::FT v = uv_map[target(hd, *sm)].y();
put(uv, *it, std::make_pair(static_cast<float>(u),static_cast<float>(v))); put(umap, *it, static_cast<float>(u));
put(vmap, *it, static_cast<float>(v));
} }
//ParamItem does not take ownership of text_mesh_bottom //ParamItem does not take ownership of text_mesh_bottom

View File

@ -265,8 +265,11 @@ public :
pen.setWidth(0); pen.setWidth(0);
painter->setPen(pen); painter->setPen(pen);
painter->setBrush(brush); painter->setBrush(brush);
SMesh::Property_map<halfedge_descriptor,std::pair<float, float> > uv; SMesh::Property_map<halfedge_descriptor,float> u,v;
uv = graph->add_property_map<halfedge_descriptor,std::pair<float, float> >("h:uv",std::make_pair(0.0f,0.0f)).first;
u = graph->add_property_map<halfedge_descriptor,float>("h:u", 0.0f).first;
v = graph->add_property_map<halfedge_descriptor,float>("h:v", 0.0f).first;
for( Component::iterator for( Component::iterator
fi = components->at(m_current_component).begin(); fi = components->at(m_current_component).begin();
fi != components->at(m_current_component).end(); fi != components->at(m_current_component).end();
@ -276,11 +279,11 @@ uv = graph->add_property_map<halfedge_descriptor,std::pair<float, float> >("h:uv
QPointF points[3]; QPointF points[3];
boost::graph_traits<Base_face_graph>::halfedge_descriptor h = halfedge(f, *graph);; boost::graph_traits<Base_face_graph>::halfedge_descriptor h = halfedge(f, *graph);;
points[0] = QPointF(get(uv, h).first, get(uv, h).second); points[0] = QPointF(get(u, h), get(v, h));
h = next(halfedge(f, *graph), *graph); h = next(halfedge(f, *graph), *graph);
points[1] = QPointF(get(uv, h).first, get(uv, h).second); points[1] = QPointF(get(u, h), get(v, h));
h = next(next(halfedge(f, *graph), *graph), *graph); h = next(next(halfedge(f, *graph), *graph), *graph);
points[2] = QPointF(get(uv, h).first, get(uv, h).second); points[2] = QPointF(get(u, h), get(v, h));
painter->drawPolygon(points,3); painter->drawPolygon(points,3);
} }
} }
@ -906,8 +909,13 @@ void Polyhedron_demo_parameterization_plugin::parameterize(const Parameterizatio
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
QPointF min(FLT_MAX, FLT_MAX), max(-FLT_MAX, -FLT_MAX); QPointF min(FLT_MAX, FLT_MAX), max(-FLT_MAX, -FLT_MAX);
SMesh::Property_map<halfedge_descriptor,std::pair<float, float> > uv; SMesh::Property_map<halfedge_descriptor, float> umap;
uv = tMesh.add_property_map<halfedge_descriptor,std::pair<float, float> >("h:uv",std::make_pair(0.0f,0.0f)).first; SMesh::Property_map<halfedge_descriptor, float> vmap;
umap = tMesh.add_property_map<halfedge_descriptor, float>("h:u", 0.0f).first;
vmap = tMesh.add_property_map<halfedge_descriptor, float>("h:v", 0.0f).first;
tMesh.property_stats(std::cerr);
Base_face_graph::Halfedge_iterator it; Base_face_graph::Halfedge_iterator it;
for(it = tMesh.halfedges_begin(); for(it = tMesh.halfedges_begin();
it != tMesh.halfedges_end(); it != tMesh.halfedges_end();
@ -916,7 +924,8 @@ void Polyhedron_demo_parameterization_plugin::parameterize(const Parameterizatio
Seam_mesh::halfedge_descriptor hd(*it); Seam_mesh::halfedge_descriptor hd(*it);
FT u = uv_pm[target(hd, sMesh)].x(); FT u = uv_pm[target(hd, sMesh)].x();
FT v = uv_pm[target(hd, sMesh)].y(); FT v = uv_pm[target(hd, sMesh)].y();
put(uv, *it, std::make_pair(static_cast<float>(u),static_cast<float>(v))); put(umap, *it, static_cast<float>(u));
put(vmap, *it, static_cast<float>(v));
if(u<min.x()) if(u<min.x())
min.setX(u); min.setX(u);
if(u>max.x()) if(u>max.x())

View File

@ -21,8 +21,8 @@ struct Scene_textured_surface_mesh_item_priv
{ {
item = parent; item = parent;
texture.GenerateCheckerBoard(2048,2048,128,0,0,0,250,250,255); texture.GenerateCheckerBoard(2048,2048,128,0,0,0,250,250,255);
uv = sm->add_property_map<halfedge_descriptor,std::pair<float, float> >("h:uv",std::make_pair(0.0f,0.0f)).first; umap = sm->add_property_map<halfedge_descriptor, float>("h:u", 0.0f).first;
vmap = sm->add_property_map<halfedge_descriptor, float>("h:v", 0.0f).first;
} }
Scene_textured_surface_mesh_item_priv(const SMesh& p, Scene_textured_surface_mesh_item* parent) Scene_textured_surface_mesh_item_priv(const SMesh& p, Scene_textured_surface_mesh_item* parent)
: sm(new SMesh(p)) : sm(new SMesh(p))
@ -30,14 +30,16 @@ struct Scene_textured_surface_mesh_item_priv
{ {
item = parent; item = parent;
texture.GenerateCheckerBoard(2048,2048,128,0,0,0,250,250,255); texture.GenerateCheckerBoard(2048,2048,128,0,0,0,250,250,255);
uv = sm->add_property_map<halfedge_descriptor,std::pair<float, float> >("h:uv",std::make_pair(0.0f,0.0f)).first; umap = sm->add_property_map<halfedge_descriptor, float>("h:u", 0.0f).first;
vmap = sm->add_property_map<halfedge_descriptor, float>("h:v", 0.0f).first;
} }
Scene_textured_surface_mesh_item_priv(SMesh* const p,Scene_textured_surface_mesh_item* parent) Scene_textured_surface_mesh_item_priv(SMesh* const p,Scene_textured_surface_mesh_item* parent)
:sm(p) :sm(p)
{ {
item = parent; item = parent;
texture.GenerateCheckerBoard(2048,2048,128,0,0,0,250,250,255); texture.GenerateCheckerBoard(2048,2048,128,0,0,0,250,250,255);
uv = sm->add_property_map<halfedge_descriptor,std::pair<float, float> >("h:uv",std::make_pair(0.0f,0.0f)).first; umap = sm->add_property_map<halfedge_descriptor, float>("h:u", 0.0f).first;
vmap = sm->add_property_map<halfedge_descriptor, float>("h:v", 0.0f).first;
} }
~Scene_textured_surface_mesh_item_priv() ~Scene_textured_surface_mesh_item_priv()
@ -49,7 +51,8 @@ struct Scene_textured_surface_mesh_item_priv
SMesh* sm; SMesh* sm;
::Texture texture; ::Texture texture;
SMesh::Property_map<halfedge_descriptor,std::pair<float, float> > uv; SMesh::Property_map<halfedge_descriptor, float> umap;
SMesh::Property_map<halfedge_descriptor, float> vmap;
//[Px][Py][Pz][Nx][Ny][Nz][u][v] //[Px][Py][Pz][Nx][Ny][Nz][u][v]
mutable std::vector<float> faces_buffer; mutable std::vector<float> faces_buffer;
@ -102,8 +105,8 @@ Scene_textured_surface_mesh_item_priv::compute_normals_and_vertices(void) const
faces_buffer.push_back(n[1]); faces_buffer.push_back(n[1]);
faces_buffer.push_back(n[2]); faces_buffer.push_back(n[2]);
//uvs [2] //uvs [2]
const float u = get(uv, *he).first; const float u = get(umap, *he);
const float v = get(uv, *he).second; const float v = get(vmap, *he);
faces_buffer.push_back(u); faces_buffer.push_back(u);
faces_buffer.push_back(v); faces_buffer.push_back(v);
} }
@ -127,8 +130,8 @@ Scene_textured_surface_mesh_item_priv::compute_normals_and_vertices(void) const
edges_buffer.push_back(a.y() + offset.y); edges_buffer.push_back(a.y() + offset.y);
edges_buffer.push_back(a.z() + offset.z); edges_buffer.push_back(a.z() + offset.z);
//uvs [2] //uvs [2]
float u = get(uv, halfedge(*he, *sm)).first; float u = get(umap, halfedge(*he, *sm));
float v = get(uv, halfedge(*he, *sm)).second; float v = get(vmap, halfedge(*he, *sm));
edges_buffer.push_back(u); edges_buffer.push_back(u);
edges_buffer.push_back(v); edges_buffer.push_back(v);
@ -138,8 +141,8 @@ Scene_textured_surface_mesh_item_priv::compute_normals_and_vertices(void) const
edges_buffer.push_back(b.z() + offset.z); edges_buffer.push_back(b.z() + offset.z);
//uvs [2] //uvs [2]
u = get(uv, opposite(halfedge(*he, *sm), *sm)).first; u = get(umap, opposite(halfedge(*he, *sm), *sm));
v = get(uv, opposite(halfedge(*he, *sm), *sm)).second; v = get(vmap, opposite(halfedge(*he, *sm), *sm));
edges_buffer.push_back(u); edges_buffer.push_back(u);
edges_buffer.push_back(v); edges_buffer.push_back(v);