radial_normals_orientation_3() does a radial orientation of the normals of a point set. Normals are oriented towards exterior of the point set.
This very simple and very fast method is intended to convex objects.
- use std::vector when buffer can be reserved in advance and cannot be too large,
- else use std::deque
I expect gains in terms of speed and memory fragmentation.
Examples:
- MFC demo can now load bimba_range_images.off (range images of the Bimba con Nastrino scan, 3.8 millions points).
- Poisson reconstruction is 10 seconds shorter on Chinese_dragon_Minolta_point_set_225kpts_with_jet_normals.xyz.
- Added Peak_memory_sizer::count_free_memory_blocks() to track memory fragmentation.
- Added back call to Poisson_implicit_function::constrain_one_vertex_on_convex_hull().
Note that Vector_3 is the concept of a normal vector (always) oriented.
- Point_with_normal_3 is now templated by the normal type.
Types currently available are:
-> Vector_3 (the default)
-> Orientable_normal_3 (used by Point_set_3 for point cloud processing)
-> Lightweight_vector_3 = a normal whose vector is allocated only if not zero (used by Poisson 3D triangulation).
We have now 2 corresponding concepts:
-> PointWithNormal_3 = a point + a normal (always) oriented.
-> PointWithOrientableNormal_3 = a point + a normal oriented or not.
The purpose is to save memory space and to better document the requirements of algorithms processing normals.
- Added warnings about remove_outliers_wrt_avg_knn_sq_distance_3(), remove_outliers_wrt_camera_cone_angle_3(), merge_epsilon_nearest_points_3(), random_simplification_points_3() and smooth_jet_fitting_3() which are not compatible with containers sorted wrt points position.
Integrated point set simplification by clustering.
Implemented random point set simplification.
Implemented variant mutating the point set for point set simplification and outliers removal algorithms.
MFC demo:
Point set simplification and outliers removal algorithms select now the points to delete, instead of deleting them directly. This gives a chance to adjust the parameters before deletion.
2 new menu items related: "Delete selection" and "Reset selection".
Normals orientation algorithms select now flipped normals.
Fixed bug in merge_epsilon_nearest_points_3().
- The Surface_mesher distance parameter is set to 0.005 for APSS (0.002 for Poisson). Both values are editable in the Options dialog.
- Removed the "APPS projection error" field in the Options dialog (unused).
- APSS kd-tree contains Point_with_normal_3 points instead of Gyroviz_point_3 objects (faster copy constructor).
- The number of neighbors is 7 by default (was 10).
- APSS caches the previous nearest neighbor to speed up the isValid() method (test if close to surface).
- If point is far from surface, APSS computes only the nearest neighbor (used to compute twice K nearest neighbors).
- added Implicit_fct_delaunay_triangulation_3::input_points_bounding_box() (resp. sphere)
- these methods are called by Poisson_implicit_function::bounding_box() (resp. sphere), which are now accurate
- no need anymore to divide by 2 the bounding sphere radius (which cashed the Surface Mesher)
Fixed bug in bounding sphere computation.
Deleted ApssOracle.
Renamed class APSS as APSS_implicit_function.
Code cleaning: store normals in Vector_3 objects instead of Point_3.
- PoissonDoc methods have better names
- Removed code related to Gyroviz from Poisson_dt3
- Fixed compilation error on poisson_reconstruction_test.cpp
Updated concepts.
UI:
- updated the toolbar
- added menu item "1-step Poisson reconstruction"
- improved code that enables/disables menu items
- m_points[] array of points + normals.
- the m_poisson_dt 3D triangulation used by the m_poisson_function implicit function.
Only 1 form is visible on screen and editable at a given time. This is controlled by m_edit_mode.
A new class Point_set_3 represents an array of points + normals of type PointWithNormal_3 (in fact Gyroviz_point_3 to support algorithms specific to Gyroviz). It provides accessors (points and normals iterators, property maps), OpenGL rendering and bounding box.
File >> Open fills the point_set.
Algorithms menu is split into:
- Processing menu which modifies a point,
- Reconstruction >> Poisson sub-menu which converts the point set to a triangulation 3 and then solves the Poisson equation over it.