Loading [MathJax]/extensions/TeX/AMSmath.js
Radium Engine  1.5.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
OpenMesh.hpp
1 #pragma once
2 
3 #include <Core/RaCore.hpp>
4 #include <Core/Types.hpp>
5 
6 #include <Eigen/Core>
7 #include <Eigen/Geometry>
8 #include <OpenMesh/Core/Mesh/Traits.hh>
9 #include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
10 
11 // We use Eigen::Matrix as base type to represent matrices in OpenMesh.
12 
13 // This is not standard, and several namespace functions are not available in OpenMesh
14 // for Eigen::Matrix.
15 // We need these functions to be defined before including OpenMesh, otherwise some
16 // compilers (e.g. MSVC) will not be able to compile the code.
17 namespace Eigen {
18 
19 template <typename Derived>
20 typename Derived::Scalar dot( Eigen::MatrixBase<Derived> const& v1,
21  Eigen::MatrixBase<Derived> const& v2 ) {
22  return v1.dot( v2 );
23 }
24 
25 template <typename Derived>
26 typename Derived::Scalar norm( Eigen::MatrixBase<Derived> const& v1 ) {
27  return v1.norm();
28 }
29 
30 template <typename Derived>
31 Eigen::MatrixBase<Derived>& normalize( Eigen::MatrixBase<Derived>& v1 ) {
32  v1.normalize();
33  return v1;
34 }
35 
36 template <typename Derived>
37 Eigen::MatrixBase<Derived>& vectorize( Eigen::MatrixBase<Derived>& v1, Scalar a ) {
38  v1.setConstant( a );
39  return v1;
40 }
41 
42 template <typename Derived>
43 typename Derived::Scalar sqrnorm( Eigen::MatrixBase<Derived> const& v1 ) {
44  return v1.squaredNorm();
45 }
46 
47 template <typename Derived>
48 typename Derived::template cross_product_return_type<Derived>::type
49 cross( Eigen::MatrixBase<Derived> const& v1, Eigen::MatrixBase<Derived> const& v2 ) {
50  return v1.cross( v2 );
51 }
52 } // namespace Eigen
53 
54 namespace OpenMesh {
55 template <>
56 struct vector_traits<Ra::Core::Vector3> {
57  using vector_type = Ra::Core::Vector3;
58  using value_type = Scalar;
59  static const size_t size_ = 3;
60  static size_t size() { return 3; }
61 };
62 } // namespace OpenMesh
Definition: Cage.cpp:3