Commit Graph

32 Commits

Author SHA1 Message Date
Laurent Saboret df58e7c4f8 New normals orientation method:
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.
2008-10-28 08:41:41 +00:00
Laurent Saboret f75a9f002b Memory optimization:
- 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.
2008-10-17 09:57:17 +00:00
Laurent Saboret 824c080451 Port to g++ 4.1.2 2008-10-13 12:10:14 +00:00
Laurent Saboret 48f9fe1954 ReconstructionImplicitFunction models must be lightweight and stateless. 2008-10-13 11:50:45 +00:00
Laurent Saboret 84343e9486 - Added Peak_memory_sizer::largest_free_block() memory statistics.
- Taucs_solver is now parameterized by the number type used internally by TAUCS.
2008-10-09 11:03:14 +00:00
Laurent Saboret 2ecdcd3256 Added duration and memory statistics. 2008-10-08 12:38:18 +00:00
Laurent Saboret f90fa90e3e Port to g++ 4.1.2 2008-10-06 15:59:17 +00:00
Laurent Saboret 2c48c2cedd - The MFC demo exports now manifold surfaces as .off (although the orientation is random).
- 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().
2008-10-03 14:43:40 +00:00
Laurent Saboret 7cba4b3f28 Fixed declaration of templated methods 2008-09-30 14:32:45 +00:00
Laurent Saboret 4abcbea669 - For clarity: renamed OrientedNormal_3/Oriented_normal_3 as OrientableNormal_3/Orientable_normal_3 = a normal vector oriented or not.
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.
2008-09-30 09:57:24 +00:00
Laurent Saboret 59906eeb79 - Fixed bug in in-place version of remove_outliers_wrt_camera_cone_angle_3() related to Gyroviz_point_3 copy constructor.
- 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.
2008-09-29 14:13:21 +00:00
Laurent Saboret ccf81d34ec Delaunay refinement for Poisson is moved from Poisson_implicit_function class to new poisson_refinement_3() function.
poisson_refinement_3() is implemented with mesher levels. See Mesh_3 package.
2008-09-09 12:50:17 +00:00
Laurent Saboret 8f1e17abcf Added CGAL_TRACE_STREAM object (== cerr if DEBUG_TRACE is defined, else nothing) 2008-08-28 13:48:50 +00:00
Laurent Saboret 159964b8fc Added traces 2008-08-28 13:09:53 +00:00
Laurent Saboret 382f4df403 Package:
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().
2008-07-08 15:01:10 +00:00
Laurent Saboret f944600045 Huge APSS optimization (times are divided by 3 for the command line test and by 7 for the MFC demo) after profiling with AQtime:
- 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).
2008-07-04 14:56:20 +00:00
Laurent Saboret 0e00923b78 Port to g++ 2008-07-01 16:48:23 +00:00
Amit Gupta bc0ff05088 Added data-fitting term and normalization of divergence in the poisson surface reconstruction. 2008-07-01 13:09:35 +00:00
Laurent Saboret 49964c07f9 Fixed crashing bug (or infinite loop) when Poisson reconstructs polygirl model:
- 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)
2008-06-04 13:20:49 +00:00
Laurent Saboret eca8d0e22c Added "APSS mode" icon to toolbar 2008-06-02 12:31:46 +00:00
Laurent Saboret b8fb79a876 Port to gcc 4.3.0 2008-06-02 11:42:35 +00:00
Laurent Saboret daa45ce124 APSS is integrated in MFC demo. 2008-05-29 17:02:20 +00:00
Laurent Saboret c9589121a1 Fixed infinite loop in APSS by replacing ApssOracle par the default class Implicit_surface_oracle_3.
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.
2008-05-28 12:46:27 +00:00
Pierre Alliez d037064719 PCA: add one more test
Reconstruction: attempt to suppress a warning
2008-04-30 19:30:14 +00:00
Laurent Saboret 99baf24a78 Code cleaning:
- 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
2008-04-29 16:24:21 +00:00
Laurent Saboret 0df22bb093 Edited points exist now under 2 forms in CPoissonDoc:
- 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.
2008-04-29 10:57:58 +00:00
Laurent Saboret f6e9627800 Minor changes (mostly replaced tabs by spaces). 2008-04-24 12:18:12 +00:00
Sylvain Pion 8e30faabcb Remove PCA_dimension_0_tag() from call to centroid() 2008-04-16 15:27:08 +00:00
Laurent Saboret 2c7100ff65 Removed obsolete code 2008-04-11 16:06:05 +00:00
Laurent Saboret 4957487b7f Implemented normals orientation algorithm described in "Surface reconstruction from unorganized points" (Hoppe92) using a Minimum Spanning Tree. 2008-04-10 18:25:48 +00:00
Laurent Saboret 3cdb4f859b Fixed crash if NDEBUG is defined 2008-03-28 10:34:29 +00:00
Laurent Saboret d98393b710 Moved Surface_reconstruction_3 package to trunk 2008-03-21 16:13:19 +00:00