diff options
327 files changed, 895 insertions, 595 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 4596f3da..b58eadb3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,14 +32,14 @@ endif() find_package(CGAL) # Required programs for unitary tests purpose -FIND_PROGRAM( LCOV_PATH lcov ) -if (LCOV_PATH) - message("lcov found in ${LCOV_PATH}") +FIND_PROGRAM( GCOVR_PATH gcovr ) +if (GCOVR_PATH) + message("gcovr found in ${GCOVR_PATH}") endif() - -FIND_PROGRAM( PYTHON_PATH python ) -if (PYTHON_PATH) - message("python found in ${PYTHON_PATH}") +# Required programs for unitary tests purpose +FIND_PROGRAM( GPROF_PATH gprof ) +if (GPROF_PATH) + message("gprof found in ${GPROF_PATH}") endif() FIND_PROGRAM( DIFF_PATH diff ) @@ -47,18 +47,6 @@ if (DIFF_PATH) message("diff found in ${DIFF_PATH}") endif() -# Function to add_test cpplint on each header file of the Gudhi module -function(cpplint_add_tests the_directory) - if (PYTHON_PATH) - # Cpplint tests on coding style - file(GLOB files "${the_directory}/*.h" "${the_directory}/*/*.h") - foreach(filename ${files}) - message(${filename}) - add_test("${filename}.cpplint" ${CMAKE_SOURCE_DIR}/scripts/check_google_style.sh ${filename} ${CMAKE_SOURCE_DIR}/scripts/cpplint.py) - endforeach() - endif() -endfunction(cpplint_add_tests) - if(NOT Boost_FOUND) message(FATAL_ERROR "NOTICE: This demo requires Boost and will not be compiled.") @@ -97,6 +85,9 @@ else() add_subdirectory(src/Bottleneck/example) add_subdirectory(src/Bottleneck/test) + # GudhUI + add_subdirectory(src/GudhUI) + # data points generator add_subdirectory(data/points/generator) diff --git a/data/points/COIL_database/asian_mug.off b/data/points/COIL_database/asian_mug.off index f6a9a972..f6a9a972 100755..100644 --- a/data/points/COIL_database/asian_mug.off +++ b/data/points/COIL_database/asian_mug.off diff --git a/data/points/COIL_database/images/asian mug/obj12__0.png b/data/points/COIL_database/images/asian mug/obj12__0.png Binary files differindex 6660990f..6660990f 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__0.png +++ b/data/points/COIL_database/images/asian mug/obj12__0.png diff --git a/data/points/COIL_database/images/asian mug/obj12__1.png b/data/points/COIL_database/images/asian mug/obj12__1.png Binary files differindex 41791863..41791863 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__1.png +++ b/data/points/COIL_database/images/asian mug/obj12__1.png diff --git a/data/points/COIL_database/images/asian mug/obj12__10.png b/data/points/COIL_database/images/asian mug/obj12__10.png Binary files differindex 031373fb..031373fb 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__10.png +++ b/data/points/COIL_database/images/asian mug/obj12__10.png diff --git a/data/points/COIL_database/images/asian mug/obj12__11.png b/data/points/COIL_database/images/asian mug/obj12__11.png Binary files differindex 37d14235..37d14235 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__11.png +++ b/data/points/COIL_database/images/asian mug/obj12__11.png diff --git a/data/points/COIL_database/images/asian mug/obj12__12.png b/data/points/COIL_database/images/asian mug/obj12__12.png Binary files differindex 8899ef20..8899ef20 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__12.png +++ b/data/points/COIL_database/images/asian mug/obj12__12.png diff --git a/data/points/COIL_database/images/asian mug/obj12__13.png b/data/points/COIL_database/images/asian mug/obj12__13.png Binary files differindex 98e8bfb5..98e8bfb5 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__13.png +++ b/data/points/COIL_database/images/asian mug/obj12__13.png diff --git a/data/points/COIL_database/images/asian mug/obj12__14.png b/data/points/COIL_database/images/asian mug/obj12__14.png Binary files differindex f95b07f9..f95b07f9 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__14.png +++ b/data/points/COIL_database/images/asian mug/obj12__14.png diff --git a/data/points/COIL_database/images/asian mug/obj12__15.png b/data/points/COIL_database/images/asian mug/obj12__15.png Binary files differindex fc644f9d..fc644f9d 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__15.png +++ b/data/points/COIL_database/images/asian mug/obj12__15.png diff --git a/data/points/COIL_database/images/asian mug/obj12__16.png b/data/points/COIL_database/images/asian mug/obj12__16.png Binary files differindex 40974226..40974226 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__16.png +++ b/data/points/COIL_database/images/asian mug/obj12__16.png diff --git a/data/points/COIL_database/images/asian mug/obj12__17.png b/data/points/COIL_database/images/asian mug/obj12__17.png Binary files differindex 0bca0fe2..0bca0fe2 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__17.png +++ b/data/points/COIL_database/images/asian mug/obj12__17.png diff --git a/data/points/COIL_database/images/asian mug/obj12__18.png b/data/points/COIL_database/images/asian mug/obj12__18.png Binary files differindex 67257fc3..67257fc3 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__18.png +++ b/data/points/COIL_database/images/asian mug/obj12__18.png diff --git a/data/points/COIL_database/images/asian mug/obj12__19.png b/data/points/COIL_database/images/asian mug/obj12__19.png Binary files differindex 3254e9de..3254e9de 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__19.png +++ b/data/points/COIL_database/images/asian mug/obj12__19.png diff --git a/data/points/COIL_database/images/asian mug/obj12__2.png b/data/points/COIL_database/images/asian mug/obj12__2.png Binary files differindex e8a21605..e8a21605 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__2.png +++ b/data/points/COIL_database/images/asian mug/obj12__2.png diff --git a/data/points/COIL_database/images/asian mug/obj12__20.png b/data/points/COIL_database/images/asian mug/obj12__20.png Binary files differindex f306dc46..f306dc46 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__20.png +++ b/data/points/COIL_database/images/asian mug/obj12__20.png diff --git a/data/points/COIL_database/images/asian mug/obj12__21.png b/data/points/COIL_database/images/asian mug/obj12__21.png Binary files differindex 27c3b6fb..27c3b6fb 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__21.png +++ b/data/points/COIL_database/images/asian mug/obj12__21.png diff --git a/data/points/COIL_database/images/asian mug/obj12__22.png b/data/points/COIL_database/images/asian mug/obj12__22.png Binary files differindex 0707b03c..0707b03c 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__22.png +++ b/data/points/COIL_database/images/asian mug/obj12__22.png diff --git a/data/points/COIL_database/images/asian mug/obj12__23.png b/data/points/COIL_database/images/asian mug/obj12__23.png Binary files differindex bb57fff5..bb57fff5 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__23.png +++ b/data/points/COIL_database/images/asian mug/obj12__23.png diff --git a/data/points/COIL_database/images/asian mug/obj12__24.png b/data/points/COIL_database/images/asian mug/obj12__24.png Binary files differindex 64f2d0dd..64f2d0dd 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__24.png +++ b/data/points/COIL_database/images/asian mug/obj12__24.png diff --git a/data/points/COIL_database/images/asian mug/obj12__25.png b/data/points/COIL_database/images/asian mug/obj12__25.png Binary files differindex 0354f980..0354f980 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__25.png +++ b/data/points/COIL_database/images/asian mug/obj12__25.png diff --git a/data/points/COIL_database/images/asian mug/obj12__26.png b/data/points/COIL_database/images/asian mug/obj12__26.png Binary files differindex 761e8de0..761e8de0 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__26.png +++ b/data/points/COIL_database/images/asian mug/obj12__26.png diff --git a/data/points/COIL_database/images/asian mug/obj12__27.png b/data/points/COIL_database/images/asian mug/obj12__27.png Binary files differindex f949d666..f949d666 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__27.png +++ b/data/points/COIL_database/images/asian mug/obj12__27.png diff --git a/data/points/COIL_database/images/asian mug/obj12__28.png b/data/points/COIL_database/images/asian mug/obj12__28.png Binary files differindex 07e10afa..07e10afa 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__28.png +++ b/data/points/COIL_database/images/asian mug/obj12__28.png diff --git a/data/points/COIL_database/images/asian mug/obj12__29.png b/data/points/COIL_database/images/asian mug/obj12__29.png Binary files differindex 0e776c4d..0e776c4d 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__29.png +++ b/data/points/COIL_database/images/asian mug/obj12__29.png diff --git a/data/points/COIL_database/images/asian mug/obj12__3.png b/data/points/COIL_database/images/asian mug/obj12__3.png Binary files differindex ae63aaf8..ae63aaf8 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__3.png +++ b/data/points/COIL_database/images/asian mug/obj12__3.png diff --git a/data/points/COIL_database/images/asian mug/obj12__30.png b/data/points/COIL_database/images/asian mug/obj12__30.png Binary files differindex b204e0d4..b204e0d4 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__30.png +++ b/data/points/COIL_database/images/asian mug/obj12__30.png diff --git a/data/points/COIL_database/images/asian mug/obj12__31.png b/data/points/COIL_database/images/asian mug/obj12__31.png Binary files differindex 4bbe8c9b..4bbe8c9b 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__31.png +++ b/data/points/COIL_database/images/asian mug/obj12__31.png diff --git a/data/points/COIL_database/images/asian mug/obj12__32.png b/data/points/COIL_database/images/asian mug/obj12__32.png Binary files differindex 050c77bb..050c77bb 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__32.png +++ b/data/points/COIL_database/images/asian mug/obj12__32.png diff --git a/data/points/COIL_database/images/asian mug/obj12__33.png b/data/points/COIL_database/images/asian mug/obj12__33.png Binary files differindex 34b3ca96..34b3ca96 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__33.png +++ b/data/points/COIL_database/images/asian mug/obj12__33.png diff --git a/data/points/COIL_database/images/asian mug/obj12__34.png b/data/points/COIL_database/images/asian mug/obj12__34.png Binary files differindex 73d49afe..73d49afe 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__34.png +++ b/data/points/COIL_database/images/asian mug/obj12__34.png diff --git a/data/points/COIL_database/images/asian mug/obj12__35.png b/data/points/COIL_database/images/asian mug/obj12__35.png Binary files differindex 7907a57a..7907a57a 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__35.png +++ b/data/points/COIL_database/images/asian mug/obj12__35.png diff --git a/data/points/COIL_database/images/asian mug/obj12__36.png b/data/points/COIL_database/images/asian mug/obj12__36.png Binary files differindex 7274dd5d..7274dd5d 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__36.png +++ b/data/points/COIL_database/images/asian mug/obj12__36.png diff --git a/data/points/COIL_database/images/asian mug/obj12__37.png b/data/points/COIL_database/images/asian mug/obj12__37.png Binary files differindex 5520913e..5520913e 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__37.png +++ b/data/points/COIL_database/images/asian mug/obj12__37.png diff --git a/data/points/COIL_database/images/asian mug/obj12__38.png b/data/points/COIL_database/images/asian mug/obj12__38.png Binary files differindex 791eafab..791eafab 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__38.png +++ b/data/points/COIL_database/images/asian mug/obj12__38.png diff --git a/data/points/COIL_database/images/asian mug/obj12__39.png b/data/points/COIL_database/images/asian mug/obj12__39.png Binary files differindex 770c4941..770c4941 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__39.png +++ b/data/points/COIL_database/images/asian mug/obj12__39.png diff --git a/data/points/COIL_database/images/asian mug/obj12__4.png b/data/points/COIL_database/images/asian mug/obj12__4.png Binary files differindex 46b66f9e..46b66f9e 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__4.png +++ b/data/points/COIL_database/images/asian mug/obj12__4.png diff --git a/data/points/COIL_database/images/asian mug/obj12__40.png b/data/points/COIL_database/images/asian mug/obj12__40.png Binary files differindex 9b667921..9b667921 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__40.png +++ b/data/points/COIL_database/images/asian mug/obj12__40.png diff --git a/data/points/COIL_database/images/asian mug/obj12__41.png b/data/points/COIL_database/images/asian mug/obj12__41.png Binary files differindex 83adef3c..83adef3c 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__41.png +++ b/data/points/COIL_database/images/asian mug/obj12__41.png diff --git a/data/points/COIL_database/images/asian mug/obj12__42.png b/data/points/COIL_database/images/asian mug/obj12__42.png Binary files differindex 35229086..35229086 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__42.png +++ b/data/points/COIL_database/images/asian mug/obj12__42.png diff --git a/data/points/COIL_database/images/asian mug/obj12__43.png b/data/points/COIL_database/images/asian mug/obj12__43.png Binary files differindex 74b32497..74b32497 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__43.png +++ b/data/points/COIL_database/images/asian mug/obj12__43.png diff --git a/data/points/COIL_database/images/asian mug/obj12__44.png b/data/points/COIL_database/images/asian mug/obj12__44.png Binary files differindex b9b10f6f..b9b10f6f 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__44.png +++ b/data/points/COIL_database/images/asian mug/obj12__44.png diff --git a/data/points/COIL_database/images/asian mug/obj12__45.png b/data/points/COIL_database/images/asian mug/obj12__45.png Binary files differindex a2ca620e..a2ca620e 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__45.png +++ b/data/points/COIL_database/images/asian mug/obj12__45.png diff --git a/data/points/COIL_database/images/asian mug/obj12__46.png b/data/points/COIL_database/images/asian mug/obj12__46.png Binary files differindex 11e2005b..11e2005b 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__46.png +++ b/data/points/COIL_database/images/asian mug/obj12__46.png diff --git a/data/points/COIL_database/images/asian mug/obj12__47.png b/data/points/COIL_database/images/asian mug/obj12__47.png Binary files differindex b7d0937a..b7d0937a 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__47.png +++ b/data/points/COIL_database/images/asian mug/obj12__47.png diff --git a/data/points/COIL_database/images/asian mug/obj12__48.png b/data/points/COIL_database/images/asian mug/obj12__48.png Binary files differindex 7bfc9f9e..7bfc9f9e 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__48.png +++ b/data/points/COIL_database/images/asian mug/obj12__48.png diff --git a/data/points/COIL_database/images/asian mug/obj12__49.png b/data/points/COIL_database/images/asian mug/obj12__49.png Binary files differindex 57fbc63b..57fbc63b 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__49.png +++ b/data/points/COIL_database/images/asian mug/obj12__49.png diff --git a/data/points/COIL_database/images/asian mug/obj12__5.png b/data/points/COIL_database/images/asian mug/obj12__5.png Binary files differindex 4737b6a9..4737b6a9 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__5.png +++ b/data/points/COIL_database/images/asian mug/obj12__5.png diff --git a/data/points/COIL_database/images/asian mug/obj12__50.png b/data/points/COIL_database/images/asian mug/obj12__50.png Binary files differindex 1bc9aa2a..1bc9aa2a 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__50.png +++ b/data/points/COIL_database/images/asian mug/obj12__50.png diff --git a/data/points/COIL_database/images/asian mug/obj12__51.png b/data/points/COIL_database/images/asian mug/obj12__51.png Binary files differindex 4c2a2824..4c2a2824 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__51.png +++ b/data/points/COIL_database/images/asian mug/obj12__51.png diff --git a/data/points/COIL_database/images/asian mug/obj12__52.png b/data/points/COIL_database/images/asian mug/obj12__52.png Binary files differindex e34aa96d..e34aa96d 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__52.png +++ b/data/points/COIL_database/images/asian mug/obj12__52.png diff --git a/data/points/COIL_database/images/asian mug/obj12__53.png b/data/points/COIL_database/images/asian mug/obj12__53.png Binary files differindex 969132e3..969132e3 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__53.png +++ b/data/points/COIL_database/images/asian mug/obj12__53.png diff --git a/data/points/COIL_database/images/asian mug/obj12__54.png b/data/points/COIL_database/images/asian mug/obj12__54.png Binary files differindex 7d03c9d3..7d03c9d3 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__54.png +++ b/data/points/COIL_database/images/asian mug/obj12__54.png diff --git a/data/points/COIL_database/images/asian mug/obj12__55.png b/data/points/COIL_database/images/asian mug/obj12__55.png Binary files differindex fb0bf92f..fb0bf92f 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__55.png +++ b/data/points/COIL_database/images/asian mug/obj12__55.png diff --git a/data/points/COIL_database/images/asian mug/obj12__56.png b/data/points/COIL_database/images/asian mug/obj12__56.png Binary files differindex eb6ea4eb..eb6ea4eb 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__56.png +++ b/data/points/COIL_database/images/asian mug/obj12__56.png diff --git a/data/points/COIL_database/images/asian mug/obj12__57.png b/data/points/COIL_database/images/asian mug/obj12__57.png Binary files differindex 87655e6a..87655e6a 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__57.png +++ b/data/points/COIL_database/images/asian mug/obj12__57.png diff --git a/data/points/COIL_database/images/asian mug/obj12__58.png b/data/points/COIL_database/images/asian mug/obj12__58.png Binary files differindex 7fbf2bda..7fbf2bda 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__58.png +++ b/data/points/COIL_database/images/asian mug/obj12__58.png diff --git a/data/points/COIL_database/images/asian mug/obj12__59.png b/data/points/COIL_database/images/asian mug/obj12__59.png Binary files differindex b7d87fb0..b7d87fb0 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__59.png +++ b/data/points/COIL_database/images/asian mug/obj12__59.png diff --git a/data/points/COIL_database/images/asian mug/obj12__6.png b/data/points/COIL_database/images/asian mug/obj12__6.png Binary files differindex c49f4462..c49f4462 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__6.png +++ b/data/points/COIL_database/images/asian mug/obj12__6.png diff --git a/data/points/COIL_database/images/asian mug/obj12__60.png b/data/points/COIL_database/images/asian mug/obj12__60.png Binary files differindex 68188277..68188277 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__60.png +++ b/data/points/COIL_database/images/asian mug/obj12__60.png diff --git a/data/points/COIL_database/images/asian mug/obj12__61.png b/data/points/COIL_database/images/asian mug/obj12__61.png Binary files differindex ff308aef..ff308aef 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__61.png +++ b/data/points/COIL_database/images/asian mug/obj12__61.png diff --git a/data/points/COIL_database/images/asian mug/obj12__62.png b/data/points/COIL_database/images/asian mug/obj12__62.png Binary files differindex 184b1f06..184b1f06 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__62.png +++ b/data/points/COIL_database/images/asian mug/obj12__62.png diff --git a/data/points/COIL_database/images/asian mug/obj12__63.png b/data/points/COIL_database/images/asian mug/obj12__63.png Binary files differindex 78742130..78742130 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__63.png +++ b/data/points/COIL_database/images/asian mug/obj12__63.png diff --git a/data/points/COIL_database/images/asian mug/obj12__64.png b/data/points/COIL_database/images/asian mug/obj12__64.png Binary files differindex 0e2178c3..0e2178c3 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__64.png +++ b/data/points/COIL_database/images/asian mug/obj12__64.png diff --git a/data/points/COIL_database/images/asian mug/obj12__65.png b/data/points/COIL_database/images/asian mug/obj12__65.png Binary files differindex 78a4baed..78a4baed 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__65.png +++ b/data/points/COIL_database/images/asian mug/obj12__65.png diff --git a/data/points/COIL_database/images/asian mug/obj12__66.png b/data/points/COIL_database/images/asian mug/obj12__66.png Binary files differindex 0ac96479..0ac96479 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__66.png +++ b/data/points/COIL_database/images/asian mug/obj12__66.png diff --git a/data/points/COIL_database/images/asian mug/obj12__67.png b/data/points/COIL_database/images/asian mug/obj12__67.png Binary files differindex a3a0ea03..a3a0ea03 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__67.png +++ b/data/points/COIL_database/images/asian mug/obj12__67.png diff --git a/data/points/COIL_database/images/asian mug/obj12__68.png b/data/points/COIL_database/images/asian mug/obj12__68.png Binary files differindex 9d26c431..9d26c431 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__68.png +++ b/data/points/COIL_database/images/asian mug/obj12__68.png diff --git a/data/points/COIL_database/images/asian mug/obj12__69.png b/data/points/COIL_database/images/asian mug/obj12__69.png Binary files differindex dd97b204..dd97b204 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__69.png +++ b/data/points/COIL_database/images/asian mug/obj12__69.png diff --git a/data/points/COIL_database/images/asian mug/obj12__7.png b/data/points/COIL_database/images/asian mug/obj12__7.png Binary files differindex 0c01e6d5..0c01e6d5 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__7.png +++ b/data/points/COIL_database/images/asian mug/obj12__7.png diff --git a/data/points/COIL_database/images/asian mug/obj12__70.png b/data/points/COIL_database/images/asian mug/obj12__70.png Binary files differindex a791d36a..a791d36a 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__70.png +++ b/data/points/COIL_database/images/asian mug/obj12__70.png diff --git a/data/points/COIL_database/images/asian mug/obj12__71.png b/data/points/COIL_database/images/asian mug/obj12__71.png Binary files differindex 739cc06b..739cc06b 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__71.png +++ b/data/points/COIL_database/images/asian mug/obj12__71.png diff --git a/data/points/COIL_database/images/asian mug/obj12__8.png b/data/points/COIL_database/images/asian mug/obj12__8.png Binary files differindex 02d721b4..02d721b4 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__8.png +++ b/data/points/COIL_database/images/asian mug/obj12__8.png diff --git a/data/points/COIL_database/images/asian mug/obj12__9.png b/data/points/COIL_database/images/asian mug/obj12__9.png Binary files differindex d54ea9ff..d54ea9ff 100755..100644 --- a/data/points/COIL_database/images/asian mug/obj12__9.png +++ b/data/points/COIL_database/images/asian mug/obj12__9.png diff --git a/data/points/COIL_database/images/little car/obj3__0.png b/data/points/COIL_database/images/little car/obj3__0.png Binary files differindex c0e60889..c0e60889 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__0.png +++ b/data/points/COIL_database/images/little car/obj3__0.png diff --git a/data/points/COIL_database/images/little car/obj3__1.png b/data/points/COIL_database/images/little car/obj3__1.png Binary files differindex 0addb36b..0addb36b 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__1.png +++ b/data/points/COIL_database/images/little car/obj3__1.png diff --git a/data/points/COIL_database/images/little car/obj3__10.png b/data/points/COIL_database/images/little car/obj3__10.png Binary files differindex 357362de..357362de 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__10.png +++ b/data/points/COIL_database/images/little car/obj3__10.png diff --git a/data/points/COIL_database/images/little car/obj3__11.png b/data/points/COIL_database/images/little car/obj3__11.png Binary files differindex 701588cd..701588cd 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__11.png +++ b/data/points/COIL_database/images/little car/obj3__11.png diff --git a/data/points/COIL_database/images/little car/obj3__12.png b/data/points/COIL_database/images/little car/obj3__12.png Binary files differindex 14ac602a..14ac602a 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__12.png +++ b/data/points/COIL_database/images/little car/obj3__12.png diff --git a/data/points/COIL_database/images/little car/obj3__13.png b/data/points/COIL_database/images/little car/obj3__13.png Binary files differindex eb162414..eb162414 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__13.png +++ b/data/points/COIL_database/images/little car/obj3__13.png diff --git a/data/points/COIL_database/images/little car/obj3__14.png b/data/points/COIL_database/images/little car/obj3__14.png Binary files differindex 8df1d931..8df1d931 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__14.png +++ b/data/points/COIL_database/images/little car/obj3__14.png diff --git a/data/points/COIL_database/images/little car/obj3__15.png b/data/points/COIL_database/images/little car/obj3__15.png Binary files differindex a29ac360..a29ac360 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__15.png +++ b/data/points/COIL_database/images/little car/obj3__15.png diff --git a/data/points/COIL_database/images/little car/obj3__16.png b/data/points/COIL_database/images/little car/obj3__16.png Binary files differindex 12fda4e9..12fda4e9 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__16.png +++ b/data/points/COIL_database/images/little car/obj3__16.png diff --git a/data/points/COIL_database/images/little car/obj3__17.png b/data/points/COIL_database/images/little car/obj3__17.png Binary files differindex a8bfe2e1..a8bfe2e1 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__17.png +++ b/data/points/COIL_database/images/little car/obj3__17.png diff --git a/data/points/COIL_database/images/little car/obj3__18.png b/data/points/COIL_database/images/little car/obj3__18.png Binary files differindex 8a329194..8a329194 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__18.png +++ b/data/points/COIL_database/images/little car/obj3__18.png diff --git a/data/points/COIL_database/images/little car/obj3__19.png b/data/points/COIL_database/images/little car/obj3__19.png Binary files differindex 591b2c9c..591b2c9c 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__19.png +++ b/data/points/COIL_database/images/little car/obj3__19.png diff --git a/data/points/COIL_database/images/little car/obj3__2.png b/data/points/COIL_database/images/little car/obj3__2.png Binary files differindex e9979aa8..e9979aa8 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__2.png +++ b/data/points/COIL_database/images/little car/obj3__2.png diff --git a/data/points/COIL_database/images/little car/obj3__20.png b/data/points/COIL_database/images/little car/obj3__20.png Binary files differindex 2b804725..2b804725 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__20.png +++ b/data/points/COIL_database/images/little car/obj3__20.png diff --git a/data/points/COIL_database/images/little car/obj3__21.png b/data/points/COIL_database/images/little car/obj3__21.png Binary files differindex d6d71cac..d6d71cac 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__21.png +++ b/data/points/COIL_database/images/little car/obj3__21.png diff --git a/data/points/COIL_database/images/little car/obj3__22.png b/data/points/COIL_database/images/little car/obj3__22.png Binary files differindex 40a6d707..40a6d707 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__22.png +++ b/data/points/COIL_database/images/little car/obj3__22.png diff --git a/data/points/COIL_database/images/little car/obj3__23.png b/data/points/COIL_database/images/little car/obj3__23.png Binary files differindex 8ef3acfc..8ef3acfc 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__23.png +++ b/data/points/COIL_database/images/little car/obj3__23.png diff --git a/data/points/COIL_database/images/little car/obj3__24.png b/data/points/COIL_database/images/little car/obj3__24.png Binary files differindex 0b2d2d36..0b2d2d36 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__24.png +++ b/data/points/COIL_database/images/little car/obj3__24.png diff --git a/data/points/COIL_database/images/little car/obj3__25.png b/data/points/COIL_database/images/little car/obj3__25.png Binary files differindex 6d40218f..6d40218f 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__25.png +++ b/data/points/COIL_database/images/little car/obj3__25.png diff --git a/data/points/COIL_database/images/little car/obj3__26.png b/data/points/COIL_database/images/little car/obj3__26.png Binary files differindex 2850d83b..2850d83b 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__26.png +++ b/data/points/COIL_database/images/little car/obj3__26.png diff --git a/data/points/COIL_database/images/little car/obj3__27.png b/data/points/COIL_database/images/little car/obj3__27.png Binary files differindex 9e0ab4b7..9e0ab4b7 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__27.png +++ b/data/points/COIL_database/images/little car/obj3__27.png diff --git a/data/points/COIL_database/images/little car/obj3__28.png b/data/points/COIL_database/images/little car/obj3__28.png Binary files differindex 2a9559c6..2a9559c6 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__28.png +++ b/data/points/COIL_database/images/little car/obj3__28.png diff --git a/data/points/COIL_database/images/little car/obj3__29.png b/data/points/COIL_database/images/little car/obj3__29.png Binary files differindex fc312951..fc312951 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__29.png +++ b/data/points/COIL_database/images/little car/obj3__29.png diff --git a/data/points/COIL_database/images/little car/obj3__3.png b/data/points/COIL_database/images/little car/obj3__3.png Binary files differindex d85dfcf3..d85dfcf3 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__3.png +++ b/data/points/COIL_database/images/little car/obj3__3.png diff --git a/data/points/COIL_database/images/little car/obj3__30.png b/data/points/COIL_database/images/little car/obj3__30.png Binary files differindex c898dada..c898dada 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__30.png +++ b/data/points/COIL_database/images/little car/obj3__30.png diff --git a/data/points/COIL_database/images/little car/obj3__31.png b/data/points/COIL_database/images/little car/obj3__31.png Binary files differindex 35596130..35596130 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__31.png +++ b/data/points/COIL_database/images/little car/obj3__31.png diff --git a/data/points/COIL_database/images/little car/obj3__32.png b/data/points/COIL_database/images/little car/obj3__32.png Binary files differindex 476990f0..476990f0 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__32.png +++ b/data/points/COIL_database/images/little car/obj3__32.png diff --git a/data/points/COIL_database/images/little car/obj3__33.png b/data/points/COIL_database/images/little car/obj3__33.png Binary files differindex 6e40c8ff..6e40c8ff 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__33.png +++ b/data/points/COIL_database/images/little car/obj3__33.png diff --git a/data/points/COIL_database/images/little car/obj3__34.png b/data/points/COIL_database/images/little car/obj3__34.png Binary files differindex 842fb9c8..842fb9c8 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__34.png +++ b/data/points/COIL_database/images/little car/obj3__34.png diff --git a/data/points/COIL_database/images/little car/obj3__35.png b/data/points/COIL_database/images/little car/obj3__35.png Binary files differindex 8eb2fefe..8eb2fefe 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__35.png +++ b/data/points/COIL_database/images/little car/obj3__35.png diff --git a/data/points/COIL_database/images/little car/obj3__36.png b/data/points/COIL_database/images/little car/obj3__36.png Binary files differindex c0fe2be6..c0fe2be6 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__36.png +++ b/data/points/COIL_database/images/little car/obj3__36.png diff --git a/data/points/COIL_database/images/little car/obj3__37.png b/data/points/COIL_database/images/little car/obj3__37.png Binary files differindex 8d36e234..8d36e234 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__37.png +++ b/data/points/COIL_database/images/little car/obj3__37.png diff --git a/data/points/COIL_database/images/little car/obj3__38.png b/data/points/COIL_database/images/little car/obj3__38.png Binary files differindex 5f3e18b3..5f3e18b3 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__38.png +++ b/data/points/COIL_database/images/little car/obj3__38.png diff --git a/data/points/COIL_database/images/little car/obj3__39.png b/data/points/COIL_database/images/little car/obj3__39.png Binary files differindex f37d7758..f37d7758 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__39.png +++ b/data/points/COIL_database/images/little car/obj3__39.png diff --git a/data/points/COIL_database/images/little car/obj3__4.png b/data/points/COIL_database/images/little car/obj3__4.png Binary files differindex db88ac72..db88ac72 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__4.png +++ b/data/points/COIL_database/images/little car/obj3__4.png diff --git a/data/points/COIL_database/images/little car/obj3__40.png b/data/points/COIL_database/images/little car/obj3__40.png Binary files differindex 027bf398..027bf398 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__40.png +++ b/data/points/COIL_database/images/little car/obj3__40.png diff --git a/data/points/COIL_database/images/little car/obj3__41.png b/data/points/COIL_database/images/little car/obj3__41.png Binary files differindex f5a8940c..f5a8940c 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__41.png +++ b/data/points/COIL_database/images/little car/obj3__41.png diff --git a/data/points/COIL_database/images/little car/obj3__42.png b/data/points/COIL_database/images/little car/obj3__42.png Binary files differindex de8d09e6..de8d09e6 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__42.png +++ b/data/points/COIL_database/images/little car/obj3__42.png diff --git a/data/points/COIL_database/images/little car/obj3__43.png b/data/points/COIL_database/images/little car/obj3__43.png Binary files differindex ddb4452a..ddb4452a 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__43.png +++ b/data/points/COIL_database/images/little car/obj3__43.png diff --git a/data/points/COIL_database/images/little car/obj3__44.png b/data/points/COIL_database/images/little car/obj3__44.png Binary files differindex 241b46ce..241b46ce 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__44.png +++ b/data/points/COIL_database/images/little car/obj3__44.png diff --git a/data/points/COIL_database/images/little car/obj3__45.png b/data/points/COIL_database/images/little car/obj3__45.png Binary files differindex 5ed91f2a..5ed91f2a 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__45.png +++ b/data/points/COIL_database/images/little car/obj3__45.png diff --git a/data/points/COIL_database/images/little car/obj3__46.png b/data/points/COIL_database/images/little car/obj3__46.png Binary files differindex 9194cad0..9194cad0 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__46.png +++ b/data/points/COIL_database/images/little car/obj3__46.png diff --git a/data/points/COIL_database/images/little car/obj3__47.png b/data/points/COIL_database/images/little car/obj3__47.png Binary files differindex 5a0a161f..5a0a161f 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__47.png +++ b/data/points/COIL_database/images/little car/obj3__47.png diff --git a/data/points/COIL_database/images/little car/obj3__48.png b/data/points/COIL_database/images/little car/obj3__48.png Binary files differindex 6adb25ad..6adb25ad 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__48.png +++ b/data/points/COIL_database/images/little car/obj3__48.png diff --git a/data/points/COIL_database/images/little car/obj3__49.png b/data/points/COIL_database/images/little car/obj3__49.png Binary files differindex e4ceda7f..e4ceda7f 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__49.png +++ b/data/points/COIL_database/images/little car/obj3__49.png diff --git a/data/points/COIL_database/images/little car/obj3__5.png b/data/points/COIL_database/images/little car/obj3__5.png Binary files differindex 61498fdd..61498fdd 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__5.png +++ b/data/points/COIL_database/images/little car/obj3__5.png diff --git a/data/points/COIL_database/images/little car/obj3__50.png b/data/points/COIL_database/images/little car/obj3__50.png Binary files differindex 802a85c9..802a85c9 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__50.png +++ b/data/points/COIL_database/images/little car/obj3__50.png diff --git a/data/points/COIL_database/images/little car/obj3__51.png b/data/points/COIL_database/images/little car/obj3__51.png Binary files differindex d55e1d14..d55e1d14 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__51.png +++ b/data/points/COIL_database/images/little car/obj3__51.png diff --git a/data/points/COIL_database/images/little car/obj3__52.png b/data/points/COIL_database/images/little car/obj3__52.png Binary files differindex db83bd8c..db83bd8c 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__52.png +++ b/data/points/COIL_database/images/little car/obj3__52.png diff --git a/data/points/COIL_database/images/little car/obj3__53.png b/data/points/COIL_database/images/little car/obj3__53.png Binary files differindex a5065832..a5065832 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__53.png +++ b/data/points/COIL_database/images/little car/obj3__53.png diff --git a/data/points/COIL_database/images/little car/obj3__54.png b/data/points/COIL_database/images/little car/obj3__54.png Binary files differindex 1845ebdb..1845ebdb 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__54.png +++ b/data/points/COIL_database/images/little car/obj3__54.png diff --git a/data/points/COIL_database/images/little car/obj3__55.png b/data/points/COIL_database/images/little car/obj3__55.png Binary files differindex c0db9bec..c0db9bec 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__55.png +++ b/data/points/COIL_database/images/little car/obj3__55.png diff --git a/data/points/COIL_database/images/little car/obj3__56.png b/data/points/COIL_database/images/little car/obj3__56.png Binary files differindex 6444a1f4..6444a1f4 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__56.png +++ b/data/points/COIL_database/images/little car/obj3__56.png diff --git a/data/points/COIL_database/images/little car/obj3__57.png b/data/points/COIL_database/images/little car/obj3__57.png Binary files differindex 1531d701..1531d701 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__57.png +++ b/data/points/COIL_database/images/little car/obj3__57.png diff --git a/data/points/COIL_database/images/little car/obj3__58.png b/data/points/COIL_database/images/little car/obj3__58.png Binary files differindex 23a21786..23a21786 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__58.png +++ b/data/points/COIL_database/images/little car/obj3__58.png diff --git a/data/points/COIL_database/images/little car/obj3__59.png b/data/points/COIL_database/images/little car/obj3__59.png Binary files differindex bf85b274..bf85b274 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__59.png +++ b/data/points/COIL_database/images/little car/obj3__59.png diff --git a/data/points/COIL_database/images/little car/obj3__6.png b/data/points/COIL_database/images/little car/obj3__6.png Binary files differindex fb1b79e5..fb1b79e5 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__6.png +++ b/data/points/COIL_database/images/little car/obj3__6.png diff --git a/data/points/COIL_database/images/little car/obj3__60.png b/data/points/COIL_database/images/little car/obj3__60.png Binary files differindex a3ca1beb..a3ca1beb 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__60.png +++ b/data/points/COIL_database/images/little car/obj3__60.png diff --git a/data/points/COIL_database/images/little car/obj3__61.png b/data/points/COIL_database/images/little car/obj3__61.png Binary files differindex c76ef420..c76ef420 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__61.png +++ b/data/points/COIL_database/images/little car/obj3__61.png diff --git a/data/points/COIL_database/images/little car/obj3__62.png b/data/points/COIL_database/images/little car/obj3__62.png Binary files differindex 6d620f20..6d620f20 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__62.png +++ b/data/points/COIL_database/images/little car/obj3__62.png diff --git a/data/points/COIL_database/images/little car/obj3__63.png b/data/points/COIL_database/images/little car/obj3__63.png Binary files differindex 3ea0e4d8..3ea0e4d8 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__63.png +++ b/data/points/COIL_database/images/little car/obj3__63.png diff --git a/data/points/COIL_database/images/little car/obj3__64.png b/data/points/COIL_database/images/little car/obj3__64.png Binary files differindex eead8dfa..eead8dfa 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__64.png +++ b/data/points/COIL_database/images/little car/obj3__64.png diff --git a/data/points/COIL_database/images/little car/obj3__65.png b/data/points/COIL_database/images/little car/obj3__65.png Binary files differindex 3476cbc6..3476cbc6 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__65.png +++ b/data/points/COIL_database/images/little car/obj3__65.png diff --git a/data/points/COIL_database/images/little car/obj3__66.png b/data/points/COIL_database/images/little car/obj3__66.png Binary files differindex d4d02eee..d4d02eee 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__66.png +++ b/data/points/COIL_database/images/little car/obj3__66.png diff --git a/data/points/COIL_database/images/little car/obj3__67.png b/data/points/COIL_database/images/little car/obj3__67.png Binary files differindex d6f6390e..d6f6390e 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__67.png +++ b/data/points/COIL_database/images/little car/obj3__67.png diff --git a/data/points/COIL_database/images/little car/obj3__68.png b/data/points/COIL_database/images/little car/obj3__68.png Binary files differindex f14fe4f1..f14fe4f1 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__68.png +++ b/data/points/COIL_database/images/little car/obj3__68.png diff --git a/data/points/COIL_database/images/little car/obj3__69.png b/data/points/COIL_database/images/little car/obj3__69.png Binary files differindex 0cb85f63..0cb85f63 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__69.png +++ b/data/points/COIL_database/images/little car/obj3__69.png diff --git a/data/points/COIL_database/images/little car/obj3__7.png b/data/points/COIL_database/images/little car/obj3__7.png Binary files differindex 8630ad07..8630ad07 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__7.png +++ b/data/points/COIL_database/images/little car/obj3__7.png diff --git a/data/points/COIL_database/images/little car/obj3__70.png b/data/points/COIL_database/images/little car/obj3__70.png Binary files differindex a9d4b268..a9d4b268 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__70.png +++ b/data/points/COIL_database/images/little car/obj3__70.png diff --git a/data/points/COIL_database/images/little car/obj3__71.png b/data/points/COIL_database/images/little car/obj3__71.png Binary files differindex 108d8d1b..108d8d1b 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__71.png +++ b/data/points/COIL_database/images/little car/obj3__71.png diff --git a/data/points/COIL_database/images/little car/obj3__8.png b/data/points/COIL_database/images/little car/obj3__8.png Binary files differindex 86857d5e..86857d5e 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__8.png +++ b/data/points/COIL_database/images/little car/obj3__8.png diff --git a/data/points/COIL_database/images/little car/obj3__9.png b/data/points/COIL_database/images/little car/obj3__9.png Binary files differindex a71aaddb..a71aaddb 100755..100644 --- a/data/points/COIL_database/images/little car/obj3__9.png +++ b/data/points/COIL_database/images/little car/obj3__9.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__0.png b/data/points/COIL_database/images/lucky cat/obj4__0.png Binary files differindex ff874d3e..ff874d3e 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__0.png +++ b/data/points/COIL_database/images/lucky cat/obj4__0.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__1.png b/data/points/COIL_database/images/lucky cat/obj4__1.png Binary files differindex 5eca4e00..5eca4e00 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__1.png +++ b/data/points/COIL_database/images/lucky cat/obj4__1.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__10.png b/data/points/COIL_database/images/lucky cat/obj4__10.png Binary files differindex d1495175..d1495175 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__10.png +++ b/data/points/COIL_database/images/lucky cat/obj4__10.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__11.png b/data/points/COIL_database/images/lucky cat/obj4__11.png Binary files differindex e061610d..e061610d 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__11.png +++ b/data/points/COIL_database/images/lucky cat/obj4__11.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__12.png b/data/points/COIL_database/images/lucky cat/obj4__12.png Binary files differindex 4394d9c4..4394d9c4 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__12.png +++ b/data/points/COIL_database/images/lucky cat/obj4__12.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__13.png b/data/points/COIL_database/images/lucky cat/obj4__13.png Binary files differindex 7ca2c89c..7ca2c89c 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__13.png +++ b/data/points/COIL_database/images/lucky cat/obj4__13.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__14.png b/data/points/COIL_database/images/lucky cat/obj4__14.png Binary files differindex 1c4fae8b..1c4fae8b 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__14.png +++ b/data/points/COIL_database/images/lucky cat/obj4__14.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__15.png b/data/points/COIL_database/images/lucky cat/obj4__15.png Binary files differindex a8c1f13f..a8c1f13f 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__15.png +++ b/data/points/COIL_database/images/lucky cat/obj4__15.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__16.png b/data/points/COIL_database/images/lucky cat/obj4__16.png Binary files differindex 7ddaa507..7ddaa507 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__16.png +++ b/data/points/COIL_database/images/lucky cat/obj4__16.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__17.png b/data/points/COIL_database/images/lucky cat/obj4__17.png Binary files differindex 417a62fe..417a62fe 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__17.png +++ b/data/points/COIL_database/images/lucky cat/obj4__17.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__18.png b/data/points/COIL_database/images/lucky cat/obj4__18.png Binary files differindex 7af8ef0c..7af8ef0c 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__18.png +++ b/data/points/COIL_database/images/lucky cat/obj4__18.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__19.png b/data/points/COIL_database/images/lucky cat/obj4__19.png Binary files differindex efe4e992..efe4e992 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__19.png +++ b/data/points/COIL_database/images/lucky cat/obj4__19.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__2.png b/data/points/COIL_database/images/lucky cat/obj4__2.png Binary files differindex 6148787f..6148787f 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__2.png +++ b/data/points/COIL_database/images/lucky cat/obj4__2.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__20.png b/data/points/COIL_database/images/lucky cat/obj4__20.png Binary files differindex edd9f2c9..edd9f2c9 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__20.png +++ b/data/points/COIL_database/images/lucky cat/obj4__20.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__21.png b/data/points/COIL_database/images/lucky cat/obj4__21.png Binary files differindex 93c0447d..93c0447d 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__21.png +++ b/data/points/COIL_database/images/lucky cat/obj4__21.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__22.png b/data/points/COIL_database/images/lucky cat/obj4__22.png Binary files differindex c3836121..c3836121 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__22.png +++ b/data/points/COIL_database/images/lucky cat/obj4__22.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__23.png b/data/points/COIL_database/images/lucky cat/obj4__23.png Binary files differindex de488bb4..de488bb4 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__23.png +++ b/data/points/COIL_database/images/lucky cat/obj4__23.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__24.png b/data/points/COIL_database/images/lucky cat/obj4__24.png Binary files differindex 585878c6..585878c6 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__24.png +++ b/data/points/COIL_database/images/lucky cat/obj4__24.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__25.png b/data/points/COIL_database/images/lucky cat/obj4__25.png Binary files differindex 7dbc21be..7dbc21be 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__25.png +++ b/data/points/COIL_database/images/lucky cat/obj4__25.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__26.png b/data/points/COIL_database/images/lucky cat/obj4__26.png Binary files differindex 03da4c47..03da4c47 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__26.png +++ b/data/points/COIL_database/images/lucky cat/obj4__26.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__27.png b/data/points/COIL_database/images/lucky cat/obj4__27.png Binary files differindex d57e6e3e..d57e6e3e 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__27.png +++ b/data/points/COIL_database/images/lucky cat/obj4__27.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__28.png b/data/points/COIL_database/images/lucky cat/obj4__28.png Binary files differindex aedb06bb..aedb06bb 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__28.png +++ b/data/points/COIL_database/images/lucky cat/obj4__28.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__29.png b/data/points/COIL_database/images/lucky cat/obj4__29.png Binary files differindex 0db062ec..0db062ec 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__29.png +++ b/data/points/COIL_database/images/lucky cat/obj4__29.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__3.png b/data/points/COIL_database/images/lucky cat/obj4__3.png Binary files differindex 6797caae..6797caae 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__3.png +++ b/data/points/COIL_database/images/lucky cat/obj4__3.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__30.png b/data/points/COIL_database/images/lucky cat/obj4__30.png Binary files differindex dd498573..dd498573 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__30.png +++ b/data/points/COIL_database/images/lucky cat/obj4__30.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__31.png b/data/points/COIL_database/images/lucky cat/obj4__31.png Binary files differindex 87df2769..87df2769 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__31.png +++ b/data/points/COIL_database/images/lucky cat/obj4__31.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__32.png b/data/points/COIL_database/images/lucky cat/obj4__32.png Binary files differindex 94af5ef3..94af5ef3 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__32.png +++ b/data/points/COIL_database/images/lucky cat/obj4__32.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__33.png b/data/points/COIL_database/images/lucky cat/obj4__33.png Binary files differindex 239581d5..239581d5 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__33.png +++ b/data/points/COIL_database/images/lucky cat/obj4__33.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__34.png b/data/points/COIL_database/images/lucky cat/obj4__34.png Binary files differindex 4ca299ee..4ca299ee 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__34.png +++ b/data/points/COIL_database/images/lucky cat/obj4__34.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__35.png b/data/points/COIL_database/images/lucky cat/obj4__35.png Binary files differindex ba95aef4..ba95aef4 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__35.png +++ b/data/points/COIL_database/images/lucky cat/obj4__35.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__36.png b/data/points/COIL_database/images/lucky cat/obj4__36.png Binary files differindex d5b80e1a..d5b80e1a 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__36.png +++ b/data/points/COIL_database/images/lucky cat/obj4__36.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__37.png b/data/points/COIL_database/images/lucky cat/obj4__37.png Binary files differindex e940a2fd..e940a2fd 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__37.png +++ b/data/points/COIL_database/images/lucky cat/obj4__37.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__38.png b/data/points/COIL_database/images/lucky cat/obj4__38.png Binary files differindex 1da47bc0..1da47bc0 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__38.png +++ b/data/points/COIL_database/images/lucky cat/obj4__38.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__39.png b/data/points/COIL_database/images/lucky cat/obj4__39.png Binary files differindex 7ee6c9f9..7ee6c9f9 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__39.png +++ b/data/points/COIL_database/images/lucky cat/obj4__39.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__4.png b/data/points/COIL_database/images/lucky cat/obj4__4.png Binary files differindex 7e6182c4..7e6182c4 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__4.png +++ b/data/points/COIL_database/images/lucky cat/obj4__4.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__40.png b/data/points/COIL_database/images/lucky cat/obj4__40.png Binary files differindex d2529b59..d2529b59 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__40.png +++ b/data/points/COIL_database/images/lucky cat/obj4__40.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__41.png b/data/points/COIL_database/images/lucky cat/obj4__41.png Binary files differindex ce1b7093..ce1b7093 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__41.png +++ b/data/points/COIL_database/images/lucky cat/obj4__41.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__42.png b/data/points/COIL_database/images/lucky cat/obj4__42.png Binary files differindex 4ba64574..4ba64574 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__42.png +++ b/data/points/COIL_database/images/lucky cat/obj4__42.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__43.png b/data/points/COIL_database/images/lucky cat/obj4__43.png Binary files differindex a0f5b8f4..a0f5b8f4 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__43.png +++ b/data/points/COIL_database/images/lucky cat/obj4__43.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__44.png b/data/points/COIL_database/images/lucky cat/obj4__44.png Binary files differindex 36a0aa8d..36a0aa8d 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__44.png +++ b/data/points/COIL_database/images/lucky cat/obj4__44.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__45.png b/data/points/COIL_database/images/lucky cat/obj4__45.png Binary files differindex 2c6ace8d..2c6ace8d 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__45.png +++ b/data/points/COIL_database/images/lucky cat/obj4__45.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__46.png b/data/points/COIL_database/images/lucky cat/obj4__46.png Binary files differindex f06f423b..f06f423b 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__46.png +++ b/data/points/COIL_database/images/lucky cat/obj4__46.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__47.png b/data/points/COIL_database/images/lucky cat/obj4__47.png Binary files differindex 8591b0a6..8591b0a6 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__47.png +++ b/data/points/COIL_database/images/lucky cat/obj4__47.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__48.png b/data/points/COIL_database/images/lucky cat/obj4__48.png Binary files differindex 37ba4167..37ba4167 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__48.png +++ b/data/points/COIL_database/images/lucky cat/obj4__48.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__49.png b/data/points/COIL_database/images/lucky cat/obj4__49.png Binary files differindex 1dc4483c..1dc4483c 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__49.png +++ b/data/points/COIL_database/images/lucky cat/obj4__49.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__50.png b/data/points/COIL_database/images/lucky cat/obj4__50.png Binary files differindex d41be68b..d41be68b 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__50.png +++ b/data/points/COIL_database/images/lucky cat/obj4__50.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__51.png b/data/points/COIL_database/images/lucky cat/obj4__51.png Binary files differindex 12ba90ed..12ba90ed 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__51.png +++ b/data/points/COIL_database/images/lucky cat/obj4__51.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__52.png b/data/points/COIL_database/images/lucky cat/obj4__52.png Binary files differindex 04058abd..04058abd 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__52.png +++ b/data/points/COIL_database/images/lucky cat/obj4__52.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__53.png b/data/points/COIL_database/images/lucky cat/obj4__53.png Binary files differindex c7d6d02a..c7d6d02a 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__53.png +++ b/data/points/COIL_database/images/lucky cat/obj4__53.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__54.png b/data/points/COIL_database/images/lucky cat/obj4__54.png Binary files differindex b1e22cfa..b1e22cfa 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__54.png +++ b/data/points/COIL_database/images/lucky cat/obj4__54.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__55.png b/data/points/COIL_database/images/lucky cat/obj4__55.png Binary files differindex dea5770f..dea5770f 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__55.png +++ b/data/points/COIL_database/images/lucky cat/obj4__55.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__56.png b/data/points/COIL_database/images/lucky cat/obj4__56.png Binary files differindex f1acf69d..f1acf69d 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__56.png +++ b/data/points/COIL_database/images/lucky cat/obj4__56.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__57.png b/data/points/COIL_database/images/lucky cat/obj4__57.png Binary files differindex 88a0ab16..88a0ab16 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__57.png +++ b/data/points/COIL_database/images/lucky cat/obj4__57.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__58.png b/data/points/COIL_database/images/lucky cat/obj4__58.png Binary files differindex 18f4d10e..18f4d10e 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__58.png +++ b/data/points/COIL_database/images/lucky cat/obj4__58.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__59.png b/data/points/COIL_database/images/lucky cat/obj4__59.png Binary files differindex ee7f3b81..ee7f3b81 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__59.png +++ b/data/points/COIL_database/images/lucky cat/obj4__59.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__6.png b/data/points/COIL_database/images/lucky cat/obj4__6.png Binary files differindex 69f4e861..69f4e861 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__6.png +++ b/data/points/COIL_database/images/lucky cat/obj4__6.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__60.png b/data/points/COIL_database/images/lucky cat/obj4__60.png Binary files differindex 1a2a32b6..1a2a32b6 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__60.png +++ b/data/points/COIL_database/images/lucky cat/obj4__60.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__61.png b/data/points/COIL_database/images/lucky cat/obj4__61.png Binary files differindex bc85f8f8..bc85f8f8 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__61.png +++ b/data/points/COIL_database/images/lucky cat/obj4__61.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__62.png b/data/points/COIL_database/images/lucky cat/obj4__62.png Binary files differindex 2da189bb..2da189bb 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__62.png +++ b/data/points/COIL_database/images/lucky cat/obj4__62.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__63.png b/data/points/COIL_database/images/lucky cat/obj4__63.png Binary files differindex 4c13ce00..4c13ce00 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__63.png +++ b/data/points/COIL_database/images/lucky cat/obj4__63.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__64.png b/data/points/COIL_database/images/lucky cat/obj4__64.png Binary files differindex ee6d8e02..ee6d8e02 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__64.png +++ b/data/points/COIL_database/images/lucky cat/obj4__64.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__65.png b/data/points/COIL_database/images/lucky cat/obj4__65.png Binary files differindex a353c06c..a353c06c 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__65.png +++ b/data/points/COIL_database/images/lucky cat/obj4__65.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__66.png b/data/points/COIL_database/images/lucky cat/obj4__66.png Binary files differindex 6bfd49f5..6bfd49f5 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__66.png +++ b/data/points/COIL_database/images/lucky cat/obj4__66.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__67.png b/data/points/COIL_database/images/lucky cat/obj4__67.png Binary files differindex 0999d86b..0999d86b 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__67.png +++ b/data/points/COIL_database/images/lucky cat/obj4__67.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__68.png b/data/points/COIL_database/images/lucky cat/obj4__68.png Binary files differindex 381d9c3c..381d9c3c 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__68.png +++ b/data/points/COIL_database/images/lucky cat/obj4__68.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__69.png b/data/points/COIL_database/images/lucky cat/obj4__69.png Binary files differindex 7a1eab1a..7a1eab1a 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__69.png +++ b/data/points/COIL_database/images/lucky cat/obj4__69.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__7.png b/data/points/COIL_database/images/lucky cat/obj4__7.png Binary files differindex 54b788b6..54b788b6 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__7.png +++ b/data/points/COIL_database/images/lucky cat/obj4__7.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__70.png b/data/points/COIL_database/images/lucky cat/obj4__70.png Binary files differindex 380e3859..380e3859 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__70.png +++ b/data/points/COIL_database/images/lucky cat/obj4__70.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__71.png b/data/points/COIL_database/images/lucky cat/obj4__71.png Binary files differindex f93c3ead..f93c3ead 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__71.png +++ b/data/points/COIL_database/images/lucky cat/obj4__71.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__8.png b/data/points/COIL_database/images/lucky cat/obj4__8.png Binary files differindex cb4ccfa0..cb4ccfa0 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__8.png +++ b/data/points/COIL_database/images/lucky cat/obj4__8.png diff --git a/data/points/COIL_database/images/lucky cat/obj4__9.png b/data/points/COIL_database/images/lucky cat/obj4__9.png Binary files differindex 4881ec2d..4881ec2d 100755..100644 --- a/data/points/COIL_database/images/lucky cat/obj4__9.png +++ b/data/points/COIL_database/images/lucky cat/obj4__9.png diff --git a/data/points/COIL_database/images/money pig/obj13__0.png b/data/points/COIL_database/images/money pig/obj13__0.png Binary files differindex 79b4d2dd..79b4d2dd 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__0.png +++ b/data/points/COIL_database/images/money pig/obj13__0.png diff --git a/data/points/COIL_database/images/money pig/obj13__1.png b/data/points/COIL_database/images/money pig/obj13__1.png Binary files differindex 9f37fc0d..9f37fc0d 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__1.png +++ b/data/points/COIL_database/images/money pig/obj13__1.png diff --git a/data/points/COIL_database/images/money pig/obj13__10.png b/data/points/COIL_database/images/money pig/obj13__10.png Binary files differindex 9d4c399d..9d4c399d 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__10.png +++ b/data/points/COIL_database/images/money pig/obj13__10.png diff --git a/data/points/COIL_database/images/money pig/obj13__11.png b/data/points/COIL_database/images/money pig/obj13__11.png Binary files differindex f9122c7e..f9122c7e 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__11.png +++ b/data/points/COIL_database/images/money pig/obj13__11.png diff --git a/data/points/COIL_database/images/money pig/obj13__12.png b/data/points/COIL_database/images/money pig/obj13__12.png Binary files differindex 903b0fa2..903b0fa2 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__12.png +++ b/data/points/COIL_database/images/money pig/obj13__12.png diff --git a/data/points/COIL_database/images/money pig/obj13__13.png b/data/points/COIL_database/images/money pig/obj13__13.png Binary files differindex 3862e98a..3862e98a 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__13.png +++ b/data/points/COIL_database/images/money pig/obj13__13.png diff --git a/data/points/COIL_database/images/money pig/obj13__14.png b/data/points/COIL_database/images/money pig/obj13__14.png Binary files differindex fb52d5a7..fb52d5a7 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__14.png +++ b/data/points/COIL_database/images/money pig/obj13__14.png diff --git a/data/points/COIL_database/images/money pig/obj13__15.png b/data/points/COIL_database/images/money pig/obj13__15.png Binary files differindex 418686c6..418686c6 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__15.png +++ b/data/points/COIL_database/images/money pig/obj13__15.png diff --git a/data/points/COIL_database/images/money pig/obj13__16.png b/data/points/COIL_database/images/money pig/obj13__16.png Binary files differindex 8c120be1..8c120be1 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__16.png +++ b/data/points/COIL_database/images/money pig/obj13__16.png diff --git a/data/points/COIL_database/images/money pig/obj13__17.png b/data/points/COIL_database/images/money pig/obj13__17.png Binary files differindex d06e1cd7..d06e1cd7 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__17.png +++ b/data/points/COIL_database/images/money pig/obj13__17.png diff --git a/data/points/COIL_database/images/money pig/obj13__18.png b/data/points/COIL_database/images/money pig/obj13__18.png Binary files differindex 0c94b6d6..0c94b6d6 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__18.png +++ b/data/points/COIL_database/images/money pig/obj13__18.png diff --git a/data/points/COIL_database/images/money pig/obj13__19.png b/data/points/COIL_database/images/money pig/obj13__19.png Binary files differindex 81c53e3d..81c53e3d 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__19.png +++ b/data/points/COIL_database/images/money pig/obj13__19.png diff --git a/data/points/COIL_database/images/money pig/obj13__2.png b/data/points/COIL_database/images/money pig/obj13__2.png Binary files differindex fd81df13..fd81df13 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__2.png +++ b/data/points/COIL_database/images/money pig/obj13__2.png diff --git a/data/points/COIL_database/images/money pig/obj13__20.png b/data/points/COIL_database/images/money pig/obj13__20.png Binary files differindex 9b402f18..9b402f18 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__20.png +++ b/data/points/COIL_database/images/money pig/obj13__20.png diff --git a/data/points/COIL_database/images/money pig/obj13__21.png b/data/points/COIL_database/images/money pig/obj13__21.png Binary files differindex 9124d2ee..9124d2ee 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__21.png +++ b/data/points/COIL_database/images/money pig/obj13__21.png diff --git a/data/points/COIL_database/images/money pig/obj13__22.png b/data/points/COIL_database/images/money pig/obj13__22.png Binary files differindex 3bb3acd5..3bb3acd5 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__22.png +++ b/data/points/COIL_database/images/money pig/obj13__22.png diff --git a/data/points/COIL_database/images/money pig/obj13__23.png b/data/points/COIL_database/images/money pig/obj13__23.png Binary files differindex 124cf765..124cf765 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__23.png +++ b/data/points/COIL_database/images/money pig/obj13__23.png diff --git a/data/points/COIL_database/images/money pig/obj13__24.png b/data/points/COIL_database/images/money pig/obj13__24.png Binary files differindex be8724ec..be8724ec 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__24.png +++ b/data/points/COIL_database/images/money pig/obj13__24.png diff --git a/data/points/COIL_database/images/money pig/obj13__25.png b/data/points/COIL_database/images/money pig/obj13__25.png Binary files differindex 1b12d8a9..1b12d8a9 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__25.png +++ b/data/points/COIL_database/images/money pig/obj13__25.png diff --git a/data/points/COIL_database/images/money pig/obj13__26.png b/data/points/COIL_database/images/money pig/obj13__26.png Binary files differindex da5e58ce..da5e58ce 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__26.png +++ b/data/points/COIL_database/images/money pig/obj13__26.png diff --git a/data/points/COIL_database/images/money pig/obj13__27.png b/data/points/COIL_database/images/money pig/obj13__27.png Binary files differindex b25c9b05..b25c9b05 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__27.png +++ b/data/points/COIL_database/images/money pig/obj13__27.png diff --git a/data/points/COIL_database/images/money pig/obj13__28.png b/data/points/COIL_database/images/money pig/obj13__28.png Binary files differindex fcc4b6bb..fcc4b6bb 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__28.png +++ b/data/points/COIL_database/images/money pig/obj13__28.png diff --git a/data/points/COIL_database/images/money pig/obj13__29.png b/data/points/COIL_database/images/money pig/obj13__29.png Binary files differindex b7a646bc..b7a646bc 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__29.png +++ b/data/points/COIL_database/images/money pig/obj13__29.png diff --git a/data/points/COIL_database/images/money pig/obj13__3.png b/data/points/COIL_database/images/money pig/obj13__3.png Binary files differindex 5da5acae..5da5acae 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__3.png +++ b/data/points/COIL_database/images/money pig/obj13__3.png diff --git a/data/points/COIL_database/images/money pig/obj13__30.png b/data/points/COIL_database/images/money pig/obj13__30.png Binary files differindex 79ff0d69..79ff0d69 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__30.png +++ b/data/points/COIL_database/images/money pig/obj13__30.png diff --git a/data/points/COIL_database/images/money pig/obj13__31.png b/data/points/COIL_database/images/money pig/obj13__31.png Binary files differindex 6f5dfdd0..6f5dfdd0 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__31.png +++ b/data/points/COIL_database/images/money pig/obj13__31.png diff --git a/data/points/COIL_database/images/money pig/obj13__32.png b/data/points/COIL_database/images/money pig/obj13__32.png Binary files differindex bf828c5a..bf828c5a 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__32.png +++ b/data/points/COIL_database/images/money pig/obj13__32.png diff --git a/data/points/COIL_database/images/money pig/obj13__33.png b/data/points/COIL_database/images/money pig/obj13__33.png Binary files differindex 76235e64..76235e64 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__33.png +++ b/data/points/COIL_database/images/money pig/obj13__33.png diff --git a/data/points/COIL_database/images/money pig/obj13__34.png b/data/points/COIL_database/images/money pig/obj13__34.png Binary files differindex eb870a3c..eb870a3c 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__34.png +++ b/data/points/COIL_database/images/money pig/obj13__34.png diff --git a/data/points/COIL_database/images/money pig/obj13__35.png b/data/points/COIL_database/images/money pig/obj13__35.png Binary files differindex 328a2b4c..328a2b4c 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__35.png +++ b/data/points/COIL_database/images/money pig/obj13__35.png diff --git a/data/points/COIL_database/images/money pig/obj13__36.png b/data/points/COIL_database/images/money pig/obj13__36.png Binary files differindex add58bb8..add58bb8 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__36.png +++ b/data/points/COIL_database/images/money pig/obj13__36.png diff --git a/data/points/COIL_database/images/money pig/obj13__37.png b/data/points/COIL_database/images/money pig/obj13__37.png Binary files differindex dd7804d0..dd7804d0 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__37.png +++ b/data/points/COIL_database/images/money pig/obj13__37.png diff --git a/data/points/COIL_database/images/money pig/obj13__38.png b/data/points/COIL_database/images/money pig/obj13__38.png Binary files differindex 28034b0f..28034b0f 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__38.png +++ b/data/points/COIL_database/images/money pig/obj13__38.png diff --git a/data/points/COIL_database/images/money pig/obj13__39.png b/data/points/COIL_database/images/money pig/obj13__39.png Binary files differindex 2344a060..2344a060 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__39.png +++ b/data/points/COIL_database/images/money pig/obj13__39.png diff --git a/data/points/COIL_database/images/money pig/obj13__4.png b/data/points/COIL_database/images/money pig/obj13__4.png Binary files differindex 2546b4fe..2546b4fe 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__4.png +++ b/data/points/COIL_database/images/money pig/obj13__4.png diff --git a/data/points/COIL_database/images/money pig/obj13__40.png b/data/points/COIL_database/images/money pig/obj13__40.png Binary files differindex 11a27474..11a27474 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__40.png +++ b/data/points/COIL_database/images/money pig/obj13__40.png diff --git a/data/points/COIL_database/images/money pig/obj13__41.png b/data/points/COIL_database/images/money pig/obj13__41.png Binary files differindex 8402ffe2..8402ffe2 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__41.png +++ b/data/points/COIL_database/images/money pig/obj13__41.png diff --git a/data/points/COIL_database/images/money pig/obj13__42.png b/data/points/COIL_database/images/money pig/obj13__42.png Binary files differindex e4c3dc5d..e4c3dc5d 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__42.png +++ b/data/points/COIL_database/images/money pig/obj13__42.png diff --git a/data/points/COIL_database/images/money pig/obj13__43.png b/data/points/COIL_database/images/money pig/obj13__43.png Binary files differindex 1df2c809..1df2c809 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__43.png +++ b/data/points/COIL_database/images/money pig/obj13__43.png diff --git a/data/points/COIL_database/images/money pig/obj13__44.png b/data/points/COIL_database/images/money pig/obj13__44.png Binary files differindex 1962650d..1962650d 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__44.png +++ b/data/points/COIL_database/images/money pig/obj13__44.png diff --git a/data/points/COIL_database/images/money pig/obj13__45.png b/data/points/COIL_database/images/money pig/obj13__45.png Binary files differindex 13367c88..13367c88 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__45.png +++ b/data/points/COIL_database/images/money pig/obj13__45.png diff --git a/data/points/COIL_database/images/money pig/obj13__46.png b/data/points/COIL_database/images/money pig/obj13__46.png Binary files differindex 7c35654b..7c35654b 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__46.png +++ b/data/points/COIL_database/images/money pig/obj13__46.png diff --git a/data/points/COIL_database/images/money pig/obj13__47.png b/data/points/COIL_database/images/money pig/obj13__47.png Binary files differindex eea56f6b..eea56f6b 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__47.png +++ b/data/points/COIL_database/images/money pig/obj13__47.png diff --git a/data/points/COIL_database/images/money pig/obj13__48.png b/data/points/COIL_database/images/money pig/obj13__48.png Binary files differindex 7b721615..7b721615 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__48.png +++ b/data/points/COIL_database/images/money pig/obj13__48.png diff --git a/data/points/COIL_database/images/money pig/obj13__49.png b/data/points/COIL_database/images/money pig/obj13__49.png Binary files differindex babbff81..babbff81 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__49.png +++ b/data/points/COIL_database/images/money pig/obj13__49.png diff --git a/data/points/COIL_database/images/money pig/obj13__5.png b/data/points/COIL_database/images/money pig/obj13__5.png Binary files differindex b7a30479..b7a30479 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__5.png +++ b/data/points/COIL_database/images/money pig/obj13__5.png diff --git a/data/points/COIL_database/images/money pig/obj13__50.png b/data/points/COIL_database/images/money pig/obj13__50.png Binary files differindex 83b831a4..83b831a4 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__50.png +++ b/data/points/COIL_database/images/money pig/obj13__50.png diff --git a/data/points/COIL_database/images/money pig/obj13__51.png b/data/points/COIL_database/images/money pig/obj13__51.png Binary files differindex 63af5d96..63af5d96 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__51.png +++ b/data/points/COIL_database/images/money pig/obj13__51.png diff --git a/data/points/COIL_database/images/money pig/obj13__52.png b/data/points/COIL_database/images/money pig/obj13__52.png Binary files differindex 5ee92b85..5ee92b85 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__52.png +++ b/data/points/COIL_database/images/money pig/obj13__52.png diff --git a/data/points/COIL_database/images/money pig/obj13__53.png b/data/points/COIL_database/images/money pig/obj13__53.png Binary files differindex 12b418de..12b418de 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__53.png +++ b/data/points/COIL_database/images/money pig/obj13__53.png diff --git a/data/points/COIL_database/images/money pig/obj13__54.png b/data/points/COIL_database/images/money pig/obj13__54.png Binary files differindex 8a217df3..8a217df3 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__54.png +++ b/data/points/COIL_database/images/money pig/obj13__54.png diff --git a/data/points/COIL_database/images/money pig/obj13__55.png b/data/points/COIL_database/images/money pig/obj13__55.png Binary files differindex 08a492b4..08a492b4 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__55.png +++ b/data/points/COIL_database/images/money pig/obj13__55.png diff --git a/data/points/COIL_database/images/money pig/obj13__56.png b/data/points/COIL_database/images/money pig/obj13__56.png Binary files differindex c2c31c4f..c2c31c4f 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__56.png +++ b/data/points/COIL_database/images/money pig/obj13__56.png diff --git a/data/points/COIL_database/images/money pig/obj13__57.png b/data/points/COIL_database/images/money pig/obj13__57.png Binary files differindex ffb62d35..ffb62d35 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__57.png +++ b/data/points/COIL_database/images/money pig/obj13__57.png diff --git a/data/points/COIL_database/images/money pig/obj13__58.png b/data/points/COIL_database/images/money pig/obj13__58.png Binary files differindex fadce354..fadce354 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__58.png +++ b/data/points/COIL_database/images/money pig/obj13__58.png diff --git a/data/points/COIL_database/images/money pig/obj13__59.png b/data/points/COIL_database/images/money pig/obj13__59.png Binary files differindex 7c2075a2..7c2075a2 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__59.png +++ b/data/points/COIL_database/images/money pig/obj13__59.png diff --git a/data/points/COIL_database/images/money pig/obj13__6.png b/data/points/COIL_database/images/money pig/obj13__6.png Binary files differindex f5a5d1b4..f5a5d1b4 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__6.png +++ b/data/points/COIL_database/images/money pig/obj13__6.png diff --git a/data/points/COIL_database/images/money pig/obj13__60.png b/data/points/COIL_database/images/money pig/obj13__60.png Binary files differindex fc9d81e4..fc9d81e4 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__60.png +++ b/data/points/COIL_database/images/money pig/obj13__60.png diff --git a/data/points/COIL_database/images/money pig/obj13__61.png b/data/points/COIL_database/images/money pig/obj13__61.png Binary files differindex b60c31cf..b60c31cf 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__61.png +++ b/data/points/COIL_database/images/money pig/obj13__61.png diff --git a/data/points/COIL_database/images/money pig/obj13__62.png b/data/points/COIL_database/images/money pig/obj13__62.png Binary files differindex 42f1b0ff..42f1b0ff 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__62.png +++ b/data/points/COIL_database/images/money pig/obj13__62.png diff --git a/data/points/COIL_database/images/money pig/obj13__63.png b/data/points/COIL_database/images/money pig/obj13__63.png Binary files differindex 05164aeb..05164aeb 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__63.png +++ b/data/points/COIL_database/images/money pig/obj13__63.png diff --git a/data/points/COIL_database/images/money pig/obj13__64.png b/data/points/COIL_database/images/money pig/obj13__64.png Binary files differindex 6384ed8d..6384ed8d 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__64.png +++ b/data/points/COIL_database/images/money pig/obj13__64.png diff --git a/data/points/COIL_database/images/money pig/obj13__65.png b/data/points/COIL_database/images/money pig/obj13__65.png Binary files differindex dd7d0b2b..dd7d0b2b 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__65.png +++ b/data/points/COIL_database/images/money pig/obj13__65.png diff --git a/data/points/COIL_database/images/money pig/obj13__66.png b/data/points/COIL_database/images/money pig/obj13__66.png Binary files differindex 517c2dfa..517c2dfa 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__66.png +++ b/data/points/COIL_database/images/money pig/obj13__66.png diff --git a/data/points/COIL_database/images/money pig/obj13__67.png b/data/points/COIL_database/images/money pig/obj13__67.png Binary files differindex d672e0c0..d672e0c0 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__67.png +++ b/data/points/COIL_database/images/money pig/obj13__67.png diff --git a/data/points/COIL_database/images/money pig/obj13__68.png b/data/points/COIL_database/images/money pig/obj13__68.png Binary files differindex dce1c0aa..dce1c0aa 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__68.png +++ b/data/points/COIL_database/images/money pig/obj13__68.png diff --git a/data/points/COIL_database/images/money pig/obj13__69.png b/data/points/COIL_database/images/money pig/obj13__69.png Binary files differindex a39e05f8..a39e05f8 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__69.png +++ b/data/points/COIL_database/images/money pig/obj13__69.png diff --git a/data/points/COIL_database/images/money pig/obj13__7.png b/data/points/COIL_database/images/money pig/obj13__7.png Binary files differindex dea00fee..dea00fee 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__7.png +++ b/data/points/COIL_database/images/money pig/obj13__7.png diff --git a/data/points/COIL_database/images/money pig/obj13__70.png b/data/points/COIL_database/images/money pig/obj13__70.png Binary files differindex 32f86cdd..32f86cdd 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__70.png +++ b/data/points/COIL_database/images/money pig/obj13__70.png diff --git a/data/points/COIL_database/images/money pig/obj13__71.png b/data/points/COIL_database/images/money pig/obj13__71.png Binary files differindex ee26c5a9..ee26c5a9 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__71.png +++ b/data/points/COIL_database/images/money pig/obj13__71.png diff --git a/data/points/COIL_database/images/money pig/obj13__8.png b/data/points/COIL_database/images/money pig/obj13__8.png Binary files differindex 6ffa666d..6ffa666d 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__8.png +++ b/data/points/COIL_database/images/money pig/obj13__8.png diff --git a/data/points/COIL_database/images/money pig/obj13__9.png b/data/points/COIL_database/images/money pig/obj13__9.png Binary files differindex ab971710..ab971710 100755..100644 --- a/data/points/COIL_database/images/money pig/obj13__9.png +++ b/data/points/COIL_database/images/money pig/obj13__9.png diff --git a/data/points/COIL_database/little_car.off b/data/points/COIL_database/little_car.off index 056c56db..056c56db 100755..100644 --- a/data/points/COIL_database/little_car.off +++ b/data/points/COIL_database/little_car.off diff --git a/data/points/COIL_database/lucky_cat.off b/data/points/COIL_database/lucky_cat.off index 35ac5fc5..35ac5fc5 100755..100644 --- a/data/points/COIL_database/lucky_cat.off +++ b/data/points/COIL_database/lucky_cat.off diff --git a/data/points/COIL_database/money_pig.off b/data/points/COIL_database/money_pig.off index 5acb05dd..5acb05dd 100755..100644 --- a/data/points/COIL_database/money_pig.off +++ b/data/points/COIL_database/money_pig.off diff --git a/data/points/SO3_10000.off b/data/points/SO3_10000.off index fbf9b273..fbf9b273 100755..100644 --- a/data/points/SO3_10000.off +++ b/data/points/SO3_10000.off diff --git a/data/points/SO3_50000.off b/data/points/SO3_50000.off index 635e8988..635e8988 100755..100644 --- a/data/points/SO3_50000.off +++ b/data/points/SO3_50000.off diff --git a/data/points/sphere3D_2646.off b/data/points/sphere3D_2646.off index 8035a0a6..8035a0a6 100755..100644 --- a/data/points/sphere3D_2646.off +++ b/data/points/sphere3D_2646.off diff --git a/data/points/tore3D_1307.off b/data/points/tore3D_1307.off index e214ac4b..e214ac4b 100755..100644 --- a/data/points/tore3D_1307.off +++ b/data/points/tore3D_1307.off diff --git a/scripts/check_code_coverage.sh b/scripts/check_code_coverage.sh deleted file mode 100755 index ef4aeb76..00000000 --- a/scripts/check_code_coverage.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -#usage bash check_google_style.sh - -# UNITARY TEST DIRECTORY CHECK -ROOT_DIR=.. -UT_DIR_TO_CHECK="$1" -LCOV_DIR=$UT_DIR_TO_CHECK/lcov -COVERAGE_FILE=$LCOV_DIR/coverage.info -LOG_FILE=$LCOV_DIR/coverage.log -MIN_PERCENT=86 - -rm -rf $LCOV_DIR -mkdir $LCOV_DIR - -lcov --capture --directory $UT_DIR_TO_CHECK --no-external --output-file $COVERAGE_FILE 2>&1 | tee -a $LOG_FILE -lcov --summary $COVERAGE_FILE 2>&1 | tee -a $LOG_FILE -genhtml $COVERAGE_FILE --output-directory $UT_DIR_TO_CHECK/lcov -# CLEAN AFTER USE -lcov --directory $UT_DIR_TO_CHECK --zerocounters 2>&1 | tee -a $LOG_FILE - -LINE_PERCENTAGE=`grep "lines......:" $LOG_FILE` -PERC_PER_LINE=${LINE_PERCENTAGE:14:3} - -if [ "$PERC_PER_LINE" -lt "$MIN_PERCENT" ] -then - echo "## Lines not enough covered ($PERC_PER_LINE) in $UT_DIR_TO_CHECK" 2>&1 | tee -a $LOG_FILE - exit 1 -else - FONC_PERCENTAGE=`grep "functions..:" $LOG_FILE` - PERC_PER_FUNC=${FONC_PERCENTAGE:14:3} - - if [ "$PERC_PER_FUNC" -lt "$MIN_PERCENT" ] - then - echo "## Functions not enough covered ($PERC_PER_FUNC) in $UT_DIR_TO_CHECK" 2>&1 | tee -a $LOG_FILE - exit 1 - fi -fi - -echo "Acceptable coverage values (lines:$PERC_PER_LINE% - functions:$PERC_PER_FUNC%) in $UT_DIR_TO_CHECK" 2>&1 | tee -a $LOG_FILE -exit 0 diff --git a/scripts/cpplint.py b/scripts/cpplint.py index 217b7136..0e186e23 100644 --- a/scripts/cpplint.py +++ b/scripts/cpplint.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # # Copyright (c) 2009 Google Inc. All rights reserved. # @@ -175,71 +175,77 @@ Syntax: cpplint.py [--verbose=#] [--output=vs7] [--filter=-x,+y,...] # If you add a new error message with a new category, add it to the list # here! cpplint_unittest.py should tell you if you forget to do this. _ERROR_CATEGORIES = [ - 'build/class', - 'build/c++11', - 'build/deprecated', - 'build/endif_comment', - 'build/explicit_make_pair', - 'build/forward_decl', - 'build/header_guard', - 'build/include', - 'build/include_alpha', - 'build/include_order', - 'build/include_what_you_use', - 'build/namespaces', - 'build/printf_format', - 'build/storage_class', - 'legal/copyright', - 'readability/alt_tokens', - 'readability/braces', - 'readability/casting', - 'readability/check', - 'readability/constructors', - 'readability/fn_size', - 'readability/function', - 'readability/inheritance', - 'readability/multiline_comment', - 'readability/multiline_string', - 'readability/namespace', - 'readability/nolint', - 'readability/nul', - 'readability/streams', - 'readability/todo', - 'readability/utf8', - 'runtime/arrays', - 'runtime/casting', - 'runtime/explicit', - 'runtime/int', - 'runtime/init', - 'runtime/invalid_increment', - 'runtime/member_string_references', - 'runtime/memset', - 'runtime/indentation_namespace', - 'runtime/operator', - 'runtime/printf', - 'runtime/printf_format', - 'runtime/references', - 'runtime/string', - 'runtime/threadsafe_fn', - 'runtime/vlog', - 'whitespace/blank_line', - 'whitespace/braces', - 'whitespace/comma', - 'whitespace/comments', - 'whitespace/empty_conditional_body', - 'whitespace/empty_loop_body', - 'whitespace/end_of_line', - 'whitespace/ending_newline', - 'whitespace/forcolon', - 'whitespace/indent', - 'whitespace/line_length', - 'whitespace/newline', - 'whitespace/operators', - 'whitespace/parens', - 'whitespace/semicolon', - 'whitespace/tab', - 'whitespace/todo' - ] + 'build/class', + 'build/c++11', + 'build/deprecated', + 'build/endif_comment', + 'build/explicit_make_pair', + 'build/forward_decl', + 'build/header_guard', + 'build/include', + 'build/include_alpha', + 'build/include_order', + 'build/include_what_you_use', + 'build/namespaces', + 'build/printf_format', + 'build/storage_class', + 'legal/copyright', + 'readability/alt_tokens', + 'readability/braces', + 'readability/casting', + 'readability/check', + 'readability/constructors', + 'readability/fn_size', + 'readability/function', + 'readability/inheritance', + 'readability/multiline_comment', + 'readability/multiline_string', + 'readability/namespace', + 'readability/nolint', + 'readability/nul', + 'readability/strings', + 'readability/todo', + 'readability/utf8', + 'runtime/arrays', + 'runtime/casting', + 'runtime/explicit', + 'runtime/int', + 'runtime/init', + 'runtime/invalid_increment', + 'runtime/member_string_references', + 'runtime/memset', + 'runtime/indentation_namespace', + 'runtime/operator', + 'runtime/printf', + 'runtime/printf_format', + 'runtime/references', + 'runtime/string', + 'runtime/threadsafe_fn', + 'runtime/vlog', + 'whitespace/blank_line', + 'whitespace/braces', + 'whitespace/comma', + 'whitespace/comments', + 'whitespace/empty_conditional_body', + 'whitespace/empty_loop_body', + 'whitespace/end_of_line', + 'whitespace/ending_newline', + 'whitespace/forcolon', + 'whitespace/indent', + 'whitespace/line_length', + 'whitespace/newline', + 'whitespace/operators', + 'whitespace/parens', + 'whitespace/semicolon', + 'whitespace/tab', + 'whitespace/todo', + ] + +# These error categories are no longer enforced by cpplint, but for backwards- +# compatibility they may still appear in NOLINT comments. +_LEGACY_ERROR_CATEGORIES = [ + 'readability/streams', + ] # The default state of the category filter. This is overridden by the --filter= # flag. By default all errors are on, so only add here categories that should be @@ -522,7 +528,7 @@ def ParseNolintSuppressions(filename, raw_line, linenum, error): category = category[1:-1] if category in _ERROR_CATEGORIES: _error_suppressions.setdefault(category, set()).add(suppressed_line) - else: + elif category not in _LEGACY_ERROR_CATEGORIES: error(filename, linenum, 'readability/nolint', 5, 'Unknown NOLINT error category: %s' % category) @@ -690,7 +696,7 @@ class _IncludeState(object): # If previous line was a blank line, assume that the headers are # intentionally sorted the way they are. if (self._last_header > header_path and - not Match(r'^\s*$', clean_lines.elided[linenum - 1])): + Match(r'^\s*#\s*include\b', clean_lines.elided[linenum - 1])): return False return True @@ -1246,7 +1252,7 @@ def RemoveMultiLineCommentsFromRange(lines, begin, end): # Having // dummy comments makes the lines non-empty, so we will not get # unnecessary blank line warnings later in the code. for i in range(begin, end): - lines[i] = '// dummy' + lines[i] = '/**/' def RemoveMultiLineComments(filename, lines, error): @@ -1282,12 +1288,14 @@ def CleanseComments(line): class CleansedLines(object): - """Holds 3 copies of all lines with different preprocessing applied to them. + """Holds 4 copies of all lines with different preprocessing applied to them. - 1) elided member contains lines without strings and comments, - 2) lines member contains lines without comments, and + 1) elided member contains lines without strings and comments. + 2) lines member contains lines without comments. 3) raw_lines member contains all the lines without processing. - All these three members are of <type 'list'>, and of the same length. + 4) lines_without_raw_strings member is same as raw_lines, but with C++11 raw + strings removed. + All these members are of <type 'list'>, and of the same length. """ def __init__(self, lines): @@ -1656,15 +1664,17 @@ def GetHeaderGuardCPPVariable(filename): # flymake. filename = re.sub(r'_flymake\.h$', '.h', filename) filename = re.sub(r'/\.flymake/([^/]*)$', r'/\1', filename) - + # Replace 'c++' with 'cpp'. + filename = filename.replace('C++', 'cpp').replace('c++', 'cpp') + fileinfo = FileInfo(filename) file_path_from_root = fileinfo.RepositoryName() if _root: file_path_from_root = re.sub('^' + _root + os.sep, '', file_path_from_root) - return re.sub(r'[-./\s]', '_', file_path_from_root).upper() + '_' + return re.sub(r'[^a-zA-Z0-9]', '_', file_path_from_root).upper() + '_' -def CheckForHeaderGuard(filename, lines, error): +def CheckForHeaderGuard(filename, clean_lines, error): """Checks that the file contains a header guard. Logs an error if no #ifndef header guard is present. For other @@ -1672,7 +1682,7 @@ def CheckForHeaderGuard(filename, lines, error): Args: filename: The name of the C++ header file. - lines: An array of strings, each representing a line of the file. + clean_lines: A CleansedLines instance containing the file. error: The function to call with any errors found. """ @@ -1682,18 +1692,19 @@ def CheckForHeaderGuard(filename, lines, error): # Because this is silencing a warning for a nonexistent line, we # only support the very specific NOLINT(build/header_guard) syntax, # and not the general NOLINT or NOLINT(*) syntax. - for i in lines: + raw_lines = clean_lines.lines_without_raw_strings + for i in raw_lines: if Search(r'//\s*NOLINT\(build/header_guard\)', i): return cppvar = GetHeaderGuardCPPVariable(filename) - ifndef = None + ifndef = '' ifndef_linenum = 0 - define = None - endif = None + define = '' + endif = '' endif_linenum = 0 - for linenum, line in enumerate(lines): + for linenum, line in enumerate(raw_lines): linesplit = line.split() if len(linesplit) >= 2: # find the first occurrence of #ifndef and #define, save arg @@ -1708,18 +1719,12 @@ def CheckForHeaderGuard(filename, lines, error): endif = line endif_linenum = linenum - if not ifndef: + if not ifndef or not define or ifndef != define: error(filename, 0, 'build/header_guard', 5, 'No #ifndef header guard found, suggested CPP variable is: %s' % cppvar) return - if not define: - error(filename, 0, 'build/header_guard', 5, - 'No #define header guard found, suggested CPP variable is: %s' % - cppvar) - return - # The guard should be PATH_FILE_H_, but we also allow PATH_FILE_H__ # for backward compatibility. if ifndef != cppvar: @@ -1727,26 +1732,69 @@ def CheckForHeaderGuard(filename, lines, error): if ifndef != cppvar + '_': error_level = 5 - ParseNolintSuppressions(filename, lines[ifndef_linenum], ifndef_linenum, + ParseNolintSuppressions(filename, raw_lines[ifndef_linenum], ifndef_linenum, error) error(filename, ifndef_linenum, 'build/header_guard', error_level, '#ifndef header guard has wrong style, please use: %s' % cppvar) - if define != ifndef: - error(filename, 0, 'build/header_guard', 5, - '#ifndef and #define don\'t match, suggested CPP variable is: %s' % - cppvar) + # Check for "//" comments on endif line. + ParseNolintSuppressions(filename, raw_lines[endif_linenum], endif_linenum, + error) + match = Match(r'#endif\s*//\s*' + cppvar + r'(_)?\b', endif) + if match: + if match.group(1) == '_': + # Issue low severity warning for deprecated double trailing underscore + error(filename, endif_linenum, 'build/header_guard', 0, + '#endif line should be "#endif // %s"' % cppvar) return - if endif != ('#endif // %s' % cppvar): - error_level = 0 - if endif != ('#endif // %s' % (cppvar + '_')): - error_level = 5 + # Didn't find the corresponding "//" comment. If this file does not + # contain any "//" comments at all, it could be that the compiler + # only wants "/**/" comments, look for those instead. + no_single_line_comments = True + for i in xrange(1, len(raw_lines) - 1): + line = raw_lines[i] + if Match(r'^(?:(?:\'(?:\.|[^\'])*\')|(?:"(?:\.|[^"])*")|[^\'"])*//', line): + no_single_line_comments = False + break + + if no_single_line_comments: + match = Match(r'#endif\s*/\*\s*' + cppvar + r'(_)?\s*\*/', endif) + if match: + if match.group(1) == '_': + # Low severity warning for double trailing underscore + error(filename, endif_linenum, 'build/header_guard', 0, + '#endif line should be "#endif /* %s */"' % cppvar) + return + + # Didn't find anything + error(filename, endif_linenum, 'build/header_guard', 5, + '#endif line should be "#endif // %s"' % cppvar) - ParseNolintSuppressions(filename, lines[endif_linenum], endif_linenum, - error) - error(filename, endif_linenum, 'build/header_guard', error_level, - '#endif line should be "#endif // %s"' % cppvar) + +def CheckHeaderFileIncluded(filename, include_state, error): + """Logs an error if a .cc file does not include its header.""" + + # Do not check test files + if filename.endswith('_test.cc') or filename.endswith('_unittest.cc'): + return + + fileinfo = FileInfo(filename) + headerfile = filename[0:len(filename) - 2] + 'h' + if not os.path.exists(headerfile): + return + headername = FileInfo(headerfile).RepositoryName() + first_include = 0 + for section_list in include_state.include_list: + for f in section_list: + if headername in f[0] or f[0] in headername: + return + if not first_include: + first_include = f[1] + + error(filename, first_include, 'build/include', 5, + '%s should include its header file %s' % (fileinfo.RepositoryName(), + headername)) def CheckForBadCharacters(filename, lines, error): @@ -2042,6 +2090,23 @@ class _ClassInfo(_BlockInfo): self.is_derived = True def CheckEnd(self, filename, clean_lines, linenum, error): + # If there is a DISALLOW macro, it should appear near the end of + # the class. + seen_last_thing_in_class = False + for i in xrange(linenum - 1, self.starting_linenum, -1): + match = Search( + r'\b(DISALLOW_COPY_AND_ASSIGN|DISALLOW_IMPLICIT_CONSTRUCTORS)\(' + + self.name + r'\)', + clean_lines.elided[i]) + if match: + if seen_last_thing_in_class: + error(filename, i, 'readability/constructors', 3, + match.group(1) + ' should be the last thing in the class') + break + + if not Match(r'^\s*$', clean_lines.elided[i]): + seen_last_thing_in_class = True + # Check that closing brace is aligned with beginning of the class. # Only do this if the closing brace is indented by only whitespaces. # This means we will not check single-line class definitions. @@ -2722,7 +2787,8 @@ def CheckSpacingForFunctionCall(filename, clean_lines, linenum, error): 'Extra space after (') if (Search(r'\w\s+\(', fncall) and not Search(r'#\s*define|typedef|using\s+\w+\s*=', fncall) and - not Search(r'\w\s+\((\w+::)*\*\w+\)\(', fncall)): + not Search(r'\w\s+\((\w+::)*\*\w+\)\(', fncall) and + not Search(r'\bcase\s+\(', fncall)): # TODO(unknown): Space after an operator function seem to be a common # error, silence those for now by restricting them to highest verbosity. if Search(r'\boperator_*\b', line): @@ -2892,11 +2958,14 @@ def CheckComment(line, filename, linenum, next_line_start, error): 'TODO(my_username) should be followed by a space') # If the comment contains an alphanumeric character, there - # should be a space somewhere between it and the //. - if Match(r'//[^ ]*\w', comment): + # should be a space somewhere between it and the // unless + # it's a /// or //! Doxygen comment. + if (Match(r'//[^ ]*\w', comment) and + not Match(r'(///|//\!)(\s+|$)', comment)): error(filename, linenum, 'whitespace/comments', 4, 'Should have a space between // and comment') + def CheckAccess(filename, clean_lines, linenum, nesting_state, error): """Checks for improper use of DISALLOW* macros. @@ -3083,7 +3152,12 @@ def CheckOperatorSpacing(filename, clean_lines, linenum, error): # Otherwise not. Note we only check for non-spaces on *both* sides; # sometimes people put non-spaces on one side when aligning ='s among # many lines (not that this is behavior that I approve of...) - if Search(r'[\w.]=[\w.]', line) and not Search(r'\b(if|while) ', line): + if ((Search(r'[\w.]=', line) or + Search(r'=[\w.]', line)) + and not Search(r'\b(if|while|for) ', line) + # Operators taken from [lex.operators] in C++11 standard. + and not Search(r'(>=|<=|==|!=|&=|\^=|\|=|\+=|\*=|\/=|\%=)', line) + and not Search(r'operator=', line)): error(filename, linenum, 'whitespace/operators', 4, 'Missing spaces around =') @@ -3135,9 +3209,8 @@ def CheckOperatorSpacing(filename, clean_lines, linenum, error): # # We also allow operators following an opening parenthesis, since # those tend to be macros that deal with operators. - match = Search(r'(operator|\S)(?:L|UL|ULL|l|ul|ull)?<<([^\s,=])', line) - if (match and match.group(1) != '(' and - not (match.group(1).isdigit() and match.group(2).isdigit()) and + match = Search(r'(operator|[^\s(<])(?:L|UL|ULL|l|ul|ull)?<<([^\s,=<])', line) + if (match and not (match.group(1).isdigit() and match.group(2).isdigit()) and not (match.group(1) == 'operator' and match.group(2) == ';')): error(filename, linenum, 'whitespace/operators', 3, 'Missing spaces around <<') @@ -3255,7 +3328,7 @@ def CheckBracesSpacing(filename, clean_lines, linenum, error): # an initializer list, for instance), you should have spaces before your # braces. And since you should never have braces at the beginning of a line, # this is an easy test. - match = Match(r'^(.*[^ ({]){', line) + match = Match(r'^(.*[^ ({>]){', line) if match: # Try a bit harder to check for brace initialization. This # happens in one of the following forms: @@ -3355,13 +3428,14 @@ def IsTemplateParameterList(clean_lines, linenum, column): return False -def IsRValueType(clean_lines, nesting_state, linenum, column): +def IsRValueType(typenames, clean_lines, nesting_state, linenum, column): """Check if the token ending on (linenum, column) is a type. Assumes that text to the right of the column is "&&" or a function name. Args: + typenames: set of type names from template-argument-list. clean_lines: A CleansedLines instance containing the file. nesting_state: A NestingState instance which maintains information about the current stack of nested blocks being parsed. @@ -3385,7 +3459,7 @@ def IsRValueType(clean_lines, nesting_state, linenum, column): if Match(r'&&\s*(?:[>,]|\.\.\.)', suffix): return True - # Check for simple type and end of templates: + # Check for known types and end of templates: # int&& variable # vector<int>&& variable # @@ -3393,9 +3467,10 @@ def IsRValueType(clean_lines, nesting_state, linenum, column): # recognize pointer and reference types: # int* Function() # int& Function() - if match.group(2) in ['char', 'char16_t', 'char32_t', 'wchar_t', 'bool', - 'short', 'int', 'long', 'signed', 'unsigned', - 'float', 'double', 'void', 'auto', '>', '*', '&']: + if (match.group(2) in typenames or + match.group(2) in ['char', 'char16_t', 'char32_t', 'wchar_t', 'bool', + 'short', 'int', 'long', 'signed', 'unsigned', + 'float', 'double', 'void', 'auto', '>', '*', '&']): return True # If we see a close parenthesis, look for decltype on the other side. @@ -3528,7 +3603,7 @@ def IsRValueType(clean_lines, nesting_state, linenum, column): # Something else. Check that tokens to the left look like # return_type function_name - match_func = Match(r'^(.*)\s+\w(?:\w|::)*(?:<[^<>]*>)?\s*$', + match_func = Match(r'^(.*\S.*)\s+\w(?:\w|::)*(?:<[^<>]*>)?\s*$', match_symbol.group(1)) if match_func: # Check for constructors, which don't have return types. @@ -3538,7 +3613,7 @@ def IsRValueType(clean_lines, nesting_state, linenum, column): if (implicit_constructor and implicit_constructor.group(1) == implicit_constructor.group(2)): return True - return IsRValueType(clean_lines, nesting_state, linenum, + return IsRValueType(typenames, clean_lines, nesting_state, linenum, len(match_func.group(1))) # Nothing before the function name. If this is inside a block scope, @@ -3576,12 +3651,13 @@ def IsDeletedOrDefault(clean_lines, linenum): return Match(r'\s*=\s*(?:delete|default)\b', close_line[close_paren:]) -def IsRValueAllowed(clean_lines, linenum): +def IsRValueAllowed(clean_lines, linenum, typenames): """Check if RValue reference is allowed on a particular line. Args: clean_lines: A CleansedLines instance containing the file. linenum: The number of the line to check. + typenames: set of type names from template-argument-list. Returns: True if line is within the region where RValue references are allowed. """ @@ -3602,7 +3678,7 @@ def IsRValueAllowed(clean_lines, linenum): return IsDeletedOrDefault(clean_lines, linenum) # Allow constructors - match = Match(r'\s*([\w<>]+)\s*::\s*([\w<>]+)\s*\(', line) + match = Match(r'\s*(?:[\w<>]+::)*([\w<>]+)\s*::\s*([\w<>]+)\s*\(', line) if match and match.group(1) == match.group(2): return IsDeletedOrDefault(clean_lines, linenum) if Search(r'\b(?:explicit|inline)\s+[\w<>]+\s*\(', line): @@ -3615,7 +3691,86 @@ def IsRValueAllowed(clean_lines, linenum): if Match(r'^\s*$', previous_line) or Search(r'[{}:;]\s*$', previous_line): return IsDeletedOrDefault(clean_lines, linenum) - return False + # Reject types not mentioned in template-argument-list + while line: + match = Match(r'^.*?(\w+)\s*&&(.*)$', line) + if not match: + break + if match.group(1) not in typenames: + return False + line = match.group(2) + + # All RValue types that were in template-argument-list should have + # been removed by now. Those were allowed, assuming that they will + # be forwarded. + # + # If there are no remaining RValue types left (i.e. types that were + # not found in template-argument-list), flag those as not allowed. + return line.find('&&') < 0 + + +def GetTemplateArgs(clean_lines, linenum): + """Find list of template arguments associated with this function declaration. + + Args: + clean_lines: A CleansedLines instance containing the file. + linenum: Line number containing the start of the function declaration, + usually one line after the end of the template-argument-list. + Returns: + Set of type names, or empty set if this does not appear to have + any template parameters. + """ + # Find start of function + func_line = linenum + while func_line > 0: + line = clean_lines.elided[func_line] + if Match(r'^\s*$', line): + return set() + if line.find('(') >= 0: + break + func_line -= 1 + if func_line == 0: + return set() + + # Collapse template-argument-list into a single string + argument_list = '' + match = Match(r'^(\s*template\s*)<', clean_lines.elided[func_line]) + if match: + # template-argument-list on the same line as function name + start_col = len(match.group(1)) + _, end_line, end_col = CloseExpression(clean_lines, func_line, start_col) + if end_col > -1 and end_line == func_line: + start_col += 1 # Skip the opening bracket + argument_list = clean_lines.elided[func_line][start_col:end_col] + + elif func_line > 1: + # template-argument-list one line before function name + match = Match(r'^(.*)>\s*$', clean_lines.elided[func_line - 1]) + if match: + end_col = len(match.group(1)) + _, start_line, start_col = ReverseCloseExpression( + clean_lines, func_line - 1, end_col) + if start_col > -1: + start_col += 1 # Skip the opening bracket + while start_line < func_line - 1: + argument_list += clean_lines.elided[start_line][start_col:] + start_col = 0 + start_line += 1 + argument_list += clean_lines.elided[func_line - 1][start_col:end_col] + + if not argument_list: + return set() + + # Extract type names + typenames = set() + while True: + match = Match(r'^[,\s]*(?:typename|class)(?:\.\.\.)?\s+(\w+)(.*)$', + argument_list) + if not match: + break + typenames.add(match.group(1)) + argument_list = match.group(2) + return typenames def CheckRValueReference(filename, clean_lines, linenum, nesting_state, error): @@ -3643,9 +3798,10 @@ def CheckRValueReference(filename, clean_lines, linenum, nesting_state, error): # Either poorly formed && or an rvalue reference, check the context # to get a more accurate error message. Mostly we want to determine # if what's to the left of "&&" is a type or not. + typenames = GetTemplateArgs(clean_lines, linenum) and_pos = len(match.group(1)) - if IsRValueType(clean_lines, nesting_state, linenum, and_pos): - if not IsRValueAllowed(clean_lines, linenum): + if IsRValueType(typenames, clean_lines, nesting_state, linenum, and_pos): + if not IsRValueAllowed(clean_lines, linenum, typenames): error(filename, linenum, 'build/c++11', 3, 'RValue references are an unapproved C++ feature.') else: @@ -3926,8 +4082,10 @@ def CheckTrailingSemicolon(filename, clean_lines, linenum, error): # semicolons, while the downside for getting the blacklist wrong # would result in compile errors. # - # In addition to macros, we also don't want to warn on compound - # literals and lambdas. + # In addition to macros, we also don't want to warn on + # - Compound literals + # - Lambdas + # - alignas specifier with anonymous structs: closing_brace_pos = match.group(1).rfind(')') opening_parenthesis = ReverseCloseExpression( clean_lines, linenum, closing_brace_pos) @@ -3941,6 +4099,7 @@ def CheckTrailingSemicolon(filename, clean_lines, linenum, error): 'EXCLUSIVE_LOCKS_REQUIRED', 'SHARED_LOCKS_REQUIRED', 'LOCKS_EXCLUDED', 'INTERFACE_DEF')) or (func and not Search(r'\boperator\s*\[\s*\]', func.group(1))) or + Search(r'\b(?:struct|union)\s+alignas\s*$', line_prefix) or Search(r'\s+=\s*$', line_prefix)): match = None if (match and @@ -4484,6 +4643,10 @@ def CheckIncludeLine(filename, clean_lines, linenum, include_state, error): error(filename, linenum, 'build/include', 4, '"%s" already included at %s:%s' % (include, filename, duplicate_line)) + elif (include.endswith('.cc') and + os.path.dirname(fileinfo.RepositoryName()) != os.path.dirname(include)): + error(filename, linenum, 'build/include', 4, + 'Do not include .cc files from other packages') elif not _THIRD_PARTY_HEADERS_PATTERN.match(include): include_state.include_list[-1].append((include, linenum)) @@ -4511,20 +4674,6 @@ def CheckIncludeLine(filename, clean_lines, linenum, include_state, error): 'Include "%s" not in alphabetical order' % include) include_state.SetLastHeader(canonical_include) - # Look for any of the stream classes that are part of standard C++. - match = _RE_PATTERN_INCLUDE.match(line) - if match: - include = match.group(2) - if Match(r'(f|ind|io|i|o|parse|pf|stdio|str|)?stream$', include): - # Many unit tests use cout, so we exempt them. - if not _IsTestFilename(filename): - # Suggest a different header for ostream - if include == 'ostream': - error(filename, linenum, 'readability/streams', 3, - 'For logging, include "base/logging.h" instead of <ostream>.') - else: - error(filename, linenum, 'readability/streams', 3, - 'Streams are highly discouraged.') def _GetTextInside(text, start_pattern): @@ -4755,25 +4904,6 @@ def CheckLanguage(filename, clean_lines, linenum, file_extension, 'Do not use variable-length arrays. Use an appropriately named ' "('k' followed by CamelCase) compile-time constant for the size.") - # If DISALLOW_COPY_AND_ASSIGN DISALLOW_IMPLICIT_CONSTRUCTORS is present, - # then it should be the last thing in the class declaration. - match = Match( - (r'\s*' - r'(DISALLOW_(COPY_AND_ASSIGN|IMPLICIT_CONSTRUCTORS))' - r'\(.*\);$'), - line) - if match and linenum + 1 < clean_lines.NumLines(): - next_line = clean_lines.elided[linenum + 1] - # We allow some, but not all, declarations of variables to be present - # in the statement that defines the class. The [\w\*,\s]* fragment of - # the regular expression below allows users to declare instances of - # the class or pointers to instances, but not less common types such - # as function pointers or arrays. It's a tradeoff between allowing - # reasonable code and avoiding trying to parse more C++ using regexps. - if not Search(r'^\s*}[\w\*,\s]*;', next_line): - error(filename, linenum, 'readability/constructors', 3, - match.group(1) + ' should be the last thing in the class') - # Check for use of unnamed namespaces in header files. Registration # macros are typically OK, so we allow use of "namespace {" on lines # that end with backslashes. @@ -4889,6 +5019,22 @@ def IsDerivedFunction(clean_lines, linenum): return False +def IsOutOfLineMethodDefinition(clean_lines, linenum): + """Check if current line contains an out-of-line method definition. + + Args: + clean_lines: A CleansedLines instance containing the file. + linenum: The number of the line to check. + Returns: + True if current line contains an out-of-line method definition. + """ + # Scan back a few lines for start of current function + for i in xrange(linenum, max(-1, linenum - 10), -1): + if Match(r'^([^()]*\w+)\(', clean_lines.elided[i]): + return Match(r'^[^()]*\w+::\w+\(', clean_lines.elided[i]) is not None + return False + + def IsInitializerList(clean_lines, linenum): """Check if current line is inside constructor initializer list. @@ -4957,6 +5103,11 @@ def CheckForNonConstReference(filename, clean_lines, linenum, if IsDerivedFunction(clean_lines, linenum): return + # Don't warn on out-of-line method definitions, as we would warn on the + # in-line declaration, if it isn't marked with 'override'. + if IsOutOfLineMethodDefinition(clean_lines, linenum): + return + # Long type names may be broken across multiple lines, usually in one # of these forms: # LongType @@ -5152,9 +5303,9 @@ def CheckCasts(filename, clean_lines, linenum, error): # This is not a cast: # reference_type&(int* function_param); match = Search( - r'(?:[^\w]&\(([^)]+)\)[\w(])|' + r'(?:[^\w]&\(([^)*][^)]*)\)[\w(])|' r'(?:[^\w]&(static|dynamic|down|reinterpret)_cast\b)', line) - if match and match.group(1) != '*': + if match: # Try a better error message when the & is bound to something # dereferenced by the casted pointer, as opposed to the casted # pointer itself. @@ -5235,6 +5386,7 @@ def CheckCStyleCast(filename, clean_lines, linenum, cast_type, pattern, error): # ExceptionMember(int) throw (...); # ExceptionMember(int) throw (...) { # PureVirtual(int) = 0; + # [](int) -> bool { # # These are functions of some sort, where the compiler would be fine # if they had named parameters, but people often omit those @@ -5246,7 +5398,7 @@ def CheckCStyleCast(filename, clean_lines, linenum, cast_type, pattern, error): # <TemplateArgument(int)>; # <(FunctionPointerTemplateArgument)(int)>; remainder = line[match.end(0):] - if Match(r'^\s*(?:;|const\b|throw\b|final\b|override\b|[=>{),])', + if Match(r'^\s*(?:;|const\b|throw\b|final\b|override\b|[=>{),]|->)', remainder): # Looks like an unnamed parameter. @@ -5335,6 +5487,7 @@ _HEADERS_CONTAINING_TEMPLATES = ( ('<set>', ('set', 'multiset',)), ('<stack>', ('stack',)), ('<string>', ('char_traits', 'basic_string',)), + ('<tuple>', ('tuple',)), ('<utility>', ('pair',)), ('<vector>', ('vector',)), @@ -5602,9 +5755,21 @@ def CheckRedundantVirtual(filename, clean_lines, linenum, error): """ # Look for "virtual" on current line. line = clean_lines.elided[linenum] - virtual = Match(r'^(.*\bvirtual\b)', line) + virtual = Match(r'^(.*)(\bvirtual\b)(.*)$', line) if not virtual: return + # Ignore "virtual" keywords that are near access-specifiers. These + # are only used in class base-specifier and do not apply to member + # functions. + if (Search(r'\b(public|protected|private)\s+$', virtual.group(1)) or + Match(r'^\s+(public|protected|private)\b', virtual.group(3))): + return + + # Ignore the "virtual" keyword from virtual base classes. Usually + # there is a column on the same line in these cases (virtual base + # classes are rare in google3 because multiple inheritance is rare). + if Match(r'^.*[^:]:[^:].*$', line): return + # Look for the next opening parenthesis. This is the start of the # parameter list (possibly on the next line shortly after virtual). # TODO(unknown): doesn't work if there are virtual functions with @@ -5612,7 +5777,7 @@ def CheckRedundantVirtual(filename, clean_lines, linenum, error): # that this is rare. end_col = -1 end_line = -1 - start_col = len(virtual.group(1)) + start_col = len(virtual.group(2)) for start_line in xrange(linenum, min(linenum + 3, clean_lines.NumLines())): line = clean_lines.elided[start_line][start_col:] parameter_list = Match(r'^([^(]*)\(', line) @@ -5652,9 +5817,21 @@ def CheckRedundantOverrideOrFinal(filename, clean_lines, linenum, error): linenum: The number of the line to check. error: The function to call with any errors found. """ - # Check that at most one of "override" or "final" is present, not both + # Look for closing parenthesis nearby. We need one to confirm where + # the declarator ends and where the virt-specifier starts to avoid + # false positives. line = clean_lines.elided[linenum] - if Search(r'\boverride\b', line) and Search(r'\bfinal\b', line): + declarator_end = line.rfind(')') + if declarator_end >= 0: + fragment = line[declarator_end:] + else: + if linenum > 1 and clean_lines.elided[linenum - 1].rfind(')') >= 0: + fragment = line + else: + return + + # Check that at most one of "override" or "final" is present, not both + if Search(r'\boverride\b', fragment) and Search(r'\bfinal\b', fragment): error(filename, linenum, 'readability/inheritance', 4, ('"override" is redundant since function is ' 'already declared as "final"')) @@ -5809,9 +5986,6 @@ def FlagCxx11Features(filename, clean_lines, linenum, error): # type_traits 'alignment_of', 'aligned_union', - - # utility - 'forward', ): if Search(r'\bstd::%s\b' % top_name, line): error(filename, linenum, 'build/c++11', 5, @@ -5846,11 +6020,12 @@ def ProcessFileData(filename, file_extension, lines, error, CheckForCopyright(filename, lines, error) - if file_extension == 'h': - CheckForHeaderGuard(filename, lines, error) - RemoveMultiLineComments(filename, lines, error) clean_lines = CleansedLines(lines) + + if file_extension == 'h': + CheckForHeaderGuard(filename, clean_lines, error) + for line in xrange(clean_lines.NumLines()): ProcessLine(filename, file_extension, clean_lines, line, include_state, function_state, nesting_state, error, @@ -5859,6 +6034,10 @@ def ProcessFileData(filename, file_extension, lines, error, nesting_state.CheckCompletedBlocks(filename, error) CheckForIncludeWhatYouUse(filename, clean_lines, include_state, error) + + # Check that the .cc file has included its header if it exists. + if file_extension == 'cc': + CheckHeaderFileIncluded(filename, include_state, error) # We check here rather than inside ProcessLine so that we see raw # lines rather than "cleaned" lines. @@ -6136,8 +6315,9 @@ def main(): for filename in filenames: ProcessFile(filename, _cpplint_state.verbose_level) _cpplint_state.PrintErrorCounts() - print("erreur=", _cpplint_state.error_count) - sys.exit(_cpplint_state.error_count) + # VR fix - otherwise all cpplint are errors from script launch + # sys.exit(_cpplint_state.error_count > 0) + sys.exit(0) if __name__ == '__main__': diff --git a/scripts/cpplint_to_cppcheckxml.py b/scripts/cpplint_to_cppcheckxml.py new file mode 100755 index 00000000..7a3813c7 --- /dev/null +++ b/scripts/cpplint_to_cppcheckxml.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python + +# Convert output from Google's cpplint.py to the cppcheck XML format for +# consumption by the Jenkins cppcheck plugin. + +# Reads from stdin and writes to stderr (to mimic cppcheck) + + +import sys +import re +import cgi + +def cpplint_score_to_cppcheck_severity(score): + # I'm making this up + if score == 1: + return 'style' + elif score == 2: + return 'style' + elif score == 3: + return 'warning' + elif score == 4: + return 'warning' + elif score == 5: + return 'error' + + +def parse(): + # TODO: do this properly, using the xml module. + # Write header + sys.stderr.write('''<?xml version="1.0" encoding="UTF-8"?>\n''') + # VR : sys.stderr.write('''<results>\n''') + # Add from VR + [ + sys.stderr.write('''<results version="2">\n''') + sys.stderr.write(''' <cppcheck version="1.63"/>\n''') + sys.stderr.write(''' <errors>\n''') + # -] + + # Do line-by-line conversion + r = re.compile('([^:]*):([0-9]*): ([^\[]*)\[([^\]]*)\] \[([0-9]*)\].*') + + for l in sys.stdin.readlines(): + m = r.match(l.strip()) + if not m: + continue + g = m.groups() + if len(g) != 5: + continue + fname, lineno, msg, label, score = g + severity = cpplint_score_to_cppcheck_severity(int(score)) + # VR : sys.stderr.write('''<error file="%s" line="%s" id="%s" severity="%s" msg="%s"/>\n'''%(fname, lineno, label, severity, msg)) + # Add from VR + [ + sys.stderr.write(''' <error id="%s" severity="%s" msg="%s">\n'''%(label, severity, cgi.escape(msg,quote=True))) + sys.stderr.write(''' <location file="%s" line="%s"/>\n'''%(fname, lineno)) + sys.stderr.write(''' </error>\n''') + # -] + + # Write footer + # Add from VR + [ + sys.stderr.write(''' </errors>\n''') + # -] + sys.stderr.write('''</results>\n''') + + +if __name__ == '__main__': + parse() + diff --git a/scripts/generate_version.sh b/scripts/generate_version.sh index 1a8ce4ab..4d28cf53 100755 --- a/scripts/generate_version.sh +++ b/scripts/generate_version.sh @@ -62,6 +62,10 @@ do then # SPECIFIC FOR CMAKE MODULES cp -R $ROOT_DIR/src/$package $VERSION_DIR + elif [ "$package" == "GudhUI" ] + then + # SPECIFIC FOR GUDHI USER INTERFACE + cp -R $ROOT_DIR/src/$package $VERSION_DIR else # PACKAGE COPY if [ -d "$ROOT_DIR/src/$package$PACKAGE_INC_DIR" ] diff --git a/src/Bottleneck/include/gudhi/Persistence_diagrams_graph.h b/src/Bottleneck/include/gudhi/Persistence_diagrams_graph.h index 7e278209..73ad940b 100644 --- a/src/Bottleneck/include/gudhi/Persistence_diagrams_graph.h +++ b/src/Bottleneck/include/gudhi/Persistence_diagrams_graph.h @@ -34,7 +34,7 @@ namespace Gudhi { namespace bottleneck { // Diagram_point is the type of the persistence diagram's points -typedef typename std::pair<double, double> Diagram_point; +typedef std::pair<double, double> Diagram_point; // Return the used index for encoding none of the points int null_point_index(); @@ -81,7 +81,7 @@ Persistence_diagrams_graph::Persistence_diagrams_graph(Persistence_diagram1& dia swap(u, v); } -Persistence_diagrams_graph::Persistence_diagrams_graph::Persistence_diagrams_graph() +Persistence_diagrams_graph::Persistence_diagrams_graph() : u(), v() { } inline bool Persistence_diagrams_graph::on_the_u_diagonal(int u_point_index) const { @@ -108,7 +108,7 @@ inline double Persistence_diagrams_graph::distance(int u_point_index, int v_poin return 0; Diagram_point p_u = get_u_point(u_point_index); Diagram_point p_v = get_v_point(v_point_index); - return std::max(std::fabs(p_u.first - p_v.first), std::fabs(p_u.second - p_v.second)); + return (std::max)(std::fabs(p_u.first - p_v.first), std::fabs(p_u.second - p_v.second)); } inline int Persistence_diagrams_graph::size() const { diff --git a/src/Bottleneck/test/CMakeLists.txt b/src/Bottleneck/test/CMakeLists.txt index 7044372e..3dfd80cd 100644 --- a/src/Bottleneck/test/CMakeLists.txt +++ b/src/Bottleneck/test/CMakeLists.txt @@ -1,21 +1,25 @@ cmake_minimum_required(VERSION 2.6) -project(GUDHIBottleneckUnitTest) +project(GUDHIBottleneckUT) -if(NOT MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} --coverage") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} --coverage") +if (GCOVR_PATH) + # for gcovr to make coverage reports - Corbera Jenkins plugin + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage") +endif() +if (GPROF_PATH) + # for gprof to make coverage reports - Jenkins + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -pg") endif() -add_executable ( BottleneckUnitTest bottleneck_unit_test.cpp ) -target_link_libraries(BottleneckUnitTest ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +add_executable ( BottleneckUT bottleneck_unit_test.cpp ) +target_link_libraries(BottleneckUT ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) # Unitary tests -add_test(BottleneckUnitTest ${CMAKE_CURRENT_BINARY_DIR}/BottleneckUnitTest) - -if (LCOV_PATH) - # Lcov code coverage of unitary test - add_test(src/Bottleneck/lcov/coverage.log ${CMAKE_SOURCE_DIR}/scripts/check_code_coverage.sh ${CMAKE_SOURCE_DIR}/src/Bottleneck) -endif() +add_test(NAME BottleneckUT + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/BottleneckUT + # XML format for Jenkins xUnit plugin + --log_format=XML --log_sink=${CMAKE_SOURCE_DIR}/BottleneckUT.xml --log_level=test_suite --report_level=no) -cpplint_add_tests("${CMAKE_SOURCE_DIR}/src/Bottleneck/include/gudhi") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e2271efd..7b30f77a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,25 +10,32 @@ if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") endif() if(MSVC) - SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267 /wd4668 /wd4311 /wd4800 /wd4820 /wd4503 /wd4244 /wd4345 /wd4996 /wd4396 /wd4018") + SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267 /wd4668 /wd4311 /wd4800 /wd4820 /wd4503 /wd4244 /wd4345 /wd4996 /wd4396 /wd4018") else() - list(APPEND CMAKE_CXX_FLAGS "-std=c++11") -endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +endif() -# BOOST ISSUE result_of vs C++11 -add_definitions(-DBOOST_RESULT_OF_USE_DECLTYPE) +set(Boost_USE_STATIC_LIBS ON) +set(Boost_USE_MULTITHREADED ON) +set(Boost_USE_STATIC_RUNTIME OFF) -find_package(Boost) +find_package(Boost) find_package(GMP) if(GMP_FOUND) - find_package(GMPXX) + find_package(GMPXX) endif() + find_package(CGAL) if(NOT Boost_FOUND) message(FATAL_ERROR "NOTICE: This demo requires Boost and will not be compiled.") else() - INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) + # BOOST ISSUE result_of vs C++11 + add_definitions(-DBOOST_RESULT_OF_USE_DECLTYPE) + # BOOST ISSUE with Libraries name resolution under Windows + add_definitions(-DBOOST_ALL_NO_LIB) + + INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) include_directories(include/) @@ -41,4 +48,10 @@ else() add_subdirectory(example/Alpha_complex) add_subdirectory(example/Bottleneck) + # GudhUI + add_subdirectory(GudhUI) + + # data points generator + add_subdirectory(data/points/generator) + endif() diff --git a/src/Contraction/example/Garland_heckbert.cpp b/src/Contraction/example/Garland_heckbert.cpp index 5b178ff9..a41f65aa 100644 --- a/src/Contraction/example/Garland_heckbert.cpp +++ b/src/Contraction/example/Garland_heckbert.cpp @@ -7,7 +7,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 INRIA Sophia Antipolis-M�diterran�e (France) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -42,72 +42,70 @@ using namespace Gudhi; using namespace skbl; using namespace contraction; - -struct Geometry_trait{ - typedef Point_d Point; +struct Geometry_trait { + typedef Point_d Point; }; /** * The vertex stored in the complex contains a quadric. */ struct Garland_heckbert_traits : public Skeleton_blocker_simple_geometric_traits<Geometry_trait> { + public: -public: - struct Garland_heckbert_vertex : public Simple_geometric_vertex{ - Error_quadric<Geometry_trait::Point> quadric; - }; - typedef Garland_heckbert_vertex Graph_vertex; + struct Garland_heckbert_vertex : public Simple_geometric_vertex { + Error_quadric<Geometry_trait::Point> quadric; + }; + typedef Garland_heckbert_vertex Graph_vertex; }; typedef Skeleton_blocker_geometric_complex< Garland_heckbert_traits > Complex; typedef Edge_profile<Complex> EdgeProfile; typedef Skeleton_blocker_contractor<Complex> Complex_contractor; - /** * How the new vertex is placed after an edge collapse : here it is placed at * the point minimizing the cost of the quadric. */ -class GH_placement : public Gudhi::contraction::Placement_policy<EdgeProfile>{ - Complex& complex_; -public: - typedef typename Gudhi::contraction::Placement_policy<EdgeProfile>::Placement_type Placement_type; - - GH_placement(Complex& complex):complex_(complex){} - - Placement_type operator()(const EdgeProfile& profile) const override{ - auto sum_quad(profile.v0().quadric); - sum_quad += profile.v1().quadric; - - boost::optional<Point> min_quadric_pt(sum_quad.min_cost()); - if (min_quadric_pt) - return Placement_type(*min_quadric_pt); - else - return profile.p0(); - } +class GH_placement : public Gudhi::contraction::Placement_policy<EdgeProfile> { + Complex& complex_; + public: + typedef Gudhi::contraction::Placement_policy<EdgeProfile>::Placement_type Placement_type; + + GH_placement(Complex& complex) : complex_(complex) { } + + Placement_type operator()(const EdgeProfile& profile) const override { + auto sum_quad(profile.v0().quadric); + sum_quad += profile.v1().quadric; + + boost::optional<Point> min_quadric_pt(sum_quad.min_cost()); + if (min_quadric_pt) + return Placement_type(*min_quadric_pt); + else + return profile.p0(); + } }; /** * How much cost an edge collapse : here the costs is given by a quadric * which expresses a squared distances with triangles planes. */ -class GH_cost : public Gudhi::contraction::Cost_policy<EdgeProfile>{ - Complex& complex_; -public: - - typedef typename Gudhi::contraction::Cost_policy<EdgeProfile>::Cost_type Cost_type; - - GH_cost(Complex& complex):complex_(complex){} - - Cost_type operator()( EdgeProfile const& profile, boost::optional<Point> const& new_point ) const override { - Cost_type res; - if (new_point){ - auto sum_quad(profile.v0().quadric); - sum_quad += profile.v1().quadric; - res = sum_quad.cost(*new_point); - } - return res; - } +class GH_cost : public Gudhi::contraction::Cost_policy<EdgeProfile> { + Complex& complex_; + public: + + typedef Gudhi::contraction::Cost_policy<EdgeProfile>::Cost_type Cost_type; + + GH_cost(Complex& complex) : complex_(complex) { } + + Cost_type operator()(EdgeProfile const& profile, boost::optional<Point> const& new_point) const override { + Cost_type res; + if (new_point) { + auto sum_quad(profile.v0().quadric); + sum_quad += profile.v1().quadric; + res = sum_quad.cost(*new_point); + } + return res; + } }; /** @@ -115,79 +113,80 @@ public: * Here we initializes the quadrics of every vertex at the on_started call back * and we update them when contracting an edge (the quadric become the sum of both quadrics). */ -class GH_visitor: public Gudhi::contraction::Contraction_visitor<EdgeProfile> { - Complex& complex_; -public: - GH_visitor(Complex& complex):complex_(complex){} - - //Compute quadrics for every vertex v - //The quadric of v consists in the sum of quadric - //of every triangles passing through v weighted by its area - void on_started(Complex & complex) override{ - for(auto v : complex.vertex_range()){ - auto & quadric_v(complex[v].quadric); - for(auto t : complex.triangle_range(v)){ - auto t_it = t.begin(); - const auto& p0(complex.point(*t_it++)); - const auto& p1(complex.point(*t_it++)); - const auto& p2(complex.point(*t_it++)); - quadric_v+=Error_quadric<Point>(p0,p1,p2); - } - } - } - - /** - * @brief Called when an edge is about to be contracted and replaced by a vertex whose position is *placement. - */ - void on_contracting(EdgeProfile const &profile, boost::optional< Point > placement) - override{ - profile.v0().quadric += profile.v1().quadric; - } +class GH_visitor : public Gudhi::contraction::Contraction_visitor<EdgeProfile> { + Complex& complex_; + public: + + GH_visitor(Complex& complex) : complex_(complex) { } + + //Compute quadrics for every vertex v + //The quadric of v consists in the sum of quadric + //of every triangles passing through v weighted by its area + + void on_started(Complex & complex) override { + for (auto v : complex.vertex_range()) { + auto & quadric_v(complex[v].quadric); + for (auto t : complex.triangle_range(v)) { + auto t_it = t.begin(); + const auto& p0(complex.point(*t_it++)); + const auto& p1(complex.point(*t_it++)); + const auto& p2(complex.point(*t_it++)); + quadric_v += Error_quadric<Point>(p0, p1, p2); + } + } + } + + /** + * @brief Called when an edge is about to be contracted and replaced by a vertex whose position is *placement. + */ + void on_contracting(EdgeProfile const &profile, boost::optional< Point > placement) + override { + profile.v0().quadric += profile.v1().quadric; + } }; +int main(int argc, char *argv[]) { + if (argc != 4) { + std::cerr << "Usage " << argv[0] << " input.off output.off N to load the file input.off, contract N edges and save the result to output.off.\n"; + return EXIT_FAILURE; + } -int main(int argc, char *argv[]){ - if (argc!=4){ - std::cerr << "Usage "<<argv[0]<<" input.off output.off N to load the file input.off, contract N edges and save the result to output.off.\n"; - return EXIT_FAILURE; - } - - Complex complex; + Complex complex; - // load the points - Skeleton_blocker_off_reader<Complex> off_reader(argv[1],complex); - if(!off_reader.is_valid()){ - std::cerr << "Unable to read file:"<<argv[1]<<std::endl; - return EXIT_FAILURE; - } + // load the points + Skeleton_blocker_off_reader<Complex> off_reader(argv[1], complex); + if (!off_reader.is_valid()) { + std::cerr << "Unable to read file:" << argv[1] << std::endl; + return EXIT_FAILURE; + } - std::cout << "Load complex with "<<complex.num_vertices()<<" vertices"<<std::endl; + std::cout << "Load complex with " << complex.num_vertices() << " vertices" << std::endl; - int num_contractions = atoi(argv[3]); + int num_contractions = atoi(argv[3]); - boost::timer::auto_cpu_timer t; + boost::timer::auto_cpu_timer t; - // constructs the contractor object with Garland Heckbert policies. - Complex_contractor contractor(complex, - new GH_cost(complex), - new GH_placement(complex), - contraction::make_link_valid_contraction<EdgeProfile>(), - new GH_visitor(complex) - ); + // constructs the contractor object with Garland Heckbert policies. + Complex_contractor contractor(complex, + new GH_cost(complex), + new GH_placement(complex), + contraction::make_link_valid_contraction<EdgeProfile>(), + new GH_visitor(complex) + ); - std::cout<<"Contract "<<num_contractions<<" edges"<<std::endl; - contractor.contract_edges(num_contractions); + std::cout << "Contract " << num_contractions << " edges" << std::endl; + contractor.contract_edges(num_contractions); - std::cout << "Final complex has "<< - complex.num_vertices()<<" vertices, "<< - complex.num_edges()<<" edges and" << - complex.num_triangles()<<" triangles."<<std::endl; + std::cout << "Final complex has " << + complex.num_vertices() << " vertices, " << + complex.num_edges() << " edges and" << + complex.num_triangles() << " triangles." << std::endl; - //write simplified complex - Skeleton_blocker_off_writer<Complex> off_writer(argv[2],complex); + //write simplified complex + Skeleton_blocker_off_writer<Complex> off_writer(argv[2], complex); - return EXIT_SUCCESS; + return EXIT_SUCCESS; } diff --git a/src/Contraction/example/Garland_heckbert/Error_quadric.h b/src/Contraction/example/Garland_heckbert/Error_quadric.h index 725a3a56..725a3a56 100755..100644 --- a/src/Contraction/example/Garland_heckbert/Error_quadric.h +++ b/src/Contraction/example/Garland_heckbert/Error_quadric.h diff --git a/src/GudhUI/CMakeLists.txt b/src/GudhUI/CMakeLists.txt index b62be8ff..ddbae969 100644 --- a/src/GudhUI/CMakeLists.txt +++ b/src/GudhUI/CMakeLists.txt @@ -1,82 +1,69 @@ cmake_minimum_required(VERSION 2.8) project(GudhUI) -#Specify Gudhi's path here -#for instance -#set(Gudhi_Path "C:/Users/dsalinas/Documents/Recherche/Code/c++/Gudhi_library_1.1.0/include") -set(Gudhi_Path "/home/dsalinas/Documents/CodeSVN/gudhi/src/include") -if(MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267 /wd4668 /wd4311 /wd4800 /wd4820 /wd4503 /wd4244 /wd4345 /wd4996 /wd4396 /wd4018 -frounding-math") -else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -pedantic -frounding-math") -endif() - -set(EXECUTABLE_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE}) - -find_package(Boost REQUIRED COMPONENTS) find_package(CGAL COMPONENTS Qt4) find_package(Qt4) find_package(QGLViewer) find_package(OpenGL) +message("CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}") +message("CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}") +message("CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE}") if ( CGAL_FOUND AND QT4_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND ) - set( QT_USE_QTXML TRUE ) - set( QT_USE_QTMAIN TRUE ) - set( QT_USE_QTSCRIPT TRUE ) - set( QT_USE_QTOPENGL TRUE ) - SET(Boost_USE_STATIC_LIBS ON) - SET(Boost_USE_MULTITHREAD OFF) - - INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) - LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) - - include(${QT_USE_FILE}) - include(${CGAL_USE_FILE}) - - include_directories (${QGLVIEWER_INCLUDE_DIR}) - include_directories(.) - include_directories(${Gudhi_Path}) + set( QT_USE_QTXML TRUE ) + set( QT_USE_QTMAIN TRUE ) + set( QT_USE_QTSCRIPT TRUE ) + set( QT_USE_QTOPENGL TRUE ) + SET(Boost_USE_STATIC_LIBS ON) + SET(Boost_USE_MULTITHREAD OFF) + INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) + LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) + + include(${QT_USE_FILE}) + include(${CGAL_USE_FILE}) + include_directories (${QGLVIEWER_INCLUDE_DIR}) + include_directories(.) - # qt : ui file, created wih Qt Designer ############### - set(CMAKE_CURRENT_BINARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/gui") - qt4_wrap_ui( uis - gui/main_window.ui - gui/MenuEdgeContraction.ui - gui/KNearestNeighborsMenu.ui - gui/UniformNeighborsMenu.ui - gui/PersistenceMenu.ui - ) + # qt : ui file, created wih Qt Designer ############### + set(CMAKE_CURRENT_BINARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/gui") + qt4_wrap_ui( uis + gui/main_window.ui + gui/MenuEdgeContraction.ui + gui/KNearestNeighborsMenu.ui + gui/UniformNeighborsMenu.ui + gui/PersistenceMenu.ui + ) - set(CMAKE_CURRENT_BINARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/gui") - qt4_automoc( - gui/MainWindow.cpp - gui/Menu_k_nearest_neighbors.cpp - gui/Menu_uniform_neighbors.cpp - gui/Menu_edge_contraction.cpp - gui/Menu_persistence.cpp - ) + set(CMAKE_CURRENT_BINARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/gui") + qt4_automoc( + gui/MainWindow.cpp + gui/Menu_k_nearest_neighbors.cpp + gui/Menu_uniform_neighbors.cpp + gui/Menu_edge_contraction.cpp + gui/Menu_persistence.cpp + ) - set(CMAKE_CURRENT_BINARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/view") - qt4_automoc(view/Viewer_instructor.cpp - view/Viewer.cpp - ) - ##################################################################### + set(CMAKE_CURRENT_BINARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/view") + qt4_automoc(view/Viewer_instructor.cpp + view/Viewer.cpp + ) + ##################################################################### - add_executable ( GudhUI - gui/gudhui.cpp - gui/MainWindow.cpp - gui/Menu_k_nearest_neighbors.cpp - gui/Menu_uniform_neighbors.cpp - gui/Menu_edge_contraction.cpp - gui/Menu_persistence.cpp - view/Viewer_instructor.cpp - view/Viewer.cpp - ${uis} - ) + add_executable ( GudhUI + gui/gudhui.cpp + gui/MainWindow.cpp + gui/Menu_k_nearest_neighbors.cpp + gui/Menu_uniform_neighbors.cpp + gui/Menu_edge_contraction.cpp + gui/Menu_persistence.cpp + view/Viewer_instructor.cpp + view/Viewer.cpp + ${uis} + ) - target_link_libraries( GudhUI ${QT_LIBRARIES} ${QGLVIEWER_LIBRARIES} ) - target_link_libraries( GudhUI ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) + target_link_libraries( GudhUI ${QT_LIBRARIES} ${QGLVIEWER_LIBRARIES} ) + target_link_libraries( GudhUI ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) else() message(STATUS "NOTICE: This demo requires CGAL, the QGLViewer, OpenGL and Qt4, and will not be compiled.") diff --git a/src/GudhUI/model/Model.h b/src/GudhUI/model/Model.h index 6ac971d0..87545989 100644 --- a/src/GudhUI/model/Model.h +++ b/src/GudhUI/model/Model.h @@ -72,8 +72,6 @@ class Model{ public: Complex complex_; typedef Complex::Vertex_handle Vertex_handle; - typedef Complex::CVI CVI; - Model():complex_(){ } @@ -317,7 +315,7 @@ private: void run_chomp(){ save_complex_in_file_for_chomp(); std::cout << "Call CHOMP library\n"; - system("../src/utils/homsimpl chomp.sim"); + system("utils/homsimpl chomp.sim"); } void save_complex_in_file_for_chomp(){ diff --git a/src/GudhUI/view/Viewer.h b/src/GudhUI/view/Viewer.h index 5639aa56..5639aa56 100755..100644 --- a/src/GudhUI/view/Viewer.h +++ b/src/GudhUI/view/Viewer.h diff --git a/src/GudhUI/view/Viewer_instructor.h b/src/GudhUI/view/Viewer_instructor.h index 9a2a236b..9a2a236b 100755..100644 --- a/src/GudhUI/view/Viewer_instructor.h +++ b/src/GudhUI/view/Viewer_instructor.h diff --git a/src/Persistent_cohomology/example/CMakeLists.txt b/src/Persistent_cohomology/example/CMakeLists.txt index 3697a419..9487cce6 100644 --- a/src/Persistent_cohomology/example/CMakeLists.txt +++ b/src/Persistent_cohomology/example/CMakeLists.txt @@ -9,7 +9,6 @@ if (NOT MSVC) add_executable(rips_persistence rips_persistence.cpp) target_link_libraries(rips_persistence ${Boost_SYSTEM_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY}) - add_test(rips_persistence_2 ${CMAKE_CURRENT_BINARY_DIR}/rips_persistence ${CMAKE_SOURCE_DIR}/data/points/Kl.txt -r 0.25 -d 3 -p 2 -m 100) add_test(rips_persistence_3 ${CMAKE_CURRENT_BINARY_DIR}/rips_persistence ${CMAKE_SOURCE_DIR}/data/points/Kl.txt -r 0.25 -d 3 -p 3 -m 100) add_executable(persistence_from_file persistence_from_file.cpp) @@ -23,14 +22,14 @@ if (NOT MSVC) add_executable(rips_multifield_persistence rips_multifield_persistence.cpp ) target_link_libraries(rips_multifield_persistence ${Boost_SYSTEM_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${GMPXX_LIBRARIES} ${GMP_LIBRARIES}) - add_test(rips_multifield_persistence_2_3 ${CMAKE_CURRENT_BINARY_DIR}/rips_multifield_persistence ${CMAKE_SOURCE_DIR}/data/points/Kl.txt -r 0.25 -d 3 -p 2 -q 3 -m 100) add_test(rips_multifield_persistence_2_71 ${CMAKE_CURRENT_BINARY_DIR}/rips_multifield_persistence ${CMAKE_SOURCE_DIR}/data/points/Kl.txt -r 0.25 -d 3 -p 2 -q 71 -m 100) add_executable ( performance_rips_persistence performance_rips_persistence.cpp ) target_link_libraries(performance_rips_persistence ${Boost_SYSTEM_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${GMPXX_LIBRARIES} ${GMP_LIBRARIES}) if(CGAL_FOUND) - add_definitions(-DDEBUG_TRACES) + # uncomment to display debug traces + # add_definitions(-DDEBUG_TRACES) add_executable(alpha_shapes_persistence alpha_shapes_persistence.cpp) target_link_libraries(alpha_shapes_persistence ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIBRARIES} ${GMP_LIBRARIES} ${CGAL_LIBRARY}) add_test(alpha_shapes_persistence_2_0_5 ${CMAKE_CURRENT_BINARY_DIR}/alpha_shapes_persistence ${CMAKE_SOURCE_DIR}/data/points/bunny_5000 2 0.5) diff --git a/src/Persistent_cohomology/example/rips_multifield_persistence.cpp b/src/Persistent_cohomology/example/rips_multifield_persistence.cpp index 2505897e..297a8f98 100644 --- a/src/Persistent_cohomology/example/rips_multifield_persistence.cpp +++ b/src/Persistent_cohomology/example/rips_multifield_persistence.cpp @@ -70,8 +70,6 @@ int main (int argc, char * argv[]) st.insert_graph(prox_graph); // insert the proximity graph in the simplex tree st.expansion( dim_max ); // expand the graph until dimension dim_max - std::cout << "st=" << st << std::endl; - // Sort the simplices in the order of the filtration st.initialize_filtration(); diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h index c42e4be4..b0d68f09 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h @@ -238,8 +238,8 @@ class Persistent_cohomology { transverse_idx_(), // key -> row persistent_pairs_(), interval_length_policy(&cpx, 0), - column_pool_(new boost::object_pool<Column>()), // memory pools for the CAM - cell_pool_(new boost::object_pool<Cell>()) { + column_pool_(), // memory pools for the CAM + cell_pool_() { Simplex_key idx_fil = 0; for (auto & sh : cpx_->filtration_simplex_range()) { cpx_->assign_key(sh, idx_fil); @@ -273,9 +273,6 @@ class Persistent_cohomology { transverse_ref.second.row_->clear(); delete transverse_ref.second.row_; } -// Clear the memory pools - delete column_pool_; - delete cell_pool_; } private: @@ -528,8 +525,8 @@ class Persistent_cohomology { Arith_element charac) { Simplex_key key = cpx_->key(sigma); // Create a column containing only one cell, - Column * new_col = column_pool_->construct(Column(key)); - Cell * new_cell = cell_pool_->construct(Cell(key, x, new_col)); + Column * new_col = column_pool_.construct(Column(key)); + Cell * new_cell = cell_pool_.construct(Cell(key, x, new_col)); new_col->col_.push_back(*new_cell); // and insert it in the matrix, in constant time thanks to the hint cam_.end(). // Indeed *new_col has the biggest lexicographic value because key is the @@ -585,7 +582,7 @@ class Persistent_cohomology { if (curr_col->col_.empty()) { // If the column is null ds_repr_[curr_col->class_key_] = NULL; - column_pool_->free(curr_col); // delete curr_col; + column_pool_.destroy(curr_col); // delete curr_col; } else { // Find whether the column obtained is already in the CAM result_insert_cam = cam_.insert(*curr_col); @@ -602,7 +599,7 @@ class Persistent_cohomology { Simplex_key key_tmp = dsets_.find_set(curr_col->class_key_); ds_repr_[key_tmp] = &(*(result_insert_cam.first)); result_insert_cam.first->class_key_ = key_tmp; - column_pool_->free(curr_col); // delete curr_col; + column_pool_.destroy(curr_col); // delete curr_col; } } } else { @@ -634,7 +631,7 @@ class Persistent_cohomology { ++target_it; } else { if (target_it->key_ > other_it->first) { - Cell * cell_tmp = cell_pool_->construct(Cell(other_it->first // key + Cell * cell_tmp = cell_pool_.construct(Cell(other_it->first // key , coeff_field_.additive_identity(), &target)); cell_tmp->coefficient_ = coeff_field_.plus_times_equal(cell_tmp->coefficient_, other_it->second, w); @@ -652,8 +649,7 @@ class Persistent_cohomology { Cell * tmp_cell_ptr = &(*tmp_it); target.col_.erase(tmp_it); // removed from column - coeff_field_.clear_coefficient(tmp_cell_ptr->coefficient_); - cell_pool_->free(tmp_cell_ptr); // delete from memory + cell_pool_.destroy(tmp_cell_ptr); // delete from memory } else { ++target_it; ++other_it; @@ -662,7 +658,7 @@ class Persistent_cohomology { } } while (other_it != other.end()) { - Cell * cell_tmp = cell_pool_->construct(Cell(other_it->first, coeff_field_.additive_identity(), &target)); + Cell * cell_tmp = cell_pool_.construct(Cell(other_it->first, coeff_field_.additive_identity(), &target)); cell_tmp->coefficient_ = coeff_field_.plus_times_equal(cell_tmp->coefficient_, other_it->second, w); target.col_.insert(target.col_.end(), *cell_tmp); @@ -767,8 +763,8 @@ class Persistent_cohomology { std::list<Persistent_interval> persistent_pairs_; length_interval interval_length_policy; - boost::object_pool<Column> * column_pool_; - boost::object_pool<Cell> * cell_pool_; + boost::object_pool<Column> column_pool_; + boost::object_pool<Cell> cell_pool_; }; /** @} */ // end defgroup persistent_cohomology diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Field_Zp.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Field_Zp.h index 5d0c9f9f..2349cdac 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Field_Zp.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Field_Zp.h @@ -76,9 +76,6 @@ class Field_Zp { return plus_times_equal(0, y, (Element)w); } - void clear_coefficient(Element x) { - } - Element plus_equal(const Element& x, const Element& y) { return plus_times_equal(x, y, (Element)1); } diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Multi_field.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Multi_field.h index b43bb16e..c6fd5282 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Multi_field.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Multi_field.h @@ -77,6 +77,7 @@ class Multi_field { mpz_nextprime(tmp_prime, tmp_prime); curr_prime = mpz_get_ui(tmp_prime); } + mpz_clear(tmp_prime); // set m to primorial(bound_prime) prod_characteristics_ = 1; for (auto p : primes_) { @@ -102,10 +103,6 @@ class Multi_field { } } - void clear_coefficient(Element & x) { - mpz_clear(x.get_mpz_t()); - } - /** \brief Returns the additive idendity \f$0_{\Bbbk}\f$ of the field.*/ const Element& additive_identity() const { return add_id_all; diff --git a/src/Persistent_cohomology/test/CMakeLists.txt b/src/Persistent_cohomology/test/CMakeLists.txt index 9dc19251..ed63a6ac 100644 --- a/src/Persistent_cohomology/test/CMakeLists.txt +++ b/src/Persistent_cohomology/test/CMakeLists.txt @@ -1,29 +1,39 @@ cmake_minimum_required(VERSION 2.6) -project(GUDHITestSimplexTree) +project(GUDHIPersistentCohomologyUT) -if(NOT MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} --coverage") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} --coverage") +if (GCOVR_PATH) + # for gcovr to make coverage reports - Corbera Jenkins plugin + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage") +endif() +if (GPROF_PATH) + # for gprof to make coverage reports - Jenkins + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -pg") endif() -add_executable ( persistent_cohomology_unit_test persistent_cohomology_unit_test.cpp ) -target_link_libraries(persistent_cohomology_unit_test ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +add_executable ( PersistentCohomologyUT persistent_cohomology_unit_test.cpp ) +target_link_libraries(PersistentCohomologyUT ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) # Unitary tests -add_test(persistent_cohomology_unit_test ${CMAKE_CURRENT_BINARY_DIR}/persistent_cohomology_unit_test ${CMAKE_SOURCE_DIR}/src/Persistent_cohomology/test/simplex_tree_file_for_unit_test.txt) +add_test(NAME PersistentCohomologyUT + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/PersistentCohomologyUT + ${CMAKE_SOURCE_DIR}/src/Persistent_cohomology/test/simplex_tree_file_for_unit_test.txt + # XML format for Jenkins xUnit plugin + --log_format=XML --log_sink=${CMAKE_SOURCE_DIR}/PersistentCohomologyUT.xml --log_level=test_suite --report_level=no) if(GMPXX_FOUND AND GMP_FOUND) - add_executable ( persistent_cohomology_unit_test_multi_field persistent_cohomology_unit_test_multi_field.cpp ) - target_link_libraries(persistent_cohomology_unit_test_multi_field ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} ${GMPXX_LIBRARIES} ${GMP_LIBRARIES}) + add_executable ( PersistentCohomologyMultiFieldUT persistent_cohomology_unit_test_multi_field.cpp ) + target_link_libraries(PersistentCohomologyMultiFieldUT ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} ${GMPXX_LIBRARIES} ${GMP_LIBRARIES}) - # Unitary tests - add_test(persistent_cohomology_unit_test_multi_field ${CMAKE_CURRENT_BINARY_DIR}/persistent_cohomology_unit_test_multi_field ${CMAKE_SOURCE_DIR}/src/Persistent_cohomology/test/simplex_tree_file_for_multi_field_unit_test.txt) -endif() + # Unitary tests + add_test(NAME PersistentCohomologyMultiFieldUT + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/PersistentCohomologyMultiFieldUT + ${CMAKE_SOURCE_DIR}/src/Persistent_cohomology/test/simplex_tree_file_for_multi_field_unit_test.txt + # XML format for Jenkins xUnit plugin + --log_format=XML --log_sink=${CMAKE_SOURCE_DIR}/PersistentCohomologyMultiFieldUT.xml --log_level=test_suite --report_level=no) -if (LCOV_PATH) - # Lcov code coverage of unitary test - add_test(src/Persistent_cohomology/lcov/coverage.log ${CMAKE_SOURCE_DIR}/scripts/check_code_coverage.sh ${CMAKE_SOURCE_DIR}/src/Persistent_cohomology) endif() -cpplint_add_tests("${CMAKE_SOURCE_DIR}/src/Persistent_cohomology/include/gudhi") diff --git a/src/Persistent_cohomology/test/README b/src/Persistent_cohomology/test/README index ddceac63..6c64b5fe 100644 --- a/src/Persistent_cohomology/test/README +++ b/src/Persistent_cohomology/test/README @@ -1,7 +1,9 @@ To compile: *********** +cd /path-to-gudhi/ cmake . +cd /path-to-test/ make To launch with details: @@ -9,13 +11,13 @@ To launch with details: SINGLE FIELD ------------ -./persistent_cohomology_unit_test simplex_tree_file_for_unit_test.txt --report_level=detailed --log_level=all +./PersistentCohomologyUT simplex_tree_file_for_unit_test.txt --report_level=detailed --log_level=all ==> echo $? returns 0 in case of success (non-zero otherwise) MULTI FIELD ----------- -./persistent_cohomology_unit_test_multi_field simplex_tree_file_for_multi_field_unit_test.txt --report_level=detailed --log_level=all +./PersistentCohomologyMultiFieldUT simplex_tree_file_for_multi_field_unit_test.txt --report_level=detailed --log_level=all ==> echo $? returns 0 in case of success (non-zero otherwise) diff --git a/src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp b/src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp index 1e7a74a7..55bc7066 100644 --- a/src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp +++ b/src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp @@ -1,4 +1,4 @@ -#define BOOST_TEST_MODULE const_string test +#define BOOST_TEST_MODULE persistent_cohomology test #include <boost/test/included/unit_test.hpp> #include <boost/system/error_code.hpp> #include <boost/chrono/thread_clock.hpp> @@ -22,8 +22,7 @@ using namespace boost::unit_test; typedef Simplex_tree<> typeST; std::string test_rips_persistence(int coefficient, int min_persistence) { - // Check file name is given as parameter from CMakeLists.txt - BOOST_CHECK(framework::master_test_suite().argc >= 2); + // file name is given as parameter from CMakeLists.txt const std::string inputFile(framework::master_test_suite().argv[1]); std::ifstream simplex_tree_stream; diff --git a/src/Persistent_cohomology/test/persistent_cohomology_unit_test_multi_field.cpp b/src/Persistent_cohomology/test/persistent_cohomology_unit_test_multi_field.cpp index e88add3a..18a4725e 100644 --- a/src/Persistent_cohomology/test/persistent_cohomology_unit_test_multi_field.cpp +++ b/src/Persistent_cohomology/test/persistent_cohomology_unit_test_multi_field.cpp @@ -1,4 +1,4 @@ -#define BOOST_TEST_MODULE const_string test +#define BOOST_TEST_MODULE persistent_cohomology_multi_field test #include <boost/test/included/unit_test.hpp> #include <boost/system/error_code.hpp> #include <boost/chrono/thread_clock.hpp> @@ -23,8 +23,7 @@ using namespace boost::unit_test; typedef Simplex_tree<> typeST; std::string test_rips_persistence(int min_coefficient, int max_coefficient, int min_persistence) { - // Check file name is given as parameter from CMakeLists.txt - BOOST_CHECK(framework::master_test_suite().argc >= 2); + // file name is given as parameter from CMakeLists.txt const std::string inputFile(framework::master_test_suite().argv[1]); std::ifstream simplex_tree_stream; @@ -38,9 +37,9 @@ std::string test_rips_persistence(int min_coefficient, int max_coefficient, int << " - filtration= " << st.filtration() << std::endl; // Check - BOOST_CHECK(st.num_simplices() == 6142604); + BOOST_CHECK(st.num_simplices() == 58); BOOST_CHECK(st.dimension() == 3); - BOOST_CHECK(st.filtration() == 0.249999); + BOOST_CHECK(st.filtration() == 0.4); // Sort the simplices in the order of the filtration st.initialize_filtration(); @@ -48,9 +47,9 @@ std::string test_rips_persistence(int min_coefficient, int max_coefficient, int // Compute the persistence diagram of the complex Persistent_cohomology<Simplex_tree<>, Multi_field> pcoh(st); - pcoh.init_coefficients(min_coefficient, max_coefficient); // initializes the coefficient field for homology + pcoh.init_coefficients(min_coefficient, max_coefficient); // initializes the coefficient field for homology // Check infinite rips - pcoh.compute_persistent_cohomology(min_persistence); // Minimal lifetime of homology feature to be recorded. + pcoh.compute_persistent_cohomology(min_persistence); // Minimal lifetime of homology feature to be recorded. std::ostringstream ossRips; pcoh.output_diagram(ossRips); @@ -60,68 +59,54 @@ std::string test_rips_persistence(int min_coefficient, int max_coefficient, int } void test_rips_persistence_in_dimension(int min_dimension, int max_dimension) { - std::string value0(" 0 0 inf"); - std::string value1(" 1 0.0702103 inf"); - std::string value2("2 1 0.0702103 inf"); - std::string value3("2 2 0.159992 inf"); + // there are 2 discontinued ensembles + std::string value0(" 0 0.25 inf"); + std::string value1(" 1 0.4 inf"); + // And a big hole - cut in 2 pieces after 0.3 + std::string value2(" 0 0.2 0.3"); + + // For dim <= 1 => + std::string value3(" 1 0.25 inf"); + std::string value4(" 2 0.25 inf"); + std::string value5(" 1 0.3 inf"); + std::string value6(" 2 0.3 inf"); + std::string value7(" 2 0.4 inf"); std::cout << "********************************************************************" << std::endl; std::cout << "TEST OF RIPS_PERSISTENT_COHOMOLOGY_MULTI_FIELD MIN_DIM=" << min_dimension << " MAX_DIM=" << max_dimension << " MIN_PERS=0" << std::endl; - std::string str_rips_persistence = test_rips_persistence(min_dimension, max_dimension, 1); - - BOOST_CHECK(str_rips_persistence.find(value0) != std::string::npos); // Check found - BOOST_CHECK(str_rips_persistence.find(value1) != std::string::npos); // Check found - BOOST_CHECK(str_rips_persistence.find(value2) != std::string::npos); // Check found - BOOST_CHECK(str_rips_persistence.find(value3) != std::string::npos); // Check found - std::cout << "str_rips_persistence=" << str_rips_persistence << std::endl; - - std::cout << "********************************************************************" << std::endl; - std::cout << "TEST OF RIPS_PERSISTENT_COHOMOLOGY_MULTI_FIELD DIM=" << min_dimension << " MAX_DIM=" << max_dimension << " MIN_PERS=2" << std::endl; - - str_rips_persistence = test_rips_persistence(min_dimension, max_dimension, 2); - - BOOST_CHECK(str_rips_persistence.find(value0) != std::string::npos); // Check found - BOOST_CHECK(str_rips_persistence.find(value1) != std::string::npos); // Check found - BOOST_CHECK(str_rips_persistence.find(value2) != std::string::npos); // Check found - BOOST_CHECK(str_rips_persistence.find(value3) != std::string::npos); // Check found + std::string str_rips_persistence = test_rips_persistence(min_dimension, max_dimension, static_cast<Filtration_value> (0.0)); std::cout << "str_rips_persistence=" << str_rips_persistence << std::endl; - std::cout << "********************************************************************" << std::endl; - std::cout << "TEST OF RIPS_PERSISTENT_COHOMOLOGY_MULTI_FIELD DIM=" << min_dimension << " MAX_DIM=" << max_dimension << " MIN_PERS=3" << std::endl; - - str_rips_persistence = test_rips_persistence(min_dimension, max_dimension, 3); - BOOST_CHECK(str_rips_persistence.find(value0) != std::string::npos); // Check found BOOST_CHECK(str_rips_persistence.find(value1) != std::string::npos); // Check found BOOST_CHECK(str_rips_persistence.find(value2) != std::string::npos); // Check found - BOOST_CHECK(str_rips_persistence.find(value3) != std::string::npos); // Check found - std::cout << "str_rips_persistence=" << str_rips_persistence << std::endl; - std::cout << "********************************************************************" << std::endl; - std::cout << "TEST OF RIPS_PERSISTENT_COHOMOLOGY_MULTI_FIELD DIM=" << min_dimension << " MAX_DIM=" << max_dimension << " MIN_PERS=Inf" << std::endl; + if ((min_dimension < 2) && (max_dimension < 2)) { + BOOST_CHECK(str_rips_persistence.find(value3) != std::string::npos); // Check found + BOOST_CHECK(str_rips_persistence.find(value4) != std::string::npos); // Check found + BOOST_CHECK(str_rips_persistence.find(value5) != std::string::npos); // Check found + BOOST_CHECK(str_rips_persistence.find(value6) != std::string::npos); // Check found + BOOST_CHECK(str_rips_persistence.find(value7) != std::string::npos); // Check found + } else { + BOOST_CHECK(str_rips_persistence.find(value3) == std::string::npos); // Check not found + BOOST_CHECK(str_rips_persistence.find(value4) == std::string::npos); // Check not found + BOOST_CHECK(str_rips_persistence.find(value5) == std::string::npos); // Check not found + BOOST_CHECK(str_rips_persistence.find(value6) == std::string::npos); // Check not found + BOOST_CHECK(str_rips_persistence.find(value7) == std::string::npos); // Check not found + } - str_rips_persistence = test_rips_persistence(min_dimension, max_dimension, std::numeric_limits<int>::max()); - - BOOST_CHECK(str_rips_persistence.find(value0) != std::string::npos); // Check found - BOOST_CHECK(str_rips_persistence.find(value1) != std::string::npos); // Check found - BOOST_CHECK(str_rips_persistence.find(value2) != std::string::npos); // Check found - BOOST_CHECK(str_rips_persistence.find(value3) != std::string::npos); // Check found - std::cout << "str_rips_persistence=" << str_rips_persistence << std::endl; } -BOOST_AUTO_TEST_CASE( rips_persistent_cohomology_multi_field_dim_1_2 ) -{ - test_rips_persistence_in_dimension(1, 2); +BOOST_AUTO_TEST_CASE(rips_persistent_cohomology_multi_field_dim_1_2) { + test_rips_persistence_in_dimension(0, 1); } -BOOST_AUTO_TEST_CASE( rips_persistent_cohomology_multi_field_dim_2_3 ) -{ - test_rips_persistence_in_dimension(2, 3); +BOOST_AUTO_TEST_CASE(rips_persistent_cohomology_multi_field_dim_2_3) { + test_rips_persistence_in_dimension(1, 3); } -BOOST_AUTO_TEST_CASE( rips_persistent_cohomology_multi_field_dim_1_5 ) -{ +BOOST_AUTO_TEST_CASE(rips_persistent_cohomology_multi_field_dim_1_5) { test_rips_persistence_in_dimension(1, 5); } diff --git a/src/Persistent_cohomology/test/simplex_tree_file_for_multi_field_unit_test.txt b/src/Persistent_cohomology/test/simplex_tree_file_for_multi_field_unit_test.txt new file mode 100644 index 00000000..ed2c0c3d --- /dev/null +++ b/src/Persistent_cohomology/test/simplex_tree_file_for_multi_field_unit_test.txt @@ -0,0 +1,58 @@ +0 0 0.2 +0 3 0.2 +1 3 0 0.2 +0 6 0.2 +0 11 0.2 +1 11 6 0.2 +0 13 0.25 +0 14 0.25 +1 14 13 0.25 +0 15 0.25 +1 15 13 0.25 +1 15 14 0.25 +2 15 14 13 0.25 +0 1 0.3 +1 1 0 0.3 +0 2 0.3 +1 2 0 0.3 +1 2 1 0.3 +2 2 1 0 0.3 +0 4 0.3 +1 4 3 0.3 +0 5 0.3 +1 5 3 0.3 +1 5 4 0.3 +2 5 4 3 0.3 +0 9 0.3 +0 10 0.3 +1 10 2 0.3 +1 10 9 0.3 +1 11 9 0.3 +1 11 10 0.3 +2 11 10 9 0.3 +0 12 0.3 +1 12 2 0.3 +1 12 10 0.3 +2 12 10 2 0.3 +1 6 0 0.4 +1 6 1 0.4 +2 6 1 0 0.4 +0 7 0.4 +1 7 0 0.4 +1 7 1 0.4 +2 7 1 0 0.4 +1 7 6 0.4 +2 7 6 0 0.4 +2 7 6 1 0.4 +3 7 6 1 0 0.4 +0 8 0.4 +1 8 4 0.4 +1 8 5 0.4 +2 8 5 4 0.4 +1 9 4 0.4 +1 9 5 0.4 +2 9 5 4 0.4 +1 9 8 0.4 +2 9 8 4 0.4 +2 9 8 5 0.4 +3 9 8 5 4 0.4 diff --git a/src/Persistent_cohomology/test/simplex_tree_file_for_multi_field_unit_test.txt.REMOVED.git-id b/src/Persistent_cohomology/test/simplex_tree_file_for_multi_field_unit_test.txt.REMOVED.git-id deleted file mode 100644 index 2dd38515..00000000 --- a/src/Persistent_cohomology/test/simplex_tree_file_for_multi_field_unit_test.txt.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -ce87199d425b05f51c74cbf635870bfa5abbc7a1
\ No newline at end of file diff --git a/src/Simplex_tree/example/simple_simplex_tree.cpp b/src/Simplex_tree/example/simple_simplex_tree.cpp index bde224f1..6d20e43e 100644 --- a/src/Simplex_tree/example/simple_simplex_tree.cpp +++ b/src/Simplex_tree/example/simple_simplex_tree.cpp @@ -28,7 +28,6 @@ using namespace Gudhi; typedef std::vector< Vertex_handle > typeVectorVertex; -typedef std::pair<typeVectorVertex, Filtration_value> typeSimplex; typedef std::pair< Simplex_tree<>::Simplex_handle, bool > typePairSimplexBool; int main(int argc, char * const argv[]) { @@ -58,9 +57,8 @@ int main(int argc, char * const argv[]) { std::cout << " * INSERT 0" << std::endl; typeVectorVertex firstSimplexVector; firstSimplexVector.push_back(FIRST_VERTEX_HANDLE); - typeSimplex firstSimplex = std::make_pair(firstSimplexVector, Filtration_value(FIRST_FILTRATION_VALUE)); typePairSimplexBool returnValue = - simplexTree.insert_simplex(firstSimplex.first, firstSimplex.second); + simplexTree.insert_simplex(firstSimplexVector, Filtration_value(FIRST_FILTRATION_VALUE)); if (returnValue.second == true) { std::cout << " + 0 INSERTED" << std::endl; @@ -74,9 +72,8 @@ int main(int argc, char * const argv[]) { std::cout << " * INSERT 1" << std::endl; typeVectorVertex secondSimplexVector; secondSimplexVector.push_back(SECOND_VERTEX_HANDLE); - typeSimplex secondSimplex = std::make_pair(secondSimplexVector, Filtration_value(FIRST_FILTRATION_VALUE)); returnValue = - simplexTree.insert_simplex(secondSimplex.first, secondSimplex.second); + simplexTree.insert_simplex(secondSimplexVector, Filtration_value(FIRST_FILTRATION_VALUE)); if (returnValue.second == true) { std::cout << " + 1 INSERTED" << std::endl; @@ -91,9 +88,8 @@ int main(int argc, char * const argv[]) { typeVectorVertex thirdSimplexVector; thirdSimplexVector.push_back(FIRST_VERTEX_HANDLE); thirdSimplexVector.push_back(SECOND_VERTEX_HANDLE); - typeSimplex thirdSimplex = std::make_pair(thirdSimplexVector, Filtration_value(SECOND_FILTRATION_VALUE)); returnValue = - simplexTree.insert_simplex(thirdSimplex.first, thirdSimplex.second); + simplexTree.insert_simplex(thirdSimplexVector, Filtration_value(SECOND_FILTRATION_VALUE)); if (returnValue.second == true) { std::cout << " + (0,1) INSERTED" << std::endl; @@ -107,9 +103,8 @@ int main(int argc, char * const argv[]) { std::cout << " * INSERT 2" << std::endl; typeVectorVertex fourthSimplexVector; fourthSimplexVector.push_back(THIRD_VERTEX_HANDLE); - typeSimplex fourthSimplex = std::make_pair(fourthSimplexVector, Filtration_value(FIRST_FILTRATION_VALUE)); returnValue = - simplexTree.insert_simplex(fourthSimplex.first, fourthSimplex.second); + simplexTree.insert_simplex(fourthSimplexVector, Filtration_value(FIRST_FILTRATION_VALUE)); if (returnValue.second == true) { std::cout << " + 2 INSERTED" << std::endl; @@ -124,9 +119,8 @@ int main(int argc, char * const argv[]) { typeVectorVertex fifthSimplexVector; fifthSimplexVector.push_back(THIRD_VERTEX_HANDLE); fifthSimplexVector.push_back(FIRST_VERTEX_HANDLE); - typeSimplex fifthSimplex = std::make_pair(fifthSimplexVector, Filtration_value(SECOND_FILTRATION_VALUE)); returnValue = - simplexTree.insert_simplex(fifthSimplex.first, fifthSimplex.second); + simplexTree.insert_simplex(fifthSimplexVector, Filtration_value(SECOND_FILTRATION_VALUE)); if (returnValue.second == true) { std::cout << " + (2,0) INSERTED" << std::endl; @@ -141,9 +135,8 @@ int main(int argc, char * const argv[]) { typeVectorVertex sixthSimplexVector; sixthSimplexVector.push_back(THIRD_VERTEX_HANDLE); sixthSimplexVector.push_back(SECOND_VERTEX_HANDLE); - typeSimplex sixthSimplex = std::make_pair(sixthSimplexVector, Filtration_value(SECOND_FILTRATION_VALUE)); returnValue = - simplexTree.insert_simplex(sixthSimplex.first, sixthSimplex.second); + simplexTree.insert_simplex(sixthSimplexVector, Filtration_value(SECOND_FILTRATION_VALUE)); if (returnValue.second == true) { std::cout << " + (2,1) INSERTED" << std::endl; @@ -159,9 +152,8 @@ int main(int argc, char * const argv[]) { seventhSimplexVector.push_back(THIRD_VERTEX_HANDLE); seventhSimplexVector.push_back(SECOND_VERTEX_HANDLE); seventhSimplexVector.push_back(FIRST_VERTEX_HANDLE); - typeSimplex seventhSimplex = std::make_pair(seventhSimplexVector, Filtration_value(THIRD_FILTRATION_VALUE)); returnValue = - simplexTree.insert_simplex(seventhSimplex.first, seventhSimplex.second); + simplexTree.insert_simplex(seventhSimplexVector, Filtration_value(THIRD_FILTRATION_VALUE)); if (returnValue.second == true) { std::cout << " + (2,1,0) INSERTED" << std::endl; @@ -175,9 +167,8 @@ int main(int argc, char * const argv[]) { std::cout << " * INSERT 3" << std::endl; typeVectorVertex eighthSimplexVector; eighthSimplexVector.push_back(FOURTH_VERTEX_HANDLE); - typeSimplex eighthSimplex = std::make_pair(eighthSimplexVector, Filtration_value(FIRST_FILTRATION_VALUE)); returnValue = - simplexTree.insert_simplex(eighthSimplex.first, eighthSimplex.second); + simplexTree.insert_simplex(eighthSimplexVector, Filtration_value(FIRST_FILTRATION_VALUE)); if (returnValue.second == true) { std::cout << " + 3 INSERTED" << std::endl; @@ -192,9 +183,8 @@ int main(int argc, char * const argv[]) { typeVectorVertex ninethSimplexVector; ninethSimplexVector.push_back(FOURTH_VERTEX_HANDLE); ninethSimplexVector.push_back(FIRST_VERTEX_HANDLE); - typeSimplex ninethSimplex = std::make_pair(ninethSimplexVector, Filtration_value(SECOND_FILTRATION_VALUE)); returnValue = - simplexTree.insert_simplex(ninethSimplex.first, ninethSimplex.second); + simplexTree.insert_simplex(ninethSimplexVector, Filtration_value(SECOND_FILTRATION_VALUE)); if (returnValue.second == true) { std::cout << " + (3,0) INSERTED" << std::endl; @@ -208,9 +198,8 @@ int main(int argc, char * const argv[]) { std::cout << " * INSERT 0 (already inserted)" << std::endl; typeVectorVertex tenthSimplexVector; tenthSimplexVector.push_back(FIRST_VERTEX_HANDLE); - typeSimplex tenthSimplex = std::make_pair(tenthSimplexVector, Filtration_value(FOURTH_FILTRATION_VALUE)); // With a different filtration value returnValue = - simplexTree.insert_simplex(tenthSimplex.first, tenthSimplex.second); + simplexTree.insert_simplex(tenthSimplexVector, Filtration_value(FOURTH_FILTRATION_VALUE)); // With a different filtration value if (returnValue.second == true) { std::cout << " + 0 INSERTED" << std::endl; @@ -226,9 +215,8 @@ int main(int argc, char * const argv[]) { eleventhSimplexVector.push_back(THIRD_VERTEX_HANDLE); eleventhSimplexVector.push_back(SECOND_VERTEX_HANDLE); eleventhSimplexVector.push_back(FIRST_VERTEX_HANDLE); - typeSimplex eleventhSimplex = std::make_pair(eleventhSimplexVector, Filtration_value(FOURTH_FILTRATION_VALUE)); returnValue = - simplexTree.insert_simplex(eleventhSimplex.first, eleventhSimplex.second); + simplexTree.insert_simplex(eleventhSimplexVector, Filtration_value(FOURTH_FILTRATION_VALUE)); if (returnValue.second == true) { std::cout << " + (2,1,0) INSERTED" << std::endl; diff --git a/src/Simplex_tree/test/CMakeLists.txt b/src/Simplex_tree/test/CMakeLists.txt index 02ef9d8b..b6a1c0b6 100644 --- a/src/Simplex_tree/test/CMakeLists.txt +++ b/src/Simplex_tree/test/CMakeLists.txt @@ -1,21 +1,25 @@ cmake_minimum_required(VERSION 2.6) -project(GUDHITestSimplexTree) +project(GUDHISimplexTreeUT) -if(NOT MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} --coverage") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} --coverage") +if (GCOVR_PATH) + # for gcovr to make coverage reports - Corbera Jenkins plugin + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage") +endif() +if (GPROF_PATH) + # for gprof to make coverage reports - Jenkins + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -pg") endif() -add_executable ( simplex_tree_unit_test simplex_tree_unit_test.cpp ) -target_link_libraries(simplex_tree_unit_test ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +add_executable ( SimplexTreeUT simplex_tree_unit_test.cpp ) +target_link_libraries(SimplexTreeUT ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) # Unitary tests -add_test(simplex_tree_unit_test ${CMAKE_CURRENT_BINARY_DIR}/simplex_tree_unit_test) - -if (LCOV_PATH) - # Lcov code coverage of unitary test - add_test(src/Simplex_tree/lcov/coverage.log ${CMAKE_SOURCE_DIR}/scripts/check_code_coverage.sh ${CMAKE_SOURCE_DIR}/src/Simplex_tree) -endif() +add_test(NAME SimplexTreeUT + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/SimplexTreeUT + # XML format for Jenkins xUnit plugin + --log_format=XML --log_sink=${CMAKE_SOURCE_DIR}/SimplexTreeUT.xml --log_level=test_suite --report_level=no) -cpplint_add_tests("${CMAKE_SOURCE_DIR}/src/Simplex_tree/include/gudhi") diff --git a/src/Simplex_tree/test/README b/src/Simplex_tree/test/README index 620bcd5f..21c3d871 100644 --- a/src/Simplex_tree/test/README +++ b/src/Simplex_tree/test/README @@ -1,12 +1,14 @@ To compile: *********** +cd /path-to-gudhi/ cmake . +cd /path-to-test/ make To launch with details: *********************** -./simplex_tree_unit_test --report_level=detailed --log_level=all +./SimplexTreeUT --report_level=detailed --log_level=all ==> echo $? returns 0 in case of success (non-zero otherwise) diff --git a/src/Simplex_tree/test/simplex_tree_unit_test.cpp b/src/Simplex_tree/test/simplex_tree_unit_test.cpp index c0cfced1..6b0a1f3d 100644 --- a/src/Simplex_tree/test/simplex_tree_unit_test.cpp +++ b/src/Simplex_tree/test/simplex_tree_unit_test.cpp @@ -1,4 +1,4 @@ -#define BOOST_TEST_MODULE const_string test +#define BOOST_TEST_MODULE simplex_tree test #include <boost/test/included/unit_test.hpp> #include <boost/system/error_code.hpp> #include <boost/chrono/thread_clock.hpp> diff --git a/src/Skeleton_blocker/test/CMakeLists.txt b/src/Skeleton_blocker/test/CMakeLists.txt index c69bfec7..e62600a2 100644 --- a/src/Skeleton_blocker/test/CMakeLists.txt +++ b/src/Skeleton_blocker/test/CMakeLists.txt @@ -1,12 +1,17 @@ cmake_minimum_required(VERSION 2.6) project(GUDHIskbl) -if(NOT MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") - - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} --coverage") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} --coverage") +if (GCOVR_PATH) + # for gcovr to make coverage reports - Corbera Jenkins plugin + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage") +endif() +if (GPROF_PATH) + # for gprof to make coverage reports - Jenkins + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -pg") endif() add_executable(TestSkeletonBlockerComplex TestSkeletonBlockerComplex.cpp) @@ -17,10 +22,3 @@ add_test(TestSkeletonBlockerComplex ${CMAKE_CURRENT_BINARY_DIR}/TestSkeletonBloc add_test(TestSimplifiable ${CMAKE_CURRENT_BINARY_DIR}/TestSimplifiable) add_test(TestGeometricComplex ${CMAKE_CURRENT_BINARY_DIR}/TestGeometricComplex) - -if (LCOV_PATH) - # Lcov code coverage of unitary test - add_test(src/Skeleton_blocker/lcov/coverage.log ${CMAKE_SOURCE_DIR}/scripts/check_code_coverage.sh ${CMAKE_SOURCE_DIR}/src/Skeleton_blocker) -endif() - -cpplint_add_tests("${CMAKE_SOURCE_DIR}/src/Skeleton_blocker/include/gudhi") diff --git a/src/cmake/modules/FindQGLViewer.cmake b/src/cmake/modules/FindQGLViewer.cmake new file mode 100644 index 00000000..65723d67 --- /dev/null +++ b/src/cmake/modules/FindQGLViewer.cmake @@ -0,0 +1,61 @@ +# - Try to find QGLViewer +# Once done this will define +# +# QGLVIEWER_FOUND - system has QGLViewer +# QGLVIEWER_INCLUDE_DIR - the QGLViewer include directory +# QGLVIEWER_LIBRARIES - Link these to use QGLViewer +# QGLVIEWER_DEFINITIONS - Compiler switches required for using QGLViewer +# + +find_path(QGLVIEWER_INCLUDE_DIR + NAMES QGLViewer/qglviewer.h + PATHS /usr/include + /usr/local/include + ENV QGLVIEWERROOT + ) + +find_library(QGLVIEWER_LIBRARY_RELEASE + NAMES qglviewer-qt4 qglviewer QGLViewer QGLViewer2 + PATHS /usr/lib + /usr/local/lib + ENV QGLVIEWERROOT + ENV LD_LIBRARY_PATH + ENV LIBRARY_PATH + PATH_SUFFIXES QGLViewer QGLViewer/release + ) + +find_library(QGLVIEWER_LIBRARY_DEBUG + NAMES dqglviewer dQGLViewer dQGLViewer2 QGLViewerd2 + PATHS /usr/lib + /usr/local/lib + ENV QGLVIEWERROOT + ENV LD_LIBRARY_PATH + ENV LIBRARY_PATH + PATH_SUFFIXES QGLViewer QGLViewer/debug + ) + +if(QGLVIEWER_LIBRARY_RELEASE) + if(QGLVIEWER_LIBRARY_DEBUG) + set(QGLVIEWER_LIBRARIES_ optimized ${QGLVIEWER_LIBRARY_RELEASE} debug ${QGLVIEWER_LIBRARY_DEBUG}) + else() + set(QGLVIEWER_LIBRARIES_ ${QGLVIEWER_LIBRARY_RELEASE}) + endif() + + set(QGLVIEWER_LIBRARIES ${QGLVIEWER_LIBRARIES_} CACHE FILEPATH "The QGLViewer library") + +endif() + +IF(QGLVIEWER_INCLUDE_DIR AND QGLVIEWER_LIBRARIES) + SET(QGLVIEWER_FOUND TRUE) +ENDIF(QGLVIEWER_INCLUDE_DIR AND QGLVIEWER_LIBRARIES) + +IF(QGLVIEWER_FOUND) + IF(NOT QGLViewer_FIND_QUIETLY) + MESSAGE(STATUS "Found QGLViewer: ${QGLVIEWER_LIBRARIES}") + ENDIF(NOT QGLViewer_FIND_QUIETLY) +ELSE(QGLVIEWER_FOUND) + IF(QGLViewer_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find QGLViewer") + ENDIF(QGLViewer_FIND_REQUIRED) +ENDIF(QGLVIEWER_FOUND) + diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index 83908905..315aa0ac 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -6,7 +6,8 @@ The Gudhi library (Geometric Understanding in Higher Dimensions) is a generic C++ library for topological analysis of high-dimensional data whose goal is to provide robust, efficient, flexible and easy to use implementations of -state-of-the-art algorithms and data structures for computational topology. +state-of-the-art algorithms and data structures for computational topology. +This library is part of the <a href="https://project.inria.fr/gudhi/">Gudhi project</a>. The current release of the library allows to use several data-structures for simplicial complexes : simplex tree, Hasse diagram or skeleton-blocker. Several operations can then be done on top of these @@ -17,48 +18,52 @@ We refer to \cite gudhilibrary_ICMS14 for a detailed description of the design of the library. +\section installation Gudhi installation + +As Gudhi is a header only library, there is no need to install the library. + +Examples of Gudhi headers inclusion can be found in \ref demos. + \section compiling Compiling -The library uses c++11 and requires Boost with version 1.48.0 or more recent : http://www.boost.org/. -It is a multiplaform library and compiles on Linux, Mac OSX and Visual Studio 2013. +The library uses c++11 and requires <a href="http://www.boost.org/">Boost</a> with version 1.48.0 or more recent. +It is a multi-platform library and compiles on Linux, Mac OSX and Visual Studio 2013. \subsection gmp GMP: The multi-field persistent homology algorithm requires GMP which is a free library for arbitrary-precision -arithmetic, operating on signed integers, rational numbers, and floating point numbers -The following examples require The GNU Multiple Precision Arithmetic Library (GMP) http://gmplib.org/ +arithmetic, operating on signed integers, rational numbers, and floating point numbers. + +The following examples require the <a href="http://gmplib.org/">GNU Multiple Precision Arithmetic Library</a> (GMP) and will not be built if GMP is not installed: - Persistent_cohomology/rips_multifield_persistence - Simplex_tree/simplex_tree_from_alpha_shapes_3 -Having GMP version 4.2 or higher installed is recommended. This library can be obtained from http://gmplib.org/ +Having GMP version 4.2 or higher installed is recommended. \subsection cgal CGAL: CGAL is a C++ library which provides easy access to efficient and reliable geometric algorithms. -The following example requires CGAL https://www.cgal.org/ and will not be built if CGAL is not installed: +The following example requires the <a href="http://www.cgal.org/">Computational Geometry Algorithms Library</a> (CGAL) +and will not be built if CGAL is not installed: - Simplex_tree/simplex_tree_from_alpha_shapes_3 Having CGAL version 4.4 or higher installed is recommended. The procedure to install this library according to your operating system is detailed here http://doc.cgal.org/latest/Manual/installation.html -\section demos Demos and Examples +\subsection demos Demos and examples -To build the library, run the following in a terminal: +To build the demos and libraries, run the following commands in a terminal: \verbatim cd /path-to-gudhi/ mkdir build cd build/ -cmake -DCMAKE_BUILD_TYPE=Release .. +cmake .. make \endverbatim - - - - \details \copyright GNU General Public License v3. |