Subject: CGAL users discussion list
List archive
- From: Claus Volko <>
- To:
- Subject: Re: [cgal-discuss] Converting Google Maps HD meshes
- Date: Mon, 28 Aug 2023 08:54:35 +0200
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=None
- Ironport-data: A9a23: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 OPrk67G2+20Z7igyPPJ6z+KznO4zJLetXMaSuDM
- Ironport-hdrordr: A9a23:OKigFKP+gN0iosBcTqKjsMiBIKoaSvp037BN7SBMoH1uE/Bw+P rEoB1273XJYVUqNk3I++rtBEDoexq1yXcf2+Ys1NmZMTXbhA==
- Ironport-phdr: A9a23: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
- Ironport-sdr: 64ec44c1_5AV8dlPd8a2aIjNDLBVq4Bs5HUG1NJRlj8rlaw9zrJ4lR0P qr8mZYpVunQcSIMR0kfQbgmzUbWImAHPEvwJIJg==
I used the attached program and got an error message.
Am Mo., 28. Aug. 2023 um 08:48 Uhr schrieb Sebastien Loriot <>:
I did not have any issue opening the shared file.
Could you please share a minimal example I can compile and that shows
the error so that I can run on my side?
Best,
Sebastien.
On 8/28/23 08:28, Claus Volko ( via cgal-discuss
Mailing List) wrote:
> Yes, I uploaded it to:
> http://www.21stcenturyheadlines.com/temp/Scene_obj.zip
> <http://www.21stcenturyheadlines.com/temp/Scene_obj.zip>
>
> Am Mo., 28. Aug. 2023 um 08:06 Uhr schrieb Sebastien Loriot
> < <mailto:>>:
>
> Could you share such an obj file that CGAL cannot open?
>
> Thanks,
>
> Sebastien.
>
> On 8/27/23 17:03, Claus Volko (
> <mailto:> via cgal-discuss
> Mailing List) wrote:
> > We are trying to make OBJ files saved from Google Maps HD compatible
> > with CGAL 5.6 for Shape Detection (Region Growing). On opening
> the OBJ
> > file I get an error message that does not explain what is wrong, but
> > after converting to OFF it is more verbose:
> >
> > CGAL::Polyhedron_incremental_builder_3<HDS>::
> > lookup_halfedge(): input error: facet 49 shares a halfedge from
> vertex
> > 145 to vertex 146 with facet 48.
> >
> > Polyhedron_scan_OFF<Traits>::
> > operator()(): input error: facet 50 has fewer than 3 vertices.
> > ERROR: cannot read the input file!
> >
> > I wrote a short program in C# that should fix the problem
> (attached).
> > However, the result is a file that is somewhat degenerated: the
> number
> > of planes is equal to the number of faces. This cannot be used.
> >
> > Does anybody have an idea how else this could be fixed?
> >
> > --
> > Dipl.-Ing. Dr. Claus D. Volko, BSc
> > http://www.cdvolko.net/ <http://www.cdvolko.net/>
> <http://www.cdvolko.net/ <http://www.cdvolko.net/>>
> >
> >
> >
> >
> > --
> > You are currently subscribed to cgal-discuss.
> > To unsubscribe or access the archives, go to
> > https://sympa.inria.fr/sympa/info/cgal-discuss
> <https://sympa.inria.fr/sympa/info/cgal-discuss>
> >
>
> --
> You are currently subscribed to cgal-discuss.
> To unsubscribe or access the archives, go to
> https://sympa.inria.fr/sympa/info/cgal-discuss
> <https://sympa.inria.fr/sympa/info/cgal-discuss>
>
>
>
>
> --
> Dipl.-Ing. Dr. Claus D. Volko, BSc
> http://www.cdvolko.net/ <http://www.cdvolko.net/>
>
>
>
>
> --
> You are currently subscribed to cgal-discuss.
> To unsubscribe or access the archives, go to
> https://sympa.inria.fr/sympa/info/cgal-discuss
>
--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss
--
#define USE_POLYHEDRON
#include <CGAL/Polygon_mesh_processing/clip.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Polyhedron_3.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/Shape_detection/Region_growing/Region_growing.h>
#include <CGAL/Shape_detection/Region_growing/Polygon_mesh.h>
#include <CGAL/boost/graph/IO/polygon_mesh_io.h>
#include "include/utils.h"
// Typedefs.
using Kernel = CGAL::Exact_predicates_inexact_constructions_kernel;
using FT = typename Kernel::FT;
using Point_3 = typename Kernel::Point_3;
#ifdef USE_POLYHEDRON
using Polygon_mesh = CGAL::Polyhedron_3<Kernel>;
#else
using Polygon_mesh = CGAL::Surface_mesh<Point_3>;
#endif
using Neighbor_query =
CGAL::Shape_detection::Polygon_mesh::One_ring_neighbor_query<Polygon_mesh>;
using Region_type =
CGAL::Shape_detection::Polygon_mesh::Least_squares_plane_fit_region<Kernel,
Polygon_mesh>;
using Sorting =
CGAL::Shape_detection::Polygon_mesh::Least_squares_plane_fit_sorting<Kernel,
Polygon_mesh, Neighbor_query>;
using Region_growing = CGAL::Shape_detection::Region_growing<Neighbor_query,
Region_type>;
int main(int argc, char *argv[]) {
// Load data either from a local folder or a user-provided file.
const bool is_default_input = argc > 1 ? false : true;
const std::string filename = is_default_input ?
CGAL::data_file_path("meshes/building.off") : argv[1];
std::ifstream in(filename);
CGAL::IO::set_ascii_mode(in);
Polygon_mesh polygon_mesh;
if (!CGAL::IO::read_polygon_mesh(filename, polygon_mesh)) {
std::cerr << "ERROR: cannot read the input file!" << std::endl;
return EXIT_FAILURE;
}
const auto& face_range = faces(polygon_mesh);
std::cout << "* number of input faces: " << face_range.size() << std::endl;
assert(!is_default_input || face_range.size() == 32245);
// Testing the usgae of clip and copy_face_graph (Claus Volko)
/*
#ifdef USE_POLYHEDRON
const Kernel::Plane_3& plane = Kernel::Plane_3(CGAL::Point_3<Kernel>(0, 0,
0),
CGAL::Point_3<Kernel>(0, 1, 0),
CGAL::Point_3<Kernel>(1, 1, 0));
CGAL::Polygon_mesh_processing::clip(polygon_mesh, plane,
CGAL::parameters::default_values());
CGAL::Surface_mesh<Point_3> surface_mesh;
copy_face_graph(polygon_mesh, surface_mesh);
#endif
*/
// Default parameter values for the data file building.off.
/*
const FT max_distance = FT(1);
const FT max_angle = FT(45);
const std::size_t min_region_size = 5;
*/
const FT max_distance = FT(10);
const FT max_angle = FT(90);
const std::size_t min_region_size = 1;
// Create instances of the classes Neighbor_query and Region_type.
Neighbor_query neighbor_query(polygon_mesh);
Region_type region_type(
polygon_mesh,
CGAL::parameters::
maximum_distance(max_distance).
maximum_angle(max_angle).
minimum_region_size(min_region_size));
// Sort face indices.
Sorting sorting(
polygon_mesh, neighbor_query);
sorting.sort();
// Create an instance of the region growing class.
Region_growing region_growing(
face_range, sorting.ordered(), neighbor_query, region_type);
// Run the algorithm.
std::vector<typename Region_growing::Primitive_and_region> regions;
region_growing.detect(std::back_inserter(regions));
std::cout << "* number of found planes: " << regions.size() << std::endl;
assert(!is_default_input || regions.size() == 365);
const Region_growing::Region_map& map = region_growing.region_map();
for (std::size_t i = 0; i < regions.size(); i++)
for (auto& item : regions[i].second) {
if (i != get(map, item)) {
std::cout << "Region map incorrect" << std::endl;
}
}
std::vector<typename Region_growing::Item> unassigned;
region_growing.unassigned_items(face_range, std::back_inserter(unassigned));
for (auto& item : unassigned) {
if (std::size_t(-1) != get(map, item)) {
std::cout << "Region map for unassigned incorrect" << std::endl;
}
}
// Save regions to a file.
const std::string fullpath = (argc > 2 ? argv[2] :
"planes_polygon_mesh.ply");
utils::save_polygon_mesh_regions(polygon_mesh, regions, fullpath);
return EXIT_SUCCESS;
}
- [cgal-discuss] Converting Google Maps HD meshes, Claus Volko, 08/27/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Sebastien Loriot, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Claus Volko, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Sebastien Loriot, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Claus Volko, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Sebastien Loriot, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Claus Volko, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Sebastien Loriot, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Claus Volko, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Claus Volko, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Sebastien Loriot, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Claus Volko, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Sebastien Loriot, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Claus Volko, 08/28/2023
- Re: [cgal-discuss] Converting Google Maps HD meshes, Sebastien Loriot, 08/28/2023
Archive powered by MHonArc 2.6.19+.