mirror of https://github.com/CGAL/cgal
added: writing of faces
This commit is contained in:
parent
a87fec062d
commit
5a08d9a9c0
|
|
@ -942,7 +942,7 @@ void Aos::save_arr(Kml::Placemarks& placemarks, const std::string& file_name)
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// HALF-EDGES
|
// HALF-EDGES
|
||||||
int num_half_edges = 0;
|
int num_half_edges = 0;
|
||||||
auto& js_halfedges = js["edges"] = json::array();
|
auto& js_halfedges = js["halfedges"] = json::array();
|
||||||
std::map<Halfedge_handle, int> halfedge_pos_map;
|
std::map<Halfedge_handle, int> halfedge_pos_map;
|
||||||
auto write_half_edges = [&](Ext_aos::Ccb_halfedge_circulator first)
|
auto write_half_edges = [&](Ext_aos::Ccb_halfedge_circulator first)
|
||||||
{
|
{
|
||||||
|
|
@ -982,15 +982,14 @@ void Aos::save_arr(Kml::Placemarks& placemarks, const std::string& file_name)
|
||||||
std::cout << "*** num total half-edges = " << num_half_edges << std::endl;
|
std::cout << "*** num total half-edges = " << num_half_edges << std::endl;
|
||||||
std::cout << "*** halfedge-pos-map size = " << halfedge_pos_map.size() << std::endl;
|
std::cout << "*** halfedge-pos-map size = " << halfedge_pos_map.size() << std::endl;
|
||||||
|
|
||||||
std::ofstream ofile("C:/work/gsoc2023/deneme.txt");
|
|
||||||
ofile << js;
|
|
||||||
ofile.close();
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
// mark all faces as TRUE (= as existing faces)
|
// FACES
|
||||||
|
// CONDITION DATA: Caspian Sea needs to be defined
|
||||||
num_half_edges = 0;
|
num_half_edges = 0;
|
||||||
int num_found = 0;
|
int num_found = 0;
|
||||||
int num_not_found = 0;
|
int num_not_found = 0;
|
||||||
|
std::map<Face_handle, std::string> face_name_map;
|
||||||
for (auto fh = arr.faces_begin(); fh != arr.faces_end(); ++fh)
|
for (auto fh = arr.faces_begin(); fh != arr.faces_end(); ++fh)
|
||||||
{
|
{
|
||||||
// skip the spherical face
|
// skip the spherical face
|
||||||
|
|
@ -1000,7 +999,6 @@ void Aos::save_arr(Kml::Placemarks& placemarks, const std::string& file_name)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// construct the set of all node-ids for the current face
|
// construct the set of all node-ids for the current face
|
||||||
std::set<int> face_node_ids_set;
|
std::set<int> face_node_ids_set;
|
||||||
std::vector<int> face_node_ids;
|
std::vector<int> face_node_ids;
|
||||||
|
|
@ -1036,53 +1034,64 @@ void Aos::save_arr(Kml::Placemarks& placemarks, const std::string& file_name)
|
||||||
num_found++;
|
num_found++;
|
||||||
name = it->second;
|
name = it->second;
|
||||||
}
|
}
|
||||||
|
face_name_map[fh] = name;
|
||||||
// loop on the edges once again, but this time to record the face curves!
|
|
||||||
std::cout << "CHECKING : " << name << std::endl;
|
|
||||||
curr = first = fh->outer_ccb();
|
|
||||||
do {
|
|
||||||
// get the current curve and its source vertex
|
|
||||||
auto vh = curr->source();
|
|
||||||
auto& xcv = curr->curve();
|
|
||||||
|
|
||||||
// skip if the vertex is due to intersection with the identification curve
|
|
||||||
if ((vh->data().v == false) && (vh->degree() == 2))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
auto vp = vertex_pos_map[vh];
|
|
||||||
auto cp = curve_pos_map[&xcv];
|
|
||||||
|
|
||||||
} while (++curr != first);
|
|
||||||
}
|
}
|
||||||
std::cout << "num not found = " << num_not_found << std::endl;
|
std::cout << "num not found = " << num_not_found << std::endl;
|
||||||
//std::cout << "all curves = " << all_curves.size() << std::endl;
|
|
||||||
//std::cout << "curve count = " << curve_count << std::endl;
|
|
||||||
std::cout << "num edges = " << num_edges << std::endl;
|
|
||||||
std::cout << "num half edges = " << num_half_edges << std::endl;
|
|
||||||
|
|
||||||
|
|
||||||
|
// RECORD FACES
|
||||||
|
json& js_faces = js["faces"] = json::array();
|
||||||
|
auto get_ccb_json = [&](Ext_aos::Ccb_halfedge_circulator first)
|
||||||
{
|
{
|
||||||
auto count_half_edges = [&](auto first)
|
json js_halfedges;
|
||||||
{
|
auto& ccb_halfedge_indices = js_halfedges["halfedges"] = json::array();
|
||||||
int num_half_edges = 0;
|
|
||||||
auto curr = first;
|
auto curr = first;
|
||||||
do {
|
do {
|
||||||
num_half_edges++;
|
auto& he = *curr;
|
||||||
|
auto hep = halfedge_pos_map[&he];
|
||||||
|
ccb_halfedge_indices.push_back(hep);
|
||||||
} while (++curr != first);
|
} while (++curr != first);
|
||||||
return num_half_edges;
|
|
||||||
|
return js_halfedges;
|
||||||
};
|
};
|
||||||
|
|
||||||
int total_num_half_edges = 0;
|
int total_num_half_edges = 0;
|
||||||
for (auto fh = arr.faces_begin(); fh != arr.faces_end(); ++fh)
|
for (auto fh = arr.faces_begin(); fh != arr.faces_end(); ++fh)
|
||||||
{
|
{
|
||||||
auto it = fh->outer_ccb();
|
// skip the spherical face
|
||||||
|
if (fh->number_of_outer_ccbs() == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// json object for the current face
|
||||||
|
json js_face;
|
||||||
|
auto face_name = face_name_map[fh];
|
||||||
|
js_face["name"] = face_name;
|
||||||
|
|
||||||
|
// at this point we are sure that we have at least 1 outer-ccb
|
||||||
|
auto& js_outer_ccbs = js_face["outer_ccbs"] = json::array();
|
||||||
for (auto ccb = fh->outer_ccbs_begin(); ccb != fh->outer_ccbs_end(); ++ccb)
|
for (auto ccb = fh->outer_ccbs_begin(); ccb != fh->outer_ccbs_end(); ++ccb)
|
||||||
total_num_half_edges += count_half_edges(*ccb);
|
{
|
||||||
|
auto js_ccb = get_ccb_json(*ccb);
|
||||||
|
js_outer_ccbs.push_back(std::move(js_ccb));
|
||||||
|
}
|
||||||
|
|
||||||
|
// INNER CCBS
|
||||||
|
if(fh->number_of_inner_ccbs() > 0)
|
||||||
|
{
|
||||||
|
auto& js_inner_ccbs = js_face["inner_ccbs"] = json::array();
|
||||||
for (auto ccb = fh->inner_ccbs_begin(); ccb != fh->inner_ccbs_end(); ++ccb)
|
for (auto ccb = fh->inner_ccbs_begin(); ccb != fh->inner_ccbs_end(); ++ccb)
|
||||||
total_num_half_edges += count_half_edges(*ccb);
|
{
|
||||||
|
auto js_ccb = get_ccb_json(*ccb);
|
||||||
|
js_inner_ccbs.push_back(std::move(js_ccb));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
js_faces.push_back(std::move(js_face));
|
||||||
}
|
}
|
||||||
std::cout << "total num half-edges = " << total_num_half_edges << std::endl;
|
std::cout << "total num half-edges = " << total_num_half_edges << std::endl;
|
||||||
}
|
|
||||||
|
std::ofstream ofile("C:/work/gsoc2023/deneme.txt");
|
||||||
|
ofile << js;
|
||||||
|
ofile.close();
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue