From c8c51626dfea8fe9e3cf61b519d3e677357f9f6e Mon Sep 17 00:00:00 2001 From: Alexander Dielen Date: Sun, 14 Aug 2016 13:22:18 +0200 Subject: [PATCH 1/2] Added link directories and log file. --- src/Python/CMakeLists.txt | 21 ++++++++++++++++++--- src/Python/Example/CMakeLists.txt | 4 ++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/Python/CMakeLists.txt b/src/Python/CMakeLists.txt index e622ab80..099786d1 100644 --- a/src/Python/CMakeLists.txt +++ b/src/Python/CMakeLists.txt @@ -11,6 +11,10 @@ IF(NOT DEFINED OPENMESH_PYTHON_VERSION) ENDIF() IF(OPENMESH_BUILD_PYTHON_BINDINGS) + # Create log file + SET(PYTHONLOG "${CMAKE_CURRENT_BINARY_DIR}/PythonLog.txt") + FILE(WRITE ${PYTHONLOG} "") + # Look for the python libs MESSAGE(STATUS "Looking for PythonLibs") FIND_PACKAGE(PythonLibs ${OPENMESH_PYTHON_VERSION} QUIET) @@ -29,13 +33,15 @@ IF(OPENMESH_BUILD_PYTHON_BINDINGS) FOREACH(NAME ${BOOST_PYTHON_COMPONENT_NAMES}) IF(NOT Boost_FOUND) + FILE(APPEND ${PYTHONLOG} "Looking for component ${NAME}\n") FIND_PACKAGE(Boost QUIET COMPONENTS ${NAME}) ENDIF() ENDFOREACH() + FILE(APPEND ${PYTHONLOG} "\n") + IF(Boost_FOUND) MESSAGE(STATUS "Looking for Boost Python -- found") - MESSAGE(STATUS "Checking the Boost Python configuration") SET(CMAKE_TRY_COMPILE_CONFIGURATION "Release") @@ -47,9 +53,16 @@ IF(OPENMESH_BUILD_PYTHON_BINDINGS) Example CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${PYTHON_INCLUDE_DIRS};${Boost_INCLUDE_DIRS}" + "-DLINK_DIRECTORIES:STRING=${Boost_LIBRARY_DIRS}" "-DLINK_LIBRARIES:STRING=${PYTHON_LIBRARIES};${Boost_LIBRARIES}" + OUTPUT_VARIABLE OUTPUT_TRY_COMPILE ) + FILE(APPEND ${PYTHONLOG} "INCLUDE_DIRECTORIES: ${PYTHON_INCLUDE_DIRS};${Boost_INCLUDE_DIRS}\n") + FILE(APPEND ${PYTHONLOG} "LINK_DIRECTORIES: ${Boost_LIBRARY_DIRS}\n") + FILE(APPEND ${PYTHONLOG} "LINK_LIBRARIES: ${PYTHON_LIBRARIES};${Boost_LIBRARIES}\n\n") + FILE(APPEND ${PYTHONLOG} "${OUTPUT_TRY_COMPILE}") + IF(COMPILE_WORKS) # Look for the python interpreter to check if the example works @@ -88,12 +101,14 @@ IF(OPENMESH_BUILD_PYTHON_BINDINGS) FILE(MAKE_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) FILE(GLOB SOURCES *.cc *hh) + + INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ../) + LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) + ADD_LIBRARY(openmesh SHARED ${SOURCES}) install(TARGETS openmesh DESTINATION ${ACG_PROJECT_LIBDIR}/python ) - INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ../) - TARGET_LINK_LIBRARIES( openmesh OpenMeshCore diff --git a/src/Python/Example/CMakeLists.txt b/src/Python/Example/CMakeLists.txt index 10b99d0f..03c278ef 100644 --- a/src/Python/Example/CMakeLists.txt +++ b/src/Python/Example/CMakeLists.txt @@ -3,10 +3,10 @@ PROJECT(Example) FILE(GLOB SOURCES *.cc *hh) -ADD_LIBRARY(example SHARED ${SOURCES}) - INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES}) +LINK_DIRECTORIES(${LINK_DIRECTORIES}) +ADD_LIBRARY(example SHARED ${SOURCES}) TARGET_LINK_LIBRARIES(example ${LINK_LIBRARIES}) SET_TARGET_PROPERTIES( From f90c6da1b858a0348348b008f5ba2aa40c44c4e8 Mon Sep 17 00:00:00 2001 From: Alexander Dielen Date: Tue, 23 Aug 2016 21:56:15 +0200 Subject: [PATCH 2/2] Made member function pointer types explicit. This gets rid of a preprocessor conditional and sidesteps a bug in msvc. --- src/Python/Vector.hh | 124 +++++++++++++++++++++---------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/src/Python/Vector.hh b/src/Python/Vector.hh index fc453816..933b730a 100644 --- a/src/Python/Vector.hh +++ b/src/Python/Vector.hh @@ -41,59 +41,56 @@ Scalar get_item(Vector& _vec, int _index) { namespace { template struct Factory { - typedef OpenMesh::VectorT Vector2; - typedef OpenMesh::VectorT Vector3; - typedef OpenMesh::VectorT Vector4; + typedef OpenMesh::VectorT Vector2; + typedef OpenMesh::VectorT Vector3; + typedef OpenMesh::VectorT Vector4; - static Vector2 *vec2_default() { - return new Vector2(Scalar(), Scalar()); - } - static Vector2 *vec2_user_defined(const Scalar& _v0, const Scalar& _v1) { - return new Vector2(_v0, _v1); - } - static Vector3 *vec3_default() { - return new Vector3(Scalar(), Scalar(), Scalar()); - } - static Vector3 *vec3_user_defined(const Scalar& _v0, const Scalar& _v1, const Scalar& _v2) { - return new Vector3(_v0, _v1, _v2); - } - static Vector4 *vec4_default() { - return new Vector4(Scalar(), Scalar(), Scalar(), Scalar()); - } - static Vector4 *vec4_user_defined(const Scalar& _v0, const Scalar& _v1, const Scalar& _v2, const Scalar& _v3) { - return new Vector4(_v0, _v1, _v2, _v3); - } + static Vector2 *vec2_default() { + return new Vector2(Scalar(), Scalar()); + } + static Vector2 *vec2_user_defined(const Scalar& _v0, const Scalar& _v1) { + return new Vector2(_v0, _v1); + } + static Vector3 *vec3_default() { + return new Vector3(Scalar(), Scalar(), Scalar()); + } + static Vector3 *vec3_user_defined(const Scalar& _v0, const Scalar& _v1, const Scalar& _v2) { + return new Vector3(_v0, _v1, _v2); + } + static Vector4 *vec4_default() { + return new Vector4(Scalar(), Scalar(), Scalar(), Scalar()); + } + static Vector4 *vec4_user_defined(const Scalar& _v0, const Scalar& _v1, const Scalar& _v2, const Scalar& _v3) { + return new Vector4(_v0, _v1, _v2, _v3); + } }; } -template +template void defInitMod(class_< OpenMesh::VectorT > &classVector) { - classVector - .def("__init__", make_constructor(&Factory::vec2_default)) - .def("__init__", make_constructor(&Factory::vec2_user_defined)) - ; + classVector + .def("__init__", make_constructor(&Factory::vec2_default)) + .def("__init__", make_constructor(&Factory::vec2_user_defined)) + ; } -template + +template void defInitMod(class_< OpenMesh::VectorT > &classVector) { - classVector - .def("__init__", make_constructor(&Factory::vec3_default)) - .def("__init__", make_constructor(&Factory::vec3_user_defined)) -#if (_MSC_VER >= 1900 || __cplusplus > 199711L || defined(__GXX_EXPERIMENTAL_CXX0X__)) && !defined(OPENMESH_VECTOR_LEGACY) - .def("__mod__", &Factory::Vector3::template operator%) - ; - def("cross", &Factory::Vector3::template operator%); -#else - .def("__mod__", &Factory::Vector3::operator%) - ; - def("cross", &Factory::Vector3::operator%); -#endif + Vector (Vector::*cross)(const Vector&) const = &Vector::operator%; + classVector + .def("__init__", make_constructor(&Factory::vec3_default)) + .def("__init__", make_constructor(&Factory::vec3_user_defined)) + .def("__mod__", cross) + ; + def("cross", cross); } -template + +template void defInitMod(class_< OpenMesh::VectorT > &classVector) { - classVector - .def("__init__", make_constructor(&Factory::vec4_default)) - .def("__init__", make_constructor(&Factory::vec4_user_defined)) - ; + classVector + .def("__init__", make_constructor(&Factory::vec4_default)) + .def("__init__", make_constructor(&Factory::vec4_user_defined)) + ; } /** @@ -119,6 +116,19 @@ void expose_vec(const char *_name) { Vector (Vector::*max_vector)(const Vector&) const = &Vector::max; Vector (Vector::*min_vector)(const Vector&) const = &Vector::min; + Scalar (Vector::*dot )(const Vector&) const = &Vector::operator|; + Scalar (Vector::*norm )(void ) const = &Vector::norm; + Scalar (Vector::*length )(void ) const = &Vector::length; + Scalar (Vector::*sqrnorm )(void ) const = &Vector::sqrnorm; + Vector& (Vector::*normalize )(void ) = &Vector::normalize; + Vector& (Vector::*normalize_cond)(void ) = &Vector::normalize_cond; + +#if (_MSC_VER >= 1900 || __cplusplus > 199711L || defined(__GXX_EXPERIMENTAL_CXX0X__)) && !defined(OPENMESH_VECTOR_LEGACY) + Vector (Vector::*normalized)() const = &Vector::normalized; +#else + const Vector (Vector::*normalized)() const = &Vector::normalized; +#endif + class_ classVector = class_(_name); classVector @@ -144,23 +154,13 @@ void expose_vec(const char *_name) { .def("vectorize", &Vector::vectorize, return_internal_reference<>()) .def(self < self) -#if (_MSC_VER >= 1900 || __cplusplus > 199711L || defined(__GXX_EXPERIMENTAL_CXX0X__)) && !defined(OPENMESH_VECTOR_LEGACY) - .def("dot", &Vector::template operator|) - .def("norm", &Vector::template norm) - .def("length", &Vector::template length) - .def("sqrnorm", &Vector::template sqrnorm) - .def("normalize", &Vector::template normalize, return_internal_reference<>()) - .def("normalized", &Vector::template normalized) - .def("normalize_cond", &Vector::template normalize_cond, return_internal_reference<>()) -#else - .def("dot", &Vector::operator|) - .def("norm", &Vector::norm) - .def("length", &Vector::length) - .def("sqrnorm", &Vector::sqrnorm) - .def("normalize", &Vector::normalize, return_internal_reference<>()) - .def("normalized", &Vector::normalized) - .def("normalize_cond", &Vector::normalize_cond, return_internal_reference<>()) -#endif + .def("dot", dot) + .def("norm", norm) + .def("length", length) + .def("sqrnorm", sqrnorm) + .def("normalized", normalized) + .def("normalize", normalize, return_internal_reference<>()) + .def("normalize_cond", normalize_cond, return_internal_reference<>()) .def("l1_norm", &Vector::l1_norm) .def("l8_norm", &Vector::l8_norm) @@ -184,7 +184,7 @@ void expose_vec(const char *_name) { .staticmethod("vectorized") ; - defInitMod(classVector); + defInitMod(classVector); } } // namespace OpenMesh