Some chart refinement (early check does not work)

release/4.3a0
dellaert 2014-12-07 12:35:05 +01:00
parent e2f250c160
commit 8db8cb54b0
1 changed files with 20 additions and 7 deletions

View File

@ -85,7 +85,7 @@ protected:
Chart() { Chart() {
(void) &Local; (void) &Local;
(void) &Retract; (void) &Retract;
} // enforce early instantiation. } // enforce early instantiation. TODO does not seem to work
}; };
} // \ namespace manifold } // \ namespace manifold
@ -99,12 +99,19 @@ public:
typedef typename manifold::traits::DefaultChart<T>::type DefaultChart; typedef typename manifold::traits::DefaultChart<T>::type DefaultChart;
BOOST_CONCEPT_USAGE(IsManifold) { BOOST_CONCEPT_USAGE(IsManifold) {
BOOST_STATIC_ASSERT(boost::is_base_of<traits::manifold_tag, structure_category_tag>::value, "This type's structure_category trait does not assert it as a manifold (or derived)"); BOOST_STATIC_ASSERT_MSG(
(boost::is_base_of<traits::manifold_tag, structure_category_tag>::value),
"This type's structure_category trait does not assert it as a manifold (or derived)");
BOOST_STATIC_ASSERT(TangentVector::SizeAtCompileTime == dim); BOOST_STATIC_ASSERT(TangentVector::SizeAtCompileTime == dim);
// no direct usage for manifold since most usage is through a chart BOOST_STATIC_ASSERT_MSG(
(boost::is_base_of<manifold::Chart<T,DefaultChart>, DefaultChart>::value),
"This type's DefaultChart does not derive from manifold::Chart, as required");
// make sure Derived methods in Chart are defined
v = DefaultChart::local(p,q);
q = DefaultChart::retract(p,v);
} }
private: private:
T p; T p,q;
TangentVector v; TangentVector v;
}; };
@ -170,7 +177,9 @@ public:
using group::compose; using group::compose;
using group::between; using group::between;
using group::inverse; using group::inverse;
BOOST_STATIC_ASSERT( boost::is_base_of<traits::group_tag, structure_category_tag>::value, "This type's structure_category trait does not assert it as a group (or derived)"); BOOST_STATIC_ASSERT_MSG(
(boost::is_base_of<traits::group_tag, structure_category_tag>::value),
"This type's structure_category trait does not assert it as a group (or derived)");
e = group::traits::identity<T>::value; e = group::traits::identity<T>::value;
g = compose(g, h); g = compose(g, h);
g = between(g, h); g = between(g, h);
@ -222,7 +231,9 @@ public:
typedef typename traits::structure_category<T>::type structure_category_tag; typedef typename traits::structure_category<T>::type structure_category_tag;
BOOST_CONCEPT_USAGE(IsLieGroup) { BOOST_CONCEPT_USAGE(IsLieGroup) {
BOOST_STATIC_ASSERT(boost::is_base_of<traits::lie_group_tag, structure_category_tag>::value,"This type's trait does not assert it as a Lie group (or derived)"); BOOST_STATIC_ASSERT_MSG(
(boost::is_base_of<traits::lie_group_tag, structure_category_tag>::value),
"This type's trait does not assert it as a Lie group (or derived)");
// TODO Check with Jacobian // TODO Check with Jacobian
// using lie_group::compose; // using lie_group::compose;
// using lie_group::between; // using lie_group::between;
@ -243,7 +254,9 @@ public:
typedef typename traits::structure_category<T>::type structure_category_tag; typedef typename traits::structure_category<T>::type structure_category_tag;
BOOST_CONCEPT_USAGE(IsVectorSpace) { BOOST_CONCEPT_USAGE(IsVectorSpace) {
BOOST_STATIC_ASSERT(boost::is_base_of<traits::vector_space_tag, structure_category_tag>::value,"This type's trait does not assert it as a vector space (or derived)"); BOOST_STATIC_ASSERT_MSG(
(boost::is_base_of<traits::vector_space_tag, structure_category_tag>::value),
"This type's trait does not assert it as a vector space (or derived)");
r = p + q; r = p + q;
r = -p; r = -p;
r = p - q; r = p - q;