GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: include/pinocchio/bindings/python/multibody/fcl/transform.hpp Lines: 0 22 0.0 %
Date: 2024-04-26 13:14:21 Branches: 0 24 0.0 %

Line Branch Exec Source
1
//
2
// Copyright (c) 2019 INRIA
3
//
4
5
#ifndef __pinocchio_python_fcl_transform_hpp__
6
#define __pinocchio_python_fcl_transform_hpp__
7
8
#include <boost/python.hpp>
9
10
#include "pinocchio/spatial/se3.hpp"
11
#include <hpp/fcl/math/transform.h>
12
13
namespace boost { namespace python { namespace converter {
14
15
template<typename Scalar, int Options>
16
struct implicit< ::hpp::fcl::Transform3f,::pinocchio::SE3Tpl<Scalar,Options> >
17
{
18
  typedef ::hpp::fcl::Transform3f Source;
19
  typedef ::pinocchio::SE3Tpl<Scalar,Options> Target;
20
21
  static void* convertible(PyObject* obj)
22
  {
23
    // Find a converter which can produce a Source instance from
24
    // obj. The user has told us that Source can be converted to
25
    // Target, and instantiating construct() below, ensures that
26
    // at compile-time.
27
    return implicit_rvalue_convertible_from_python(obj,
28
                                                   registered<Source>::converters)
29
    ? obj : 0;
30
  }
31
32
  static void construct(PyObject* obj, rvalue_from_python_stage1_data* data)
33
  {
34
    void* storage = reinterpret_cast<rvalue_from_python_storage<Target>*>
35
                   (reinterpret_cast<void*>(data))->storage.bytes;
36
37
    arg_from_python<Source> get_source(obj);
38
    bool convertible = get_source.convertible();
39
    BOOST_VERIFY(convertible);
40
41
    const Source & t = get_source();
42
    new (storage) Target(t.getRotation(),t.getTranslation());
43
44
    // record successful construction
45
    data->convertible = storage;
46
  }
47
};
48
49
template<typename Scalar, int Options>
50
struct implicit< ::pinocchio::SE3Tpl<Scalar,Options>,::hpp::fcl::Transform3f >
51
{
52
  typedef ::pinocchio::SE3Tpl<Scalar,Options> Source;
53
  typedef ::hpp::fcl::Transform3f Target;
54
55
  static void* convertible(PyObject* obj)
56
  {
57
    // Find a converter which can produce a Source instance from
58
    // obj. The user has told us that Source can be converted to
59
    // Target, and instantiating construct() below, ensures that
60
    // at compile-time.
61
    return implicit_rvalue_convertible_from_python(obj,
62
                                                   registered<Source>::converters)
63
    ? obj : 0;
64
  }
65
66
  static void construct(PyObject* obj, rvalue_from_python_stage1_data* data)
67
  {
68
    void* storage = reinterpret_cast<rvalue_from_python_storage<Target>*>
69
                   (reinterpret_cast<void*>(data))->storage.bytes;
70
71
    arg_from_python<Source> get_source(obj);
72
    bool convertible = get_source.convertible();
73
    BOOST_VERIFY(convertible);
74
75
    const Source & M = get_source();
76
    new (storage) Target(M.rotation(),M.translation());
77
78
    // record successful construction
79
    data->convertible = storage;
80
  }
81
};
82
83
}}} // namespace boost::python::converter
84
85
#endif // ifndef __pinocchio_python_fcl_transform_hpp__