diff --git a/.gitignore b/.gitignore index d0f731ed..7aca3f2a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,12 @@ build* # ignore mac temporal files .DS_Store .idea -cmake-build*/ \ No newline at end of file +cmake-build*/ +*.substvars +debian/tmp +debian/files +debian/stamp* +debian/stamp* +debian/.debhelper +debian/libopenmesh* +obj-x86_64-linux-gnu diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 871ee8a8..4feb3435 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -257,230 +257,6 @@ test-release-clang-cpp11-qt6.1.2: -#----------- Job Informations: -# Type: Build: debug -# OS: Linux -# Compiler: gcc -# Language: cpp11 -# QT Version: qt5.15.1 - -build-debug-gcc-cpp11-qt5.15.1: - stage: build - script: "CI/ci-linux-build.sh" - #image: gitlab.vci.rwth-aachen.de:4567/docker/docker/docker-openmesh-container - tags: - - Linux - - stretch - variables: - COMPILER: "gcc" - LANGUAGE: "cpp11" - BUILD_TYPE: "debug" - QTVERSION: "qt5.15.1" - IWYU: "no" - VECTORCHECKS: "yes" - artifacts: - paths: - - build-gcc-cpp11-qt5.15.1-debug-vectorchecks/ - -#----------- Job Informations: -# Type: Test: debug -# OS: Linux -# Compiler: gcc -# Language: cpp11 - -test-debug-gcc-cpp11-qt5.15.1: - stage: test - script: "CI/ci-linux-test.sh" - #image: gitlab.vci.rwth-aachen.de:4567/docker/docker/docker-openmesh-container - tags: - - Linux - - stretch - - MultiThreads - variables: - COMPILER: "gcc" - LANGUAGE: "cpp11" - BUILD_TYPE: "debug" - QTVERSION: "qt5.15.1" - IWYU: "no" - VECTORCHECKS: "yes" - dependencies: [build-debug-gcc-cpp11-qt5.15.1] - needs: [build-debug-gcc-cpp11-qt5.15.1] - artifacts: - reports: - junit: - - build-gcc-cpp11-qt5.15.1-debug-vectorchecks/Unittests/report.xml - - build-gcc-cpp11-qt5.15.1-debug-vectorchecks/Unittests/report-customvec.xml - - build-gcc-cpp11-qt5.15.1-debug-vectorchecks/Unittests/report-doublevec.xml - - -#----------- Job Informations: -# Type: Build: release -# OS: Linux -# Compiler: gcc -# Language: cpp11 -# QT Version: qt5.15.1 - -build-release-gcc-cpp11-qt5.15.1: - stage: build - script: "CI/ci-linux-build.sh" - #image: gitlab.vci.rwth-aachen.de:4567/docker/docker/docker-openmesh-container - tags: - - Linux - - stretch - variables: - COMPILER: "gcc" - LANGUAGE: "cpp11" - BUILD_TYPE: "release" - QTVERSION: "qt5.15.1" - IWYU: "no" - VECTORCHECKS: "yes" - artifacts: - paths: - - build-gcc-cpp11-qt5.15.1-release-vectorchecks/ - -#----------- Job Informations: -# Type: Test: release -# OS: Linux -# Compiler: gcc -# Language: cpp11 - -test-release-gcc-cpp11-qt5.15.1: - stage: test - script: "CI/ci-linux-test.sh" - #image: gitlab.vci.rwth-aachen.de:4567/docker/docker/docker-openmesh-container - tags: - - Linux - - stretch - - MultiThreads - variables: - COMPILER: "gcc" - LANGUAGE: "cpp11" - BUILD_TYPE: "release" - QTVERSION: "qt5.15.1" - IWYU: "no" - VECTORCHECKS: "yes" - dependencies: [build-release-gcc-cpp11-qt5.15.1] - needs: [build-release-gcc-cpp11-qt5.15.1] - artifacts: - reports: - junit: - - build-gcc-cpp11-qt5.15.1-release-vectorchecks/Unittests/report.xml - - build-gcc-cpp11-qt5.15.1-release-vectorchecks/Unittests/report-customvec.xml - - build-gcc-cpp11-qt5.15.1-release-vectorchecks/Unittests/report-doublevec.xml - - -#----------- Job Informations: -# Type: Build: debug -# OS: Linux -# Compiler: clang -# Language: cpp11 -# QT Version: qt5.15.1 - -build-debug-clang-cpp11-qt5.15.1: - stage: build - script: "CI/ci-linux-build.sh" - #image: gitlab.vci.rwth-aachen.de:4567/docker/docker/docker-openmesh-container - tags: - - Linux - - stretch - variables: - COMPILER: "clang" - LANGUAGE: "cpp11" - BUILD_TYPE: "debug" - QTVERSION: "qt5.15.1" - IWYU: "no" - VECTORCHECKS: "yes" - artifacts: - paths: - - build-clang-cpp11-qt5.15.1-debug-vectorchecks/ - -#----------- Job Informations: -# Type: Test: debug -# OS: Linux -# Compiler: clang -# Language: cpp11 - -test-debug-clang-cpp11-qt5.15.1: - stage: test - script: "CI/ci-linux-test.sh" - #image: gitlab.vci.rwth-aachen.de:4567/docker/docker/docker-openmesh-container - tags: - - Linux - - stretch - - MultiThreads - variables: - COMPILER: "clang" - LANGUAGE: "cpp11" - BUILD_TYPE: "debug" - QTVERSION: "qt5.15.1" - IWYU: "no" - VECTORCHECKS: "yes" - dependencies: [build-debug-clang-cpp11-qt5.15.1] - needs: [build-debug-clang-cpp11-qt5.15.1] - artifacts: - reports: - junit: - - build-clang-cpp11-qt5.15.1-debug-vectorchecks/Unittests/report.xml - - build-clang-cpp11-qt5.15.1-debug-vectorchecks/Unittests/report-customvec.xml - - build-clang-cpp11-qt5.15.1-debug-vectorchecks/Unittests/report-doublevec.xml - - -#----------- Job Informations: -# Type: Build: release -# OS: Linux -# Compiler: clang -# Language: cpp11 -# QT Version: qt5.15.1 - -build-release-clang-cpp11-qt5.15.1: - stage: build - script: "CI/ci-linux-build.sh" - #image: gitlab.vci.rwth-aachen.de:4567/docker/docker/docker-openmesh-container - tags: - - Linux - - stretch - variables: - COMPILER: "clang" - LANGUAGE: "cpp11" - BUILD_TYPE: "release" - QTVERSION: "qt5.15.1" - IWYU: "no" - VECTORCHECKS: "yes" - artifacts: - paths: - - build-clang-cpp11-qt5.15.1-release-vectorchecks/ - -#----------- Job Informations: -# Type: Test: release -# OS: Linux -# Compiler: clang -# Language: cpp11 - -test-release-clang-cpp11-qt5.15.1: - stage: test - script: "CI/ci-linux-test.sh" - #image: gitlab.vci.rwth-aachen.de:4567/docker/docker/docker-openmesh-container - tags: - - Linux - - stretch - - MultiThreads - variables: - COMPILER: "clang" - LANGUAGE: "cpp11" - BUILD_TYPE: "release" - QTVERSION: "qt5.15.1" - IWYU: "no" - VECTORCHECKS: "yes" - dependencies: [build-release-clang-cpp11-qt5.15.1] - needs: [build-release-clang-cpp11-qt5.15.1] - artifacts: - reports: - junit: - - build-clang-cpp11-qt5.15.1-release-vectorchecks/Unittests/report.xml - - build-clang-cpp11-qt5.15.1-release-vectorchecks/Unittests/report-customvec.xml - - build-clang-cpp11-qt5.15.1-release-vectorchecks/Unittests/report-doublevec.xml - - #----------- Job Informations: # Type: Build: debug # OS: Linux @@ -1034,4 +810,22 @@ trigger_openmesh-python-rebuild: script: - "curl -X POST -F token=b63ed804ada51d7d1ffe5d6ea0dfa2 -F ref=track-OM-master https://www.graphics.rwth-aachen.de:9000/api/v4/projects/1024/trigger/pipeline" +#Debian: +# stage: deploy +# only: +# - master +# script: +# - mkdir .OpenMesh +# - cp -r * .OpenMesh +# - mv .OpenMesh OpenMesh +# - cd OpenMesh +# - dpkg-buildpackage --no-sign +# tags: +# - Linux +# - stretch +# dependencies: [] +# artifacts: +# paths: +# - libopenmesh*.deb + diff --git a/CI/ci-cppcheck.sh b/CI/ci-cppcheck.sh index 7e73ab35..df127aaf 100755 --- a/CI/ci-cppcheck.sh +++ b/CI/ci-cppcheck.sh @@ -32,7 +32,7 @@ echo "CPPCHECK Summary" echo "==============================================================================" echo -e "${NC}" -MAX_COUNT=23 +MAX_COUNT=33 if [ $COUNT -gt $MAX_COUNT ]; then echo -e ${WARNING} diff --git a/CI/ci-source.sh b/CI/ci-source.sh index e791fddc..53308933 100755 --- a/CI/ci-source.sh +++ b/CI/ci-source.sh @@ -1,14 +1,6 @@ # This script just creates compressed files of OpenMesh sources -# Create Build directory and Build documentation -mkdir build-doc - -cd build-doc -cmake .. -make doc -cd .. - # Extract Version Information VERSION=OpenMesh-$(cat CMakeLists.txt | grep VERSION | grep -v cmake | grep -v CMAKE | tr -d "VERSION=" | tr -d " ") @@ -27,8 +19,6 @@ mv src $VERSION/ mv cmake-library $VERSION/ mv openmesh.pc.in $VERSION/ -mv build-doc/Build/share/OpenMesh/Doc/html/ $VERSION/Documentation - tar cjf $VERSION.tar.bz2 $VERSION tar czf $VERSION.tar.gz $VERSION zip -9 -q -r $VERSION.zip $VERSION diff --git a/CI/gitlab-ci/ci-master.yml b/CI/gitlab-ci/ci-master.yml index d107ca40..c0e412b6 100644 --- a/CI/gitlab-ci/ci-master.yml +++ b/CI/gitlab-ci/ci-master.yml @@ -45,3 +45,21 @@ trigger_openmesh-python-rebuild: script: - "curl -X POST -F token=b63ed804ada51d7d1ffe5d6ea0dfa2 -F ref=track-OM-master https://www.graphics.rwth-aachen.de:9000/api/v4/projects/1024/trigger/pipeline" +#Debian: +# stage: deploy +# only: +# - master +# script: +# - mkdir .OpenMesh +# - cp -r * .OpenMesh +# - mv .OpenMesh OpenMesh +# - cd OpenMesh +# - dpkg-buildpackage --no-sign +# tags: +# - Linux +# - stretch +# dependencies: [] +# artifacts: +# paths: +# - libopenmesh*.deb + diff --git a/CI/gitlab-ci/linux.yml b/CI/gitlab-ci/linux.yml index c1f133e8..abb53a8b 100644 --- a/CI/gitlab-ci/linux.yml +++ b/CI/gitlab-ci/linux.yml @@ -15,8 +15,6 @@ cppcheck: {linux-template-job.yml, COMPILER=gcc, LANGUAGE=cpp11, QT_VERSION=qt6.1.2} {linux-template-job.yml, COMPILER=clang, LANGUAGE=cpp11, QT_VERSION=qt6.1.2} -{linux-template-job.yml, COMPILER=gcc, LANGUAGE=cpp11, QT_VERSION=qt5.15.1} -{linux-template-job.yml, COMPILER=clang, LANGUAGE=cpp11, QT_VERSION=qt5.15.1} {linux-template-job.yml, COMPILER=gcc, LANGUAGE=cpp14, QT_VERSION=qt5.15.1} {linux-template-job.yml, COMPILER=clang, LANGUAGE=cpp14, QT_VERSION=qt5.15.1} diff --git a/Doc/changelog.docu b/Doc/changelog.docu index 857f45d4..a3c9b1fa 100644 --- a/Doc/changelog.docu +++ b/Doc/changelog.docu @@ -8,6 +8,24 @@ 9.1 (?/?/?) +Tools + + + +IO + + +Build System + diff --git a/README.md b/README.md index b487a6ca..11155d6f 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,11 @@ The following binaries are created from the latest master. They are automaticall [Download (M1) ](https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/OpenMesh/-/jobs/artifacts/master/browse?job=macos-M1-cpp14-release) +### Debian + +OpenMesh is about to get into the Debian repository. The debian packaging is available on [salsa.debian.org](https://salsa.debian.org/science-team/openmesh) + + ## Download Sources [ Download Sources](https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/OpenMesh/-/jobs/artifacts/master/browse?job=Sources ) diff --git a/cmake-library b/cmake-library index d0220925..9e180cdb 160000 --- a/cmake-library +++ b/cmake-library @@ -1 +1 @@ -Subproject commit d02209259a1920d50671c0b1bc84a3783a5bb7d0 +Subproject commit 9e180cdb4df1d8370ccd9aeee1499709441dbdd1 diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index 0dd1d85a..00000000 --- a/debian/changelog +++ /dev/null @@ -1,46 +0,0 @@ -openmesh (2.0-0~ppa1~maverick1) maverick; urgency=low - - * First maverick version of the official openmesh v2 release. - * Adding libxi-dev, libxmu-dev dependencies to build the apps. - - -- Jean Pierre Charalambos Sun, 02 Jan 2011 10:29:02 -0500 - -openmesh (2.0~svn216-0~ppa3~karmic1) karmic; urgency=low - - * Fix UPSTREAM SVN REPOSITORY in rules. Thanks to Jan Möbius. - - -- Jean Pierre Charalambos Wed, 11 Nov 2009 17:14:27 -0500 - -openmesh (2.0~svn216-0~ppa2~karmic1) karmic; urgency=low - - * Same as first karmic version but this one includes the changelog from Jaunty versions - * Karmic versions fix PACKAGE name in rules from libopenmesh to openmesh - * Karmic versions remove debian directory from svn export - * It remains to fix a SONAMES warning. Maybe it has to see with the upper case letters usage? - - -- Jean Pierre Charalambos Thu, 05 Nov 2009 14:53:02 -0500 - -openmesh (2.0~svn216-0~ppa1~karmic1) karmic; urgency=low - - * Fisrt karmic version - * New upstream SVN snapshot taken from revision 216 - - -- Jean Pierre Charalambos Tue, 03 Nov 2009 21:32:38 -0500 - -openmesh (2.0~svn177-0~ppa2~jaunty1) jaunty; urgency=low - - * Adding the documentation package. - - -- Jean Pierre Charalambos Thu, 25 Jun 2009 20:07:43 -0500 - -openmesh (2.0~svn177-0~ppa1~jaunty1) jaunty; urgency=low - - * New upstream SVN snapshot. - * Splitting the library into libopenmesh and libopenmesh-dev, after - fixes to SONAMES added at this upstream revision. - * No documentation added yet. - * Removing r167 packages from the ppa because they do not conform with - packaging sources directly imported from SVN. According to debian - policies, in this case get-orig-source must be used. - - -- Jean Pierre Charalambos Wed, 24 Jun 2009 22:26:31 -0500 diff --git a/debian/compat b/debian/compat deleted file mode 100644 index 7f8f011e..00000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -7 diff --git a/debian/control b/debian/control deleted file mode 100644 index 3e08a5e6..00000000 --- a/debian/control +++ /dev/null @@ -1,67 +0,0 @@ -Source: openmesh -Section: libs -Priority: optional -Maintainer: Jean Pierre Charalambos -Build-Depends: cdbs, debhelper (>= 7), cmake, libqt4-dev, libqt4-opengl-dev, freeglut3-dev, libfreetype6-dev, libgomp1, doxygen -Standards-Version: 3.9.1 -Homepage: http://www.openmesh.org - -Package: libopenmesh -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: OpenMesh is a generic and efficient data structure for representing - and manipulating polygonal meshes. OpenMesh provides the following features: - . - * Representation of arbitrary polygonal and pure triangle meshes. - * Explicit representation of vertices, halfedges, edges and faces. - * Fast neighborhood access, especially the one-ring neighborhood. - * Highly customizable. - . - This package contains the shared library needed to run programs using - OpenMesh. - -Package: libopenmesh-dev -Section: libdevel -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, libopenmesh (= ${binary:Version}), libqt4-dev, libqt4-opengl-dev, freeglut3-dev, libfreetype6-dev -Suggests: qt4-designer(>= 4.5), qt4-dev-tools (>= 4.5), libopenmesh-doc, libopenmesh-apps -Description: OpenMesh is a generic and efficient data structure for representing - and manipulating polygonal meshes. OpenMesh provides the following features: - . - * Representation of arbitrary polygonal and pure triangle meshes. - * Explicit representation of vertices, halfedges, edges and faces. - * Fast neighborhood access, especially the one-ring neighborhood. - * Highly customizable. - . - This package contains all supplementary files (static library and headers) - you need to develop your own programs using the OpenMesh library. - -Package: libopenmesh-apps -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, libopenmesh (= ${binary:Version}) -Description: OpenMesh is a generic and efficient data structure for representing - and manipulating polygonal meshes. OpenMesh provides the following features: - . - * Representation of arbitrary polygonal and pure triangle meshes. - * Explicit representation of vertices, halfedges, edges and faces. - * Fast neighborhood access, especially the one-ring neighborhood. - * Highly customizable. - . - This package contains some binary applications that show some features of the - OpenMesh library. - -Package: libopenmesh-doc -Architecture: all -Depends: ${misc:Depends} -Section: doc -Suggests: libopenmesh-dev (= ${binary:Version}), libopenmesh-apps (= ${binary:Version}) -Description: OpenMesh is a generic and efficient data structure for representing - and manipulating polygonal meshes. OpenMesh provides the following features: - . - * Representation of arbitrary polygonal and pure triangle meshes. - * Explicit representation of vertices, halfedges, edges and faces. - * Fast neighborhood access, especially the one-ring neighborhood. - * Highly customizable. - . - This package constains the API documentation of the OpenMesh library in HTML - format. diff --git a/debian/copyright b/debian/copyright deleted file mode 100644 index 752af39e..00000000 --- a/debian/copyright +++ /dev/null @@ -1,54 +0,0 @@ -This package was debianized by: - - Jean Pierre Charalambos on Sun, 21 Jun 2009 17:49:34 -0500 - -It was downloaded from: - - http://www.openmesh.org - -Upstream Author: - - Computer Graphics Group, RWTH Aachen - -Copyright: - - Copyright (C) 2001-2015 by Computer Graphics Group, RWTH-Aachen University - -License: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER - OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -On Debian systems, the complete text of the BSD License can be -found in `/usr/share/common-licenses/BSD '. - -The Debian packaging is: - - Copyright C) 2009, Jean Pierre Charalambos - -and is licensed under the GPL, see above. diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 4bc4bb6f..00000000 --- a/debian/rules +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/make -f - -include /usr/share/cdbs/1/rules/debhelper.mk -include /usr/share/cdbs/1/class/cmake.mk - -build/libopenmesh-doc:: - cd $(DEB_BUILDDIR) && $(MAKE) doc - mkdir -p debian/tmp/usr/share/doc/ - cp -r $(DEB_BUILDDIR)/Build/share/OpenMesh/Doc/html debian/tmp/usr/share/doc/OpenMesh - -install/libopenmesh:: - ln -sf libOpenMeshCore.so.2.0 debian/tmp/usr/lib/OpenMesh/libOpenMeshCore.so.2 - ln -sf libOpenMeshTools.so.2.0 debian/tmp/usr/lib/OpenMesh/libOpenMeshTools.so.2 - dh_install -plibopenmesh debian/tmp/usr/lib/OpenMesh/lib*.so.* /usr/lib/ - -install/libopenmesh-dev:: - dh_install -plibopenmesh-dev debian/tmp/usr/lib/OpenMesh/lib*.so /usr/lib/ - dh_install -plibopenmesh-dev debian/tmp/usr/lib/OpenMesh/lib*.a /usr/lib/ - dh_install -plibopenmesh-dev --autodest debian/tmp/usr/include/OpenMesh - -install/libopenmesh-apps:: - dh_install -plibopenmesh-apps debian/tmp/usr/bin/* /usr/lib/OpenMesh/Apps - -install/libopenmesh-doc:: - dh_install -plibopenmesh-doc debian/tmp/usr/share/doc/* diff --git a/src/OpenMesh/Apps/CMakeLists.txt b/src/OpenMesh/Apps/CMakeLists.txt index ebf10ff9..787a1734 100644 --- a/src/OpenMesh/Apps/CMakeLists.txt +++ b/src/OpenMesh/Apps/CMakeLists.txt @@ -23,19 +23,12 @@ if ( BUILD_APPS ) add_subdirectory (VDProgMesh/Analyzer) # Add non ui apps as dependency before fixbundle - if ( WIN32 ) - if ( NOT "${CMAKE_GENERATOR}" MATCHES "MinGW Makefiles" ) - # let bundle generation depend on all targets + if ( APPLE OR (WIN32 AND NOT "${CMAKE_GENERATOR}" MATCHES "MinGW Makefiles" ) ) + # let bundle generation depend on all targets add_dependencies (fixbundle commandlineDecimater Dualizer mconvert Smoothing commandlineAdaptiveSubdivider commandlineSubdivider mkbalancedpm Analyzer ) - endif() - endif() - - # Add non ui apps as dependency before fixbundle - if ( APPLE) - # let bundle generation depend on all targets - add_dependencies (fixbundle commandlineDecimater Dualizer mconvert Smoothing commandlineAdaptiveSubdivider commandlineSubdivider mkbalancedpm Analyzer ) endif() + set( OpenGL_GL_PREFERENCE GLVND) # find needed packages for gui applications find_package (OpenGL) @@ -70,17 +63,12 @@ if ( BUILD_APPS ) # Add ui apps as dependency before fixbundle - if ( WIN32 AND NOT "${CMAKE_GENERATOR}" MATCHES "MinGW Makefiles") + # Required on Windows (NOTMINGW) and APPLE + if ( APPLE OR (WIN32 AND NOT "${CMAKE_GENERATOR}" MATCHES "MinGW Makefiles") ) # let bundle generation depend on all targets add_dependencies (fixbundle DecimaterGui ProgViewer QtViewer SubdividerGui Synthesizer) endif() - # Add ui apps as dependency before fixbundle - if ( APPLE) - # let bundle generation depend on all targets - add_dependencies (fixbundle DecimaterGui ProgViewer QtViewer SubdividerGui Synthesizer) - endif() - if ( WIN32 ) FILE(GLOB files_install_app_dlls "${CMAKE_BINARY_DIR}/Build/*.dll" ) INSTALL(FILES ${files_install_app_dlls} DESTINATION . ) diff --git a/src/OpenMesh/Apps/Decimating/DecimaterGui/CMakeLists.txt b/src/OpenMesh/Apps/Decimating/DecimaterGui/CMakeLists.txt index d6230e7e..a9a46e38 100644 --- a/src/OpenMesh/Apps/Decimating/DecimaterGui/CMakeLists.txt +++ b/src/OpenMesh/Apps/Decimating/DecimaterGui/CMakeLists.txt @@ -1,10 +1,5 @@ include (VCICommon) -include_directories ( - ../../../.. - ${CMAKE_CURRENT_SOURCE_DIR} -) - set (headers ../DecimaterViewerWidget.hh ../../QtViewer/QGLViewerWidget.hh diff --git a/src/OpenMesh/Apps/Decimating/commandlineDecimater/CMakeLists.txt b/src/OpenMesh/Apps/Decimating/commandlineDecimater/CMakeLists.txt index de6118f3..00b06a5a 100644 --- a/src/OpenMesh/Apps/Decimating/commandlineDecimater/CMakeLists.txt +++ b/src/OpenMesh/Apps/Decimating/commandlineDecimater/CMakeLists.txt @@ -1,10 +1,5 @@ include (VCICommon) -include_directories ( - ../../../.. - ${CMAKE_CURRENT_SOURCE_DIR} -) - vci_add_executable (commandlineDecimater ../decimater.cc) target_link_libraries (commandlineDecimater diff --git a/src/OpenMesh/Apps/Dualizer/CMakeLists.txt b/src/OpenMesh/Apps/Dualizer/CMakeLists.txt index d4cbac17..51b6fe47 100644 --- a/src/OpenMesh/Apps/Dualizer/CMakeLists.txt +++ b/src/OpenMesh/Apps/Dualizer/CMakeLists.txt @@ -1,9 +1,5 @@ include (VCICommon) -include_directories ( - ../../.. -) - vci_add_executable (Dualizer dualizer.cc) target_link_libraries (Dualizer diff --git a/src/OpenMesh/Apps/ProgViewer/CMakeLists.txt b/src/OpenMesh/Apps/ProgViewer/CMakeLists.txt index 2a3e2daf..3fea20a6 100644 --- a/src/OpenMesh/Apps/ProgViewer/CMakeLists.txt +++ b/src/OpenMesh/Apps/ProgViewer/CMakeLists.txt @@ -1,11 +1,5 @@ include (VCICommon) -include_directories ( - ../../.. - ${CMAKE_CURRENT_SOURCE_DIR} -) - - set( headers ProgViewerWidget.hh ../QtViewer/QGLViewerWidget.hh diff --git a/src/OpenMesh/Apps/QtViewer/CMakeLists.txt b/src/OpenMesh/Apps/QtViewer/CMakeLists.txt index 38fb3e33..fd401fb5 100644 --- a/src/OpenMesh/Apps/QtViewer/CMakeLists.txt +++ b/src/OpenMesh/Apps/QtViewer/CMakeLists.txt @@ -1,15 +1,5 @@ include (VCICommon) -include_directories ( - ../../.. - ${CMAKE_CURRENT_SOURCE_DIR} -) - -# source code directories -set (directories - . -) - set (sources MeshViewerWidget.cc QGLViewerWidget.cc diff --git a/src/OpenMesh/Apps/Smoothing/CMakeLists.txt b/src/OpenMesh/Apps/Smoothing/CMakeLists.txt index e3c24bf8..3c2520f4 100644 --- a/src/OpenMesh/Apps/Smoothing/CMakeLists.txt +++ b/src/OpenMesh/Apps/Smoothing/CMakeLists.txt @@ -1,10 +1,5 @@ include (VCICommon) -include_directories ( - ../../.. - ${CMAKE_CURRENT_SOURCE_DIR} -) - vci_add_executable (Smoothing smooth.cc) target_link_libraries (Smoothing diff --git a/src/OpenMesh/Apps/Subdivider/SubdividerGui/CMakeLists.txt b/src/OpenMesh/Apps/Subdivider/SubdividerGui/CMakeLists.txt index b981841b..7cb64773 100644 --- a/src/OpenMesh/Apps/Subdivider/SubdividerGui/CMakeLists.txt +++ b/src/OpenMesh/Apps/Subdivider/SubdividerGui/CMakeLists.txt @@ -1,10 +1,5 @@ include (VCICommon) -include_directories ( - ../../../.. - ${CMAKE_CURRENT_SOURCE_DIR} -) - set (headers ../MeshViewerWidget.hh ../SubdivideWidget.hh diff --git a/src/OpenMesh/Apps/Subdivider/commandlineAdaptiveSubdivider/CMakeLists.txt b/src/OpenMesh/Apps/Subdivider/commandlineAdaptiveSubdivider/CMakeLists.txt index b89243b0..456476d3 100644 --- a/src/OpenMesh/Apps/Subdivider/commandlineAdaptiveSubdivider/CMakeLists.txt +++ b/src/OpenMesh/Apps/Subdivider/commandlineAdaptiveSubdivider/CMakeLists.txt @@ -1,10 +1,5 @@ include (VCICommon) -include_directories ( - ../../../.. - ${CMAKE_CURRENT_SOURCE_DIR} -) - vci_add_executable (commandlineAdaptiveSubdivider ../adaptive_subdivider.cc) target_link_libraries (commandlineAdaptiveSubdivider diff --git a/src/OpenMesh/Apps/Subdivider/commandlineSubdivider/CMakeLists.txt b/src/OpenMesh/Apps/Subdivider/commandlineSubdivider/CMakeLists.txt index d341ad6b..1c9ce524 100644 --- a/src/OpenMesh/Apps/Subdivider/commandlineSubdivider/CMakeLists.txt +++ b/src/OpenMesh/Apps/Subdivider/commandlineSubdivider/CMakeLists.txt @@ -1,10 +1,5 @@ include (VCICommon) -include_directories ( - ../../../.. - ${CMAKE_CURRENT_SOURCE_DIR} -) - vci_add_executable (commandlineSubdivider ../subdivider.cc) target_link_libraries (commandlineSubdivider diff --git a/src/OpenMesh/Apps/VDProgMesh/Analyzer/CMakeLists.txt b/src/OpenMesh/Apps/VDProgMesh/Analyzer/CMakeLists.txt index 6b73f101..1519d104 100644 --- a/src/OpenMesh/Apps/VDProgMesh/Analyzer/CMakeLists.txt +++ b/src/OpenMesh/Apps/VDProgMesh/Analyzer/CMakeLists.txt @@ -1,10 +1,5 @@ include (VCICommon) -include_directories ( - ../../../.. - ${CMAKE_CURRENT_SOURCE_DIR} -) - vci_add_executable (Analyzer vdpmanalyzer.cc) target_link_libraries (Analyzer diff --git a/src/OpenMesh/Apps/VDProgMesh/Synthesizer/CMakeLists.txt b/src/OpenMesh/Apps/VDProgMesh/Synthesizer/CMakeLists.txt index 1cc83663..983cd2ab 100644 --- a/src/OpenMesh/Apps/VDProgMesh/Synthesizer/CMakeLists.txt +++ b/src/OpenMesh/Apps/VDProgMesh/Synthesizer/CMakeLists.txt @@ -1,10 +1,5 @@ include (VCICommon) -include_directories ( - ../../../.. - ${CMAKE_CURRENT_SOURCE_DIR} -) - set (headers VDPMSynthesizerViewerWidget.hh ) diff --git a/src/OpenMesh/Apps/VDProgMesh/mkbalancedpm/CMakeLists.txt b/src/OpenMesh/Apps/VDProgMesh/mkbalancedpm/CMakeLists.txt index 7d8e1a10..0f61f634 100644 --- a/src/OpenMesh/Apps/VDProgMesh/mkbalancedpm/CMakeLists.txt +++ b/src/OpenMesh/Apps/VDProgMesh/mkbalancedpm/CMakeLists.txt @@ -1,10 +1,5 @@ include (VCICommon) -include_directories ( - ../../../.. - ${CMAKE_CURRENT_SOURCE_DIR} -) - vci_add_executable (mkbalancedpm mkbalancedpm.cc) target_link_libraries (mkbalancedpm diff --git a/src/OpenMesh/Apps/mconvert/CMakeLists.txt b/src/OpenMesh/Apps/mconvert/CMakeLists.txt index 2aa7f742..b05d1d17 100644 --- a/src/OpenMesh/Apps/mconvert/CMakeLists.txt +++ b/src/OpenMesh/Apps/mconvert/CMakeLists.txt @@ -1,9 +1,5 @@ include (VCICommon) -include_directories ( - ../../.. -) - vci_add_executable (mconvert mconvert.cc) target_link_libraries (mconvert diff --git a/src/OpenMesh/Core/CMakeLists.txt b/src/OpenMesh/Core/CMakeLists.txt index 7a5269cf..48f55474 100644 --- a/src/OpenMesh/Core/CMakeLists.txt +++ b/src/OpenMesh/Core/CMakeLists.txt @@ -1,29 +1,135 @@ include (VCICommon) -include_directories ( - ../.. - ${CMAKE_CURRENT_SOURCE_DIR} +set ( headers +Geometry/Config.hh +Geometry/EigenVectorT.hh +Geometry/LoopSchemeMaskT.hh +Geometry/MathDefs.hh +Geometry/NormalConeT.hh +Geometry/NormalConeT_impl.hh +Geometry/Plane3d.hh +Geometry/QuadricT.hh +Geometry/Vector11T.hh +Geometry/VectorT.hh +Geometry/VectorT_inc.hh +IO/BinaryHelper.hh +IO/IOInstances.hh +IO/IOManager.hh +IO/MeshIO.hh +IO/OFFFormat.hh +IO/OMFormat.hh +IO/OMFormatT_impl.hh +IO/Options.hh +IO/SR_binary.hh +IO/SR_binary_spec.hh +IO/SR_binary_vector_of_bool.hh +IO/SR_rbo.hh +IO/SR_store.hh +IO/SR_types.hh +IO/StoreRestore.hh +IO/exporter/BaseExporter.hh +IO/exporter/ExporterT.hh +IO/importer/BaseImporter.hh +IO/importer/ImporterT.hh +IO/reader/BaseReader.hh +IO/reader/OBJReader.hh +IO/reader/OFFReader.hh +IO/reader/OMReader.hh +IO/reader/PLYReader.hh +IO/reader/STLReader.hh +IO/writer/BaseWriter.hh +IO/writer/OBJWriter.hh +IO/writer/OFFWriter.hh +IO/writer/OMWriter.hh +IO/writer/PLYWriter.hh +IO/writer/STLWriter.hh +IO/writer/VTKWriter.hh +Mesh/ArrayItems.hh +Mesh/ArrayKernel.hh +Mesh/ArrayKernelT_impl.hh +Mesh/AttribKernelT.hh +Mesh/Attributes.hh +Mesh/BaseKernel.hh +Mesh/BaseMesh.hh +Mesh/Casts.hh +Mesh/CirculatorsT.hh +Mesh/DefaultPolyMesh.hh +Mesh/DefaultTriMesh.hh +Mesh/FinalMeshItemsT.hh +Mesh/Handles.hh +Mesh/IteratorsT.hh +Mesh/PolyConnectivity.hh +Mesh/PolyConnectivity_inline_impl.hh +Mesh/PolyMeshT.hh +Mesh/PolyMeshT_impl.hh +Mesh/PolyMesh_ArrayKernelT.hh +Mesh/SmartHandles.hh +Mesh/SmartRange.hh +Mesh/Status.hh +Mesh/Tags.hh +Mesh/Traits.hh +Mesh/TriConnectivity.hh +Mesh/TriMeshT.hh +Mesh/TriMeshT_impl.hh +Mesh/TriMesh_ArrayKernelT.hh +Mesh/gen/circulators_header.hh +Mesh/gen/circulators_template.hh +Mesh/gen/footer.hh +Mesh/gen/iterators_header.hh +Mesh/gen/iterators_template.hh +System/OpenMeshDLLMacros.hh +System/compiler.hh +System/config.hh +System/mostream.hh +System/omstream.hh +Utils/AutoPropertyHandleT.hh +Utils/BaseProperty.hh +Utils/Endian.hh +Utils/GenProg.hh +Utils/HandleToPropHandle.hh +Utils/Noncopyable.hh +Utils/Predicates.hh +Utils/Property.hh +Utils/PropertyContainer.hh +Utils/PropertyCreator.hh +Utils/PropertyManager.hh +Utils/RandomNumberGenerator.hh +Utils/SingletonT.hh +Utils/SingletonT_impl.hh +Utils/color_cast.hh +Utils/typename.hh +Utils/vector_cast.hh +Utils/vector_traits.hh ) -# source code directories -set (directories - . - Geometry - IO - IO/exporter - IO/importer - IO/reader - IO/writer - Mesh - Mesh/gen - System - Utils +set ( sources +IO/BinaryHelper.cc +IO/IOManager.cc +IO/OMFormat.cc +IO/reader/BaseReader.cc +IO/reader/OBJReader.cc +IO/reader/OFFReader.cc +IO/reader/OMReader.cc +IO/reader/PLYReader.cc +IO/reader/STLReader.cc +IO/writer/BaseWriter.cc +IO/writer/OBJWriter.cc +IO/writer/OFFWriter.cc +IO/writer/OMWriter.cc +IO/writer/PLYWriter.cc +IO/writer/STLWriter.cc +IO/writer/VTKWriter.cc +Mesh/ArrayKernel.cc +Mesh/BaseKernel.cc +Mesh/PolyConnectivity.cc +Mesh/TriConnectivity.cc +System/omstream.cc +Utils/BaseProperty.cc +Utils/Endian.cc +Utils/PropertyCreator.cc +Utils/RandomNumberGenerator.cc ) -# collect all header and source files -vci_append_files (headers "*.hh" ${directories}) -vci_append_files (sources "*.cc" ${directories}) - # Disable Library installation when not building OpenMesh on its own but as part of another project! if ( NOT ${CMAKE_PROJECT_NAME} MATCHES "OpenMesh") set(VCI_NO_LIBRARY_INSTALL true) @@ -36,12 +142,25 @@ if (WIN32) add_definitions( -DOPENMESHDLL -DBUILDOPENMESHDLL) vci_add_library (OpenMeshCore SHARED ${sources} ${headers}) else() - # OpenMesh has no dll exports so we have to build a static library on windows vci_add_library (OpenMeshCore STATIC ${sources} ${headers}) endif() + target_include_directories(OpenMeshCore PUBLIC + $ + $) + + else () vci_add_library (OpenMeshCore SHAREDANDSTATIC ${sources} ${headers}) + + target_include_directories(OpenMeshCore PUBLIC + $ + $) + + target_include_directories(OpenMeshCoreStatic PUBLIC + $ + $) + set_target_properties (OpenMeshCore PROPERTIES VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} ) endif () @@ -53,18 +172,10 @@ endif () # Add core as dependency before fixbundle if ( (${CMAKE_PROJECT_NAME} MATCHES "OpenMesh") AND BUILD_APPS ) - if ( WIN32 ) - if ( NOT "${CMAKE_GENERATOR}" MATCHES "MinGW Makefiles" ) + if ( APPLE OR (WIN32 AND NOT "${CMAKE_GENERATOR}" MATCHES "MinGW Makefiles" ) ) add_dependencies (fixbundle OpenMeshCore) - endif() endif() - # Add core as dependency before fixbundle - if ( APPLE ) - # let bundle generation depend on targets - add_dependencies (fixbundle OpenMeshCore) - endif () - endif() # if we build debug and release in the same dir, we want to install both! @@ -126,25 +237,8 @@ install(DIRECTORY . #install the config file install(FILES System/config.h DESTINATION include/OpenMesh/Core/System) -#install inlined Files from IO -install(DIRECTORY IO/ - DESTINATION include/OpenMesh/Core/IO - FILES_MATCHING - PATTERN "*.inl" - PATTERN "CVS" EXCLUDE - PATTERN ".svn" EXCLUDE - PATTERN "reader" EXCLUDE - PATTERN "writer" EXCLUDE - PATTERN "importer" EXCLUDE - PATTERN "exporter" EXCLUDE - PATTERN "tmp" EXCLUDE - PATTERN "Debian*" EXCLUDE ) endif () -target_include_directories(OpenMeshCore PUBLIC - $ - $) - install(TARGETS OpenMeshCore EXPORT OpenMeshConfig ARCHIVE DESTINATION ${VCI_PROJECT_LIBDIR} LIBRARY DESTINATION ${VCI_PROJECT_LIBDIR} diff --git a/src/OpenMesh/Core/IO/Options.hh b/src/OpenMesh/Core/IO/Options.hh index cac16812..1023ccd0 100644 --- a/src/OpenMesh/Core/IO/Options.hh +++ b/src/OpenMesh/Core/IO/Options.hh @@ -51,6 +51,7 @@ // OpenMesh #include +#include //== NAMESPACES ============================================================== @@ -115,31 +116,24 @@ public: TexCoordST = 0x8000 ///< Write texture coordinates as ST instead of UV }; + /// Texture filename. This will be written as + /// map_Kd in the OBJ writer into the material file. + std::string texture_file ; + + /// Filename extension for material files when writing OBJs + /// default is currently .mat + std::string material_file_extension; + public: /// Default constructor - Options() : flags_( Default ) + Options() : texture_file(""), material_file_extension(".mat"), flags_( Default ) { } - - /// Copy constructor - Options(const Options& _opt) : flags_(_opt.flags_) - { } - - - /// Initializing constructor setting a single option - Options(Flag _flg) : flags_( _flg) - { } - - - /// Initializing constructor setting multiple options + /// Initializing constructor setting multiple options Options(const value_type _flgs) : flags_( _flgs) { } - - ~Options() - { } - /// Restore state after default constructor. void cleanup(void) { flags_ = Default; } @@ -154,17 +148,9 @@ public: public: - //@{ - /// Copy options defined in _rhs. - - Options& operator = ( const Options& _rhs ) - { flags_ = _rhs.flags_; return *this; } - Options& operator = ( const value_type _rhs ) { flags_ = _rhs; return *this; } - //@} - //@{ /// Unset options defined in _rhs. diff --git a/src/OpenMesh/Core/IO/SR_binary_spec.hh b/src/OpenMesh/Core/IO/SR_binary_spec.hh index 2e8a34c0..4d2b3bf3 100644 --- a/src/OpenMesh/Core/IO/SR_binary_spec.hh +++ b/src/OpenMesh/Core/IO/SR_binary_spec.hh @@ -330,7 +330,7 @@ struct binary< std::vector< T >, typename std::enable_if::is_streamable; - static size_t size_of(bool _store_size = true) + static size_t size_of(bool /*_store_size*/ = true) { return IO::UnknownSize; } static size_t size_of(const value_type& _v, bool _store_size = true) @@ -424,7 +424,7 @@ struct binary< std::vector< T >, typename std::enable_if +#include // ---------------------------------------------------------------------------- diff --git a/src/OpenMesh/Core/IO/SR_binary_vector_of_bool.inl b/src/OpenMesh/Core/IO/SR_binary_vector_of_bool.hh similarity index 97% rename from src/OpenMesh/Core/IO/SR_binary_vector_of_bool.inl rename to src/OpenMesh/Core/IO/SR_binary_vector_of_bool.hh index 2896bb47..70e06e3f 100644 --- a/src/OpenMesh/Core/IO/SR_binary_vector_of_bool.inl +++ b/src/OpenMesh/Core/IO/SR_binary_vector_of_bool.hh @@ -6,7 +6,7 @@ template <> struct binary< std::vector > static const bool is_streamable = true; - static size_t size_of(bool _store_size = true) { return UnknownSize; } + static size_t size_of(bool /*_store_size*/ = true) { return UnknownSize; } static size_t size_of(const value_type& _v, bool _store_size = true) { size_t size = _v.size() / 8 + ((_v.size() % 8)!=0); diff --git a/src/OpenMesh/Core/IO/writer/OBJWriter.cc b/src/OpenMesh/Core/IO/writer/OBJWriter.cc index da706f99..97c0a00f 100644 --- a/src/OpenMesh/Core/IO/writer/OBJWriter.cc +++ b/src/OpenMesh/Core/IO/writer/OBJWriter.cc @@ -130,26 +130,31 @@ write(const std::string& _filename, BaseExporter& _be, Options _opt, std::stream size_t _OBJWriter_::getMaterial(OpenMesh::Vec3f _color) const { - for (size_t i=0; i < material_.size(); i++) - if(material_[i] == _color) - return i; + auto idx_it = material_idx_.find(_color); + if (idx_it != material_idx_.end()) { + return idx_it->second; + } else { + size_t idx = material_.size(); + material_.push_back(_color); + material_idx_[_color] = idx; - //not found add new material - material_.push_back( _color ); - return material_.size()-1; + return idx; + } } //----------------------------------------------------------------------------- size_t _OBJWriter_::getMaterial(OpenMesh::Vec4f _color) const { - for (size_t i=0; i < materialA_.size(); i++) - if(materialA_[i] == _color) - return i; - - //not found add new material - materialA_.push_back( _color ); - return materialA_.size()-1; + auto idx_it = materialA_idx_.find(_color); + if (idx_it != materialA_idx_.end()) { + return idx_it->second; + } else { + size_t idx = materialA_.size(); + materialA_.push_back(_color); + materialA_idx_[_color] = idx; + return idx; + } } //----------------------------------------------------------------------------- @@ -162,7 +167,9 @@ writeMaterial(std::ostream& _out, BaseExporter& _be, Options _opt) const OpenMesh::Vec4f cA; material_.clear(); + material_idx_.clear(); materialA_.clear(); + materialA_idx_.clear(); //iterate over faces for (size_t i=0, nF=_be.n_faces(); i texMap; //collect Texturevertices from halfedges @@ -387,7 +399,9 @@ write(std::ostream& _out, BaseExporter& _be, Options _opt, std::streamsize _prec } material_.clear(); + material_idx_.clear(); materialA_.clear(); + materialA_idx_.clear(); return true; } diff --git a/src/OpenMesh/Core/IO/writer/OBJWriter.hh b/src/OpenMesh/Core/IO/writer/OBJWriter.hh index 6c05cb20..d9168aae 100644 --- a/src/OpenMesh/Core/IO/writer/OBJWriter.hh +++ b/src/OpenMesh/Core/IO/writer/OBJWriter.hh @@ -103,7 +103,9 @@ private: mutable std::string objName_; mutable std::vector< OpenMesh::Vec3f > material_; + mutable std::map< OpenMesh::Vec3f, size_t> material_idx_; mutable std::vector< OpenMesh::Vec4f > materialA_; + mutable std::map< OpenMesh::Vec4f, size_t> materialA_idx_; size_t getMaterial(OpenMesh::Vec3f _color) const; diff --git a/src/OpenMesh/Core/IO/writer/PLYWriter.hh b/src/OpenMesh/Core/IO/writer/PLYWriter.hh index c6fd0730..af190c13 100644 --- a/src/OpenMesh/Core/IO/writer/PLYWriter.hh +++ b/src/OpenMesh/Core/IO/writer/PLYWriter.hh @@ -135,7 +135,7 @@ private: writeValue(_type, _out, _value); } template - void writeProxy(ValueType _type, std::ostream& _out, T _value, OpenMesh::GenProg::FalseType /*_binary*/) const + void writeProxy(ValueType /*_type*/, std::ostream& _out, T _value, OpenMesh::GenProg::FalseType /*_binary*/) const { _out << " " << _value; } diff --git a/src/OpenMesh/Core/Mesh/PolyMeshT.hh b/src/OpenMesh/Core/Mesh/PolyMeshT.hh index b6c70bb7..a09bbf8c 100644 --- a/src/OpenMesh/Core/Mesh/PolyMeshT.hh +++ b/src/OpenMesh/Core/Mesh/PolyMeshT.hh @@ -456,13 +456,7 @@ public: } /// calculated and returns the average of the two vertex normals - Normal calc_normal(EdgeHandle _eh) const - { - HalfedgeHandle _heh = this->halfedge_handle(_eh, 0); - VertexHandle vh0 = this->from_vertex_handle(_heh); - VertexHandle vh1 = this->to_vertex_handle(_heh); - return 0.5 * (this->calc_normal(vh0) + this->calc_normal(vh1)); - } + Normal calc_normal(EdgeHandle _eh) const; /** defines a consistent representation of a sector geometry: the halfedge _in_heh defines the sector orientation diff --git a/src/OpenMesh/Core/Mesh/PolyMeshT_impl.hh b/src/OpenMesh/Core/Mesh/PolyMeshT_impl.hh index c98f2bed..e998dcc9 100644 --- a/src/OpenMesh/Core/Mesh/PolyMeshT_impl.hh +++ b/src/OpenMesh/Core/Mesh/PolyMeshT_impl.hh @@ -109,7 +109,7 @@ PolyMeshT::calc_face_normal_impl(FaceHandle _fh, PointIs3DTag) const { assert(this->halfedge_handle(_fh).is_valid()); ConstFaceVertexIter fv_it(this->cfv_iter(_fh)); - + // Safeguard for 1-gons if (!(++fv_it).is_valid()) return Normal(0, 0, 0); @@ -140,7 +140,7 @@ PolyMeshT::calc_face_normal_impl(FaceHandle _fh, PointIs3DTag) const } const typename vector_traits::value_type length = norm(n); - + // The expression ((n *= (1.0/norm)),n) is used because the OpenSG // vector class does not return self after component-wise // self-multiplication with a scalar!!! @@ -401,8 +401,8 @@ calc_halfedge_normal(HalfedgeHandle _heh, const double _feature_angle) const } Normal n(0,0,0); - for(unsigned int i=0; i +typename PolyMeshT::Normal +PolyMeshT:: +calc_normal(EdgeHandle _eh) const +{ + Normal n(0); + for (int i = 0; i < 2; ++i) + { + const auto heh = this->halfedge_handle(_eh, i); + const auto fh = this->face_handle(heh); + if (fh.is_valid()) + n += calc_normal(fh); + } + const auto length = norm(n); + if (length != 0) + n /= length; + return n; +} + +//----------------------------------------------------------------------------- + + template bool PolyMeshT:: @@ -444,8 +466,8 @@ is_estimated_feature_edge(HalfedgeHandle _heh, const double _feature_angle) cons FaceHandle fh0 = Kernel::face_handle(_heh); FaceHandle fh1 = Kernel::face_handle(Kernel::opposite_halfedge_handle(_heh)); - Normal fn0 = Kernel::normal(fh0); - Normal fn1 = Kernel::normal(fh1); + Normal fn0 = Kernel::has_face_normals() ? Kernel::normal(fh0) : calc_face_normal(fh0); + Normal fn1 = Kernel::has_face_normals() ? Kernel::normal(fh1) : calc_face_normal(fh1); // dihedral angle above angle threshold return ( dot(fn0,fn1) < cos(_feature_angle) ); diff --git a/src/OpenMesh/Tools/CMakeLists.txt b/src/OpenMesh/Tools/CMakeLists.txt index 0170e2b8..08baecbd 100644 --- a/src/OpenMesh/Tools/CMakeLists.txt +++ b/src/OpenMesh/Tools/CMakeLists.txt @@ -1,29 +1,98 @@ include (VCICommon) -include_directories ( - ../.. - ${CMAKE_CURRENT_SOURCE_DIR} +set ( headers +Decimater/BaseDecimaterT.hh +Decimater/BaseDecimaterT_impl.hh +Decimater/CollapseInfoT.hh +Decimater/DecimaterT.hh +Decimater/DecimaterT_impl.hh +Decimater/McDecimaterT.hh +Decimater/McDecimaterT_impl.hh +Decimater/MixedDecimaterT.hh +Decimater/MixedDecimaterT_impl.hh +Decimater/ModAspectRatioT.hh +Decimater/ModAspectRatioT_impl.hh +Decimater/ModBaseT.hh +Decimater/ModEdgeLengthT.hh +Decimater/ModEdgeLengthT_impl.hh +Decimater/ModHausdorffT.hh +Decimater/ModHausdorffT_impl.hh +Decimater/ModIndependentSetsT.hh +Decimater/ModNormalDeviationT.hh +Decimater/ModNormalFlippingT.hh +Decimater/ModProgMeshT.hh +Decimater/ModProgMeshT_impl.hh +Decimater/ModQuadricT.hh +Decimater/ModQuadricT_impl.hh +Decimater/ModRoundnessT.hh +Decimater/Observer.hh +Dualizer/meshDualT.hh +Smoother/JacobiLaplaceSmootherT.hh +Smoother/JacobiLaplaceSmootherT_impl.hh +Smoother/LaplaceSmootherT.hh +Smoother/LaplaceSmootherT_impl.hh +Smoother/SmootherT.hh +Smoother/SmootherT_impl.hh +Smoother/smooth_mesh.hh +Subdivider/Adaptive/Composite/CompositeT.hh +Subdivider/Adaptive/Composite/CompositeT_impl.hh +Subdivider/Adaptive/Composite/CompositeTraits.hh +Subdivider/Adaptive/Composite/RuleInterfaceT.hh +Subdivider/Adaptive/Composite/RulesT.hh +Subdivider/Adaptive/Composite/RulesT_impl.hh +Subdivider/Adaptive/Composite/Traits.hh +Subdivider/Uniform/Composite/CompositeT.hh +Subdivider/Uniform/Composite/CompositeT_impl.hh +Subdivider/Uniform/Composite/CompositeTraits.hh +Subdivider/Uniform/CatmullClarkT.hh +Subdivider/Uniform/CatmullClarkT_impl.hh +Subdivider/Uniform/CompositeLoopT.hh +Subdivider/Uniform/CompositeSqrt3T.hh +Subdivider/Uniform/LongestEdgeT.hh +Subdivider/Uniform/LoopT.hh +Subdivider/Uniform/MidpointT.hh +Subdivider/Uniform/ModifiedButterFlyT.hh +Subdivider/Uniform/Sqrt3InterpolatingSubdividerLabsikGreinerT.hh +Subdivider/Uniform/Sqrt3T.hh +Subdivider/Uniform/SubdividerT.hh +Utils/Config.hh +Utils/GLConstAsString.hh +Utils/Gnuplot.hh +Utils/HeapT.hh +Utils/MeshCheckerT.hh +Utils/MeshCheckerT_impl.hh +Utils/NumLimitsT.hh +Utils/StripifierT.hh +Utils/StripifierT_impl.hh +Utils/TestingFramework.hh +Utils/Timer.hh +Utils/conio.hh +VDPM/MeshTraits.hh +VDPM/StreamingDef.hh +VDPM/VFront.hh +VDPM/VHierarchy.hh +VDPM/VHierarchyNode.hh +VDPM/VHierarchyNodeIndex.hh +VDPM/VHierarchyWindow.hh +VDPM/ViewingParameters.hh ) -# source code directories -set (directories - . - Decimater - Dualizer - Smoother - Subdivider/Adaptive/Composite - Subdivider/Uniform/Composite - Subdivider/Uniform - Utils - VDPM + +set ( sources +Decimater/Observer.cc +Utils/Gnuplot.cc +Utils/Timer.cc +Utils/conio.cc +VDPM/VFront.cc +VDPM/VHierarchy.cc +VDPM/VHierarchyNodeIndex.cc +VDPM/VHierarchyWindow.cc +VDPM/ViewingParameters.cc ) -# collect all header and source files -vci_append_files (headers "*.hh" ${directories}) -vci_append_files (sources "*.cc" ${directories}) IF(WIN32 AND NOT MINGW) - vci_append_files (sources "*.c" ${directories}) + list(APPEND sources "Utils/getopt.c") ENDIF(WIN32 AND NOT MINGW) # Disable Library installation when not building OpenMesh on its own but as part of another project! @@ -42,8 +111,21 @@ if (WIN32) vci_add_library (OpenMeshTools STATIC ${sources} ${headers}) endif() + target_include_directories(OpenMeshTools PUBLIC + $ + $) + else () vci_add_library (OpenMeshTools SHAREDANDSTATIC ${sources} ${headers}) + + target_include_directories(OpenMeshTools PUBLIC + $ + $) + + target_include_directories(OpenMeshToolsStatic PUBLIC + $ + $) + set_target_properties (OpenMeshTools PROPERTIES VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} ) endif () @@ -104,9 +186,8 @@ else() endif() if (NOT APPLE AND NOT ${OPENMESH_NO_INSTALL_HEADERS}) - -# Install Header Files -install(DIRECTORY . + # Install Header Files + install(DIRECTORY . DESTINATION include/OpenMesh/Tools FILES_MATCHING PATTERN "*.hh" @@ -116,15 +197,10 @@ install(DIRECTORY . PATTERN "Templates" EXCLUDE PATTERN "Debian*" EXCLUDE) -#install the config file -install(FILES Utils/getopt.h DESTINATION include/OpenMesh/Tools/Utils) - + #install the config file + install(FILES Utils/getopt.h DESTINATION include/OpenMesh/Tools/Utils) endif () -target_include_directories(OpenMeshTools PUBLIC - $ - $) - install(TARGETS OpenMeshTools EXPORT OpenMeshConfig ARCHIVE DESTINATION ${VCI_PROJECT_LIBDIR} LIBRARY DESTINATION ${VCI_PROJECT_LIBDIR} diff --git a/src/OpenMesh/Tools/Decimater/ModAspectRatioT_impl.hh b/src/OpenMesh/Tools/Decimater/ModAspectRatioT_impl.hh index 0546d540..b18761ff 100644 --- a/src/OpenMesh/Tools/Decimater/ModAspectRatioT_impl.hh +++ b/src/OpenMesh/Tools/Decimater/ModAspectRatioT_impl.hh @@ -68,16 +68,16 @@ typename ModAspectRatioT::Scalar ModAspectRatioT::aspectRatio( Point d1 = _v1 - _v2; // finds the max squared edge length - Scalar l2, maxl2 = d0.sqrnorm(); - if ((l2 = d1.sqrnorm()) > maxl2) + Scalar l2, maxl2 = sqrnorm(d0); + if ((l2 = sqrnorm(d1)) > maxl2) maxl2 = l2; // keep searching for the max squared edge length d1 = _v2 - _v0; - if ((l2 = d1.sqrnorm()) > maxl2) + if ((l2 = sqrnorm(d1)) > maxl2) maxl2 = l2; // squared area of the parallelogram spanned by d0 and d1 - Scalar a2 = (d0 % d1).sqrnorm(); + Scalar a2 = sqrnorm(d0 % d1); // the area of the triangle would be // sqrt(a2)/2 or length * height / 2 diff --git a/src/OpenMesh/Tools/Decimater/ModEdgeLengthT_impl.hh b/src/OpenMesh/Tools/Decimater/ModEdgeLengthT_impl.hh index 6897fe36..60f9fd5f 100644 --- a/src/OpenMesh/Tools/Decimater/ModEdgeLengthT_impl.hh +++ b/src/OpenMesh/Tools/Decimater/ModEdgeLengthT_impl.hh @@ -72,7 +72,7 @@ ModEdgeLengthT::ModEdgeLengthT(MeshT &_mesh, float _edge_length, template float ModEdgeLengthT::collapse_priority(const CollapseInfo& _ci) { - typename Mesh::Scalar sqr_length = (_ci.p0 - _ci.p1).sqrnorm(); + typename Mesh::Scalar sqr_length = sqrnorm(_ci.p0 - _ci.p1); return ( (sqr_length <= sqr_edge_length_) ? sqr_length : float(Base::ILLEGAL_COLLAPSE)); } diff --git a/src/OpenMesh/Tools/Decimater/ModHausdorffT_impl.hh b/src/OpenMesh/Tools/Decimater/ModHausdorffT_impl.hh index 1fd30e01..fc12d1b6 100644 --- a/src/OpenMesh/Tools/Decimater/ModHausdorffT_impl.hh +++ b/src/OpenMesh/Tools/Decimater/ModHausdorffT_impl.hh @@ -76,7 +76,7 @@ distPointTriangleSquared( const Point& _p, const Point v0v1 = _v1 - _v0; const Point v0v2 = _v2 - _v0; const Point n = v0v1 % v0v2; // not normalized ! - const Scalar d = n.sqrnorm(); + const Scalar d = sqrnorm(n); // Check if the triangle is degenerated @@ -88,9 +88,9 @@ distPointTriangleSquared( const Point& _p, // these are not needed for every point, should still perform // better with many points against one triangle const Point v1v2 = _v2 - _v1; - const Scalar inv_v0v2_2 = static_cast(1.0) / v0v2.sqrnorm(); - const Scalar inv_v0v1_2 = static_cast(1.0) / v0v1.sqrnorm(); - const Scalar inv_v1v2_2 = static_cast(1.0) / v1v2.sqrnorm(); + const Scalar inv_v0v2_2 = static_cast(1.0) / sqrnorm(v0v2); + const Scalar inv_v0v1_2 = static_cast(1.0) / sqrnorm(v0v1); + const Scalar inv_v1v2_2 = static_cast(1.0) / sqrnorm(v1v2); Point v0p = _p - _v0; @@ -177,10 +177,10 @@ distPointTriangleSquared( const Point& _p, } } else { // Calculate the distance to an interior point of the triangle - return ( (_p - n*((n|v0p) * invD)) - _p).sqrnorm(); + return sqrnorm( (_p - n*((n|v0p) * invD)) - _p); } - return (v0p - _p).sqrnorm(); + return sqrnorm(v0p - _p); } diff --git a/src/OpenMesh/Tools/Decimater/ModRoundnessT.hh b/src/OpenMesh/Tools/Decimater/ModRoundnessT.hh index fe58d10c..568083a9 100644 --- a/src/OpenMesh/Tools/Decimater/ModRoundnessT.hh +++ b/src/OpenMesh/Tools/Decimater/ModRoundnessT.hh @@ -287,10 +287,10 @@ public: // specific methods Vec3f vecAB = B-A; // compute squared values to avoid sqrt-computations - value_type aa = (B-C).sqrnorm(); - value_type bb = vecAC.sqrnorm(); - value_type cc = vecAB.sqrnorm(); - value_type AA = cross(vecAC,vecAB).sqrnorm(); // without factor 1/4 **) + value_type aa = sqrnorm(B-C); + value_type bb = sqrnorm(vecAC); + value_type cc = sqrnorm(vecAB); + value_type AA = sqrnorm(cross(vecAC,vecAB)); // without factor 1/4 **) if ( AA < epsilon ) return 0.0; diff --git a/src/OpenMesh/Tools/Subdivider/Uniform/LongestEdgeT.hh b/src/OpenMesh/Tools/Subdivider/Uniform/LongestEdgeT.hh index 2da6d333..d6358ee6 100644 --- a/src/OpenMesh/Tools/Subdivider/Uniform/LongestEdgeT.hh +++ b/src/OpenMesh/Tools/Subdivider/Uniform/LongestEdgeT.hh @@ -160,7 +160,7 @@ protected: const typename MeshType::Point to = _m.point(_m.to_vertex_handle(_m.halfedge_handle(*eit,0))); const typename MeshType::Point from = _m.point(_m.from_vertex_handle(_m.halfedge_handle(*eit,0))); - real_t length = (to - from).sqrnorm(); + real_t length = sqrnorm(to - from); // Only push the edges that need to be split if ( length > max_edge_length_squared_ ) @@ -187,7 +187,7 @@ protected: typename MeshType::EdgeHandle eh = _m.edge_handle(*voh_it); const typename MeshType::Point to = _m.point(_m.to_vertex_handle(*voh_it)); const typename MeshType::Point from = _m.point(_m.from_vertex_handle(*voh_it)); - real_t length = (to - from).sqrnorm(); + real_t length = sqrnorm(to - from); // Only push the edges that need to be split if ( length > max_edge_length_squared_ ) diff --git a/src/Unittests/CMakeLists.txt b/src/Unittests/CMakeLists.txt index 0c2a61d4..133fd41c 100644 --- a/src/Unittests/CMakeLists.txt +++ b/src/Unittests/CMakeLists.txt @@ -1,10 +1,68 @@ include (VCICommon) -include_directories ( - .. - ${CMAKE_CURRENT_SOURCE_DIR} +set( UNITTEST_SRC +unittests.cc +unittests_add_face.cc +unittests_boundary.cc +unittests_centroid_calculations.cc +unittests_convert_meshes.cc +unittests_cpp_11_features.cc +unittests_decimater.cc +unittests_delete_face.cc +unittests_eigen3_type.cc +unittests_faceless_mesh.cc +unittests_mc_decimater.cc +unittests_mesh_cast.cc +unittests_mesh_dual.cc +unittests_mesh_type.cc +unittests_mixed_decimater.cc +unittests_normal_calculations.cc +unittests_polymesh_collapse.cc +unittests_polymesh_vec2i.cc +unittests_property.cc +unittests_propertymanager.cc +unittests_randomNumberGenerator.cc +unittests_read_write_OBJ.cc +unittests_read_write_OFF.cc +unittests_read_write_OM.cc +unittests_read_write_PLY.cc +unittests_read_write_STL.cc +unittests_set_positions_directly.cc +unittests_smart_handles.cc +unittests_smart_ranges.cc +unittests_smarttagger.cc +unittests_smoother.cc +unittests_split_copy.cc +unittests_split_edge_copy.cc +unittests_sr_binary.cc +unittests_stripifier.cc +unittests_subdivider_adaptive.cc +unittests_subdivider_uniform.cc +unittests_trimesh_circulator_current_halfedge_handle_replacement.cc +unittests_trimesh_circulator_face_edge.cc +unittests_trimesh_circulator_face_face.cc +unittests_trimesh_circulator_face_halfedge.cc +unittests_trimesh_circulator_face_vertex.cc +unittests_trimesh_circulator_halfedge_loop.cc +unittests_trimesh_circulator_vertex_edge.cc +unittests_trimesh_circulator_vertex_face.cc +unittests_trimesh_circulator_vertex_ihalfedge.cc +unittests_trimesh_circulator_vertex_ohalfedge.cc +unittests_trimesh_circulator_vertex_vertex.cc +unittests_trimesh_collapse.cc +unittests_trimesh_garbage_collection.cc +unittests_trimesh_iterators.cc +unittests_trimesh_others.cc +unittests_trimesh_ranges.cc +unittests_trimesh_split.cc +unittests_trimesh_vec2i.cc +unittests_tutorials.cc +unittests_vdpm.cc +unittests_vector_type.cc ) + + if ( NOT DEFINED OPENMESH_BUILD_UNIT_TESTS) set( OPENMESH_BUILD_UNIT_TESTS false CACHE BOOL "Enable or disable unit test builds in OpenMesh." ) endif() @@ -35,7 +93,6 @@ if ( OPENMESH_BUILD_UNIT_TESTS ) endif() # Create new target named unittests_hexmeshing - FILE(GLOB UNITTEST_SRC *.cc) # Create unittest executable vci_add_executable(unittests ${UNITTEST_SRC}) vci_add_executable(unittests_customvec ${UNITTEST_SRC}) diff --git a/src/Unittests/unittests_eigen3_type.cc b/src/Unittests/unittests_eigen3_type.cc index 32be1046..1eaf7159 100644 --- a/src/Unittests/unittests_eigen3_type.cc +++ b/src/Unittests/unittests_eigen3_type.cc @@ -9,10 +9,13 @@ #include #include #include +#include #include #include +#include + struct EigenTraits : OpenMesh::DefaultTraits { using Point = Eigen::Vector3d; using Normal = Eigen::Vector3d; @@ -266,6 +269,141 @@ TEST_F(OpenMeshEigenTest, Decimater) { EXPECT_EQ(1052u, mesh_.n_faces()) << "The number of faces after decimation is not correct!"; } +// Test decimation with Eigen as vector type +TEST_F(OpenMeshEigenTest, DecimaterWithEdgeLength) { + mesh_.clear(); + + bool ok = OpenMesh::IO::read_mesh(mesh_, "cube1.off"); + + EXPECT_TRUE(ok); + + EXPECT_EQ(7526u , mesh_.n_vertices()) << "The number of loaded vertices is not correct!"; + EXPECT_EQ(22572u, mesh_.n_edges()) << "The number of loaded edges is not correct!"; + EXPECT_EQ(15048u, mesh_.n_faces()) << "The number of loaded faces is not correct!"; + + mesh_.update_normals(); + + OpenMesh::Decimater::DecimaterT decimater(mesh_); + OpenMesh::Decimater::ModEdgeLengthT::Handle hModEdgeLength; // use a the edge length module + OpenMesh::Decimater::ModNormalDeviationT::Handle hModNormalDeviation; // also use normal deviation module as binary check + decimater.add(hModEdgeLength); + decimater.module(hModEdgeLength).set_edge_length(30.0); + decimater.add(hModNormalDeviation); + + decimater.module(hModNormalDeviation).set_normal_deviation(50); + decimater.initialize(); + size_t removedVertices = decimater.decimate_to(2); + mesh_.garbage_collection(); + + EXPECT_EQ(0u, removedVertices) << "The number of remove vertices is not correct!"; + EXPECT_EQ( 7526u, mesh_.n_vertices()) << "The number of vertices after decimation is not correct!"; + EXPECT_EQ(22572u, mesh_.n_edges()) << "The number of edges after decimation is not correct!"; + EXPECT_EQ(15048u, mesh_.n_faces()) << "The number of faces after decimation is not correct!"; +} + +TEST_F(OpenMeshEigenTest, Subdivider_Sqrt3) { + mesh_.clear(); + + // Add some vertices + Mesh::VertexHandle vhandle[9]; + + vhandle[0] = mesh_.add_vertex(EigenTriMesh::Point(0, 0, 0)); + vhandle[1] = mesh_.add_vertex(EigenTriMesh::Point(0, 1, 0)); + vhandle[2] = mesh_.add_vertex(EigenTriMesh::Point(0, 2, 0)); + vhandle[3] = mesh_.add_vertex(EigenTriMesh::Point(1, 0, 0)); + vhandle[4] = mesh_.add_vertex(EigenTriMesh::Point(1, 1, 0)); + vhandle[5] = mesh_.add_vertex(EigenTriMesh::Point(1, 2, 0)); + vhandle[6] = mesh_.add_vertex(EigenTriMesh::Point(2, 0, 0)); + vhandle[7] = mesh_.add_vertex(EigenTriMesh::Point(2, 1, 0)); + vhandle[8] = mesh_.add_vertex(EigenTriMesh::Point(2, 2, 0)); + + // Add eight faces + std::vector face_vhandles; + + face_vhandles.push_back(vhandle[0]); + face_vhandles.push_back(vhandle[4]); + face_vhandles.push_back(vhandle[3]); + + mesh_.add_face(face_vhandles); + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[0]); + face_vhandles.push_back(vhandle[1]); + face_vhandles.push_back(vhandle[4]); + + mesh_.add_face(face_vhandles); + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[1]); + face_vhandles.push_back(vhandle[2]); + face_vhandles.push_back(vhandle[4]); + + mesh_.add_face(face_vhandles); + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[2]); + face_vhandles.push_back(vhandle[5]); + face_vhandles.push_back(vhandle[4]); + + mesh_.add_face(face_vhandles); + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[3]); + face_vhandles.push_back(vhandle[7]); + face_vhandles.push_back(vhandle[6]); + + mesh_.add_face(face_vhandles); + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[3]); + face_vhandles.push_back(vhandle[4]); + face_vhandles.push_back(vhandle[7]); + + mesh_.add_face(face_vhandles); + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[4]); + face_vhandles.push_back(vhandle[8]); + face_vhandles.push_back(vhandle[7]); + + mesh_.add_face(face_vhandles); + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[4]); + face_vhandles.push_back(vhandle[5]); + face_vhandles.push_back(vhandle[8]); + + mesh_.add_face(face_vhandles); + + // Test setup: + // 6 === 7 === 8 + // | / | / | + // | / | / | + // | / | / | + // 3 === 4 === 5 + // | / | \ | + // | / | \ | + // | / | \ | + // 0 === 1 === 2 + + // Initialize subdivider + OpenMesh::Subdivider::Uniform::Sqrt3T sqrt3; + + // Check setup + EXPECT_EQ(9u, mesh_.n_vertices() ) << "Wrong number of vertices"; + EXPECT_EQ(8u, mesh_.n_faces() ) << "Wrong number of faces"; + + // Execute 3 subdivision steps + sqrt3.attach(mesh_); + sqrt3( 3 ); + sqrt3.detach(); + + // Check setup + EXPECT_EQ(121u, mesh_.n_vertices() ) << "Wrong number of vertices after subdivision with sqrt3"; + EXPECT_EQ(216u, mesh_.n_faces() ) << "Wrong number of faces after subdivision with sqrt3"; +} + + } #endif diff --git a/src/Unittests/unittests_trimesh_ranges.cc b/src/Unittests/unittests_trimesh_ranges.cc index 9a3811bc..e770fcd8 100644 --- a/src/Unittests/unittests_trimesh_ranges.cc +++ b/src/Unittests/unittests_trimesh_ranges.cc @@ -93,6 +93,7 @@ void compare_ranges(RangeT1&& range1, RangeT2&& range2, int offset, bool reverse size_t n = vec1.size(); +/* std::cout << "Vec1 elements: "; for (auto el : vec1) std::cout << el.idx() << " "; @@ -102,6 +103,7 @@ void compare_ranges(RangeT1&& range1, RangeT2&& range2, int offset, bool reverse for (auto el : vec2) std::cout << el.idx() << " "; std::cout << std::endl; +*/ for (size_t i = 0; i < n; ++i) {